@splitsoftware/splitio 10.17.3-rc.4 → 10.17.4-rc.1
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/CHANGES.txt +0 -3
- package/client/package.json +5 -0
- package/es/factory/browser.js +67 -0
- package/es/factory/node.js +63 -0
- package/es/{client → factory}/package.json +0 -0
- package/es/index.js +16 -132
- package/es/platform/EventEmitter.js +386 -0
- package/es/platform/browser.js +10 -0
- package/es/platform/getEventSource/browser.js +3 -0
- package/es/platform/getEventSource/node.js +19 -0
- package/es/{impressions/observer → platform/getEventSource}/package.json +0 -0
- package/es/platform/getFetch/browser.js +4 -0
- package/es/platform/getFetch/node.js +18 -0
- package/es/{integrations → platform/getFetch}/package.json +0 -0
- package/es/platform/node.js +12 -0
- package/es/{listeners → platform}/package.json +0 -0
- package/es/platform/request/options/node.js +13 -0
- package/es/settings/browser.js +20 -0
- package/es/settings/defaults/browser.js +18 -0
- package/es/settings/defaults/node.js +24 -0
- package/es/settings/defaults/version.js +1 -0
- package/es/settings/integrations/browser.js +5 -0
- package/es/settings/node.js +18 -0
- package/es/{producer/offline → settings}/package.json +0 -0
- package/es/settings/runtime/node.js +17 -0
- package/es/settings/storage/browser.js +29 -0
- package/es/settings/storage/node.js +60 -0
- package/es/umd.js +2 -1
- package/lib/factory/browser.js +71 -0
- package/lib/factory/node.js +67 -0
- package/{es/producer → lib/factory}/package.json +0 -0
- package/lib/index.js +19 -155
- package/lib/platform/EventEmitter.js +390 -0
- package/lib/platform/browser.js +13 -0
- package/lib/platform/getEventSource/browser.js +7 -0
- package/lib/platform/getEventSource/node.js +25 -0
- package/{es/services → lib/platform}/getEventSource/package.json +0 -0
- package/lib/platform/getFetch/browser.js +9 -0
- package/lib/platform/getFetch/node.js +23 -0
- package/{es/services → lib/platform}/getFetch/package.json +0 -0
- package/lib/platform/node.js +16 -0
- package/{es/services/request/options → lib/platform}/package.json +0 -0
- package/lib/platform/request/options/node.js +18 -0
- package/lib/settings/browser.js +24 -0
- package/lib/settings/defaults/browser.js +21 -0
- package/lib/settings/defaults/node.js +27 -0
- package/lib/settings/defaults/version.js +4 -0
- package/lib/settings/integrations/browser.js +9 -0
- package/lib/settings/node.js +22 -0
- package/{es/services/splitChanges/offline → lib/settings}/package.json +0 -0
- package/lib/settings/runtime/node.js +22 -0
- package/lib/settings/storage/browser.js +33 -0
- package/lib/settings/storage/node.js +64 -0
- package/lib/umd.js +4 -8
- package/package.json +29 -31
- package/server/package.json +5 -0
- package/src/.DS_Store +0 -0
- package/src/factory/browser.js +84 -0
- package/src/factory/node.js +78 -0
- package/{es/storage/SegmentCache/InMemory → src/factory}/package.json +0 -0
- package/src/index.js +13 -136
- package/src/platform/.DS_Store +0 -0
- package/src/platform/EventEmitter.js +443 -0
- package/src/platform/browser.js +12 -0
- package/{es/services → src/platform}/getEventSource/browser.js +2 -2
- package/src/{services → platform}/getEventSource/node.js +2 -2
- package/{es/storage → src/platform/getEventSource}/package.json +0 -0
- package/src/{services → platform}/getFetch/browser.js +2 -2
- package/src/{services → platform}/getFetch/node.js +1 -1
- package/{es/sync/PushManager/pushRequirements → src/platform/getFetch}/package.json +0 -0
- package/src/platform/node.js +14 -0
- package/{es/sync/SegmentUpdateWorker → src/platform}/package.json +0 -0
- package/src/platform/request/options/node.js +15 -0
- package/src/settings/.DS_Store +0 -0
- package/src/settings/browser.js +22 -0
- package/{lib/utils → src}/settings/defaults/browser.js +10 -6
- package/{lib/utils → src}/settings/defaults/node.js +6 -6
- package/src/settings/defaults/version.js +1 -0
- package/src/settings/integrations/browser.js +6 -0
- package/src/settings/node.js +20 -0
- package/{es/sync → src/settings}/package.json +0 -0
- package/src/settings/runtime/node.js +21 -0
- package/src/settings/storage/browser.js +43 -0
- package/src/{utils/settings → settings}/storage/node.js +18 -34
- package/src/umd.js +1 -0
- package/types/client/index.d.ts +14 -0
- package/types/server/index.d.ts +20 -0
- package/types/splitio.d.ts +77 -6
- package/es/client/attributesDecoration.js +0 -116
- package/es/client/browser.js +0 -39
- package/es/client/client.js +0 -155
- package/es/client/inputValidation.js +0 -117
- package/es/client/node.js +0 -6
- package/es/engine/combiners/and.js +0 -54
- package/es/engine/combiners/ifelseif.js +0 -73
- package/es/engine/condition/index.js +0 -62
- package/es/engine/convertions/index.js +0 -29
- package/es/engine/engine/index.js +0 -60
- package/es/engine/engine/legacy.js +0 -77
- package/es/engine/engine/murmur3/common.js +0 -40
- package/es/engine/engine/murmur3/murmur3.js +0 -83
- package/es/engine/engine/murmur3/murmur3_128.js +0 -250
- package/es/engine/engine/murmur3/murmur3_128_x86.js +0 -183
- package/es/engine/engine/murmur3/murmur3_64.js +0 -52
- package/es/engine/engine/murmur3/utfx.js +0 -112
- package/es/engine/evaluator/index.js +0 -111
- package/es/engine/index.js +0 -112
- package/es/engine/matchers/all.js +0 -32
- package/es/engine/matchers/between.js +0 -35
- package/es/engine/matchers/boolean.js +0 -35
- package/es/engine/matchers/cont_all.js +0 -51
- package/es/engine/matchers/cont_any.js +0 -47
- package/es/engine/matchers/cont_str.js +0 -38
- package/es/engine/matchers/dependency.js +0 -50
- package/es/engine/matchers/eq.js +0 -35
- package/es/engine/matchers/eq_set.js +0 -49
- package/es/engine/matchers/ew.js +0 -38
- package/es/engine/matchers/gte.js +0 -35
- package/es/engine/matchers/index.js +0 -65
- package/es/engine/matchers/lte.js +0 -35
- package/es/engine/matchers/part_of.js +0 -49
- package/es/engine/matchers/segment.js +0 -39
- package/es/engine/matchers/string.js +0 -44
- package/es/engine/matchers/sw.js +0 -38
- package/es/engine/matchers/types.js +0 -48
- package/es/engine/matchers/whitelist.js +0 -36
- package/es/engine/parser/index.js +0 -69
- package/es/engine/parser/segments.js +0 -22
- package/es/engine/transforms/matcherGroup.js +0 -43
- package/es/engine/transforms/matchers.js +0 -109
- package/es/engine/transforms/segment.js +0 -28
- package/es/engine/transforms/set.js +0 -20
- package/es/engine/transforms/unaryNumeric.js +0 -20
- package/es/engine/transforms/whitelist.js +0 -22
- package/es/engine/treatments/index.js +0 -67
- package/es/engine/value/index.js +0 -54
- package/es/engine/value/sanitize.js +0 -125
- package/es/events/index.js +0 -65
- package/es/factory/offline.js +0 -50
- package/es/factory/online.js +0 -113
- package/es/impressions/counter.js +0 -52
- package/es/impressions/hasher/buildKey.js +0 -3
- package/es/impressions/hasher/hashImpression128.js +0 -5
- package/es/impressions/hasher/hashImpression32.js +0 -5
- package/es/impressions/observer/browser.js +0 -9
- package/es/impressions/observer/node.js +0 -9
- package/es/impressions/observer/observer.js +0 -21
- package/es/integrations/browser.js +0 -62
- package/es/integrations/ga/GaToSplit.js +0 -246
- package/es/integrations/ga/SplitToGa.js +0 -127
- package/es/integrations/node.js +0 -3
- package/es/listeners/browser.js +0 -157
- package/es/listeners/node.js +0 -65
- package/es/manager/index.js +0 -104
- package/es/metrics/Collectors.js +0 -100
- package/es/metrics/index.js +0 -157
- package/es/producer/browser/Partial.js +0 -103
- package/es/producer/browser.js +0 -70
- package/es/producer/fetcher/MySegments.js +0 -47
- package/es/producer/fetcher/SegmentChanges.js +0 -52
- package/es/producer/fetcher/SplitChanges.js +0 -46
- package/es/producer/node.js +0 -130
- package/es/producer/offline/browser.js +0 -26
- package/es/producer/offline/node.js +0 -26
- package/es/producer/task.js +0 -50
- package/es/producer/updater/MySegments.js +0 -108
- package/es/producer/updater/SegmentChanges.js +0 -135
- package/es/producer/updater/SplitChanges.js +0 -131
- package/es/producer/updater/SplitChangesFromFeatures.js +0 -21
- package/es/producer/updater/SplitChangesFromFileSystem.js +0 -21
- package/es/producer/updater/SplitChangesFromObject.js +0 -73
- package/es/readiness/index.js +0 -123
- package/es/readiness/statusManager.js +0 -114
- package/es/services/auth/auth.js +0 -25
- package/es/services/auth/index.js +0 -2
- package/es/services/events/bulk.js +0 -22
- package/es/services/events/index.js +0 -17
- package/es/services/getEventSource/node.js +0 -18
- package/es/services/getFetch/browser.js +0 -4
- package/es/services/getFetch/node.js +0 -18
- package/es/services/impressions/bulk.js +0 -26
- package/es/services/impressions/count.js +0 -7
- package/es/services/impressions/dto.js +0 -73
- package/es/services/impressions/index.js +0 -17
- package/es/services/impressions/post.js +0 -22
- package/es/services/metrics/counters.js +0 -24
- package/es/services/metrics/dto.js +0 -38
- package/es/services/metrics/index.js +0 -17
- package/es/services/metrics/times.js +0 -24
- package/es/services/mySegments/get.js +0 -26
- package/es/services/mySegments/index.js +0 -17
- package/es/services/request/index.js +0 -43
- package/es/services/request/options/browser.js +0 -18
- package/es/services/request/options/node.js +0 -28
- package/es/services/segmentChanges/get.js +0 -21
- package/es/services/segmentChanges/index.js +0 -17
- package/es/services/splitChanges/get.js +0 -19
- package/es/services/splitChanges/index.js +0 -17
- package/es/services/splitChanges/offline/browser.js +0 -63
- package/es/services/splitChanges/offline/node.js +0 -176
- package/es/services/splitChanges/offline/parseCondition.js +0 -43
- package/es/services/transport/index.js +0 -51
- package/es/storage/AttributesCache/InMemory.js +0 -85
- package/es/storage/BaseMetricsAsyncCache.js +0 -23
- package/es/storage/CountCache/InMemory.js +0 -48
- package/es/storage/CountCache/InRedis.js +0 -42
- package/es/storage/EventsCache/InMemory.js +0 -109
- package/es/storage/EventsCache/InRedis.js +0 -65
- package/es/storage/ImpressionsCache/InMemory.js +0 -71
- package/es/storage/ImpressionsCache/InRedis.js +0 -73
- package/es/storage/Keys.js +0 -125
- package/es/storage/KeysLocalStorage.js +0 -58
- package/es/storage/LatencyCache/InMemory.js +0 -56
- package/es/storage/LatencyCache/InRedis.js +0 -44
- package/es/storage/LatencyCache/findIndex.js +0 -2
- package/es/storage/Meta.js +0 -7
- package/es/storage/RedisAdapter.js +0 -198
- package/es/storage/SegmentCache/InLocalStorage/index.js +0 -162
- package/es/storage/SegmentCache/InMemory/browser.js +0 -107
- package/es/storage/SegmentCache/InMemory/node.js +0 -82
- package/es/storage/SegmentCache/InRedis/index.js +0 -81
- package/es/storage/SplitCache/InLocalStorage.js +0 -332
- package/es/storage/SplitCache/InMemory.js +0 -162
- package/es/storage/SplitCache/InRedis.js +0 -214
- package/es/storage/SplitCache/killLocally.js +0 -35
- package/es/storage/browser.js +0 -101
- package/es/storage/node.js +0 -81
- package/es/sync/AuthClient/index.js +0 -34
- package/es/sync/PushManager/index.js +0 -315
- package/es/sync/PushManager/mySegmentsV2utils.js +0 -76
- package/es/sync/PushManager/pushRequirements/browser.js +0 -23
- package/es/sync/PushManager/pushRequirements/node.js +0 -18
- package/es/sync/SSEClient/index.js +0 -93
- package/es/sync/SSEHandler/NotificationKeeper.js +0 -97
- package/es/sync/SSEHandler/NotificationParser.js +0 -31
- package/es/sync/SSEHandler/index.js +0 -110
- package/es/sync/SegmentUpdateWorker/browser.js +0 -74
- package/es/sync/SegmentUpdateWorker/node.js +0 -79
- package/es/sync/SplitUpdateWorker/index.js +0 -86
- package/es/sync/browser.js +0 -125
- package/es/sync/constants.js +0 -42
- package/es/sync/node.js +0 -60
- package/es/trackers/event.js +0 -53
- package/es/trackers/impressions.js +0 -132
- package/es/utils/backoff/index.js +0 -51
- package/es/utils/base64/browser.js +0 -19
- package/es/utils/base64/node.js +0 -19
- package/es/utils/base64/package.json +0 -4
- package/es/utils/binarySearch/index.js +0 -50
- package/es/utils/constants/index.js +0 -38
- package/es/utils/context/constants.js +0 -30
- package/es/utils/context/index.js +0 -101
- package/es/utils/decompress/index.js +0 -476
- package/es/utils/fn/repeat.js +0 -58
- package/es/utils/inputValidation/apiKey.js +0 -39
- package/es/utils/inputValidation/attribute.js +0 -22
- package/es/utils/inputValidation/attributes.js +0 -19
- package/es/utils/inputValidation/event.js +0 -23
- package/es/utils/inputValidation/eventProperties.js +0 -69
- package/es/utils/inputValidation/eventValue.js +0 -9
- package/es/utils/inputValidation/index.js +0 -11
- package/es/utils/inputValidation/isOperational.js +0 -14
- package/es/utils/inputValidation/key.js +0 -50
- package/es/utils/inputValidation/split.js +0 -47
- package/es/utils/inputValidation/splitFilters.js +0 -121
- package/es/utils/inputValidation/splits.js +0 -27
- package/es/utils/inputValidation/trafficType.js +0 -55
- package/es/utils/jwt/hashUserKey.js +0 -11
- package/es/utils/jwt/index.js +0 -14
- package/es/utils/key/factory.js +0 -38
- package/es/utils/key/parser.js +0 -34
- package/es/utils/labels/index.js +0 -7
- package/es/utils/lang/Errors.js +0 -41
- package/es/utils/lang/Sets.js +0 -114
- package/es/utils/lang/index.js +0 -305
- package/es/utils/localstorage/isAvailable.js +0 -26
- package/es/utils/logger/LoggerFactory.js +0 -86
- package/es/utils/logger/index.js +0 -97
- package/es/utils/lrucache/linkedlist.js +0 -122
- package/es/utils/lrucache/lru.spec.js +0 -24
- package/es/utils/lrucache/lrucache.js +0 -80
- package/es/utils/now/browser.js +0 -27
- package/es/utils/now/node.js +0 -19
- package/es/utils/now/package.json +0 -4
- package/es/utils/promise/thenable.js +0 -3
- package/es/utils/promise/timeout.js +0 -34
- package/es/utils/promise/wrapper.js +0 -58
- package/es/utils/settings/defaults/browser.js +0 -12
- package/es/utils/settings/defaults/node.js +0 -21
- package/es/utils/settings/defaults/package.json +0 -4
- package/es/utils/settings/impressionsMode.js +0 -16
- package/es/utils/settings/index.js +0 -194
- package/es/utils/settings/integrations/browser.js +0 -8
- package/es/utils/settings/integrations/common.js +0 -30
- package/es/utils/settings/integrations/node.js +0 -7
- package/es/utils/settings/integrations/package.json +0 -4
- package/es/utils/settings/language/browser.js +0 -16
- package/es/utils/settings/language/node.js +0 -16
- package/es/utils/settings/language/package.json +0 -4
- package/es/utils/settings/mode.js +0 -10
- package/es/utils/settings/runtime/browser.js +0 -21
- package/es/utils/settings/runtime/node.js +0 -33
- package/es/utils/settings/runtime/package.json +0 -4
- package/es/utils/settings/storage/browser.js +0 -64
- package/es/utils/settings/storage/node.js +0 -86
- package/es/utils/settings/storage/package.json +0 -4
- package/es/utils/splits/usesSegments.js +0 -21
- package/es/utils/time/index.js +0 -8
- package/es/utils/timeTracker/index.js +0 -216
- package/es/utils/timeTracker/timer.js +0 -25
- package/lib/client/attributesDecoration.js +0 -128
- package/lib/client/browser.js +0 -50
- package/lib/client/client.js +0 -174
- package/lib/client/inputValidation.js +0 -129
- package/lib/client/node.js +0 -14
- package/lib/client/package.json +0 -4
- package/lib/engine/combiners/and.js +0 -65
- package/lib/engine/combiners/ifelseif.js +0 -88
- package/lib/engine/condition/index.js +0 -76
- package/lib/engine/convertions/index.js +0 -36
- package/lib/engine/engine/index.js +0 -71
- package/lib/engine/engine/legacy.js +0 -83
- package/lib/engine/engine/murmur3/common.js +0 -52
- package/lib/engine/engine/murmur3/murmur3.js +0 -90
- package/lib/engine/engine/murmur3/murmur3_128.js +0 -256
- package/lib/engine/engine/murmur3/murmur3_128_x86.js +0 -189
- package/lib/engine/engine/murmur3/murmur3_64.js +0 -57
- package/lib/engine/engine/murmur3/utfx.js +0 -121
- package/lib/engine/evaluator/index.js +0 -129
- package/lib/engine/index.js +0 -128
- package/lib/engine/matchers/all.js +0 -41
- package/lib/engine/matchers/between.js +0 -44
- package/lib/engine/matchers/boolean.js +0 -44
- package/lib/engine/matchers/cont_all.js +0 -61
- package/lib/engine/matchers/cont_any.js +0 -57
- package/lib/engine/matchers/cont_str.js +0 -48
- package/lib/engine/matchers/dependency.js +0 -60
- package/lib/engine/matchers/eq.js +0 -44
- package/lib/engine/matchers/eq_set.js +0 -59
- package/lib/engine/matchers/ew.js +0 -48
- package/lib/engine/matchers/gte.js +0 -44
- package/lib/engine/matchers/index.js +0 -90
- package/lib/engine/matchers/lte.js +0 -44
- package/lib/engine/matchers/part_of.js +0 -59
- package/lib/engine/matchers/segment.js +0 -49
- package/lib/engine/matchers/string.js +0 -53
- package/lib/engine/matchers/sw.js +0 -48
- package/lib/engine/matchers/types.js +0 -57
- package/lib/engine/matchers/whitelist.js +0 -46
- package/lib/engine/parser/index.js +0 -84
- package/lib/engine/parser/segments.js +0 -28
- package/lib/engine/transforms/matcherGroup.js +0 -54
- package/lib/engine/transforms/matchers.js +0 -124
- package/lib/engine/transforms/segment.js +0 -34
- package/lib/engine/transforms/set.js +0 -26
- package/lib/engine/transforms/unaryNumeric.js +0 -26
- package/lib/engine/transforms/whitelist.js +0 -28
- package/lib/engine/treatments/index.js +0 -73
- package/lib/engine/value/index.js +0 -64
- package/lib/engine/value/sanitize.js +0 -137
- package/lib/events/index.js +0 -80
- package/lib/factory/offline.js +0 -62
- package/lib/factory/online.js +0 -129
- package/lib/impressions/counter.js +0 -61
- package/lib/impressions/hasher/buildKey.js +0 -8
- package/lib/impressions/hasher/hashImpression128.js +0 -12
- package/lib/impressions/hasher/hashImpression32.js +0 -14
- package/lib/impressions/observer/browser.js +0 -19
- package/lib/impressions/observer/node.js +0 -19
- package/lib/impressions/observer/observer.js +0 -29
- package/lib/impressions/observer/package.json +0 -4
- package/lib/integrations/browser.js +0 -72
- package/lib/integrations/ga/GaToSplit.js +0 -267
- package/lib/integrations/ga/SplitToGa.js +0 -138
- package/lib/integrations/node.js +0 -9
- package/lib/integrations/package.json +0 -4
- package/lib/listeners/browser.js +0 -173
- package/lib/listeners/node.js +0 -74
- package/lib/listeners/package.json +0 -4
- package/lib/manager/index.js +0 -115
- package/lib/metrics/Collectors.js +0 -118
- package/lib/metrics/index.js +0 -182
- package/lib/producer/browser/Partial.js +0 -114
- package/lib/producer/browser.js +0 -82
- package/lib/producer/fetcher/MySegments.js +0 -59
- package/lib/producer/fetcher/SegmentChanges.js +0 -62
- package/lib/producer/fetcher/SplitChanges.js +0 -58
- package/lib/producer/node.js +0 -142
- package/lib/producer/offline/browser.js +0 -35
- package/lib/producer/offline/node.js +0 -35
- package/lib/producer/offline/package.json +0 -4
- package/lib/producer/package.json +0 -4
- package/lib/producer/task.js +0 -61
- package/lib/producer/updater/MySegments.js +0 -119
- package/lib/producer/updater/SegmentChanges.js +0 -148
- package/lib/producer/updater/SplitChanges.js +0 -145
- package/lib/producer/updater/SplitChangesFromFeatures.js +0 -30
- package/lib/producer/updater/SplitChangesFromFileSystem.js +0 -30
- package/lib/producer/updater/SplitChangesFromObject.js +0 -84
- package/lib/readiness/index.js +0 -132
- package/lib/readiness/statusManager.js +0 -124
- package/lib/services/auth/auth.js +0 -32
- package/lib/services/auth/index.js +0 -11
- package/lib/services/events/bulk.js +0 -31
- package/lib/services/events/index.js +0 -26
- package/lib/services/getEventSource/browser.js +0 -8
- package/lib/services/getEventSource/node.js +0 -26
- package/lib/services/getEventSource/package.json +0 -4
- package/lib/services/getFetch/browser.js +0 -12
- package/lib/services/getFetch/node.js +0 -24
- package/lib/services/getFetch/package.json +0 -4
- package/lib/services/impressions/bulk.js +0 -36
- package/lib/services/impressions/count.js +0 -16
- package/lib/services/impressions/dto.js +0 -81
- package/lib/services/impressions/index.js +0 -26
- package/lib/services/impressions/post.js +0 -31
- package/lib/services/metrics/counters.js +0 -33
- package/lib/services/metrics/dto.js +0 -46
- package/lib/services/metrics/index.js +0 -26
- package/lib/services/metrics/times.js +0 -33
- package/lib/services/mySegments/get.js +0 -35
- package/lib/services/mySegments/index.js +0 -26
- package/lib/services/request/index.js +0 -53
- package/lib/services/request/options/browser.js +0 -23
- package/lib/services/request/options/node.js +0 -37
- package/lib/services/request/options/package.json +0 -4
- package/lib/services/segmentChanges/get.js +0 -29
- package/lib/services/segmentChanges/index.js +0 -26
- package/lib/services/splitChanges/get.js +0 -27
- package/lib/services/splitChanges/index.js +0 -26
- package/lib/services/splitChanges/offline/browser.js +0 -71
- package/lib/services/splitChanges/offline/node.js +0 -189
- package/lib/services/splitChanges/offline/package.json +0 -4
- package/lib/services/splitChanges/offline/parseCondition.js +0 -49
- package/lib/services/transport/index.js +0 -62
- package/lib/storage/AttributesCache/InMemory.js +0 -93
- package/lib/storage/BaseMetricsAsyncCache.js +0 -28
- package/lib/storage/CountCache/InMemory.js +0 -54
- package/lib/storage/CountCache/InRedis.js +0 -50
- package/lib/storage/EventsCache/InMemory.js +0 -118
- package/lib/storage/EventsCache/InRedis.js +0 -74
- package/lib/storage/ImpressionsCache/InMemory.js +0 -77
- package/lib/storage/ImpressionsCache/InRedis.js +0 -79
- package/lib/storage/Keys.js +0 -132
- package/lib/storage/KeysLocalStorage.js +0 -69
- package/lib/storage/LatencyCache/InMemory.js +0 -64
- package/lib/storage/LatencyCache/InRedis.js +0 -53
- package/lib/storage/LatencyCache/findIndex.js +0 -12
- package/lib/storage/Meta.js +0 -12
- package/lib/storage/RedisAdapter.js +0 -212
- package/lib/storage/SegmentCache/InLocalStorage/index.js +0 -171
- package/lib/storage/SegmentCache/InMemory/browser.js +0 -113
- package/lib/storage/SegmentCache/InMemory/node.js +0 -89
- package/lib/storage/SegmentCache/InMemory/package.json +0 -4
- package/lib/storage/SegmentCache/InRedis/index.js +0 -87
- package/lib/storage/SplitCache/InLocalStorage.js +0 -344
- package/lib/storage/SplitCache/InMemory.js +0 -172
- package/lib/storage/SplitCache/InRedis.js +0 -224
- package/lib/storage/SplitCache/killLocally.js +0 -42
- package/lib/storage/browser.js +0 -122
- package/lib/storage/node.js +0 -104
- package/lib/storage/package.json +0 -4
- package/lib/sync/AuthClient/index.js +0 -44
- package/lib/sync/PushManager/index.js +0 -340
- package/lib/sync/PushManager/mySegmentsV2utils.js +0 -87
- package/lib/sync/PushManager/pushRequirements/browser.js +0 -30
- package/lib/sync/PushManager/pushRequirements/node.js +0 -25
- package/lib/sync/PushManager/pushRequirements/package.json +0 -4
- package/lib/sync/SSEClient/index.js +0 -101
- package/lib/sync/SSEHandler/NotificationKeeper.js +0 -104
- package/lib/sync/SSEHandler/NotificationParser.js +0 -39
- package/lib/sync/SSEHandler/index.js +0 -121
- package/lib/sync/SegmentUpdateWorker/browser.js +0 -81
- package/lib/sync/SegmentUpdateWorker/node.js +0 -86
- package/lib/sync/SegmentUpdateWorker/package.json +0 -4
- package/lib/sync/SplitUpdateWorker/index.js +0 -93
- package/lib/sync/browser.js +0 -139
- package/lib/sync/constants.js +0 -59
- package/lib/sync/node.js +0 -71
- package/lib/sync/package.json +0 -4
- package/lib/trackers/event.js +0 -64
- package/lib/trackers/impressions.js +0 -146
- package/lib/utils/backoff/index.js +0 -57
- package/lib/utils/base64/browser.js +0 -26
- package/lib/utils/base64/node.js +0 -26
- package/lib/utils/base64/package.json +0 -4
- package/lib/utils/binarySearch/index.js +0 -56
- package/lib/utils/constants/index.js +0 -60
- package/lib/utils/context/constants.js +0 -49
- package/lib/utils/context/index.js +0 -111
- package/lib/utils/decompress/index.js +0 -483
- package/lib/utils/fn/repeat.js +0 -64
- package/lib/utils/inputValidation/apiKey.js +0 -51
- package/lib/utils/inputValidation/attribute.js +0 -32
- package/lib/utils/inputValidation/attributes.js +0 -32
- package/lib/utils/inputValidation/event.js +0 -33
- package/lib/utils/inputValidation/eventProperties.js +0 -78
- package/lib/utils/inputValidation/eventValue.js +0 -19
- package/lib/utils/inputValidation/index.js +0 -48
- package/lib/utils/inputValidation/isOperational.js +0 -25
- package/lib/utils/inputValidation/key.js +0 -59
- package/lib/utils/inputValidation/split.js +0 -60
- package/lib/utils/inputValidation/splitFilters.js +0 -134
- package/lib/utils/inputValidation/splits.js +0 -38
- package/lib/utils/inputValidation/trafficType.js +0 -68
- package/lib/utils/jwt/hashUserKey.js +0 -19
- package/lib/utils/jwt/index.js +0 -19
- package/lib/utils/key/factory.js +0 -46
- package/lib/utils/key/parser.js +0 -42
- package/lib/utils/labels/index.js +0 -18
- package/lib/utils/lang/Errors.js +0 -58
- package/lib/utils/lang/Sets.js +0 -127
- package/lib/utils/lang/index.js +0 -350
- package/lib/utils/localstorage/isAvailable.js +0 -31
- package/lib/utils/logger/LoggerFactory.js +0 -98
- package/lib/utils/logger/index.js +0 -109
- package/lib/utils/lrucache/linkedlist.js +0 -132
- package/lib/utils/lrucache/lru.spec.js +0 -30
- package/lib/utils/lrucache/lrucache.js +0 -88
- package/lib/utils/now/browser.js +0 -33
- package/lib/utils/now/node.js +0 -24
- package/lib/utils/now/package.json +0 -4
- package/lib/utils/promise/thenable.js +0 -10
- package/lib/utils/promise/timeout.js +0 -40
- package/lib/utils/promise/wrapper.js +0 -63
- package/lib/utils/settings/defaults/package.json +0 -4
- package/lib/utils/settings/impressionsMode.js +0 -26
- package/lib/utils/settings/index.js +0 -214
- package/lib/utils/settings/integrations/browser.js +0 -17
- package/lib/utils/settings/integrations/common.js +0 -40
- package/lib/utils/settings/integrations/node.js +0 -13
- package/lib/utils/settings/integrations/package.json +0 -4
- package/lib/utils/settings/language/browser.js +0 -22
- package/lib/utils/settings/language/node.js +0 -22
- package/lib/utils/settings/language/package.json +0 -4
- package/lib/utils/settings/mode.js +0 -16
- package/lib/utils/settings/runtime/browser.js +0 -26
- package/lib/utils/settings/runtime/node.js +0 -43
- package/lib/utils/settings/runtime/package.json +0 -4
- package/lib/utils/settings/storage/browser.js +0 -75
- package/lib/utils/settings/storage/node.js +0 -92
- package/lib/utils/settings/storage/package.json +0 -4
- package/lib/utils/splits/usesSegments.js +0 -27
- package/lib/utils/time/index.js +0 -12
- package/lib/utils/timeTracker/index.js +0 -213
- package/lib/utils/timeTracker/timer.js +0 -33
- package/src/client/attributesDecoration.js +0 -112
- package/src/client/browser.js +0 -41
- package/src/client/client.js +0 -131
- package/src/client/inputValidation.js +0 -130
- package/src/client/node.js +0 -8
- package/src/client/package.json +0 -4
- package/src/engine/combiners/and.js +0 -55
- package/src/engine/combiners/ifelseif.js +0 -74
- package/src/engine/condition/index.js +0 -65
- package/src/engine/convertions/index.js +0 -22
- package/src/engine/engine/index.js +0 -63
- package/src/engine/engine/legacy.js +0 -66
- package/src/engine/engine/murmur3/common.js +0 -54
- package/src/engine/engine/murmur3/murmur3.js +0 -79
- package/src/engine/engine/murmur3/murmur3_128.js +0 -273
- package/src/engine/engine/murmur3/murmur3_128_x86.js +0 -188
- package/src/engine/engine/murmur3/murmur3_64.js +0 -34
- package/src/engine/engine/murmur3/utfx.js +0 -111
- package/src/engine/evaluator/index.js +0 -148
- package/src/engine/index.js +0 -123
- package/src/engine/matchers/all.js +0 -29
- package/src/engine/matchers/between.js +0 -30
- package/src/engine/matchers/boolean.js +0 -29
- package/src/engine/matchers/cont_all.js +0 -40
- package/src/engine/matchers/cont_any.js +0 -35
- package/src/engine/matchers/cont_str.js +0 -31
- package/src/engine/matchers/dependency.js +0 -52
- package/src/engine/matchers/eq.js +0 -30
- package/src/engine/matchers/eq_set.js +0 -37
- package/src/engine/matchers/ew.js +0 -31
- package/src/engine/matchers/gte.js +0 -30
- package/src/engine/matchers/index.js +0 -71
- package/src/engine/matchers/lte.js +0 -30
- package/src/engine/matchers/part_of.js +0 -37
- package/src/engine/matchers/segment.js +0 -41
- package/src/engine/matchers/string.js +0 -39
- package/src/engine/matchers/sw.js +0 -31
- package/src/engine/matchers/types.js +0 -52
- package/src/engine/matchers/whitelist.js +0 -30
- package/src/engine/parser/index.js +0 -79
- package/src/engine/parser/segments.js +0 -31
- package/src/engine/transforms/matcherGroup.js +0 -45
- package/src/engine/transforms/matchers.js +0 -118
- package/src/engine/transforms/segment.js +0 -23
- package/src/engine/transforms/set.js +0 -20
- package/src/engine/transforms/unaryNumeric.js +0 -20
- package/src/engine/transforms/whitelist.js +0 -22
- package/src/engine/treatments/index.js +0 -67
- package/src/engine/value/index.js +0 -53
- package/src/engine/value/sanitize.js +0 -117
- package/src/events/index.js +0 -62
- package/src/factory/offline.js +0 -60
- package/src/factory/online.js +0 -127
- package/src/impressions/counter.js +0 -43
- package/src/impressions/hasher/buildKey.js +0 -3
- package/src/impressions/hasher/hashImpression128.js +0 -6
- package/src/impressions/hasher/hashImpression32.js +0 -6
- package/src/impressions/observer/browser.js +0 -8
- package/src/impressions/observer/node.js +0 -8
- package/src/impressions/observer/observer.js +0 -17
- package/src/impressions/observer/package.json +0 -4
- package/src/integrations/browser.js +0 -57
- package/src/integrations/ga/GaToSplit.js +0 -278
- package/src/integrations/ga/SplitToGa.js +0 -125
- package/src/integrations/node.js +0 -4
- package/src/integrations/package.json +0 -4
- package/src/listeners/browser.js +0 -137
- package/src/listeners/node.js +0 -59
- package/src/listeners/package.json +0 -4
- package/src/manager/index.js +0 -103
- package/src/metrics/Collectors.js +0 -77
- package/src/metrics/index.js +0 -174
- package/src/producer/browser/Partial.js +0 -104
- package/src/producer/browser.js +0 -82
- package/src/producer/fetcher/MySegments.js +0 -40
- package/src/producer/fetcher/SegmentChanges.js +0 -52
- package/src/producer/fetcher/SplitChanges.js +0 -39
- package/src/producer/node.js +0 -142
- package/src/producer/offline/browser.js +0 -28
- package/src/producer/offline/node.js +0 -28
- package/src/producer/offline/package.json +0 -4
- package/src/producer/package.json +0 -4
- package/src/producer/task.js +0 -57
- package/src/producer/updater/MySegments.js +0 -104
- package/src/producer/updater/SegmentChanges.js +0 -126
- package/src/producer/updater/SplitChanges.js +0 -138
- package/src/producer/updater/SplitChangesFromFeatures.js +0 -23
- package/src/producer/updater/SplitChangesFromFileSystem.js +0 -23
- package/src/producer/updater/SplitChangesFromObject.js +0 -81
- package/src/readiness/index.js +0 -125
- package/src/readiness/statusManager.js +0 -121
- package/src/services/auth/auth.js +0 -21
- package/src/services/auth/index.js +0 -3
- package/src/services/events/bulk.js +0 -23
- package/src/services/events/index.js +0 -18
- package/src/services/getEventSource/browser.js +0 -3
- package/src/services/getEventSource/package.json +0 -4
- package/src/services/getFetch/package.json +0 -4
- package/src/services/impressions/bulk.js +0 -26
- package/src/services/impressions/count.js +0 -8
- package/src/services/impressions/dto.js +0 -71
- package/src/services/impressions/index.js +0 -18
- package/src/services/impressions/post.js +0 -23
- package/src/services/metrics/counters.js +0 -25
- package/src/services/metrics/dto.js +0 -44
- package/src/services/metrics/index.js +0 -18
- package/src/services/metrics/times.js +0 -25
- package/src/services/mySegments/get.js +0 -27
- package/src/services/mySegments/index.js +0 -18
- package/src/services/request/index.js +0 -43
- package/src/services/request/options/browser.js +0 -18
- package/src/services/request/options/node.js +0 -30
- package/src/services/request/options/package.json +0 -4
- package/src/services/segmentChanges/get.js +0 -20
- package/src/services/segmentChanges/index.js +0 -18
- package/src/services/splitChanges/get.js +0 -20
- package/src/services/splitChanges/index.js +0 -18
- package/src/services/splitChanges/offline/browser.js +0 -66
- package/src/services/splitChanges/offline/node.js +0 -190
- package/src/services/splitChanges/offline/package.json +0 -4
- package/src/services/splitChanges/offline/parseCondition.js +0 -52
- package/src/services/transport/index.js +0 -44
- package/src/storage/AttributesCache/InMemory.js +0 -76
- package/src/storage/BaseMetricsAsyncCache.js +0 -14
- package/src/storage/CountCache/InMemory.js +0 -48
- package/src/storage/CountCache/InRedis.js +0 -32
- package/src/storage/EventsCache/InMemory.js +0 -99
- package/src/storage/EventsCache/InRedis.js +0 -62
- package/src/storage/ImpressionsCache/InMemory.js +0 -62
- package/src/storage/ImpressionsCache/InRedis.js +0 -65
- package/src/storage/Keys.js +0 -122
- package/src/storage/KeysLocalStorage.js +0 -52
- package/src/storage/LatencyCache/InMemory.js +0 -56
- package/src/storage/LatencyCache/InRedis.js +0 -35
- package/src/storage/LatencyCache/findIndex.js +0 -7
- package/src/storage/Meta.js +0 -7
- package/src/storage/RedisAdapter.js +0 -170
- package/src/storage/SegmentCache/InLocalStorage/index.js +0 -140
- package/src/storage/SegmentCache/InMemory/browser.js +0 -99
- package/src/storage/SegmentCache/InMemory/node.js +0 -84
- package/src/storage/SegmentCache/InMemory/package.json +0 -4
- package/src/storage/SegmentCache/InRedis/index.js +0 -71
- package/src/storage/SplitCache/InLocalStorage.js +0 -324
- package/src/storage/SplitCache/InMemory.js +0 -145
- package/src/storage/SplitCache/InRedis.js +0 -187
- package/src/storage/SplitCache/killLocally.js +0 -33
- package/src/storage/browser.js +0 -110
- package/src/storage/node.js +0 -83
- package/src/storage/package.json +0 -4
- package/src/sync/AuthClient/index.js +0 -31
- package/src/sync/PushManager/index.js +0 -328
- package/src/sync/PushManager/mySegmentsV2utils.js +0 -76
- package/src/sync/PushManager/pushRequirements/browser.js +0 -20
- package/src/sync/PushManager/pushRequirements/node.js +0 -16
- package/src/sync/PushManager/pushRequirements/package.json +0 -4
- package/src/sync/SSEClient/index.js +0 -92
- package/src/sync/SSEHandler/NotificationKeeper.js +0 -90
- package/src/sync/SSEHandler/NotificationParser.js +0 -35
- package/src/sync/SSEHandler/index.js +0 -110
- package/src/sync/SegmentUpdateWorker/browser.js +0 -67
- package/src/sync/SegmentUpdateWorker/node.js +0 -73
- package/src/sync/SegmentUpdateWorker/package.json +0 -4
- package/src/sync/SplitUpdateWorker/index.js +0 -79
- package/src/sync/browser.js +0 -130
- package/src/sync/constants.js +0 -43
- package/src/sync/node.js +0 -66
- package/src/sync/package.json +0 -4
- package/src/trackers/event.js +0 -47
- package/src/trackers/impressions.js +0 -123
- package/src/utils/backoff/index.js +0 -46
- package/src/utils/base64/browser.js +0 -19
- package/src/utils/base64/node.js +0 -19
- package/src/utils/base64/package.json +0 -4
- package/src/utils/binarySearch/index.js +0 -50
- package/src/utils/constants/index.js +0 -41
- package/src/utils/context/constants.js +0 -18
- package/src/utils/context/index.js +0 -84
- package/src/utils/decompress/index.js +0 -428
- package/src/utils/fn/repeat.js +0 -48
- package/src/utils/inputValidation/apiKey.js +0 -42
- package/src/utils/inputValidation/attribute.js +0 -22
- package/src/utils/inputValidation/attributes.js +0 -26
- package/src/utils/inputValidation/event.js +0 -23
- package/src/utils/inputValidation/eventProperties.js +0 -65
- package/src/utils/inputValidation/eventValue.js +0 -11
- package/src/utils/inputValidation/index.js +0 -11
- package/src/utils/inputValidation/isOperational.js +0 -16
- package/src/utils/inputValidation/key.js +0 -53
- package/src/utils/inputValidation/split.js +0 -42
- package/src/utils/inputValidation/splitFilters.js +0 -108
- package/src/utils/inputValidation/splits.js +0 -21
- package/src/utils/inputValidation/trafficType.js +0 -58
- package/src/utils/jwt/hashUserKey.js +0 -11
- package/src/utils/jwt/index.js +0 -15
- package/src/utils/key/factory.js +0 -34
- package/src/utils/key/parser.js +0 -34
- package/src/utils/labels/index.js +0 -7
- package/src/utils/lang/Errors.js +0 -19
- package/src/utils/lang/Sets.js +0 -94
- package/src/utils/lang/index.js +0 -291
- package/src/utils/localstorage/isAvailable.js +0 -26
- package/src/utils/logger/LoggerFactory.js +0 -90
- package/src/utils/logger/index.js +0 -93
- package/src/utils/lrucache/linkedlist.js +0 -116
- package/src/utils/lrucache/lru.spec.js +0 -26
- package/src/utils/lrucache/lrucache.js +0 -49
- package/src/utils/now/browser.js +0 -29
- package/src/utils/now/node.js +0 -21
- package/src/utils/now/package.json +0 -4
- package/src/utils/promise/thenable.js +0 -1
- package/src/utils/promise/timeout.js +0 -38
- package/src/utils/promise/wrapper.js +0 -60
- package/src/utils/settings/defaults/browser.js +0 -12
- package/src/utils/settings/defaults/node.js +0 -21
- package/src/utils/settings/defaults/package.json +0 -4
- package/src/utils/settings/impressionsMode.js +0 -15
- package/src/utils/settings/index.js +0 -217
- package/src/utils/settings/integrations/browser.js +0 -8
- package/src/utils/settings/integrations/common.js +0 -32
- package/src/utils/settings/integrations/node.js +0 -7
- package/src/utils/settings/integrations/package.json +0 -4
- package/src/utils/settings/language/browser.js +0 -17
- package/src/utils/settings/language/node.js +0 -17
- package/src/utils/settings/language/package.json +0 -4
- package/src/utils/settings/mode.js +0 -12
- package/src/utils/settings/runtime/browser.js +0 -22
- package/src/utils/settings/runtime/node.js +0 -34
- package/src/utils/settings/runtime/package.json +0 -4
- package/src/utils/settings/storage/browser.js +0 -70
- package/src/utils/settings/storage/package.json +0 -4
- package/src/utils/splits/usesSegments.js +0 -17
- package/src/utils/time/index.js +0 -8
- package/src/utils/timeTracker/index.js +0 -223
- package/src/utils/timeTracker/timer.js +0 -27
package/src/utils/lang/index.js
DELETED
|
@@ -1,291 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Checks if the target string starts with the sub string.
|
|
3
|
-
*/
|
|
4
|
-
export function startsWith(target, sub) {
|
|
5
|
-
if (!(isString(target) && isString(sub))) {
|
|
6
|
-
return false;
|
|
7
|
-
}
|
|
8
|
-
return target.slice(0, sub.length) === sub;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* Checks if the target string ends with the sub string.
|
|
13
|
-
*/
|
|
14
|
-
export function endsWith(target, sub, caseInsensitive = false) {
|
|
15
|
-
if (!(isString(target) && isString(sub))) {
|
|
16
|
-
return false;
|
|
17
|
-
}
|
|
18
|
-
if (caseInsensitive) {
|
|
19
|
-
target = target.toLowerCase();
|
|
20
|
-
sub = sub.toLowerCase();
|
|
21
|
-
}
|
|
22
|
-
return target.slice(target.length - sub.length) === sub;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
/**
|
|
26
|
-
* Safely retrieve the specified prop from obj. If we can't retrieve
|
|
27
|
-
* that property value, we return the default value.
|
|
28
|
-
*/
|
|
29
|
-
export function get(obj, prop, val) {
|
|
30
|
-
let res = val;
|
|
31
|
-
|
|
32
|
-
try { // No risks nor lots of checks.
|
|
33
|
-
const pathPieces = prop.split('.');
|
|
34
|
-
let partial = obj;
|
|
35
|
-
pathPieces.forEach(pathPiece => partial = partial[pathPiece]);
|
|
36
|
-
|
|
37
|
-
if (typeof partial !== 'undefined') res = partial;
|
|
38
|
-
} catch (e) {
|
|
39
|
-
// noop
|
|
40
|
-
}
|
|
41
|
-
return res;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
/**
|
|
45
|
-
* Evaluates iteratee for each element of the source array. Returns the index of the first element
|
|
46
|
-
* for which iteratee returns truthy. If no element is found or there's an issue with the params it returns -1.
|
|
47
|
-
*/
|
|
48
|
-
export function findIndex(source, iteratee) {
|
|
49
|
-
if (Array.isArray(source) && typeof iteratee === 'function') {
|
|
50
|
-
for (let i = 0; i < source.length; i++) {
|
|
51
|
-
if (iteratee(source[i], i, source) === true) {
|
|
52
|
-
return i;
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
return -1;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
/**
|
|
61
|
-
* Loops through a source collection (an object or an array) running iteratee
|
|
62
|
-
* against each element. It returns the first element for which iteratee returned
|
|
63
|
-
* a truthy value and stops the loop.
|
|
64
|
-
* Iteratee receives three arguments (element, key/index, collection)
|
|
65
|
-
*/
|
|
66
|
-
export function find(source, iteratee) {
|
|
67
|
-
let res;
|
|
68
|
-
|
|
69
|
-
if (isObject(source)) {
|
|
70
|
-
const keys = Object.keys(source);
|
|
71
|
-
for (let i = 0; i < keys.length && !res; i++) {
|
|
72
|
-
const key = keys[i];
|
|
73
|
-
const iterateeResult = iteratee(source[key], key, source);
|
|
74
|
-
|
|
75
|
-
if (iterateeResult) res = source[key];
|
|
76
|
-
}
|
|
77
|
-
} else if (Array.isArray(source)) {
|
|
78
|
-
for (let i = 0; i < source.length && !res; i++) {
|
|
79
|
-
const iterateeResult = iteratee(source[i], i, source);
|
|
80
|
-
|
|
81
|
-
if (iterateeResult) res = source[i];
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
return res;
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
/**
|
|
89
|
-
* Checks if a given value is a string.
|
|
90
|
-
*/
|
|
91
|
-
export function isString(val) {
|
|
92
|
-
return typeof val === 'string' || val instanceof String;
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
/**
|
|
96
|
-
* Checks if a given value is a finite value of number type or Number object.
|
|
97
|
-
* Unlike `Number.isFinite`, it also tests Number object instances.
|
|
98
|
-
* Unlike global `isFinite`, it returns false if the value is not a number or Number object instance.
|
|
99
|
-
* @TODO remove `isFinite` once `Number.isFinite` is fully supported by targets
|
|
100
|
-
*/
|
|
101
|
-
export function numberIsFinite(val) {
|
|
102
|
-
if (val instanceof Number) val = val.valueOf();
|
|
103
|
-
// eslint-disable-next-line compat/compat
|
|
104
|
-
if (typeof val === 'number') return Number.isFinite ? Number.isFinite(val) : isFinite(val);
|
|
105
|
-
return false;
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
/**
|
|
109
|
-
* Checks if a given value is a NaN value of number type or Number object.
|
|
110
|
-
* Unlike `Number.isNaN`, it also tests Number object instances.
|
|
111
|
-
* Unlike global `isNan`, it returns false if the value is not a number or Number object instance.
|
|
112
|
-
*/
|
|
113
|
-
export function numberIsNaN(val) {
|
|
114
|
-
if (val instanceof Number) val = val.valueOf();
|
|
115
|
-
// @TODO replace with `Number.isNaN` once it is fully supported by targets
|
|
116
|
-
// eslint-disable-next-line eqeqeq
|
|
117
|
-
return val !== val;
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
/**
|
|
121
|
-
* Checks if a given value is an integer value of number type or Number object.
|
|
122
|
-
* Unlike `Number.isInteger`, it also tests Number object instances.
|
|
123
|
-
* @TODO remove shim once `Number.isInteger` is fully supported by targets
|
|
124
|
-
*/
|
|
125
|
-
export function numberIsInteger(val) {
|
|
126
|
-
if (val instanceof Number) val = val.valueOf();
|
|
127
|
-
// eslint-disable-next-line compat/compat
|
|
128
|
-
if (typeof val === 'number') return Number.isInteger ? Number.isInteger(val) : isFinite(val) && Math.floor(val) === val;
|
|
129
|
-
return false;
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
let uniqueIdCounter = -1;
|
|
133
|
-
|
|
134
|
-
/**
|
|
135
|
-
* Returns a number to be used as ID, which will be unique.
|
|
136
|
-
*/
|
|
137
|
-
export function uniqueId() {
|
|
138
|
-
return uniqueIdCounter++;
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
/**
|
|
142
|
-
* Validates if a value is an object.
|
|
143
|
-
*/
|
|
144
|
-
export function isObject(obj) {
|
|
145
|
-
return obj && typeof obj === 'object' && obj.constructor === Object;
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
/**
|
|
149
|
-
* There are some assumptions here. It's for internal use and we don't need verbose errors
|
|
150
|
-
* or to ensure the data types or whatever. Parameters should always be correct (at least have a target and a source, of type object).
|
|
151
|
-
*/
|
|
152
|
-
export function merge(target, source, ...rest) {
|
|
153
|
-
let res = target;
|
|
154
|
-
|
|
155
|
-
isObject(source) && Object.keys(source).forEach(key => {
|
|
156
|
-
let val = source[key];
|
|
157
|
-
|
|
158
|
-
if (isObject(val)) {
|
|
159
|
-
if (res[key] && isObject(res[key])) { // If both are objects, merge into a new one.
|
|
160
|
-
val = merge({}, res[key], val);
|
|
161
|
-
} else { // else make a copy.
|
|
162
|
-
val = merge({}, val);
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
// We skip undefined values.
|
|
166
|
-
if (val !== undefined) res[key] = val;
|
|
167
|
-
});
|
|
168
|
-
|
|
169
|
-
if (rest && rest.length) {
|
|
170
|
-
const nextSource = rest.splice(0, 1)[0];
|
|
171
|
-
res = merge(res, nextSource, ...rest);
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
return res;
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
/**
|
|
178
|
-
* Removes duplicate items on an array of strings.
|
|
179
|
-
*/
|
|
180
|
-
export function uniq(arr) {
|
|
181
|
-
const seen = {};
|
|
182
|
-
return arr.filter(function (item) {
|
|
183
|
-
return Object.prototype.hasOwnProperty.call(seen, item) ? false : seen[item] = true;
|
|
184
|
-
});
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
/**
|
|
188
|
-
* Removes duplicate items on an array of objects using an optional `stringify` function as equality criteria.
|
|
189
|
-
* It uses JSON.stringify as default criteria.
|
|
190
|
-
*/
|
|
191
|
-
export function unicAsStrings(arr, stringify = JSON.stringify) {
|
|
192
|
-
const seen = {};
|
|
193
|
-
return arr.filter(function (item) {
|
|
194
|
-
const itemString = stringify(item);
|
|
195
|
-
return Object.prototype.hasOwnProperty.call(seen, itemString) ? false : seen[itemString] = true;
|
|
196
|
-
});
|
|
197
|
-
}
|
|
198
|
-
|
|
199
|
-
/**
|
|
200
|
-
* Transforms a value into it's string representation.
|
|
201
|
-
*/
|
|
202
|
-
export function toString(val) {
|
|
203
|
-
if (val == null) return '';
|
|
204
|
-
if (typeof val === 'string') return val;
|
|
205
|
-
if (Array.isArray(val)) return val.map(val => isString(val) ? val : '') + '';
|
|
206
|
-
|
|
207
|
-
let result = val + '';
|
|
208
|
-
return (result === '0' && (1 / val) === Number.NEGATIVE_INFINITY) ? '-0' : result;
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
/**
|
|
212
|
-
* Transforms a value into a number.
|
|
213
|
-
* Note: We're not expecting anything fancy here. If we are at some point, add more type checks.
|
|
214
|
-
*/
|
|
215
|
-
export function toNumber(val) {
|
|
216
|
-
if (typeof val === 'number') return val;
|
|
217
|
-
|
|
218
|
-
if (isObject(val) && typeof val.valueOf === 'function') {
|
|
219
|
-
const valOf = val.valueOf();
|
|
220
|
-
val = isObject(valOf) ? valOf + '' : valOf;
|
|
221
|
-
}
|
|
222
|
-
|
|
223
|
-
if (typeof val !== 'string') {
|
|
224
|
-
return val === 0 ? val : +val;
|
|
225
|
-
}
|
|
226
|
-
|
|
227
|
-
// Remove trailing whitespaces.
|
|
228
|
-
val = val.replace(/^\s+|\s+$/g, '');
|
|
229
|
-
|
|
230
|
-
return +val;
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
/**
|
|
234
|
-
* Executes iteratee for given obj own props.
|
|
235
|
-
*/
|
|
236
|
-
export function forOwn(obj, iteratee) {
|
|
237
|
-
const keys = Object.keys(obj);
|
|
238
|
-
|
|
239
|
-
keys.forEach(key => iteratee(obj[key], key, obj));
|
|
240
|
-
|
|
241
|
-
return obj;
|
|
242
|
-
}
|
|
243
|
-
|
|
244
|
-
/**
|
|
245
|
-
* Parses an array into a map of different arrays, grouping by the specified prop value.
|
|
246
|
-
*/
|
|
247
|
-
export function groupBy(source, prop) {
|
|
248
|
-
const map = {};
|
|
249
|
-
|
|
250
|
-
if (Array.isArray(source) && isString(prop)) {
|
|
251
|
-
for (let i = 0; i < source.length; i++) {
|
|
252
|
-
const key = source[i][prop];
|
|
253
|
-
|
|
254
|
-
// Skip the element if the key is not a string.
|
|
255
|
-
if (isString(key)) {
|
|
256
|
-
if (!map[key]) map[key] = [];
|
|
257
|
-
|
|
258
|
-
map[key].push(source[i]);
|
|
259
|
-
}
|
|
260
|
-
}
|
|
261
|
-
}
|
|
262
|
-
|
|
263
|
-
return map;
|
|
264
|
-
}
|
|
265
|
-
|
|
266
|
-
/**
|
|
267
|
-
* Returns the name of a given function.
|
|
268
|
-
*/
|
|
269
|
-
export function getFnName(fn) {
|
|
270
|
-
if (fn.name) return fn.name;
|
|
271
|
-
|
|
272
|
-
return (fn.toString().match(/function (.+?)\(/) || ['', ''])[1];
|
|
273
|
-
}
|
|
274
|
-
|
|
275
|
-
/**
|
|
276
|
-
* Shallow clone an object
|
|
277
|
-
*/
|
|
278
|
-
export function shallowClone(obj) {
|
|
279
|
-
const keys = Object.keys(obj);
|
|
280
|
-
const output = {};
|
|
281
|
-
|
|
282
|
-
for (let i = 0; i < keys.length; i++) {
|
|
283
|
-
output[keys[i]] = obj[keys[i]];
|
|
284
|
-
}
|
|
285
|
-
|
|
286
|
-
return output;
|
|
287
|
-
}
|
|
288
|
-
|
|
289
|
-
export function isBoolean(val) {
|
|
290
|
-
return val === true || val === false;
|
|
291
|
-
}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
Copyright 2016 Split Software
|
|
3
|
-
|
|
4
|
-
Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
-
you may not use this file except in compliance with the License.
|
|
6
|
-
You may obtain a copy of the License at
|
|
7
|
-
|
|
8
|
-
http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
-
|
|
10
|
-
Unless required by applicable law or agreed to in writing, software
|
|
11
|
-
distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
-
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
-
See the License for the specific language governing permissions and
|
|
14
|
-
limitations under the License.
|
|
15
|
-
**/
|
|
16
|
-
|
|
17
|
-
export default function isLocalStorageAvailable() {
|
|
18
|
-
var mod = '__SPLITSOFTWARE__';
|
|
19
|
-
try {
|
|
20
|
-
localStorage.setItem(mod, mod);
|
|
21
|
-
localStorage.removeItem(mod);
|
|
22
|
-
return true;
|
|
23
|
-
} catch(e) {
|
|
24
|
-
return false;
|
|
25
|
-
}
|
|
26
|
-
}
|
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
/* eslint-disable no-console */
|
|
2
|
-
'use strict';
|
|
3
|
-
|
|
4
|
-
import objectAssign from 'object-assign';
|
|
5
|
-
|
|
6
|
-
export const LogLevels = {
|
|
7
|
-
'DEBUG': 'DEBUG',
|
|
8
|
-
'INFO': 'INFO',
|
|
9
|
-
'WARN': 'WARN',
|
|
10
|
-
'ERROR': 'ERROR',
|
|
11
|
-
'NONE': 'NONE'
|
|
12
|
-
};
|
|
13
|
-
|
|
14
|
-
const LogLevelIndexes = {
|
|
15
|
-
DEBUG: 1,
|
|
16
|
-
INFO: 2,
|
|
17
|
-
WARN: 3,
|
|
18
|
-
ERROR: 4,
|
|
19
|
-
NONE: 5
|
|
20
|
-
};
|
|
21
|
-
|
|
22
|
-
// DEBUG is the default. The log level is not specific to an SDK instance.
|
|
23
|
-
let GlobalLogLevel = LogLevelIndexes.DEBUG;
|
|
24
|
-
|
|
25
|
-
/**
|
|
26
|
-
* @param {'DEBUG'|'INFO'|'WARN'|'ERROR'|'NONE'} level
|
|
27
|
-
*/
|
|
28
|
-
export const setLogLevel = (level) => {
|
|
29
|
-
GlobalLogLevel = LogLevelIndexes[level];
|
|
30
|
-
};
|
|
31
|
-
|
|
32
|
-
const defaultOptions = {
|
|
33
|
-
showLevel: true,
|
|
34
|
-
displayAllErrors: false
|
|
35
|
-
};
|
|
36
|
-
|
|
37
|
-
export class Logger {
|
|
38
|
-
constructor(category, options) {
|
|
39
|
-
this.category = category;
|
|
40
|
-
this.options = objectAssign({}, defaultOptions, options);
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
debug(msg) {
|
|
44
|
-
if (this._shouldLog(LogLevelIndexes.DEBUG))
|
|
45
|
-
this._log(LogLevels.DEBUG, msg);
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
info(msg) {
|
|
49
|
-
if (this._shouldLog(LogLevelIndexes.INFO))
|
|
50
|
-
this._log(LogLevels.INFO, msg);
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
warn(msg) {
|
|
54
|
-
if (this._shouldLog(LogLevelIndexes.WARN))
|
|
55
|
-
this._log(LogLevels.WARN, msg);
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
error(msg) {
|
|
59
|
-
if (this.options.displayAllErrors || this._shouldLog(LogLevelIndexes.ERROR))
|
|
60
|
-
this._log(LogLevels.ERROR, msg);
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
_log(level, text) {
|
|
64
|
-
const formattedText = this._generateLogMessage(level, text);
|
|
65
|
-
|
|
66
|
-
console.log(formattedText);
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
_generateLogMessage(level, text) {
|
|
70
|
-
const textPre = ' => ';
|
|
71
|
-
let result = '';
|
|
72
|
-
|
|
73
|
-
if (this.options.showLevel) {
|
|
74
|
-
result += '[' + level + ']' + (level === LogLevels.INFO || level === LogLevels.WARN ? ' ' : '') + ' ';
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
if (this.category) {
|
|
78
|
-
result += this.category + textPre;
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
return result += text;
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
/**
|
|
85
|
-
* @param {number} level
|
|
86
|
-
*/
|
|
87
|
-
_shouldLog(level) {
|
|
88
|
-
return level >= GlobalLogLevel;
|
|
89
|
-
}
|
|
90
|
-
}
|
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
Copyright 2016 Split Software
|
|
3
|
-
|
|
4
|
-
Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
-
you may not use this file except in compliance with the License.
|
|
6
|
-
You may obtain a copy of the License at
|
|
7
|
-
|
|
8
|
-
http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
-
|
|
10
|
-
Unless required by applicable law or agreed to in writing, software
|
|
11
|
-
distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
-
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
-
See the License for the specific language governing permissions and
|
|
14
|
-
limitations under the License.
|
|
15
|
-
**/
|
|
16
|
-
|
|
17
|
-
import { Logger, LogLevels, setLogLevel } from './LoggerFactory';
|
|
18
|
-
import isLocalStorageAvailable from '../localstorage/isAvailable';
|
|
19
|
-
import { find, merge } from '../lang';
|
|
20
|
-
|
|
21
|
-
const isLogLevelString = str => !!find(LogLevels, lvl => str === lvl);
|
|
22
|
-
|
|
23
|
-
const defaultOptions = {
|
|
24
|
-
showLevel: true,
|
|
25
|
-
displayAllErrors: false
|
|
26
|
-
};
|
|
27
|
-
|
|
28
|
-
const LS_KEY = 'splitio_debug';
|
|
29
|
-
const ENV_VAR_KEY = 'SPLITIO_DEBUG';
|
|
30
|
-
let isNode = false;
|
|
31
|
-
|
|
32
|
-
// We check for version truthiness since most shims will have that as empty string.
|
|
33
|
-
if (typeof process !== 'undefined' && typeof process.version !== 'undefined' && !!process.version) {
|
|
34
|
-
isNode = true;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
const initialState = String(
|
|
38
|
-
isNode ?
|
|
39
|
-
process.env[ENV_VAR_KEY] :
|
|
40
|
-
isLocalStorageAvailable() ?
|
|
41
|
-
localStorage.getItem(LS_KEY) : ''
|
|
42
|
-
);
|
|
43
|
-
|
|
44
|
-
const createLog = (namespace, options = {}) => new Logger(namespace, merge(options, defaultOptions));
|
|
45
|
-
|
|
46
|
-
const ownLog = createLog('splitio-utils:logger');
|
|
47
|
-
|
|
48
|
-
/**
|
|
49
|
-
* The public Logger utility API.
|
|
50
|
-
*/
|
|
51
|
-
export const API = {
|
|
52
|
-
/**
|
|
53
|
-
* Enables all the logs.
|
|
54
|
-
*/
|
|
55
|
-
enable() {
|
|
56
|
-
setLogLevel(LogLevels.DEBUG);
|
|
57
|
-
},
|
|
58
|
-
/**
|
|
59
|
-
* Sets a custom log Level for the SDK.
|
|
60
|
-
* @param {string} logLevel - Custom LogLevel value.
|
|
61
|
-
*/
|
|
62
|
-
setLogLevel(logLevel) {
|
|
63
|
-
if (isLogLevelString(logLevel)) {
|
|
64
|
-
setLogLevel(logLevel);
|
|
65
|
-
} else {
|
|
66
|
-
ownLog.error('Invalid Log Level - No changes to the logs will be applied.');
|
|
67
|
-
}
|
|
68
|
-
},
|
|
69
|
-
/**
|
|
70
|
-
* Disables all the log levels.
|
|
71
|
-
*/
|
|
72
|
-
disable() {
|
|
73
|
-
// Disabling is equal logLevel none
|
|
74
|
-
setLogLevel(LogLevels.NONE);
|
|
75
|
-
},
|
|
76
|
-
/**
|
|
77
|
-
* Exposed for usage with setLogLevel
|
|
78
|
-
*/
|
|
79
|
-
LogLevel: LogLevels
|
|
80
|
-
};
|
|
81
|
-
|
|
82
|
-
// "enable", "enabled" and "on", are synonims with 'DEBUG' loglevel
|
|
83
|
-
if (/^(enabled?|on)/i.test(initialState)) {
|
|
84
|
-
API.enable(LogLevels.DEBUG);
|
|
85
|
-
} else if (isLogLevelString(initialState)) {
|
|
86
|
-
API.setLogLevel(initialState);
|
|
87
|
-
} else {
|
|
88
|
-
// By default it starts disabled.
|
|
89
|
-
API.disable();
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
// By default we expose logger instance creator wrapper.
|
|
93
|
-
export default createLog;
|
|
@@ -1,116 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* yallist implementation based on isaacs/yallist (https://github.com/isaacs/yallist/yallist.js),
|
|
3
|
-
* with the minimal features used by the SDK.
|
|
4
|
-
|
|
5
|
-
Copyright (c) Isaac Z. Schlueter and Contributors
|
|
6
|
-
|
|
7
|
-
Permission to use, copy, modify, and/or distribute this software for any
|
|
8
|
-
purpose with or without fee is hereby granted, provided that the above
|
|
9
|
-
copyright notice and this permission notice appear in all copies.
|
|
10
|
-
|
|
11
|
-
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
|
12
|
-
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
|
13
|
-
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
|
14
|
-
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
15
|
-
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
|
16
|
-
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
|
|
17
|
-
IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
18
|
-
**/
|
|
19
|
-
|
|
20
|
-
export class Node {
|
|
21
|
-
constructor(value, prev, next, list) {
|
|
22
|
-
this.list = list;
|
|
23
|
-
this.value = value;
|
|
24
|
-
|
|
25
|
-
if (prev) {
|
|
26
|
-
prev.next = this;
|
|
27
|
-
this.prev = prev;
|
|
28
|
-
} else {
|
|
29
|
-
this.prev = null;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
if (next) {
|
|
33
|
-
next.prev = this;
|
|
34
|
-
this.next = next;
|
|
35
|
-
} else {
|
|
36
|
-
this.next = null;
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
export class LinkedList {
|
|
42
|
-
constructor() {
|
|
43
|
-
this.tail = null;
|
|
44
|
-
this.head = null;
|
|
45
|
-
this.length = 0;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
removeNode (node) {
|
|
49
|
-
if (!node || !(node instanceof Node)) return;
|
|
50
|
-
|
|
51
|
-
if (node.list !== this) {
|
|
52
|
-
throw new Error('removing node which does not belong to this list');
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
var next = node.next;
|
|
56
|
-
var prev = node.prev;
|
|
57
|
-
|
|
58
|
-
if (next) {
|
|
59
|
-
next.prev = prev;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
if (prev) {
|
|
63
|
-
prev.next = next;
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
if (node === this.head) {
|
|
67
|
-
this.head = next;
|
|
68
|
-
}
|
|
69
|
-
if (node === this.tail) {
|
|
70
|
-
this.tail = prev;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
node.list.length--;
|
|
74
|
-
node.next = null;
|
|
75
|
-
node.prev = null;
|
|
76
|
-
node.list = null;
|
|
77
|
-
|
|
78
|
-
return next;
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
unshiftNode (node) {
|
|
82
|
-
if (!node || !(node instanceof Node)) return;
|
|
83
|
-
|
|
84
|
-
if (node === this.head) {
|
|
85
|
-
return;
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
if (node.list) {
|
|
89
|
-
node.list.removeNode(node);
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
var head = this.head;
|
|
93
|
-
node.list = this;
|
|
94
|
-
node.next = head;
|
|
95
|
-
if (head) {
|
|
96
|
-
head.prev = node;
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
this.head = node;
|
|
100
|
-
if (!this.tail) {
|
|
101
|
-
this.tail = node;
|
|
102
|
-
}
|
|
103
|
-
this.length++;
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
unshift() {
|
|
107
|
-
for (var i = 0, l = arguments.length; i < l; i++) {
|
|
108
|
-
this.head = new Node(arguments[i], null, this.head, this);
|
|
109
|
-
if (!this.tail) {
|
|
110
|
-
this.tail = this.head;
|
|
111
|
-
}
|
|
112
|
-
this.length++;
|
|
113
|
-
}
|
|
114
|
-
return this.length;
|
|
115
|
-
}
|
|
116
|
-
}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import tape from 'tape-catch';
|
|
2
|
-
import LRUCache from './lrucache';
|
|
3
|
-
|
|
4
|
-
tape('Check Cache', assert => {
|
|
5
|
-
const cache = new LRUCache(5, 1000);
|
|
6
|
-
for (let i = 1; i <= 5; i++) {
|
|
7
|
-
assert.equal(cache.set(`key${i}`, i), true);
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
for (let i = 1; i <= 5; i++) {
|
|
11
|
-
assert.equal( cache.get(`key${i}`), i);
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
cache.set('key6', 6);
|
|
15
|
-
// Oldest item (1) should have been removed
|
|
16
|
-
assert.equal(cache.get('key1'), undefined);
|
|
17
|
-
|
|
18
|
-
// 2-6 should be available
|
|
19
|
-
for (let i = 2; i <= 6; i++) {
|
|
20
|
-
assert.equal(cache.get(`key${i}`), i);
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
assert.equal(cache.items.size, 5);
|
|
24
|
-
|
|
25
|
-
assert.end();
|
|
26
|
-
});
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
import { LinkedList, Node } from './linkedlist';
|
|
2
|
-
|
|
3
|
-
const _Map = typeof Map !== 'undefined' ? Map : class MapPoly { // @TODO move this util into its own file
|
|
4
|
-
constructor() { }
|
|
5
|
-
set(key, value) { this[key] = value; }
|
|
6
|
-
get(key) { return this[key]; }
|
|
7
|
-
delete(key) { delete this[key]; }
|
|
8
|
-
get size() { return Object.keys(this).length; }
|
|
9
|
-
};
|
|
10
|
-
|
|
11
|
-
class LRUCache {
|
|
12
|
-
constructor(maxSize) {
|
|
13
|
-
this.maxLen = maxSize || 1;
|
|
14
|
-
this.items = new _Map();
|
|
15
|
-
this.lru = new LinkedList();
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
get(key) {
|
|
19
|
-
const node = this.items.get(key);
|
|
20
|
-
if (!node || !(node instanceof Node)) return undefined;
|
|
21
|
-
|
|
22
|
-
this.lru.unshiftNode(node); // Move to front
|
|
23
|
-
|
|
24
|
-
return node.value.value;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
set(key, value) {
|
|
28
|
-
const node = this.items.get(key);
|
|
29
|
-
|
|
30
|
-
if (node) {
|
|
31
|
-
if (!(node instanceof Node)) return false;
|
|
32
|
-
this.lru.unshiftNode(node); // Move to front
|
|
33
|
-
this.lru.head.value.value = value; // Update value
|
|
34
|
-
} else {
|
|
35
|
-
if (this.lru.length === this.maxLen) { // Remove last
|
|
36
|
-
const last = this.lru.tail;
|
|
37
|
-
if (!last) return false;
|
|
38
|
-
this.items.delete(last.value.key);
|
|
39
|
-
this.lru.removeNode(this.lru.tail); // Remove node
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
this.lru.unshift({ key, value }); // Push front
|
|
43
|
-
this.items.set(key, this.lru.head);
|
|
44
|
-
}
|
|
45
|
-
return true;
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
export default LRUCache;
|