@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 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"date-encode-test.js","sourceRoot":"","sources":["../../../../test/icc-x-api/utils/date-encode-test.ts"],"names":[],"mappings":"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","sourcesContent":["import { describe, it } from 'mocha'\nimport { expect } from 'chai'\nimport { format as formatDate } from 'date-fns'\nimport { dateDecode, dateEncode, timeDecode, timeEncode } from '../../../icc-x-api/utils/formatting-util'\n\ndescribe('dateEncode', () => {\n it('should return undefined for undefined/null input', () => {\n expect(dateEncode(undefined)).to.be.undefined\n expect(dateEncode(null)).to.be.undefined\n })\n\n it(\"should encode today's date for an empty object input\", () => {\n expect(dateEncode({})).to.equal(Number(formatDate(new Date(), 'yyyyMMdd')))\n })\n\n it('should return undefined for falsy String/Number input', () => {\n expect(dateEncode('')).to.be.undefined\n expect(dateEncode(' ')).to.be.undefined\n expect(dateEncode(0)).to.be.undefined\n })\n\n it('should return undefined for non-numeric String input', () => {\n expect(dateEncode('not a date')).to.be.undefined\n })\n\n it('should encode a Date as a yyyyMMdd number', () => {\n expect(dateEncode(new Date(1985, 2, 15))).to.equal(19850315)\n })\n\n it('should keep a yyyyMMdd fuzzy date Number unchanged', () => {\n expect(dateEncode(19850315)).to.equal(19850315)\n })\n\n it('should keep a yyyyMMdd fuzzy date String unchanged', () => {\n expect(dateEncode('19850315')).to.equal(19850315)\n })\n\n it('should handle the yyyyMMdd boundaries', () => {\n expect(dateEncode(18000101)).to.equal(18000101)\n expect(dateEncode(25391231)).to.equal(25391231)\n })\n\n it('should truncate a yyyyMMddHHmmss fuzzy date to its date part', () => {\n expect(dateEncode(20230415143022)).to.equal(20230415)\n expect(dateEncode('20230415143022')).to.equal(20230415)\n })\n\n it('should treat a small Number as an epoch in milliseconds', () => {\n const epoch = new Date(2023, 0, 15, 12, 0, 0).getTime()\n expect(dateEncode(epoch)).to.equal(20230115)\n })\n})\n\ndescribe('timeEncode', () => {\n it('should return undefined for undefined/null input', () => {\n expect(timeEncode(undefined)).to.be.undefined\n expect(timeEncode(null)).to.be.undefined\n })\n\n it('should encode the current date and time for an empty object input', () => {\n const today = Number(formatDate(new Date(), 'yyyyMMdd'))\n // Only assert on the date part to avoid flakiness on second boundaries.\n expect(Math.floor((timeEncode({}) as number) / 1000000)).to.equal(today)\n })\n\n it('should return undefined for falsy String/Number input', () => {\n expect(timeEncode('')).to.be.undefined\n expect(timeEncode(' ')).to.be.undefined\n expect(timeEncode(0)).to.be.undefined\n })\n\n it('should return undefined for non-numeric String input', () => {\n expect(timeEncode('not a date')).to.be.undefined\n })\n\n it('should encode a Date as a yyyyMMddHHmmss number', () => {\n expect(timeEncode(new Date(2023, 3, 15, 14, 30, 22))).to.equal(20230415143022)\n })\n\n it('should pad a yyyyMMdd fuzzy date with a zero time part', () => {\n expect(timeEncode(19850315)).to.equal(19850315000000)\n expect(timeEncode('19850315')).to.equal(19850315000000)\n })\n\n it('should keep a yyyyMMddHHmmss fuzzy date unchanged', () => {\n expect(timeEncode(20230415143022)).to.equal(20230415143022)\n expect(timeEncode('20230415143022')).to.equal(20230415143022)\n })\n\n it('should treat a small Number as an epoch in milliseconds', () => {\n const epoch = new Date(2023, 0, 15, 12, 30, 45).getTime()\n expect(timeEncode(epoch)).to.equal(20230115123045)\n })\n})\n\ndescribe('dateDecode', () => {\n it('should return undefined for undefined/null input', () => {\n expect(dateDecode(undefined)).to.be.undefined\n expect(dateDecode(null)).to.be.undefined\n })\n\n it(\"should decode to today's date for an empty object input\", () => {\n expect(formatDate(dateDecode({}) as Date, 'yyyyMMdd')).to.equal(formatDate(new Date(), 'yyyyMMdd'))\n })\n\n it('should return undefined for blank String input', () => {\n expect(dateDecode('')).to.be.undefined\n expect(dateDecode(' ')).to.be.undefined\n })\n\n it('should return undefined for non-numeric String input', () => {\n expect(dateDecode('not a date')).to.be.undefined\n })\n\n it('should pass a Date through unchanged', () => {\n const d = new Date(2023, 3, 15, 14, 30, 22)\n expect(dateDecode(d)).to.equal(d)\n })\n\n it('should decode a yyyyMMdd Number', () => {\n expect(dateDecode(19850315)).to.eql(new Date(1985, 2, 15))\n })\n\n it('should decode a yyyyMMdd numeric String', () => {\n expect(dateDecode('19850315')).to.eql(new Date(1985, 2, 15))\n })\n\n it('should decode a yyyyMMddHHmmss Number, keeping only the date part', () => {\n expect(dateDecode(20230415143022)).to.eql(new Date(2023, 3, 15))\n })\n\n it('should decode a yyyyMMddHHmmss numeric String, keeping only the date part', () => {\n expect(dateDecode('20230415143022')).to.eql(new Date(2023, 3, 15))\n })\n\n it('should throw for negative input', () => {\n expect(() => dateDecode(-19850315)).to.throw()\n })\n})\n\ndescribe('timeDecode', () => {\n it('should return undefined for undefined/null input', () => {\n expect(timeDecode(undefined)).to.be.undefined\n expect(timeDecode(null)).to.be.undefined\n })\n\n it('should decode to the current date for an empty object input', () => {\n // Only assert on the date part to avoid flakiness on second boundaries.\n expect(formatDate(timeDecode({}) as Date, 'yyyyMMdd')).to.equal(formatDate(new Date(), 'yyyyMMdd'))\n })\n\n it('should return undefined for blank String input', () => {\n expect(timeDecode('')).to.be.undefined\n expect(timeDecode(' ')).to.be.undefined\n })\n\n it('should return undefined for non-numeric String input', () => {\n expect(timeDecode('not a date')).to.be.undefined\n })\n\n it('should pass a Date through unchanged', () => {\n const d = new Date(2023, 3, 15, 14, 30, 22)\n expect(timeDecode(d)).to.equal(d)\n })\n\n it('should decode a yyyyMMddHHmmss Number', () => {\n expect(timeDecode(20230415143022)).to.eql(new Date(2023, 3, 15, 14, 30, 22))\n })\n\n it('should decode a yyyyMMddHHmmss numeric String', () => {\n expect(timeDecode('20230415143022')).to.eql(new Date(2023, 3, 15, 14, 30, 22))\n })\n\n it('should decode a yyyyMMdd Number with the time defaulting to midnight', () => {\n expect(timeDecode(19850315)).to.eql(new Date(1985, 2, 15, 0, 0, 0))\n })\n\n it('should decode a yyyyMMdd numeric String with the time defaulting to midnight', () => {\n expect(timeDecode('19850315')).to.eql(new Date(1985, 2, 15, 0, 0, 0))\n })\n\n it('should throw for negative input', () => {\n expect(() => timeDecode(-19850315)).to.throw()\n })\n})"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const graph_utils_1 = require("../../../icc-x-api/utils/graph-utils");
|
|
4
|
-
const chai_1 = require("chai");
|
|
5
|
-
const collection_utils_1 = require("../../../icc-x-api/utils/collection-utils");
|
|
6
|
-
function graphEquals(graphA, graphB) {
|
|
7
|
-
if (!(0, collection_utils_1.setEquals)(new Set(Object.keys(graphA)), new Set(Object.keys(graphA)))) {
|
|
8
|
-
return false;
|
|
9
|
-
}
|
|
10
|
-
return Object.keys(graphA).every((key) => (0, collection_utils_1.setEquals)(graphA[key], graphB[key]));
|
|
11
|
-
}
|
|
12
|
-
describe('Terminal nodes', function () {
|
|
13
|
-
it('should match expected', function () {
|
|
14
|
-
// Online representation of graph https://www.plantuml.com/plantuml/svg/LSux2e8n00FWFQVuHnLw1Ud3jlRHta7GJHsqtby9MPm-I234ljVbjJwFEtQ7_MRCSNDmrCi0JwCyoOAWFjA4H3CoZVACGgkSgBIX_TdHwS3G_bHkRy_hx-4N
|
|
15
|
-
const graph = (0, graph_utils_1.graphFromEdges)([
|
|
16
|
-
['A', 'B'],
|
|
17
|
-
['A', 'C'],
|
|
18
|
-
['B', 'D'],
|
|
19
|
-
['B', 'E'],
|
|
20
|
-
['B', 'I'],
|
|
21
|
-
['C', 'C'],
|
|
22
|
-
// NO D,
|
|
23
|
-
['E', 'F'],
|
|
24
|
-
['F', 'G'],
|
|
25
|
-
['G', 'E'],
|
|
26
|
-
['G', 'H'],
|
|
27
|
-
// NO H,
|
|
28
|
-
['I', 'J'],
|
|
29
|
-
['I', 'N'],
|
|
30
|
-
['J', 'K'],
|
|
31
|
-
['K', 'K'],
|
|
32
|
-
['K', 'L'],
|
|
33
|
-
['L', 'M'],
|
|
34
|
-
['M', 'I'],
|
|
35
|
-
['N', 'L'],
|
|
36
|
-
]);
|
|
37
|
-
const copy = Object.entries(graph).reduce((acc, [node, edges]) => {
|
|
38
|
-
acc[node] = new Set(Array.from(edges));
|
|
39
|
-
return acc;
|
|
40
|
-
}, {});
|
|
41
|
-
(0, chai_1.expect)(graphEquals(graph, copy)).to.be.true;
|
|
42
|
-
const terminals = Object.entries((0, graph_utils_1.reachSetsAcyclic)((0, graph_utils_1.acyclic)(graph).acyclicGraph))
|
|
43
|
-
.filter(([, v]) => v.size === 0)
|
|
44
|
-
.map(([k]) => k);
|
|
45
|
-
(0, chai_1.expect)(graphEquals(graph, copy)).to.be.true;
|
|
46
|
-
(0, chai_1.expect)(terminals).to.have.length(4);
|
|
47
|
-
(0, chai_1.expect)(terminals).to.contain('C');
|
|
48
|
-
(0, chai_1.expect)(terminals).to.contain('D');
|
|
49
|
-
(0, chai_1.expect)(terminals).to.contain('H');
|
|
50
|
-
const alternatives = new Set(['I', 'J', 'K', 'L', 'M', 'N']);
|
|
51
|
-
(0, chai_1.expect)(Array.from(terminals).filter((x) => alternatives.has(x))).to.have.length(1);
|
|
52
|
-
});
|
|
53
|
-
});
|
|
54
|
-
//# sourceMappingURL=graph-test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"graph-test.js","sourceRoot":"","sources":["../../../../test/icc-x-api/utils/graph-test.ts"],"names":[],"mappings":"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","sourcesContent":["import { acyclic, Graph, graphFromEdges, reachSetsAcyclic } from '../../../icc-x-api/utils/graph-utils'\nimport { expect } from 'chai'\nimport { setEquals } from '../../../icc-x-api/utils/collection-utils'\n\nfunction graphEquals(graphA: Graph, graphB: Graph): boolean {\n if (!setEquals(new Set(Object.keys(graphA)), new Set(Object.keys(graphA)))) {\n return false\n }\n return Object.keys(graphA).every((key) => setEquals(graphA[key], graphB[key]))\n}\n\ndescribe('Terminal nodes', function () {\n it('should match expected', function () {\n // Online representation of graph https://www.plantuml.com/plantuml/svg/LSux2e8n00FWFQVuHnLw1Ud3jlRHta7GJHsqtby9MPm-I234ljVbjJwFEtQ7_MRCSNDmrCi0JwCyoOAWFjA4H3CoZVACGgkSgBIX_TdHwS3G_bHkRy_hx-4N\n const graph = graphFromEdges([\n ['A', 'B'],\n ['A', 'C'],\n ['B', 'D'],\n ['B', 'E'],\n ['B', 'I'],\n ['C', 'C'],\n // NO D,\n ['E', 'F'],\n ['F', 'G'],\n ['G', 'E'],\n ['G', 'H'],\n // NO H,\n ['I', 'J'],\n ['I', 'N'],\n ['J', 'K'],\n ['K', 'K'],\n ['K', 'L'],\n ['L', 'M'],\n ['M', 'I'],\n ['N', 'L'],\n ])\n const copy = Object.entries(graph).reduce<Graph>((acc, [node, edges]) => {\n acc[node] = new Set(Array.from(edges))\n return acc\n }, {})\n expect(graphEquals(graph, copy)).to.be.true\n const terminals = Object.entries(reachSetsAcyclic(acyclic(graph).acyclicGraph))\n .filter(([, v]) => v.size === 0)\n .map(([k]) => k)\n expect(graphEquals(graph, copy)).to.be.true\n expect(terminals).to.have.length(4)\n expect(terminals).to.contain('C')\n expect(terminals).to.contain('D')\n expect(terminals).to.contain('H')\n const alternatives = new Set(['I', 'J', 'K', 'L', 'M', 'N'])\n expect(Array.from(terminals).filter((x) => alternatives.has(x))).to.have.length(1)\n })\n})\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,364 +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 lru_temporised_async_cache_1 = require("../../../icc-x-api/utils/lru-temporised-async-cache");
|
|
13
|
-
const chai_1 = require("chai");
|
|
14
|
-
const icc_x_api_1 = require("../../../icc-x-api");
|
|
15
|
-
describe('Lru temporised async cache ', function () {
|
|
16
|
-
it('should automatically retrieve data if not cached', function () {
|
|
17
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
18
|
-
const cache = new lru_temporised_async_cache_1.LruTemporisedAsyncCache(100, () => 0);
|
|
19
|
-
let wasRetrieved = false;
|
|
20
|
-
const retrieved = yield cache.get('a', () => __awaiter(this, void 0, void 0, function* () {
|
|
21
|
-
wasRetrieved = true;
|
|
22
|
-
return { item: 1 };
|
|
23
|
-
}));
|
|
24
|
-
(0, chai_1.expect)(wasRetrieved).to.be.true;
|
|
25
|
-
(0, chai_1.expect)(retrieved).to.equal(1);
|
|
26
|
-
});
|
|
27
|
-
});
|
|
28
|
-
it('should reuse cached data if not expired', function () {
|
|
29
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
30
|
-
const cache = new lru_temporised_async_cache_1.LruTemporisedAsyncCache(100, () => 0);
|
|
31
|
-
const retrieved = yield cache.get('a', () => __awaiter(this, void 0, void 0, function* () { return ({ item: 1 }); }));
|
|
32
|
-
const reused = yield cache.get('a', () => __awaiter(this, void 0, void 0, function* () {
|
|
33
|
-
throw new Error('Should reuse cached value');
|
|
34
|
-
}));
|
|
35
|
-
(0, chai_1.expect)(reused).to.equal(retrieved);
|
|
36
|
-
});
|
|
37
|
-
});
|
|
38
|
-
it('should re-retrieve data if the cached item is expired by time, without evicting other items', function () {
|
|
39
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
40
|
-
let lifetimeCheckCalled = 0;
|
|
41
|
-
const cache = new lru_temporised_async_cache_1.LruTemporisedAsyncCache(2, (value) => {
|
|
42
|
-
lifetimeCheckCalled += 1;
|
|
43
|
-
return value < 10 ? 10 : 50;
|
|
44
|
-
});
|
|
45
|
-
(0, chai_1.expect)(yield cache.get('b', () => __awaiter(this, void 0, void 0, function* () { return ({ item: 10 }); }))).to.equal(10);
|
|
46
|
-
const retrieved = yield cache.get('a', () => __awaiter(this, void 0, void 0, function* () { return ({ item: 1 }); }));
|
|
47
|
-
(0, chai_1.expect)(retrieved).to.equal(1);
|
|
48
|
-
yield (0, icc_x_api_1.sleep)(20);
|
|
49
|
-
const reRetrieved = yield cache.get('a', (previousValue) => __awaiter(this, void 0, void 0, function* () {
|
|
50
|
-
(0, chai_1.expect)(previousValue).to.equal(1);
|
|
51
|
-
return { item: 2 };
|
|
52
|
-
}));
|
|
53
|
-
(0, chai_1.expect)(reRetrieved).to.equal(2);
|
|
54
|
-
(0, chai_1.expect)(lifetimeCheckCalled).to.equal(1);
|
|
55
|
-
(0, chai_1.expect)(yield cache.get('b', () => __awaiter(this, void 0, void 0, function* () {
|
|
56
|
-
throw new Error('Value should have not been evicted');
|
|
57
|
-
}))).to.equal(10);
|
|
58
|
-
(0, chai_1.expect)(lifetimeCheckCalled).to.equal(2);
|
|
59
|
-
});
|
|
60
|
-
});
|
|
61
|
-
it('should re-retrieve data if the cached item is expired according to the additional expiration condition, without evicting other items', function () {
|
|
62
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
63
|
-
const cache = new lru_temporised_async_cache_1.LruTemporisedAsyncCache(2, () => 0);
|
|
64
|
-
(0, chai_1.expect)(yield cache.get('b', () => __awaiter(this, void 0, void 0, function* () { return ({ item: 10 }); }))).to.equal(10);
|
|
65
|
-
const retrieved = yield cache.get('a', () => __awaiter(this, void 0, void 0, function* () { return ({ item: 1 }); }));
|
|
66
|
-
(0, chai_1.expect)(retrieved).to.equal(1);
|
|
67
|
-
const retrieved2 = yield cache.get('a', () => __awaiter(this, void 0, void 0, function* () {
|
|
68
|
-
throw new Error('Value should not have been evicted');
|
|
69
|
-
}), (item) => item < 1);
|
|
70
|
-
(0, chai_1.expect)(retrieved2).to.equal(1);
|
|
71
|
-
const retrieved3 = yield cache.get('a', (previousValue) => __awaiter(this, void 0, void 0, function* () {
|
|
72
|
-
(0, chai_1.expect)(previousValue).to.equal(1);
|
|
73
|
-
return { item: 2 };
|
|
74
|
-
}), (item) => item < 2);
|
|
75
|
-
(0, chai_1.expect)(retrieved3).to.equal(2);
|
|
76
|
-
(0, chai_1.expect)(yield cache.get('b', () => __awaiter(this, void 0, void 0, function* () {
|
|
77
|
-
throw new Error('Value should not have been evicted');
|
|
78
|
-
}))).to.equal(10);
|
|
79
|
-
});
|
|
80
|
-
});
|
|
81
|
-
it('should ignore additional expiration condition on newly retrieved data', function () {
|
|
82
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
83
|
-
const cache = new lru_temporised_async_cache_1.LruTemporisedAsyncCache(3, () => 0);
|
|
84
|
-
(0, chai_1.expect)(yield cache.get('a', () => __awaiter(this, void 0, void 0, function* () { return ({ item: 1 }); }), () => true)).to.equal(1);
|
|
85
|
-
(0, chai_1.expect)(yield cache.get('a', () => __awaiter(this, void 0, void 0, function* () {
|
|
86
|
-
throw new Error('Value should not have been evicted');
|
|
87
|
-
}))).to.equal(1);
|
|
88
|
-
});
|
|
89
|
-
});
|
|
90
|
-
it('should evict the least recently used item if full, regardless of expiration time of items', function () {
|
|
91
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
92
|
-
const cache = new lru_temporised_async_cache_1.LruTemporisedAsyncCache(3, (v) => (v == 4 ? 10 : 0));
|
|
93
|
-
(0, chai_1.expect)(yield cache.get('a', () => __awaiter(this, void 0, void 0, function* () { return ({ item: 1 }); }))).to.equal(1);
|
|
94
|
-
(0, chai_1.expect)(yield cache.get('b', () => __awaiter(this, void 0, void 0, function* () { return ({ item: 2 }); }))).to.equal(2);
|
|
95
|
-
(0, chai_1.expect)(yield cache.get('c', () => __awaiter(this, void 0, void 0, function* () { return ({ item: 3 }); }))).to.equal(3);
|
|
96
|
-
(0, chai_1.expect)(yield cache.get('d', (prev) => __awaiter(this, void 0, void 0, function* () {
|
|
97
|
-
(0, chai_1.expect)(prev).to.be.undefined;
|
|
98
|
-
return { item: 4 };
|
|
99
|
-
}))).to.equal(4); // This evicts "a"
|
|
100
|
-
(0, chai_1.expect)(yield cache.get('b', () => __awaiter(this, void 0, void 0, function* () {
|
|
101
|
-
throw new Error('Value should not have been evicted');
|
|
102
|
-
}))).to.equal(2);
|
|
103
|
-
(0, chai_1.expect)(yield cache.get('c', () => __awaiter(this, void 0, void 0, function* () {
|
|
104
|
-
throw new Error('Value should not have been evicted');
|
|
105
|
-
}))).to.equal(3);
|
|
106
|
-
(0, chai_1.expect)(yield cache.get('d', () => __awaiter(this, void 0, void 0, function* () {
|
|
107
|
-
throw new Error('Value should not have been evicted');
|
|
108
|
-
}))).to.equal(4);
|
|
109
|
-
(0, chai_1.expect)(yield cache.get('a', (prev) => __awaiter(this, void 0, void 0, function* () {
|
|
110
|
-
(0, chai_1.expect)(prev).to.be.undefined; // "a" was previously evicted so prev should be undefined
|
|
111
|
-
return { item: 5 };
|
|
112
|
-
}))).to.equal(5); // This evicts "b"
|
|
113
|
-
yield (0, icc_x_api_1.sleep)(20);
|
|
114
|
-
// Cache for "d" is expired, but LRU is "c", so we still evict "c"
|
|
115
|
-
(0, chai_1.expect)(yield cache.get('b', () => __awaiter(this, void 0, void 0, function* () { return ({ item: 6 }); }))).to.equal(6);
|
|
116
|
-
(0, chai_1.expect)(yield cache.get('a', () => __awaiter(this, void 0, void 0, function* () {
|
|
117
|
-
throw new Error('Value should not have been evicted');
|
|
118
|
-
}))).to.equal(5);
|
|
119
|
-
(0, chai_1.expect)(yield cache.get('d', (previousValue) => __awaiter(this, void 0, void 0, function* () {
|
|
120
|
-
(0, chai_1.expect)(previousValue).to.equal(4);
|
|
121
|
-
return { item: 7 };
|
|
122
|
-
}))).to.equal(7);
|
|
123
|
-
(0, chai_1.expect)(yield cache.get('c', (previousValue) => __awaiter(this, void 0, void 0, function* () {
|
|
124
|
-
(0, chai_1.expect)(previousValue).to.be.undefined;
|
|
125
|
-
return { item: 8 };
|
|
126
|
-
}))).to.equal(8);
|
|
127
|
-
});
|
|
128
|
-
});
|
|
129
|
-
it('should update least recently used item', function () {
|
|
130
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
131
|
-
const cache = new lru_temporised_async_cache_1.LruTemporisedAsyncCache(3, () => 0);
|
|
132
|
-
(0, chai_1.expect)(yield cache.get('a', () => __awaiter(this, void 0, void 0, function* () { return ({ item: 1 }); }))).to.equal(1);
|
|
133
|
-
(0, chai_1.expect)(yield cache.get('b', () => __awaiter(this, void 0, void 0, function* () { return ({ item: 2 }); }))).to.equal(2);
|
|
134
|
-
(0, chai_1.expect)(yield cache.get('c', () => __awaiter(this, void 0, void 0, function* () { return ({ item: 3 }); }))).to.equal(3);
|
|
135
|
-
// We retrieve "a" again, so LRU will be "b"
|
|
136
|
-
(0, chai_1.expect)(yield cache.get('a', () => __awaiter(this, void 0, void 0, function* () {
|
|
137
|
-
throw new Error('Value should not have been evicted');
|
|
138
|
-
}))).to.equal(1);
|
|
139
|
-
// Now we run out of space and evict b
|
|
140
|
-
(0, chai_1.expect)(yield cache.get('d', () => __awaiter(this, void 0, void 0, function* () { return ({ item: 4 }); }))).to.equal(4);
|
|
141
|
-
(0, chai_1.expect)(yield cache.get('a', () => __awaiter(this, void 0, void 0, function* () {
|
|
142
|
-
throw new Error('Value should not have been evicted');
|
|
143
|
-
}))).to.equal(1);
|
|
144
|
-
(0, chai_1.expect)(yield cache.get('c', () => __awaiter(this, void 0, void 0, function* () {
|
|
145
|
-
throw new Error('Value should not have been evicted');
|
|
146
|
-
}))).to.equal(3);
|
|
147
|
-
(0, chai_1.expect)(yield cache.get('b', (previousValue) => __awaiter(this, void 0, void 0, function* () {
|
|
148
|
-
(0, chai_1.expect)(previousValue).to.be.undefined;
|
|
149
|
-
return { item: 5 };
|
|
150
|
-
}))).to.equal(5);
|
|
151
|
-
});
|
|
152
|
-
});
|
|
153
|
-
it('should support additional eviction triggers for any eviction reason - time based expiration', function () {
|
|
154
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
155
|
-
const cache = new lru_temporised_async_cache_1.LruTemporisedAsyncCache(2, () => 10);
|
|
156
|
-
let didTrigger = false;
|
|
157
|
-
(0, chai_1.expect)(yield cache.get('a', () => __awaiter(this, void 0, void 0, function* () {
|
|
158
|
-
return ({
|
|
159
|
-
item: 1,
|
|
160
|
-
onEviction: (isReplacement) => {
|
|
161
|
-
(0, chai_1.expect)(isReplacement).to.be.true;
|
|
162
|
-
didTrigger = true;
|
|
163
|
-
},
|
|
164
|
-
});
|
|
165
|
-
}))).to.equal(1);
|
|
166
|
-
(0, chai_1.expect)(didTrigger).to.be.false;
|
|
167
|
-
yield (0, icc_x_api_1.sleep)(20);
|
|
168
|
-
(0, chai_1.expect)(didTrigger).to.be.false;
|
|
169
|
-
(0, chai_1.expect)(yield cache.get('a', () => __awaiter(this, void 0, void 0, function* () { return ({ item: 2 }); }))).to.equal(2);
|
|
170
|
-
(0, chai_1.expect)(didTrigger).to.be.true;
|
|
171
|
-
});
|
|
172
|
-
});
|
|
173
|
-
it('should support additional eviction triggers for any eviction reason - additional expiration condition', function () {
|
|
174
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
175
|
-
const cache = new lru_temporised_async_cache_1.LruTemporisedAsyncCache(2, () => 0);
|
|
176
|
-
let didTrigger = false;
|
|
177
|
-
(0, chai_1.expect)(yield cache.get('a', () => __awaiter(this, void 0, void 0, function* () {
|
|
178
|
-
return ({
|
|
179
|
-
item: 1,
|
|
180
|
-
onEviction: (isReplacement) => {
|
|
181
|
-
(0, chai_1.expect)(isReplacement).to.be.true;
|
|
182
|
-
didTrigger = true;
|
|
183
|
-
},
|
|
184
|
-
});
|
|
185
|
-
}))).to.equal(1);
|
|
186
|
-
(0, chai_1.expect)(didTrigger).to.be.false;
|
|
187
|
-
(0, chai_1.expect)(yield cache.get('a', () => __awaiter(this, void 0, void 0, function* () { return ({ item: 2 }); }), () => true)).to.equal(2);
|
|
188
|
-
(0, chai_1.expect)(didTrigger).to.be.true;
|
|
189
|
-
});
|
|
190
|
-
});
|
|
191
|
-
it('should support additional eviction triggers for any eviction reason - eviction because out of slots', function () {
|
|
192
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
193
|
-
const cache = new lru_temporised_async_cache_1.LruTemporisedAsyncCache(1, () => 0);
|
|
194
|
-
let didTrigger = false;
|
|
195
|
-
(0, chai_1.expect)(yield cache.get('a', () => __awaiter(this, void 0, void 0, function* () {
|
|
196
|
-
return ({
|
|
197
|
-
item: 1,
|
|
198
|
-
onEviction: (isReplacement) => {
|
|
199
|
-
(0, chai_1.expect)(isReplacement).to.be.false;
|
|
200
|
-
didTrigger = true;
|
|
201
|
-
},
|
|
202
|
-
});
|
|
203
|
-
}))).to.equal(1);
|
|
204
|
-
(0, chai_1.expect)(didTrigger).to.be.false;
|
|
205
|
-
(0, chai_1.expect)(yield cache.get('b', () => __awaiter(this, void 0, void 0, function* () { return ({ item: 2 }); }))).to.equal(2);
|
|
206
|
-
(0, chai_1.expect)(didTrigger).to.be.true;
|
|
207
|
-
});
|
|
208
|
-
});
|
|
209
|
-
it('should support additional eviction triggers for any eviction reason - eviction due to clear, if requested', function () {
|
|
210
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
211
|
-
const cache = new lru_temporised_async_cache_1.LruTemporisedAsyncCache(2, () => 0);
|
|
212
|
-
let didTrigger = false;
|
|
213
|
-
(0, chai_1.expect)(yield cache.get('a', () => __awaiter(this, void 0, void 0, function* () {
|
|
214
|
-
return ({
|
|
215
|
-
item: 1,
|
|
216
|
-
onEviction: () => {
|
|
217
|
-
didTrigger = true;
|
|
218
|
-
},
|
|
219
|
-
});
|
|
220
|
-
}))).to.equal(1);
|
|
221
|
-
cache.clear(false);
|
|
222
|
-
(0, chai_1.expect)(didTrigger).to.be.false;
|
|
223
|
-
(0, chai_1.expect)(yield cache.get('a', (previousValue) => __awaiter(this, void 0, void 0, function* () {
|
|
224
|
-
(0, chai_1.expect)(previousValue).to.be.undefined;
|
|
225
|
-
return {
|
|
226
|
-
item: 2,
|
|
227
|
-
onEviction: (isReplacement) => {
|
|
228
|
-
(0, chai_1.expect)(isReplacement).to.be.false;
|
|
229
|
-
didTrigger = true;
|
|
230
|
-
},
|
|
231
|
-
};
|
|
232
|
-
}))).to.equal(2);
|
|
233
|
-
cache.clear(true);
|
|
234
|
-
(0, chai_1.expect)(didTrigger).to.be.true;
|
|
235
|
-
});
|
|
236
|
-
});
|
|
237
|
-
it('should not start parallel retrieval jobs for the same key if the job was not evicted', function () {
|
|
238
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
239
|
-
const cache = new lru_temporised_async_cache_1.LruTemporisedAsyncCache(1, () => 0);
|
|
240
|
-
const job1 = cache.get('a', () => __awaiter(this, void 0, void 0, function* () {
|
|
241
|
-
yield (0, icc_x_api_1.sleep)(20);
|
|
242
|
-
return { item: 1 };
|
|
243
|
-
}));
|
|
244
|
-
const job2 = cache.get('a', () => __awaiter(this, void 0, void 0, function* () {
|
|
245
|
-
throw new Error('Should not start another job');
|
|
246
|
-
}));
|
|
247
|
-
(0, chai_1.expect)(yield job2).to.equal(1);
|
|
248
|
-
(0, chai_1.expect)(yield job1).to.equal(1);
|
|
249
|
-
});
|
|
250
|
-
});
|
|
251
|
-
it('should be able to evict uncompleted jobs, but still complete them', function () {
|
|
252
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
253
|
-
const cache = new lru_temporised_async_cache_1.LruTemporisedAsyncCache(1, () => 0);
|
|
254
|
-
const job1 = cache.get('a', () => __awaiter(this, void 0, void 0, function* () {
|
|
255
|
-
yield (0, icc_x_api_1.sleep)(20);
|
|
256
|
-
return { item: 1 };
|
|
257
|
-
}));
|
|
258
|
-
(0, chai_1.expect)(yield cache.get('b', () => __awaiter(this, void 0, void 0, function* () { return ({ item: 2 }); }))).to.equal(2);
|
|
259
|
-
(0, chai_1.expect)(yield job1).to.equal(1);
|
|
260
|
-
(0, chai_1.expect)(yield cache.get('b', () => __awaiter(this, void 0, void 0, function* () {
|
|
261
|
-
throw new Error('Value should not have been evicted');
|
|
262
|
-
}))).to.equal(2);
|
|
263
|
-
});
|
|
264
|
-
});
|
|
265
|
-
it('evicted uncompleted jobs, should not override more recent results for the same key when completed', function () {
|
|
266
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
267
|
-
const cache = new lru_temporised_async_cache_1.LruTemporisedAsyncCache(1, () => 0);
|
|
268
|
-
const job1 = cache.get('a', () => __awaiter(this, void 0, void 0, function* () {
|
|
269
|
-
yield (0, icc_x_api_1.sleep)(20);
|
|
270
|
-
return { item: 1 };
|
|
271
|
-
}));
|
|
272
|
-
(0, chai_1.expect)(yield cache.get('b', () => __awaiter(this, void 0, void 0, function* () { return ({ item: 2 }); }))).to.equal(2);
|
|
273
|
-
(0, chai_1.expect)(yield cache.get('a', (prev) => __awaiter(this, void 0, void 0, function* () {
|
|
274
|
-
(0, chai_1.expect)(prev).to.be.undefined;
|
|
275
|
-
return { item: 3 };
|
|
276
|
-
}))).to.equal(3);
|
|
277
|
-
(0, chai_1.expect)(yield job1).to.equal(1);
|
|
278
|
-
(0, chai_1.expect)(yield cache.get('a', () => __awaiter(this, void 0, void 0, function* () {
|
|
279
|
-
throw new Error('Value should not have been evicted');
|
|
280
|
-
}))).to.equal(3);
|
|
281
|
-
});
|
|
282
|
-
});
|
|
283
|
-
it('should rethrow exceptions from the retrieval job to anyone waiting on the job, but allow future tasks to reattempt the job', function () {
|
|
284
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
285
|
-
const cache = new lru_temporised_async_cache_1.LruTemporisedAsyncCache(1, () => 0);
|
|
286
|
-
const error = new Error('This error is expected');
|
|
287
|
-
const job1 = cache.get('a', () => __awaiter(this, void 0, void 0, function* () {
|
|
288
|
-
yield (0, icc_x_api_1.sleep)(20);
|
|
289
|
-
throw error;
|
|
290
|
-
}));
|
|
291
|
-
const job2 = cache.get('a', () => __awaiter(this, void 0, void 0, function* () {
|
|
292
|
-
throw new Error('Should not start another job');
|
|
293
|
-
}));
|
|
294
|
-
try {
|
|
295
|
-
yield job2;
|
|
296
|
-
}
|
|
297
|
-
catch (e) {
|
|
298
|
-
(0, chai_1.expect)(e).to.equal(error);
|
|
299
|
-
}
|
|
300
|
-
try {
|
|
301
|
-
yield job1;
|
|
302
|
-
}
|
|
303
|
-
catch (e) {
|
|
304
|
-
(0, chai_1.expect)(e).to.equal(error);
|
|
305
|
-
}
|
|
306
|
-
(0, chai_1.expect)(yield cache.get('a', () => __awaiter(this, void 0, void 0, function* () { return ({ item: 1 }); }))).to.equal(1);
|
|
307
|
-
});
|
|
308
|
-
});
|
|
309
|
-
it('should immediately perform the eviction triggers on completion if the data will not cached when the job completes', function () {
|
|
310
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
311
|
-
const cache = new lru_temporised_async_cache_1.LruTemporisedAsyncCache(1, () => 0);
|
|
312
|
-
let eviction1Performed = false;
|
|
313
|
-
const job1 = cache.get('a', () => __awaiter(this, void 0, void 0, function* () {
|
|
314
|
-
yield (0, icc_x_api_1.sleep)(20);
|
|
315
|
-
return {
|
|
316
|
-
item: 1,
|
|
317
|
-
onEviction: (isReplacement) => {
|
|
318
|
-
(0, chai_1.expect)(isReplacement).to.be.false;
|
|
319
|
-
eviction1Performed = true;
|
|
320
|
-
},
|
|
321
|
-
};
|
|
322
|
-
}));
|
|
323
|
-
// Lose reference to existing and incomplete job for key 'a'
|
|
324
|
-
(0, chai_1.expect)(yield cache.get('b', () => __awaiter(this, void 0, void 0, function* () { return ({ item: 2 }); }))).to.equal(2);
|
|
325
|
-
// Can't evict because not yet completed
|
|
326
|
-
(0, chai_1.expect)(eviction1Performed).to.be.false;
|
|
327
|
-
// Wait for job completion and eviction
|
|
328
|
-
(0, chai_1.expect)(yield job1).to.equal(1);
|
|
329
|
-
(0, chai_1.expect)(eviction1Performed).to.be.true;
|
|
330
|
-
});
|
|
331
|
-
});
|
|
332
|
-
it('should not replace newer data if old data completes after replacement by newer data', function () {
|
|
333
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
334
|
-
const cache = new lru_temporised_async_cache_1.LruTemporisedAsyncCache(1, () => 0);
|
|
335
|
-
let eviction1Performed = false;
|
|
336
|
-
const job1 = cache.get('a', () => __awaiter(this, void 0, void 0, function* () {
|
|
337
|
-
yield (0, icc_x_api_1.sleep)(20);
|
|
338
|
-
return {
|
|
339
|
-
item: 1,
|
|
340
|
-
onEviction: (isReplacement) => {
|
|
341
|
-
(0, chai_1.expect)(isReplacement).to.be.true;
|
|
342
|
-
eviction1Performed = true;
|
|
343
|
-
},
|
|
344
|
-
};
|
|
345
|
-
}));
|
|
346
|
-
// Lose reference to existing and incomplete job for key 'a'
|
|
347
|
-
(0, chai_1.expect)(yield cache.get('b', () => __awaiter(this, void 0, void 0, function* () { return ({ item: 2 }); }))).to.equal(2);
|
|
348
|
-
// Can't evict because not yet completed
|
|
349
|
-
(0, chai_1.expect)(eviction1Performed).to.be.false;
|
|
350
|
-
// Start new job for 'a' since we don't know about the existing one
|
|
351
|
-
(0, chai_1.expect)(yield cache.get('a', () => __awaiter(this, void 0, void 0, function* () {
|
|
352
|
-
return ({
|
|
353
|
-
item: 3,
|
|
354
|
-
onEviction: () => {
|
|
355
|
-
throw new Error('This should not be called');
|
|
356
|
-
},
|
|
357
|
-
});
|
|
358
|
-
}))).to.equal(3);
|
|
359
|
-
(0, chai_1.expect)(yield job1).to.equal(1);
|
|
360
|
-
(0, chai_1.expect)(eviction1Performed).to.be.true;
|
|
361
|
-
});
|
|
362
|
-
});
|
|
363
|
-
});
|
|
364
|
-
//# sourceMappingURL=lru-temporised-async-cache-test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"lru-temporised-async-cache-test.js","sourceRoot":"","sources":["../../../../test/icc-x-api/utils/lru-temporised-async-cache-test.ts"],"names":[],"mappings":"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","sourcesContent":["import { LruTemporisedAsyncCache } from '../../../icc-x-api/utils/lru-temporised-async-cache'\nimport { expect } from 'chai'\nimport { sleep } from '../../../icc-x-api'\n\ndescribe('Lru temporised async cache ', function () {\n it('should automatically retrieve data if not cached', async function () {\n const cache = new LruTemporisedAsyncCache<string, number>(100, () => 0)\n let wasRetrieved = false\n const retrieved = await cache.get('a', async () => {\n wasRetrieved = true\n return { item: 1 }\n })\n expect(wasRetrieved).to.be.true\n expect(retrieved).to.equal(1)\n })\n\n it('should reuse cached data if not expired', async function () {\n const cache = new LruTemporisedAsyncCache<string, number>(100, () => 0)\n const retrieved = await cache.get('a', async () => ({ item: 1 }))\n const reused = await cache.get('a', async () => {\n throw new Error('Should reuse cached value')\n })\n expect(reused).to.equal(retrieved)\n })\n\n it('should re-retrieve data if the cached item is expired by time, without evicting other items', async function () {\n let lifetimeCheckCalled = 0\n const cache = new LruTemporisedAsyncCache<string, number>(2, (value) => {\n lifetimeCheckCalled += 1\n return value < 10 ? 10 : 50\n })\n expect(await cache.get('b', async () => ({ item: 10 }))).to.equal(10)\n const retrieved = await cache.get('a', async () => ({ item: 1 }))\n expect(retrieved).to.equal(1)\n await sleep(20)\n const reRetrieved = await cache.get('a', async (previousValue) => {\n expect(previousValue).to.equal(1)\n return { item: 2 }\n })\n expect(reRetrieved).to.equal(2)\n expect(lifetimeCheckCalled).to.equal(1)\n expect(\n await cache.get('b', async () => {\n throw new Error('Value should have not been evicted')\n })\n ).to.equal(10)\n expect(lifetimeCheckCalled).to.equal(2)\n })\n\n it('should re-retrieve data if the cached item is expired according to the additional expiration condition, without evicting other items', async function () {\n const cache = new LruTemporisedAsyncCache<string, number>(2, () => 0)\n expect(await cache.get('b', async () => ({ item: 10 }))).to.equal(10)\n const retrieved = await cache.get('a', async () => ({ item: 1 }))\n expect(retrieved).to.equal(1)\n const retrieved2 = await cache.get(\n 'a',\n async () => {\n throw new Error('Value should not have been evicted')\n },\n (item) => item < 1\n )\n expect(retrieved2).to.equal(1)\n const retrieved3 = await cache.get(\n 'a',\n async (previousValue) => {\n expect(previousValue).to.equal(1)\n return { item: 2 }\n },\n (item) => item < 2\n )\n expect(retrieved3).to.equal(2)\n expect(\n await cache.get('b', async () => {\n throw new Error('Value should not have been evicted')\n })\n ).to.equal(10)\n })\n\n it('should ignore additional expiration condition on newly retrieved data', async function () {\n const cache = new LruTemporisedAsyncCache<string, number>(3, () => 0)\n expect(\n await cache.get(\n 'a',\n async () => ({ item: 1 }),\n () => true\n )\n ).to.equal(1)\n expect(\n await cache.get('a', async () => {\n throw new Error('Value should not have been evicted')\n })\n ).to.equal(1)\n })\n\n it('should evict the least recently used item if full, regardless of expiration time of items', async function () {\n const cache = new LruTemporisedAsyncCache<string, number>(3, (v) => (v == 4 ? 10 : 0))\n expect(await cache.get('a', async () => ({ item: 1 }))).to.equal(1)\n expect(await cache.get('b', async () => ({ item: 2 }))).to.equal(2)\n expect(await cache.get('c', async () => ({ item: 3 }))).to.equal(3)\n expect(\n await cache.get('d', async (prev) => {\n expect(prev).to.be.undefined\n return { item: 4 }\n })\n ).to.equal(4) // This evicts \"a\"\n expect(\n await cache.get('b', async () => {\n throw new Error('Value should not have been evicted')\n })\n ).to.equal(2)\n expect(\n await cache.get('c', async () => {\n throw new Error('Value should not have been evicted')\n })\n ).to.equal(3)\n expect(\n await cache.get('d', async () => {\n throw new Error('Value should not have been evicted')\n })\n ).to.equal(4)\n expect(\n await cache.get('a', async (prev) => {\n expect(prev).to.be.undefined // \"a\" was previously evicted so prev should be undefined\n return { item: 5 }\n })\n ).to.equal(5) // This evicts \"b\"\n await sleep(20)\n // Cache for \"d\" is expired, but LRU is \"c\", so we still evict \"c\"\n expect(await cache.get('b', async () => ({ item: 6 }))).to.equal(6)\n expect(\n await cache.get('a', async () => {\n throw new Error('Value should not have been evicted')\n })\n ).to.equal(5)\n expect(\n await cache.get('d', async (previousValue) => {\n expect(previousValue).to.equal(4)\n return { item: 7 }\n })\n ).to.equal(7)\n expect(\n await cache.get('c', async (previousValue) => {\n expect(previousValue).to.be.undefined\n return { item: 8 }\n })\n ).to.equal(8)\n })\n\n it('should update least recently used item', async function () {\n const cache = new LruTemporisedAsyncCache<string, number>(3, () => 0)\n expect(await cache.get('a', async () => ({ item: 1 }))).to.equal(1)\n expect(await cache.get('b', async () => ({ item: 2 }))).to.equal(2)\n expect(await cache.get('c', async () => ({ item: 3 }))).to.equal(3)\n // We retrieve \"a\" again, so LRU will be \"b\"\n expect(\n await cache.get('a', async () => {\n throw new Error('Value should not have been evicted')\n })\n ).to.equal(1)\n // Now we run out of space and evict b\n expect(await cache.get('d', async () => ({ item: 4 }))).to.equal(4)\n expect(\n await cache.get('a', async () => {\n throw new Error('Value should not have been evicted')\n })\n ).to.equal(1)\n expect(\n await cache.get('c', async () => {\n throw new Error('Value should not have been evicted')\n })\n ).to.equal(3)\n expect(\n await cache.get('b', async (previousValue) => {\n expect(previousValue).to.be.undefined\n return { item: 5 }\n })\n ).to.equal(5)\n })\n\n it('should support additional eviction triggers for any eviction reason - time based expiration', async function () {\n const cache = new LruTemporisedAsyncCache<string, number>(2, () => 10)\n let didTrigger = false\n expect(\n await cache.get('a', async () => ({\n item: 1,\n onEviction: (isReplacement) => {\n expect(isReplacement).to.be.true\n didTrigger = true\n },\n }))\n ).to.equal(1)\n expect(didTrigger).to.be.false\n await sleep(20)\n expect(didTrigger).to.be.false\n expect(await cache.get('a', async () => ({ item: 2 }))).to.equal(2)\n expect(didTrigger).to.be.true\n })\n\n it('should support additional eviction triggers for any eviction reason - additional expiration condition', async function () {\n const cache = new LruTemporisedAsyncCache<string, number>(2, () => 0)\n let didTrigger = false\n expect(\n await cache.get('a', async () => ({\n item: 1,\n onEviction: (isReplacement) => {\n expect(isReplacement).to.be.true\n didTrigger = true\n },\n }))\n ).to.equal(1)\n expect(didTrigger).to.be.false\n expect(\n await cache.get(\n 'a',\n async () => ({ item: 2 }),\n () => true\n )\n ).to.equal(2)\n expect(didTrigger).to.be.true\n })\n\n it('should support additional eviction triggers for any eviction reason - eviction because out of slots', async function () {\n const cache = new LruTemporisedAsyncCache<string, number>(1, () => 0)\n let didTrigger = false\n expect(\n await cache.get('a', async () => ({\n item: 1,\n onEviction: (isReplacement) => {\n expect(isReplacement).to.be.false\n didTrigger = true\n },\n }))\n ).to.equal(1)\n expect(didTrigger).to.be.false\n expect(await cache.get('b', async () => ({ item: 2 }))).to.equal(2)\n expect(didTrigger).to.be.true\n })\n\n it('should support additional eviction triggers for any eviction reason - eviction due to clear, if requested', async function () {\n const cache = new LruTemporisedAsyncCache<string, number>(2, () => 0)\n let didTrigger = false\n expect(\n await cache.get('a', async () => ({\n item: 1,\n onEviction: () => {\n didTrigger = true\n },\n }))\n ).to.equal(1)\n cache.clear(false)\n expect(didTrigger).to.be.false\n expect(\n await cache.get('a', async (previousValue) => {\n expect(previousValue).to.be.undefined\n return {\n item: 2,\n onEviction: (isReplacement) => {\n expect(isReplacement).to.be.false\n didTrigger = true\n },\n }\n })\n ).to.equal(2)\n cache.clear(true)\n expect(didTrigger).to.be.true\n })\n\n it('should not start parallel retrieval jobs for the same key if the job was not evicted', async function () {\n const cache = new LruTemporisedAsyncCache<string, number>(1, () => 0)\n const job1 = cache.get('a', async () => {\n await sleep(20)\n return { item: 1 }\n })\n const job2 = cache.get('a', async () => {\n throw new Error('Should not start another job')\n })\n expect(await job2).to.equal(1)\n expect(await job1).to.equal(1)\n })\n\n it('should be able to evict uncompleted jobs, but still complete them', async function () {\n const cache = new LruTemporisedAsyncCache<string, number>(1, () => 0)\n const job1 = cache.get('a', async () => {\n await sleep(20)\n return { item: 1 }\n })\n expect(await cache.get('b', async () => ({ item: 2 }))).to.equal(2)\n expect(await job1).to.equal(1)\n expect(\n await cache.get('b', async () => {\n throw new Error('Value should not have been evicted')\n })\n ).to.equal(2)\n })\n\n it('evicted uncompleted jobs, should not override more recent results for the same key when completed', async function () {\n const cache = new LruTemporisedAsyncCache<string, number>(1, () => 0)\n const job1 = cache.get('a', async () => {\n await sleep(20)\n return { item: 1 }\n })\n expect(await cache.get('b', async () => ({ item: 2 }))).to.equal(2)\n expect(\n await cache.get('a', async (prev) => {\n expect(prev).to.be.undefined\n return { item: 3 }\n })\n ).to.equal(3)\n expect(await job1).to.equal(1)\n expect(\n await cache.get('a', async () => {\n throw new Error('Value should not have been evicted')\n })\n ).to.equal(3)\n })\n\n it('should rethrow exceptions from the retrieval job to anyone waiting on the job, but allow future tasks to reattempt the job', async function () {\n const cache = new LruTemporisedAsyncCache<string, number>(1, () => 0)\n const error = new Error('This error is expected')\n const job1 = cache.get('a', async () => {\n await sleep(20)\n throw error\n })\n const job2 = cache.get('a', async () => {\n throw new Error('Should not start another job')\n })\n try {\n await job2\n } catch (e) {\n expect(e).to.equal(error)\n }\n try {\n await job1\n } catch (e) {\n expect(e).to.equal(error)\n }\n expect(await cache.get('a', async () => ({ item: 1 }))).to.equal(1)\n })\n\n it('should immediately perform the eviction triggers on completion if the data will not cached when the job completes', async function () {\n const cache = new LruTemporisedAsyncCache<string, number>(1, () => 0)\n let eviction1Performed = false\n const job1 = cache.get('a', async () => {\n await sleep(20)\n return {\n item: 1,\n onEviction: (isReplacement) => {\n expect(isReplacement).to.be.false\n eviction1Performed = true\n },\n }\n })\n // Lose reference to existing and incomplete job for key 'a'\n expect(await cache.get('b', async () => ({ item: 2 }))).to.equal(2)\n // Can't evict because not yet completed\n expect(eviction1Performed).to.be.false\n // Wait for job completion and eviction\n expect(await job1).to.equal(1)\n expect(eviction1Performed).to.be.true\n })\n\n it('should not replace newer data if old data completes after replacement by newer data', async function () {\n const cache = new LruTemporisedAsyncCache<string, number>(1, () => 0)\n let eviction1Performed = false\n const job1 = cache.get('a', async () => {\n await sleep(20)\n return {\n item: 1,\n onEviction: (isReplacement) => {\n expect(isReplacement).to.be.true\n eviction1Performed = true\n },\n }\n })\n // Lose reference to existing and incomplete job for key 'a'\n expect(await cache.get('b', async () => ({ item: 2 }))).to.equal(2)\n // Can't evict because not yet completed\n expect(eviction1Performed).to.be.false\n // Start new job for 'a' since we don't know about the existing one\n expect(\n await cache.get('a', async () => ({\n item: 3,\n onEviction: () => {\n throw new Error('This should not be called')\n },\n }))\n ).to.equal(3)\n expect(await job1).to.equal(1)\n expect(eviction1Performed).to.be.true\n })\n})\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|