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,156 @@
1
+ import * as XLSX from "xlsx-js-style";
2
+ import { Style, CellType, Sheet } from "../abstract-sheet/abstract-sheet";
3
+
4
+ export function xlsxWorkSheet(s: Sheet, styles: Record<string, any>): XLSX.WorkSheet {
5
+ let colMax = -1;
6
+ const cells: Record<string, XLSX.CellObject> = {};
7
+ for (let ri = 0; ri < s.rows.length; ri++) {
8
+ const r = s.rows[ri]!;
9
+ colMax = Math.max(r.length, colMax);
10
+ for (let ci = 0; ci < r.length; ci++) {
11
+ const c = r[ci]!;
12
+ let s: Object | undefined = undefined;
13
+ if (c.styles !== undefined) {
14
+ for (const style of c.styles) {
15
+ s = { ...s!, ...styles[style] };
16
+ }
17
+ }
18
+ cells[`${XLSX.utils.encode_col(ci)}${ri + 1}`] = { v: c.value, t: columnType(c.type), s };
19
+ }
20
+ }
21
+
22
+ return {
23
+ "!type": "sheet",
24
+ "!ref": `A1:${XLSX.utils.encode_col(colMax)}${s.rows.length}`,
25
+ "!cols": s.colInfo?.map((i): XLSX.ColInfo => ({ wpx: i.widthPixels, hidden: i.hidden })),
26
+ "!rows": s.rowInfo?.map((i): XLSX.RowInfo => ({ hpx: i.heightPixels, hidden: i.hidden })),
27
+ ...cells,
28
+ };
29
+ }
30
+
31
+ const columnType = (colType: CellType | undefined): XLSX.CellObject["t"] => {
32
+ switch (colType) {
33
+ case "number":
34
+ return "n";
35
+ case undefined:
36
+ case "string":
37
+ return "s";
38
+ default:
39
+ exhaustiveCheck(colType);
40
+ return "s";
41
+ }
42
+ };
43
+
44
+ const exhaustiveCheck = (check: never): never => check;
45
+
46
+ export function createStyle(style: Style): any {
47
+ let s: any = {};
48
+ if (style.vertical || style.horizontal || style.wrapText !== undefined || style.textRotation !== undefined) {
49
+ s.alignment = {};
50
+ if (style.vertical) {
51
+ s.alignment.vertical = style.vertical;
52
+ }
53
+ if (style.horizontal) {
54
+ s.alignment.horizontal = style.horizontal;
55
+ }
56
+ if (style.wrapText !== undefined) {
57
+ s.alignment.wrapText = style.wrapText;
58
+ }
59
+ if (style.textRotation !== undefined) {
60
+ s.alignment.textRotation = style.textRotation;
61
+ }
62
+ }
63
+ if (style.fillType || style.foreground || style.background) {
64
+ s.fill = {};
65
+ if (style.fillType) {
66
+ s.fill.patternType = style.fillType;
67
+ }
68
+ if (style.foreground) {
69
+ s.fill.fgColor = { rgb: style.foreground };
70
+ }
71
+ if (style.background) {
72
+ s.fill.bgColor = { rgb: style.background };
73
+ }
74
+ }
75
+
76
+ if (style.borderStyle || style.borderColor) {
77
+ s.border = {};
78
+ if (style.borderStyle?.top || style.borderColor?.top) {
79
+ s.border.top = {};
80
+ }
81
+ if (style.borderStyle?.top) {
82
+ s.border.top.style = style.borderStyle.top;
83
+ }
84
+ if (style.borderColor?.top) {
85
+ s.border.top.color = { rgb: style.borderColor.top };
86
+ }
87
+ if (style.borderStyle?.right || style.borderColor?.right) {
88
+ s.border.right = {};
89
+ }
90
+ if (style.borderStyle?.right) {
91
+ s.border.right.style = style.borderStyle.right;
92
+ }
93
+ if (style.borderColor?.right) {
94
+ s.border.right.color = { rgb: style.borderColor.right };
95
+ }
96
+ if (style.borderStyle?.bottom || style.borderColor?.bottom) {
97
+ s.border.bottom = {};
98
+ }
99
+ if (style.borderStyle?.bottom) {
100
+ s.border.bottom.style = style.borderStyle.bottom;
101
+ }
102
+ if (style.borderColor?.bottom) {
103
+ s.border.bottom.color = { rgb: style.borderColor.bottom };
104
+ }
105
+ if (style.borderStyle?.left || style.borderColor?.left) {
106
+ s.border.left = {};
107
+ }
108
+ if (style.borderStyle?.left) {
109
+ s.border.left.style = style.borderStyle.left;
110
+ }
111
+ if (style.borderColor?.left) {
112
+ s.border.left.color = { rgb: style.borderColor.left };
113
+ }
114
+ }
115
+
116
+ if (
117
+ style.bold !== undefined ||
118
+ style.color ||
119
+ style.italic !== undefined ||
120
+ style.font ||
121
+ style.strike !== undefined ||
122
+ style.size !== undefined ||
123
+ style.underline !== undefined ||
124
+ style.script
125
+ ) {
126
+ s.font = {};
127
+ if (style.bold !== undefined) {
128
+ s.font.bold = style.bold;
129
+ }
130
+ if (style.color) {
131
+ s.font.color = { rgb: style.color };
132
+ }
133
+ if (style.italic !== undefined) {
134
+ s.font.italic = style.italic;
135
+ }
136
+ if (style.font) {
137
+ s.font.name = style.font;
138
+ }
139
+ if (style.strike !== undefined) {
140
+ s.font.strike = style.strike;
141
+ }
142
+ if (style.size !== undefined) {
143
+ s.font.sz = style.size;
144
+ }
145
+ if (style.underline !== undefined) {
146
+ s.font.underline = style.underline;
147
+ }
148
+ if (style.script !== undefined) {
149
+ s.font.vertAlign = style.script;
150
+ }
151
+ }
152
+ if (style.numberFormat !== undefined) {
153
+ s.font.numFmt = style.numberFormat;
154
+ }
155
+ return s;
156
+ }
@@ -0,0 +1,36 @@
1
+ import * as XLSX from "xlsx-js-style";
2
+ import { AbstractSheet } from "../abstract-sheet/abstract-sheet";
3
+ import { createStyle, xlsxWorkSheet } from "./_xlsx-sheet";
4
+
5
+ export type CsvFile = { readonly name: string; readonly csv: string };
6
+
7
+ export function toCsv(
8
+ as: AbstractSheet,
9
+ options?: {
10
+ readonly separator?: string;
11
+ readonly rowSeparator?: string;
12
+ readonly noTrailingSeparator?: boolean;
13
+ readonly blankRows?: boolean;
14
+ readonly skipHidden?: boolean;
15
+ readonly forceQuotes?: boolean;
16
+ readonly rawNumber?: boolean;
17
+ readonly dateFormat?: string;
18
+ }
19
+ ): ReadonlyArray<CsvFile> {
20
+ const styles = Object.fromEntries(as.styles?.map((s) => [s.name, createStyle(s)]) ?? []);
21
+ const mappedOptions: XLSX.Sheet2CSVOpts | undefined = options
22
+ ? {
23
+ FS: options.separator,
24
+ RS: options.rowSeparator,
25
+ strip: options.noTrailingSeparator,
26
+ blankrows: options.blankRows,
27
+ skipHidden: options.skipHidden,
28
+ forceQuotes: options.forceQuotes,
29
+ rawNumbers: options.rawNumber,
30
+ dateNF: options.dateFormat,
31
+ }
32
+ : undefined;
33
+ return as.sheets.map(
34
+ (s): CsvFile => ({ name: s.name, csv: XLSX.utils.sheet_to_csv(xlsxWorkSheet(s, styles), mappedOptions) })
35
+ );
36
+ }
@@ -0,0 +1,2 @@
1
+ export * from "./csv";
2
+ export * from "./xlsx";
@@ -0,0 +1,15 @@
1
+ import * as XLSX from "xlsx-js-style";
2
+ import { AbstractSheet } from "../abstract-sheet/abstract-sheet";
3
+ import { createStyle, xlsxWorkSheet } from "./_xlsx-sheet";
4
+
5
+ export function toXlsx(as: AbstractSheet): Buffer {
6
+ const sheets: Record<string, XLSX.WorkSheet> = {};
7
+ const sheetNames = Array<string>();
8
+ const styles = Object.fromEntries(as.styles?.map((s) => [s.name, createStyle(s)]) ?? []);
9
+ for (const s of as.sheets) {
10
+ sheetNames.push(s.name);
11
+ sheets[s.name] = xlsxWorkSheet(s, styles);
12
+ }
13
+ const wb: XLSX.WorkBook = { Sheets: sheets, SheetNames: Object.keys(sheets) };
14
+ return XLSX.write(wb, { bookType: "xlsx", bookSST: false, type: "buffer" });
15
+ }
@@ -0,0 +1,128 @@
1
+ import {
2
+ borderStyleRecord,
3
+ Cell,
4
+ ColInfo,
5
+ ColInfos,
6
+ Row,
7
+ RowInfo,
8
+ RowInfos,
9
+ Rows,
10
+ Sheet,
11
+ Sheets,
12
+ Style,
13
+ Styles,
14
+ } from "../abstract-sheet/abstract-sheet";
15
+ import { xsd } from "../abstract-sheet/abstract-sheet-xsd";
16
+ import { parseXml, parseXsd, XmlElement } from "./mustache-xml";
17
+
18
+ export function abstractSheetXml(el: XmlElement): unknown {
19
+ const children = Array<unknown>();
20
+ const childElements = Array<XmlElement>();
21
+ for (const child of el.children ?? []) {
22
+ if (child.tagName !== undefined) {
23
+ children.push(abstractSheetXml(child));
24
+ childElements.push(child);
25
+ }
26
+ }
27
+ switch (el.tagName) {
28
+ case "AbstractSheet":
29
+ let styles: Styles | undefined = undefined;
30
+ let sheets: Sheets = [];
31
+ childElements.forEach((childEl, i) => {
32
+ if (childEl.tagName === "Sheets") {
33
+ sheets = children[i] as Sheets;
34
+ } else if (childEl.tagName === "Styles") {
35
+ styles = children[i] as Styles;
36
+ }
37
+ });
38
+ return { styles, sheets };
39
+ case "Sheets":
40
+ return children as Sheets;
41
+ case "Sheet": {
42
+ let rows: Rows = [];
43
+ let colInfo: ColInfos | undefined = undefined;
44
+ let rowInfo: RowInfos | undefined = undefined;
45
+ childElements.forEach((childEl, i) => {
46
+ if (childEl.tagName === "ColInfos") {
47
+ colInfo = children[i] as ColInfos;
48
+ } else if (childEl.tagName === "RowInfos") {
49
+ rowInfo = children[i] as RowInfos;
50
+ } else if (childEl.tagName === "Rows") {
51
+ rows = children[i] as Rows;
52
+ }
53
+ });
54
+ return {
55
+ name: ((el.attributes as Partial<Record<keyof Sheet, unknown>>)?.name ?? "") as string,
56
+ rows,
57
+ colInfo,
58
+ rowInfo,
59
+ };
60
+ }
61
+ case "ColInfos":
62
+ return children as ColInfos;
63
+ case "ColInfo":
64
+ return el.attributes as ColInfo;
65
+ case "RowInfos":
66
+ return children as RowInfos;
67
+ case "RowInfo":
68
+ return el.attributes as RowInfo;
69
+ case "Rows":
70
+ return children as Rows;
71
+ case "Row":
72
+ return children as Row;
73
+ case "Cell": {
74
+ return { ...el.attributes, styles: el.attributes.styles?.split(",") } as Cell;
75
+ }
76
+ case "Styles":
77
+ return children as Styles;
78
+ case "Style": {
79
+ const attributes: Partial<Record<keyof Style, unknown>> = { ...el.attributes };
80
+ if (attributes.borderStyle) {
81
+ const border = (attributes.borderStyle as string).toString().split(" ");
82
+ const s0 = borderStyleRecord[border[0] ?? ""];
83
+ const s1 = borderStyleRecord[border[1] ?? ""];
84
+ const s2 = borderStyleRecord[border[2] ?? ""];
85
+ const s3 = borderStyleRecord[border[3] ?? ""];
86
+ switch (border.length) {
87
+ default:
88
+ case 1:
89
+ attributes.borderStyle = { top: s0, right: s0, bottom: s0, left: s0 };
90
+ break;
91
+ case 2:
92
+ attributes.borderStyle = { top: s0, right: s1, bottom: s0, left: s1 };
93
+ break;
94
+ case 3:
95
+ attributes.borderStyle = { top: s0, right: s1, bottom: s2, left: s1 };
96
+ break;
97
+ case 4:
98
+ attributes.borderStyle = { top: s0, right: s1, bottom: s2, left: s3 };
99
+ break;
100
+ }
101
+ }
102
+ if (attributes.borderColor) {
103
+ const border = (attributes.borderColor as string).toString().split(" ");
104
+ const [b0, b1, b2, b3] = border;
105
+ switch (border.length) {
106
+ default:
107
+ case 1:
108
+ attributes.borderColor = { top: b0, right: b0, bottom: b0, left: b0 };
109
+ break;
110
+ case 2:
111
+ attributes.borderColor = { top: b0, right: b1, bottom: b0, left: b1 };
112
+ break;
113
+ case 3:
114
+ attributes.borderColor = { top: b0, right: b1, bottom: b2, left: b1 };
115
+ break;
116
+ case 4:
117
+ attributes.borderColor = { top: b0, right: b1, bottom: b2, left: b3 };
118
+ break;
119
+ }
120
+ }
121
+ return attributes as Style;
122
+ }
123
+ default:
124
+ throw new Error(`Could not find creator for element with name ${el.tagName}`);
125
+ }
126
+ }
127
+
128
+ export const parsedXsd = parseXsd(xsd);
@@ -0,0 +1,2 @@
1
+ export * from "./abstract-sheet-xml.js";
2
+ export * from "./mustache-xml/index.js";
@@ -0,0 +1,2 @@
1
+ export * from "./validate-mustache-xml";
2
+ export * from "./parse-mustache-xml";
@@ -0,0 +1,134 @@
1
+ import * as FXmlP from "fast-xml-parser";
2
+ import Mustache from "mustache";
3
+
4
+ export type XmlElement = {
5
+ readonly tagName: string;
6
+ readonly attributes: Record<string, string>;
7
+ readonly children: ReadonlyArray<XmlElement>;
8
+ readonly textContent?: string;
9
+ };
10
+
11
+ export const parseMustacheXml = (
12
+ template: string,
13
+ data: any,
14
+ partials: Record<string, string>
15
+ ): ReadonlyArray<XmlElement> => parseXml(Mustache.render(template, data, partials));
16
+
17
+ export const render = Mustache.render;
18
+
19
+ export const parseXml = (text: string): ReadonlyArray<XmlElement> => transformFXP(xmlParser.parse(text));
20
+
21
+ export const parseXsd = (text: string): ReadonlyArray<XmlElement> =>
22
+ transformFXP(xsdParser.parse(text.replace(/xs:/g, "")));
23
+
24
+ type FastXmlElement = Record<string, ReadonlyArray<FastXmlElement> | Record<string, string>>;
25
+
26
+ // Transforms fast-xml-parser format to a format that is much easier to work with
27
+ function transformFXP(parsedXml: ReadonlyArray<FastXmlElement>): ReadonlyArray<XmlElement> {
28
+ return parsedXml.flatMap((element) => {
29
+ const key = Object.keys(element).find((k) => k !== ":@" && k !== "#text")!;
30
+ if (key === "?xml") {
31
+ return [];
32
+ }
33
+ const children = ((element[key] || []) as Array<FastXmlElement>).filter((c) => {
34
+ const key = Object.keys(c)[0];
35
+ return key !== "#text" && key !== ":@";
36
+ });
37
+ const attributes = (element[":@"] as Record<string, string>) || {};
38
+ const textChilds: Array<string> = ((element[key] || []) as Array<FastXmlElement>)
39
+ .filter((c) => {
40
+ const key = Object.keys(c)[0];
41
+ return key === "#text";
42
+ })
43
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
44
+ .flatMap((t) => t["#text"] as any as string);
45
+ const textContents = textChilds.flatMap((text) => {
46
+ const cleaned = text.replace(/\n/g, "").replace(/\t/g, "").trim();
47
+ return cleaned ? [text] : [];
48
+ });
49
+ const textContent = textContents.join("\n");
50
+ return { tagName: key, attributes: attributes, children: transformFXP(children), textContent: textContent };
51
+ });
52
+ }
53
+
54
+ export function findElement(
55
+ elements: ReadonlyArray<XmlElement>,
56
+ elementName: string | undefined
57
+ ): XmlElement | undefined {
58
+ if (!elementName) {
59
+ return undefined;
60
+ }
61
+ for (const elem of elements) {
62
+ if (elem.tagName === "annotation" || elem.tagName === "attribute") {
63
+ continue;
64
+ }
65
+ if (shouldSkipLevel(elem)) {
66
+ const childElement = findElement(Array.from(elem.children), elementName);
67
+ if (childElement) {
68
+ return shouldSkipLevel(childElement)
69
+ ? findElement(Array.from(childElement.children), elementName)
70
+ : childElement;
71
+ }
72
+ }
73
+ if (elem.attributes.name === elementName) {
74
+ return elem;
75
+ }
76
+ }
77
+ return undefined;
78
+ }
79
+
80
+ export function getChildren(elements: ReadonlyArray<XmlElement>): ReadonlyArray<XmlElement> {
81
+ for (const elem of elements) {
82
+ if (elem.tagName === "annotation" || elem.tagName === "attribute") {
83
+ continue;
84
+ }
85
+ if (shouldSkipLevel(elem)) {
86
+ const child = getChildren(Array.from(elem.children));
87
+ if (child.length > 0) {
88
+ return child.flatMap((c) => (shouldSkipLevel(c) ? getChildren(Array.from(c.children)) : c));
89
+ }
90
+ }
91
+ return elements;
92
+ }
93
+ return [];
94
+ }
95
+
96
+ function shouldSkipLevel(tag: XmlElement): boolean {
97
+ return (
98
+ tag.tagName === "all" || tag.tagName === "sequence" || tag.tagName === "choice" || tag.attributes.name === undefined
99
+ );
100
+ }
101
+
102
+ const xmlParser = new FXmlP.XMLParser({
103
+ preserveOrder: true,
104
+ ignoreAttributes: false,
105
+ attributeNamePrefix: "",
106
+ allowBooleanAttributes: true,
107
+ trimValues: false,
108
+ ignoreDeclaration: true,
109
+ processEntities: true,
110
+ htmlEntities: true,
111
+ attributeValueProcessor: (_name, value) => {
112
+ if (!value?.trim()) {
113
+ return value;
114
+ }
115
+ const nValue = Number(value);
116
+ if (!Number.isNaN(nValue)) {
117
+ return nValue;
118
+ }
119
+ return value;
120
+ },
121
+ });
122
+ xmlParser.addEntity("#x2F", "/");
123
+ xmlParser.addEntity("#x3D", "=");
124
+
125
+ const xsdParser = new FXmlP.XMLParser({
126
+ preserveOrder: true,
127
+ ignoreAttributes: false,
128
+ attributeNamePrefix: "",
129
+ allowBooleanAttributes: true,
130
+ trimValues: false,
131
+ ignoreDeclaration: true,
132
+ });
133
+ xsdParser.addEntity("#x2F", "/");
134
+ xsdParser.addEntity("#x3D", "=");