abstract-sheet 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (299) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/LICENSE +21 -0
  3. package/README.md +7 -0
  4. package/lib/abstract-3d.d.ts +313 -0
  5. package/lib/abstract-3d.d.ts.map +1 -0
  6. package/lib/abstract-3d.js +333 -0
  7. package/lib/abstract-3d.js.map +1 -0
  8. package/lib/abstract-sheet/abstract-sheet-xsd.d.ts +2 -0
  9. package/lib/abstract-sheet/abstract-sheet-xsd.d.ts.map +1 -0
  10. package/lib/abstract-sheet/abstract-sheet-xsd.js +150 -0
  11. package/lib/abstract-sheet/abstract-sheet-xsd.js.map +1 -0
  12. package/lib/abstract-sheet/abstract-sheet.d.ts +68 -0
  13. package/lib/abstract-sheet/abstract-sheet.d.ts.map +1 -0
  14. package/lib/abstract-sheet/abstract-sheet.js +19 -0
  15. package/lib/abstract-sheet/abstract-sheet.js.map +1 -0
  16. package/lib/abstract-sheet/index.d.ts +3 -0
  17. package/lib/abstract-sheet/index.d.ts.map +1 -0
  18. package/lib/abstract-sheet/index.js +19 -0
  19. package/lib/abstract-sheet/index.js.map +1 -0
  20. package/lib/abstract-sheet-exporters/_xlsx-sheet.d.ts +5 -0
  21. package/lib/abstract-sheet-exporters/_xlsx-sheet.d.ts.map +1 -0
  22. package/lib/abstract-sheet-exporters/_xlsx-sheet.js +171 -0
  23. package/lib/abstract-sheet-exporters/_xlsx-sheet.js.map +1 -0
  24. package/lib/abstract-sheet-exporters/csv.d.ts +16 -0
  25. package/lib/abstract-sheet-exporters/csv.d.ts.map +1 -0
  26. package/lib/abstract-sheet-exporters/csv.js +47 -0
  27. package/lib/abstract-sheet-exporters/csv.js.map +1 -0
  28. package/lib/abstract-sheet-exporters/index.d.ts +3 -0
  29. package/lib/abstract-sheet-exporters/index.d.ts.map +1 -0
  30. package/lib/abstract-sheet-exporters/index.js +19 -0
  31. package/lib/abstract-sheet-exporters/index.js.map +1 -0
  32. package/lib/abstract-sheet-exporters/xlsx.d.ts +4 -0
  33. package/lib/abstract-sheet-exporters/xlsx.d.ts.map +1 -0
  34. package/lib/abstract-sheet-exporters/xlsx.js +42 -0
  35. package/lib/abstract-sheet-exporters/xlsx.js.map +1 -0
  36. package/lib/abstract-sheet-xml/abstract-sheet-of-xml.d.ts +3 -0
  37. package/lib/abstract-sheet-xml/abstract-sheet-of-xml.d.ts.map +1 -0
  38. package/lib/abstract-sheet-xml/abstract-sheet-of-xml.js +21 -0
  39. package/lib/abstract-sheet-xml/abstract-sheet-of-xml.js.map +1 -0
  40. package/lib/abstract-sheet-xml/abstract-sheet-xml.d.ts +4 -0
  41. package/lib/abstract-sheet-xml/abstract-sheet-xml.d.ts.map +1 -0
  42. package/lib/abstract-sheet-xml/abstract-sheet-xml.js +122 -0
  43. package/lib/abstract-sheet-xml/abstract-sheet-xml.js.map +1 -0
  44. package/lib/abstract-sheet-xml/creator.d.ts +3 -0
  45. package/lib/abstract-sheet-xml/creator.d.ts.map +1 -0
  46. package/lib/abstract-sheet-xml/creator.js +118 -0
  47. package/lib/abstract-sheet-xml/creator.js.map +1 -0
  48. package/lib/abstract-sheet-xml/index.d.ts +3 -0
  49. package/lib/abstract-sheet-xml/index.d.ts.map +1 -0
  50. package/lib/abstract-sheet-xml/index.js +19 -0
  51. package/lib/abstract-sheet-xml/index.js.map +1 -0
  52. package/lib/abstract-sheet-xml/mustache-xml/index.d.ts +3 -0
  53. package/lib/abstract-sheet-xml/mustache-xml/index.d.ts.map +1 -0
  54. package/lib/abstract-sheet-xml/mustache-xml/index.js +19 -0
  55. package/lib/abstract-sheet-xml/mustache-xml/index.js.map +1 -0
  56. package/lib/abstract-sheet-xml/mustache-xml/parse-mustache-xml.d.ts +14 -0
  57. package/lib/abstract-sheet-xml/mustache-xml/parse-mustache-xml.d.ts.map +1 -0
  58. package/lib/abstract-sheet-xml/mustache-xml/parse-mustache-xml.js +140 -0
  59. package/lib/abstract-sheet-xml/mustache-xml/parse-mustache-xml.js.map +1 -0
  60. package/lib/abstract-sheet-xml/mustache-xml/validate-mustache-xml.d.ts +21 -0
  61. package/lib/abstract-sheet-xml/mustache-xml/validate-mustache-xml.d.ts.map +1 -0
  62. package/lib/abstract-sheet-xml/mustache-xml/validate-mustache-xml.js +219 -0
  63. package/lib/abstract-sheet-xml/mustache-xml/validate-mustache-xml.js.map +1 -0
  64. package/lib/abstract-sheet-xml/xsd.d.ts +2 -0
  65. package/lib/abstract-sheet-xml/xsd.d.ts.map +1 -0
  66. package/lib/abstract-sheet-xml/xsd.js +14 -0
  67. package/lib/abstract-sheet-xml/xsd.js.map +1 -0
  68. package/lib/abstract-sheet.d.ts +59 -0
  69. package/lib/abstract-sheet.d.ts.map +1 -0
  70. package/lib/abstract-sheet.js +3 -0
  71. package/lib/abstract-sheet.js.map +1 -0
  72. package/lib/index.d.ts +4 -0
  73. package/lib/index.d.ts.map +1 -0
  74. package/lib/index.js +20 -0
  75. package/lib/index.js.map +1 -0
  76. package/lib/renderers/_xlsx-sheet.d.ts +5 -0
  77. package/lib/renderers/_xlsx-sheet.d.ts.map +1 -0
  78. package/lib/renderers/_xlsx-sheet.js +171 -0
  79. package/lib/renderers/_xlsx-sheet.js.map +1 -0
  80. package/lib/renderers/csv.d.ts +7 -0
  81. package/lib/renderers/csv.d.ts.map +1 -0
  82. package/lib/renderers/csv.js +35 -0
  83. package/lib/renderers/csv.js.map +1 -0
  84. package/lib/renderers/dxf/color.d.ts +2 -0
  85. package/lib/renderers/dxf/color.d.ts.map +1 -0
  86. package/lib/renderers/dxf/color.js +6 -0
  87. package/lib/renderers/dxf/color.js.map +1 -0
  88. package/lib/renderers/dxf/dxf-encoding.d.ts +7 -0
  89. package/lib/renderers/dxf/dxf-encoding.d.ts.map +1 -0
  90. package/lib/renderers/dxf/dxf-encoding.js +343 -0
  91. package/lib/renderers/dxf/dxf-encoding.js.map +1 -0
  92. package/lib/renderers/dxf/dxf-geometries/dxf-box.d.ts +3 -0
  93. package/lib/renderers/dxf/dxf-geometries/dxf-box.d.ts.map +1 -0
  94. package/lib/renderers/dxf/dxf-geometries/dxf-box.js +54 -0
  95. package/lib/renderers/dxf/dxf-geometries/dxf-box.js.map +1 -0
  96. package/lib/renderers/dxf/dxf-geometries/dxf-cone.d.ts +3 -0
  97. package/lib/renderers/dxf/dxf-geometries/dxf-cone.d.ts.map +1 -0
  98. package/lib/renderers/dxf/dxf-geometries/dxf-cone.js +55 -0
  99. package/lib/renderers/dxf/dxf-geometries/dxf-cone.js.map +1 -0
  100. package/lib/renderers/dxf/dxf-geometries/dxf-cylinder.d.ts +3 -0
  101. package/lib/renderers/dxf/dxf-geometries/dxf-cylinder.d.ts.map +1 -0
  102. package/lib/renderers/dxf/dxf-geometries/dxf-cylinder.js +64 -0
  103. package/lib/renderers/dxf/dxf-geometries/dxf-cylinder.js.map +1 -0
  104. package/lib/renderers/dxf/dxf-geometries/dxf-plane.d.ts +3 -0
  105. package/lib/renderers/dxf/dxf-geometries/dxf-plane.d.ts.map +1 -0
  106. package/lib/renderers/dxf/dxf-geometries/dxf-plane.js +39 -0
  107. package/lib/renderers/dxf/dxf-geometries/dxf-plane.js.map +1 -0
  108. package/lib/renderers/dxf/dxf-geometries/dxf-polygon.d.ts +3 -0
  109. package/lib/renderers/dxf/dxf-geometries/dxf-polygon.d.ts.map +1 -0
  110. package/lib/renderers/dxf/dxf-geometries/dxf-polygon.js +62 -0
  111. package/lib/renderers/dxf/dxf-geometries/dxf-polygon.js.map +1 -0
  112. package/lib/renderers/dxf/dxf-geometries/dxf-shape.d.ts +3 -0
  113. package/lib/renderers/dxf/dxf-geometries/dxf-shape.d.ts.map +1 -0
  114. package/lib/renderers/dxf/dxf-geometries/dxf-shape.js +63 -0
  115. package/lib/renderers/dxf/dxf-geometries/dxf-shape.js.map +1 -0
  116. package/lib/renderers/dxf/dxf.d.ts +3 -0
  117. package/lib/renderers/dxf/dxf.d.ts.map +1 -0
  118. package/lib/renderers/dxf/dxf.js +64 -0
  119. package/lib/renderers/dxf/dxf.js.map +1 -0
  120. package/lib/renderers/dxf/index.d.ts +2 -0
  121. package/lib/renderers/dxf/index.d.ts.map +1 -0
  122. package/lib/renderers/dxf/index.js +18 -0
  123. package/lib/renderers/dxf/index.js.map +1 -0
  124. package/lib/renderers/index.d.ts +3 -0
  125. package/lib/renderers/index.d.ts.map +1 -0
  126. package/lib/renderers/index.js +19 -0
  127. package/lib/renderers/index.js.map +1 -0
  128. package/lib/renderers/react/index.d.ts +6 -0
  129. package/lib/renderers/react/index.d.ts.map +1 -0
  130. package/lib/renderers/react/index.js +21 -0
  131. package/lib/renderers/react/index.js.map +1 -0
  132. package/lib/renderers/react/react-camera.d.ts +60 -0
  133. package/lib/renderers/react/react-camera.d.ts.map +1 -0
  134. package/lib/renderers/react/react-camera.js +156 -0
  135. package/lib/renderers/react/react-camera.js.map +1 -0
  136. package/lib/renderers/react/react-dimension.d.ts +16 -0
  137. package/lib/renderers/react/react-dimension.d.ts.map +1 -0
  138. package/lib/renderers/react/react-dimension.js +59 -0
  139. package/lib/renderers/react/react-dimension.js.map +1 -0
  140. package/lib/renderers/react/react-group.d.ts +18 -0
  141. package/lib/renderers/react/react-group.d.ts.map +1 -0
  142. package/lib/renderers/react/react-group.js +62 -0
  143. package/lib/renderers/react/react-group.js.map +1 -0
  144. package/lib/renderers/react/react-hotspot.d.ts +30 -0
  145. package/lib/renderers/react/react-hotspot.d.ts.map +1 -0
  146. package/lib/renderers/react/react-hotspot.js +71 -0
  147. package/lib/renderers/react/react-hotspot.js.map +1 -0
  148. package/lib/renderers/react/react-material.d.ts +14 -0
  149. package/lib/renderers/react/react-material.d.ts.map +1 -0
  150. package/lib/renderers/react/react-material.js +54 -0
  151. package/lib/renderers/react/react-material.js.map +1 -0
  152. package/lib/renderers/react/react-mesh.d.ts +10 -0
  153. package/lib/renderers/react/react-mesh.d.ts.map +1 -0
  154. package/lib/renderers/react/react-mesh.js +238 -0
  155. package/lib/renderers/react/react-mesh.js.map +1 -0
  156. package/lib/renderers/react/react-scene.d.ts +20 -0
  157. package/lib/renderers/react/react-scene.d.ts.map +1 -0
  158. package/lib/renderers/react/react-scene.js +50 -0
  159. package/lib/renderers/react/react-scene.js.map +1 -0
  160. package/lib/renderers/react/react.d.ts +30 -0
  161. package/lib/renderers/react/react.d.ts.map +1 -0
  162. package/lib/renderers/react/react.js +64 -0
  163. package/lib/renderers/react/react.js.map +1 -0
  164. package/lib/renderers/shared.d.ts +27 -0
  165. package/lib/renderers/shared.d.ts.map +1 -0
  166. package/lib/renderers/shared.js +174 -0
  167. package/lib/renderers/shared.js.map +1 -0
  168. package/lib/renderers/step/index.d.ts +2 -0
  169. package/lib/renderers/step/index.d.ts.map +1 -0
  170. package/lib/renderers/step/index.js +18 -0
  171. package/lib/renderers/step/index.js.map +1 -0
  172. package/lib/renderers/step/step-defintion.d.ts +1 -0
  173. package/lib/renderers/step/step-defintion.d.ts.map +1 -0
  174. package/lib/renderers/step/step-defintion.js +7 -0
  175. package/lib/renderers/step/step-defintion.js.map +1 -0
  176. package/lib/renderers/step/step-encoding.d.ts +53 -0
  177. package/lib/renderers/step/step-encoding.d.ts.map +1 -0
  178. package/lib/renderers/step/step-encoding.js +118 -0
  179. package/lib/renderers/step/step-encoding.js.map +1 -0
  180. package/lib/renderers/step/step-geometries/step-box.d.ts +4 -0
  181. package/lib/renderers/step/step-geometries/step-box.d.ts.map +1 -0
  182. package/lib/renderers/step/step-geometries/step-box.js +75 -0
  183. package/lib/renderers/step/step-geometries/step-box.js.map +1 -0
  184. package/lib/renderers/step/step-geometries/step-cylinder.d.ts +4 -0
  185. package/lib/renderers/step/step-geometries/step-cylinder.d.ts.map +1 -0
  186. package/lib/renderers/step/step-geometries/step-cylinder.js +39 -0
  187. package/lib/renderers/step/step-geometries/step-cylinder.js.map +1 -0
  188. package/lib/renderers/step/step-geometries/step-plane.d.ts +4 -0
  189. package/lib/renderers/step/step-geometries/step-plane.d.ts.map +1 -0
  190. package/lib/renderers/step/step-geometries/step-plane.js +32 -0
  191. package/lib/renderers/step/step-geometries/step-plane.js.map +1 -0
  192. package/lib/renderers/step/step.d.ts +3 -0
  193. package/lib/renderers/step/step.d.ts.map +1 -0
  194. package/lib/renderers/step/step.js +73 -0
  195. package/lib/renderers/step/step.js.map +1 -0
  196. package/lib/renderers/stl/index.d.ts +2 -0
  197. package/lib/renderers/stl/index.d.ts.map +1 -0
  198. package/lib/renderers/stl/index.js +18 -0
  199. package/lib/renderers/stl/index.js.map +1 -0
  200. package/lib/renderers/stl/stl-encoding.d.ts +4 -0
  201. package/lib/renderers/stl/stl-encoding.d.ts.map +1 -0
  202. package/lib/renderers/stl/stl-encoding.js +26 -0
  203. package/lib/renderers/stl/stl-encoding.js.map +1 -0
  204. package/lib/renderers/stl/stl-geometries/stl-box.d.ts +3 -0
  205. package/lib/renderers/stl/stl-geometries/stl-box.d.ts.map +1 -0
  206. package/lib/renderers/stl/stl-geometries/stl-box.js +57 -0
  207. package/lib/renderers/stl/stl-geometries/stl-box.js.map +1 -0
  208. package/lib/renderers/stl/stl-geometries/stl-cone.d.ts +3 -0
  209. package/lib/renderers/stl/stl-geometries/stl-cone.d.ts.map +1 -0
  210. package/lib/renderers/stl/stl-geometries/stl-cone.js +54 -0
  211. package/lib/renderers/stl/stl-geometries/stl-cone.js.map +1 -0
  212. package/lib/renderers/stl/stl-geometries/stl-cylinder.d.ts +3 -0
  213. package/lib/renderers/stl/stl-geometries/stl-cylinder.d.ts.map +1 -0
  214. package/lib/renderers/stl/stl-geometries/stl-cylinder.js +62 -0
  215. package/lib/renderers/stl/stl-geometries/stl-cylinder.js.map +1 -0
  216. package/lib/renderers/stl/stl-geometries/stl-plane.d.ts +3 -0
  217. package/lib/renderers/stl/stl-geometries/stl-plane.d.ts.map +1 -0
  218. package/lib/renderers/stl/stl-geometries/stl-plane.js +44 -0
  219. package/lib/renderers/stl/stl-geometries/stl-plane.js.map +1 -0
  220. package/lib/renderers/stl/stl-geometries/stl-polygon.d.ts +3 -0
  221. package/lib/renderers/stl/stl-geometries/stl-polygon.d.ts.map +1 -0
  222. package/lib/renderers/stl/stl-geometries/stl-polygon.js +59 -0
  223. package/lib/renderers/stl/stl-geometries/stl-polygon.js.map +1 -0
  224. package/lib/renderers/stl/stl-geometries/stl-shape.d.ts +3 -0
  225. package/lib/renderers/stl/stl-geometries/stl-shape.d.ts.map +1 -0
  226. package/lib/renderers/stl/stl-geometries/stl-shape.js +59 -0
  227. package/lib/renderers/stl/stl-geometries/stl-shape.js.map +1 -0
  228. package/lib/renderers/stl/stl.d.ts +3 -0
  229. package/lib/renderers/stl/stl.d.ts.map +1 -0
  230. package/lib/renderers/stl/stl.js +58 -0
  231. package/lib/renderers/stl/stl.js.map +1 -0
  232. package/lib/renderers/svg/index.d.ts +3 -0
  233. package/lib/renderers/svg/index.d.ts.map +1 -0
  234. package/lib/renderers/svg/index.js +18 -0
  235. package/lib/renderers/svg/index.js.map +1 -0
  236. package/lib/renderers/svg/svg-encoding.d.ts +15 -0
  237. package/lib/renderers/svg/svg-encoding.d.ts.map +1 -0
  238. package/lib/renderers/svg/svg-encoding.js +29 -0
  239. package/lib/renderers/svg/svg-encoding.js.map +1 -0
  240. package/lib/renderers/svg/svg-geometries/shared.d.ts +12 -0
  241. package/lib/renderers/svg/svg-geometries/shared.d.ts.map +1 -0
  242. package/lib/renderers/svg/svg-geometries/shared.js +12 -0
  243. package/lib/renderers/svg/svg-geometries/shared.js.map +1 -0
  244. package/lib/renderers/svg/svg-geometries/svg-box.d.ts +4 -0
  245. package/lib/renderers/svg/svg-geometries/svg-box.d.ts.map +1 -0
  246. package/lib/renderers/svg/svg-geometries/svg-box.js +70 -0
  247. package/lib/renderers/svg/svg-geometries/svg-box.js.map +1 -0
  248. package/lib/renderers/svg/svg-geometries/svg-cone.d.ts +4 -0
  249. package/lib/renderers/svg/svg-geometries/svg-cone.d.ts.map +1 -0
  250. package/lib/renderers/svg/svg-geometries/svg-cone.js +70 -0
  251. package/lib/renderers/svg/svg-geometries/svg-cone.js.map +1 -0
  252. package/lib/renderers/svg/svg-geometries/svg-cylinder.d.ts +4 -0
  253. package/lib/renderers/svg/svg-geometries/svg-cylinder.d.ts.map +1 -0
  254. package/lib/renderers/svg/svg-geometries/svg-cylinder.js +76 -0
  255. package/lib/renderers/svg/svg-geometries/svg-cylinder.js.map +1 -0
  256. package/lib/renderers/svg/svg-geometries/svg-line.d.ts +4 -0
  257. package/lib/renderers/svg/svg-geometries/svg-line.d.ts.map +1 -0
  258. package/lib/renderers/svg/svg-geometries/svg-line.js +39 -0
  259. package/lib/renderers/svg/svg-geometries/svg-line.js.map +1 -0
  260. package/lib/renderers/svg/svg-geometries/svg-plane.d.ts +5 -0
  261. package/lib/renderers/svg/svg-geometries/svg-plane.d.ts.map +1 -0
  262. package/lib/renderers/svg/svg-geometries/svg-plane.js +57 -0
  263. package/lib/renderers/svg/svg-geometries/svg-plane.js.map +1 -0
  264. package/lib/renderers/svg/svg-geometries/svg-polygon.d.ts +4 -0
  265. package/lib/renderers/svg/svg-geometries/svg-polygon.d.ts.map +1 -0
  266. package/lib/renderers/svg/svg-geometries/svg-polygon.js +20 -0
  267. package/lib/renderers/svg/svg-geometries/svg-polygon.js.map +1 -0
  268. package/lib/renderers/svg/svg-geometries/svg-shape.d.ts +4 -0
  269. package/lib/renderers/svg/svg-geometries/svg-shape.d.ts.map +1 -0
  270. package/lib/renderers/svg/svg-geometries/svg-shape.js +20 -0
  271. package/lib/renderers/svg/svg-geometries/svg-shape.js.map +1 -0
  272. package/lib/renderers/svg/svg-geometries/svg-text.d.ts +4 -0
  273. package/lib/renderers/svg/svg-geometries/svg-text.d.ts.map +1 -0
  274. package/lib/renderers/svg/svg-geometries/svg-text.js +46 -0
  275. package/lib/renderers/svg/svg-geometries/svg-text.js.map +1 -0
  276. package/lib/renderers/svg/svg.d.ts +10 -0
  277. package/lib/renderers/svg/svg.d.ts.map +1 -0
  278. package/lib/renderers/svg/svg.js +117 -0
  279. package/lib/renderers/svg/svg.js.map +1 -0
  280. package/lib/renderers/xlsx.d.ts +4 -0
  281. package/lib/renderers/xlsx.d.ts.map +1 -0
  282. package/lib/renderers/xlsx.js +43 -0
  283. package/lib/renderers/xlsx.js.map +1 -0
  284. package/package.json +28 -0
  285. package/src/abstract-sheet/abstract-sheet-xsd.ts +146 -0
  286. package/src/abstract-sheet/abstract-sheet-xsd.xml +146 -0
  287. package/src/abstract-sheet/abstract-sheet.ts +85 -0
  288. package/src/abstract-sheet/index.ts +2 -0
  289. package/src/abstract-sheet-exporters/_xlsx-sheet.ts +156 -0
  290. package/src/abstract-sheet-exporters/csv.ts +36 -0
  291. package/src/abstract-sheet-exporters/index.ts +2 -0
  292. package/src/abstract-sheet-exporters/xlsx.ts +15 -0
  293. package/src/abstract-sheet-xml/abstract-sheet-xml.ts +128 -0
  294. package/src/abstract-sheet-xml/index.ts +2 -0
  295. package/src/abstract-sheet-xml/mustache-xml/index.ts +2 -0
  296. package/src/abstract-sheet-xml/mustache-xml/parse-mustache-xml.ts +134 -0
  297. package/src/abstract-sheet-xml/mustache-xml/validate-mustache-xml.ts +272 -0
  298. package/src/custom-typings/xml.d.ts +1 -0
  299. package/src/index.ts +3 -0
@@ -0,0 +1,272 @@
1
+ import * as FXmlP from "fast-xml-parser";
2
+ import { XmlElement, parseXml, findElement } from "./parse-mustache-xml";
3
+
4
+ enum ErrorType {
5
+ warning = 0,
6
+ error = 1,
7
+ }
8
+
9
+ type Range = {
10
+ readonly startLineNumber: number;
11
+ readonly startColumn: number;
12
+ readonly endLineNumber: number;
13
+ readonly endColumn: number;
14
+ };
15
+ type Position = {
16
+ readonly lineNumber: number;
17
+ readonly column: number;
18
+ };
19
+
20
+ type ErrorObject = {
21
+ readonly range: Range;
22
+ readonly options: ErrorOptions;
23
+ };
24
+
25
+ type ErrorOptions = {
26
+ readonly className: string;
27
+ // eslint-disable-next-line functional/prefer-readonly-type
28
+ readonly hoverMessage: Array<{
29
+ readonly value: string;
30
+ }>;
31
+ };
32
+
33
+ type XmlError = {
34
+ readonly message: string;
35
+ readonly type: ErrorType;
36
+ readonly range: Range;
37
+ };
38
+
39
+ // eslint-disable-next-line functional/prefer-readonly-type
40
+ export function validateXml(fullXml: string, xsdSchema: ReadonlyArray<XmlElement>): Array<ErrorObject> {
41
+ const errors: Array<XmlError> = [];
42
+
43
+ // ignore all mustache brackets
44
+ const matchMustacheBrackets = /{{.*}}(?!([\S]))/g;
45
+ // Ignore xml comments
46
+ const xmlComments = /<!--[^>]*-->/g;
47
+
48
+ // Replace matches with spaces of same length
49
+ let cleanedXml = fullXml.replace(matchMustacheBrackets, (m) => " ".repeat(m.length));
50
+ cleanedXml = cleanedXml.replace(xmlComments, (m) => {
51
+ const x = (m.match(/^.*$/gm) || []).map((m2) => " ".repeat(m2.length));
52
+ return x.join("\n");
53
+ });
54
+
55
+ const xml = `<xml>\n${cleanedXml}\n</xml>`;
56
+
57
+ if (xml) {
58
+ try {
59
+ const result = FXmlP.XMLValidator.validate(xml, {
60
+ allowBooleanAttributes: true,
61
+ });
62
+
63
+ if (result !== true) {
64
+ errors.push(getErrorFromException(result, xml));
65
+ }
66
+ const entryPointXml = parseXml(xml)[0]!;
67
+
68
+ const entryPointSchema = xsdSchema[0]!;
69
+ let pos = 0;
70
+ const lines = cleanedXml.split("\n");
71
+ const getRangeOfElement = (text: string, incrementPosition: boolean = true): Range => {
72
+ if (text === undefined) {
73
+ const monacoPosition = getPositionFromIndex(lines, pos);
74
+ return toRange(
75
+ monacoPosition.lineNumber,
76
+ monacoPosition.column,
77
+ monacoPosition.lineNumber,
78
+ monacoPosition.column + 5
79
+ );
80
+ }
81
+ const position = cleanedXml.indexOf(text, pos);
82
+ if (incrementPosition) {
83
+ pos = position >= pos ? position + text.length : pos;
84
+ }
85
+ const monacoPosition = getPositionFromIndex(lines, position);
86
+ return toRange(
87
+ monacoPosition.lineNumber,
88
+ monacoPosition.column,
89
+ monacoPosition.lineNumber,
90
+ monacoPosition.column + text.length
91
+ );
92
+ };
93
+
94
+ const validationErrors = entryPointXml.children.flatMap((child) =>
95
+ validateElements(child, undefined, entryPointSchema, getRangeOfElement)
96
+ );
97
+ errors.push(...validationErrors);
98
+ } catch (e) {
99
+ errors.push(createError(e.message, ErrorType.error, toRange(1, 1, 1, 100)));
100
+ }
101
+ }
102
+
103
+ return errors.map((e) => getDecorationsFromError(e));
104
+ }
105
+
106
+ function validateElements(
107
+ element: XmlElement,
108
+ schemaElement: XmlElement | undefined,
109
+ completeSchema: XmlElement,
110
+ getRangeOfElement: (elementName: string, incrementPosition?: boolean) => Range
111
+ ): ReadonlyArray<XmlError> {
112
+ const errors: Array<XmlError> = [];
113
+
114
+ // Validate element name
115
+ const tagName = element.tagName;
116
+ const range = getRangeOfElement(tagName);
117
+
118
+ const slashPosition = getRangeOfElement("/", false);
119
+ const closingTagPosition = getRangeOfElement(">", false);
120
+ const isClosed = rangeLessThan(slashPosition, closingTagPosition);
121
+
122
+ const validElements = Object.values(completeSchema.children);
123
+ const schemaName = schemaElement?.attributes.type || tagName;
124
+ const foundSchemaElement = findElement(validElements, schemaName);
125
+
126
+ if (!foundSchemaElement) {
127
+ return [createError(`"${tagName}" is not a valid element`, ErrorType.error, range)];
128
+ }
129
+
130
+ const possibleAttributes = Array.from(foundSchemaElement.children).flatMap((c) =>
131
+ c.tagName === "attribute" ? c : []
132
+ );
133
+
134
+ // Validate required attributes
135
+ for (const possibleAttribute of possibleAttributes) {
136
+ const attributeName = possibleAttribute.attributes.name;
137
+ const isRequired = possibleAttribute.attributes.use;
138
+ if (attributeName && isRequired && isRequired === "required") {
139
+ if (element.attributes[attributeName] === undefined) {
140
+ errors.push(createError(`"${attributeName}" is a required attribute on "${tagName}"`, ErrorType.error, range));
141
+ }
142
+ }
143
+ }
144
+
145
+ // Validate existing attributes
146
+ for (const [attrKey, attrVal] of Object.entries(element.attributes)) {
147
+ const possibleAttrNames = possibleAttributes.flatMap((p) => p.attributes.name || []);
148
+ const attrText = typeof attrVal === "string" ? `${attrKey}="${attrVal}"` : attrKey;
149
+ const attrRange = getRangeOfElement(attrText, false);
150
+ if (!possibleAttrNames.includes(attrKey)) {
151
+ errors.push(createError(`"${attrKey}" is a not a valid attribute on "${tagName}"`, ErrorType.error, attrRange));
152
+ }
153
+ }
154
+
155
+ // Validate that the children are allowed as a child of current element
156
+ // and then validate the children themselves
157
+ const schemaChildren = Object.values(foundSchemaElement.children);
158
+
159
+ for (const child of element.children) {
160
+ const childName = child.tagName;
161
+ if (!childName) {
162
+ continue;
163
+ }
164
+ const foundChild = findElement(schemaChildren, childName);
165
+ if (!foundChild) {
166
+ const childRange = getRangeOfElement(childName, false);
167
+ if (childRange) {
168
+ errors.push(createError(`"${childName}" is not a valid child of "${tagName}"`, ErrorType.error, childRange));
169
+ }
170
+ }
171
+
172
+ const elementErrors = validateElements(child, foundChild, completeSchema, getRangeOfElement);
173
+ errors.push(...elementErrors);
174
+ }
175
+
176
+ if (!isClosed) {
177
+ // Increment position to after closing tag
178
+ getRangeOfElement(`</${tagName}`, true);
179
+ }
180
+
181
+ return errors;
182
+ }
183
+
184
+ function getDecorationsFromError(error: XmlError): ErrorObject {
185
+ return {
186
+ range: error.range,
187
+ options: {
188
+ className: getErrorClassNames(error),
189
+ hoverMessage: [{ value: getErrorType(error) }, { value: getErrorMessage(error) }],
190
+ },
191
+ };
192
+ }
193
+
194
+ function getErrorFromException(result: FXmlP.ValidationError, xml: string): XmlError {
195
+ const { col, line, msg } = result.err;
196
+ const startLine = line - 1;
197
+ const lines = xml.split("\n");
198
+ const rowText = lines[startLine] || "";
199
+ const length = rowText.indexOf(">") - rowText.indexOf("<") || 4;
200
+ const range = toRange(startLine, col, startLine, col + length);
201
+
202
+ return createError(msg!, ErrorType.error, range);
203
+ }
204
+
205
+ function getErrorClassNames(error: XmlError): string {
206
+ switch (error.type) {
207
+ case ErrorType.warning:
208
+ return "xml-lint xml-lint--warning";
209
+ case ErrorType.error:
210
+ return "xml-lint xml-lint--error";
211
+ default:
212
+ return "";
213
+ }
214
+ }
215
+
216
+ function getErrorType(error: XmlError): string {
217
+ switch (error.type) {
218
+ case ErrorType.warning:
219
+ return "**Warning**";
220
+ case ErrorType.error:
221
+ return "**Error**";
222
+ default:
223
+ return "";
224
+ }
225
+ }
226
+
227
+ const getErrorMessage = (error: XmlError): string => error.message.split(/[\t\n]/g)[1] ?? error.message;
228
+
229
+ const createError = (message: string, type: ErrorType, range: Range): XmlError => ({ message, type, range });
230
+
231
+ function getPositionFromIndex(lines: ReadonlyArray<string>, index: number): Position {
232
+ let totalLength = 0;
233
+ for (const [lineNumber, line] of lines.entries()) {
234
+ totalLength += line.length;
235
+ if (totalLength >= index - lineNumber) {
236
+ return {
237
+ lineNumber: lineNumber + 1,
238
+ column: 1 + index - (totalLength - line.length) - lineNumber || 1, // "- lineNumber" because of \n characters
239
+ };
240
+ }
241
+ }
242
+ return { lineNumber: lines.length, column: 1 };
243
+ }
244
+
245
+ const toRange = (startLineNumber: number, startColumn: number, endLineNumber: number, endColumn: number): Range => ({
246
+ startLineNumber,
247
+ startColumn,
248
+ endLineNumber,
249
+ endColumn,
250
+ });
251
+
252
+ export function errorToReadableText(errors: ReadonlyArray<ErrorObject>, templateName: string = ""): string {
253
+ const errorLines: Array<string> = [];
254
+ if (templateName) {
255
+ errorLines.push(`Error in template ${templateName} \n`);
256
+ }
257
+ for (const error of errors) {
258
+ const hoverErrors = error.options.hoverMessage.map((e) => e.value.replace(/\*/g, ""));
259
+ errorLines.push(`${hoverErrors.join("\n")}`);
260
+ errorLines.push(`On line ${error.range.startLineNumber}, column ${error.range.startColumn}\n`);
261
+ }
262
+
263
+ return errorLines.join("\n");
264
+ }
265
+
266
+ function rangeLessThan(range1: Range, range2: Range): boolean {
267
+ return range1.startLineNumber < range2.startLineNumber
268
+ ? true
269
+ : range1.startLineNumber > range2.startLineNumber
270
+ ? false
271
+ : range1.startColumn < range2.startColumn;
272
+ }
@@ -0,0 +1 @@
1
+ declare module "*.xml";
package/src/index.ts ADDED
@@ -0,0 +1,3 @@
1
+ export * from "./abstract-sheet-exporters/index.js";
2
+ export * from "./abstract-sheet/abstract-sheet.js";
3
+ export * from "./abstract-sheet-xml/index.js";