@icure/api 8.11.0 → 8.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (302) hide show
  1. package/icc-api/api/IccUserApi.d.ts +1 -1
  2. package/icc-api/api/IccUserApi.js +2 -2
  3. package/icc-api/api/IccUserApi.js.map +1 -1
  4. package/icc-api/model/HealthElement.d.ts +11 -0
  5. package/icc-api/model/HealthElement.js.map +1 -1
  6. package/icc-api/model/HealthElementAsserter.d.ts +33 -0
  7. package/icc-api/model/HealthElementAsserter.js +28 -0
  8. package/icc-api/model/HealthElementAsserter.js.map +1 -0
  9. package/icc-api/model/HealthElementQualifiedLink.d.ts +31 -0
  10. package/icc-api/model/HealthElementQualifiedLink.js +26 -0
  11. package/icc-api/model/HealthElementQualifiedLink.js.map +1 -0
  12. package/icc-api/model/models.d.ts +2 -0
  13. package/icc-api/model/models.js +2 -0
  14. package/icc-api/model/models.js.map +1 -1
  15. package/icc-x-api/filters/HealthElementByAssociationIdFilter.d.ts +23 -0
  16. package/icc-x-api/filters/HealthElementByAssociationIdFilter.js +30 -0
  17. package/icc-x-api/filters/HealthElementByAssociationIdFilter.js.map +1 -0
  18. package/icc-x-api/filters/HealthElementByQualifiedLinkFilter.d.ts +24 -0
  19. package/icc-x-api/filters/HealthElementByQualifiedLinkFilter.js +30 -0
  20. package/icc-x-api/filters/HealthElementByQualifiedLinkFilter.js.map +1 -0
  21. package/icc-x-api/filters/filters.d.ts +2 -0
  22. package/icc-x-api/filters/filters.js +2 -0
  23. package/icc-x-api/filters/filters.js.map +1 -1
  24. package/icc-x-api/index.js +1 -1
  25. package/icc-x-api/index.js.map +1 -1
  26. package/package.json +1 -1
  27. package/test/benchmarks/lzma-benchmark.spec.d.ts +0 -1
  28. package/test/benchmarks/lzma-benchmark.spec.js +0 -131
  29. package/test/benchmarks/lzma-benchmark.spec.js.map +0 -1
  30. package/test/benchmarks/lzma-compat.spec.d.ts +0 -1
  31. package/test/benchmarks/lzma-compat.spec.js +0 -187
  32. package/test/benchmarks/lzma-compat.spec.js.map +0 -1
  33. package/test/benchmarks/playwright.config.d.ts +0 -2
  34. package/test/benchmarks/playwright.config.js +0 -18
  35. package/test/benchmarks/playwright.config.js.map +0 -1
  36. package/test/icc-api/api/IccAgendaApi.d.ts +0 -1
  37. package/test/icc-api/api/IccAgendaApi.js +0 -64
  38. package/test/icc-api/api/IccAgendaApi.js.map +0 -1
  39. package/test/icc-api/api/IccAnonymousAccessApi.d.ts +0 -1
  40. package/test/icc-api/api/IccAnonymousAccessApi.js +0 -58
  41. package/test/icc-api/api/IccAnonymousAccessApi.js.map +0 -1
  42. package/test/icc-api/api/IccCalendarItemApi.d.ts +0 -1
  43. package/test/icc-api/api/IccCalendarItemApi.js +0 -67
  44. package/test/icc-api/api/IccCalendarItemApi.js.map +0 -1
  45. package/test/icc-api/api/IccCalendarItemTypeApi.d.ts +0 -1
  46. package/test/icc-api/api/IccCalendarItemTypeApi.js +0 -96
  47. package/test/icc-api/api/IccCalendarItemTypeApi.js.map +0 -1
  48. package/test/icc-api/api/IccCodeApi.d.ts +0 -1
  49. package/test/icc-api/api/IccCodeApi.js +0 -38
  50. package/test/icc-api/api/IccCodeApi.js.map +0 -1
  51. package/test/icc-api/api/IccDocumentApi.d.ts +0 -1
  52. package/test/icc-api/api/IccDocumentApi.js +0 -199
  53. package/test/icc-api/api/IccDocumentApi.js.map +0 -1
  54. package/test/icc-api/api/IccGroupApi.d.ts +0 -1
  55. package/test/icc-api/api/IccGroupApi.js +0 -50
  56. package/test/icc-api/api/IccGroupApi.js.map +0 -1
  57. package/test/icc-api/api/IccKeywordApi.d.ts +0 -1
  58. package/test/icc-api/api/IccKeywordApi.js +0 -64
  59. package/test/icc-api/api/IccKeywordApi.js.map +0 -1
  60. package/test/icc-api/api/IccMedicalLocationApi.d.ts +0 -1
  61. package/test/icc-api/api/IccMedicalLocationApi.js +0 -64
  62. package/test/icc-api/api/IccMedicalLocationApi.js.map +0 -1
  63. package/test/icc-api/api/IccPlaceApi.d.ts +0 -1
  64. package/test/icc-api/api/IccPlaceApi.js +0 -64
  65. package/test/icc-api/api/IccPlaceApi.js.map +0 -1
  66. package/test/icc-api/api/IccRecoveryDataApi.d.ts +0 -1
  67. package/test/icc-api/api/IccRecoveryDataApi.js +0 -95
  68. package/test/icc-api/api/IccRecoveryDataApi.js.map +0 -1
  69. package/test/icc-api/api/IccRoleApi.d.ts +0 -1
  70. package/test/icc-api/api/IccRoleApi.js +0 -34
  71. package/test/icc-api/api/IccRoleApi.js.map +0 -1
  72. package/test/icc-api/api/IccUserApi.d.ts +0 -1
  73. package/test/icc-api/api/IccUserApi.js +0 -96
  74. package/test/icc-api/api/IccUserApi.js.map +0 -1
  75. package/test/icc-api/e2e/IccCalendarItemApi.d.ts +0 -1
  76. package/test/icc-api/e2e/IccCalendarItemApi.js +0 -46
  77. package/test/icc-api/e2e/IccCalendarItemApi.js.map +0 -1
  78. package/test/icc-api/model/modelHelpersTest.d.ts +0 -1
  79. package/test/icc-api/model/modelHelpersTest.js +0 -45
  80. package/test/icc-api/model/modelHelpersTest.js.map +0 -1
  81. package/test/icc-x-api/auth/group-switch-test.d.ts +0 -1
  82. package/test/icc-x-api/auth/group-switch-test.js +0 -81
  83. package/test/icc-x-api/auth/group-switch-test.js.map +0 -1
  84. package/test/icc-x-api/auth/jwt-concurrency-test.d.ts +0 -2
  85. package/test/icc-x-api/auth/jwt-concurrency-test.js +0 -112
  86. package/test/icc-x-api/auth/jwt-concurrency-test.js.map +0 -1
  87. package/test/icc-x-api/auth/jwt-provider-test.d.ts +0 -1
  88. package/test/icc-x-api/auth/jwt-provider-test.js +0 -197
  89. package/test/icc-x-api/auth/jwt-provider-test.js.map +0 -1
  90. package/test/icc-x-api/auth/smart-auth-provider-test.d.ts +0 -1
  91. package/test/icc-x-api/auth/smart-auth-provider-test.js +0 -224
  92. package/test/icc-x-api/auth/smart-auth-provider-test.js.map +0 -1
  93. package/test/icc-x-api/autofix-anonymity-test.d.ts +0 -1
  94. package/test/icc-x-api/autofix-anonymity-test.js +0 -122
  95. package/test/icc-x-api/autofix-anonymity-test.js.map +0 -1
  96. package/test/icc-x-api/confidential-entities-test.d.ts +0 -1
  97. package/test/icc-x-api/confidential-entities-test.js +0 -168
  98. package/test/icc-x-api/confidential-entities-test.js.map +0 -1
  99. package/test/icc-x-api/crud/comprehensive-crud-test.d.ts +0 -1
  100. package/test/icc-x-api/crud/comprehensive-crud-test.js +0 -276
  101. package/test/icc-x-api/crud/comprehensive-crud-test.js.map +0 -1
  102. package/test/icc-x-api/crud/entities-crud-test-interface.d.ts +0 -16
  103. package/test/icc-x-api/crud/entities-crud-test-interface.js +0 -407
  104. package/test/icc-x-api/crud/entities-crud-test-interface.js.map +0 -1
  105. package/test/icc-x-api/crypto/anonymous-delegations-test.d.ts +0 -1
  106. package/test/icc-x-api/crypto/anonymous-delegations-test.js +0 -587
  107. package/test/icc-x-api/crypto/anonymous-delegations-test.js.map +0 -1
  108. package/test/icc-x-api/crypto/concurrency.d.ts +0 -1
  109. package/test/icc-x-api/crypto/concurrency.js +0 -35
  110. package/test/icc-x-api/crypto/concurrency.js.map +0 -1
  111. package/test/icc-x-api/crypto/crypto-utils.d.ts +0 -1
  112. package/test/icc-x-api/crypto/crypto-utils.js +0 -79
  113. package/test/icc-x-api/crypto/crypto-utils.js.map +0 -1
  114. package/test/icc-x-api/crypto/cryptoTest.d.ts +0 -2
  115. package/test/icc-x-api/crypto/cryptoTest.js +0 -402
  116. package/test/icc-x-api/crypto/cryptoTest.js.map +0 -1
  117. package/test/icc-x-api/crypto/delegate-ci-to-patient-with-missing-keys-test.d.ts +0 -1
  118. package/test/icc-x-api/crypto/delegate-ci-to-patient-with-missing-keys-test.js +0 -166
  119. package/test/icc-x-api/crypto/delegate-ci-to-patient-with-missing-keys-test.js.map +0 -1
  120. package/test/icc-x-api/crypto/exchange-data-manager-test.d.ts +0 -1
  121. package/test/icc-x-api/crypto/exchange-data-manager-test.js +0 -674
  122. package/test/icc-x-api/crypto/exchange-data-manager-test.js.map +0 -1
  123. package/test/icc-x-api/crypto/full-crypto-test.d.ts +0 -1
  124. package/test/icc-x-api/crypto/full-crypto-test.js +0 -454
  125. package/test/icc-x-api/crypto/full-crypto-test.js.map +0 -1
  126. package/test/icc-x-api/crypto/legacy-metadata-migration-test.d.ts +0 -1
  127. package/test/icc-x-api/crypto/legacy-metadata-migration-test.js +0 -379
  128. package/test/icc-x-api/crypto/legacy-metadata-migration-test.js.map +0 -1
  129. package/test/icc-x-api/crypto/secure-delegations-manager-test.d.ts +0 -1
  130. package/test/icc-x-api/crypto/secure-delegations-manager-test.js +0 -278
  131. package/test/icc-x-api/crypto/secure-delegations-manager-test.js.map +0 -1
  132. package/test/icc-x-api/crypto/shamir.d.ts +0 -2
  133. package/test/icc-x-api/crypto/shamir.js +0 -167
  134. package/test/icc-x-api/crypto/shamir.js.map +0 -1
  135. package/test/icc-x-api/crypto/share-deduplication-test.d.ts +0 -1
  136. package/test/icc-x-api/crypto/share-deduplication-test.js +0 -250
  137. package/test/icc-x-api/crypto/share-deduplication-test.js.map +0 -1
  138. package/test/icc-x-api/crypto/share-to-newly-created-patient-from-hcp.d.ts +0 -1
  139. package/test/icc-x-api/crypto/share-to-newly-created-patient-from-hcp.js +0 -71
  140. package/test/icc-x-api/crypto/share-to-newly-created-patient-from-hcp.js.map +0 -1
  141. package/test/icc-x-api/crypto/soft-deleted-data-owners.d.ts +0 -2
  142. package/test/icc-x-api/crypto/soft-deleted-data-owners.js +0 -113
  143. package/test/icc-x-api/crypto/soft-deleted-data-owners.js.map +0 -1
  144. package/test/icc-x-api/crypto/user-encryption-keys-manager-test.d.ts +0 -1
  145. package/test/icc-x-api/crypto/user-encryption-keys-manager-test.js +0 -246
  146. package/test/icc-x-api/crypto/user-encryption-keys-manager-test.js.map +0 -1
  147. package/test/icc-x-api/entity-with-attachments-api-test.d.ts +0 -1
  148. package/test/icc-x-api/entity-with-attachments-api-test.js +0 -142
  149. package/test/icc-x-api/entity-with-attachments-api-test.js.map +0 -1
  150. package/test/icc-x-api/filters/filters.d.ts +0 -1
  151. package/test/icc-x-api/filters/filters.js +0 -49
  152. package/test/icc-x-api/filters/filters.js.map +0 -1
  153. package/test/icc-x-api/filters/healthelement.d.ts +0 -1
  154. package/test/icc-x-api/filters/healthelement.js +0 -333
  155. package/test/icc-x-api/filters/healthelement.js.map +0 -1
  156. package/test/icc-x-api/icc-accesslog-x-api.d.ts +0 -1
  157. package/test/icc-x-api/icc-accesslog-x-api.js +0 -106
  158. package/test/icc-x-api/icc-accesslog-x-api.js.map +0 -1
  159. package/test/icc-x-api/icc-application-settings-x-api.d.ts +0 -1
  160. package/test/icc-x-api/icc-application-settings-x-api.js +0 -91
  161. package/test/icc-x-api/icc-application-settings-x-api.js.map +0 -1
  162. package/test/icc-x-api/icc-auth-api.d.ts +0 -1
  163. package/test/icc-x-api/icc-auth-api.js +0 -47
  164. package/test/icc-x-api/icc-auth-api.js.map +0 -1
  165. package/test/icc-x-api/icc-calendar-item-x-api.d.ts +0 -1
  166. package/test/icc-x-api/icc-calendar-item-x-api.js +0 -150
  167. package/test/icc-x-api/icc-calendar-item-x-api.js.map +0 -1
  168. package/test/icc-x-api/icc-code-x-api-test.d.ts +0 -1
  169. package/test/icc-x-api/icc-code-x-api-test.js +0 -74
  170. package/test/icc-x-api/icc-code-x-api-test.js.map +0 -1
  171. package/test/icc-x-api/icc-contact-x-api.d.ts +0 -1
  172. package/test/icc-x-api/icc-contact-x-api.js +0 -355
  173. package/test/icc-x-api/icc-contact-x-api.js.map +0 -1
  174. package/test/icc-x-api/icc-document-x-api.d.ts +0 -1
  175. package/test/icc-x-api/icc-document-x-api.js +0 -76
  176. package/test/icc-x-api/icc-document-x-api.js.map +0 -1
  177. package/test/icc-x-api/icc-form-x-api.d.ts +0 -1
  178. package/test/icc-x-api/icc-form-x-api.js +0 -413
  179. package/test/icc-x-api/icc-form-x-api.js.map +0 -1
  180. package/test/icc-x-api/icc-hcparty-x-api-test.d.ts +0 -1
  181. package/test/icc-x-api/icc-hcparty-x-api-test.js +0 -43
  182. package/test/icc-x-api/icc-hcparty-x-api-test.js.map +0 -1
  183. package/test/icc-x-api/icc-helement-x-api-test.d.ts +0 -1
  184. package/test/icc-x-api/icc-helement-x-api-test.js +0 -155
  185. package/test/icc-x-api/icc-helement-x-api-test.js.map +0 -1
  186. package/test/icc-x-api/icc-invoice-x-api.d.ts +0 -1
  187. package/test/icc-x-api/icc-invoice-x-api.js +0 -99
  188. package/test/icc-x-api/icc-invoice-x-api.js.map +0 -1
  189. package/test/icc-x-api/icc-maintenance-task-x-api-test.d.ts +0 -1
  190. package/test/icc-x-api/icc-maintenance-task-x-api-test.js +0 -222
  191. package/test/icc-x-api/icc-maintenance-task-x-api-test.js.map +0 -1
  192. package/test/icc-x-api/icc-message-x-api.d.ts +0 -1
  193. package/test/icc-x-api/icc-message-x-api.js +0 -54
  194. package/test/icc-x-api/icc-message-x-api.js.map +0 -1
  195. package/test/icc-x-api/icc-patient-x-api-test.d.ts +0 -1
  196. package/test/icc-x-api/icc-patient-x-api-test.js +0 -209
  197. package/test/icc-x-api/icc-patient-x-api-test.js.map +0 -1
  198. package/test/icc-x-api/icc-recovery-x-api.d.ts +0 -1
  199. package/test/icc-x-api/icc-recovery-x-api.js +0 -175
  200. package/test/icc-x-api/icc-recovery-x-api.js.map +0 -1
  201. package/test/icc-x-api/icc-topic-x-api.d.ts +0 -1
  202. package/test/icc-x-api/icc-topic-x-api.js +0 -269
  203. package/test/icc-x-api/icc-topic-x-api.js.map +0 -1
  204. package/test/icc-x-api/icc-user-x-api-test.d.ts +0 -1
  205. package/test/icc-x-api/icc-user-x-api-test.js +0 -99
  206. package/test/icc-x-api/icc-user-x-api-test.js.map +0 -1
  207. package/test/icc-x-api/keyless-api.d.ts +0 -1
  208. package/test/icc-x-api/keyless-api.js +0 -125
  209. package/test/icc-x-api/keyless-api.js.map +0 -1
  210. package/test/icc-x-api/patient-user.d.ts +0 -2
  211. package/test/icc-x-api/patient-user.js +0 -103
  212. package/test/icc-x-api/patient-user.js.map +0 -1
  213. package/test/icc-x-api/storage/storage.d.ts +0 -1
  214. package/test/icc-x-api/storage/storage.js +0 -48
  215. package/test/icc-x-api/storage/storage.js.map +0 -1
  216. package/test/icc-x-api/test-api-no-parent.d.ts +0 -1
  217. package/test/icc-x-api/test-api-no-parent.js +0 -79
  218. package/test/icc-x-api/test-api-no-parent.js.map +0 -1
  219. package/test/icc-x-api/test-legacy-data-support.d.ts +0 -1
  220. package/test/icc-x-api/test-legacy-data-support.js +0 -375
  221. package/test/icc-x-api/test-legacy-data-support.js.map +0 -1
  222. package/test/icc-x-api/utils/date-encode-test.d.ts +0 -1
  223. package/test/icc-x-api/utils/date-encode-test.js +0 -150
  224. package/test/icc-x-api/utils/date-encode-test.js.map +0 -1
  225. package/test/icc-x-api/utils/graph-test.d.ts +0 -1
  226. package/test/icc-x-api/utils/graph-test.js +0 -54
  227. package/test/icc-x-api/utils/graph-test.js.map +0 -1
  228. package/test/icc-x-api/utils/lru-temporised-async-cache-test.d.ts +0 -1
  229. package/test/icc-x-api/utils/lru-temporised-async-cache-test.js +0 -364
  230. package/test/icc-x-api/utils/lru-temporised-async-cache-test.js.map +0 -1
  231. package/test/icc-x-api/utils/lzma-benchmark-test.d.ts +0 -1
  232. package/test/icc-x-api/utils/lzma-benchmark-test.js +0 -132
  233. package/test/icc-x-api/utils/lzma-benchmark-test.js.map +0 -1
  234. package/test/icc-x-api/utils/lzma-compat-test.d.ts +0 -1
  235. package/test/icc-x-api/utils/lzma-compat-test.js +0 -218
  236. package/test/icc-x-api/utils/lzma-compat-test.js.map +0 -1
  237. package/test/icc-x-api/utils/mutex-test.d.ts +0 -1
  238. package/test/icc-x-api/utils/mutex-test.js +0 -114
  239. package/test/icc-x-api/utils/mutex-test.js.map +0 -1
  240. package/test/icc-x-api/utils/to-moment-test.d.ts +0 -1
  241. package/test/icc-x-api/utils/to-moment-test.js +0 -110
  242. package/test/icc-x-api/utils/to-moment-test.js.map +0 -1
  243. package/test/support/CSM-185.d.ts +0 -1
  244. package/test/support/CSM-185.js +0 -124
  245. package/test/support/CSM-185.js.map +0 -1
  246. package/test/support/CSM-243.d.ts +0 -1
  247. package/test/support/CSM-243.js +0 -120
  248. package/test/support/CSM-243.js.map +0 -1
  249. package/test/support/CSM-543.d.ts +0 -1
  250. package/test/support/CSM-543.js +0 -164
  251. package/test/support/CSM-543.js.map +0 -1
  252. package/test/support/CSM-729.d.ts +0 -1
  253. package/test/support/CSM-729.js +0 -225
  254. package/test/support/CSM-729.js.map +0 -1
  255. package/test/support/CSM-814.d.ts +0 -1
  256. package/test/support/CSM-814.js +0 -475
  257. package/test/support/CSM-814.js.map +0 -1
  258. package/test/support/CSM-87.d.ts +0 -0
  259. package/test/support/CSM-87.js +0 -21
  260. package/test/support/CSM-87.js.map +0 -1
  261. package/test/support/CSM-93.d.ts +0 -1
  262. package/test/support/CSM-93.js +0 -112
  263. package/test/support/CSM-93.js.map +0 -1
  264. package/test/utils/FakeDataOwnerApi.d.ts +0 -32
  265. package/test/utils/FakeDataOwnerApi.js +0 -136
  266. package/test/utils/FakeDataOwnerApi.js.map +0 -1
  267. package/test/utils/FakeEncryptionKeysManager.d.ts +0 -36
  268. package/test/utils/FakeEncryptionKeysManager.js +0 -97
  269. package/test/utils/FakeEncryptionKeysManager.js.map +0 -1
  270. package/test/utils/FakeExchangeDataApi.d.ts +0 -32
  271. package/test/utils/FakeExchangeDataApi.js +0 -92
  272. package/test/utils/FakeExchangeDataApi.js.map +0 -1
  273. package/test/utils/FakeExchangeDataManager.d.ts +0 -48
  274. package/test/utils/FakeExchangeDataManager.js +0 -82
  275. package/test/utils/FakeExchangeDataManager.js.map +0 -1
  276. package/test/utils/FakeExchangeDataMapManager.d.ts +0 -12
  277. package/test/utils/FakeExchangeDataMapManager.js +0 -38
  278. package/test/utils/FakeExchangeDataMapManager.js.map +0 -1
  279. package/test/utils/FakeGenericApi.d.ts +0 -16
  280. package/test/utils/FakeGenericApi.js +0 -65
  281. package/test/utils/FakeGenericApi.js.map +0 -1
  282. package/test/utils/KeylessCryptoStrategies.d.ts +0 -23
  283. package/test/utils/KeylessCryptoStrategies.js +0 -26
  284. package/test/utils/KeylessCryptoStrategies.js.map +0 -1
  285. package/test/utils/TestApi.d.ts +0 -3
  286. package/test/utils/TestApi.js +0 -30
  287. package/test/utils/TestApi.js.map +0 -1
  288. package/test/utils/TestCollectionUtils.d.ts +0 -1
  289. package/test/utils/TestCollectionUtils.js +0 -310
  290. package/test/utils/TestCollectionUtils.js.map +0 -1
  291. package/test/utils/TestCryptoStrategies.d.ts +0 -42
  292. package/test/utils/TestCryptoStrategies.js +0 -80
  293. package/test/utils/TestCryptoStrategies.js.map +0 -1
  294. package/test/utils/TestStorage.d.ts +0 -23
  295. package/test/utils/TestStorage.js +0 -61
  296. package/test/utils/TestStorage.js.map +0 -1
  297. package/test/utils/roles.d.ts +0 -14
  298. package/test/utils/roles.js +0 -345
  299. package/test/utils/roles.js.map +0 -1
  300. package/test/utils/test_utils.d.ts +0 -87
  301. package/test/utils/test_utils.js +0 -452
  302. package/test/utils/test_utils.js.map +0 -1
@@ -1,132 +0,0 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- const mocha_1 = require("mocha");
13
- const chai_1 = require("chai");
14
- const fs = require("fs");
15
- const path = require("path");
16
- const lzma_wasm_1 = require("../../../icc-x-api/utils/lzma-wasm");
17
- function generateData(size) {
18
- const words = ['patient', 'contact', 'healthcare', 'delegation', 'encrypted', 'document', 'service', 'invoice'];
19
- const lines = [];
20
- let len = 0;
21
- let i = 0;
22
- while (len < size) {
23
- const line = `${i}: ${words[i % words.length]} id=${Math.random().toString(36).slice(2)} ts=${Date.now()} value=${Math.random()}\n`;
24
- lines.push(line);
25
- len += line.length;
26
- i++;
27
- }
28
- return new TextEncoder().encode(lines.join('').slice(0, size));
29
- }
30
- function computeStats(timings) {
31
- const sorted = [...timings].sort((a, b) => a - b);
32
- const n = sorted.length;
33
- return {
34
- median: sorted[Math.floor(n / 2)],
35
- mean: timings.reduce((a, b) => a + b, 0) / n,
36
- min: sorted[0],
37
- max: sorted[n - 1],
38
- p95: sorted[Math.floor(n * 0.95)],
39
- };
40
- }
41
- function fmtMs(ms) {
42
- if (ms >= 1000)
43
- return (ms / 1000).toFixed(2) + ' s';
44
- return ms.toFixed(2) + ' ms';
45
- }
46
- function pad(s, w) {
47
- return s.length >= w ? s : ' '.repeat(w - s.length) + s;
48
- }
49
- const SIZES = [
50
- { label: '1 KB', bytes: 1024, iterations: 5 },
51
- { label: '32 KB', bytes: 32 * 1024, iterations: 5 },
52
- { label: '256 KB', bytes: 256 * 1024, iterations: 5 },
53
- { label: '128 MB', bytes: 128 * 1024 * 1024, iterations: 2 },
54
- ];
55
- (0, mocha_1.describe)('LZMA WASM benchmark (Node.js)', function () {
56
- this.timeout(600000);
57
- for (const { label, bytes, iterations } of SIZES) {
58
- (0, mocha_1.it)(`should compress and decompress ${label} payload`, () => __awaiter(this, void 0, void 0, function* () {
59
- const data = generateData(bytes);
60
- const compressTimings = [];
61
- const decompressTimings = [];
62
- let compressed;
63
- let correct = false;
64
- // Warmup
65
- compressed = yield (0, lzma_wasm_1.lzmaWasmCompress)(data);
66
- yield (0, lzma_wasm_1.lzmaWasmDecompress)(compressed);
67
- for (let i = 0; i < iterations; i++) {
68
- const t0 = performance.now();
69
- compressed = yield (0, lzma_wasm_1.lzmaWasmCompress)(data);
70
- compressTimings.push(performance.now() - t0);
71
- const t1 = performance.now();
72
- const decompressed = yield (0, lzma_wasm_1.lzmaWasmDecompress)(compressed);
73
- decompressTimings.push(performance.now() - t1);
74
- const roundTripped = new Uint8Array(decompressed);
75
- if (i === 0) {
76
- correct = roundTripped.length === data.length && roundTripped.every((v, j) => v === data[j]);
77
- }
78
- }
79
- const compStats = computeStats(compressTimings);
80
- const decStats = computeStats(decompressTimings);
81
- const ratio = ((compressed.byteLength / bytes) * 100).toFixed(1);
82
- console.log(`\n ${label} (${bytes.toLocaleString()} bytes):`);
83
- console.log(` ${'Operation'.padEnd(14)} ${pad('Median', 12)} ${pad('Mean', 12)} ${pad('Min', 12)} ${pad('Max', 12)} ${pad('P95', 12)}`);
84
- console.log(` ${'─'.repeat(74)}`);
85
- console.log(` ${'Compress'.padEnd(14)} ${pad(fmtMs(compStats.median), 12)} ${pad(fmtMs(compStats.mean), 12)} ${pad(fmtMs(compStats.min), 12)} ${pad(fmtMs(compStats.max), 12)} ${pad(fmtMs(compStats.p95), 12)}`);
86
- console.log(` ${'Decompress'.padEnd(14)} ${pad(fmtMs(decStats.median), 12)} ${pad(fmtMs(decStats.mean), 12)} ${pad(fmtMs(decStats.min), 12)} ${pad(fmtMs(decStats.max), 12)} ${pad(fmtMs(decStats.p95), 12)}`);
87
- console.log(` Compressed: ${compressed.byteLength.toLocaleString()} bytes (${ratio}%)`);
88
- console.log(` Round-trip: ${correct ? 'OK' : 'FAIL'}`);
89
- (0, chai_1.expect)(correct).to.be.true;
90
- (0, chai_1.expect)(compressed.byteLength).to.be.lessThan(bytes);
91
- }));
92
- }
93
- (0, mocha_1.it)('should compress and decompress 100mb.json from disk (WASM only)', function () {
94
- return __awaiter(this, void 0, void 0, function* () {
95
- const filePath = path.resolve(__dirname, '..', '..', 'benchmarks', '100mb.json');
96
- if (!fs.existsSync(filePath))
97
- return this.skip();
98
- const data = new Uint8Array(fs.readFileSync(filePath));
99
- const fileSize = data.length;
100
- const iterations = 2;
101
- const compressTimings = [];
102
- const decompressTimings = [];
103
- let compressed;
104
- let correct = false;
105
- for (let i = 0; i < iterations; i++) {
106
- const t0 = performance.now();
107
- compressed = yield (0, lzma_wasm_1.lzmaWasmCompress)(data);
108
- compressTimings.push(performance.now() - t0);
109
- const t1 = performance.now();
110
- const decompressed = yield (0, lzma_wasm_1.lzmaWasmDecompress)(compressed);
111
- decompressTimings.push(performance.now() - t1);
112
- if (i === 0) {
113
- const roundTripped = new Uint8Array(decompressed);
114
- correct = roundTripped.length === data.length && roundTripped.every((v, j) => v === data[j]);
115
- }
116
- }
117
- const compStats = computeStats(compressTimings);
118
- const decStats = computeStats(decompressTimings);
119
- const ratio = ((compressed.byteLength / fileSize) * 100).toFixed(1);
120
- console.log(`\n 100mb.json (${fileSize.toLocaleString()} bytes):`);
121
- console.log(` ${'Operation'.padEnd(14)} ${pad('Median', 12)} ${pad('Mean', 12)} ${pad('Min', 12)} ${pad('Max', 12)} ${pad('P95', 12)}`);
122
- console.log(` ${'─'.repeat(74)}`);
123
- console.log(` ${'Compress'.padEnd(14)} ${pad(fmtMs(compStats.median), 12)} ${pad(fmtMs(compStats.mean), 12)} ${pad(fmtMs(compStats.min), 12)} ${pad(fmtMs(compStats.max), 12)} ${pad(fmtMs(compStats.p95), 12)}`);
124
- console.log(` ${'Decompress'.padEnd(14)} ${pad(fmtMs(decStats.median), 12)} ${pad(fmtMs(decStats.mean), 12)} ${pad(fmtMs(decStats.min), 12)} ${pad(fmtMs(decStats.max), 12)} ${pad(fmtMs(decStats.p95), 12)}`);
125
- console.log(` Compressed: ${compressed.byteLength.toLocaleString()} bytes (${ratio}%)`);
126
- console.log(` Round-trip: ${correct ? 'OK' : 'FAIL'}`);
127
- (0, chai_1.expect)(correct).to.be.true;
128
- (0, chai_1.expect)(compressed.byteLength).to.be.lessThan(fileSize);
129
- });
130
- });
131
- });
132
- //# sourceMappingURL=lzma-benchmark-test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"lzma-benchmark-test.js","sourceRoot":"","sources":["../../../../test/icc-x-api/utils/lzma-benchmark-test.ts"],"names":[],"mappings":"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","sourcesContent":["import { describe, it } from 'mocha'\nimport { expect } from 'chai'\nimport * as fs from 'fs'\nimport * as path from 'path'\nimport { lzmaWasmCompress, lzmaWasmDecompress } from '../../../icc-x-api/utils/lzma-wasm'\n\nfunction generateData(size: number): Uint8Array {\n const words = ['patient', 'contact', 'healthcare', 'delegation', 'encrypted', 'document', 'service', 'invoice']\n const lines: string[] = []\n let len = 0\n let i = 0\n while (len < size) {\n const line = `${i}: ${words[i % words.length]} id=${Math.random().toString(36).slice(2)} ts=${Date.now()} value=${Math.random()}\\n`\n lines.push(line)\n len += line.length\n i++\n }\n return new TextEncoder().encode(lines.join('').slice(0, size))\n}\n\ninterface Stats {\n median: number\n mean: number\n min: number\n max: number\n p95: number\n}\n\nfunction computeStats(timings: number[]): Stats {\n const sorted = [...timings].sort((a, b) => a - b)\n const n = sorted.length\n return {\n median: sorted[Math.floor(n / 2)],\n mean: timings.reduce((a, b) => a + b, 0) / n,\n min: sorted[0],\n max: sorted[n - 1],\n p95: sorted[Math.floor(n * 0.95)],\n }\n}\n\nfunction fmtMs(ms: number): string {\n if (ms >= 1000) return (ms / 1000).toFixed(2) + ' s'\n return ms.toFixed(2) + ' ms'\n}\n\nfunction pad(s: string, w: number): string {\n return s.length >= w ? s : ' '.repeat(w - s.length) + s\n}\n\nconst SIZES = [\n { label: '1 KB', bytes: 1024, iterations: 5 },\n { label: '32 KB', bytes: 32 * 1024, iterations: 5 },\n { label: '256 KB', bytes: 256 * 1024, iterations: 5 },\n { label: '128 MB', bytes: 128 * 1024 * 1024, iterations: 2 },\n]\n\ndescribe('LZMA WASM benchmark (Node.js)', function () {\n this.timeout(600_000)\n\n for (const { label, bytes, iterations } of SIZES) {\n it(`should compress and decompress ${label} payload`, async () => {\n const data = generateData(bytes)\n const compressTimings: number[] = []\n const decompressTimings: number[] = []\n let compressed!: ArrayBuffer\n let correct = false\n\n // Warmup\n compressed = await lzmaWasmCompress(data)\n await lzmaWasmDecompress(compressed)\n\n for (let i = 0; i < iterations; i++) {\n const t0 = performance.now()\n compressed = await lzmaWasmCompress(data)\n compressTimings.push(performance.now() - t0)\n\n const t1 = performance.now()\n const decompressed = await lzmaWasmDecompress(compressed)\n decompressTimings.push(performance.now() - t1)\n\n const roundTripped = new Uint8Array(decompressed)\n if (i === 0) {\n correct = roundTripped.length === data.length && roundTripped.every((v, j) => v === data[j])\n }\n }\n\n const compStats = computeStats(compressTimings)\n const decStats = computeStats(decompressTimings)\n const ratio = ((compressed.byteLength / bytes) * 100).toFixed(1)\n\n console.log(`\\n ${label} (${bytes.toLocaleString()} bytes):`)\n console.log(` ${'Operation'.padEnd(14)} ${pad('Median', 12)} ${pad('Mean', 12)} ${pad('Min', 12)} ${pad('Max', 12)} ${pad('P95', 12)}`)\n console.log(` ${'─'.repeat(74)}`)\n console.log(\n ` ${'Compress'.padEnd(14)} ${pad(fmtMs(compStats.median), 12)} ${pad(fmtMs(compStats.mean), 12)} ${pad(fmtMs(compStats.min), 12)} ${pad(fmtMs(compStats.max), 12)} ${pad(fmtMs(compStats.p95), 12)}`\n )\n console.log(\n ` ${'Decompress'.padEnd(14)} ${pad(fmtMs(decStats.median), 12)} ${pad(fmtMs(decStats.mean), 12)} ${pad(fmtMs(decStats.min), 12)} ${pad(fmtMs(decStats.max), 12)} ${pad(fmtMs(decStats.p95), 12)}`\n )\n console.log(` Compressed: ${compressed.byteLength.toLocaleString()} bytes (${ratio}%)`)\n console.log(` Round-trip: ${correct ? 'OK' : 'FAIL'}`)\n\n expect(correct).to.be.true\n expect(compressed.byteLength).to.be.lessThan(bytes)\n })\n }\n\n it('should compress and decompress 100mb.json from disk (WASM only)', async function () {\n const filePath = path.resolve(__dirname, '..', '..', 'benchmarks', '100mb.json')\n if (!fs.existsSync(filePath)) return this.skip()\n\n const data = new Uint8Array(fs.readFileSync(filePath))\n const fileSize = data.length\n const iterations = 2\n\n const compressTimings: number[] = []\n const decompressTimings: number[] = []\n let compressed!: ArrayBuffer\n let correct = false\n\n for (let i = 0; i < iterations; i++) {\n const t0 = performance.now()\n compressed = await lzmaWasmCompress(data)\n compressTimings.push(performance.now() - t0)\n\n const t1 = performance.now()\n const decompressed = await lzmaWasmDecompress(compressed)\n decompressTimings.push(performance.now() - t1)\n\n if (i === 0) {\n const roundTripped = new Uint8Array(decompressed)\n correct = roundTripped.length === data.length && roundTripped.every((v, j) => v === data[j])\n }\n }\n\n const compStats = computeStats(compressTimings)\n const decStats = computeStats(decompressTimings)\n const ratio = ((compressed.byteLength / fileSize) * 100).toFixed(1)\n\n console.log(`\\n 100mb.json (${fileSize.toLocaleString()} bytes):`)\n console.log(` ${'Operation'.padEnd(14)} ${pad('Median', 12)} ${pad('Mean', 12)} ${pad('Min', 12)} ${pad('Max', 12)} ${pad('P95', 12)}`)\n console.log(` ${'─'.repeat(74)}`)\n console.log(\n ` ${'Compress'.padEnd(14)} ${pad(fmtMs(compStats.median), 12)} ${pad(fmtMs(compStats.mean), 12)} ${pad(fmtMs(compStats.min), 12)} ${pad(fmtMs(compStats.max), 12)} ${pad(fmtMs(compStats.p95), 12)}`\n )\n console.log(\n ` ${'Decompress'.padEnd(14)} ${pad(fmtMs(decStats.median), 12)} ${pad(fmtMs(decStats.mean), 12)} ${pad(fmtMs(decStats.min), 12)} ${pad(fmtMs(decStats.max), 12)} ${pad(fmtMs(decStats.p95), 12)}`\n )\n console.log(` Compressed: ${compressed.byteLength.toLocaleString()} bytes (${ratio}%)`)\n console.log(` Round-trip: ${correct ? 'OK' : 'FAIL'}`)\n\n expect(correct).to.be.true\n expect(compressed.byteLength).to.be.lessThan(fileSize)\n })\n})\n"]}
@@ -1 +0,0 @@
1
- export {};
@@ -1,218 +0,0 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- const mocha_1 = require("mocha");
13
- const chai_1 = require("chai");
14
- const lzma_wasm_1 = require("../../../icc-x-api/utils/lzma-wasm");
15
- const compression_utils_1 = require("../../../icc-x-api/utils/compression-utils");
16
- const child_process_1 = require("child_process");
17
- const fs = require("fs");
18
- const path = require("path");
19
- const os = require("os");
20
- const REF_SIZE = 32 * 1024;
21
- function generateReferenceData() {
22
- const words = ['patient', 'contact', 'healthcare', 'delegation', 'encrypted', 'document', 'service', 'invoice'];
23
- const lines = [];
24
- let len = 0;
25
- let i = 0;
26
- while (len < REF_SIZE) {
27
- const line = `${i}: ${words[i % words.length]} id=${Math.random().toString(36).slice(2)} ts=${Date.now()} value=${Math.random()}\n`;
28
- lines.push(line);
29
- len += line.length;
30
- i++;
31
- }
32
- return new TextEncoder().encode(lines.join('').slice(0, REF_SIZE));
33
- }
34
- function hasXzCli() {
35
- try {
36
- (0, child_process_1.execFileSync)('xz', ['--version'], { stdio: 'ignore' });
37
- return true;
38
- }
39
- catch (_a) {
40
- return false;
41
- }
42
- }
43
- function xzCompress(data) {
44
- const tmpIn = path.join(os.tmpdir(), `lzma-compat-ref-${Date.now()}.bin`);
45
- fs.writeFileSync(tmpIn, data);
46
- try {
47
- return (0, child_process_1.execFileSync)('xz', ['--compress', '-6', '--stdout', tmpIn]);
48
- }
49
- finally {
50
- fs.unlinkSync(tmpIn);
51
- }
52
- }
53
- function xzDecompress(data) {
54
- const tmpIn = path.join(os.tmpdir(), `lzma-compat-dec-${Date.now()}.bin`);
55
- fs.writeFileSync(tmpIn, data);
56
- try {
57
- return (0, child_process_1.execFileSync)('xz', ['--decompress', '--format=auto', '--stdout', tmpIn]);
58
- }
59
- catch (_a) {
60
- return null;
61
- }
62
- finally {
63
- fs.unlinkSync(tmpIn);
64
- }
65
- }
66
- (0, mocha_1.describe)('LZMA WASM compatibility (Node.js)', function () {
67
- this.timeout(60000);
68
- (0, mocha_1.describe)('round-trip', () => {
69
- (0, mocha_1.it)('should compress and decompress correctly via lzmaWasm functions', () => __awaiter(this, void 0, void 0, function* () {
70
- const data = generateReferenceData();
71
- const compressed = yield (0, lzma_wasm_1.lzmaWasmCompress)(data);
72
- const decompressed = new Uint8Array(yield (0, lzma_wasm_1.lzmaWasmDecompress)(compressed));
73
- (0, chai_1.expect)(decompressed.length).to.equal(data.length);
74
- (0, chai_1.expect)(decompressed.every((v, i) => v === data[i])).to.be.true;
75
- }));
76
- (0, mocha_1.it)('should compress and decompress correctly via compressData/decompressData', () => __awaiter(this, void 0, void 0, function* () {
77
- const data = generateReferenceData();
78
- const { data: compressed, algorithm } = yield (0, compression_utils_1.compressData)(data);
79
- (0, chai_1.expect)(algorithm).to.equal('lzma2');
80
- (0, chai_1.expect)(compressed.byteLength).to.be.lessThan(data.length);
81
- const decompressed = new Uint8Array(yield (0, compression_utils_1.decompressData)(compressed, algorithm));
82
- (0, chai_1.expect)(decompressed.length).to.equal(data.length);
83
- (0, chai_1.expect)(decompressed.every((v, i) => v === data[i])).to.be.true;
84
- }));
85
- (0, mocha_1.it)('should skip compression for small payloads', () => __awaiter(this, void 0, void 0, function* () {
86
- const small = new Uint8Array(32);
87
- const { data: result, algorithm } = yield (0, compression_utils_1.compressData)(small);
88
- (0, chai_1.expect)(algorithm).to.be.undefined;
89
- (0, chai_1.expect)(new Uint8Array(result)).to.deep.equal(small);
90
- }));
91
- (0, mocha_1.it)('should skip compression for already-compressed UTIs', () => __awaiter(this, void 0, void 0, function* () {
92
- const data = generateReferenceData();
93
- const { algorithm } = yield (0, compression_utils_1.compressData)(data, ['public.jpeg']);
94
- (0, chai_1.expect)(algorithm).to.be.undefined;
95
- }));
96
- (0, mocha_1.it)('should return data as-is when decompressing with undefined algorithm', () => __awaiter(this, void 0, void 0, function* () {
97
- const data = generateReferenceData();
98
- const result = new Uint8Array(yield (0, compression_utils_1.decompressData)(data, undefined));
99
- (0, chai_1.expect)(result.length).to.equal(data.length);
100
- (0, chai_1.expect)(result.every((v, i) => v === data[i])).to.be.true;
101
- }));
102
- (0, mocha_1.it)('should throw for unsupported algorithm', () => __awaiter(this, void 0, void 0, function* () {
103
- try {
104
- yield (0, compression_utils_1.decompressData)(new Uint8Array(10), 'unknown');
105
- chai_1.expect.fail('should have thrown');
106
- }
107
- catch (e) {
108
- (0, chai_1.expect)(e.message).to.include('Unsupported compression algorithm');
109
- }
110
- }));
111
- });
112
- (0, mocha_1.describe)('input immutability', () => {
113
- (0, mocha_1.it)('should not modify an ArrayBuffer input in place when compressing via lzmaWasmCompress', () => __awaiter(this, void 0, void 0, function* () {
114
- const data = generateReferenceData();
115
- const input = data.buffer.slice(0);
116
- const snapshot = new Uint8Array(input.slice(0));
117
- yield (0, lzma_wasm_1.lzmaWasmCompress)(input);
118
- (0, chai_1.expect)(new Uint8Array(input)).to.deep.equal(snapshot);
119
- }));
120
- (0, mocha_1.it)('should not modify an ArrayBuffer input in place when decompressing via lzmaWasmDecompress', () => __awaiter(this, void 0, void 0, function* () {
121
- const data = generateReferenceData();
122
- const compressed = yield (0, lzma_wasm_1.lzmaWasmCompress)(data);
123
- const snapshot = new Uint8Array(compressed.slice(0));
124
- yield (0, lzma_wasm_1.lzmaWasmDecompress)(compressed);
125
- (0, chai_1.expect)(new Uint8Array(compressed)).to.deep.equal(snapshot);
126
- }));
127
- (0, mocha_1.it)('should not modify an ArrayBuffer input in place when compressing via compressData', () => __awaiter(this, void 0, void 0, function* () {
128
- const data = generateReferenceData();
129
- const input = data.buffer.slice(0);
130
- const snapshot = new Uint8Array(input.slice(0));
131
- yield (0, compression_utils_1.compressData)(input);
132
- (0, chai_1.expect)(new Uint8Array(input)).to.deep.equal(snapshot);
133
- }));
134
- (0, mocha_1.it)('should not modify an ArrayBuffer input in place when decompressing via decompressData', () => __awaiter(this, void 0, void 0, function* () {
135
- const data = generateReferenceData();
136
- const { data: compressed, algorithm } = yield (0, compression_utils_1.compressData)(data);
137
- const snapshot = new Uint8Array(compressed.slice(0));
138
- yield (0, compression_utils_1.decompressData)(compressed, algorithm);
139
- (0, chai_1.expect)(new Uint8Array(compressed)).to.deep.equal(snapshot);
140
- }));
141
- });
142
- (0, mocha_1.describe)('xz CLI interop', function () {
143
- before(function () {
144
- if (!hasXzCli())
145
- this.skip();
146
- });
147
- (0, mocha_1.it)('should produce output that xz CLI can decompress', () => __awaiter(this, void 0, void 0, function* () {
148
- const data = generateReferenceData();
149
- const compressed = yield (0, lzma_wasm_1.lzmaWasmCompress)(data);
150
- const decompressed = xzDecompress(Buffer.from(compressed));
151
- (0, chai_1.expect)(decompressed).to.not.be.null;
152
- (0, chai_1.expect)(decompressed.length).to.equal(data.length);
153
- (0, chai_1.expect)(decompressed.equals(Buffer.from(data))).to.be.true;
154
- }));
155
- (0, mocha_1.it)('should decompress output from xz CLI', () => __awaiter(this, void 0, void 0, function* () {
156
- const data = generateReferenceData();
157
- const xzCompressed = xzCompress(Buffer.from(data));
158
- const decompressed = new Uint8Array(yield (0, lzma_wasm_1.lzmaWasmDecompress)(xzCompressed));
159
- (0, chai_1.expect)(decompressed.length).to.equal(data.length);
160
- (0, chai_1.expect)(decompressed.every((v, i) => v === data[i])).to.be.true;
161
- }));
162
- (0, mocha_1.it)('should print compatibility matrix', () => __awaiter(this, void 0, void 0, function* () {
163
- const data = generateReferenceData();
164
- const wasmCompressed = yield (0, lzma_wasm_1.lzmaWasmCompress)(data);
165
- const xzCompressed = xzCompress(Buffer.from(data));
166
- const matrix = {
167
- 'LZMA-WASM': { 'LZMA-WASM': { success: false, matches: false }, 'xz CLI': { success: false, matches: false } },
168
- 'xz CLI': { 'LZMA-WASM': { success: false, matches: false }, 'xz CLI': { success: false, matches: false } },
169
- };
170
- // WASM → WASM
171
- try {
172
- const d = new Uint8Array(yield (0, lzma_wasm_1.lzmaWasmDecompress)(wasmCompressed));
173
- matrix['LZMA-WASM']['LZMA-WASM'] = { success: true, matches: d.every((v, i) => v === data[i]) };
174
- }
175
- catch (_a) {
176
- /* leave as false */
177
- }
178
- // WASM → xz CLI
179
- const d1 = xzDecompress(Buffer.from(wasmCompressed));
180
- if (d1)
181
- matrix['LZMA-WASM']['xz CLI'] = { success: true, matches: d1.equals(Buffer.from(data)) };
182
- // xz CLI → WASM
183
- try {
184
- const d = new Uint8Array(yield (0, lzma_wasm_1.lzmaWasmDecompress)(xzCompressed));
185
- matrix['xz CLI']['LZMA-WASM'] = { success: true, matches: d.every((v, i) => v === data[i]) };
186
- }
187
- catch (_b) {
188
- /* leave as false */
189
- }
190
- // xz CLI → xz CLI
191
- const d2 = xzDecompress(Buffer.from(xzCompressed));
192
- if (d2)
193
- matrix['xz CLI']['xz CLI'] = { success: true, matches: d2.equals(Buffer.from(data)) };
194
- // Print
195
- const producers = ['LZMA-WASM', 'xz CLI'];
196
- console.log('\n Compatibility Matrix (32 KB):');
197
- console.log(` ${'Compressed by'.padEnd(16)} | ${'LZMA-WASM'.padEnd(12)} | ${'xz CLI'.padEnd(12)}`);
198
- console.log(` ${'─'.repeat(46)}`);
199
- for (const p of producers) {
200
- const cells = producers.map((c) => {
201
- const r = matrix[p][c];
202
- return r.success && r.matches ? 'OK' : r.success ? 'MISMATCH' : 'FAIL';
203
- });
204
- console.log(` ${p.padEnd(16)} | ${cells[0].padEnd(12)} | ${cells[1].padEnd(12)}`);
205
- }
206
- console.log(`\n WASM compressed: ${wasmCompressed.byteLength} bytes (${((wasmCompressed.byteLength / REF_SIZE) * 100).toFixed(1)}%)`);
207
- console.log(` xz compressed: ${xzCompressed.length} bytes (${((xzCompressed.length / REF_SIZE) * 100).toFixed(1)}%)`);
208
- // All cells must pass
209
- for (const p of producers) {
210
- for (const c of producers) {
211
- (0, chai_1.expect)(matrix[p][c].success, `${p} → ${c} decompression failed`).to.be.true;
212
- (0, chai_1.expect)(matrix[p][c].matches, `${p} → ${c} data mismatch`).to.be.true;
213
- }
214
- }
215
- }));
216
- });
217
- });
218
- //# sourceMappingURL=lzma-compat-test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"lzma-compat-test.js","sourceRoot":"","sources":["../../../../test/icc-x-api/utils/lzma-compat-test.ts"],"names":[],"mappings":"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","sourcesContent":["import { describe, it } from 'mocha'\nimport { expect } from 'chai'\nimport { lzmaWasmCompress, lzmaWasmDecompress } from '../../../icc-x-api/utils/lzma-wasm'\nimport { compressData, decompressData } from '../../../icc-x-api/utils/compression-utils'\nimport { execFileSync } from 'child_process'\nimport * as fs from 'fs'\nimport * as path from 'path'\nimport * as os from 'os'\n\nconst REF_SIZE = 32 * 1024\n\nfunction generateReferenceData(): Uint8Array {\n const words = ['patient', 'contact', 'healthcare', 'delegation', 'encrypted', 'document', 'service', 'invoice']\n const lines: string[] = []\n let len = 0\n let i = 0\n while (len < REF_SIZE) {\n const line = `${i}: ${words[i % words.length]} id=${Math.random().toString(36).slice(2)} ts=${Date.now()} value=${Math.random()}\\n`\n lines.push(line)\n len += line.length\n i++\n }\n return new TextEncoder().encode(lines.join('').slice(0, REF_SIZE))\n}\n\nfunction hasXzCli(): boolean {\n try {\n execFileSync('xz', ['--version'], { stdio: 'ignore' })\n return true\n } catch {\n return false\n }\n}\n\nfunction xzCompress(data: Buffer): Buffer {\n const tmpIn = path.join(os.tmpdir(), `lzma-compat-ref-${Date.now()}.bin`)\n fs.writeFileSync(tmpIn, data)\n try {\n return execFileSync('xz', ['--compress', '-6', '--stdout', tmpIn])\n } finally {\n fs.unlinkSync(tmpIn)\n }\n}\n\nfunction xzDecompress(data: Buffer): Buffer | null {\n const tmpIn = path.join(os.tmpdir(), `lzma-compat-dec-${Date.now()}.bin`)\n fs.writeFileSync(tmpIn, data)\n try {\n return execFileSync('xz', ['--decompress', '--format=auto', '--stdout', tmpIn])\n } catch {\n return null\n } finally {\n fs.unlinkSync(tmpIn)\n }\n}\n\ndescribe('LZMA WASM compatibility (Node.js)', function () {\n this.timeout(60_000)\n\n describe('round-trip', () => {\n it('should compress and decompress correctly via lzmaWasm functions', async () => {\n const data = generateReferenceData()\n const compressed = await lzmaWasmCompress(data)\n const decompressed = new Uint8Array(await lzmaWasmDecompress(compressed))\n\n expect(decompressed.length).to.equal(data.length)\n expect(decompressed.every((v, i) => v === data[i])).to.be.true\n })\n\n it('should compress and decompress correctly via compressData/decompressData', async () => {\n const data = generateReferenceData()\n const { data: compressed, algorithm } = await compressData(data)\n\n expect(algorithm).to.equal('lzma2')\n expect(compressed.byteLength).to.be.lessThan(data.length)\n\n const decompressed = new Uint8Array(await decompressData(compressed, algorithm))\n expect(decompressed.length).to.equal(data.length)\n expect(decompressed.every((v, i) => v === data[i])).to.be.true\n })\n\n it('should skip compression for small payloads', async () => {\n const small = new Uint8Array(32)\n const { data: result, algorithm } = await compressData(small)\n\n expect(algorithm).to.be.undefined\n expect(new Uint8Array(result)).to.deep.equal(small)\n })\n\n it('should skip compression for already-compressed UTIs', async () => {\n const data = generateReferenceData()\n const { algorithm } = await compressData(data, ['public.jpeg'])\n\n expect(algorithm).to.be.undefined\n })\n\n it('should return data as-is when decompressing with undefined algorithm', async () => {\n const data = generateReferenceData()\n const result = new Uint8Array(await decompressData(data, undefined))\n\n expect(result.length).to.equal(data.length)\n expect(result.every((v, i) => v === data[i])).to.be.true\n })\n\n it('should throw for unsupported algorithm', async () => {\n try {\n await decompressData(new Uint8Array(10), 'unknown')\n expect.fail('should have thrown')\n } catch (e: any) {\n expect(e.message).to.include('Unsupported compression algorithm')\n }\n })\n })\n\n describe('input immutability', () => {\n it('should not modify an ArrayBuffer input in place when compressing via lzmaWasmCompress', async () => {\n const data = generateReferenceData()\n const input = data.buffer.slice(0) as ArrayBuffer\n const snapshot = new Uint8Array(input.slice(0))\n\n await lzmaWasmCompress(input)\n\n expect(new Uint8Array(input)).to.deep.equal(snapshot)\n })\n\n it('should not modify an ArrayBuffer input in place when decompressing via lzmaWasmDecompress', async () => {\n const data = generateReferenceData()\n const compressed = await lzmaWasmCompress(data)\n const snapshot = new Uint8Array(compressed.slice(0))\n\n await lzmaWasmDecompress(compressed)\n\n expect(new Uint8Array(compressed)).to.deep.equal(snapshot)\n })\n\n it('should not modify an ArrayBuffer input in place when compressing via compressData', async () => {\n const data = generateReferenceData()\n const input = data.buffer.slice(0) as ArrayBuffer\n const snapshot = new Uint8Array(input.slice(0))\n\n await compressData(input)\n\n expect(new Uint8Array(input)).to.deep.equal(snapshot)\n })\n\n it('should not modify an ArrayBuffer input in place when decompressing via decompressData', async () => {\n const data = generateReferenceData()\n const { data: compressed, algorithm } = await compressData(data)\n const snapshot = new Uint8Array(compressed.slice(0))\n\n await decompressData(compressed, algorithm)\n\n expect(new Uint8Array(compressed)).to.deep.equal(snapshot)\n })\n })\n\n describe('xz CLI interop', function () {\n before(function () {\n if (!hasXzCli()) this.skip()\n })\n\n it('should produce output that xz CLI can decompress', async () => {\n const data = generateReferenceData()\n const compressed = await lzmaWasmCompress(data)\n\n const decompressed = xzDecompress(Buffer.from(compressed))\n expect(decompressed).to.not.be.null\n expect(decompressed!.length).to.equal(data.length)\n expect(decompressed!.equals(Buffer.from(data))).to.be.true\n })\n\n it('should decompress output from xz CLI', async () => {\n const data = generateReferenceData()\n const xzCompressed = xzCompress(Buffer.from(data))\n\n const decompressed = new Uint8Array(await lzmaWasmDecompress(xzCompressed))\n expect(decompressed.length).to.equal(data.length)\n expect(decompressed.every((v, i) => v === data[i])).to.be.true\n })\n\n it('should print compatibility matrix', async () => {\n const data = generateReferenceData()\n\n const wasmCompressed = await lzmaWasmCompress(data)\n const xzCompressed = xzCompress(Buffer.from(data))\n\n type Result = { success: boolean; matches: boolean }\n const matrix: { [producer: string]: { [consumer: string]: Result } } = {\n 'LZMA-WASM': { 'LZMA-WASM': { success: false, matches: false }, 'xz CLI': { success: false, matches: false } },\n 'xz CLI': { 'LZMA-WASM': { success: false, matches: false }, 'xz CLI': { success: false, matches: false } },\n }\n\n // WASM → WASM\n try {\n const d = new Uint8Array(await lzmaWasmDecompress(wasmCompressed))\n matrix['LZMA-WASM']['LZMA-WASM'] = { success: true, matches: d.every((v, i) => v === data[i]) }\n } catch {\n /* leave as false */\n }\n\n // WASM → xz CLI\n const d1 = xzDecompress(Buffer.from(wasmCompressed))\n if (d1) matrix['LZMA-WASM']['xz CLI'] = { success: true, matches: d1.equals(Buffer.from(data)) }\n\n // xz CLI → WASM\n try {\n const d = new Uint8Array(await lzmaWasmDecompress(xzCompressed))\n matrix['xz CLI']['LZMA-WASM'] = { success: true, matches: d.every((v, i) => v === data[i]) }\n } catch {\n /* leave as false */\n }\n\n // xz CLI → xz CLI\n const d2 = xzDecompress(Buffer.from(xzCompressed))\n if (d2) matrix['xz CLI']['xz CLI'] = { success: true, matches: d2.equals(Buffer.from(data)) }\n\n // Print\n const producers = ['LZMA-WASM', 'xz CLI']\n console.log('\\n Compatibility Matrix (32 KB):')\n console.log(` ${'Compressed by'.padEnd(16)} | ${'LZMA-WASM'.padEnd(12)} | ${'xz CLI'.padEnd(12)}`)\n console.log(` ${'─'.repeat(46)}`)\n for (const p of producers) {\n const cells = producers.map((c) => {\n const r = matrix[p][c]\n return r.success && r.matches ? 'OK' : r.success ? 'MISMATCH' : 'FAIL'\n })\n console.log(` ${p.padEnd(16)} | ${cells[0].padEnd(12)} | ${cells[1].padEnd(12)}`)\n }\n console.log(`\\n WASM compressed: ${wasmCompressed.byteLength} bytes (${((wasmCompressed.byteLength / REF_SIZE) * 100).toFixed(1)}%)`)\n console.log(` xz compressed: ${xzCompressed.length} bytes (${((xzCompressed.length / REF_SIZE) * 100).toFixed(1)}%)`)\n\n // All cells must pass\n for (const p of producers) {\n for (const c of producers) {\n expect(matrix[p][c].success, `${p} → ${c} decompression failed`).to.be.true\n expect(matrix[p][c].matches, `${p} → ${c} data mismatch`).to.be.true\n }\n }\n })\n })\n})\n"]}
@@ -1 +0,0 @@
1
- export {};
@@ -1,114 +0,0 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- const mocha_1 = require("mocha");
13
- const chai_1 = require("chai");
14
- const mutex_1 = require("../../../icc-x-api/utils/mutex");
15
- function delay(ms) {
16
- return new Promise((resolve) => setTimeout(resolve, ms));
17
- }
18
- (0, mocha_1.describe)('Mutex', () => {
19
- (0, mocha_1.it)('should allow a single holder to acquire and release', () => __awaiter(void 0, void 0, void 0, function* () {
20
- const mutex = new mutex_1.Mutex();
21
- const release = yield mutex.acquire();
22
- release();
23
- }));
24
- (0, mocha_1.it)('should serialize concurrent access to a critical section', () => __awaiter(void 0, void 0, void 0, function* () {
25
- const mutex = new mutex_1.Mutex();
26
- const log = [];
27
- function worker(id, workMs) {
28
- return __awaiter(this, void 0, void 0, function* () {
29
- const release = yield mutex.acquire();
30
- try {
31
- log.push(`${id}:enter`);
32
- yield delay(workMs);
33
- log.push(`${id}:exit`);
34
- }
35
- finally {
36
- release();
37
- }
38
- });
39
- }
40
- yield Promise.all([worker('a', 30), worker('b', 10), worker('c', 10)]);
41
- (0, chai_1.expect)(log).to.deep.equal(['a:enter', 'a:exit', 'b:enter', 'b:exit', 'c:enter', 'c:exit']);
42
- }));
43
- (0, mocha_1.it)('should protect shared state from concurrent mutation', () => __awaiter(void 0, void 0, void 0, function* () {
44
- const mutex = new mutex_1.Mutex();
45
- let counter = 0;
46
- function increment() {
47
- return __awaiter(this, void 0, void 0, function* () {
48
- const release = yield mutex.acquire();
49
- try {
50
- const current = counter;
51
- yield delay(5);
52
- counter = current + 1;
53
- }
54
- finally {
55
- release();
56
- }
57
- });
58
- }
59
- yield Promise.all(Array.from({ length: 10 }, () => increment()));
60
- (0, chai_1.expect)(counter).to.equal(10);
61
- }));
62
- (0, mocha_1.it)('should release correctly even when the critical section throws', () => __awaiter(void 0, void 0, void 0, function* () {
63
- const mutex = new mutex_1.Mutex();
64
- const log = [];
65
- function failing() {
66
- return __awaiter(this, void 0, void 0, function* () {
67
- const release = yield mutex.acquire();
68
- try {
69
- log.push('fail:enter');
70
- throw new Error('boom');
71
- }
72
- finally {
73
- release();
74
- }
75
- });
76
- }
77
- function succeeding() {
78
- return __awaiter(this, void 0, void 0, function* () {
79
- const release = yield mutex.acquire();
80
- try {
81
- log.push('ok:enter');
82
- }
83
- finally {
84
- release();
85
- }
86
- });
87
- }
88
- yield failing().catch(() => { });
89
- yield succeeding();
90
- (0, chai_1.expect)(log).to.deep.equal(['fail:enter', 'ok:enter']);
91
- }));
92
- (0, mocha_1.it)('should process waiters in FIFO order', () => __awaiter(void 0, void 0, void 0, function* () {
93
- const mutex = new mutex_1.Mutex();
94
- const order = [];
95
- const release = yield mutex.acquire();
96
- const waiters = Array.from({ length: 5 }, (_, i) => mutex.acquire().then((r) => {
97
- order.push(i);
98
- r();
99
- }));
100
- release();
101
- yield Promise.all(waiters);
102
- (0, chai_1.expect)(order).to.deep.equal([0, 1, 2, 3, 4]);
103
- }));
104
- (0, mocha_1.it)('should allow reuse after full drain', () => __awaiter(void 0, void 0, void 0, function* () {
105
- const mutex = new mutex_1.Mutex();
106
- const r1 = yield mutex.acquire();
107
- r1();
108
- const r2 = yield mutex.acquire();
109
- r2();
110
- const r3 = yield mutex.acquire();
111
- r3();
112
- }));
113
- });
114
- //# sourceMappingURL=mutex-test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mutex-test.js","sourceRoot":"","sources":["../../../../test/icc-x-api/utils/mutex-test.ts"],"names":[],"mappings":"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","sourcesContent":["import { describe, it } from 'mocha'\nimport { expect } from 'chai'\nimport { Mutex } from '../../../icc-x-api/utils/mutex'\n\nfunction delay(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms))\n}\n\ndescribe('Mutex', () => {\n it('should allow a single holder to acquire and release', async () => {\n const mutex = new Mutex()\n const release = await mutex.acquire()\n release()\n })\n\n it('should serialize concurrent access to a critical section', async () => {\n const mutex = new Mutex()\n const log: string[] = []\n\n async function worker(id: string, workMs: number) {\n const release = await mutex.acquire()\n try {\n log.push(`${id}:enter`)\n await delay(workMs)\n log.push(`${id}:exit`)\n } finally {\n release()\n }\n }\n\n await Promise.all([worker('a', 30), worker('b', 10), worker('c', 10)])\n\n expect(log).to.deep.equal(['a:enter', 'a:exit', 'b:enter', 'b:exit', 'c:enter', 'c:exit'])\n })\n\n it('should protect shared state from concurrent mutation', async () => {\n const mutex = new Mutex()\n let counter = 0\n\n async function increment() {\n const release = await mutex.acquire()\n try {\n const current = counter\n await delay(5)\n counter = current + 1\n } finally {\n release()\n }\n }\n\n await Promise.all(Array.from({ length: 10 }, () => increment()))\n\n expect(counter).to.equal(10)\n })\n\n it('should release correctly even when the critical section throws', async () => {\n const mutex = new Mutex()\n const log: string[] = []\n\n async function failing() {\n const release = await mutex.acquire()\n try {\n log.push('fail:enter')\n throw new Error('boom')\n } finally {\n release()\n }\n }\n\n async function succeeding() {\n const release = await mutex.acquire()\n try {\n log.push('ok:enter')\n } finally {\n release()\n }\n }\n\n await failing().catch(() => {})\n await succeeding()\n\n expect(log).to.deep.equal(['fail:enter', 'ok:enter'])\n })\n\n it('should process waiters in FIFO order', async () => {\n const mutex = new Mutex()\n const order: number[] = []\n\n const release = await mutex.acquire()\n\n const waiters = Array.from({ length: 5 }, (_, i) =>\n mutex.acquire().then((r) => {\n order.push(i)\n r()\n })\n )\n\n release()\n await Promise.all(waiters)\n\n expect(order).to.deep.equal([0, 1, 2, 3, 4])\n })\n\n it('should allow reuse after full drain', async () => {\n const mutex = new Mutex()\n\n const r1 = await mutex.acquire()\n r1()\n\n const r2 = await mutex.acquire()\n r2()\n\n const r3 = await mutex.acquire()\n r3()\n })\n})\n"]}
@@ -1 +0,0 @@
1
- export {};