ducjs 2.4.0 → 3.0.3

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