@icure/api 8.11.0 → 8.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 +11 -0
- package/icc-api/model/HealthElement.js.map +1 -1
- package/icc-api/model/HealthElementAsserter.d.ts +33 -0
- package/icc-api/model/HealthElementAsserter.js +28 -0
- package/icc-api/model/HealthElementAsserter.js.map +1 -0
- 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 +2 -0
- package/icc-api/model/models.js +2 -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/icc-x-api/index.js +1 -1
- package/icc-x-api/index.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,131 +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 test_1 = require("@playwright/test");
|
|
13
|
-
const http = require("http");
|
|
14
|
-
const fs = require("fs");
|
|
15
|
-
const path = require("path");
|
|
16
|
-
const PROJECT_ROOT = path.resolve(__dirname, '..', '..');
|
|
17
|
-
const MIME_TYPES = {
|
|
18
|
-
'.html': 'text/html',
|
|
19
|
-
'.js': 'application/javascript',
|
|
20
|
-
'.wasm': 'application/wasm',
|
|
21
|
-
'.css': 'text/css',
|
|
22
|
-
};
|
|
23
|
-
function startServer() {
|
|
24
|
-
return new Promise((resolve) => {
|
|
25
|
-
const server = http.createServer((req, res) => {
|
|
26
|
-
var _a;
|
|
27
|
-
const urlPath = ((_a = req.url) === null || _a === void 0 ? void 0 : _a.split('?')[0]) || '/';
|
|
28
|
-
const filePath = path.join(PROJECT_ROOT, urlPath);
|
|
29
|
-
if (!fs.existsSync(filePath) || fs.statSync(filePath).isDirectory()) {
|
|
30
|
-
res.writeHead(404);
|
|
31
|
-
res.end('Not found');
|
|
32
|
-
return;
|
|
33
|
-
}
|
|
34
|
-
const ext = path.extname(filePath);
|
|
35
|
-
const contentType = MIME_TYPES[ext] || 'application/octet-stream';
|
|
36
|
-
res.writeHead(200, {
|
|
37
|
-
'Content-Type': contentType,
|
|
38
|
-
'Cross-Origin-Opener-Policy': 'same-origin',
|
|
39
|
-
'Cross-Origin-Embedder-Policy': 'require-corp',
|
|
40
|
-
});
|
|
41
|
-
fs.createReadStream(filePath).pipe(res);
|
|
42
|
-
});
|
|
43
|
-
server.listen(0, () => {
|
|
44
|
-
const addr = server.address();
|
|
45
|
-
const port = typeof addr === 'object' && addr ? addr.port : 0;
|
|
46
|
-
resolve({ server, port });
|
|
47
|
-
});
|
|
48
|
-
});
|
|
49
|
-
}
|
|
50
|
-
const IMPLS = ['jsInline', 'jsWorker', 'wasm'];
|
|
51
|
-
const IMPL_LABELS = {
|
|
52
|
-
jsInline: 'JS Inline (LZMA1)',
|
|
53
|
-
jsWorker: 'JS Worker (LZMA1)',
|
|
54
|
-
wasm: 'WASM (LZMA2/XZ)',
|
|
55
|
-
};
|
|
56
|
-
function fmtMs(ms) {
|
|
57
|
-
if (ms >= 1000)
|
|
58
|
-
return (ms / 1000).toFixed(2) + ' s';
|
|
59
|
-
return ms.toFixed(2) + ' ms';
|
|
60
|
-
}
|
|
61
|
-
function pad(s, w) {
|
|
62
|
-
return s.length >= w ? s : ' '.repeat(w - s.length) + s;
|
|
63
|
-
}
|
|
64
|
-
const WORKER_FILES_DIR = path.join(__dirname, 'worker-files');
|
|
65
|
-
(0, test_1.test)('LZMA benchmark: JS Inline vs JS Worker vs WASM', (_a) => __awaiter(void 0, [_a], void 0, function* ({ page }) {
|
|
66
|
-
test_1.test.setTimeout(3600000); // 60 minutes for 128MB payloads
|
|
67
|
-
const { server, port } = yield startServer();
|
|
68
|
-
try {
|
|
69
|
-
yield page.goto(`http://localhost:${port}/test/benchmarks/lzma-benchmark.html`);
|
|
70
|
-
yield page.waitForFunction(() => window.__benchmarkResults != null, null, { timeout: 3300000 });
|
|
71
|
-
const results = yield page.evaluate(() => window.__benchmarkResults);
|
|
72
|
-
// Save test files to worker-files directory (skip large payloads with no exported files)
|
|
73
|
-
fs.mkdirSync(WORKER_FILES_DIR, { recursive: true });
|
|
74
|
-
for (const r of results) {
|
|
75
|
-
if (!r.files)
|
|
76
|
-
continue;
|
|
77
|
-
fs.writeFileSync(path.join(WORKER_FILES_DIR, `${r.tag}.bin`), Buffer.from(r.files.reference, 'base64'));
|
|
78
|
-
fs.writeFileSync(path.join(WORKER_FILES_DIR, `${r.tag}.lzma`), Buffer.from(r.files.lzmaJs, 'base64'));
|
|
79
|
-
fs.writeFileSync(path.join(WORKER_FILES_DIR, `${r.tag}.xz`), Buffer.from(r.files.lzmaWasm, 'base64'));
|
|
80
|
-
console.log(`Saved ${r.tag}.bin, ${r.tag}.lzma, ${r.tag}.xz to ${WORKER_FILES_DIR}`);
|
|
81
|
-
}
|
|
82
|
-
// Print results
|
|
83
|
-
const W = 130;
|
|
84
|
-
console.log('\n' + '='.repeat(W));
|
|
85
|
-
console.log('LZMA Benchmark: JS Inline vs JS Worker vs WASM');
|
|
86
|
-
console.log('='.repeat(W));
|
|
87
|
-
for (const r of results) {
|
|
88
|
-
console.log(`\n--- ${r.size} (${r.originalBytes.toLocaleString()} bytes)${r.skipJs ? ' [WASM only]' : ''} ---\n`);
|
|
89
|
-
const activeImpls = r.skipJs ? ['wasm'] : IMPLS;
|
|
90
|
-
for (const op of ['compress', 'decompress']) {
|
|
91
|
-
console.log(` ${op.toUpperCase()}:`);
|
|
92
|
-
console.log(` ${'Implementation'.padEnd(22)} ${pad('Median', 12)} ${pad('Mean', 12)} ${pad('Min', 12)} ${pad('Max', 12)} ${pad('P95', 12)} ${pad('Size', 10)} ${pad('Ratio', 8)} ${pad('OK', 4)}`);
|
|
93
|
-
console.log(' ' + '-'.repeat(W - 4));
|
|
94
|
-
const medians = activeImpls.map((impl) => r[impl][op].median);
|
|
95
|
-
const fastestMedian = Math.min(...medians);
|
|
96
|
-
for (const impl of activeImpls) {
|
|
97
|
-
const s = r[impl][op];
|
|
98
|
-
const isFastest = s.median === fastestMedian;
|
|
99
|
-
const marker = isFastest ? ' *' : ' ';
|
|
100
|
-
const compSize = op === 'compress' ? String(r[impl].compressedSize) : '-';
|
|
101
|
-
const ratio = op === 'compress' ? r[impl].ratio + '%' : '-';
|
|
102
|
-
console.log(` ${marker}${IMPL_LABELS[impl].padEnd(22)} ${pad(fmtMs(s.median), 12)} ${pad(fmtMs(s.mean), 12)} ${pad(fmtMs(s.min), 12)} ${pad(fmtMs(s.max), 12)} ${pad(fmtMs(s.p95), 12)} ${pad(compSize, 10)} ${pad(ratio, 8)} ${pad(r[impl].correct ? 'OK' : 'FAIL', 4)}`);
|
|
103
|
-
}
|
|
104
|
-
if (!r.skipJs) {
|
|
105
|
-
const jsInlineMs = r.jsInline[op].median;
|
|
106
|
-
const jsWorkerMs = r.jsWorker[op].median;
|
|
107
|
-
const wasmMs = r.wasm[op].median;
|
|
108
|
-
console.log('');
|
|
109
|
-
console.log(` Speedup vs JS Inline: Worker ${(jsInlineMs / jsWorkerMs).toFixed(1)}x | WASM ${(jsInlineMs / wasmMs).toFixed(1)}x`);
|
|
110
|
-
console.log(` Speedup vs JS Worker: WASM ${(jsWorkerMs / wasmMs).toFixed(1)}x`);
|
|
111
|
-
}
|
|
112
|
-
console.log('');
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
console.log('='.repeat(W));
|
|
116
|
-
console.log('* = fastest for that operation/size');
|
|
117
|
-
console.log('='.repeat(W));
|
|
118
|
-
// Assertions
|
|
119
|
-
for (const r of results) {
|
|
120
|
-
if (!r.skipJs) {
|
|
121
|
-
(0, test_1.expect)(r.jsInline.correct).toBe(true);
|
|
122
|
-
(0, test_1.expect)(r.jsWorker.correct).toBe(true);
|
|
123
|
-
}
|
|
124
|
-
(0, test_1.expect)(r.wasm.correct).toBe(true);
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
finally {
|
|
128
|
-
server.close();
|
|
129
|
-
}
|
|
130
|
-
}));
|
|
131
|
-
//# sourceMappingURL=lzma-benchmark.spec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"lzma-benchmark.spec.js","sourceRoot":"","sources":["../../../test/benchmarks/lzma-benchmark.spec.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,2CAA+C;AAC/C,6BAA4B;AAC5B,yBAAwB;AACxB,6BAA4B;AAE5B,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA;AAExD,MAAM,UAAU,GAA2B;IACzC,OAAO,EAAE,WAAW;IACpB,KAAK,EAAE,wBAAwB;IAC/B,OAAO,EAAE,kBAAkB;IAC3B,MAAM,EAAE,UAAU;CACnB,CAAA;AAED,SAAS,WAAW;IAClB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;;YAC5C,MAAM,OAAO,GAAG,CAAA,MAAA,GAAG,CAAC,GAAG,0CAAE,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,KAAI,GAAG,CAAA;YAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,CAAA;YAEjD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;gBACpE,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA;gBAClB,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;gBACpB,OAAM;YACR,CAAC;YAED,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;YAClC,MAAM,WAAW,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,0BAA0B,CAAA;YAEjE,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE;gBACjB,cAAc,EAAE,WAAW;gBAC3B,4BAA4B,EAAE,aAAa;gBAC3C,8BAA8B,EAAE,cAAc;aAC/C,CAAC,CAAA;YACF,EAAE,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QACzC,CAAC,CAAC,CAAA;QAEF,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE;YACpB,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,EAAE,CAAA;YAC7B,MAAM,IAAI,GAAG,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;YAC7D,OAAO,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAA;QAC3B,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC;AAiCD,MAAM,KAAK,GAAG,CAAC,UAAU,EAAE,UAAU,EAAE,MAAM,CAAU,CAAA;AACvD,MAAM,WAAW,GAA2B;IAC1C,QAAQ,EAAE,mBAAmB;IAC7B,QAAQ,EAAE,mBAAmB;IAC7B,IAAI,EAAE,iBAAiB;CACxB,CAAA;AAED,SAAS,KAAK,CAAC,EAAU;IACvB,IAAI,EAAE,IAAI,IAAI;QAAE,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAA;IACpD,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK,CAAA;AAC9B,CAAC;AAED,SAAS,GAAG,CAAC,CAAS,EAAE,CAAS;IAC/B,OAAO,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;AACzD,CAAC;AAED,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAA;AAE7D,IAAA,WAAI,EAAC,gDAAgD,EAAE,KAAiB,EAAE,4CAAZ,EAAE,IAAI,EAAE;IACpE,WAAI,CAAC,UAAU,CAAC,OAAS,CAAC,CAAA,CAAC,gCAAgC;IAE3D,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,WAAW,EAAE,CAAA;IAE5C,IAAI,CAAC;QACH,MAAM,IAAI,CAAC,IAAI,CAAC,oBAAoB,IAAI,sCAAsC,CAAC,CAAA;QAE/E,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,CAAE,MAAc,CAAC,kBAAkB,IAAI,IAAI,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,OAAS,EAAE,CAAC,CAAA;QAE1G,MAAM,OAAO,GAAsB,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAE,MAAc,CAAC,kBAAkB,CAAC,CAAA;QAEhG,yFAAyF;QACzF,EAAE,CAAC,SAAS,CAAC,gBAAgB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QACnD,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACxB,IAAI,CAAC,CAAC,CAAC,KAAK;gBAAE,SAAQ;YACtB,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAA;YACvG,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAA;YACrG,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAA;YACrG,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,GAAG,UAAU,gBAAgB,EAAE,CAAC,CAAA;QACtF,CAAC;QAED,gBAAgB;QAChB,MAAM,CAAC,GAAG,GAAG,CAAA;QACb,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;QACjC,OAAO,CAAC,GAAG,CAAC,gDAAgD,CAAC,CAAA;QAC7D,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;QAE1B,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACxB,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,aAAa,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAA;YAEjH,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAE,CAAC,MAAM,CAAW,CAAC,CAAC,CAAC,KAAK,CAAA;YAE1D,KAAK,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,YAAY,CAAU,EAAE,CAAC;gBACrD,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,WAAW,EAAE,GAAG,CAAC,CAAA;gBACrC,OAAO,CAAC,GAAG,CACT,OAAO,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CACzL,CAAA;gBACD,OAAO,CAAC,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;gBAEvC,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAA;gBAC7D,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,CAAA;gBAE1C,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;oBAC/B,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAA;oBACrB,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,KAAK,aAAa,CAAA;oBAC5C,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAA;oBACtC,MAAM,QAAQ,GAAG,EAAE,KAAK,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,GAAG,CAAA;oBACzE,MAAM,KAAK,GAAG,EAAE,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAA;oBAC3D,OAAO,CAAC,GAAG,CACT,KAAK,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAC/P,CAAA;gBACH,CAAC;gBAED,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;oBACd,MAAM,UAAU,GAAG,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,MAAM,CAAA;oBACxC,MAAM,UAAU,GAAG,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,MAAM,CAAA;oBACxC,MAAM,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,MAAM,CAAA;oBAEhC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;oBACf,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,UAAU,GAAG,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,UAAU,GAAG,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;oBACrI,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,UAAU,GAAG,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;gBACrF,CAAC;gBACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;YACjB,CAAC;QACH,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;QAC1B,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAA;QAClD,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;QAE1B,aAAa;QACb,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACxB,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;gBACd,IAAA,aAAM,EAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;gBACrC,IAAA,aAAM,EAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACvC,CAAC;YACD,IAAA,aAAM,EAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACnC,CAAC;IACH,CAAC;YAAS,CAAC;QACT,MAAM,CAAC,KAAK,EAAE,CAAA;IAChB,CAAC;AACH,CAAC,CAAA,CAAC,CAAA","sourcesContent":["import { test, expect } from '@playwright/test'\nimport * as http from 'http'\nimport * as fs from 'fs'\nimport * as path from 'path'\n\nconst PROJECT_ROOT = path.resolve(__dirname, '..', '..')\n\nconst MIME_TYPES: Record<string, string> = {\n '.html': 'text/html',\n '.js': 'application/javascript',\n '.wasm': 'application/wasm',\n '.css': 'text/css',\n}\n\nfunction startServer(): Promise<{ server: http.Server; port: number }> {\n return new Promise((resolve) => {\n const server = http.createServer((req, res) => {\n const urlPath = req.url?.split('?')[0] || '/'\n const filePath = path.join(PROJECT_ROOT, urlPath)\n\n if (!fs.existsSync(filePath) || fs.statSync(filePath).isDirectory()) {\n res.writeHead(404)\n res.end('Not found')\n return\n }\n\n const ext = path.extname(filePath)\n const contentType = MIME_TYPES[ext] || 'application/octet-stream'\n\n res.writeHead(200, {\n 'Content-Type': contentType,\n 'Cross-Origin-Opener-Policy': 'same-origin',\n 'Cross-Origin-Embedder-Policy': 'require-corp',\n })\n fs.createReadStream(filePath).pipe(res)\n })\n\n server.listen(0, () => {\n const addr = server.address()\n const port = typeof addr === 'object' && addr ? addr.port : 0\n resolve({ server, port })\n })\n })\n}\n\ninterface Stats {\n median: number\n mean: number\n min: number\n max: number\n p95: number\n}\n\ninterface ImplResult {\n compress: Stats\n decompress: Stats\n compressedSize: number\n ratio: string\n correct: boolean\n}\n\ninterface BenchmarkResult {\n size: string\n tag: string\n skipJs: boolean\n originalBytes: number\n files: {\n reference: string // base64\n lzmaJs: string // base64\n lzmaWasm: string // base64\n } | null\n jsInline: ImplResult\n jsWorker: ImplResult\n wasm: ImplResult\n}\n\nconst IMPLS = ['jsInline', 'jsWorker', 'wasm'] as const\nconst IMPL_LABELS: Record<string, string> = {\n jsInline: 'JS Inline (LZMA1)',\n jsWorker: 'JS Worker (LZMA1)',\n wasm: 'WASM (LZMA2/XZ)',\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 WORKER_FILES_DIR = path.join(__dirname, 'worker-files')\n\ntest('LZMA benchmark: JS Inline vs JS Worker vs WASM', async ({ page }) => {\n test.setTimeout(3_600_000) // 60 minutes for 128MB payloads\n\n const { server, port } = await startServer()\n\n try {\n await page.goto(`http://localhost:${port}/test/benchmarks/lzma-benchmark.html`)\n\n await page.waitForFunction(() => (window as any).__benchmarkResults != null, null, { timeout: 3_300_000 })\n\n const results: BenchmarkResult[] = await page.evaluate(() => (window as any).__benchmarkResults)\n\n // Save test files to worker-files directory (skip large payloads with no exported files)\n fs.mkdirSync(WORKER_FILES_DIR, { recursive: true })\n for (const r of results) {\n if (!r.files) continue\n fs.writeFileSync(path.join(WORKER_FILES_DIR, `${r.tag}.bin`), Buffer.from(r.files.reference, 'base64'))\n fs.writeFileSync(path.join(WORKER_FILES_DIR, `${r.tag}.lzma`), Buffer.from(r.files.lzmaJs, 'base64'))\n fs.writeFileSync(path.join(WORKER_FILES_DIR, `${r.tag}.xz`), Buffer.from(r.files.lzmaWasm, 'base64'))\n console.log(`Saved ${r.tag}.bin, ${r.tag}.lzma, ${r.tag}.xz to ${WORKER_FILES_DIR}`)\n }\n\n // Print results\n const W = 130\n console.log('\\n' + '='.repeat(W))\n console.log('LZMA Benchmark: JS Inline vs JS Worker vs WASM')\n console.log('='.repeat(W))\n\n for (const r of results) {\n console.log(`\\n--- ${r.size} (${r.originalBytes.toLocaleString()} bytes)${r.skipJs ? ' [WASM only]' : ''} ---\\n`)\n\n const activeImpls = r.skipJs ? (['wasm'] as const) : IMPLS\n\n for (const op of ['compress', 'decompress'] as const) {\n console.log(` ${op.toUpperCase()}:`)\n console.log(\n ` ${'Implementation'.padEnd(22)} ${pad('Median', 12)} ${pad('Mean', 12)} ${pad('Min', 12)} ${pad('Max', 12)} ${pad('P95', 12)} ${pad('Size', 10)} ${pad('Ratio', 8)} ${pad('OK', 4)}`\n )\n console.log(' ' + '-'.repeat(W - 4))\n\n const medians = activeImpls.map((impl) => r[impl][op].median)\n const fastestMedian = Math.min(...medians)\n\n for (const impl of activeImpls) {\n const s = r[impl][op]\n const isFastest = s.median === fastestMedian\n const marker = isFastest ? ' *' : ' '\n const compSize = op === 'compress' ? String(r[impl].compressedSize) : '-'\n const ratio = op === 'compress' ? r[impl].ratio + '%' : '-'\n console.log(\n ` ${marker}${IMPL_LABELS[impl].padEnd(22)} ${pad(fmtMs(s.median), 12)} ${pad(fmtMs(s.mean), 12)} ${pad(fmtMs(s.min), 12)} ${pad(fmtMs(s.max), 12)} ${pad(fmtMs(s.p95), 12)} ${pad(compSize, 10)} ${pad(ratio, 8)} ${pad(r[impl].correct ? 'OK' : 'FAIL', 4)}`\n )\n }\n\n if (!r.skipJs) {\n const jsInlineMs = r.jsInline[op].median\n const jsWorkerMs = r.jsWorker[op].median\n const wasmMs = r.wasm[op].median\n\n console.log('')\n console.log(` Speedup vs JS Inline: Worker ${(jsInlineMs / jsWorkerMs).toFixed(1)}x | WASM ${(jsInlineMs / wasmMs).toFixed(1)}x`)\n console.log(` Speedup vs JS Worker: WASM ${(jsWorkerMs / wasmMs).toFixed(1)}x`)\n }\n console.log('')\n }\n }\n\n console.log('='.repeat(W))\n console.log('* = fastest for that operation/size')\n console.log('='.repeat(W))\n\n // Assertions\n for (const r of results) {\n if (!r.skipJs) {\n expect(r.jsInline.correct).toBe(true)\n expect(r.jsWorker.correct).toBe(true)\n }\n expect(r.wasm.correct).toBe(true)\n }\n } finally {\n server.close()\n }\n})\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,187 +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 test_1 = require("@playwright/test");
|
|
13
|
-
const http = require("http");
|
|
14
|
-
const fs = require("fs");
|
|
15
|
-
const path = require("path");
|
|
16
|
-
const child_process_1 = require("child_process");
|
|
17
|
-
const PROJECT_ROOT = path.resolve(__dirname, '..', '..');
|
|
18
|
-
const REF_SIZE = 32 * 1024;
|
|
19
|
-
const MIME_TYPES = {
|
|
20
|
-
'.html': 'text/html',
|
|
21
|
-
'.js': 'application/javascript',
|
|
22
|
-
'.wasm': 'application/wasm',
|
|
23
|
-
};
|
|
24
|
-
function startServer() {
|
|
25
|
-
return new Promise((resolve) => {
|
|
26
|
-
const server = http.createServer((req, res) => {
|
|
27
|
-
var _a;
|
|
28
|
-
const urlPath = ((_a = req.url) === null || _a === void 0 ? void 0 : _a.split('?')[0]) || '/';
|
|
29
|
-
const filePath = path.join(PROJECT_ROOT, urlPath);
|
|
30
|
-
if (!fs.existsSync(filePath) || fs.statSync(filePath).isDirectory()) {
|
|
31
|
-
res.writeHead(404);
|
|
32
|
-
res.end('Not found');
|
|
33
|
-
return;
|
|
34
|
-
}
|
|
35
|
-
const ext = path.extname(filePath);
|
|
36
|
-
res.writeHead(200, {
|
|
37
|
-
'Content-Type': MIME_TYPES[ext] || 'application/octet-stream',
|
|
38
|
-
'Cross-Origin-Opener-Policy': 'same-origin',
|
|
39
|
-
'Cross-Origin-Embedder-Policy': 'require-corp',
|
|
40
|
-
});
|
|
41
|
-
fs.createReadStream(filePath).pipe(res);
|
|
42
|
-
});
|
|
43
|
-
server.listen(0, () => {
|
|
44
|
-
const addr = server.address();
|
|
45
|
-
resolve({ server, port: typeof addr === 'object' && addr ? addr.port : 0 });
|
|
46
|
-
});
|
|
47
|
-
});
|
|
48
|
-
}
|
|
49
|
-
function generateReferenceData() {
|
|
50
|
-
const words = ['patient', 'contact', 'healthcare', 'delegation', 'encrypted', 'document', 'service', 'invoice'];
|
|
51
|
-
const lines = [];
|
|
52
|
-
let len = 0;
|
|
53
|
-
let i = 0;
|
|
54
|
-
while (len < REF_SIZE) {
|
|
55
|
-
const line = `${i}: ${words[i % words.length]} id=${Math.random().toString(36).slice(2)} ts=${Date.now()} value=${Math.random()}\n`;
|
|
56
|
-
lines.push(line);
|
|
57
|
-
len += line.length;
|
|
58
|
-
i++;
|
|
59
|
-
}
|
|
60
|
-
return Buffer.from(lines.join('').slice(0, REF_SIZE), 'utf-8');
|
|
61
|
-
}
|
|
62
|
-
function xzCompress(data) {
|
|
63
|
-
const tmpIn = path.join(require('os').tmpdir(), `lzma-compat-ref-${Date.now()}.bin`);
|
|
64
|
-
fs.writeFileSync(tmpIn, data);
|
|
65
|
-
try {
|
|
66
|
-
return (0, child_process_1.execFileSync)('xz', ['--compress', '-6', '--stdout', tmpIn]);
|
|
67
|
-
}
|
|
68
|
-
finally {
|
|
69
|
-
fs.unlinkSync(tmpIn);
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
function xzDecompress(data, format = 'auto') {
|
|
73
|
-
const tmpIn = path.join(require('os').tmpdir(), `lzma-compat-dec-${Date.now()}.bin`);
|
|
74
|
-
fs.writeFileSync(tmpIn, data);
|
|
75
|
-
try {
|
|
76
|
-
return (0, child_process_1.execFileSync)('xz', ['--decompress', `--format=${format}`, '--stdout', tmpIn]);
|
|
77
|
-
}
|
|
78
|
-
catch (_a) {
|
|
79
|
-
return null;
|
|
80
|
-
}
|
|
81
|
-
finally {
|
|
82
|
-
fs.unlinkSync(tmpIn);
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
(0, test_1.test)('Compression compatibility matrix', (_a) => __awaiter(void 0, [_a], void 0, function* ({ page }) {
|
|
86
|
-
test_1.test.setTimeout(60000);
|
|
87
|
-
const { server, port } = yield startServer();
|
|
88
|
-
try {
|
|
89
|
-
yield page.goto(`http://localhost:${port}/test/benchmarks/lzma-compat.html`);
|
|
90
|
-
yield page.waitForFunction(() => window.__ready === true, null, { timeout: 30000 });
|
|
91
|
-
// Generate reference data
|
|
92
|
-
const refData = generateReferenceData();
|
|
93
|
-
const refArray = Array.from(refData);
|
|
94
|
-
// --- Compress with all three producers ---
|
|
95
|
-
// LZMA-JS (LZMA1 .lzma format)
|
|
96
|
-
const lzmaJsCompressed = yield page.evaluate((data) => __awaiter(void 0, void 0, void 0, function* () {
|
|
97
|
-
return yield window.lzmaJsCompress(new Uint8Array(data));
|
|
98
|
-
}), refArray);
|
|
99
|
-
// LZMA-WASM (LZMA2 .xz format)
|
|
100
|
-
const lzmaWasmCompressed = yield page.evaluate((data) => {
|
|
101
|
-
return window.lzmaWasmCompress(data);
|
|
102
|
-
}, refArray);
|
|
103
|
-
// xz CLI (.xz format)
|
|
104
|
-
const xzCompressed = xzCompress(refData);
|
|
105
|
-
const compressed = {
|
|
106
|
-
'LZMA-JS': { data: lzmaJsCompressed, size: lzmaJsCompressed.length },
|
|
107
|
-
'LZMA-WASM': { data: lzmaWasmCompressed, size: lzmaWasmCompressed.length },
|
|
108
|
-
'xz CLI': { data: Array.from(xzCompressed), size: xzCompressed.length },
|
|
109
|
-
};
|
|
110
|
-
// --- Try all 9 decompression combinations ---
|
|
111
|
-
const producers = ['LZMA-JS', 'LZMA-WASM', 'xz CLI'];
|
|
112
|
-
const matrix = {};
|
|
113
|
-
for (const producer of producers) {
|
|
114
|
-
matrix[producer] = {};
|
|
115
|
-
const compData = compressed[producer].data;
|
|
116
|
-
// Decompress with LZMA-JS
|
|
117
|
-
try {
|
|
118
|
-
const result = yield page.evaluate((data) => __awaiter(void 0, void 0, void 0, function* () {
|
|
119
|
-
return yield window.lzmaJsDecompress(data);
|
|
120
|
-
}), compData);
|
|
121
|
-
const matches = result.length === refArray.length && result.every((v, i) => v === refArray[i]);
|
|
122
|
-
matrix[producer]['LZMA-JS'] = { success: true, matchesOriginal: matches };
|
|
123
|
-
}
|
|
124
|
-
catch (e) {
|
|
125
|
-
matrix[producer]['LZMA-JS'] = { success: false, error: e.message, matchesOriginal: false };
|
|
126
|
-
}
|
|
127
|
-
// Decompress with LZMA-WASM
|
|
128
|
-
try {
|
|
129
|
-
const result = yield page.evaluate((data) => {
|
|
130
|
-
return window.lzmaWasmDecompress(data);
|
|
131
|
-
}, compData);
|
|
132
|
-
const matches = result.length === refArray.length && result.every((v, i) => v === refArray[i]);
|
|
133
|
-
matrix[producer]['LZMA-WASM'] = { success: true, matchesOriginal: matches };
|
|
134
|
-
}
|
|
135
|
-
catch (e) {
|
|
136
|
-
matrix[producer]['LZMA-WASM'] = { success: false, error: e.message, matchesOriginal: false };
|
|
137
|
-
}
|
|
138
|
-
// Decompress with xz CLI
|
|
139
|
-
const xzResult = xzDecompress(Buffer.from(compData), 'auto');
|
|
140
|
-
if (xzResult) {
|
|
141
|
-
const matches = xzResult.length === refData.length && xzResult.equals(refData);
|
|
142
|
-
matrix[producer]['xz CLI'] = { success: true, matchesOriginal: matches };
|
|
143
|
-
}
|
|
144
|
-
else {
|
|
145
|
-
matrix[producer]['xz CLI'] = { success: false, error: 'xz exited with error', matchesOriginal: false };
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
// --- Print the matrix ---
|
|
149
|
-
const W = 90;
|
|
150
|
-
console.log('\n' + '='.repeat(W));
|
|
151
|
-
console.log('Compression Compatibility Matrix (32 KB reference file)');
|
|
152
|
-
console.log('Rows = compressed by, Columns = decompressed by');
|
|
153
|
-
console.log('='.repeat(W));
|
|
154
|
-
// Header
|
|
155
|
-
console.log(` ${'Compressed by'.padEnd(16)} | ${'LZMA-JS'.padEnd(20)} | ${'LZMA-WASM'.padEnd(20)} | ${'xz CLI'.padEnd(20)}`);
|
|
156
|
-
console.log(' ' + '-'.repeat(W - 2));
|
|
157
|
-
for (const producer of producers) {
|
|
158
|
-
const cells = producers.map((decompressor) => {
|
|
159
|
-
const cell = matrix[producer][decompressor];
|
|
160
|
-
if (cell.success && cell.matchesOriginal)
|
|
161
|
-
return 'OK';
|
|
162
|
-
if (cell.success && !cell.matchesOriginal)
|
|
163
|
-
return 'MISMATCH';
|
|
164
|
-
return 'FAIL';
|
|
165
|
-
});
|
|
166
|
-
console.log(` ${producer.padEnd(16)} | ${cells[0].padEnd(20)} | ${cells[1].padEnd(20)} | ${cells[2].padEnd(20)}`);
|
|
167
|
-
}
|
|
168
|
-
console.log(' ' + '-'.repeat(W - 2));
|
|
169
|
-
// Print compressed sizes
|
|
170
|
-
console.log('\n Compressed sizes:');
|
|
171
|
-
for (const producer of producers) {
|
|
172
|
-
const c = compressed[producer];
|
|
173
|
-
const ratio = ((c.size / REF_SIZE) * 100).toFixed(1);
|
|
174
|
-
console.log(` ${producer.padEnd(16)}: ${c.size} bytes (${ratio}%)`);
|
|
175
|
-
}
|
|
176
|
-
console.log('\n' + '='.repeat(W));
|
|
177
|
-
// --- Assertions: at minimum, each impl can decompress its own output ---
|
|
178
|
-
for (const impl of producers) {
|
|
179
|
-
(0, test_1.expect)(matrix[impl][impl].success).toBe(true);
|
|
180
|
-
(0, test_1.expect)(matrix[impl][impl].matchesOriginal).toBe(true);
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
finally {
|
|
184
|
-
server.close();
|
|
185
|
-
}
|
|
186
|
-
}));
|
|
187
|
-
//# sourceMappingURL=lzma-compat.spec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"lzma-compat.spec.js","sourceRoot":"","sources":["../../../test/benchmarks/lzma-compat.spec.ts"],"names":[],"mappings":"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","sourcesContent":["import { test, expect } from '@playwright/test'\nimport * as http from 'http'\nimport * as fs from 'fs'\nimport * as path from 'path'\nimport { execFileSync } from 'child_process'\n\nconst PROJECT_ROOT = path.resolve(__dirname, '..', '..')\nconst REF_SIZE = 32 * 1024\n\nconst MIME_TYPES: Record<string, string> = {\n '.html': 'text/html',\n '.js': 'application/javascript',\n '.wasm': 'application/wasm',\n}\n\nfunction startServer(): Promise<{ server: http.Server; port: number }> {\n return new Promise((resolve) => {\n const server = http.createServer((req, res) => {\n const urlPath = req.url?.split('?')[0] || '/'\n const filePath = path.join(PROJECT_ROOT, urlPath)\n\n if (!fs.existsSync(filePath) || fs.statSync(filePath).isDirectory()) {\n res.writeHead(404)\n res.end('Not found')\n return\n }\n\n const ext = path.extname(filePath)\n res.writeHead(200, {\n 'Content-Type': MIME_TYPES[ext] || 'application/octet-stream',\n 'Cross-Origin-Opener-Policy': 'same-origin',\n 'Cross-Origin-Embedder-Policy': 'require-corp',\n })\n fs.createReadStream(filePath).pipe(res)\n })\n\n server.listen(0, () => {\n const addr = server.address()\n resolve({ server, port: typeof addr === 'object' && addr ? addr.port : 0 })\n })\n })\n}\n\nfunction generateReferenceData(): Buffer {\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 Buffer.from(lines.join('').slice(0, REF_SIZE), 'utf-8')\n}\n\nfunction xzCompress(data: Buffer): Buffer {\n const tmpIn = path.join(require('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, format: string = 'auto'): Buffer | null {\n const tmpIn = path.join(require('os').tmpdir(), `lzma-compat-dec-${Date.now()}.bin`)\n fs.writeFileSync(tmpIn, data)\n try {\n return execFileSync('xz', ['--decompress', `--format=${format}`, '--stdout', tmpIn])\n } catch {\n return null\n } finally {\n fs.unlinkSync(tmpIn)\n }\n}\n\ntype Producer = 'LZMA-JS' | 'LZMA-WASM' | 'xz CLI'\ntype MatrixCell = { success: boolean; error?: string; matchesOriginal: boolean }\ntype Matrix = Record<Producer, Record<Producer, MatrixCell>>\n\ntest('Compression compatibility matrix', async ({ page }) => {\n test.setTimeout(60_000)\n\n const { server, port } = await startServer()\n\n try {\n await page.goto(`http://localhost:${port}/test/benchmarks/lzma-compat.html`)\n await page.waitForFunction(() => (window as any).__ready === true, null, { timeout: 30_000 })\n\n // Generate reference data\n const refData = generateReferenceData()\n const refArray = Array.from(refData)\n\n // --- Compress with all three producers ---\n\n // LZMA-JS (LZMA1 .lzma format)\n const lzmaJsCompressed: number[] = await page.evaluate(async (data) => {\n return await (window as any).lzmaJsCompress(new Uint8Array(data))\n }, refArray)\n\n // LZMA-WASM (LZMA2 .xz format)\n const lzmaWasmCompressed: number[] = await page.evaluate((data) => {\n return (window as any).lzmaWasmCompress(data)\n }, refArray)\n\n // xz CLI (.xz format)\n const xzCompressed = xzCompress(refData)\n\n const compressed: Record<Producer, { data: number[]; size: number }> = {\n 'LZMA-JS': { data: lzmaJsCompressed, size: lzmaJsCompressed.length },\n 'LZMA-WASM': { data: lzmaWasmCompressed, size: lzmaWasmCompressed.length },\n 'xz CLI': { data: Array.from(xzCompressed), size: xzCompressed.length },\n }\n\n // --- Try all 9 decompression combinations ---\n\n const producers: Producer[] = ['LZMA-JS', 'LZMA-WASM', 'xz CLI']\n const matrix: Matrix = {} as Matrix\n\n for (const producer of producers) {\n matrix[producer] = {} as Record<Producer, MatrixCell>\n const compData = compressed[producer].data\n\n // Decompress with LZMA-JS\n try {\n const result: number[] = await page.evaluate(async (data) => {\n return await (window as any).lzmaJsDecompress(data)\n }, compData)\n const matches = result.length === refArray.length && result.every((v, i) => v === refArray[i])\n matrix[producer]['LZMA-JS'] = { success: true, matchesOriginal: matches }\n } catch (e: any) {\n matrix[producer]['LZMA-JS'] = { success: false, error: e.message, matchesOriginal: false }\n }\n\n // Decompress with LZMA-WASM\n try {\n const result: number[] = await page.evaluate((data) => {\n return (window as any).lzmaWasmDecompress(data)\n }, compData)\n const matches = result.length === refArray.length && result.every((v, i) => v === refArray[i])\n matrix[producer]['LZMA-WASM'] = { success: true, matchesOriginal: matches }\n } catch (e: any) {\n matrix[producer]['LZMA-WASM'] = { success: false, error: e.message, matchesOriginal: false }\n }\n\n // Decompress with xz CLI\n const xzResult = xzDecompress(Buffer.from(compData), 'auto')\n if (xzResult) {\n const matches = xzResult.length === refData.length && xzResult.equals(refData)\n matrix[producer]['xz CLI'] = { success: true, matchesOriginal: matches }\n } else {\n matrix[producer]['xz CLI'] = { success: false, error: 'xz exited with error', matchesOriginal: false }\n }\n }\n\n // --- Print the matrix ---\n const W = 90\n console.log('\\n' + '='.repeat(W))\n console.log('Compression Compatibility Matrix (32 KB reference file)')\n console.log('Rows = compressed by, Columns = decompressed by')\n console.log('='.repeat(W))\n\n // Header\n console.log(\n ` ${'Compressed by'.padEnd(16)} | ${'LZMA-JS'.padEnd(20)} | ${'LZMA-WASM'.padEnd(20)} | ${'xz CLI'.padEnd(20)}`\n )\n console.log(' ' + '-'.repeat(W - 2))\n\n for (const producer of producers) {\n const cells = producers.map((decompressor) => {\n const cell = matrix[producer][decompressor]\n if (cell.success && cell.matchesOriginal) return 'OK'\n if (cell.success && !cell.matchesOriginal) return 'MISMATCH'\n return 'FAIL'\n })\n console.log(\n ` ${producer.padEnd(16)} | ${cells[0].padEnd(20)} | ${cells[1].padEnd(20)} | ${cells[2].padEnd(20)}`\n )\n }\n\n console.log(' ' + '-'.repeat(W - 2))\n\n // Print compressed sizes\n console.log('\\n Compressed sizes:')\n for (const producer of producers) {\n const c = compressed[producer]\n const ratio = ((c.size / REF_SIZE) * 100).toFixed(1)\n console.log(` ${producer.padEnd(16)}: ${c.size} bytes (${ratio}%)`)\n }\n\n console.log('\\n' + '='.repeat(W))\n\n // --- Assertions: at minimum, each impl can decompress its own output ---\n for (const impl of producers) {\n expect(matrix[impl][impl].success).toBe(true)\n expect(matrix[impl][impl].matchesOriginal).toBe(true)\n }\n } finally {\n server.close()\n }\n})"]}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const test_1 = require("@playwright/test");
|
|
4
|
-
exports.default = (0, test_1.defineConfig)({
|
|
5
|
-
testDir: '.',
|
|
6
|
-
testMatch: '*.spec.ts',
|
|
7
|
-
timeout: 300000,
|
|
8
|
-
use: {
|
|
9
|
-
headless: true,
|
|
10
|
-
},
|
|
11
|
-
projects: [
|
|
12
|
-
{
|
|
13
|
-
name: 'chromium',
|
|
14
|
-
use: { browserName: 'chromium' },
|
|
15
|
-
},
|
|
16
|
-
],
|
|
17
|
-
});
|
|
18
|
-
//# sourceMappingURL=playwright.config.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"playwright.config.js","sourceRoot":"","sources":["../../../test/benchmarks/playwright.config.ts"],"names":[],"mappings":";;AAAA,2CAA+C;AAE/C,kBAAe,IAAA,mBAAY,EAAC;IAC1B,OAAO,EAAE,GAAG;IACZ,SAAS,EAAE,WAAW;IACtB,OAAO,EAAE,MAAO;IAChB,GAAG,EAAE;QACH,QAAQ,EAAE,IAAI;KACf;IACD,QAAQ,EAAE;QACR;YACE,IAAI,EAAE,UAAU;YAChB,GAAG,EAAE,EAAE,WAAW,EAAE,UAAU,EAAE;SACjC;KACF;CACF,CAAC,CAAA","sourcesContent":["import { defineConfig } from '@playwright/test'\n\nexport default defineConfig({\n testDir: '.',\n testMatch: '*.spec.ts',\n timeout: 300_000,\n use: {\n headless: true,\n },\n projects: [\n {\n name: 'chromium',\n use: { browserName: 'chromium' },\n },\n ],\n})"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import 'isomorphic-fetch';
|
|
@@ -1,64 +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 crypto_1 = require("crypto");
|
|
13
|
-
const test_utils_1 = require("../../utils/test_utils");
|
|
14
|
-
require("isomorphic-fetch");
|
|
15
|
-
var initMasterApi = test_utils_1.TestUtils.initMasterApi;
|
|
16
|
-
const chai_1 = require("chai");
|
|
17
|
-
const types_1 = require("@icure/test-setup/types");
|
|
18
|
-
const Agenda_1 = require("../../../icc-api/model/Agenda");
|
|
19
|
-
const mocha_1 = require("mocha");
|
|
20
|
-
(0, test_utils_1.setLocalStorage)(fetch);
|
|
21
|
-
let env;
|
|
22
|
-
let agendaApi;
|
|
23
|
-
const agendas = [];
|
|
24
|
-
(0, mocha_1.describe)('IccAgendaApi', () => {
|
|
25
|
-
before(function () {
|
|
26
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
27
|
-
this.timeout(600000);
|
|
28
|
-
const initializer = yield (0, test_utils_1.getEnvironmentInitializer)();
|
|
29
|
-
env = yield initializer.execute((0, types_1.getEnvVariables)());
|
|
30
|
-
agendaApi = (yield initMasterApi(env)).agendaApi;
|
|
31
|
-
for (let i = 0; i < 10; i++) {
|
|
32
|
-
const agenda = yield agendaApi.createAgenda(new Agenda_1.Agenda({
|
|
33
|
-
id: (0, crypto_1.randomUUID)(),
|
|
34
|
-
name: (0, crypto_1.randomUUID)(),
|
|
35
|
-
}));
|
|
36
|
-
agendas.push(agenda);
|
|
37
|
-
}
|
|
38
|
-
});
|
|
39
|
-
});
|
|
40
|
-
it('Should be able of getting the Agendas using the deprecated method', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
41
|
-
const page = yield agendaApi.getAgendas();
|
|
42
|
-
page.forEach((it) => {
|
|
43
|
-
const existingAgenda = agendas.find((a) => a.id === it.id);
|
|
44
|
-
(0, chai_1.expect)(existingAgenda).not.to.be.undefined;
|
|
45
|
-
(0, chai_1.expect)(it.rev).to.be.eq(existingAgenda.rev);
|
|
46
|
-
});
|
|
47
|
-
}));
|
|
48
|
-
it('Should be able of getting the Agendas with pagination', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
49
|
-
var _a;
|
|
50
|
-
const firstPage = yield agendaApi.getAgendasWithPagination(undefined, 6);
|
|
51
|
-
(0, chai_1.expect)(firstPage.nextKeyPair).not.to.be.undefined;
|
|
52
|
-
(0, chai_1.expect)(firstPage.rows).not.to.be.undefined;
|
|
53
|
-
const secondPage = yield agendaApi.getAgendasWithPagination((_a = firstPage.nextKeyPair) === null || _a === void 0 ? void 0 : _a.startKeyDocId, 6);
|
|
54
|
-
(0, chai_1.expect)(secondPage.nextKeyPair).to.be.undefined;
|
|
55
|
-
(0, chai_1.expect)(secondPage.rows).not.to.be.undefined;
|
|
56
|
-
const rows = firstPage.rows.concat(secondPage.rows);
|
|
57
|
-
rows.forEach((it) => {
|
|
58
|
-
const existingAgenda = agendas.find((a) => a.id === it.id);
|
|
59
|
-
(0, chai_1.expect)(existingAgenda).not.to.be.undefined;
|
|
60
|
-
(0, chai_1.expect)(it.rev).to.be.eq(existingAgenda.rev);
|
|
61
|
-
});
|
|
62
|
-
}));
|
|
63
|
-
});
|
|
64
|
-
//# sourceMappingURL=IccAgendaApi.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"IccAgendaApi.js","sourceRoot":"","sources":["../../../../test/icc-api/api/IccAgendaApi.ts"],"names":[],"mappings":"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","sourcesContent":["import { randomUUID } from 'crypto'\nimport { getEnvironmentInitializer, setLocalStorage, TestUtils } from '../../utils/test_utils'\nimport 'isomorphic-fetch'\nimport initMasterApi = TestUtils.initMasterApi\nimport { expect } from 'chai'\nimport { getEnvVariables, TestVars } from '@icure/test-setup/types'\nimport { IccAgendaApi } from '../../../icc-api'\nimport { Agenda } from '../../../icc-api/model/Agenda'\nimport { describe } from 'mocha'\n\nsetLocalStorage(fetch)\n\nlet env: TestVars\nlet agendaApi: IccAgendaApi\nconst agendas: Agenda[] = []\n\ndescribe('IccAgendaApi', () => {\n before(async function () {\n this.timeout(600000)\n const initializer = await getEnvironmentInitializer()\n env = await initializer.execute(getEnvVariables())\n agendaApi = (await initMasterApi(env)).agendaApi\n\n for (let i = 0; i < 10; i++) {\n const agenda = await agendaApi.createAgenda(\n new Agenda({\n id: randomUUID(),\n name: randomUUID(),\n })\n )\n agendas.push(agenda)\n }\n })\n\n it('Should be able of getting the Agendas using the deprecated method', async () => {\n const page = await agendaApi.getAgendas()\n page.forEach((it) => {\n const existingAgenda = agendas.find((a) => a.id === it.id)\n expect(existingAgenda).not.to.be.undefined\n expect(it.rev).to.be.eq(existingAgenda!!.rev!!)\n })\n })\n\n it('Should be able of getting the Agendas with pagination', async () => {\n const firstPage = await agendaApi.getAgendasWithPagination(undefined, 6)\n expect(firstPage.nextKeyPair).not.to.be.undefined\n expect(firstPage.rows).not.to.be.undefined\n\n const secondPage = await agendaApi.getAgendasWithPagination(firstPage.nextKeyPair?.startKeyDocId, 6)\n expect(secondPage.nextKeyPair).to.be.undefined\n expect(secondPage.rows).not.to.be.undefined\n\n const rows = firstPage.rows!!.concat(secondPage.rows!!)\n rows.forEach((it) => {\n const existingAgenda = agendas.find((a) => a.id === it.id)\n expect(existingAgenda).not.to.be.undefined\n expect(it.rev).to.be.eq(existingAgenda!!.rev!!)\n })\n })\n})\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import 'isomorphic-fetch';
|
|
@@ -1,58 +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 crypto_1 = require("crypto");
|
|
13
|
-
const test_utils_1 = require("../../utils/test_utils");
|
|
14
|
-
require("isomorphic-fetch");
|
|
15
|
-
var initMasterApi = test_utils_1.TestUtils.initMasterApi;
|
|
16
|
-
const chai_1 = require("chai");
|
|
17
|
-
const types_1 = require("@icure/test-setup/types");
|
|
18
|
-
const MedicalLocation_1 = require("../../../icc-api/model/MedicalLocation");
|
|
19
|
-
(0, test_utils_1.setLocalStorage)(fetch);
|
|
20
|
-
let env;
|
|
21
|
-
(0, test_utils_1.describeNoLite)('Anonymous Access', () => {
|
|
22
|
-
before(function () {
|
|
23
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
24
|
-
this.timeout(600000);
|
|
25
|
-
const initializer = yield (0, test_utils_1.getEnvironmentInitializer)();
|
|
26
|
-
env = yield initializer.execute((0, types_1.getEnvVariables)());
|
|
27
|
-
});
|
|
28
|
-
});
|
|
29
|
-
it('should be able to retrieve publicly available informations of medicalLocation', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
30
|
-
var _a, _b;
|
|
31
|
-
const { medicalLocationApi, anonymousAccessApi } = yield initMasterApi(env);
|
|
32
|
-
const createdMedicalLocation = yield medicalLocationApi.createMedicalLocation(new MedicalLocation_1.MedicalLocation({
|
|
33
|
-
id: (0, crypto_1.randomUUID)(),
|
|
34
|
-
name: 'private medicalLocation ' + (0, crypto_1.randomUUID)(),
|
|
35
|
-
description: 'private medicalLocation description ' + (0, crypto_1.randomUUID)(),
|
|
36
|
-
}));
|
|
37
|
-
const createdMedicalLocationWithPublicInfo = yield medicalLocationApi.createMedicalLocation(new MedicalLocation_1.MedicalLocation({
|
|
38
|
-
id: (0, crypto_1.randomUUID)(),
|
|
39
|
-
name: 'public medicalLocation ' + (0, crypto_1.randomUUID)(),
|
|
40
|
-
description: 'public medicalLocation description ' + (0, crypto_1.randomUUID)(),
|
|
41
|
-
publicInformations: {
|
|
42
|
-
address: 'public address',
|
|
43
|
-
phone: '+32 2 555 55 55',
|
|
44
|
-
},
|
|
45
|
-
}));
|
|
46
|
-
const groupId = env.testGroupId;
|
|
47
|
-
const paginatedMedicalLocations = yield anonymousAccessApi.getPublicMedicalLocationsByGroupId(groupId);
|
|
48
|
-
(0, chai_1.expect)((_a = paginatedMedicalLocations.rows) === null || _a === void 0 ? void 0 : _a.length).to.be.greaterThan(0);
|
|
49
|
-
const publicMedicalLocationIds = (_b = paginatedMedicalLocations.rows) === null || _b === void 0 ? void 0 : _b.map((medicalLocation) => medicalLocation.id);
|
|
50
|
-
(0, chai_1.expect)(publicMedicalLocationIds).to.include(createdMedicalLocationWithPublicInfo.id);
|
|
51
|
-
(0, chai_1.expect)(publicMedicalLocationIds).not.to.include(createdMedicalLocation.id);
|
|
52
|
-
const publicMedicalLocation = paginatedMedicalLocations.rows.find((medicalLocation) => medicalLocation.id === createdMedicalLocationWithPublicInfo.id);
|
|
53
|
-
(0, chai_1.expect)(publicMedicalLocation).to.be.not.undefined;
|
|
54
|
-
(0, chai_1.expect)(publicMedicalLocation === null || publicMedicalLocation === void 0 ? void 0 : publicMedicalLocation.name).to.be.undefined;
|
|
55
|
-
(0, chai_1.expect)(publicMedicalLocation === null || publicMedicalLocation === void 0 ? void 0 : publicMedicalLocation.description).to.be.undefined;
|
|
56
|
-
}));
|
|
57
|
-
});
|
|
58
|
-
//# sourceMappingURL=IccAnonymousAccessApi.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"IccAnonymousAccessApi.js","sourceRoot":"","sources":["../../../../test/icc-api/api/IccAnonymousAccessApi.ts"],"names":[],"mappings":"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","sourcesContent":["import { randomUUID } from 'crypto'\nimport { describeNoLite, getEnvironmentInitializer, isLiteTest, setLocalStorage, TestUtils } from '../../utils/test_utils'\nimport 'isomorphic-fetch'\nimport initMasterApi = TestUtils.initMasterApi\nimport { expect } from 'chai'\nimport { getEnvVariables, TestVars } from '@icure/test-setup/types'\nimport { MedicalLocation } from '../../../icc-api/model/MedicalLocation'\n\nsetLocalStorage(fetch)\n\nlet env: TestVars\n\ndescribeNoLite('Anonymous Access', () => {\n before(async function () {\n this.timeout(600000)\n const initializer = await getEnvironmentInitializer()\n env = await initializer.execute(getEnvVariables())\n })\n\n it('should be able to retrieve publicly available informations of medicalLocation', async () => {\n const { medicalLocationApi, anonymousAccessApi } = await initMasterApi(env)\n\n const createdMedicalLocation = await medicalLocationApi.createMedicalLocation(\n new MedicalLocation({\n id: randomUUID(),\n name: 'private medicalLocation ' + randomUUID(),\n description: 'private medicalLocation description ' + randomUUID(),\n })\n )\n\n const createdMedicalLocationWithPublicInfo = await medicalLocationApi.createMedicalLocation(\n new MedicalLocation({\n id: randomUUID(),\n name: 'public medicalLocation ' + randomUUID(),\n description: 'public medicalLocation description ' + randomUUID(),\n publicInformations: {\n address: 'public address',\n phone: '+32 2 555 55 55',\n },\n })\n )\n\n const groupId = env.testGroupId\n\n const paginatedMedicalLocations = await anonymousAccessApi.getPublicMedicalLocationsByGroupId(groupId)\n\n expect(paginatedMedicalLocations.rows?.length).to.be.greaterThan(0)\n\n const publicMedicalLocationIds = paginatedMedicalLocations.rows?.map((medicalLocation) => medicalLocation.id)\n expect(publicMedicalLocationIds).to.include(createdMedicalLocationWithPublicInfo.id)\n expect(publicMedicalLocationIds).not.to.include(createdMedicalLocation.id)\n\n const publicMedicalLocation: MedicalLocation = paginatedMedicalLocations.rows!.find(\n (medicalLocation) => medicalLocation.id === createdMedicalLocationWithPublicInfo.id\n )!\n expect(publicMedicalLocation).to.be.not.undefined\n expect(publicMedicalLocation?.name).to.be.undefined\n expect(publicMedicalLocation?.description).to.be.undefined\n })\n})\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import 'isomorphic-fetch';
|