@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.
- package/icc-api/api/IccUserApi.d.ts +1 -1
- package/icc-api/api/IccUserApi.js +2 -2
- package/icc-api/api/IccUserApi.js.map +1 -1
- package/icc-api/model/HealthElement.d.ts +5 -0
- package/icc-api/model/HealthElement.js.map +1 -1
- package/icc-api/model/HealthElementQualifiedLink.d.ts +31 -0
- package/icc-api/model/HealthElementQualifiedLink.js +26 -0
- package/icc-api/model/HealthElementQualifiedLink.js.map +1 -0
- package/icc-api/model/models.d.ts +1 -0
- package/icc-api/model/models.js +1 -0
- package/icc-api/model/models.js.map +1 -1
- package/icc-x-api/filters/HealthElementByAssociationIdFilter.d.ts +23 -0
- package/icc-x-api/filters/HealthElementByAssociationIdFilter.js +30 -0
- package/icc-x-api/filters/HealthElementByAssociationIdFilter.js.map +1 -0
- package/icc-x-api/filters/HealthElementByQualifiedLinkFilter.d.ts +24 -0
- package/icc-x-api/filters/HealthElementByQualifiedLinkFilter.js +30 -0
- package/icc-x-api/filters/HealthElementByQualifiedLinkFilter.js.map +1 -0
- package/icc-x-api/filters/filters.d.ts +2 -0
- package/icc-x-api/filters/filters.js +2 -0
- package/icc-x-api/filters/filters.js.map +1 -1
- package/package.json +1 -1
- package/test/benchmarks/lzma-benchmark.spec.d.ts +0 -1
- package/test/benchmarks/lzma-benchmark.spec.js +0 -131
- package/test/benchmarks/lzma-benchmark.spec.js.map +0 -1
- package/test/benchmarks/lzma-compat.spec.d.ts +0 -1
- package/test/benchmarks/lzma-compat.spec.js +0 -187
- package/test/benchmarks/lzma-compat.spec.js.map +0 -1
- package/test/benchmarks/playwright.config.d.ts +0 -2
- package/test/benchmarks/playwright.config.js +0 -18
- package/test/benchmarks/playwright.config.js.map +0 -1
- package/test/icc-api/api/IccAgendaApi.d.ts +0 -1
- package/test/icc-api/api/IccAgendaApi.js +0 -64
- package/test/icc-api/api/IccAgendaApi.js.map +0 -1
- package/test/icc-api/api/IccAnonymousAccessApi.d.ts +0 -1
- package/test/icc-api/api/IccAnonymousAccessApi.js +0 -58
- package/test/icc-api/api/IccAnonymousAccessApi.js.map +0 -1
- package/test/icc-api/api/IccCalendarItemApi.d.ts +0 -1
- package/test/icc-api/api/IccCalendarItemApi.js +0 -67
- package/test/icc-api/api/IccCalendarItemApi.js.map +0 -1
- package/test/icc-api/api/IccCalendarItemTypeApi.d.ts +0 -1
- package/test/icc-api/api/IccCalendarItemTypeApi.js +0 -96
- package/test/icc-api/api/IccCalendarItemTypeApi.js.map +0 -1
- package/test/icc-api/api/IccCodeApi.d.ts +0 -1
- package/test/icc-api/api/IccCodeApi.js +0 -38
- package/test/icc-api/api/IccCodeApi.js.map +0 -1
- package/test/icc-api/api/IccDocumentApi.d.ts +0 -1
- package/test/icc-api/api/IccDocumentApi.js +0 -199
- package/test/icc-api/api/IccDocumentApi.js.map +0 -1
- package/test/icc-api/api/IccGroupApi.d.ts +0 -1
- package/test/icc-api/api/IccGroupApi.js +0 -50
- package/test/icc-api/api/IccGroupApi.js.map +0 -1
- package/test/icc-api/api/IccKeywordApi.d.ts +0 -1
- package/test/icc-api/api/IccKeywordApi.js +0 -64
- package/test/icc-api/api/IccKeywordApi.js.map +0 -1
- package/test/icc-api/api/IccMedicalLocationApi.d.ts +0 -1
- package/test/icc-api/api/IccMedicalLocationApi.js +0 -64
- package/test/icc-api/api/IccMedicalLocationApi.js.map +0 -1
- package/test/icc-api/api/IccPlaceApi.d.ts +0 -1
- package/test/icc-api/api/IccPlaceApi.js +0 -64
- package/test/icc-api/api/IccPlaceApi.js.map +0 -1
- package/test/icc-api/api/IccRecoveryDataApi.d.ts +0 -1
- package/test/icc-api/api/IccRecoveryDataApi.js +0 -95
- package/test/icc-api/api/IccRecoveryDataApi.js.map +0 -1
- package/test/icc-api/api/IccRoleApi.d.ts +0 -1
- package/test/icc-api/api/IccRoleApi.js +0 -34
- package/test/icc-api/api/IccRoleApi.js.map +0 -1
- package/test/icc-api/api/IccUserApi.d.ts +0 -1
- package/test/icc-api/api/IccUserApi.js +0 -96
- package/test/icc-api/api/IccUserApi.js.map +0 -1
- package/test/icc-api/e2e/IccCalendarItemApi.d.ts +0 -1
- package/test/icc-api/e2e/IccCalendarItemApi.js +0 -46
- package/test/icc-api/e2e/IccCalendarItemApi.js.map +0 -1
- package/test/icc-api/model/modelHelpersTest.d.ts +0 -1
- package/test/icc-api/model/modelHelpersTest.js +0 -45
- package/test/icc-api/model/modelHelpersTest.js.map +0 -1
- package/test/icc-x-api/auth/group-switch-test.d.ts +0 -1
- package/test/icc-x-api/auth/group-switch-test.js +0 -81
- package/test/icc-x-api/auth/group-switch-test.js.map +0 -1
- package/test/icc-x-api/auth/jwt-concurrency-test.d.ts +0 -2
- package/test/icc-x-api/auth/jwt-concurrency-test.js +0 -112
- package/test/icc-x-api/auth/jwt-concurrency-test.js.map +0 -1
- package/test/icc-x-api/auth/jwt-provider-test.d.ts +0 -1
- package/test/icc-x-api/auth/jwt-provider-test.js +0 -197
- package/test/icc-x-api/auth/jwt-provider-test.js.map +0 -1
- package/test/icc-x-api/auth/smart-auth-provider-test.d.ts +0 -1
- package/test/icc-x-api/auth/smart-auth-provider-test.js +0 -224
- package/test/icc-x-api/auth/smart-auth-provider-test.js.map +0 -1
- package/test/icc-x-api/autofix-anonymity-test.d.ts +0 -1
- package/test/icc-x-api/autofix-anonymity-test.js +0 -122
- package/test/icc-x-api/autofix-anonymity-test.js.map +0 -1
- package/test/icc-x-api/confidential-entities-test.d.ts +0 -1
- package/test/icc-x-api/confidential-entities-test.js +0 -168
- package/test/icc-x-api/confidential-entities-test.js.map +0 -1
- package/test/icc-x-api/crud/comprehensive-crud-test.d.ts +0 -1
- package/test/icc-x-api/crud/comprehensive-crud-test.js +0 -276
- package/test/icc-x-api/crud/comprehensive-crud-test.js.map +0 -1
- package/test/icc-x-api/crud/entities-crud-test-interface.d.ts +0 -16
- package/test/icc-x-api/crud/entities-crud-test-interface.js +0 -407
- package/test/icc-x-api/crud/entities-crud-test-interface.js.map +0 -1
- package/test/icc-x-api/crypto/anonymous-delegations-test.d.ts +0 -1
- package/test/icc-x-api/crypto/anonymous-delegations-test.js +0 -587
- package/test/icc-x-api/crypto/anonymous-delegations-test.js.map +0 -1
- package/test/icc-x-api/crypto/concurrency.d.ts +0 -1
- package/test/icc-x-api/crypto/concurrency.js +0 -35
- package/test/icc-x-api/crypto/concurrency.js.map +0 -1
- package/test/icc-x-api/crypto/crypto-utils.d.ts +0 -1
- package/test/icc-x-api/crypto/crypto-utils.js +0 -79
- package/test/icc-x-api/crypto/crypto-utils.js.map +0 -1
- package/test/icc-x-api/crypto/cryptoTest.d.ts +0 -2
- package/test/icc-x-api/crypto/cryptoTest.js +0 -402
- package/test/icc-x-api/crypto/cryptoTest.js.map +0 -1
- package/test/icc-x-api/crypto/delegate-ci-to-patient-with-missing-keys-test.d.ts +0 -1
- package/test/icc-x-api/crypto/delegate-ci-to-patient-with-missing-keys-test.js +0 -166
- package/test/icc-x-api/crypto/delegate-ci-to-patient-with-missing-keys-test.js.map +0 -1
- package/test/icc-x-api/crypto/exchange-data-manager-test.d.ts +0 -1
- package/test/icc-x-api/crypto/exchange-data-manager-test.js +0 -674
- package/test/icc-x-api/crypto/exchange-data-manager-test.js.map +0 -1
- package/test/icc-x-api/crypto/full-crypto-test.d.ts +0 -1
- package/test/icc-x-api/crypto/full-crypto-test.js +0 -454
- package/test/icc-x-api/crypto/full-crypto-test.js.map +0 -1
- package/test/icc-x-api/crypto/legacy-metadata-migration-test.d.ts +0 -1
- package/test/icc-x-api/crypto/legacy-metadata-migration-test.js +0 -379
- package/test/icc-x-api/crypto/legacy-metadata-migration-test.js.map +0 -1
- package/test/icc-x-api/crypto/secure-delegations-manager-test.d.ts +0 -1
- package/test/icc-x-api/crypto/secure-delegations-manager-test.js +0 -278
- package/test/icc-x-api/crypto/secure-delegations-manager-test.js.map +0 -1
- package/test/icc-x-api/crypto/shamir.d.ts +0 -2
- package/test/icc-x-api/crypto/shamir.js +0 -167
- package/test/icc-x-api/crypto/shamir.js.map +0 -1
- package/test/icc-x-api/crypto/share-deduplication-test.d.ts +0 -1
- package/test/icc-x-api/crypto/share-deduplication-test.js +0 -250
- package/test/icc-x-api/crypto/share-deduplication-test.js.map +0 -1
- package/test/icc-x-api/crypto/share-to-newly-created-patient-from-hcp.d.ts +0 -1
- package/test/icc-x-api/crypto/share-to-newly-created-patient-from-hcp.js +0 -71
- package/test/icc-x-api/crypto/share-to-newly-created-patient-from-hcp.js.map +0 -1
- package/test/icc-x-api/crypto/soft-deleted-data-owners.d.ts +0 -2
- package/test/icc-x-api/crypto/soft-deleted-data-owners.js +0 -113
- package/test/icc-x-api/crypto/soft-deleted-data-owners.js.map +0 -1
- package/test/icc-x-api/crypto/user-encryption-keys-manager-test.d.ts +0 -1
- package/test/icc-x-api/crypto/user-encryption-keys-manager-test.js +0 -246
- package/test/icc-x-api/crypto/user-encryption-keys-manager-test.js.map +0 -1
- package/test/icc-x-api/entity-with-attachments-api-test.d.ts +0 -1
- package/test/icc-x-api/entity-with-attachments-api-test.js +0 -142
- package/test/icc-x-api/entity-with-attachments-api-test.js.map +0 -1
- package/test/icc-x-api/filters/filters.d.ts +0 -1
- package/test/icc-x-api/filters/filters.js +0 -49
- package/test/icc-x-api/filters/filters.js.map +0 -1
- package/test/icc-x-api/filters/healthelement.d.ts +0 -1
- package/test/icc-x-api/filters/healthelement.js +0 -333
- package/test/icc-x-api/filters/healthelement.js.map +0 -1
- package/test/icc-x-api/icc-accesslog-x-api.d.ts +0 -1
- package/test/icc-x-api/icc-accesslog-x-api.js +0 -106
- package/test/icc-x-api/icc-accesslog-x-api.js.map +0 -1
- package/test/icc-x-api/icc-application-settings-x-api.d.ts +0 -1
- package/test/icc-x-api/icc-application-settings-x-api.js +0 -91
- package/test/icc-x-api/icc-application-settings-x-api.js.map +0 -1
- package/test/icc-x-api/icc-auth-api.d.ts +0 -1
- package/test/icc-x-api/icc-auth-api.js +0 -47
- package/test/icc-x-api/icc-auth-api.js.map +0 -1
- package/test/icc-x-api/icc-calendar-item-x-api.d.ts +0 -1
- package/test/icc-x-api/icc-calendar-item-x-api.js +0 -150
- package/test/icc-x-api/icc-calendar-item-x-api.js.map +0 -1
- package/test/icc-x-api/icc-code-x-api-test.d.ts +0 -1
- package/test/icc-x-api/icc-code-x-api-test.js +0 -74
- package/test/icc-x-api/icc-code-x-api-test.js.map +0 -1
- package/test/icc-x-api/icc-contact-x-api.d.ts +0 -1
- package/test/icc-x-api/icc-contact-x-api.js +0 -355
- package/test/icc-x-api/icc-contact-x-api.js.map +0 -1
- package/test/icc-x-api/icc-document-x-api.d.ts +0 -1
- package/test/icc-x-api/icc-document-x-api.js +0 -76
- package/test/icc-x-api/icc-document-x-api.js.map +0 -1
- package/test/icc-x-api/icc-form-x-api.d.ts +0 -1
- package/test/icc-x-api/icc-form-x-api.js +0 -413
- package/test/icc-x-api/icc-form-x-api.js.map +0 -1
- package/test/icc-x-api/icc-hcparty-x-api-test.d.ts +0 -1
- package/test/icc-x-api/icc-hcparty-x-api-test.js +0 -43
- package/test/icc-x-api/icc-hcparty-x-api-test.js.map +0 -1
- package/test/icc-x-api/icc-helement-x-api-test.d.ts +0 -1
- package/test/icc-x-api/icc-helement-x-api-test.js +0 -155
- package/test/icc-x-api/icc-helement-x-api-test.js.map +0 -1
- package/test/icc-x-api/icc-invoice-x-api.d.ts +0 -1
- package/test/icc-x-api/icc-invoice-x-api.js +0 -99
- package/test/icc-x-api/icc-invoice-x-api.js.map +0 -1
- package/test/icc-x-api/icc-maintenance-task-x-api-test.d.ts +0 -1
- package/test/icc-x-api/icc-maintenance-task-x-api-test.js +0 -222
- package/test/icc-x-api/icc-maintenance-task-x-api-test.js.map +0 -1
- package/test/icc-x-api/icc-message-x-api.d.ts +0 -1
- package/test/icc-x-api/icc-message-x-api.js +0 -54
- package/test/icc-x-api/icc-message-x-api.js.map +0 -1
- package/test/icc-x-api/icc-patient-x-api-test.d.ts +0 -1
- package/test/icc-x-api/icc-patient-x-api-test.js +0 -209
- package/test/icc-x-api/icc-patient-x-api-test.js.map +0 -1
- package/test/icc-x-api/icc-recovery-x-api.d.ts +0 -1
- package/test/icc-x-api/icc-recovery-x-api.js +0 -175
- package/test/icc-x-api/icc-recovery-x-api.js.map +0 -1
- package/test/icc-x-api/icc-topic-x-api.d.ts +0 -1
- package/test/icc-x-api/icc-topic-x-api.js +0 -269
- package/test/icc-x-api/icc-topic-x-api.js.map +0 -1
- package/test/icc-x-api/icc-user-x-api-test.d.ts +0 -1
- package/test/icc-x-api/icc-user-x-api-test.js +0 -99
- package/test/icc-x-api/icc-user-x-api-test.js.map +0 -1
- package/test/icc-x-api/keyless-api.d.ts +0 -1
- package/test/icc-x-api/keyless-api.js +0 -125
- package/test/icc-x-api/keyless-api.js.map +0 -1
- package/test/icc-x-api/patient-user.d.ts +0 -2
- package/test/icc-x-api/patient-user.js +0 -103
- package/test/icc-x-api/patient-user.js.map +0 -1
- package/test/icc-x-api/storage/storage.d.ts +0 -1
- package/test/icc-x-api/storage/storage.js +0 -48
- package/test/icc-x-api/storage/storage.js.map +0 -1
- package/test/icc-x-api/test-api-no-parent.d.ts +0 -1
- package/test/icc-x-api/test-api-no-parent.js +0 -79
- package/test/icc-x-api/test-api-no-parent.js.map +0 -1
- package/test/icc-x-api/test-legacy-data-support.d.ts +0 -1
- package/test/icc-x-api/test-legacy-data-support.js +0 -375
- package/test/icc-x-api/test-legacy-data-support.js.map +0 -1
- package/test/icc-x-api/utils/date-encode-test.d.ts +0 -1
- package/test/icc-x-api/utils/date-encode-test.js +0 -150
- package/test/icc-x-api/utils/date-encode-test.js.map +0 -1
- package/test/icc-x-api/utils/graph-test.d.ts +0 -1
- package/test/icc-x-api/utils/graph-test.js +0 -54
- package/test/icc-x-api/utils/graph-test.js.map +0 -1
- package/test/icc-x-api/utils/lru-temporised-async-cache-test.d.ts +0 -1
- package/test/icc-x-api/utils/lru-temporised-async-cache-test.js +0 -364
- package/test/icc-x-api/utils/lru-temporised-async-cache-test.js.map +0 -1
- package/test/icc-x-api/utils/lzma-benchmark-test.d.ts +0 -1
- package/test/icc-x-api/utils/lzma-benchmark-test.js +0 -132
- package/test/icc-x-api/utils/lzma-benchmark-test.js.map +0 -1
- package/test/icc-x-api/utils/lzma-compat-test.d.ts +0 -1
- package/test/icc-x-api/utils/lzma-compat-test.js +0 -218
- package/test/icc-x-api/utils/lzma-compat-test.js.map +0 -1
- package/test/icc-x-api/utils/mutex-test.d.ts +0 -1
- package/test/icc-x-api/utils/mutex-test.js +0 -114
- package/test/icc-x-api/utils/mutex-test.js.map +0 -1
- package/test/icc-x-api/utils/to-moment-test.d.ts +0 -1
- package/test/icc-x-api/utils/to-moment-test.js +0 -110
- package/test/icc-x-api/utils/to-moment-test.js.map +0 -1
- package/test/support/CSM-185.d.ts +0 -1
- package/test/support/CSM-185.js +0 -124
- package/test/support/CSM-185.js.map +0 -1
- package/test/support/CSM-243.d.ts +0 -1
- package/test/support/CSM-243.js +0 -120
- package/test/support/CSM-243.js.map +0 -1
- package/test/support/CSM-543.d.ts +0 -1
- package/test/support/CSM-543.js +0 -164
- package/test/support/CSM-543.js.map +0 -1
- package/test/support/CSM-729.d.ts +0 -1
- package/test/support/CSM-729.js +0 -225
- package/test/support/CSM-729.js.map +0 -1
- package/test/support/CSM-814.d.ts +0 -1
- package/test/support/CSM-814.js +0 -475
- package/test/support/CSM-814.js.map +0 -1
- package/test/support/CSM-87.d.ts +0 -0
- package/test/support/CSM-87.js +0 -21
- package/test/support/CSM-87.js.map +0 -1
- package/test/support/CSM-93.d.ts +0 -1
- package/test/support/CSM-93.js +0 -112
- package/test/support/CSM-93.js.map +0 -1
- package/test/utils/FakeDataOwnerApi.d.ts +0 -32
- package/test/utils/FakeDataOwnerApi.js +0 -136
- package/test/utils/FakeDataOwnerApi.js.map +0 -1
- package/test/utils/FakeEncryptionKeysManager.d.ts +0 -36
- package/test/utils/FakeEncryptionKeysManager.js +0 -97
- package/test/utils/FakeEncryptionKeysManager.js.map +0 -1
- package/test/utils/FakeExchangeDataApi.d.ts +0 -32
- package/test/utils/FakeExchangeDataApi.js +0 -92
- package/test/utils/FakeExchangeDataApi.js.map +0 -1
- package/test/utils/FakeExchangeDataManager.d.ts +0 -48
- package/test/utils/FakeExchangeDataManager.js +0 -82
- package/test/utils/FakeExchangeDataManager.js.map +0 -1
- package/test/utils/FakeExchangeDataMapManager.d.ts +0 -12
- package/test/utils/FakeExchangeDataMapManager.js +0 -38
- package/test/utils/FakeExchangeDataMapManager.js.map +0 -1
- package/test/utils/FakeGenericApi.d.ts +0 -16
- package/test/utils/FakeGenericApi.js +0 -65
- package/test/utils/FakeGenericApi.js.map +0 -1
- package/test/utils/KeylessCryptoStrategies.d.ts +0 -23
- package/test/utils/KeylessCryptoStrategies.js +0 -26
- package/test/utils/KeylessCryptoStrategies.js.map +0 -1
- package/test/utils/TestApi.d.ts +0 -3
- package/test/utils/TestApi.js +0 -30
- package/test/utils/TestApi.js.map +0 -1
- package/test/utils/TestCollectionUtils.d.ts +0 -1
- package/test/utils/TestCollectionUtils.js +0 -310
- package/test/utils/TestCollectionUtils.js.map +0 -1
- package/test/utils/TestCryptoStrategies.d.ts +0 -42
- package/test/utils/TestCryptoStrategies.js +0 -80
- package/test/utils/TestCryptoStrategies.js.map +0 -1
- package/test/utils/TestStorage.d.ts +0 -23
- package/test/utils/TestStorage.js +0 -61
- package/test/utils/TestStorage.js.map +0 -1
- package/test/utils/roles.d.ts +0 -14
- package/test/utils/roles.js +0 -345
- package/test/utils/roles.js.map +0 -1
- package/test/utils/test_utils.d.ts +0 -87
- package/test/utils/test_utils.js +0 -452
- 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 {};
|