ducjs 2.3.0 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (529) hide show
  1. package/README.md +2 -2
  2. package/dist/enums.d.ts +135 -0
  3. package/dist/enums.js +155 -0
  4. package/dist/index.d.ts +8 -4
  5. package/dist/index.js +8 -4
  6. package/dist/lazy-files.d.ts +44 -0
  7. package/dist/lazy-files.js +129 -0
  8. package/dist/parse.d.ts +21 -55
  9. package/dist/parse.js +58 -1445
  10. package/dist/restore/index.d.ts +0 -1
  11. package/dist/restore/index.js +0 -1
  12. package/dist/restore/restoreDataState.d.ts +6 -10
  13. package/dist/restore/restoreDataState.js +117 -127
  14. package/dist/restore/restoreElements.d.ts +1 -1
  15. package/dist/restore/restoreElements.js +37 -494
  16. package/dist/serialize.d.ts +11 -4
  17. package/dist/serialize.js +58 -2545
  18. package/dist/technical/index.d.ts +0 -1
  19. package/dist/technical/index.js +0 -1
  20. package/dist/technical/scopes.d.ts +1 -1
  21. package/dist/technical/scopes.js +1 -1
  22. package/dist/transform.d.ts +12 -0
  23. package/dist/transform.js +442 -0
  24. package/dist/types/elements/index.d.ts +120 -693
  25. package/dist/types/elements/typeChecks.d.ts +6 -3
  26. package/dist/types/elements/typeChecks.js +9 -8
  27. package/dist/types/geometryTypes.d.ts +1 -1
  28. package/dist/types/index.d.ts +38 -305
  29. package/dist/utils/constants.d.ts +21 -100
  30. package/dist/utils/constants.js +29 -212
  31. package/dist/utils/elements/freedrawElement.d.ts +6 -0
  32. package/dist/utils/elements/freedrawElement.js +28 -11
  33. package/dist/utils/elements/index.d.ts +3 -14
  34. package/dist/utils/elements/index.js +7 -99
  35. package/dist/utils/elements/linearElement.d.ts +2 -2
  36. package/dist/utils/elements/newElement.d.ts +2 -12
  37. package/dist/utils/elements/newElement.js +32 -52
  38. package/dist/utils/elements/textElement.d.ts +3 -3
  39. package/dist/utils/elements/textElement.js +44 -17
  40. package/dist/utils/math/index.d.ts +5 -4
  41. package/dist/utils/math/index.js +3 -3
  42. package/dist/utils/shape.js +2 -2
  43. package/dist/utils/state/index.d.ts +0 -1
  44. package/dist/utils/state/index.js +5 -71
  45. package/dist/utils/traverse.d.ts +8 -0
  46. package/dist/utils/traverse.js +37 -0
  47. package/dist/version-control.d.ts +61 -0
  48. package/dist/version-control.js +84 -0
  49. package/dist/wasm.d.ts +20 -0
  50. package/dist/wasm.js +52 -0
  51. package/package.json +2 -2
  52. package/dist/flatbuffers/duc/alternate-units.d.ts +0 -21
  53. package/dist/flatbuffers/duc/alternate-units.js +0 -66
  54. package/dist/flatbuffers/duc/angular-unit-system.d.ts +0 -17
  55. package/dist/flatbuffers/duc/angular-unit-system.js +0 -50
  56. package/dist/flatbuffers/duc/angular-units-format.d.ts +0 -7
  57. package/dist/flatbuffers/duc/angular-units-format.js +0 -10
  58. package/dist/flatbuffers/duc/axis.d.ts +0 -5
  59. package/dist/flatbuffers/duc/axis.js +0 -8
  60. package/dist/flatbuffers/duc/bezier-mirroring.d.ts +0 -5
  61. package/dist/flatbuffers/duc/bezier-mirroring.js +0 -8
  62. package/dist/flatbuffers/duc/blending.d.ts +0 -9
  63. package/dist/flatbuffers/duc/blending.js +0 -12
  64. package/dist/flatbuffers/duc/block-attachment.d.ts +0 -4
  65. package/dist/flatbuffers/duc/block-attachment.js +0 -7
  66. package/dist/flatbuffers/duc/boolean-operation.d.ts +0 -6
  67. package/dist/flatbuffers/duc/boolean-operation.js +0 -9
  68. package/dist/flatbuffers/duc/bound-element.d.ts +0 -17
  69. package/dist/flatbuffers/duc/bound-element.js +0 -48
  70. package/dist/flatbuffers/duc/checkpoint.d.ts +0 -22
  71. package/dist/flatbuffers/duc/checkpoint.js +0 -75
  72. package/dist/flatbuffers/duc/column-layout.d.ts +0 -22
  73. package/dist/flatbuffers/duc/column-layout.js +0 -72
  74. package/dist/flatbuffers/duc/column-type.d.ts +0 -5
  75. package/dist/flatbuffers/duc/column-type.js +0 -8
  76. package/dist/flatbuffers/duc/custom-hatch-pattern.d.ts +0 -23
  77. package/dist/flatbuffers/duc/custom-hatch-pattern.js +0 -71
  78. package/dist/flatbuffers/duc/datum-bracket-style.d.ts +0 -5
  79. package/dist/flatbuffers/duc/datum-bracket-style.js +0 -8
  80. package/dist/flatbuffers/duc/datum-reference.d.ts +0 -17
  81. package/dist/flatbuffers/duc/datum-reference.js +0 -49
  82. package/dist/flatbuffers/duc/datum-target-type.d.ts +0 -6
  83. package/dist/flatbuffers/duc/datum-target-type.js +0 -9
  84. package/dist/flatbuffers/duc/decimal-separator.d.ts +0 -4
  85. package/dist/flatbuffers/duc/decimal-separator.js +0 -7
  86. package/dist/flatbuffers/duc/delta.d.ts +0 -22
  87. package/dist/flatbuffers/duc/delta.js +0 -75
  88. package/dist/flatbuffers/duc/dictionary-entry.d.ts +0 -17
  89. package/dist/flatbuffers/duc/dictionary-entry.js +0 -49
  90. package/dist/flatbuffers/duc/dimension-baseline-data.d.ts +0 -14
  91. package/dist/flatbuffers/duc/dimension-baseline-data.js +0 -40
  92. package/dist/flatbuffers/duc/dimension-bindings.d.ts +0 -17
  93. package/dist/flatbuffers/duc/dimension-bindings.js +0 -50
  94. package/dist/flatbuffers/duc/dimension-continue-data.d.ts +0 -14
  95. package/dist/flatbuffers/duc/dimension-continue-data.js +0 -40
  96. package/dist/flatbuffers/duc/dimension-definition-points.d.ts +0 -21
  97. package/dist/flatbuffers/duc/dimension-definition-points.js +0 -64
  98. package/dist/flatbuffers/duc/dimension-ext-line-style.d.ts +0 -18
  99. package/dist/flatbuffers/duc/dimension-ext-line-style.js +0 -57
  100. package/dist/flatbuffers/duc/dimension-fit-rule.d.ts +0 -6
  101. package/dist/flatbuffers/duc/dimension-fit-rule.js +0 -9
  102. package/dist/flatbuffers/duc/dimension-fit-style.d.ts +0 -19
  103. package/dist/flatbuffers/duc/dimension-fit-style.js +0 -58
  104. package/dist/flatbuffers/duc/dimension-line-style.d.ts +0 -16
  105. package/dist/flatbuffers/duc/dimension-line-style.js +0 -49
  106. package/dist/flatbuffers/duc/dimension-symbol-style.d.ts +0 -22
  107. package/dist/flatbuffers/duc/dimension-symbol-style.js +0 -72
  108. package/dist/flatbuffers/duc/dimension-text-placement.d.ts +0 -5
  109. package/dist/flatbuffers/duc/dimension-text-placement.js +0 -8
  110. package/dist/flatbuffers/duc/dimension-tolerance-style.d.ts +0 -24
  111. package/dist/flatbuffers/duc/dimension-tolerance-style.js +0 -71
  112. package/dist/flatbuffers/duc/dimension-type.d.ts +0 -15
  113. package/dist/flatbuffers/duc/dimension-type.js +0 -18
  114. package/dist/flatbuffers/duc/dimension-units-format.d.ts +0 -7
  115. package/dist/flatbuffers/duc/dimension-units-format.js +0 -10
  116. package/dist/flatbuffers/duc/dimension-validation-rules.d.ts +0 -25
  117. package/dist/flatbuffers/duc/dimension-validation-rules.js +0 -74
  118. package/dist/flatbuffers/duc/document-grid-align-items.d.ts +0 -5
  119. package/dist/flatbuffers/duc/document-grid-align-items.js +0 -8
  120. package/dist/flatbuffers/duc/document-grid-config.d.ts +0 -22
  121. package/dist/flatbuffers/duc/document-grid-config.js +0 -73
  122. package/dist/flatbuffers/duc/duc-arrow-element.d.ts +0 -16
  123. package/dist/flatbuffers/duc/duc-arrow-element.js +0 -49
  124. package/dist/flatbuffers/duc/duc-block-attribute-definition-entry.d.ts +0 -16
  125. package/dist/flatbuffers/duc/duc-block-attribute-definition-entry.js +0 -44
  126. package/dist/flatbuffers/duc/duc-block-attribute-definition.d.ts +0 -22
  127. package/dist/flatbuffers/duc/duc-block-attribute-definition.js +0 -64
  128. package/dist/flatbuffers/duc/duc-block-collection-entry.d.ts +0 -16
  129. package/dist/flatbuffers/duc/duc-block-collection-entry.js +0 -48
  130. package/dist/flatbuffers/duc/duc-block-collection.d.ts +0 -31
  131. package/dist/flatbuffers/duc/duc-block-collection.js +0 -97
  132. package/dist/flatbuffers/duc/duc-block-duplication-array.d.ts +0 -19
  133. package/dist/flatbuffers/duc/duc-block-duplication-array.js +0 -64
  134. package/dist/flatbuffers/duc/duc-block-instance-element.d.ts +0 -10
  135. package/dist/flatbuffers/duc/duc-block-instance-element.js +0 -28
  136. package/dist/flatbuffers/duc/duc-block-instance.d.ts +0 -32
  137. package/dist/flatbuffers/duc/duc-block-instance.js +0 -100
  138. package/dist/flatbuffers/duc/duc-block-metadata.d.ts +0 -26
  139. package/dist/flatbuffers/duc/duc-block-metadata.js +0 -90
  140. package/dist/flatbuffers/duc/duc-block.d.ts +0 -36
  141. package/dist/flatbuffers/duc/duc-block.js +0 -112
  142. package/dist/flatbuffers/duc/duc-common-style.d.ts +0 -16
  143. package/dist/flatbuffers/duc/duc-common-style.js +0 -44
  144. package/dist/flatbuffers/duc/duc-dimension-element.d.ts +0 -45
  145. package/dist/flatbuffers/duc/duc-dimension-element.js +0 -120
  146. package/dist/flatbuffers/duc/duc-dimension-style.d.ts +0 -28
  147. package/dist/flatbuffers/duc/duc-dimension-style.js +0 -76
  148. package/dist/flatbuffers/duc/duc-doc-element.d.ts +0 -39
  149. package/dist/flatbuffers/duc/duc-doc-element.js +0 -110
  150. package/dist/flatbuffers/duc/duc-doc-style.d.ts +0 -19
  151. package/dist/flatbuffers/duc/duc-doc-style.js +0 -52
  152. package/dist/flatbuffers/duc/duc-element-base.d.ts +0 -100
  153. package/dist/flatbuffers/duc/duc-element-base.js +0 -315
  154. package/dist/flatbuffers/duc/duc-element-styles-base.d.ts +0 -30
  155. package/dist/flatbuffers/duc/duc-element-styles-base.js +0 -103
  156. package/dist/flatbuffers/duc/duc-ellipse-element.d.ts +0 -22
  157. package/dist/flatbuffers/duc/duc-ellipse-element.js +0 -73
  158. package/dist/flatbuffers/duc/duc-embeddable-element.d.ts +0 -14
  159. package/dist/flatbuffers/duc/duc-embeddable-element.js +0 -41
  160. package/dist/flatbuffers/duc/duc-external-file-data.d.ts +0 -27
  161. package/dist/flatbuffers/duc/duc-external-file-data.js +0 -92
  162. package/dist/flatbuffers/duc/duc-external-file-entry.d.ts +0 -16
  163. package/dist/flatbuffers/duc/duc-external-file-entry.js +0 -44
  164. package/dist/flatbuffers/duc/duc-feature-control-frame-element.d.ts +0 -31
  165. package/dist/flatbuffers/duc/duc-feature-control-frame-element.js +0 -89
  166. package/dist/flatbuffers/duc/duc-feature-control-frame-style.d.ts +0 -22
  167. package/dist/flatbuffers/duc/duc-feature-control-frame-style.js +0 -60
  168. package/dist/flatbuffers/duc/duc-frame-element.d.ts +0 -14
  169. package/dist/flatbuffers/duc/duc-frame-element.js +0 -41
  170. package/dist/flatbuffers/duc/duc-free-draw-element.d.ts +0 -52
  171. package/dist/flatbuffers/duc/duc-free-draw-element.js +0 -154
  172. package/dist/flatbuffers/duc/duc-free-draw-ends.d.ts +0 -18
  173. package/dist/flatbuffers/duc/duc-free-draw-ends.js +0 -56
  174. package/dist/flatbuffers/duc/duc-global-state.d.ts +0 -37
  175. package/dist/flatbuffers/duc/duc-global-state.js +0 -121
  176. package/dist/flatbuffers/duc/duc-group.d.ts +0 -16
  177. package/dist/flatbuffers/duc/duc-group.js +0 -44
  178. package/dist/flatbuffers/duc/duc-hatch-style.d.ts +0 -28
  179. package/dist/flatbuffers/duc/duc-hatch-style.js +0 -79
  180. package/dist/flatbuffers/duc/duc-head.d.ts +0 -19
  181. package/dist/flatbuffers/duc/duc-head.js +0 -57
  182. package/dist/flatbuffers/duc/duc-image-element.d.ts +0 -35
  183. package/dist/flatbuffers/duc/duc-image-element.js +0 -91
  184. package/dist/flatbuffers/duc/duc-image-filter.d.ts +0 -15
  185. package/dist/flatbuffers/duc/duc-image-filter.js +0 -48
  186. package/dist/flatbuffers/duc/duc-layer-overrides.d.ts +0 -16
  187. package/dist/flatbuffers/duc/duc-layer-overrides.js +0 -44
  188. package/dist/flatbuffers/duc/duc-layer.d.ts +0 -21
  189. package/dist/flatbuffers/duc/duc-layer.js +0 -59
  190. package/dist/flatbuffers/duc/duc-leader-element.d.ts +0 -22
  191. package/dist/flatbuffers/duc/duc-leader-element.js +0 -60
  192. package/dist/flatbuffers/duc/duc-leader-style.d.ts +0 -27
  193. package/dist/flatbuffers/duc/duc-leader-style.js +0 -79
  194. package/dist/flatbuffers/duc/duc-line-reference.d.ts +0 -15
  195. package/dist/flatbuffers/duc/duc-line-reference.js +0 -43
  196. package/dist/flatbuffers/duc/duc-line.d.ts +0 -15
  197. package/dist/flatbuffers/duc/duc-line.js +0 -43
  198. package/dist/flatbuffers/duc/duc-linear-element-base.d.ts +0 -38
  199. package/dist/flatbuffers/duc/duc-linear-element-base.js +0 -124
  200. package/dist/flatbuffers/duc/duc-linear-element.d.ts +0 -16
  201. package/dist/flatbuffers/duc/duc-linear-element.js +0 -49
  202. package/dist/flatbuffers/duc/duc-local-state.d.ts +0 -68
  203. package/dist/flatbuffers/duc/duc-local-state.js +0 -206
  204. package/dist/flatbuffers/duc/duc-mermaid-element.d.ts +0 -23
  205. package/dist/flatbuffers/duc/duc-mermaid-element.js +0 -65
  206. package/dist/flatbuffers/duc/duc-model-element.d.ts +0 -26
  207. package/dist/flatbuffers/duc/duc-model-element.js +0 -79
  208. package/dist/flatbuffers/duc/duc-parametric-element.d.ts +0 -16
  209. package/dist/flatbuffers/duc/duc-parametric-element.js +0 -44
  210. package/dist/flatbuffers/duc/duc-path.d.ts +0 -26
  211. package/dist/flatbuffers/duc/duc-path.js +0 -69
  212. package/dist/flatbuffers/duc/duc-pdf-element.d.ts +0 -19
  213. package/dist/flatbuffers/duc/duc-pdf-element.js +0 -51
  214. package/dist/flatbuffers/duc/duc-plot-element.d.ts +0 -19
  215. package/dist/flatbuffers/duc/duc-plot-element.js +0 -52
  216. package/dist/flatbuffers/duc/duc-plot-style.d.ts +0 -11
  217. package/dist/flatbuffers/duc/duc-plot-style.js +0 -32
  218. package/dist/flatbuffers/duc/duc-point-binding.d.ts +0 -26
  219. package/dist/flatbuffers/duc/duc-point-binding.js +0 -73
  220. package/dist/flatbuffers/duc/duc-point.d.ts +0 -18
  221. package/dist/flatbuffers/duc/duc-point.js +0 -57
  222. package/dist/flatbuffers/duc/duc-polygon-element.d.ts +0 -16
  223. package/dist/flatbuffers/duc/duc-polygon-element.js +0 -49
  224. package/dist/flatbuffers/duc/duc-rectangle-element.d.ts +0 -14
  225. package/dist/flatbuffers/duc/duc-rectangle-element.js +0 -41
  226. package/dist/flatbuffers/duc/duc-region.d.ts +0 -19
  227. package/dist/flatbuffers/duc/duc-region.js +0 -51
  228. package/dist/flatbuffers/duc/duc-stack-base.d.ts +0 -27
  229. package/dist/flatbuffers/duc/duc-stack-base.js +0 -78
  230. package/dist/flatbuffers/duc/duc-stack-element-base.d.ts +0 -23
  231. package/dist/flatbuffers/duc/duc-stack-element-base.js +0 -65
  232. package/dist/flatbuffers/duc/duc-stack-like-styles.d.ts +0 -16
  233. package/dist/flatbuffers/duc/duc-stack-like-styles.js +0 -48
  234. package/dist/flatbuffers/duc/duc-table-auto-size.d.ts +0 -15
  235. package/dist/flatbuffers/duc/duc-table-auto-size.js +0 -48
  236. package/dist/flatbuffers/duc/duc-table-cell-entry.d.ts +0 -16
  237. package/dist/flatbuffers/duc/duc-table-cell-entry.js +0 -44
  238. package/dist/flatbuffers/duc/duc-table-cell-span.d.ts +0 -15
  239. package/dist/flatbuffers/duc/duc-table-cell-span.js +0 -48
  240. package/dist/flatbuffers/duc/duc-table-cell-style.d.ts +0 -22
  241. package/dist/flatbuffers/duc/duc-table-cell-style.js +0 -59
  242. package/dist/flatbuffers/duc/duc-table-cell.d.ts +0 -27
  243. package/dist/flatbuffers/duc/duc-table-cell.js +0 -72
  244. package/dist/flatbuffers/duc/duc-table-column-entry.d.ts +0 -16
  245. package/dist/flatbuffers/duc/duc-table-column-entry.js +0 -44
  246. package/dist/flatbuffers/duc/duc-table-column.d.ts +0 -18
  247. package/dist/flatbuffers/duc/duc-table-column.js +0 -51
  248. package/dist/flatbuffers/duc/duc-table-element.d.ts +0 -51
  249. package/dist/flatbuffers/duc/duc-table-element.js +0 -167
  250. package/dist/flatbuffers/duc/duc-table-row-entry.d.ts +0 -16
  251. package/dist/flatbuffers/duc/duc-table-row-entry.js +0 -44
  252. package/dist/flatbuffers/duc/duc-table-row.d.ts +0 -18
  253. package/dist/flatbuffers/duc/duc-table-row.js +0 -51
  254. package/dist/flatbuffers/duc/duc-table-style.d.ts +0 -20
  255. package/dist/flatbuffers/duc/duc-table-style.js +0 -57
  256. package/dist/flatbuffers/duc/duc-text-dynamic-dictionary-source.d.ts +0 -14
  257. package/dist/flatbuffers/duc/duc-text-dynamic-dictionary-source.js +0 -40
  258. package/dist/flatbuffers/duc/duc-text-dynamic-element-source.d.ts +0 -17
  259. package/dist/flatbuffers/duc/duc-text-dynamic-element-source.js +0 -49
  260. package/dist/flatbuffers/duc/duc-text-dynamic-part.d.ts +0 -22
  261. package/dist/flatbuffers/duc/duc-text-dynamic-part.js +0 -58
  262. package/dist/flatbuffers/duc/duc-text-dynamic-source-data.d.ts +0 -9
  263. package/dist/flatbuffers/duc/duc-text-dynamic-source-data.js +0 -26
  264. package/dist/flatbuffers/duc/duc-text-dynamic-source.d.ts +0 -19
  265. package/dist/flatbuffers/duc/duc-text-dynamic-source.js +0 -58
  266. package/dist/flatbuffers/duc/duc-text-element.d.ts +0 -33
  267. package/dist/flatbuffers/duc/duc-text-element.js +0 -94
  268. package/dist/flatbuffers/duc/duc-text-style.d.ts +0 -41
  269. package/dist/flatbuffers/duc/duc-text-style.js +0 -120
  270. package/dist/flatbuffers/duc/duc-ucs.d.ts +0 -16
  271. package/dist/flatbuffers/duc/duc-ucs.js +0 -49
  272. package/dist/flatbuffers/duc/duc-view.d.ts +0 -24
  273. package/dist/flatbuffers/duc/duc-view.js +0 -71
  274. package/dist/flatbuffers/duc/duc-viewport-element.d.ts +0 -36
  275. package/dist/flatbuffers/duc/duc-viewport-element.js +0 -102
  276. package/dist/flatbuffers/duc/duc-viewport-style.d.ts +0 -13
  277. package/dist/flatbuffers/duc/duc-viewport-style.js +0 -40
  278. package/dist/flatbuffers/duc/duc-xray-element.d.ts +0 -23
  279. package/dist/flatbuffers/duc/duc-xray-element.js +0 -66
  280. package/dist/flatbuffers/duc/duc-xray-style.d.ts +0 -14
  281. package/dist/flatbuffers/duc/duc-xray-style.js +0 -40
  282. package/dist/flatbuffers/duc/dynamic-snap-settings.d.ts +0 -17
  283. package/dist/flatbuffers/duc/dynamic-snap-settings.js +0 -56
  284. package/dist/flatbuffers/duc/element-background.d.ts +0 -14
  285. package/dist/flatbuffers/duc/element-background.js +0 -41
  286. package/dist/flatbuffers/duc/element-content-base.d.ts +0 -29
  287. package/dist/flatbuffers/duc/element-content-base.js +0 -80
  288. package/dist/flatbuffers/duc/element-content-preference.d.ts +0 -8
  289. package/dist/flatbuffers/duc/element-content-preference.js +0 -11
  290. package/dist/flatbuffers/duc/element-stroke.d.ts +0 -24
  291. package/dist/flatbuffers/duc/element-stroke.js +0 -66
  292. package/dist/flatbuffers/duc/element-wrapper.d.ts +0 -16
  293. package/dist/flatbuffers/duc/element-wrapper.js +0 -49
  294. package/dist/flatbuffers/duc/element.d.ts +0 -51
  295. package/dist/flatbuffers/duc/element.js +0 -110
  296. package/dist/flatbuffers/duc/exported-data-state.d.ts +0 -102
  297. package/dist/flatbuffers/duc/exported-data-state.js +0 -341
  298. package/dist/flatbuffers/duc/fcfbetween-modifier.d.ts +0 -17
  299. package/dist/flatbuffers/duc/fcfbetween-modifier.js +0 -48
  300. package/dist/flatbuffers/duc/fcfdatum-definition.d.ts +0 -16
  301. package/dist/flatbuffers/duc/fcfdatum-definition.js +0 -43
  302. package/dist/flatbuffers/duc/fcfdatum-style.d.ts +0 -14
  303. package/dist/flatbuffers/duc/fcfdatum-style.js +0 -41
  304. package/dist/flatbuffers/duc/fcfframe-modifiers.d.ts +0 -22
  305. package/dist/flatbuffers/duc/fcfframe-modifiers.js +0 -65
  306. package/dist/flatbuffers/duc/fcflayout-style.d.ts +0 -17
  307. package/dist/flatbuffers/duc/fcflayout-style.js +0 -56
  308. package/dist/flatbuffers/duc/fcfprojected-zone-modifier.d.ts +0 -13
  309. package/dist/flatbuffers/duc/fcfprojected-zone-modifier.js +0 -40
  310. package/dist/flatbuffers/duc/fcfsegment-row.d.ts +0 -17
  311. package/dist/flatbuffers/duc/fcfsegment-row.js +0 -55
  312. package/dist/flatbuffers/duc/fcfsymbol-style.d.ts +0 -13
  313. package/dist/flatbuffers/duc/fcfsymbol-style.js +0 -40
  314. package/dist/flatbuffers/duc/feature-control-frame-segment.d.ts +0 -22
  315. package/dist/flatbuffers/duc/feature-control-frame-segment.js +0 -65
  316. package/dist/flatbuffers/duc/feature-modifier.d.ts +0 -18
  317. package/dist/flatbuffers/duc/feature-modifier.js +0 -21
  318. package/dist/flatbuffers/duc/gdt-symbol.d.ts +0 -22
  319. package/dist/flatbuffers/duc/gdt-symbol.js +0 -25
  320. package/dist/flatbuffers/duc/geometric-point.d.ts +0 -10
  321. package/dist/flatbuffers/duc/geometric-point.js +0 -27
  322. package/dist/flatbuffers/duc/grid-display-type.d.ts +0 -6
  323. package/dist/flatbuffers/duc/grid-display-type.js +0 -9
  324. package/dist/flatbuffers/duc/grid-settings.d.ts +0 -54
  325. package/dist/flatbuffers/duc/grid-settings.js +0 -165
  326. package/dist/flatbuffers/duc/grid-style.d.ts +0 -26
  327. package/dist/flatbuffers/duc/grid-style.js +0 -74
  328. package/dist/flatbuffers/duc/grid-type.d.ts +0 -7
  329. package/dist/flatbuffers/duc/grid-type.js +0 -10
  330. package/dist/flatbuffers/duc/handle-type.d.ts +0 -4
  331. package/dist/flatbuffers/duc/handle-type.js +0 -7
  332. package/dist/flatbuffers/duc/hatch-pattern-line.d.ts +0 -35
  333. package/dist/flatbuffers/duc/hatch-pattern-line.js +0 -93
  334. package/dist/flatbuffers/duc/hatch-style.d.ts +0 -5
  335. package/dist/flatbuffers/duc/hatch-style.js +0 -8
  336. package/dist/flatbuffers/duc/identified-common-style.d.ts +0 -16
  337. package/dist/flatbuffers/duc/identified-common-style.js +0 -44
  338. package/dist/flatbuffers/duc/identified-dimension-style.d.ts +0 -16
  339. package/dist/flatbuffers/duc/identified-dimension-style.js +0 -44
  340. package/dist/flatbuffers/duc/identified-doc-style.d.ts +0 -16
  341. package/dist/flatbuffers/duc/identified-doc-style.js +0 -44
  342. package/dist/flatbuffers/duc/identified-fcfstyle.d.ts +0 -16
  343. package/dist/flatbuffers/duc/identified-fcfstyle.js +0 -44
  344. package/dist/flatbuffers/duc/identified-grid-settings.d.ts +0 -16
  345. package/dist/flatbuffers/duc/identified-grid-settings.js +0 -44
  346. package/dist/flatbuffers/duc/identified-hatch-style.d.ts +0 -16
  347. package/dist/flatbuffers/duc/identified-hatch-style.js +0 -44
  348. package/dist/flatbuffers/duc/identified-leader-style.d.ts +0 -16
  349. package/dist/flatbuffers/duc/identified-leader-style.js +0 -44
  350. package/dist/flatbuffers/duc/identified-snap-settings.d.ts +0 -16
  351. package/dist/flatbuffers/duc/identified-snap-settings.js +0 -44
  352. package/dist/flatbuffers/duc/identified-stack-like-style.d.ts +0 -16
  353. package/dist/flatbuffers/duc/identified-stack-like-style.js +0 -44
  354. package/dist/flatbuffers/duc/identified-table-style.d.ts +0 -16
  355. package/dist/flatbuffers/duc/identified-table-style.js +0 -44
  356. package/dist/flatbuffers/duc/identified-text-style.d.ts +0 -16
  357. package/dist/flatbuffers/duc/identified-text-style.js +0 -44
  358. package/dist/flatbuffers/duc/identified-ucs.d.ts +0 -16
  359. package/dist/flatbuffers/duc/identified-ucs.js +0 -44
  360. package/dist/flatbuffers/duc/identified-view.d.ts +0 -16
  361. package/dist/flatbuffers/duc/identified-view.js +0 -44
  362. package/dist/flatbuffers/duc/identified-viewport-style.d.ts +0 -16
  363. package/dist/flatbuffers/duc/identified-viewport-style.js +0 -44
  364. package/dist/flatbuffers/duc/identified-xray-style.d.ts +0 -16
  365. package/dist/flatbuffers/duc/identified-xray-style.js +0 -44
  366. package/dist/flatbuffers/duc/identifier.d.ts +0 -20
  367. package/dist/flatbuffers/duc/identifier.js +0 -57
  368. package/dist/flatbuffers/duc/image-crop.d.ts +0 -23
  369. package/dist/flatbuffers/duc/image-crop.js +0 -80
  370. package/dist/flatbuffers/duc/image-status.d.ts +0 -5
  371. package/dist/flatbuffers/duc/image-status.js +0 -8
  372. package/dist/flatbuffers/duc/isometric-grid-settings.d.ts +0 -15
  373. package/dist/flatbuffers/duc/isometric-grid-settings.js +0 -48
  374. package/dist/flatbuffers/duc/jsonpatch-operation.d.ts +0 -23
  375. package/dist/flatbuffers/duc/jsonpatch-operation.js +0 -64
  376. package/dist/flatbuffers/duc/layer-snap-filters.d.ts +0 -23
  377. package/dist/flatbuffers/duc/layer-snap-filters.js +0 -76
  378. package/dist/flatbuffers/duc/layer-validation-rules.d.ts +0 -17
  379. package/dist/flatbuffers/duc/layer-validation-rules.js +0 -54
  380. package/dist/flatbuffers/duc/leader-block-content.d.ts +0 -25
  381. package/dist/flatbuffers/duc/leader-block-content.js +0 -85
  382. package/dist/flatbuffers/duc/leader-content-data.d.ts +0 -9
  383. package/dist/flatbuffers/duc/leader-content-data.js +0 -26
  384. package/dist/flatbuffers/duc/leader-content-type.d.ts +0 -4
  385. package/dist/flatbuffers/duc/leader-content-type.js +0 -7
  386. package/dist/flatbuffers/duc/leader-content.d.ts +0 -19
  387. package/dist/flatbuffers/duc/leader-content.js +0 -58
  388. package/dist/flatbuffers/duc/leader-text-block-content.d.ts +0 -14
  389. package/dist/flatbuffers/duc/leader-text-block-content.js +0 -40
  390. package/dist/flatbuffers/duc/line-head.d.ts +0 -17
  391. package/dist/flatbuffers/duc/line-head.js +0 -20
  392. package/dist/flatbuffers/duc/line-spacing-type.d.ts +0 -5
  393. package/dist/flatbuffers/duc/line-spacing-type.js +0 -8
  394. package/dist/flatbuffers/duc/line-spacing.d.ts +0 -16
  395. package/dist/flatbuffers/duc/line-spacing.js +0 -49
  396. package/dist/flatbuffers/duc/linear-unit-system.d.ts +0 -24
  397. package/dist/flatbuffers/duc/linear-unit-system.js +0 -75
  398. package/dist/flatbuffers/duc/margins.d.ts +0 -19
  399. package/dist/flatbuffers/duc/margins.js +0 -64
  400. package/dist/flatbuffers/duc/mark-ellipse-center.d.ts +0 -4
  401. package/dist/flatbuffers/duc/mark-ellipse-center.js +0 -7
  402. package/dist/flatbuffers/duc/material-condition.d.ts +0 -5
  403. package/dist/flatbuffers/duc/material-condition.js +0 -8
  404. package/dist/flatbuffers/duc/object-snap-mode.d.ts +0 -22
  405. package/dist/flatbuffers/duc/object-snap-mode.js +0 -25
  406. package/dist/flatbuffers/duc/paragraph-formatting.d.ts +0 -33
  407. package/dist/flatbuffers/duc/paragraph-formatting.js +0 -106
  408. package/dist/flatbuffers/duc/parametric-source-type.d.ts +0 -4
  409. package/dist/flatbuffers/duc/parametric-source-type.js +0 -7
  410. package/dist/flatbuffers/duc/parametric-source.d.ts +0 -20
  411. package/dist/flatbuffers/duc/parametric-source.js +0 -57
  412. package/dist/flatbuffers/duc/plot-layout.d.ts +0 -14
  413. package/dist/flatbuffers/duc/plot-layout.js +0 -41
  414. package/dist/flatbuffers/duc/point-binding-point.d.ts +0 -15
  415. package/dist/flatbuffers/duc/point-binding-point.js +0 -48
  416. package/dist/flatbuffers/duc/polar-grid-settings.d.ts +0 -17
  417. package/dist/flatbuffers/duc/polar-grid-settings.js +0 -56
  418. package/dist/flatbuffers/duc/polar-tracking-settings.d.ts +0 -29
  419. package/dist/flatbuffers/duc/polar-tracking-settings.js +0 -90
  420. package/dist/flatbuffers/duc/primary-units.d.ts +0 -16
  421. package/dist/flatbuffers/duc/primary-units.js +0 -44
  422. package/dist/flatbuffers/duc/pruning-level.d.ts +0 -5
  423. package/dist/flatbuffers/duc/pruning-level.js +0 -8
  424. package/dist/flatbuffers/duc/snap-marker-settings.d.ts +0 -23
  425. package/dist/flatbuffers/duc/snap-marker-settings.js +0 -79
  426. package/dist/flatbuffers/duc/snap-marker-shape.d.ts +0 -6
  427. package/dist/flatbuffers/duc/snap-marker-shape.js +0 -9
  428. package/dist/flatbuffers/duc/snap-marker-style-entry.d.ts +0 -16
  429. package/dist/flatbuffers/duc/snap-marker-style-entry.js +0 -43
  430. package/dist/flatbuffers/duc/snap-marker-style.d.ts +0 -17
  431. package/dist/flatbuffers/duc/snap-marker-style.js +0 -49
  432. package/dist/flatbuffers/duc/snap-mode.d.ts +0 -4
  433. package/dist/flatbuffers/duc/snap-mode.js +0 -7
  434. package/dist/flatbuffers/duc/snap-override-behavior.d.ts +0 -5
  435. package/dist/flatbuffers/duc/snap-override-behavior.js +0 -8
  436. package/dist/flatbuffers/duc/snap-override.d.ts +0 -17
  437. package/dist/flatbuffers/duc/snap-override.js +0 -49
  438. package/dist/flatbuffers/duc/snap-settings.d.ts +0 -75
  439. package/dist/flatbuffers/duc/snap-settings.js +0 -245
  440. package/dist/flatbuffers/duc/stack-format-properties.d.ts +0 -18
  441. package/dist/flatbuffers/duc/stack-format-properties.js +0 -57
  442. package/dist/flatbuffers/duc/stack-format.d.ts +0 -21
  443. package/dist/flatbuffers/duc/stack-format.js +0 -64
  444. package/dist/flatbuffers/duc/stacked-text-align.d.ts +0 -5
  445. package/dist/flatbuffers/duc/stacked-text-align.js +0 -8
  446. package/dist/flatbuffers/duc/standard-overrides.d.ts +0 -63
  447. package/dist/flatbuffers/duc/standard-overrides.js +0 -162
  448. package/dist/flatbuffers/duc/standard-styles.d.ts +0 -77
  449. package/dist/flatbuffers/duc/standard-styles.js +0 -285
  450. package/dist/flatbuffers/duc/standard-units.d.ts +0 -16
  451. package/dist/flatbuffers/duc/standard-units.js +0 -44
  452. package/dist/flatbuffers/duc/standard-validation.d.ts +0 -16
  453. package/dist/flatbuffers/duc/standard-validation.js +0 -44
  454. package/dist/flatbuffers/duc/standard-view-settings.d.ts +0 -35
  455. package/dist/flatbuffers/duc/standard-view-settings.js +0 -124
  456. package/dist/flatbuffers/duc/standard.d.ts +0 -33
  457. package/dist/flatbuffers/duc/standard.js +0 -90
  458. package/dist/flatbuffers/duc/string-value-entry.d.ts +0 -17
  459. package/dist/flatbuffers/duc/string-value-entry.js +0 -49
  460. package/dist/flatbuffers/duc/stroke-cap.d.ts +0 -5
  461. package/dist/flatbuffers/duc/stroke-cap.js +0 -8
  462. package/dist/flatbuffers/duc/stroke-join.d.ts +0 -5
  463. package/dist/flatbuffers/duc/stroke-join.js +0 -8
  464. package/dist/flatbuffers/duc/stroke-placement.d.ts +0 -5
  465. package/dist/flatbuffers/duc/stroke-placement.js +0 -8
  466. package/dist/flatbuffers/duc/stroke-preference.d.ts +0 -6
  467. package/dist/flatbuffers/duc/stroke-preference.js +0 -9
  468. package/dist/flatbuffers/duc/stroke-side-preference.d.ts +0 -8
  469. package/dist/flatbuffers/duc/stroke-side-preference.js +0 -11
  470. package/dist/flatbuffers/duc/stroke-sides.d.ts +0 -24
  471. package/dist/flatbuffers/duc/stroke-sides.js +0 -67
  472. package/dist/flatbuffers/duc/stroke-style.d.ts +0 -37
  473. package/dist/flatbuffers/duc/stroke-style.js +0 -111
  474. package/dist/flatbuffers/duc/stroke-width.d.ts +0 -5
  475. package/dist/flatbuffers/duc/stroke-width.js +0 -8
  476. package/dist/flatbuffers/duc/table-cell-alignment.d.ts +0 -11
  477. package/dist/flatbuffers/duc/table-cell-alignment.js +0 -14
  478. package/dist/flatbuffers/duc/table-flow-direction.d.ts +0 -4
  479. package/dist/flatbuffers/duc/table-flow-direction.js +0 -7
  480. package/dist/flatbuffers/duc/text-align.d.ts +0 -5
  481. package/dist/flatbuffers/duc/text-align.js +0 -8
  482. package/dist/flatbuffers/duc/text-column.d.ts +0 -15
  483. package/dist/flatbuffers/duc/text-column.js +0 -48
  484. package/dist/flatbuffers/duc/text-field-source-property.d.ts +0 -13
  485. package/dist/flatbuffers/duc/text-field-source-property.js +0 -16
  486. package/dist/flatbuffers/duc/text-field-source-type.d.ts +0 -4
  487. package/dist/flatbuffers/duc/text-field-source-type.js +0 -7
  488. package/dist/flatbuffers/duc/text-flow-direction.d.ts +0 -6
  489. package/dist/flatbuffers/duc/text-flow-direction.js +0 -9
  490. package/dist/flatbuffers/duc/tiling-properties.d.ts +0 -21
  491. package/dist/flatbuffers/duc/tiling-properties.js +0 -75
  492. package/dist/flatbuffers/duc/tolerance-clause.d.ts +0 -27
  493. package/dist/flatbuffers/duc/tolerance-clause.js +0 -84
  494. package/dist/flatbuffers/duc/tolerance-display.d.ts +0 -7
  495. package/dist/flatbuffers/duc/tolerance-display.js +0 -10
  496. package/dist/flatbuffers/duc/tolerance-type.d.ts +0 -5
  497. package/dist/flatbuffers/duc/tolerance-type.js +0 -8
  498. package/dist/flatbuffers/duc/tolerance-zone-type.d.ts +0 -7
  499. package/dist/flatbuffers/duc/tolerance-zone-type.js +0 -10
  500. package/dist/flatbuffers/duc/tracking-line-style.d.ts +0 -26
  501. package/dist/flatbuffers/duc/tracking-line-style.js +0 -74
  502. package/dist/flatbuffers/duc/unit-precision.d.ts +0 -19
  503. package/dist/flatbuffers/duc/unit-precision.js +0 -64
  504. package/dist/flatbuffers/duc/unit-system-base.d.ts +0 -20
  505. package/dist/flatbuffers/duc/unit-system-base.js +0 -65
  506. package/dist/flatbuffers/duc/unit-system.d.ts +0 -4
  507. package/dist/flatbuffers/duc/unit-system.js +0 -7
  508. package/dist/flatbuffers/duc/version-base.d.ts +0 -27
  509. package/dist/flatbuffers/duc/version-base.js +0 -80
  510. package/dist/flatbuffers/duc/version-graph-metadata.d.ts +0 -15
  511. package/dist/flatbuffers/duc/version-graph-metadata.js +0 -48
  512. package/dist/flatbuffers/duc/version-graph.d.ts +0 -31
  513. package/dist/flatbuffers/duc/version-graph.js +0 -94
  514. package/dist/flatbuffers/duc/vertical-align.d.ts +0 -5
  515. package/dist/flatbuffers/duc/vertical-align.js +0 -8
  516. package/dist/flatbuffers/duc/viewport-shade-plot.d.ts +0 -6
  517. package/dist/flatbuffers/duc/viewport-shade-plot.js +0 -9
  518. package/dist/flatbuffers/duc/youtube-states.d.ts +0 -8
  519. package/dist/flatbuffers/duc/youtube-states.js +0 -11
  520. package/dist/flatbuffers/duc.d.ts +0 -234
  521. package/dist/flatbuffers/duc.js +0 -236
  522. package/dist/restore/restoreStandards.d.ts +0 -8
  523. package/dist/restore/restoreStandards.js +0 -224
  524. package/dist/technical/standards.d.ts +0 -124
  525. package/dist/technical/standards.js +0 -10
  526. package/dist/utils/elements/viewportElement.d.ts +0 -6
  527. package/dist/utils/elements/viewportElement.js +0 -9
  528. package/dist/utils/state/grid.d.ts +0 -7
  529. package/dist/utils/state/grid.js +0 -25
package/dist/parse.js CHANGED
@@ -7,1455 +7,68 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
7
7
  step((generator = generator.apply(thisArg, _arguments || [])).next());
8
8
  });
9
9
  };
10
- import { decompressSync, strFromU8 } from 'fflate';
11
- import * as flatbuffers from "flatbuffers";
12
- import { nanoid } from 'nanoid';
13
- import { DOCUMENT_GRID_ALIGN_ITEMS, DucArrowElement as DucArrowElementFb, DucDimensionElement as DucDimensionElementFb, DucDocElement as DucDocElementFb, DucEllipseElement as DucEllipseElementFb, DucEmbeddableElement as DucEmbeddableElementFb, DucFeatureControlFrameElement as DucFeatureControlFrameElementFb, DucFrameElement as DucFrameElementFb, DucFreeDrawElement as DucFreeDrawElementFb, DucImageElement as DucImageElementFb, DucLeaderElement as DucLeaderElementFb, DucLinearElement as DucLinearElementFb, DucMermaidElement as DucMermaidElementFb, DucModelElement as DucModelElementFb, DucPdfElement as DucPdfElementFb, DucPlotElement as DucPlotElementFb, DucPolygonElement as DucPolygonElementFb, DucRectangleElement as DucRectangleElementFb, DucTableElement as DucTableElementFb, DucTextDynamicDictionarySource as DucTextDynamicDictionarySourceFb, DucTextDynamicElementSource as DucTextDynamicElementSourceFb, DucTextElement as DucTextElementFb, DucViewportElement as DucViewportElementFb, DucXRayElement as DucXRayElementFb, Element as ElementUnion, ExportedDataState, LEADER_CONTENT_TYPE as LEADER_CONTENT_TYPE_ENUM, LeaderBlockContent as LeaderBlockContentFb, LeaderTextBlockContent as LeaderTextBlockContentFb, TEXT_FIELD_SOURCE_TYPE } from "./flatbuffers/duc";
14
10
  import { restore } from "./restore";
15
- // #region HELPERS & LOW-LEVEL CASTS
16
- // Helper functions for type casting
17
- const toPrecisionValue = (value) => ({
18
- value: value,
19
- scoped: value,
20
- });
21
- const toRadian = (value) => value;
22
- const toPercentage = (value) => value;
23
- const toScaleFactor = (value) => value;
24
- const toZoom = (value) => ({
25
- value: value
26
- });
27
- // #endregion
28
- // Helper function to parse binary JSON data (Uint8Array) to object
29
- // The data is zlib-compressed JSON (new format) or plain JSON string (legacy format)
30
- function parseBinaryToJson(binaryData) {
31
- if (!binaryData || binaryData.length === 0)
32
- return undefined;
33
- // Try new format: zlib-compressed binary JSON
34
- try {
35
- const decompressed = decompressSync(binaryData);
36
- const text = strFromU8(decompressed);
37
- return JSON.parse(text);
38
- }
39
- catch (e) {
40
- // Fall back to legacy format: plain JSON string (for old file compatibility)
11
+ import { transformFromRust } from "./transform";
12
+ import { ensureWasm, wasmParseDuc, wasmParseDucLazy } from "./wasm";
13
+ // Re-export from lazy-files for backwards compatibility
14
+ import { LazyExternalFileStore } from "./lazy-files";
15
+ export { LazyExternalFileStore };
16
+ /**
17
+ * Parse a `.duc` file (Blob/File) into a RestoredDataState.
18
+ *
19
+ * 1. Read file bytes
20
+ * 2. WASM parse (SQLite Rust → JS via serde-wasm-bindgen)
21
+ * 3. Element fixups (stack element flattening)
22
+ * 4. restore() for defaults & migrations
23
+ */
24
+ export function parseDuc(blob, _fileHandle, elementsConfig, restoreConfig) {
25
+ return __awaiter(this, void 0, void 0, function* () {
26
+ yield ensureWasm();
27
+ const buffer = new Uint8Array(yield blob.arrayBuffer());
28
+ if (buffer.byteLength === 0) {
29
+ throw new Error(`[parseDuc] buffer too small (${buffer.byteLength} bytes) — not a valid .duc file`);
30
+ }
31
+ const header = new TextDecoder().decode(buffer.slice(0, 15));
32
+ let raw;
41
33
  try {
42
- const text = new TextDecoder().decode(binaryData);
43
- return JSON.parse(text);
34
+ raw = wasmParseDuc(buffer);
44
35
  }
45
- catch (e2) {
46
- console.warn('Failed to parse binary JSON (tried both compressed and legacy formats):', e2);
47
- return undefined;
36
+ catch (error) {
37
+ const prefixHex = Array.from(buffer.slice(0, 16))
38
+ .map((b) => b.toString(16).padStart(2, "0"))
39
+ .join(" ");
40
+ throw new Error(`[parseDuc] wasm parse failed (size=${buffer.byteLength}, header="${header}", prefix=${prefixHex}): ${error instanceof Error ? error.message : String(error)}`);
48
41
  }
49
- }
50
- }
51
- // #region GEOMETRY & UTILITY PARSERS
52
- export function parseGeometricPoint(point) {
53
- return {
54
- x: point.x(),
55
- y: point.y(),
56
- };
57
- }
58
- export function parsePoint(point) {
59
- return {
60
- x: toPrecisionValue(point.x()),
61
- y: toPrecisionValue(point.y()),
62
- mirroring: point.mirroring() || undefined,
63
- };
64
- }
65
- export function parseMargins(margins) {
66
- return {
67
- top: toPrecisionValue(margins.top()),
68
- right: toPrecisionValue(margins.right()),
69
- bottom: toPrecisionValue(margins.bottom()),
70
- left: toPrecisionValue(margins.left()),
71
- };
72
- }
73
- export function parseDocumentGridConfig(gridConfig) {
74
- return {
75
- columns: gridConfig.columns(),
76
- gapX: gridConfig.gapX(),
77
- gapY: gridConfig.gapY(),
78
- alignItems: (() => {
79
- const align = gridConfig.alignItems();
80
- if (align === DOCUMENT_GRID_ALIGN_ITEMS.START)
81
- return 'start';
82
- if (align === DOCUMENT_GRID_ALIGN_ITEMS.CENTER)
83
- return 'center';
84
- if (align === DOCUMENT_GRID_ALIGN_ITEMS.END)
85
- return 'end';
86
- return 'start';
87
- })(),
88
- firstPageAlone: gridConfig.firstPageAlone(),
89
- };
90
- }
91
- export function parseHead(head) {
92
- return {
93
- type: head.type(),
94
- blockId: head.blockId(),
95
- size: toPrecisionValue(head.size()),
96
- };
97
- }
98
- // #endregion
99
- // #region STYLE PARSERS (LOW-LEVEL)
100
- export function parseHatchPatternLine(line) {
101
- return {
102
- angle: toRadian(line.angle()),
103
- origin: parsePoint(line.origin()),
104
- offset: [toPrecisionValue(line.offset(0)), toPrecisionValue(line.offset(1))],
105
- dashPattern: Array.from(line.dashPatternArray() || []).map(toPrecisionValue),
106
- };
107
- }
108
- export function parseCustomHatchPattern(pattern) {
109
- return {
110
- name: pattern.name(),
111
- description: pattern.description() || undefined,
112
- lines: Array.from({ length: pattern.linesLength() }, (_, i) => parseHatchPatternLine(pattern.lines(i))),
113
- };
114
- }
115
- export function parseHatchStyle(hatch) {
116
- return {
117
- hatchStyle: hatch.hatchStyle(),
118
- pattern: {
119
- name: hatch.patternName(),
120
- scale: hatch.patternScale(),
121
- angle: toRadian(hatch.patternAngle()),
122
- origin: parsePoint(hatch.patternOrigin()),
123
- double: hatch.patternDouble(),
124
- },
125
- customPattern: hatch.customPattern() ? parseCustomHatchPattern(hatch.customPattern()) : undefined,
126
- };
127
- }
128
- export function parseTilingProperties(tiling) {
129
- var _a, _b, _c;
130
- return {
131
- sizeInPercent: toPercentage(tiling.sizeInPercent()),
132
- angle: toRadian(tiling.angle()),
133
- spacing: (_a = tiling.spacing()) !== null && _a !== void 0 ? _a : undefined,
134
- offsetX: (_b = tiling.offsetX()) !== null && _b !== void 0 ? _b : undefined,
135
- offsetY: (_c = tiling.offsetY()) !== null && _c !== void 0 ? _c : undefined,
136
- };
137
- }
138
- export function parseImageFilter(filter) {
139
- return {
140
- brightness: toPercentage(filter.brightness()),
141
- contrast: toPercentage(filter.contrast()),
142
- };
143
- }
144
- export function parseElementContentBase(content) {
145
- var _a;
146
- return {
147
- preference: ((_a = content.preference()) !== null && _a !== void 0 ? _a : undefined),
148
- src: content.src(),
149
- visible: content.visible(),
150
- opacity: toPercentage(content.opacity()),
151
- tiling: content.tiling() ? parseTilingProperties(content.tiling()) : undefined,
152
- hatch: content.hatch() ? parseHatchStyle(content.hatch()) : undefined,
153
- imageFilter: content.imageFilter() ? parseImageFilter(content.imageFilter()) : undefined,
154
- };
155
- }
156
- export function parseStrokeStyle(style) {
157
- var _a, _b;
158
- return {
159
- preference: ((_a = style.preference()) !== null && _a !== void 0 ? _a : undefined),
160
- cap: style.cap() || undefined,
161
- join: style.join() || undefined,
162
- dash: Array.from(style.dashArray() || []),
163
- dashLineOverride: style.dashLineOverride() || undefined,
164
- dashCap: style.dashCap() || undefined,
165
- miterLimit: (_b = style.miterLimit()) !== null && _b !== void 0 ? _b : undefined,
166
- };
167
- }
168
- export function parseStrokeSides(sides) {
169
- var _a;
170
- return {
171
- preference: ((_a = sides.preference()) !== null && _a !== void 0 ? _a : undefined),
172
- values: Array.from(sides.valuesArray() || []),
173
- };
174
- }
175
- export function parseElementStroke(stroke) {
176
- var _a;
177
- return {
178
- content: parseElementContentBase(stroke.content()),
179
- width: toPrecisionValue(stroke.width()),
180
- style: parseStrokeStyle(stroke.style()),
181
- placement: ((_a = stroke.placement()) !== null && _a !== void 0 ? _a : undefined),
182
- strokeSides: stroke.strokeSides() ? parseStrokeSides(stroke.strokeSides()) : undefined,
183
- };
184
- }
185
- export function parseElementBackground(background) {
186
- return {
187
- content: parseElementContentBase(background.content()),
188
- };
189
- }
190
- export function parseElementStylesBase(styles) {
191
- return {
192
- roundness: toPrecisionValue(styles.roundness()),
193
- blending: styles.blending() || undefined,
194
- background: Array.from({ length: styles.backgroundLength() }, (_, i) => parseElementBackground(styles.background(i))),
195
- stroke: Array.from({ length: styles.strokeLength() }, (_, i) => parseElementStroke(styles.stroke(i))),
196
- opacity: toPercentage(styles.opacity()),
197
- };
198
- }
199
- // #endregion
200
- // #region BASE ELEMENT PARSERS
201
- export function parseElementBase(base) {
202
- const styles = base.styles();
203
- const parsedStyles = styles ? parseElementStylesBase(styles) : {
204
- roundness: toPrecisionValue(0),
205
- blending: undefined,
206
- background: [],
207
- stroke: [],
208
- opacity: toPercentage(1),
209
- };
210
- return Object.assign({ id: base.id(), x: toPrecisionValue(base.x()), y: toPrecisionValue(base.y()), width: toPrecisionValue(base.width()), height: toPrecisionValue(base.height()), angle: toRadian(base.angle()), scope: base.scope(), label: base.label(), description: base.description(), isVisible: base.isVisible(), seed: base.seed(), version: base.version(), versionNonce: base.versionNonce(), updated: Number(base.updated()), index: base.index(), isPlot: base.isPlot(), isAnnotative: base.isAnnotative(), isDeleted: base.isDeleted(), groupIds: Array.from({ length: base.groupIdsLength() }, (_, i) => base.groupIds(i)), regionIds: Array.from({ length: base.regionIdsLength() }, (_, i) => base.regionIds(i)), blockIds: Array.from({ length: base.blockIdsLength() }, (_, i) => base.blockIds(i)), instanceId: base.instanceId(), layerId: base.layerId(), frameId: base.frameId(), boundElements: base.boundElementsLength() > 0 ? Array.from({ length: base.boundElementsLength() }, (_, i) => ({
211
- id: base.boundElements(i).id(),
212
- type: base.boundElements(i).type(),
213
- })) : null, zIndex: base.zIndex(), link: base.link(), locked: base.locked(), customData: parseBinaryToJson(base.customDataArray()) }, parsedStyles);
214
- }
215
- export function parseLineReference(ref) {
216
- return {
217
- index: ref.index(),
218
- handle: ref.handle() ? { x: toPrecisionValue(ref.handle().x()), y: toPrecisionValue(ref.handle().y()) } : null,
219
- };
220
- }
221
- export function parseLine(line) {
222
- return [
223
- parseLineReference(line.start()),
224
- parseLineReference(line.end()),
225
- ];
226
- }
227
- export function parsePath(path) {
228
- return {
229
- lineIndices: Array.from(path.lineIndicesArray() || []),
230
- background: path.background() ? parseElementBackground(path.background()) : null,
231
- stroke: path.stroke() ? parseElementStroke(path.stroke()) : null,
232
- };
233
- }
234
- export function parsePointBinding(binding) {
235
- const pointBindingPoint = binding.point();
236
- return {
237
- elementId: binding.elementId(),
238
- focus: binding.focus(),
239
- gap: toPrecisionValue(binding.gap()),
240
- fixedPoint: binding.fixedPoint() ? parseGeometricPoint(binding.fixedPoint()) : null,
241
- point: pointBindingPoint ? {
242
- index: pointBindingPoint.index(),
243
- offset: pointBindingPoint.offset(),
244
- } : null,
245
- head: binding.head() ? parseHead(binding.head()) : null,
246
- };
247
- }
248
- export function parseLinearElementBase(base) {
249
- return Object.assign(Object.assign({}, parseElementBase(base.base())), { points: Array.from({ length: base.pointsLength() }, (_, i) => parsePoint(base.points(i))), lines: Array.from({ length: base.linesLength() }, (_, i) => parseLine(base.lines(i))), pathOverrides: Array.from({ length: base.pathOverridesLength() }, (_, i) => parsePath(base.pathOverrides(i))), lastCommittedPoint: base.lastCommittedPoint() ? parsePoint(base.lastCommittedPoint()) : null, startBinding: base.startBinding() ? parsePointBinding(base.startBinding()) : null, endBinding: base.endBinding() ? parsePointBinding(base.endBinding()) : null });
250
- }
251
- export function parseStackLikeStyles(styles) {
252
- return {
253
- opacity: toPercentage(styles.opacity()),
254
- labelingColor: styles.labelingColor(),
255
- };
256
- }
257
- export function parseStackBase(base) {
258
- return Object.assign({ label: base.label(), description: base.description(), isCollapsed: base.isCollapsed(), isPlot: base.isPlot(), isVisible: base.isVisible(), locked: base.locked() }, parseStackLikeStyles(base.styles()));
259
- }
260
- export function parseStackElementBase(base) {
261
- return Object.assign(Object.assign(Object.assign({}, parseElementBase(base.base())), parseStackBase(base.stackBase())), { clip: base.clip(), labelVisible: base.labelVisible(), standardOverride: base.standardOverride() });
262
- }
263
- // #endregion
264
- // #region ELEMENT-SPECIFIC PARSERS
265
- function parseRectangleElement(element) {
266
- return Object.assign({ type: "rectangle" }, parseElementBase(element.base()));
267
- }
268
- function parsePolygonElement(element) {
269
- return Object.assign(Object.assign({ type: "polygon" }, parseElementBase(element.base())), { sides: element.sides() });
270
- }
271
- function parseEllipseElement(element) {
272
- return Object.assign(Object.assign({ type: "ellipse" }, parseElementBase(element.base())), { ratio: toPercentage(element.ratio()), startAngle: toRadian(element.startAngle()), endAngle: toRadian(element.endAngle()), showAuxCrosshair: element.showAuxCrosshair() });
273
- }
274
- function parseEmbeddableElement(element) {
275
- return Object.assign({ type: "embeddable" }, parseElementBase(element.base()));
276
- }
277
- function parsePdfElement(element) {
278
- const gridConfig = element.gridConfig();
279
- return Object.assign(Object.assign({ type: "pdf" }, parseElementBase(element.base())), { fileId: element.fileId(), gridConfig: gridConfig ? parseDocumentGridConfig(gridConfig) : {
280
- columns: 1,
281
- gapX: 0,
282
- gapY: 0,
283
- alignItems: 'start',
284
- firstPageAlone: false,
285
- } });
286
- }
287
- function parseMermaidElement(element) {
288
- return Object.assign(Object.assign({ type: "mermaid" }, parseElementBase(element.base())), { source: element.source(), theme: element.theme() || undefined, svgPath: element.svgPath() });
289
- }
290
- function parseTableElement(element) {
291
- const style = element.style();
292
- const columns = {};
293
- for (let i = 0; i < element.columnsLength(); i++) {
294
- const entry = element.columns(i);
295
- const col = entry.value();
296
- columns[entry.key()] = {
297
- id: col.id(),
298
- width: toPrecisionValue(col.width()),
299
- styleOverrides: col.styleOverrides() ? parseTableCellStyle(col.styleOverrides()) : undefined,
300
- };
301
- }
302
- const rows = {};
303
- for (let i = 0; i < element.rowsLength(); i++) {
304
- const entry = element.rows(i);
305
- const row = entry.value();
306
- rows[entry.key()] = {
307
- id: row.id(),
308
- height: toPrecisionValue(row.height()),
309
- styleOverrides: row.styleOverrides() ? parseTableCellStyle(row.styleOverrides()) : undefined,
310
- };
311
- }
312
- const cells = {};
313
- for (let i = 0; i < element.cellsLength(); i++) {
314
- const entry = element.cells(i);
315
- const cell = entry.value();
316
- const span = cell.span();
317
- cells[entry.key()] = {
318
- rowId: cell.rowId(),
319
- columnId: cell.columnId(),
320
- data: cell.data(),
321
- span: span ? { columns: span.columns(), rows: span.rows() } : undefined,
322
- locked: cell.locked(),
323
- styleOverrides: cell.styleOverrides() ? parseTableCellStyle(cell.styleOverrides()) : undefined,
324
- };
325
- }
326
- return Object.assign(Object.assign(Object.assign({ type: "table" }, parseElementBase(element.base())), parseTableStyle(style)), { columnOrder: Array.from({ length: element.columnOrderLength() }, (_, i) => element.columnOrder(i)), rowOrder: Array.from({ length: element.rowOrderLength() }, (_, i) => element.rowOrder(i)), columns,
327
- rows,
328
- cells, headerRowCount: element.headerRowCount(), autoSize: {
329
- columns: element.autoSize().columns(),
330
- rows: element.autoSize().rows(),
331
- } });
332
- }
333
- function parseImageElement(element) {
334
- const crop = element.crop();
335
- const filter = element.filter();
336
- return Object.assign(Object.assign({ type: "image" }, parseElementBase(element.base())), { fileId: element.fileId(), status: element.status(), scaleFlip: [element.scale(0), element.scale(1)], crop: crop ? {
337
- x: crop.x(),
338
- y: crop.y(),
339
- width: crop.width(),
340
- height: crop.height(),
341
- naturalWidth: crop.naturalWidth(),
342
- naturalHeight: crop.naturalHeight(),
343
- } : null, filter: filter ? parseImageFilter(filter) : null });
344
- }
345
- function parseTextElement(element) {
346
- const dynamicParts = [];
347
- for (let i = 0; i < element.dynamicLength(); i++) {
348
- const partFb = element.dynamic(i);
349
- const sourceFb = partFb.source();
350
- let source;
351
- if (sourceFb.textSourceType() === TEXT_FIELD_SOURCE_TYPE.ELEMENT) {
352
- const elementSource = sourceFb.source(new DucTextDynamicElementSourceFb());
353
- source = {
354
- sourceType: TEXT_FIELD_SOURCE_TYPE.ELEMENT,
355
- elementId: elementSource.elementId(),
356
- property: elementSource.property(),
357
- };
358
- }
359
- else {
360
- const dictSource = sourceFb.source(new DucTextDynamicDictionarySourceFb());
361
- source = {
362
- sourceType: TEXT_FIELD_SOURCE_TYPE.DICTIONARY,
363
- key: dictSource.key(),
364
- };
365
- }
366
- dynamicParts.push({
367
- tag: partFb.tag(),
368
- source,
369
- formatting: partFb.formatting() ? parsePrimaryUnits(partFb.formatting()) : undefined,
370
- cachedValue: partFb.cachedValue(),
371
- });
372
- }
373
- return Object.assign(Object.assign(Object.assign({ type: "text" }, parseElementBase(element.base())), parseTextStyle(element.style())), { text: element.text(), dynamic: dynamicParts, autoResize: element.autoResize(), containerId: element.containerId(), originalText: element.originalText() });
374
- }
375
- function parseLinearElement(element) {
376
- return Object.assign(Object.assign({ type: "line" }, parseLinearElementBase(element.linearBase())), { wipeoutBelow: element.wipeoutBelow() });
377
- }
378
- function parseArrowElement(element) {
379
- return Object.assign(Object.assign({ type: "arrow" }, parseLinearElementBase(element.linearBase())), { elbowed: element.elbowed() });
380
- }
381
- function parseFreeDrawElement(element) {
382
- const start = element.start();
383
- const end = element.end();
384
- return Object.assign(Object.assign({ type: "freedraw" }, parseElementBase(element.base())), { points: Array.from({ length: element.pointsLength() }, (_, i) => parsePoint(element.points(i))), size: toPrecisionValue(element.size()), thinning: toPercentage(element.thinning()), smoothing: toPercentage(element.smoothing()), streamline: toPercentage(element.streamline()), easing: element.easing(), start: start ? { cap: start.cap(), taper: start.taper(), easing: start.easing() } : null, end: end ? { cap: end.cap(), taper: end.taper(), easing: end.easing() } : null, pressures: Array.from(element.pressuresArray() || []), simulatePressure: element.simulatePressure(), lastCommittedPoint: element.lastCommittedPoint() ? parsePoint(element.lastCommittedPoint()) : null, svgPath: element.svgPath() });
385
- }
386
- function parseBlockInstance(instance) {
387
- const duplicationArray = instance.duplicationArray();
388
- const attributeValues = {};
389
- for (let i = 0; i < instance.attributeValuesLength(); i++) {
390
- const entry = instance.attributeValues(i);
391
- attributeValues[entry.key()] = entry.value();
392
- }
393
- const elementOverrides = {};
394
- for (let i = 0; i < instance.elementOverridesLength(); i++) {
395
- const entry = instance.elementOverrides(i);
396
- elementOverrides[entry.key()] = entry.value();
397
- }
398
- return {
399
- id: instance.id(),
400
- blockId: instance.blockId(),
401
- version: instance.version(),
402
- attributeValues: attributeValues,
403
- elementOverrides: elementOverrides,
404
- duplicationArray: duplicationArray ? {
405
- rows: duplicationArray.rows(),
406
- cols: duplicationArray.cols(),
407
- rowSpacing: toPrecisionValue(duplicationArray.rowSpacing()),
408
- colSpacing: toPrecisionValue(duplicationArray.colSpacing()),
409
- } : null,
410
- };
411
- }
412
- // Helper function to parse block metadata from FlatBuffers
413
- function parseBlockMetadata(metadataFb) {
414
- if (!metadataFb)
415
- return undefined;
416
- // localization is now binary JSON data (Uint8Array)
417
- const localization = parseBinaryToJson(metadataFb.localizationArray());
418
- const rawSource = metadataFb.source();
419
- const source = typeof rawSource === "string" && rawSource.trim().length
420
- ? rawSource.trim()
421
- : undefined;
422
- return Object.assign(Object.assign({}, (source ? { source } : {})), { usageCount: metadataFb.usageCount(), createdAt: Number(metadataFb.createdAt()), updatedAt: Number(metadataFb.updatedAt()), localization });
423
- }
424
- function parseBlockCollection(collection) {
425
- const children = Array.from({ length: collection.childrenLength() }, (_, i) => {
426
- const child = collection.children(i);
427
- return {
428
- id: child.id(),
429
- isCollection: child.isCollection(),
430
- };
42
+ const data = transformFromRust(raw);
43
+ return restore(data, elementsConfig !== null && elementsConfig !== void 0 ? elementsConfig : { syncInvalidIndices: (els) => els }, restoreConfig);
431
44
  });
432
- const metadata = parseBlockMetadata(collection.metadata());
433
- return {
434
- id: collection.id(),
435
- label: collection.label(),
436
- children,
437
- metadata,
438
- thumbnail: collection.thumbnailArray() || undefined,
439
- };
440
- }
441
- function parseFrameElement(element) {
442
- return Object.assign({ type: "frame" }, parseStackElementBase(element.stackElementBase()));
443
- }
444
- function parsePlotElement(element) {
445
- const layout = element.layout();
446
- return Object.assign(Object.assign(Object.assign({ type: "plot" }, parseStackElementBase(element.stackElementBase())), parsePlotStyle(element.style())), { layout: {
447
- margins: parseMargins(layout.margins()),
448
- } });
449
- }
450
- function parseViewportElement(element) {
451
- return Object.assign(Object.assign(Object.assign(Object.assign({ type: "viewport" }, parseLinearElementBase(element.linearBase())), parseStackBase(element.stackBase())), parseViewportStyle(element.style())), { view: parseView(element.view()), scale: element.scale(), shadePlot: element.shadePlot(), frozenGroupIds: Array.from({ length: element.frozenGroupIdsLength() }, (_, i) => element.frozenGroupIds(i)), standardOverride: element.standardOverride() });
452
- }
453
- function parseXRayElement(element) {
454
- return Object.assign(Object.assign(Object.assign({ type: "xray" }, parseElementBase(element.base())), parseXRayStyle(element.style())), { origin: parsePoint(element.origin()), direction: parsePoint(element.direction()), startFromOrigin: element.startFromOrigin() });
455
- }
456
- function parseLeaderElement(element) {
457
- const contentFb = element.content();
458
- let leaderContent = null;
459
- if (contentFb) {
460
- const contentType = contentFb.leaderContentType();
461
- if (contentType === LEADER_CONTENT_TYPE_ENUM.TEXT) {
462
- const textContent = contentFb.content(new LeaderTextBlockContentFb());
463
- leaderContent = {
464
- type: "text",
465
- text: textContent.text(),
466
- };
467
- }
468
- else if (contentType === LEADER_CONTENT_TYPE_ENUM.BLOCK) {
469
- const blockContent = contentFb.content(new LeaderBlockContentFb());
470
- const attributeValues = {};
471
- for (let i = 0; i < blockContent.attributeValuesLength(); i++) {
472
- const entry = blockContent.attributeValues(i);
473
- attributeValues[entry.key()] = entry.value();
474
- }
475
- const elementOverrides = {};
476
- for (let i = 0; i < blockContent.elementOverridesLength(); i++) {
477
- const entry = blockContent.elementOverrides(i);
478
- elementOverrides[entry.key()] = entry.value();
479
- }
480
- leaderContent = {
481
- type: "block",
482
- blockId: blockContent.blockId(),
483
- instanceData: {
484
- attributeValues,
485
- elementOverrides,
486
- },
487
- };
488
- }
489
- }
490
- return Object.assign(Object.assign(Object.assign({ type: "leader" }, parseLinearElementBase(element.linearBase())), parseLeaderStyle(element.style())), { leaderContent, contentAnchor: parseGeometricPoint(element.contentAnchor()) });
491
- }
492
- function parseDimensionElement(element) {
493
- const defPoints = element.definitionPoints();
494
- const bindings = element.bindings();
495
- const toleranceOverride = element.toleranceOverride();
496
- return Object.assign(Object.assign(Object.assign({ type: "dimension" }, parseElementBase(element.base())), parseDimensionStyle(element.style())), { dimensionType: element.dimensionType(), definitionPoints: {
497
- origin1: parseGeometricPoint(defPoints.origin1()),
498
- origin2: defPoints.origin2() ? parseGeometricPoint(defPoints.origin2()) : undefined,
499
- location: parseGeometricPoint(defPoints.location()),
500
- center: defPoints.center() ? parseGeometricPoint(defPoints.center()) : undefined,
501
- jog: defPoints.jog() ? parseGeometricPoint(defPoints.jog()) : undefined,
502
- }, obliqueAngle: toRadian(element.obliqueAngle()), ordinateAxis: element.ordinateAxis() || null, bindings: bindings ? {
503
- origin1: bindings.origin1() ? parsePointBinding(bindings.origin1()) : null,
504
- origin2: bindings.origin2() ? parsePointBinding(bindings.origin2()) : null,
505
- center: bindings.center() ? parsePointBinding(bindings.center()) : null,
506
- } : undefined, textOverride: element.textOverride(), textPosition: element.textPosition() ? parseGeometricPoint(element.textPosition()) : null, toleranceOverride: toleranceOverride ? parseDimensionToleranceStyle(toleranceOverride) : undefined, baselineData: element.baselineData() ? { baseDimensionId: element.baselineData().baseDimensionId() } : undefined, continueData: element.continueData() ? { continueFromDimensionId: element.continueData().continueFromDimensionId() } : undefined, calculatedValue: toPrecisionValue(0) });
507
- }
508
- function parseFeatureControlFrameElement(element) {
509
- const frameModifiers = element.frameModifiers();
510
- const datumDef = element.datumDefinition();
511
- return Object.assign(Object.assign(Object.assign({ type: "featurecontrolframe" }, parseElementBase(element.base())), parseFeatureControlFrameStyle(element.style())), { rows: Array.from({ length: element.rowsLength() }, (_, i) => {
512
- const row = element.rows(i);
513
- return Array.from({ length: row.segmentsLength() }, (_, j) => {
514
- const seg = row.segments(j);
515
- const tol = seg.tolerance();
516
- return {
517
- symbol: seg.symbol(),
518
- tolerance: {
519
- value: tol.value(),
520
- zoneType: tol.zoneType() || undefined,
521
- featureModifiers: Array.from(tol.featureModifiersArray() || []),
522
- materialCondition: tol.materialCondition() || undefined,
523
- },
524
- datums: Array.from({ length: seg.datumsLength() }, (_, k) => {
525
- const datum = seg.datums(k);
526
- return {
527
- letters: datum.letters(),
528
- modifier: datum.modifier() || undefined,
529
- };
530
- }),
531
- };
532
- });
533
- }), frameModifiers: frameModifiers ? {
534
- allAround: frameModifiers.allAround(),
535
- allOver: frameModifiers.allOver(),
536
- continuousFeature: frameModifiers.continuousFeature(),
537
- between: frameModifiers.between() ? { start: frameModifiers.between().start(), end: frameModifiers.between().end() } : undefined,
538
- projectedToleranceZone: frameModifiers.projectedToleranceZone() ? toPrecisionValue(frameModifiers.projectedToleranceZone().value()) : undefined,
539
- } : undefined, leaderElementId: element.leaderElementId(), datumDefinition: datumDef ? {
540
- letter: datumDef.letter(),
541
- featureBinding: datumDef.featureBinding() ? parsePointBinding(datumDef.featureBinding()) : undefined,
542
- } : undefined });
543
- }
544
- function parseDocElement(element) {
545
- const dynamicParts = [];
546
- for (let i = 0; i < element.dynamicLength(); i++) {
547
- const partFb = element.dynamic(i);
548
- const sourceFb = partFb.source();
549
- let source;
550
- if (sourceFb.textSourceType() === TEXT_FIELD_SOURCE_TYPE.ELEMENT) {
551
- const elementSource = sourceFb.source(new DucTextDynamicElementSourceFb());
552
- source = {
553
- sourceType: TEXT_FIELD_SOURCE_TYPE.ELEMENT,
554
- elementId: elementSource.elementId(),
555
- property: elementSource.property(),
556
- };
557
- }
558
- else {
559
- const dictSource = sourceFb.source(new DucTextDynamicDictionarySourceFb());
560
- source = {
561
- sourceType: TEXT_FIELD_SOURCE_TYPE.DICTIONARY,
562
- key: dictSource.key(),
563
- };
564
- }
565
- dynamicParts.push({
566
- tag: partFb.tag(),
567
- source,
568
- formatting: partFb.formatting() ? parsePrimaryUnits(partFb.formatting()) : undefined,
569
- cachedValue: partFb.cachedValue(),
570
- });
571
- }
572
- const columns = element.columns();
573
- const gridConfig = element.gridConfig();
574
- return Object.assign(Object.assign(Object.assign({ type: "doc" }, parseElementBase(element.base())), parseDocStyle(element.style())), { text: element.text(), dynamic: dynamicParts, flowDirection: element.flowDirection(), columns: {
575
- type: columns.type(),
576
- definitions: Array.from({ length: columns.definitionsLength() }, (_, i) => {
577
- const col = columns.definitions(i);
578
- return {
579
- width: toPrecisionValue(col.width()),
580
- gutter: toPrecisionValue(col.gutter()),
581
- };
582
- }),
583
- autoHeight: columns.autoHeight(),
584
- }, autoResize: element.autoResize(), fileId: element.fileId(), gridConfig: gridConfig ? parseDocumentGridConfig(gridConfig) : {
585
- columns: 1,
586
- gapX: 0,
587
- gapY: 0,
588
- alignItems: 'start',
589
- firstPageAlone: false,
590
- } });
591
- }
592
- function parseModelElement(element) {
593
- return Object.assign(Object.assign({ type: "model" }, parseElementBase(element.base())), { source: element.source(), svgPath: element.svgPath(), fileIds: Array.from({ length: element.fileIdsLength() }, (_, i) => element.fileIds(i)) });
594
- }
595
- // #endregion
596
- // #region STYLE PARSERS (ELEMENT-LEVEL)
597
- export function parseTextStyle(style) {
598
- const lineSpacing = style.lineSpacing();
599
- return {
600
- isLtr: style.isLtr(),
601
- fontFamily: style.fontFamily(), // For now will use as any because this will be a string in the future
602
- bigFontFamily: style.bigFontFamily(),
603
- textAlign: style.textAlign(),
604
- verticalAlign: style.verticalAlign(),
605
- lineHeight: style.lineHeight(),
606
- lineSpacing: {
607
- value: toPrecisionValue(lineSpacing.value()),
608
- type: lineSpacing.type(),
609
- },
610
- obliqueAngle: toRadian(style.obliqueAngle()),
611
- fontSize: toPrecisionValue(style.fontSize()),
612
- paperTextHeight: toPrecisionValue(style.paperTextHeight()),
613
- widthFactor: toScaleFactor(style.widthFactor()),
614
- isUpsideDown: style.isUpsideDown(),
615
- isBackwards: style.isBackwards(),
616
- };
617
- }
618
- export function parseTableCellStyle(style) {
619
- return Object.assign(Object.assign({}, parseElementStylesBase(style.baseStyle())), { textStyle: parseTextStyle(style.textStyle()), margins: parseMargins(style.margins()), alignment: style.alignment() });
620
- }
621
- export function parseTableStyle(style) {
622
- return {
623
- flowDirection: style.flowDirection(),
624
- headerRowStyle: parseTableCellStyle(style.headerRowStyle()),
625
- dataRowStyle: parseTableCellStyle(style.dataRowStyle()),
626
- dataColumnStyle: parseTableCellStyle(style.dataColumnStyle()),
627
- };
628
- }
629
- export function parsePlotStyle(style) {
630
- return {};
631
- }
632
- export function parseViewportStyle(style) {
633
- return {
634
- scaleIndicatorVisible: style.scaleIndicatorVisible(),
635
- };
636
- }
637
- export function parseXRayStyle(style) {
638
- return {
639
- color: style.color(),
640
- };
641
- }
642
- export function parseLeaderStyle(style) {
643
- var _a, _b;
644
- return {
645
- headsOverride: style.headsOverrideLength() > 0 ? [parseHead(style.headsOverride(0)), parseHead(style.headsOverride(1))] : undefined,
646
- dogleg: style.dogleg() ? toPrecisionValue(style.dogleg()) : undefined,
647
- textStyle: parseTextStyle(style.textStyle()),
648
- textAttachment: ((_a = style.textAttachment()) !== null && _a !== void 0 ? _a : undefined),
649
- blockAttachment: ((_b = style.blockAttachment()) !== null && _b !== void 0 ? _b : undefined),
650
- };
651
- }
652
- export function parseDimensionToleranceStyle(style) {
653
- return {
654
- enabled: style.enabled(),
655
- displayMethod: style.displayMethod(),
656
- upperValue: style.upperValue(),
657
- lowerValue: style.lowerValue(),
658
- precision: style.precision(),
659
- textStyle: style.textStyle() ? parseTextStyle(style.textStyle()) : {},
660
- };
661
- }
662
- export function parseDimensionStyle(style) {
663
- const dimLine = style.dimLine();
664
- const extLine = style.extLine();
665
- const symbols = style.symbols();
666
- const centerMark = symbols.centerMarkType() ? { type: symbols.centerMarkType(), size: toPrecisionValue(symbols.centerMarkSize()) } : undefined;
667
- const fit = style.fit();
668
- return {
669
- dimLine: {
670
- stroke: parseElementStroke(dimLine.stroke()),
671
- textGap: toPrecisionValue(dimLine.textGap()),
672
- },
673
- extLine: {
674
- stroke: parseElementStroke(extLine.stroke()),
675
- overshoot: toPrecisionValue(extLine.overshoot()),
676
- offset: toPrecisionValue(extLine.offset()),
677
- },
678
- textStyle: parseTextStyle(style.textStyle()),
679
- symbols: {
680
- headsOverride: symbols.headsOverrideLength() > 0 ? [parseHead(symbols.headsOverride(0)), parseHead(symbols.headsOverride(1))] : undefined,
681
- centerMark: centerMark,
682
- },
683
- tolerance: parseDimensionToleranceStyle(style.tolerance()),
684
- fit: {
685
- rule: fit.rule(),
686
- textPlacement: fit.textPlacement(),
687
- forceTextInside: fit.forceTextInside(),
688
- },
689
- };
690
- }
691
- export function parseFeatureControlFrameStyle(style) {
692
- const layout = style.layout();
693
- return {
694
- textStyle: parseTextStyle(style.textStyle()),
695
- layout: {
696
- padding: toPrecisionValue(layout.padding()),
697
- segmentSpacing: toPrecisionValue(layout.segmentSpacing()),
698
- rowSpacing: toPrecisionValue(layout.rowSpacing()),
699
- },
700
- symbols: {
701
- scale: style.symbols().scale(),
702
- },
703
- datumStyle: {
704
- bracketStyle: style.datumStyle().bracketStyle(),
705
- },
706
- };
707
- }
708
- export function parseDocStyle(style) {
709
- const paragraph = style.paragraph();
710
- const stackFormat = style.stackFormat();
711
- const stackProps = stackFormat.properties();
712
- return Object.assign(Object.assign({}, parseTextStyle(style.textStyle())), { paragraph: {
713
- firstLineIndent: toPrecisionValue(paragraph.firstLineIndent()),
714
- hangingIndent: toPrecisionValue(paragraph.hangingIndent()),
715
- leftIndent: toPrecisionValue(paragraph.leftIndent()),
716
- rightIndent: toPrecisionValue(paragraph.rightIndent()),
717
- spaceBefore: toPrecisionValue(paragraph.spaceBefore()),
718
- spaceAfter: toPrecisionValue(paragraph.spaceAfter()),
719
- tabStops: Array.from({ length: paragraph.tabStopsLength() }, (_, i) => toPrecisionValue(paragraph.tabStops(i))),
720
- }, stackFormat: {
721
- autoStack: stackFormat.autoStack(),
722
- stackChars: Array.from({ length: stackFormat.stackCharsLength() }, (_, i) => stackFormat.stackChars(i)),
723
- properties: {
724
- upperScale: stackProps.upperScale(),
725
- lowerScale: stackProps.lowerScale(),
726
- alignment: stackProps.alignment(),
727
- },
728
- } });
729
- }
730
- // #endregion
731
- // #region MAIN ELEMENT PARSER
732
- export function parseElementFromBinary(wrapper) {
733
- const elementType = wrapper.elementType();
734
- // Skip if no type is set
735
- if (elementType === ElementUnion.NONE || elementType == null) {
736
- return null;
737
- }
738
- // Request the union only after type is known. Some flatc runtimes return null when the field is absent,
739
- // which previously led to __union being called with invalid state in downstream code.
740
- let element = null;
741
- switch (elementType) {
742
- case ElementUnion.DucRectangleElement:
743
- element = wrapper.element(new DucRectangleElementFb());
744
- break;
745
- case ElementUnion.DucPolygonElement:
746
- element = wrapper.element(new DucPolygonElementFb());
747
- break;
748
- case ElementUnion.DucEllipseElement:
749
- element = wrapper.element(new DucEllipseElementFb());
750
- break;
751
- case ElementUnion.DucEmbeddableElement:
752
- element = wrapper.element(new DucEmbeddableElementFb());
753
- break;
754
- case ElementUnion.DucPdfElement:
755
- element = wrapper.element(new DucPdfElementFb());
756
- break;
757
- case ElementUnion.DucMermaidElement:
758
- element = wrapper.element(new DucMermaidElementFb());
759
- break;
760
- case ElementUnion.DucTableElement:
761
- element = wrapper.element(new DucTableElementFb());
762
- break;
763
- case ElementUnion.DucImageElement:
764
- element = wrapper.element(new DucImageElementFb());
765
- break;
766
- case ElementUnion.DucTextElement:
767
- element = wrapper.element(new DucTextElementFb());
768
- break;
769
- case ElementUnion.DucLinearElement:
770
- element = wrapper.element(new DucLinearElementFb());
771
- break;
772
- case ElementUnion.DucArrowElement:
773
- element = wrapper.element(new DucArrowElementFb());
774
- break;
775
- case ElementUnion.DucFreeDrawElement:
776
- element = wrapper.element(new DucFreeDrawElementFb());
777
- break;
778
- case ElementUnion.DucFrameElement:
779
- element = wrapper.element(new DucFrameElementFb());
780
- break;
781
- case ElementUnion.DucPlotElement:
782
- element = wrapper.element(new DucPlotElementFb());
783
- break;
784
- case ElementUnion.DucViewportElement:
785
- element = wrapper.element(new DucViewportElementFb());
786
- break;
787
- case ElementUnion.DucXRayElement:
788
- element = wrapper.element(new DucXRayElementFb());
789
- break;
790
- case ElementUnion.DucLeaderElement:
791
- element = wrapper.element(new DucLeaderElementFb());
792
- break;
793
- case ElementUnion.DucDimensionElement:
794
- element = wrapper.element(new DucDimensionElementFb());
795
- break;
796
- case ElementUnion.DucFeatureControlFrameElement:
797
- element = wrapper.element(new DucFeatureControlFrameElementFb());
798
- break;
799
- case ElementUnion.DucDocElement:
800
- element = wrapper.element(new DucDocElementFb());
801
- break;
802
- case ElementUnion.DucModelElement:
803
- element = wrapper.element(new DucModelElementFb());
804
- break;
805
- default:
806
- return null;
807
- }
808
- if (!element) {
809
- // Gracefully skip malformed/missing element entries
810
- return null;
811
- }
812
- switch (elementType) {
813
- case ElementUnion.DucRectangleElement:
814
- return parseRectangleElement(element);
815
- case ElementUnion.DucPolygonElement:
816
- return parsePolygonElement(element);
817
- case ElementUnion.DucEllipseElement:
818
- return parseEllipseElement(element);
819
- case ElementUnion.DucEmbeddableElement:
820
- return parseEmbeddableElement(element);
821
- case ElementUnion.DucPdfElement:
822
- return parsePdfElement(element);
823
- case ElementUnion.DucMermaidElement:
824
- return parseMermaidElement(element);
825
- case ElementUnion.DucTableElement:
826
- return parseTableElement(element);
827
- case ElementUnion.DucImageElement:
828
- return parseImageElement(element);
829
- case ElementUnion.DucTextElement:
830
- return parseTextElement(element);
831
- case ElementUnion.DucLinearElement:
832
- return parseLinearElement(element);
833
- case ElementUnion.DucArrowElement:
834
- return parseArrowElement(element);
835
- case ElementUnion.DucFreeDrawElement:
836
- return parseFreeDrawElement(element);
837
- case ElementUnion.DucFrameElement:
838
- return parseFrameElement(element);
839
- case ElementUnion.DucPlotElement:
840
- return parsePlotElement(element);
841
- case ElementUnion.DucViewportElement:
842
- return parseViewportElement(element);
843
- case ElementUnion.DucXRayElement:
844
- return parseXRayElement(element);
845
- case ElementUnion.DucLeaderElement:
846
- return parseLeaderElement(element);
847
- case ElementUnion.DucDimensionElement:
848
- return parseDimensionElement(element);
849
- case ElementUnion.DucFeatureControlFrameElement:
850
- return parseFeatureControlFrameElement(element);
851
- case ElementUnion.DucDocElement:
852
- return parseDocElement(element);
853
- case ElementUnion.DucModelElement:
854
- return parseModelElement(element);
855
- default:
856
- return null;
857
- }
858
- }
859
- // #endregion
860
- // #region TOP-LEVEL STRUCTURE PARSERS
861
- export function parseBlockFromBinary(block) {
862
- const attributeDefinitions = {};
863
- for (let i = 0; i < block.attributeDefinitionsLength(); i++) {
864
- const entry = block.attributeDefinitions(i);
865
- const def = entry.value();
866
- attributeDefinitions[entry.key()] = {
867
- tag: def.tag(),
868
- prompt: def.prompt() || undefined,
869
- defaultValue: def.defaultValue(),
870
- isConstant: def.isConstant(),
871
- };
872
- }
873
- // Parse metadata if present
874
- const metadata = parseBlockMetadata(block.metadata());
875
- // Parse thumbnail if present
876
- const thumbnail = block.thumbnailArray();
877
- return {
878
- id: block.id(),
879
- label: block.label(),
880
- description: block.description() || undefined,
881
- version: block.version(),
882
- attributeDefinitions,
883
- metadata,
884
- thumbnail: thumbnail || undefined,
885
- };
886
- }
887
- export function parseDictionaryFromBinary(data) {
888
- const dictionary = {};
889
- for (let i = 0; i < data.dictionaryLength(); i++) {
890
- const entry = data.dictionary(i);
891
- dictionary[entry.key()] = entry.value();
892
- }
893
- return dictionary;
894
- }
895
- export function parseExternalFilesFromBinary(entry) {
896
- const fileData = entry.value();
897
- const data = fileData.dataArray();
898
- const key = entry.key();
899
- const id = fileData.id();
900
- return {
901
- [key]: {
902
- id,
903
- mimeType: fileData.mimeType(),
904
- data,
905
- created: Number(fileData.created()),
906
- lastRetrieved: Number(fileData.lastRetrieved()) || undefined,
907
- }
908
- };
909
- }
910
- export function parseGlobalStateFromBinary(state) {
911
- return {
912
- name: state.name(),
913
- viewBackgroundColor: state.viewBackgroundColor(),
914
- mainScope: state.mainScope(),
915
- dashSpacingScale: toScaleFactor(state.dashSpacingScale()),
916
- isDashSpacingAffectedByViewportScale: state.isDashSpacingAffectedByViewportScale(),
917
- scopeExponentThreshold: state.scopeExponentThreshold(),
918
- dimensionsAssociativeByDefault: state.dimensionsAssociativeByDefault(),
919
- useAnnotativeScaling: state.useAnnotativeScaling(),
920
- displayPrecision: {
921
- linear: state.displayPrecisionLinear(),
922
- angular: state.displayPrecisionAngular(),
923
- },
924
- pruningLevel: state.pruningLevel(),
925
- };
926
45
  }
927
- export function parseGroupFromBinary(group) {
928
- return Object.assign({ id: group.id() }, parseStackBase(group.stackBase()));
929
- }
930
- export function parseLayerFromBinary(layer) {
931
- const overrides = layer.overrides();
932
- return Object.assign(Object.assign({ id: layer.id() }, parseStackBase(layer.stackBase())), { readonly: layer.readonly(), overrides: overrides ? {
933
- stroke: parseElementStroke(overrides.stroke()),
934
- background: parseElementBackground(overrides.background()),
935
- } : null });
936
- }
937
- export function parseLocalStateFromBinary(state) {
938
- return {
939
- scope: state.scope(),
940
- activeStandardId: state.activeStandardId(),
941
- scrollX: toPrecisionValue(state.scrollX()),
942
- scrollY: toPrecisionValue(state.scrollY()),
943
- zoom: toZoom(state.zoom()),
944
- activeGridSettings: Array.from({ length: state.activeGridSettingsLength() }, (_, i) => state.activeGridSettings(i)),
945
- activeSnapSettings: state.activeSnapSettings(),
946
- isBindingEnabled: state.isBindingEnabled(),
947
- currentItemStroke: parseElementStroke(state.currentItemStroke()),
948
- currentItemBackground: parseElementBackground(state.currentItemBackground()),
949
- currentItemOpacity: toPercentage(state.currentItemOpacity()),
950
- currentItemFontFamily: state.currentItemFontFamily(), // For now will use as any because this will be a string in the future
951
- currentItemFontSize: toPrecisionValue(state.currentItemFontSize()),
952
- currentItemTextAlign: state.currentItemTextAlign(),
953
- currentItemStartLineHead: state.currentItemStartLineHead() ? parseHead(state.currentItemStartLineHead()) : null,
954
- currentItemEndLineHead: state.currentItemEndLineHead() ? parseHead(state.currentItemEndLineHead()) : null,
955
- currentItemRoundness: toPrecisionValue(state.currentItemRoundness()),
956
- gridSize: 0, // deprecated
957
- gridStep: 0, // deprecated
958
- penMode: state.penMode(),
959
- viewModeEnabled: state.viewModeEnabled(),
960
- objectsSnapModeEnabled: state.objectsSnapModeEnabled(),
961
- gridModeEnabled: state.gridModeEnabled(),
962
- outlineModeEnabled: state.outlineModeEnabled(),
963
- manualSaveMode: state.manualSaveMode(),
964
- };
965
- }
966
- export function parseRegionFromBinary(region) {
967
- return Object.assign(Object.assign({ id: region.id() }, parseStackBase(region.stackBase())), { booleanOperation: region.booleanOperation() });
968
- }
969
- export function parsePrimaryUnits(units) {
970
- const linear = units.linear();
971
- const angular = units.angular();
972
- return {
973
- linear: {
974
- format: linear.format(),
975
- system: linear.base().system(),
976
- precision: linear.base().precision(),
977
- suppressLeadingZeros: linear.base().suppressLeadingZeros(),
978
- suppressTrailingZeros: linear.base().suppressTrailingZeros(),
979
- decimalSeparator: linear.decimalSeparator(),
980
- suppressZeroFeet: linear.suppressZeroFeet(),
981
- suppressZeroInches: linear.suppressZeroInches(),
982
- },
983
- angular: {
984
- format: angular.format(),
985
- system: angular.base().system(),
986
- precision: angular.base().precision(),
987
- suppressLeadingZeros: angular.base().suppressLeadingZeros(),
988
- suppressTrailingZeros: angular.base().suppressTrailingZeros(),
989
- },
990
- };
991
- }
992
- export function parseStandardFromBinary(standard) {
993
- const overrides = standard.overrides();
994
- const styles = standard.styles();
995
- const viewSettings = standard.viewSettings();
996
- const units = standard.units();
997
- const validation = standard.validation();
998
- const primaryUnits = units === null || units === void 0 ? void 0 : units.primaryUnits();
999
- const alternateUnits = units === null || units === void 0 ? void 0 : units.alternateUnits();
1000
- return {
1001
- id: standard.identifier().id(),
1002
- name: standard.identifier().name(),
1003
- description: standard.identifier().description() || undefined,
1004
- version: standard.version(),
1005
- readonly: standard.readonly(),
1006
- overrides: overrides ? {
1007
- mainScope: overrides.mainScope() || undefined,
1008
- elementsStrokeWidthOverride: overrides.elementsStrokeWidthOverride() ? toPrecisionValue(overrides.elementsStrokeWidthOverride()) : undefined,
1009
- commonStyleId: overrides.commonStyleId() || undefined,
1010
- stackLikeStyleId: overrides.stackLikeStyleId() || undefined,
1011
- textStyleId: overrides.textStyleId() || undefined,
1012
- dimensionStyleId: overrides.dimensionStyleId() || undefined,
1013
- leaderStyleId: overrides.leaderStyleId() || undefined,
1014
- featureControlFrameStyleId: overrides.featureControlFrameStyleId() || undefined,
1015
- tableStyleId: overrides.tableStyleId() || undefined,
1016
- docStyleId: overrides.docStyleId() || undefined,
1017
- viewportStyleId: overrides.viewportStyleId() || undefined,
1018
- plotStyleId: overrides.plotStyleId() || undefined,
1019
- hatchStyleId: overrides.hatchStyleId() || undefined,
1020
- activeGridSettingsId: Array.from({ length: overrides.activeGridSettingsIdLength() }, (_, i) => overrides.activeGridSettingsId(i)),
1021
- activeSnapSettingsId: overrides.activeSnapSettingsId() || undefined,
1022
- dashLineOverride: overrides.dashLineOverride() || undefined,
1023
- unitPrecision: overrides.unitPrecision() ? {
1024
- linear: overrides.unitPrecision().linear(),
1025
- angular: overrides.unitPrecision().angular(),
1026
- area: overrides.unitPrecision().area(),
1027
- volume: overrides.unitPrecision().volume(),
1028
- } : undefined,
1029
- } : null,
1030
- styles: styles ? {
1031
- commonStyles: Array.from({ length: styles.commonStylesLength() }, (_, i) => {
1032
- const s = styles.commonStyles(i);
1033
- return Object.assign({ id: s.id().id(), name: s.id().name(), description: s.id().description() || undefined }, parseCommonStyle(s.style()));
1034
- }),
1035
- stackLikeStyles: Array.from({ length: styles.stackLikeStylesLength() }, (_, i) => {
1036
- const s = styles.stackLikeStyles(i);
1037
- return Object.assign({ id: s.id().id(), name: s.id().name(), description: s.id().description() || undefined }, parseStackLikeStyles(s.style()));
1038
- }),
1039
- textStyles: Array.from({ length: styles.textStylesLength() }, (_, i) => {
1040
- const s = styles.textStyles(i);
1041
- return Object.assign({ id: s.id().id(), name: s.id().name(), description: s.id().description() || undefined }, parseTextStyle(s.style()));
1042
- }),
1043
- dimensionStyles: Array.from({ length: styles.dimensionStylesLength() }, (_, i) => {
1044
- const s = styles.dimensionStyles(i);
1045
- return Object.assign({ id: s.id().id(), name: s.id().name(), description: s.id().description() || undefined }, parseDimensionStyle(s.style()));
1046
- }),
1047
- leaderStyles: Array.from({ length: styles.leaderStylesLength() }, (_, i) => {
1048
- const s = styles.leaderStyles(i);
1049
- return Object.assign({ id: s.id().id(), name: s.id().name(), description: s.id().description() || undefined }, parseLeaderStyle(s.style()));
1050
- }),
1051
- featureControlFrameStyles: Array.from({ length: styles.featureControlFrameStylesLength() }, (_, i) => {
1052
- const s = styles.featureControlFrameStyles(i);
1053
- return Object.assign({ id: s.id().id(), name: s.id().name(), description: s.id().description() || undefined }, parseFeatureControlFrameStyle(s.style()));
1054
- }),
1055
- tableStyles: Array.from({ length: styles.tableStylesLength() }, (_, i) => {
1056
- const s = styles.tableStyles(i);
1057
- return Object.assign({ id: s.id().id(), name: s.id().name(), description: s.id().description() || undefined }, parseTableStyle(s.style()));
1058
- }),
1059
- docStyles: Array.from({ length: styles.docStylesLength() }, (_, i) => {
1060
- const s = styles.docStyles(i);
1061
- return Object.assign({ id: s.id().id(), name: s.id().name(), description: s.id().description() || undefined }, parseDocStyle(s.style()));
1062
- }),
1063
- viewportStyles: Array.from({ length: styles.viewportStylesLength() }, (_, i) => {
1064
- const s = styles.viewportStyles(i);
1065
- return Object.assign({ id: s.id().id(), name: s.id().name(), description: s.id().description() || undefined }, parseViewportStyle(s.style()));
1066
- }),
1067
- hatchStyles: Array.from({ length: styles.hatchStylesLength() }, (_, i) => {
1068
- const s = styles.hatchStyles(i);
1069
- return Object.assign({ id: s.id().id(), name: s.id().name(), description: s.id().description() || undefined }, parseHatchStyle(s.style()));
1070
- }),
1071
- xrayStyles: Array.from({ length: styles.xrayStylesLength() }, (_, i) => {
1072
- const s = styles.xrayStyles(i);
1073
- return Object.assign({ id: s.id().id(), name: s.id().name(), description: s.id().description() || undefined }, parseXRayStyle(s.style()));
1074
- }),
1075
- } : null,
1076
- viewSettings: viewSettings ? {
1077
- views: Array.from({ length: viewSettings.viewsLength() }, (_, i) => {
1078
- const v = viewSettings.views(i);
1079
- return Object.assign({ id: v.id().id(), name: v.id().name(), description: v.id().description() || undefined }, parseView(v.view()));
1080
- }),
1081
- ucs: Array.from({ length: viewSettings.ucsLength() }, (_, i) => {
1082
- const u = viewSettings.ucs(i);
1083
- return Object.assign({ id: u.id().id(), name: u.id().name(), description: u.id().description() || undefined }, parseUcs(u.ucs()));
1084
- }),
1085
- gridSettings: Array.from({ length: viewSettings.gridSettingsLength() }, (_, i) => {
1086
- const g = viewSettings.gridSettings(i);
1087
- return Object.assign({ id: g.id().id(), name: g.id().name(), description: g.id().description() || undefined }, parseGridSettings(g.settings()));
1088
- }),
1089
- snapSettings: Array.from({ length: viewSettings.snapSettingsLength() }, (_, i) => {
1090
- const s = viewSettings.snapSettings(i);
1091
- return Object.assign({ id: s.id().id(), name: s.id().name(), description: s.id().description() || undefined }, parseSnapSettings(s.settings()));
1092
- }),
1093
- } : null,
1094
- units: units && primaryUnits && alternateUnits ? {
1095
- primaryUnits: parsePrimaryUnits(primaryUnits),
1096
- alternateUnits: Object.assign(Object.assign({}, parseUnitSystemBase(alternateUnits.base(), alternateUnits.format())), { isVisible: alternateUnits.isVisible(), multiplier: alternateUnits.multiplier() }),
1097
- } : null,
1098
- validation: validation ? {
1099
- dimensionRules: validation.dimensionRules() ? {
1100
- minTextHeight: toPrecisionValue(validation.dimensionRules().minTextHeight()),
1101
- maxTextHeight: toPrecisionValue(validation.dimensionRules().maxTextHeight()),
1102
- allowedPrecisions: Array.from({ length: validation.dimensionRules().allowedPrecisionsLength() }, (_, i) => validation.dimensionRules().allowedPrecisions(i)),
1103
- } : undefined,
1104
- layerRules: validation.layerRules() ? {
1105
- prohibitedLayerNames: Array.from({ length: validation.layerRules().prohibitedLayerNamesLength() }, (_, i) => validation.layerRules().prohibitedLayerNames(i)),
1106
- } : undefined,
1107
- } : null,
1108
- };
1109
- }
1110
- // #region STANDARDS & SETTINGS PARSERS
1111
- function parseCommonStyle(style) {
1112
- return {
1113
- background: parseElementBackground(style.background()),
1114
- stroke: parseElementStroke(style.stroke()),
1115
- };
1116
- }
1117
- // #endregion
1118
- function parseUnitSystemBase(base, format) {
1119
- return {
1120
- format,
1121
- system: base.system(),
1122
- precision: base.precision(),
1123
- suppressLeadingZeros: base.suppressLeadingZeros(),
1124
- suppressTrailingZeros: base.suppressTrailingZeros(),
1125
- };
1126
- }
1127
- function parseView(view) {
1128
- return {
1129
- scrollX: toPrecisionValue(view.scrollX()),
1130
- scrollY: toPrecisionValue(view.scrollY()),
1131
- zoom: toZoom(view.zoom()),
1132
- twistAngle: toRadian(view.twistAngle()),
1133
- centerPoint: parsePoint(view.centerPoint()),
1134
- scope: view.scope(),
1135
- };
1136
- }
1137
- function parseUcs(ucs) {
1138
- return {
1139
- origin: parseGeometricPoint(ucs.origin()),
1140
- angle: toRadian(ucs.angle()),
1141
- };
1142
- }
1143
- function parseGridSettings(settings) {
1144
- const polar = settings.polarSettings();
1145
- const isometric = settings.isometricSettings();
1146
- return {
1147
- type: settings.type(),
1148
- readonly: settings.readonly(),
1149
- displayType: settings.displayType(),
1150
- isAdaptive: settings.isAdaptive(),
1151
- xSpacing: toPrecisionValue(settings.xSpacing()),
1152
- ySpacing: toPrecisionValue(settings.ySpacing()),
1153
- subdivisions: settings.subdivisions(),
1154
- origin: parseGeometricPoint(settings.origin()),
1155
- rotation: toRadian(settings.rotation()),
1156
- followUCS: settings.followUcs(),
1157
- majorStyle: {
1158
- color: settings.majorStyle().color(),
1159
- opacity: toPercentage(settings.majorStyle().opacity()),
1160
- dashPattern: Array.from(settings.majorStyle().dashPatternArray() || []),
1161
- },
1162
- minorStyle: {
1163
- color: settings.minorStyle().color(),
1164
- opacity: toPercentage(settings.minorStyle().opacity()),
1165
- dashPattern: Array.from(settings.minorStyle().dashPatternArray() || []),
1166
- },
1167
- showMinor: settings.showMinor(),
1168
- minZoom: settings.minZoom(),
1169
- maxZoom: settings.maxZoom(),
1170
- autoHide: settings.autoHide(),
1171
- polarSettings: polar ? {
1172
- radialDivisions: polar.radialDivisions(),
1173
- radialSpacing: toPrecisionValue(polar.radialSpacing()),
1174
- showLabels: polar.showLabels(),
1175
- } : undefined,
1176
- isometricSettings: isometric ? {
1177
- leftAngle: toRadian(isometric.leftAngle()),
1178
- rightAngle: toRadian(isometric.rightAngle()),
1179
- } : undefined,
1180
- enableSnapping: settings.enableSnapping(),
1181
- };
1182
- }
1183
- function parseSnapSettings(settings) {
1184
- const polar = settings.polarTracking();
1185
- const dynamic = settings.dynamicSnap();
1186
- const markers = settings.snapMarkers();
1187
- const markerStyles = {};
1188
- for (let i = 0; i < markers.stylesLength(); i++) {
1189
- const entry = markers.styles(i);
1190
- markerStyles[entry.key()] = {
1191
- shape: entry.value().shape(),
1192
- color: entry.value().color(),
1193
- };
1194
- }
1195
- return {
1196
- readonly: settings.readonly(),
1197
- twistAngle: toRadian(settings.twistAngle()),
1198
- snapTolerance: settings.snapTolerance(),
1199
- objectSnapAperture: settings.objectSnapAperture(),
1200
- isOrthoModeOn: settings.isOrthoModeOn(),
1201
- polarTracking: {
1202
- enabled: polar.enabled(),
1203
- angles: Array.from(polar.anglesArray() || []).map(toRadian),
1204
- incrementAngle: polar.incrementAngle() ? toRadian(polar.incrementAngle()) : undefined,
1205
- trackFromLastPoint: polar.trackFromLastPoint(),
1206
- showPolarCoordinates: polar.showPolarCoordinates(),
1207
- },
1208
- isObjectSnapOn: settings.isObjectSnapOn(),
1209
- activeObjectSnapModes: Array.from(settings.activeObjectSnapModesArray() || []),
1210
- snapPriority: Array.from(settings.snapPriorityArray() || []),
1211
- showTrackingLines: settings.showTrackingLines(),
1212
- trackingLineStyle: settings.trackingLineStyle() ? {
1213
- color: settings.trackingLineStyle().color(),
1214
- opacity: toPercentage(settings.trackingLineStyle().opacity()),
1215
- dashPattern: Array.from(settings.trackingLineStyle().dashPatternArray() || []),
1216
- } : undefined,
1217
- dynamicSnap: {
1218
- enabledDuringDrag: dynamic.enabledDuringDrag(),
1219
- enabledDuringRotation: dynamic.enabledDuringRotation(),
1220
- enabledDuringScale: dynamic.enabledDuringScale(),
1221
- },
1222
- temporaryOverrides: Array.from({ length: settings.temporaryOverridesLength() }, (_, i) => {
1223
- const o = settings.temporaryOverrides(i);
1224
- return { key: o.key(), behavior: o.behavior() };
1225
- }),
1226
- incrementalDistance: settings.incrementalDistance(),
1227
- magneticStrength: settings.magneticStrength(),
1228
- layerSnapFilters: settings.layerSnapFilters() ? {
1229
- includeLayers: Array.from({ length: settings.layerSnapFilters().includeLayersLength() }, (_, i) => settings.layerSnapFilters().includeLayers(i)),
1230
- excludeLayers: Array.from({ length: settings.layerSnapFilters().excludeLayersLength() }, (_, i) => settings.layerSnapFilters().excludeLayers(i)),
1231
- } : undefined,
1232
- elementTypeFilters: Array.from({ length: settings.elementTypeFiltersLength() }, (_, i) => settings.elementTypeFilters(i)),
1233
- snapMode: settings.snapMode(),
1234
- snapMarkers: {
1235
- enabled: markers.enabled(),
1236
- size: markers.size(),
1237
- duration: markers.duration(),
1238
- styles: markerStyles,
1239
- },
1240
- constructionSnapEnabled: settings.constructionSnapEnabled(),
1241
- snapToGridIntersections: settings.snapToGridIntersections(),
1242
- };
1243
- }
1244
- // #region VERSIONING & MISC
1245
- export function parseThumbnailFromBinary(data) {
1246
- return data.thumbnailArray() || undefined;
1247
- }
1248
- export function parseVersionGraphFromBinary(graph) {
1249
- if (!graph)
1250
- return null;
1251
- const metadata = graph.metadata();
1252
- return {
1253
- userCheckpointVersionId: graph.userCheckpointVersionId(),
1254
- latestVersionId: graph.latestVersionId(),
1255
- checkpoints: Array.from({ length: graph.checkpointsLength() }, (_, i) => {
1256
- const c = graph.checkpoints(i);
1257
- const base = c.base();
1258
- return {
1259
- type: "checkpoint",
1260
- id: base.id(),
1261
- parentId: base.parentId(),
1262
- timestamp: Number(base.timestamp()),
1263
- description: base.description() || undefined,
1264
- isManualSave: base.isManualSave(),
1265
- userId: base.userId() || undefined,
1266
- data: c.dataArray(),
1267
- sizeBytes: Number(c.sizeBytes()),
1268
- };
1269
- }),
1270
- deltas: Array.from({ length: graph.deltasLength() }, (_, i) => {
1271
- const d = graph.deltas(i);
1272
- const base = d.base();
1273
- return {
1274
- type: "delta",
1275
- id: base.id(),
1276
- parentId: base.parentId(),
1277
- timestamp: Number(base.timestamp()),
1278
- description: base.description() || undefined,
1279
- isManualSave: base.isManualSave(),
1280
- userId: base.userId() || undefined,
1281
- patch: parseBinaryToJson(d.patchArray()),
1282
- };
1283
- }),
1284
- metadata: {
1285
- lastPruned: Number(metadata.lastPruned()),
1286
- totalSize: Number(metadata.totalSize()),
1287
- },
1288
- };
46
+ /**
47
+ * Parse a `.duc` file lazily — returns everything EXCEPT external file data blobs.
48
+ * Use `LazyExternalFileStore` for on-demand file access.
49
+ */
50
+ export function parseDucLazy(buffer, elementsConfig, restoreConfig) {
51
+ return __awaiter(this, void 0, void 0, function* () {
52
+ yield ensureWasm();
53
+ if (buffer.byteLength === 0) {
54
+ throw new Error(`[parseDucLazy] buffer too small (${buffer.byteLength} bytes) — not a valid .duc file`);
55
+ }
56
+ const header = new TextDecoder().decode(buffer.slice(0, 15));
57
+ let raw;
58
+ try {
59
+ raw = wasmParseDucLazy(buffer);
60
+ }
61
+ catch (error) {
62
+ const prefixHex = Array.from(buffer.slice(0, 16))
63
+ .map((b) => b.toString(16).padStart(2, "0"))
64
+ .join(" ");
65
+ throw new Error(`[parseDucLazy] wasm parse failed (size=${buffer.byteLength}, header="${header}", prefix=${prefixHex}): ${error instanceof Error ? error.message : String(error)}`);
66
+ }
67
+ const data = transformFromRust(raw);
68
+ const lazyFileStore = new LazyExternalFileStore(buffer);
69
+ const files = {};
70
+ const restored = restore(Object.assign(Object.assign({}, data), { files }), elementsConfig !== null && elementsConfig !== void 0 ? elementsConfig : { syncInvalidIndices: (els) => els }, restoreConfig);
71
+ restored.lazyFileStore = lazyFileStore;
72
+ return restored;
73
+ });
1289
74
  }
1290
- // #endregion
1291
- // #region ROOT PARSER
1292
- export const parseDuc = (blob_1, ...args_1) => __awaiter(void 0, [blob_1, ...args_1], void 0, function* (blob, fileHandle = null, restoreConfig = {}) {
1293
- var _a;
1294
- const arrayBuffer = yield blob.arrayBuffer();
1295
- if (!arrayBuffer || arrayBuffer.byteLength === 0) {
1296
- throw new Error('Invalid DUC buffer: empty file');
1297
- }
1298
- const byteBuffer = new flatbuffers.ByteBuffer(new Uint8Array(arrayBuffer));
1299
- // Validate that the root can be read; flatbuffers will throw if buffer is not well-formed.
1300
- let data;
1301
- try {
1302
- data = ExportedDataState.getRootAsExportedDataState(byteBuffer);
1303
- }
1304
- catch (e) {
1305
- throw new Error('Invalid DUC buffer: cannot read root table');
1306
- }
1307
- const legacyVersion = data.versionLegacy();
1308
- if (legacyVersion) {
1309
- throw new Error(`Unsupported DUC version: ${legacyVersion}. Please use version ducjs@2.0.1 or lower to support this file.`);
1310
- }
1311
- const version = data.version();
1312
- const localState = data.ducLocalState();
1313
- const parsedLocalState = localState && parseLocalStateFromBinary(localState);
1314
- // Parse global state
1315
- const globalState = data.ducGlobalState();
1316
- const parsedGlobalState = globalState && parseGlobalStateFromBinary(globalState);
1317
- // Parse elements
1318
- const elements = [];
1319
- for (let i = 0; i < data.elementsLength(); i++) {
1320
- const e = data.elements(i);
1321
- if (e) {
1322
- const element = parseElementFromBinary(e);
1323
- if (element) {
1324
- elements.push(element);
1325
- }
1326
- }
1327
- }
1328
- // Parse files
1329
- let parsedFiles = {};
1330
- for (let i = 0; i < data.externalFilesLength(); i++) {
1331
- const externalFile = data.externalFiles(i);
1332
- if (externalFile) {
1333
- const parsedFile = parseExternalFilesFromBinary(externalFile);
1334
- parsedFiles = Object.assign(Object.assign({}, parsedFiles), parsedFile);
1335
- }
1336
- }
1337
- // Parse blocks
1338
- const blocks = [];
1339
- for (let i = 0; i < data.blocksLength(); i++) {
1340
- const block = data.blocks(i);
1341
- if (block) {
1342
- const parsedBlock = parseBlockFromBinary(block);
1343
- if (parsedBlock) {
1344
- blocks.push(parsedBlock);
1345
- }
1346
- }
1347
- }
1348
- // Parse block instances
1349
- const blockInstances = [];
1350
- for (let i = 0; i < data.blockInstancesLength(); i++) {
1351
- const blockInstance = data.blockInstances(i);
1352
- if (blockInstance) {
1353
- const parsedBlockInstance = parseBlockInstance(blockInstance);
1354
- if (parsedBlockInstance) {
1355
- blockInstances.push(parsedBlockInstance);
1356
- }
1357
- }
1358
- }
1359
- // Parse block collections
1360
- const blockCollections = [];
1361
- for (let i = 0; i < data.blockCollectionsLength(); i++) {
1362
- const blockCollection = data.blockCollections(i);
1363
- if (blockCollection) {
1364
- const parsedBlockCollection = parseBlockCollection(blockCollection);
1365
- if (parsedBlockCollection) {
1366
- blockCollections.push(parsedBlockCollection);
1367
- }
1368
- }
1369
- }
1370
- // Parse groups
1371
- const groups = [];
1372
- for (let i = 0; i < data.groupsLength(); i++) {
1373
- const group = data.groups(i);
1374
- if (group) {
1375
- const parsedGroup = parseGroupFromBinary(group);
1376
- if (parsedGroup) {
1377
- groups.push(parsedGroup);
1378
- }
1379
- }
1380
- }
1381
- // Parse dictionary
1382
- const dictionary = parseDictionaryFromBinary(data);
1383
- // Parse thumbnail
1384
- const thumbnail = parseThumbnailFromBinary(data);
1385
- // Parse version graph
1386
- const versionGraphData = data.versionGraph();
1387
- const versionGraph = parseVersionGraphFromBinary(versionGraphData);
1388
- // Parse regions
1389
- const regions = [];
1390
- for (let i = 0; i < data.regionsLength(); i++) {
1391
- const region = data.regions(i);
1392
- if (region) {
1393
- const parsedRegion = parseRegionFromBinary(region);
1394
- if (parsedRegion) {
1395
- regions.push(parsedRegion);
1396
- }
1397
- }
1398
- }
1399
- // Parse layers
1400
- const layers = [];
1401
- for (let i = 0; i < data.layersLength(); i++) {
1402
- const layer = data.layers(i);
1403
- if (layer) {
1404
- const parsedLayer = parseLayerFromBinary(layer);
1405
- if (parsedLayer) {
1406
- layers.push(parsedLayer);
1407
- }
1408
- }
1409
- }
1410
- // Parse standards
1411
- const standards = [];
1412
- for (let i = 0; i < data.standardsLength(); i++) {
1413
- const standard = data.standards(i);
1414
- if (standard) {
1415
- const parsedStandard = parseStandardFromBinary(standard);
1416
- if (parsedStandard) {
1417
- standards.push(parsedStandard);
1418
- }
1419
- }
1420
- }
1421
- const exportData = {
1422
- thumbnail,
1423
- dictionary,
1424
- elements: elements,
1425
- localState: parsedLocalState,
1426
- globalState: parsedGlobalState,
1427
- blocks,
1428
- blockInstances,
1429
- blockCollections,
1430
- groups,
1431
- regions,
1432
- layers,
1433
- standards,
1434
- files: parsedFiles,
1435
- versionGraph: versionGraph !== null && versionGraph !== void 0 ? versionGraph : undefined,
1436
- id: (_a = data.id()) !== null && _a !== void 0 ? _a : nanoid(),
1437
- };
1438
- const sanitized = restore(exportData, {
1439
- syncInvalidIndices: (elements) => elements,
1440
- repairBindings: true,
1441
- refreshDimensions: false,
1442
- }, restoreConfig);
1443
- return {
1444
- thumbnail: sanitized.thumbnail,
1445
- dictionary: sanitized.dictionary,
1446
- elements: sanitized.elements,
1447
- localState: sanitized.localState,
1448
- globalState: sanitized.globalState,
1449
- files: sanitized.files,
1450
- blocks: sanitized.blocks,
1451
- blockInstances: sanitized.blockInstances,
1452
- groups: sanitized.groups,
1453
- regions: sanitized.regions,
1454
- layers: sanitized.layers,
1455
- blockCollections: sanitized.blockCollections,
1456
- standards: sanitized.standards,
1457
- versionGraph: sanitized.versionGraph,
1458
- id: sanitized.id,
1459
- };
1460
- });
1461
- // #endregion