@icure/api 8.11.0 → 8.12.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 (297) 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 +5 -0
  5. package/icc-api/model/HealthElement.js.map +1 -1
  6. package/icc-api/model/HealthElementQualifiedLink.d.ts +31 -0
  7. package/icc-api/model/HealthElementQualifiedLink.js +26 -0
  8. package/icc-api/model/HealthElementQualifiedLink.js.map +1 -0
  9. package/icc-api/model/models.d.ts +1 -0
  10. package/icc-api/model/models.js +1 -0
  11. package/icc-api/model/models.js.map +1 -1
  12. package/icc-x-api/filters/HealthElementByAssociationIdFilter.d.ts +23 -0
  13. package/icc-x-api/filters/HealthElementByAssociationIdFilter.js +30 -0
  14. package/icc-x-api/filters/HealthElementByAssociationIdFilter.js.map +1 -0
  15. package/icc-x-api/filters/HealthElementByQualifiedLinkFilter.d.ts +24 -0
  16. package/icc-x-api/filters/HealthElementByQualifiedLinkFilter.js +30 -0
  17. package/icc-x-api/filters/HealthElementByQualifiedLinkFilter.js.map +1 -0
  18. package/icc-x-api/filters/filters.d.ts +2 -0
  19. package/icc-x-api/filters/filters.js +2 -0
  20. package/icc-x-api/filters/filters.js.map +1 -1
  21. package/package.json +1 -1
  22. package/test/benchmarks/lzma-benchmark.spec.d.ts +0 -1
  23. package/test/benchmarks/lzma-benchmark.spec.js +0 -131
  24. package/test/benchmarks/lzma-benchmark.spec.js.map +0 -1
  25. package/test/benchmarks/lzma-compat.spec.d.ts +0 -1
  26. package/test/benchmarks/lzma-compat.spec.js +0 -187
  27. package/test/benchmarks/lzma-compat.spec.js.map +0 -1
  28. package/test/benchmarks/playwright.config.d.ts +0 -2
  29. package/test/benchmarks/playwright.config.js +0 -18
  30. package/test/benchmarks/playwright.config.js.map +0 -1
  31. package/test/icc-api/api/IccAgendaApi.d.ts +0 -1
  32. package/test/icc-api/api/IccAgendaApi.js +0 -64
  33. package/test/icc-api/api/IccAgendaApi.js.map +0 -1
  34. package/test/icc-api/api/IccAnonymousAccessApi.d.ts +0 -1
  35. package/test/icc-api/api/IccAnonymousAccessApi.js +0 -58
  36. package/test/icc-api/api/IccAnonymousAccessApi.js.map +0 -1
  37. package/test/icc-api/api/IccCalendarItemApi.d.ts +0 -1
  38. package/test/icc-api/api/IccCalendarItemApi.js +0 -67
  39. package/test/icc-api/api/IccCalendarItemApi.js.map +0 -1
  40. package/test/icc-api/api/IccCalendarItemTypeApi.d.ts +0 -1
  41. package/test/icc-api/api/IccCalendarItemTypeApi.js +0 -96
  42. package/test/icc-api/api/IccCalendarItemTypeApi.js.map +0 -1
  43. package/test/icc-api/api/IccCodeApi.d.ts +0 -1
  44. package/test/icc-api/api/IccCodeApi.js +0 -38
  45. package/test/icc-api/api/IccCodeApi.js.map +0 -1
  46. package/test/icc-api/api/IccDocumentApi.d.ts +0 -1
  47. package/test/icc-api/api/IccDocumentApi.js +0 -199
  48. package/test/icc-api/api/IccDocumentApi.js.map +0 -1
  49. package/test/icc-api/api/IccGroupApi.d.ts +0 -1
  50. package/test/icc-api/api/IccGroupApi.js +0 -50
  51. package/test/icc-api/api/IccGroupApi.js.map +0 -1
  52. package/test/icc-api/api/IccKeywordApi.d.ts +0 -1
  53. package/test/icc-api/api/IccKeywordApi.js +0 -64
  54. package/test/icc-api/api/IccKeywordApi.js.map +0 -1
  55. package/test/icc-api/api/IccMedicalLocationApi.d.ts +0 -1
  56. package/test/icc-api/api/IccMedicalLocationApi.js +0 -64
  57. package/test/icc-api/api/IccMedicalLocationApi.js.map +0 -1
  58. package/test/icc-api/api/IccPlaceApi.d.ts +0 -1
  59. package/test/icc-api/api/IccPlaceApi.js +0 -64
  60. package/test/icc-api/api/IccPlaceApi.js.map +0 -1
  61. package/test/icc-api/api/IccRecoveryDataApi.d.ts +0 -1
  62. package/test/icc-api/api/IccRecoveryDataApi.js +0 -95
  63. package/test/icc-api/api/IccRecoveryDataApi.js.map +0 -1
  64. package/test/icc-api/api/IccRoleApi.d.ts +0 -1
  65. package/test/icc-api/api/IccRoleApi.js +0 -34
  66. package/test/icc-api/api/IccRoleApi.js.map +0 -1
  67. package/test/icc-api/api/IccUserApi.d.ts +0 -1
  68. package/test/icc-api/api/IccUserApi.js +0 -96
  69. package/test/icc-api/api/IccUserApi.js.map +0 -1
  70. package/test/icc-api/e2e/IccCalendarItemApi.d.ts +0 -1
  71. package/test/icc-api/e2e/IccCalendarItemApi.js +0 -46
  72. package/test/icc-api/e2e/IccCalendarItemApi.js.map +0 -1
  73. package/test/icc-api/model/modelHelpersTest.d.ts +0 -1
  74. package/test/icc-api/model/modelHelpersTest.js +0 -45
  75. package/test/icc-api/model/modelHelpersTest.js.map +0 -1
  76. package/test/icc-x-api/auth/group-switch-test.d.ts +0 -1
  77. package/test/icc-x-api/auth/group-switch-test.js +0 -81
  78. package/test/icc-x-api/auth/group-switch-test.js.map +0 -1
  79. package/test/icc-x-api/auth/jwt-concurrency-test.d.ts +0 -2
  80. package/test/icc-x-api/auth/jwt-concurrency-test.js +0 -112
  81. package/test/icc-x-api/auth/jwt-concurrency-test.js.map +0 -1
  82. package/test/icc-x-api/auth/jwt-provider-test.d.ts +0 -1
  83. package/test/icc-x-api/auth/jwt-provider-test.js +0 -197
  84. package/test/icc-x-api/auth/jwt-provider-test.js.map +0 -1
  85. package/test/icc-x-api/auth/smart-auth-provider-test.d.ts +0 -1
  86. package/test/icc-x-api/auth/smart-auth-provider-test.js +0 -224
  87. package/test/icc-x-api/auth/smart-auth-provider-test.js.map +0 -1
  88. package/test/icc-x-api/autofix-anonymity-test.d.ts +0 -1
  89. package/test/icc-x-api/autofix-anonymity-test.js +0 -122
  90. package/test/icc-x-api/autofix-anonymity-test.js.map +0 -1
  91. package/test/icc-x-api/confidential-entities-test.d.ts +0 -1
  92. package/test/icc-x-api/confidential-entities-test.js +0 -168
  93. package/test/icc-x-api/confidential-entities-test.js.map +0 -1
  94. package/test/icc-x-api/crud/comprehensive-crud-test.d.ts +0 -1
  95. package/test/icc-x-api/crud/comprehensive-crud-test.js +0 -276
  96. package/test/icc-x-api/crud/comprehensive-crud-test.js.map +0 -1
  97. package/test/icc-x-api/crud/entities-crud-test-interface.d.ts +0 -16
  98. package/test/icc-x-api/crud/entities-crud-test-interface.js +0 -407
  99. package/test/icc-x-api/crud/entities-crud-test-interface.js.map +0 -1
  100. package/test/icc-x-api/crypto/anonymous-delegations-test.d.ts +0 -1
  101. package/test/icc-x-api/crypto/anonymous-delegations-test.js +0 -587
  102. package/test/icc-x-api/crypto/anonymous-delegations-test.js.map +0 -1
  103. package/test/icc-x-api/crypto/concurrency.d.ts +0 -1
  104. package/test/icc-x-api/crypto/concurrency.js +0 -35
  105. package/test/icc-x-api/crypto/concurrency.js.map +0 -1
  106. package/test/icc-x-api/crypto/crypto-utils.d.ts +0 -1
  107. package/test/icc-x-api/crypto/crypto-utils.js +0 -79
  108. package/test/icc-x-api/crypto/crypto-utils.js.map +0 -1
  109. package/test/icc-x-api/crypto/cryptoTest.d.ts +0 -2
  110. package/test/icc-x-api/crypto/cryptoTest.js +0 -402
  111. package/test/icc-x-api/crypto/cryptoTest.js.map +0 -1
  112. package/test/icc-x-api/crypto/delegate-ci-to-patient-with-missing-keys-test.d.ts +0 -1
  113. package/test/icc-x-api/crypto/delegate-ci-to-patient-with-missing-keys-test.js +0 -166
  114. package/test/icc-x-api/crypto/delegate-ci-to-patient-with-missing-keys-test.js.map +0 -1
  115. package/test/icc-x-api/crypto/exchange-data-manager-test.d.ts +0 -1
  116. package/test/icc-x-api/crypto/exchange-data-manager-test.js +0 -674
  117. package/test/icc-x-api/crypto/exchange-data-manager-test.js.map +0 -1
  118. package/test/icc-x-api/crypto/full-crypto-test.d.ts +0 -1
  119. package/test/icc-x-api/crypto/full-crypto-test.js +0 -454
  120. package/test/icc-x-api/crypto/full-crypto-test.js.map +0 -1
  121. package/test/icc-x-api/crypto/legacy-metadata-migration-test.d.ts +0 -1
  122. package/test/icc-x-api/crypto/legacy-metadata-migration-test.js +0 -379
  123. package/test/icc-x-api/crypto/legacy-metadata-migration-test.js.map +0 -1
  124. package/test/icc-x-api/crypto/secure-delegations-manager-test.d.ts +0 -1
  125. package/test/icc-x-api/crypto/secure-delegations-manager-test.js +0 -278
  126. package/test/icc-x-api/crypto/secure-delegations-manager-test.js.map +0 -1
  127. package/test/icc-x-api/crypto/shamir.d.ts +0 -2
  128. package/test/icc-x-api/crypto/shamir.js +0 -167
  129. package/test/icc-x-api/crypto/shamir.js.map +0 -1
  130. package/test/icc-x-api/crypto/share-deduplication-test.d.ts +0 -1
  131. package/test/icc-x-api/crypto/share-deduplication-test.js +0 -250
  132. package/test/icc-x-api/crypto/share-deduplication-test.js.map +0 -1
  133. package/test/icc-x-api/crypto/share-to-newly-created-patient-from-hcp.d.ts +0 -1
  134. package/test/icc-x-api/crypto/share-to-newly-created-patient-from-hcp.js +0 -71
  135. package/test/icc-x-api/crypto/share-to-newly-created-patient-from-hcp.js.map +0 -1
  136. package/test/icc-x-api/crypto/soft-deleted-data-owners.d.ts +0 -2
  137. package/test/icc-x-api/crypto/soft-deleted-data-owners.js +0 -113
  138. package/test/icc-x-api/crypto/soft-deleted-data-owners.js.map +0 -1
  139. package/test/icc-x-api/crypto/user-encryption-keys-manager-test.d.ts +0 -1
  140. package/test/icc-x-api/crypto/user-encryption-keys-manager-test.js +0 -246
  141. package/test/icc-x-api/crypto/user-encryption-keys-manager-test.js.map +0 -1
  142. package/test/icc-x-api/entity-with-attachments-api-test.d.ts +0 -1
  143. package/test/icc-x-api/entity-with-attachments-api-test.js +0 -142
  144. package/test/icc-x-api/entity-with-attachments-api-test.js.map +0 -1
  145. package/test/icc-x-api/filters/filters.d.ts +0 -1
  146. package/test/icc-x-api/filters/filters.js +0 -49
  147. package/test/icc-x-api/filters/filters.js.map +0 -1
  148. package/test/icc-x-api/filters/healthelement.d.ts +0 -1
  149. package/test/icc-x-api/filters/healthelement.js +0 -333
  150. package/test/icc-x-api/filters/healthelement.js.map +0 -1
  151. package/test/icc-x-api/icc-accesslog-x-api.d.ts +0 -1
  152. package/test/icc-x-api/icc-accesslog-x-api.js +0 -106
  153. package/test/icc-x-api/icc-accesslog-x-api.js.map +0 -1
  154. package/test/icc-x-api/icc-application-settings-x-api.d.ts +0 -1
  155. package/test/icc-x-api/icc-application-settings-x-api.js +0 -91
  156. package/test/icc-x-api/icc-application-settings-x-api.js.map +0 -1
  157. package/test/icc-x-api/icc-auth-api.d.ts +0 -1
  158. package/test/icc-x-api/icc-auth-api.js +0 -47
  159. package/test/icc-x-api/icc-auth-api.js.map +0 -1
  160. package/test/icc-x-api/icc-calendar-item-x-api.d.ts +0 -1
  161. package/test/icc-x-api/icc-calendar-item-x-api.js +0 -150
  162. package/test/icc-x-api/icc-calendar-item-x-api.js.map +0 -1
  163. package/test/icc-x-api/icc-code-x-api-test.d.ts +0 -1
  164. package/test/icc-x-api/icc-code-x-api-test.js +0 -74
  165. package/test/icc-x-api/icc-code-x-api-test.js.map +0 -1
  166. package/test/icc-x-api/icc-contact-x-api.d.ts +0 -1
  167. package/test/icc-x-api/icc-contact-x-api.js +0 -355
  168. package/test/icc-x-api/icc-contact-x-api.js.map +0 -1
  169. package/test/icc-x-api/icc-document-x-api.d.ts +0 -1
  170. package/test/icc-x-api/icc-document-x-api.js +0 -76
  171. package/test/icc-x-api/icc-document-x-api.js.map +0 -1
  172. package/test/icc-x-api/icc-form-x-api.d.ts +0 -1
  173. package/test/icc-x-api/icc-form-x-api.js +0 -413
  174. package/test/icc-x-api/icc-form-x-api.js.map +0 -1
  175. package/test/icc-x-api/icc-hcparty-x-api-test.d.ts +0 -1
  176. package/test/icc-x-api/icc-hcparty-x-api-test.js +0 -43
  177. package/test/icc-x-api/icc-hcparty-x-api-test.js.map +0 -1
  178. package/test/icc-x-api/icc-helement-x-api-test.d.ts +0 -1
  179. package/test/icc-x-api/icc-helement-x-api-test.js +0 -155
  180. package/test/icc-x-api/icc-helement-x-api-test.js.map +0 -1
  181. package/test/icc-x-api/icc-invoice-x-api.d.ts +0 -1
  182. package/test/icc-x-api/icc-invoice-x-api.js +0 -99
  183. package/test/icc-x-api/icc-invoice-x-api.js.map +0 -1
  184. package/test/icc-x-api/icc-maintenance-task-x-api-test.d.ts +0 -1
  185. package/test/icc-x-api/icc-maintenance-task-x-api-test.js +0 -222
  186. package/test/icc-x-api/icc-maintenance-task-x-api-test.js.map +0 -1
  187. package/test/icc-x-api/icc-message-x-api.d.ts +0 -1
  188. package/test/icc-x-api/icc-message-x-api.js +0 -54
  189. package/test/icc-x-api/icc-message-x-api.js.map +0 -1
  190. package/test/icc-x-api/icc-patient-x-api-test.d.ts +0 -1
  191. package/test/icc-x-api/icc-patient-x-api-test.js +0 -209
  192. package/test/icc-x-api/icc-patient-x-api-test.js.map +0 -1
  193. package/test/icc-x-api/icc-recovery-x-api.d.ts +0 -1
  194. package/test/icc-x-api/icc-recovery-x-api.js +0 -175
  195. package/test/icc-x-api/icc-recovery-x-api.js.map +0 -1
  196. package/test/icc-x-api/icc-topic-x-api.d.ts +0 -1
  197. package/test/icc-x-api/icc-topic-x-api.js +0 -269
  198. package/test/icc-x-api/icc-topic-x-api.js.map +0 -1
  199. package/test/icc-x-api/icc-user-x-api-test.d.ts +0 -1
  200. package/test/icc-x-api/icc-user-x-api-test.js +0 -99
  201. package/test/icc-x-api/icc-user-x-api-test.js.map +0 -1
  202. package/test/icc-x-api/keyless-api.d.ts +0 -1
  203. package/test/icc-x-api/keyless-api.js +0 -125
  204. package/test/icc-x-api/keyless-api.js.map +0 -1
  205. package/test/icc-x-api/patient-user.d.ts +0 -2
  206. package/test/icc-x-api/patient-user.js +0 -103
  207. package/test/icc-x-api/patient-user.js.map +0 -1
  208. package/test/icc-x-api/storage/storage.d.ts +0 -1
  209. package/test/icc-x-api/storage/storage.js +0 -48
  210. package/test/icc-x-api/storage/storage.js.map +0 -1
  211. package/test/icc-x-api/test-api-no-parent.d.ts +0 -1
  212. package/test/icc-x-api/test-api-no-parent.js +0 -79
  213. package/test/icc-x-api/test-api-no-parent.js.map +0 -1
  214. package/test/icc-x-api/test-legacy-data-support.d.ts +0 -1
  215. package/test/icc-x-api/test-legacy-data-support.js +0 -375
  216. package/test/icc-x-api/test-legacy-data-support.js.map +0 -1
  217. package/test/icc-x-api/utils/date-encode-test.d.ts +0 -1
  218. package/test/icc-x-api/utils/date-encode-test.js +0 -150
  219. package/test/icc-x-api/utils/date-encode-test.js.map +0 -1
  220. package/test/icc-x-api/utils/graph-test.d.ts +0 -1
  221. package/test/icc-x-api/utils/graph-test.js +0 -54
  222. package/test/icc-x-api/utils/graph-test.js.map +0 -1
  223. package/test/icc-x-api/utils/lru-temporised-async-cache-test.d.ts +0 -1
  224. package/test/icc-x-api/utils/lru-temporised-async-cache-test.js +0 -364
  225. package/test/icc-x-api/utils/lru-temporised-async-cache-test.js.map +0 -1
  226. package/test/icc-x-api/utils/lzma-benchmark-test.d.ts +0 -1
  227. package/test/icc-x-api/utils/lzma-benchmark-test.js +0 -132
  228. package/test/icc-x-api/utils/lzma-benchmark-test.js.map +0 -1
  229. package/test/icc-x-api/utils/lzma-compat-test.d.ts +0 -1
  230. package/test/icc-x-api/utils/lzma-compat-test.js +0 -218
  231. package/test/icc-x-api/utils/lzma-compat-test.js.map +0 -1
  232. package/test/icc-x-api/utils/mutex-test.d.ts +0 -1
  233. package/test/icc-x-api/utils/mutex-test.js +0 -114
  234. package/test/icc-x-api/utils/mutex-test.js.map +0 -1
  235. package/test/icc-x-api/utils/to-moment-test.d.ts +0 -1
  236. package/test/icc-x-api/utils/to-moment-test.js +0 -110
  237. package/test/icc-x-api/utils/to-moment-test.js.map +0 -1
  238. package/test/support/CSM-185.d.ts +0 -1
  239. package/test/support/CSM-185.js +0 -124
  240. package/test/support/CSM-185.js.map +0 -1
  241. package/test/support/CSM-243.d.ts +0 -1
  242. package/test/support/CSM-243.js +0 -120
  243. package/test/support/CSM-243.js.map +0 -1
  244. package/test/support/CSM-543.d.ts +0 -1
  245. package/test/support/CSM-543.js +0 -164
  246. package/test/support/CSM-543.js.map +0 -1
  247. package/test/support/CSM-729.d.ts +0 -1
  248. package/test/support/CSM-729.js +0 -225
  249. package/test/support/CSM-729.js.map +0 -1
  250. package/test/support/CSM-814.d.ts +0 -1
  251. package/test/support/CSM-814.js +0 -475
  252. package/test/support/CSM-814.js.map +0 -1
  253. package/test/support/CSM-87.d.ts +0 -0
  254. package/test/support/CSM-87.js +0 -21
  255. package/test/support/CSM-87.js.map +0 -1
  256. package/test/support/CSM-93.d.ts +0 -1
  257. package/test/support/CSM-93.js +0 -112
  258. package/test/support/CSM-93.js.map +0 -1
  259. package/test/utils/FakeDataOwnerApi.d.ts +0 -32
  260. package/test/utils/FakeDataOwnerApi.js +0 -136
  261. package/test/utils/FakeDataOwnerApi.js.map +0 -1
  262. package/test/utils/FakeEncryptionKeysManager.d.ts +0 -36
  263. package/test/utils/FakeEncryptionKeysManager.js +0 -97
  264. package/test/utils/FakeEncryptionKeysManager.js.map +0 -1
  265. package/test/utils/FakeExchangeDataApi.d.ts +0 -32
  266. package/test/utils/FakeExchangeDataApi.js +0 -92
  267. package/test/utils/FakeExchangeDataApi.js.map +0 -1
  268. package/test/utils/FakeExchangeDataManager.d.ts +0 -48
  269. package/test/utils/FakeExchangeDataManager.js +0 -82
  270. package/test/utils/FakeExchangeDataManager.js.map +0 -1
  271. package/test/utils/FakeExchangeDataMapManager.d.ts +0 -12
  272. package/test/utils/FakeExchangeDataMapManager.js +0 -38
  273. package/test/utils/FakeExchangeDataMapManager.js.map +0 -1
  274. package/test/utils/FakeGenericApi.d.ts +0 -16
  275. package/test/utils/FakeGenericApi.js +0 -65
  276. package/test/utils/FakeGenericApi.js.map +0 -1
  277. package/test/utils/KeylessCryptoStrategies.d.ts +0 -23
  278. package/test/utils/KeylessCryptoStrategies.js +0 -26
  279. package/test/utils/KeylessCryptoStrategies.js.map +0 -1
  280. package/test/utils/TestApi.d.ts +0 -3
  281. package/test/utils/TestApi.js +0 -30
  282. package/test/utils/TestApi.js.map +0 -1
  283. package/test/utils/TestCollectionUtils.d.ts +0 -1
  284. package/test/utils/TestCollectionUtils.js +0 -310
  285. package/test/utils/TestCollectionUtils.js.map +0 -1
  286. package/test/utils/TestCryptoStrategies.d.ts +0 -42
  287. package/test/utils/TestCryptoStrategies.js +0 -80
  288. package/test/utils/TestCryptoStrategies.js.map +0 -1
  289. package/test/utils/TestStorage.d.ts +0 -23
  290. package/test/utils/TestStorage.js +0 -61
  291. package/test/utils/TestStorage.js.map +0 -1
  292. package/test/utils/roles.d.ts +0 -14
  293. package/test/utils/roles.js +0 -345
  294. package/test/utils/roles.js.map +0 -1
  295. package/test/utils/test_utils.d.ts +0 -87
  296. package/test/utils/test_utils.js +0 -452
  297. 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 {};