@splitsoftware/splitio 10.17.3-rc.2 → 10.17.3
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 +4 -0
- package/es/client/attributesDecoration.js +116 -0
- package/es/client/browser.js +39 -0
- package/es/client/client.js +155 -0
- package/es/client/inputValidation.js +117 -0
- package/es/client/node.js +6 -0
- package/es/{factory → client}/package.json +0 -0
- package/es/engine/combiners/and.js +54 -0
- package/es/engine/combiners/ifelseif.js +73 -0
- package/es/engine/condition/index.js +62 -0
- package/es/engine/convertions/index.js +29 -0
- package/es/engine/engine/index.js +60 -0
- package/es/engine/engine/legacy.js +77 -0
- package/es/engine/engine/murmur3/common.js +40 -0
- package/es/engine/engine/murmur3/murmur3.js +83 -0
- package/es/engine/engine/murmur3/murmur3_128.js +250 -0
- package/es/engine/engine/murmur3/murmur3_128_x86.js +183 -0
- package/es/engine/engine/murmur3/murmur3_64.js +52 -0
- package/es/engine/engine/murmur3/utfx.js +112 -0
- package/es/engine/evaluator/index.js +111 -0
- package/es/engine/index.js +112 -0
- package/es/engine/matchers/all.js +32 -0
- package/es/engine/matchers/between.js +35 -0
- package/es/engine/matchers/boolean.js +35 -0
- package/es/engine/matchers/cont_all.js +51 -0
- package/es/engine/matchers/cont_any.js +47 -0
- package/es/engine/matchers/cont_str.js +38 -0
- package/es/engine/matchers/dependency.js +50 -0
- package/es/engine/matchers/eq.js +35 -0
- package/es/engine/matchers/eq_set.js +49 -0
- package/es/engine/matchers/ew.js +38 -0
- package/es/engine/matchers/gte.js +35 -0
- package/es/engine/matchers/index.js +65 -0
- package/es/engine/matchers/lte.js +35 -0
- package/es/engine/matchers/part_of.js +49 -0
- package/es/engine/matchers/segment.js +39 -0
- package/es/engine/matchers/string.js +44 -0
- package/es/engine/matchers/sw.js +38 -0
- package/es/engine/matchers/types.js +48 -0
- package/es/engine/matchers/whitelist.js +36 -0
- package/es/engine/parser/index.js +69 -0
- package/es/engine/parser/segments.js +22 -0
- package/es/engine/transforms/matcherGroup.js +43 -0
- package/es/engine/transforms/matchers.js +109 -0
- package/es/engine/transforms/segment.js +28 -0
- package/es/engine/transforms/set.js +20 -0
- package/es/engine/transforms/unaryNumeric.js +20 -0
- package/es/engine/transforms/whitelist.js +22 -0
- package/es/engine/treatments/index.js +67 -0
- package/es/engine/value/index.js +54 -0
- package/es/engine/value/sanitize.js +125 -0
- package/es/events/index.js +65 -0
- package/es/factory/offline.js +50 -0
- package/es/factory/online.js +113 -0
- package/es/impressions/counter.js +52 -0
- package/es/impressions/hasher/buildKey.js +3 -0
- package/es/impressions/hasher/hashImpression128.js +5 -0
- package/es/impressions/hasher/hashImpression32.js +5 -0
- package/es/impressions/observer/browser.js +9 -0
- package/es/impressions/observer/node.js +9 -0
- package/es/impressions/observer/observer.js +21 -0
- package/es/{platform/getEventSource → impressions/observer}/package.json +0 -0
- package/es/index.js +132 -1
- package/es/integrations/browser.js +62 -0
- package/es/integrations/ga/GaToSplit.js +246 -0
- package/es/integrations/ga/SplitToGa.js +127 -0
- package/es/integrations/node.js +3 -0
- package/es/{platform/getFetch → integrations}/package.json +0 -0
- package/es/listeners/browser.js +157 -0
- package/es/listeners/node.js +65 -0
- package/es/{platform → listeners}/package.json +0 -0
- package/es/manager/index.js +104 -0
- package/es/metrics/Collectors.js +100 -0
- package/es/metrics/index.js +157 -0
- package/es/producer/browser/Partial.js +103 -0
- package/es/producer/browser.js +70 -0
- package/es/producer/fetcher/MySegments.js +47 -0
- package/es/producer/fetcher/SegmentChanges.js +52 -0
- package/es/producer/fetcher/SplitChanges.js +46 -0
- package/es/producer/node.js +130 -0
- package/es/producer/offline/browser.js +26 -0
- package/es/producer/offline/node.js +26 -0
- package/es/{settings → producer/offline}/package.json +0 -0
- package/{lib/factory → es/producer}/package.json +0 -0
- package/es/producer/task.js +50 -0
- package/es/producer/updater/MySegments.js +108 -0
- package/es/producer/updater/SegmentChanges.js +135 -0
- package/es/producer/updater/SplitChanges.js +131 -0
- package/es/producer/updater/SplitChangesFromFeatures.js +21 -0
- package/es/producer/updater/SplitChangesFromFileSystem.js +21 -0
- package/es/producer/updater/SplitChangesFromObject.js +73 -0
- package/es/readiness/index.js +123 -0
- package/es/readiness/statusManager.js +114 -0
- package/es/services/auth/auth.js +25 -0
- package/es/services/auth/index.js +2 -0
- package/es/services/events/bulk.js +22 -0
- package/es/services/events/index.js +17 -0
- package/{src/platform → es/services}/getEventSource/browser.js +2 -2
- package/es/{platform → services}/getEventSource/node.js +1 -1
- package/{lib/platform → es/services}/getEventSource/package.json +0 -0
- package/es/{platform → services}/getFetch/browser.js +1 -1
- package/es/{platform → services}/getFetch/node.js +1 -1
- package/{lib/platform → es/services}/getFetch/package.json +0 -0
- package/es/services/impressions/bulk.js +26 -0
- package/es/services/impressions/count.js +7 -0
- package/es/services/impressions/dto.js +73 -0
- package/es/services/impressions/index.js +17 -0
- package/es/services/impressions/post.js +22 -0
- package/es/services/metrics/counters.js +24 -0
- package/es/services/metrics/dto.js +38 -0
- package/es/services/metrics/index.js +17 -0
- package/es/services/metrics/times.js +24 -0
- package/es/services/mySegments/get.js +26 -0
- package/es/services/mySegments/index.js +17 -0
- package/es/services/request/index.js +43 -0
- package/es/services/request/options/browser.js +18 -0
- package/es/{platform → services}/request/options/node.js +2 -2
- package/{lib/platform → es/services/request/options}/package.json +0 -0
- package/es/services/segmentChanges/get.js +21 -0
- package/es/services/segmentChanges/index.js +17 -0
- package/es/services/splitChanges/get.js +19 -0
- package/es/services/splitChanges/index.js +17 -0
- package/es/services/splitChanges/offline/browser.js +63 -0
- package/es/services/splitChanges/offline/node.js +176 -0
- package/{lib/settings → es/services/splitChanges/offline}/package.json +0 -0
- package/es/services/splitChanges/offline/parseCondition.js +43 -0
- package/es/services/transport/index.js +51 -0
- package/es/storage/AttributesCache/InMemory.js +85 -0
- package/es/storage/BaseMetricsAsyncCache.js +23 -0
- package/es/storage/CountCache/InMemory.js +48 -0
- package/es/storage/CountCache/InRedis.js +42 -0
- package/es/storage/EventsCache/InMemory.js +109 -0
- package/es/storage/EventsCache/InRedis.js +65 -0
- package/es/storage/ImpressionsCache/InMemory.js +71 -0
- package/es/storage/ImpressionsCache/InRedis.js +73 -0
- package/es/storage/Keys.js +125 -0
- package/es/storage/KeysLocalStorage.js +58 -0
- package/es/storage/LatencyCache/InMemory.js +56 -0
- package/es/storage/LatencyCache/InRedis.js +44 -0
- package/es/storage/LatencyCache/findIndex.js +2 -0
- package/es/storage/Meta.js +7 -0
- package/es/storage/RedisAdapter.js +198 -0
- package/es/storage/SegmentCache/InLocalStorage/index.js +162 -0
- package/es/storage/SegmentCache/InMemory/browser.js +107 -0
- package/es/storage/SegmentCache/InMemory/node.js +82 -0
- package/{src/factory → es/storage/SegmentCache/InMemory}/package.json +0 -0
- package/es/storage/SegmentCache/InRedis/index.js +81 -0
- package/es/storage/SplitCache/InLocalStorage.js +332 -0
- package/es/storage/SplitCache/InMemory.js +162 -0
- package/es/storage/SplitCache/InRedis.js +214 -0
- package/es/storage/SplitCache/killLocally.js +35 -0
- package/es/storage/browser.js +101 -0
- package/es/storage/node.js +81 -0
- package/{src/platform/getEventSource → es/storage}/package.json +0 -0
- package/es/sync/AuthClient/index.js +34 -0
- package/es/sync/PushManager/index.js +315 -0
- package/es/sync/PushManager/mySegmentsV2utils.js +76 -0
- package/es/sync/PushManager/pushRequirements/browser.js +23 -0
- package/es/sync/PushManager/pushRequirements/node.js +18 -0
- package/{src/platform/getFetch → es/sync/PushManager/pushRequirements}/package.json +0 -0
- package/es/sync/SSEClient/index.js +93 -0
- package/es/sync/SSEHandler/NotificationKeeper.js +97 -0
- package/es/sync/SSEHandler/NotificationParser.js +31 -0
- package/es/sync/SSEHandler/index.js +110 -0
- package/es/sync/SegmentUpdateWorker/browser.js +74 -0
- package/es/sync/SegmentUpdateWorker/node.js +79 -0
- package/{src/platform → es/sync/SegmentUpdateWorker}/package.json +0 -0
- package/es/sync/SplitUpdateWorker/index.js +86 -0
- package/es/sync/browser.js +125 -0
- package/es/sync/constants.js +42 -0
- package/es/sync/node.js +60 -0
- package/{src/settings → es/sync}/package.json +0 -0
- package/es/trackers/event.js +53 -0
- package/es/trackers/impressions.js +132 -0
- package/es/umd.js +1 -2
- package/es/utils/backoff/index.js +51 -0
- package/es/utils/base64/browser.js +19 -0
- package/es/utils/base64/node.js +19 -0
- package/es/utils/base64/package.json +4 -0
- package/es/utils/binarySearch/index.js +50 -0
- package/es/utils/constants/index.js +38 -0
- package/es/utils/context/constants.js +30 -0
- package/es/utils/context/index.js +101 -0
- package/es/utils/decompress/index.js +476 -0
- package/es/utils/fn/repeat.js +58 -0
- package/es/utils/inputValidation/apiKey.js +39 -0
- package/es/utils/inputValidation/attribute.js +22 -0
- package/es/utils/inputValidation/attributes.js +19 -0
- package/es/utils/inputValidation/event.js +23 -0
- package/es/utils/inputValidation/eventProperties.js +69 -0
- package/es/utils/inputValidation/eventValue.js +9 -0
- package/es/utils/inputValidation/index.js +11 -0
- package/es/utils/inputValidation/isOperational.js +14 -0
- package/es/utils/inputValidation/key.js +50 -0
- package/es/utils/inputValidation/split.js +47 -0
- package/es/utils/inputValidation/splitFilters.js +121 -0
- package/es/utils/inputValidation/splits.js +27 -0
- package/es/utils/inputValidation/trafficType.js +55 -0
- package/es/utils/jwt/hashUserKey.js +11 -0
- package/es/utils/jwt/index.js +14 -0
- package/es/utils/key/factory.js +38 -0
- package/es/utils/key/parser.js +34 -0
- package/es/utils/labels/index.js +7 -0
- package/es/utils/lang/Errors.js +41 -0
- package/es/utils/lang/Sets.js +114 -0
- package/es/utils/lang/index.js +305 -0
- package/es/utils/localstorage/isAvailable.js +26 -0
- package/es/utils/logger/LoggerFactory.js +86 -0
- package/es/utils/logger/index.js +97 -0
- package/es/utils/lrucache/linkedlist.js +122 -0
- package/es/utils/lrucache/lru.spec.js +24 -0
- package/es/utils/lrucache/lrucache.js +80 -0
- package/es/utils/now/browser.js +27 -0
- package/es/utils/now/node.js +19 -0
- package/es/utils/now/package.json +4 -0
- package/es/utils/promise/thenable.js +3 -0
- package/es/utils/promise/timeout.js +34 -0
- package/es/utils/promise/wrapper.js +58 -0
- package/es/{settings → utils/settings}/defaults/browser.js +2 -5
- package/es/{settings → utils/settings}/defaults/node.js +2 -5
- package/es/utils/settings/defaults/package.json +4 -0
- package/es/utils/settings/impressionsMode.js +16 -0
- package/es/utils/settings/index.js +194 -0
- package/es/utils/settings/integrations/browser.js +8 -0
- package/es/utils/settings/integrations/common.js +30 -0
- package/es/utils/settings/integrations/node.js +7 -0
- package/es/utils/settings/integrations/package.json +4 -0
- package/es/utils/settings/language/browser.js +16 -0
- package/es/utils/settings/language/node.js +16 -0
- package/es/utils/settings/language/package.json +4 -0
- package/es/utils/settings/mode.js +10 -0
- package/es/utils/settings/runtime/browser.js +21 -0
- package/es/{settings → utils/settings}/runtime/node.js +4 -6
- package/es/utils/settings/runtime/package.json +4 -0
- package/es/{settings → utils/settings}/storage/browser.js +17 -16
- package/es/{settings → utils/settings}/storage/node.js +16 -25
- package/es/utils/settings/storage/package.json +4 -0
- package/es/utils/splits/usesSegments.js +21 -0
- package/es/utils/time/index.js +8 -0
- package/es/utils/timeTracker/index.js +216 -0
- package/es/utils/timeTracker/timer.js +25 -0
- package/lib/client/attributesDecoration.js +128 -0
- package/lib/client/browser.js +50 -0
- package/lib/client/client.js +174 -0
- package/lib/client/inputValidation.js +129 -0
- package/lib/client/node.js +14 -0
- package/lib/client/package.json +4 -0
- package/lib/engine/combiners/and.js +65 -0
- package/lib/engine/combiners/ifelseif.js +88 -0
- package/lib/engine/condition/index.js +76 -0
- package/lib/engine/convertions/index.js +36 -0
- package/lib/engine/engine/index.js +71 -0
- package/lib/engine/engine/legacy.js +83 -0
- package/lib/engine/engine/murmur3/common.js +52 -0
- package/lib/engine/engine/murmur3/murmur3.js +90 -0
- package/lib/engine/engine/murmur3/murmur3_128.js +256 -0
- package/lib/engine/engine/murmur3/murmur3_128_x86.js +189 -0
- package/lib/engine/engine/murmur3/murmur3_64.js +57 -0
- package/lib/engine/engine/murmur3/utfx.js +121 -0
- package/lib/engine/evaluator/index.js +129 -0
- package/lib/engine/index.js +128 -0
- package/lib/engine/matchers/all.js +41 -0
- package/lib/engine/matchers/between.js +44 -0
- package/lib/engine/matchers/boolean.js +44 -0
- package/lib/engine/matchers/cont_all.js +61 -0
- package/lib/engine/matchers/cont_any.js +57 -0
- package/lib/engine/matchers/cont_str.js +48 -0
- package/lib/engine/matchers/dependency.js +60 -0
- package/lib/engine/matchers/eq.js +44 -0
- package/lib/engine/matchers/eq_set.js +59 -0
- package/lib/engine/matchers/ew.js +48 -0
- package/lib/engine/matchers/gte.js +44 -0
- package/lib/engine/matchers/index.js +90 -0
- package/lib/engine/matchers/lte.js +44 -0
- package/lib/engine/matchers/part_of.js +59 -0
- package/lib/engine/matchers/segment.js +49 -0
- package/lib/engine/matchers/string.js +53 -0
- package/lib/engine/matchers/sw.js +48 -0
- package/lib/engine/matchers/types.js +57 -0
- package/lib/engine/matchers/whitelist.js +46 -0
- package/lib/engine/parser/index.js +84 -0
- package/lib/engine/parser/segments.js +28 -0
- package/lib/engine/transforms/matcherGroup.js +54 -0
- package/lib/engine/transforms/matchers.js +124 -0
- package/lib/engine/transforms/segment.js +34 -0
- package/lib/engine/transforms/set.js +26 -0
- package/lib/engine/transforms/unaryNumeric.js +26 -0
- package/lib/engine/transforms/whitelist.js +28 -0
- package/lib/engine/treatments/index.js +73 -0
- package/lib/engine/value/index.js +64 -0
- package/lib/engine/value/sanitize.js +137 -0
- package/lib/events/index.js +80 -0
- package/lib/factory/offline.js +62 -0
- package/lib/factory/online.js +129 -0
- package/lib/impressions/counter.js +61 -0
- package/lib/impressions/hasher/buildKey.js +8 -0
- package/lib/impressions/hasher/hashImpression128.js +12 -0
- package/lib/impressions/hasher/hashImpression32.js +14 -0
- package/lib/impressions/observer/browser.js +19 -0
- package/lib/impressions/observer/node.js +19 -0
- package/lib/impressions/observer/observer.js +29 -0
- package/lib/impressions/observer/package.json +4 -0
- package/lib/index.js +151 -3
- package/lib/integrations/browser.js +72 -0
- package/lib/integrations/ga/GaToSplit.js +267 -0
- package/lib/integrations/ga/SplitToGa.js +138 -0
- package/lib/integrations/node.js +9 -0
- package/lib/integrations/package.json +4 -0
- package/lib/listeners/browser.js +173 -0
- package/lib/listeners/node.js +74 -0
- package/lib/listeners/package.json +4 -0
- package/lib/manager/index.js +115 -0
- package/lib/metrics/Collectors.js +118 -0
- package/lib/metrics/index.js +182 -0
- package/lib/producer/browser/Partial.js +114 -0
- package/lib/producer/browser.js +82 -0
- package/lib/producer/fetcher/MySegments.js +59 -0
- package/lib/producer/fetcher/SegmentChanges.js +62 -0
- package/lib/producer/fetcher/SplitChanges.js +58 -0
- package/lib/producer/node.js +142 -0
- package/lib/producer/offline/browser.js +35 -0
- package/lib/producer/offline/node.js +35 -0
- package/lib/producer/offline/package.json +4 -0
- package/lib/producer/package.json +4 -0
- package/lib/producer/task.js +61 -0
- package/lib/producer/updater/MySegments.js +119 -0
- package/lib/producer/updater/SegmentChanges.js +148 -0
- package/lib/producer/updater/SplitChanges.js +145 -0
- package/lib/producer/updater/SplitChangesFromFeatures.js +30 -0
- package/lib/producer/updater/SplitChangesFromFileSystem.js +30 -0
- package/lib/producer/updater/SplitChangesFromObject.js +84 -0
- package/lib/readiness/index.js +132 -0
- package/lib/readiness/statusManager.js +124 -0
- package/lib/services/auth/auth.js +32 -0
- package/lib/services/auth/index.js +11 -0
- package/lib/services/events/bulk.js +31 -0
- package/lib/services/events/index.js +26 -0
- package/lib/{platform → services}/getEventSource/browser.js +1 -1
- package/lib/{platform → services}/getEventSource/node.js +1 -1
- package/lib/services/getEventSource/package.json +4 -0
- package/lib/{platform → services}/getFetch/browser.js +1 -1
- package/lib/{platform → services}/getFetch/node.js +1 -1
- package/lib/services/getFetch/package.json +4 -0
- package/lib/services/impressions/bulk.js +36 -0
- package/lib/services/impressions/count.js +16 -0
- package/lib/services/impressions/dto.js +81 -0
- package/lib/services/impressions/index.js +26 -0
- package/lib/services/impressions/post.js +31 -0
- package/lib/services/metrics/counters.js +33 -0
- package/lib/services/metrics/dto.js +46 -0
- package/lib/services/metrics/index.js +26 -0
- package/lib/services/metrics/times.js +33 -0
- package/lib/services/mySegments/get.js +35 -0
- package/lib/services/mySegments/index.js +26 -0
- package/lib/services/request/index.js +53 -0
- package/lib/services/request/options/browser.js +23 -0
- package/lib/{platform → services}/request/options/node.js +2 -2
- package/lib/services/request/options/package.json +4 -0
- package/lib/services/segmentChanges/get.js +29 -0
- package/lib/services/segmentChanges/index.js +26 -0
- package/lib/services/splitChanges/get.js +27 -0
- package/lib/services/splitChanges/index.js +26 -0
- package/lib/services/splitChanges/offline/browser.js +71 -0
- package/lib/services/splitChanges/offline/node.js +189 -0
- package/lib/services/splitChanges/offline/package.json +4 -0
- package/lib/services/splitChanges/offline/parseCondition.js +49 -0
- package/lib/services/transport/index.js +62 -0
- package/lib/storage/AttributesCache/InMemory.js +93 -0
- package/lib/storage/BaseMetricsAsyncCache.js +28 -0
- package/lib/storage/CountCache/InMemory.js +54 -0
- package/lib/storage/CountCache/InRedis.js +50 -0
- package/lib/storage/EventsCache/InMemory.js +118 -0
- package/lib/storage/EventsCache/InRedis.js +74 -0
- package/lib/storage/ImpressionsCache/InMemory.js +77 -0
- package/lib/storage/ImpressionsCache/InRedis.js +79 -0
- package/lib/storage/Keys.js +132 -0
- package/lib/storage/KeysLocalStorage.js +69 -0
- package/lib/storage/LatencyCache/InMemory.js +64 -0
- package/lib/storage/LatencyCache/InRedis.js +53 -0
- package/lib/storage/LatencyCache/findIndex.js +12 -0
- package/lib/storage/Meta.js +12 -0
- package/lib/storage/RedisAdapter.js +212 -0
- package/lib/storage/SegmentCache/InLocalStorage/index.js +171 -0
- package/lib/storage/SegmentCache/InMemory/browser.js +113 -0
- package/lib/storage/SegmentCache/InMemory/node.js +89 -0
- package/lib/storage/SegmentCache/InMemory/package.json +4 -0
- package/lib/storage/SegmentCache/InRedis/index.js +87 -0
- package/lib/storage/SplitCache/InLocalStorage.js +344 -0
- package/lib/storage/SplitCache/InMemory.js +172 -0
- package/lib/storage/SplitCache/InRedis.js +224 -0
- package/lib/storage/SplitCache/killLocally.js +42 -0
- package/lib/storage/browser.js +122 -0
- package/lib/storage/node.js +104 -0
- package/lib/storage/package.json +4 -0
- package/lib/sync/AuthClient/index.js +44 -0
- package/lib/sync/PushManager/index.js +340 -0
- package/lib/sync/PushManager/mySegmentsV2utils.js +87 -0
- package/lib/sync/PushManager/pushRequirements/browser.js +30 -0
- package/lib/sync/PushManager/pushRequirements/node.js +25 -0
- package/lib/sync/PushManager/pushRequirements/package.json +4 -0
- package/lib/sync/SSEClient/index.js +101 -0
- package/lib/sync/SSEHandler/NotificationKeeper.js +104 -0
- package/lib/sync/SSEHandler/NotificationParser.js +39 -0
- package/lib/sync/SSEHandler/index.js +121 -0
- package/lib/sync/SegmentUpdateWorker/browser.js +81 -0
- package/lib/sync/SegmentUpdateWorker/node.js +86 -0
- package/lib/sync/SegmentUpdateWorker/package.json +4 -0
- package/lib/sync/SplitUpdateWorker/index.js +93 -0
- package/lib/sync/browser.js +139 -0
- package/lib/sync/constants.js +59 -0
- package/lib/sync/node.js +71 -0
- package/lib/sync/package.json +4 -0
- package/lib/trackers/event.js +64 -0
- package/lib/trackers/impressions.js +146 -0
- package/lib/umd.js +0 -1
- package/lib/utils/backoff/index.js +57 -0
- package/lib/utils/base64/browser.js +26 -0
- package/lib/utils/base64/node.js +26 -0
- package/lib/utils/base64/package.json +4 -0
- package/lib/utils/binarySearch/index.js +56 -0
- package/lib/utils/constants/index.js +60 -0
- package/lib/utils/context/constants.js +49 -0
- package/lib/utils/context/index.js +111 -0
- package/lib/utils/decompress/index.js +483 -0
- package/lib/utils/fn/repeat.js +64 -0
- package/lib/utils/inputValidation/apiKey.js +51 -0
- package/lib/utils/inputValidation/attribute.js +32 -0
- package/lib/utils/inputValidation/attributes.js +32 -0
- package/lib/utils/inputValidation/event.js +33 -0
- package/lib/utils/inputValidation/eventProperties.js +78 -0
- package/lib/utils/inputValidation/eventValue.js +19 -0
- package/lib/utils/inputValidation/index.js +48 -0
- package/lib/utils/inputValidation/isOperational.js +25 -0
- package/lib/utils/inputValidation/key.js +59 -0
- package/lib/utils/inputValidation/split.js +60 -0
- package/lib/utils/inputValidation/splitFilters.js +134 -0
- package/lib/utils/inputValidation/splits.js +38 -0
- package/lib/utils/inputValidation/trafficType.js +68 -0
- package/lib/utils/jwt/hashUserKey.js +19 -0
- package/lib/utils/jwt/index.js +19 -0
- package/lib/utils/key/factory.js +46 -0
- package/lib/utils/key/parser.js +42 -0
- package/lib/utils/labels/index.js +18 -0
- package/lib/utils/lang/Errors.js +58 -0
- package/lib/utils/lang/Sets.js +127 -0
- package/lib/utils/lang/index.js +350 -0
- package/lib/utils/localstorage/isAvailable.js +31 -0
- package/lib/utils/logger/LoggerFactory.js +98 -0
- package/lib/utils/logger/index.js +109 -0
- package/lib/utils/lrucache/linkedlist.js +132 -0
- package/lib/utils/lrucache/lru.spec.js +30 -0
- package/lib/utils/lrucache/lrucache.js +88 -0
- package/lib/utils/now/browser.js +33 -0
- package/lib/utils/now/node.js +24 -0
- package/lib/utils/now/package.json +4 -0
- package/lib/utils/promise/thenable.js +10 -0
- package/lib/utils/promise/timeout.js +40 -0
- package/lib/utils/promise/wrapper.js +63 -0
- package/{src → lib/utils}/settings/defaults/browser.js +6 -6
- package/{src → lib/utils}/settings/defaults/node.js +6 -6
- package/lib/utils/settings/defaults/package.json +4 -0
- package/lib/utils/settings/impressionsMode.js +26 -0
- package/lib/utils/settings/index.js +214 -0
- package/lib/utils/settings/integrations/browser.js +17 -0
- package/lib/utils/settings/integrations/common.js +40 -0
- package/lib/utils/settings/integrations/node.js +13 -0
- package/lib/utils/settings/integrations/package.json +4 -0
- package/lib/utils/settings/language/browser.js +22 -0
- package/lib/utils/settings/language/node.js +22 -0
- package/lib/utils/settings/language/package.json +4 -0
- package/lib/utils/settings/mode.js +16 -0
- package/lib/utils/settings/runtime/browser.js +26 -0
- package/lib/{settings → utils/settings}/runtime/node.js +5 -7
- package/lib/utils/settings/runtime/package.json +4 -0
- package/lib/{settings → utils/settings}/storage/browser.js +24 -20
- package/lib/{settings → utils/settings}/storage/node.js +17 -26
- package/lib/utils/settings/storage/package.json +4 -0
- package/lib/utils/splits/usesSegments.js +27 -0
- package/lib/utils/time/index.js +12 -0
- package/lib/utils/timeTracker/index.js +213 -0
- package/lib/utils/timeTracker/timer.js +33 -0
- package/package.json +16 -20
- package/src/client/attributesDecoration.js +112 -0
- package/src/client/browser.js +41 -0
- package/src/client/client.js +131 -0
- package/src/client/inputValidation.js +130 -0
- package/src/client/node.js +8 -0
- package/src/client/package.json +4 -0
- package/src/engine/combiners/and.js +55 -0
- package/src/engine/combiners/ifelseif.js +74 -0
- package/src/engine/condition/index.js +65 -0
- package/src/engine/convertions/index.js +22 -0
- package/src/engine/engine/index.js +63 -0
- package/src/engine/engine/legacy.js +66 -0
- package/src/engine/engine/murmur3/common.js +54 -0
- package/src/engine/engine/murmur3/murmur3.js +79 -0
- package/src/engine/engine/murmur3/murmur3_128.js +273 -0
- package/src/engine/engine/murmur3/murmur3_128_x86.js +188 -0
- package/src/engine/engine/murmur3/murmur3_64.js +34 -0
- package/src/engine/engine/murmur3/utfx.js +111 -0
- package/src/engine/evaluator/index.js +148 -0
- package/src/engine/index.js +123 -0
- package/src/engine/matchers/all.js +29 -0
- package/src/engine/matchers/between.js +30 -0
- package/src/engine/matchers/boolean.js +29 -0
- package/src/engine/matchers/cont_all.js +40 -0
- package/src/engine/matchers/cont_any.js +35 -0
- package/src/engine/matchers/cont_str.js +31 -0
- package/src/engine/matchers/dependency.js +52 -0
- package/src/engine/matchers/eq.js +30 -0
- package/src/engine/matchers/eq_set.js +37 -0
- package/src/engine/matchers/ew.js +31 -0
- package/src/engine/matchers/gte.js +30 -0
- package/src/engine/matchers/index.js +71 -0
- package/src/engine/matchers/lte.js +30 -0
- package/src/engine/matchers/part_of.js +37 -0
- package/src/engine/matchers/segment.js +41 -0
- package/src/engine/matchers/string.js +39 -0
- package/src/engine/matchers/sw.js +31 -0
- package/src/engine/matchers/types.js +52 -0
- package/src/engine/matchers/whitelist.js +30 -0
- package/src/engine/parser/index.js +79 -0
- package/src/engine/parser/segments.js +31 -0
- package/src/engine/transforms/matcherGroup.js +45 -0
- package/src/engine/transforms/matchers.js +118 -0
- package/src/engine/transforms/segment.js +23 -0
- package/src/engine/transforms/set.js +20 -0
- package/src/engine/transforms/unaryNumeric.js +20 -0
- package/src/engine/transforms/whitelist.js +22 -0
- package/src/engine/treatments/index.js +67 -0
- package/src/engine/value/index.js +53 -0
- package/src/engine/value/sanitize.js +117 -0
- package/src/events/index.js +62 -0
- package/src/factory/offline.js +60 -0
- package/src/factory/online.js +127 -0
- package/src/impressions/counter.js +43 -0
- package/src/impressions/hasher/buildKey.js +3 -0
- package/src/impressions/hasher/hashImpression128.js +6 -0
- package/src/impressions/hasher/hashImpression32.js +6 -0
- package/src/impressions/observer/browser.js +8 -0
- package/src/impressions/observer/node.js +8 -0
- package/src/impressions/observer/observer.js +17 -0
- package/src/impressions/observer/package.json +4 -0
- package/src/index.js +140 -1
- package/src/integrations/browser.js +57 -0
- package/src/integrations/ga/GaToSplit.js +278 -0
- package/src/integrations/ga/SplitToGa.js +125 -0
- package/src/integrations/node.js +4 -0
- package/src/integrations/package.json +4 -0
- package/src/listeners/browser.js +137 -0
- package/src/listeners/node.js +59 -0
- package/src/listeners/package.json +4 -0
- package/src/manager/index.js +103 -0
- package/src/metrics/Collectors.js +77 -0
- package/src/metrics/index.js +174 -0
- package/src/producer/browser/Partial.js +104 -0
- package/src/producer/browser.js +82 -0
- package/src/producer/fetcher/MySegments.js +40 -0
- package/src/producer/fetcher/SegmentChanges.js +52 -0
- package/src/producer/fetcher/SplitChanges.js +39 -0
- package/src/producer/node.js +142 -0
- package/src/producer/offline/browser.js +28 -0
- package/src/producer/offline/node.js +28 -0
- package/src/producer/offline/package.json +4 -0
- package/src/producer/package.json +4 -0
- package/src/producer/task.js +57 -0
- package/src/producer/updater/MySegments.js +104 -0
- package/src/producer/updater/SegmentChanges.js +126 -0
- package/src/producer/updater/SplitChanges.js +138 -0
- package/src/producer/updater/SplitChangesFromFeatures.js +23 -0
- package/src/producer/updater/SplitChangesFromFileSystem.js +23 -0
- package/src/producer/updater/SplitChangesFromObject.js +81 -0
- package/src/readiness/index.js +125 -0
- package/src/readiness/statusManager.js +121 -0
- package/src/services/auth/auth.js +21 -0
- package/src/services/auth/index.js +3 -0
- package/src/services/events/bulk.js +23 -0
- package/src/services/events/index.js +18 -0
- package/{es/platform → src/services}/getEventSource/browser.js +1 -1
- package/src/{platform → services}/getEventSource/node.js +2 -2
- package/src/services/getEventSource/package.json +4 -0
- package/src/{platform → services}/getFetch/browser.js +2 -2
- package/src/{platform → services}/getFetch/node.js +1 -1
- package/src/services/getFetch/package.json +4 -0
- package/src/services/impressions/bulk.js +26 -0
- package/src/services/impressions/count.js +8 -0
- package/src/services/impressions/dto.js +71 -0
- package/src/services/impressions/index.js +18 -0
- package/src/services/impressions/post.js +23 -0
- package/src/services/metrics/counters.js +25 -0
- package/src/services/metrics/dto.js +44 -0
- package/src/services/metrics/index.js +18 -0
- package/src/services/metrics/times.js +25 -0
- package/src/services/mySegments/get.js +27 -0
- package/src/services/mySegments/index.js +18 -0
- package/src/services/request/index.js +43 -0
- package/src/services/request/options/browser.js +18 -0
- package/src/{platform → services}/request/options/node.js +2 -2
- package/src/services/request/options/package.json +4 -0
- package/src/services/segmentChanges/get.js +20 -0
- package/src/services/segmentChanges/index.js +18 -0
- package/src/services/splitChanges/get.js +20 -0
- package/src/services/splitChanges/index.js +18 -0
- package/src/services/splitChanges/offline/browser.js +66 -0
- package/src/services/splitChanges/offline/node.js +190 -0
- package/src/services/splitChanges/offline/package.json +4 -0
- package/src/services/splitChanges/offline/parseCondition.js +52 -0
- package/src/services/transport/index.js +44 -0
- package/src/storage/AttributesCache/InMemory.js +76 -0
- package/src/storage/BaseMetricsAsyncCache.js +14 -0
- package/src/storage/CountCache/InMemory.js +48 -0
- package/src/storage/CountCache/InRedis.js +32 -0
- package/src/storage/EventsCache/InMemory.js +99 -0
- package/src/storage/EventsCache/InRedis.js +62 -0
- package/src/storage/ImpressionsCache/InMemory.js +62 -0
- package/src/storage/ImpressionsCache/InRedis.js +65 -0
- package/src/storage/Keys.js +122 -0
- package/src/storage/KeysLocalStorage.js +52 -0
- package/src/storage/LatencyCache/InMemory.js +56 -0
- package/src/storage/LatencyCache/InRedis.js +35 -0
- package/src/storage/LatencyCache/findIndex.js +7 -0
- package/src/storage/Meta.js +7 -0
- package/src/storage/RedisAdapter.js +170 -0
- package/src/storage/SegmentCache/InLocalStorage/index.js +140 -0
- package/src/storage/SegmentCache/InMemory/browser.js +99 -0
- package/src/storage/SegmentCache/InMemory/node.js +84 -0
- package/src/storage/SegmentCache/InMemory/package.json +4 -0
- package/src/storage/SegmentCache/InRedis/index.js +71 -0
- package/src/storage/SplitCache/InLocalStorage.js +324 -0
- package/src/storage/SplitCache/InMemory.js +145 -0
- package/src/storage/SplitCache/InRedis.js +187 -0
- package/src/storage/SplitCache/killLocally.js +33 -0
- package/src/storage/browser.js +110 -0
- package/src/storage/node.js +83 -0
- package/src/storage/package.json +4 -0
- package/src/sync/AuthClient/index.js +31 -0
- package/src/sync/PushManager/index.js +328 -0
- package/src/sync/PushManager/mySegmentsV2utils.js +76 -0
- package/src/sync/PushManager/pushRequirements/browser.js +20 -0
- package/src/sync/PushManager/pushRequirements/node.js +16 -0
- package/src/sync/PushManager/pushRequirements/package.json +4 -0
- package/src/sync/SSEClient/index.js +92 -0
- package/src/sync/SSEHandler/NotificationKeeper.js +90 -0
- package/src/sync/SSEHandler/NotificationParser.js +35 -0
- package/src/sync/SSEHandler/index.js +110 -0
- package/src/sync/SegmentUpdateWorker/browser.js +67 -0
- package/src/sync/SegmentUpdateWorker/node.js +73 -0
- package/src/sync/SegmentUpdateWorker/package.json +4 -0
- package/src/sync/SplitUpdateWorker/index.js +79 -0
- package/src/sync/browser.js +130 -0
- package/src/sync/constants.js +43 -0
- package/src/sync/node.js +66 -0
- package/src/sync/package.json +4 -0
- package/src/trackers/event.js +47 -0
- package/src/trackers/impressions.js +123 -0
- package/src/umd.js +0 -1
- package/src/utils/backoff/index.js +46 -0
- package/src/utils/base64/browser.js +19 -0
- package/src/utils/base64/node.js +19 -0
- package/src/utils/base64/package.json +4 -0
- package/src/utils/binarySearch/index.js +50 -0
- package/src/utils/constants/index.js +41 -0
- package/src/utils/context/constants.js +18 -0
- package/src/utils/context/index.js +84 -0
- package/src/utils/decompress/index.js +428 -0
- package/src/utils/fn/repeat.js +48 -0
- package/src/utils/inputValidation/apiKey.js +42 -0
- package/src/utils/inputValidation/attribute.js +22 -0
- package/src/utils/inputValidation/attributes.js +26 -0
- package/src/utils/inputValidation/event.js +23 -0
- package/src/utils/inputValidation/eventProperties.js +65 -0
- package/src/utils/inputValidation/eventValue.js +11 -0
- package/src/utils/inputValidation/index.js +11 -0
- package/src/utils/inputValidation/isOperational.js +16 -0
- package/src/utils/inputValidation/key.js +53 -0
- package/src/utils/inputValidation/split.js +42 -0
- package/src/utils/inputValidation/splitFilters.js +108 -0
- package/src/utils/inputValidation/splits.js +21 -0
- package/src/utils/inputValidation/trafficType.js +58 -0
- package/src/utils/jwt/hashUserKey.js +11 -0
- package/src/utils/jwt/index.js +15 -0
- package/src/utils/key/factory.js +34 -0
- package/src/utils/key/parser.js +34 -0
- package/src/utils/labels/index.js +7 -0
- package/src/utils/lang/Errors.js +19 -0
- package/src/utils/lang/Sets.js +94 -0
- package/src/utils/lang/index.js +291 -0
- package/src/utils/localstorage/isAvailable.js +26 -0
- package/src/utils/logger/LoggerFactory.js +90 -0
- package/src/utils/logger/index.js +93 -0
- package/src/utils/lrucache/linkedlist.js +116 -0
- package/src/utils/lrucache/lru.spec.js +26 -0
- package/src/utils/lrucache/lrucache.js +49 -0
- package/src/utils/now/browser.js +29 -0
- package/src/utils/now/node.js +21 -0
- package/src/utils/now/package.json +4 -0
- package/src/utils/promise/thenable.js +1 -0
- package/src/utils/promise/timeout.js +38 -0
- package/src/utils/promise/wrapper.js +60 -0
- package/{lib → src/utils}/settings/defaults/browser.js +3 -13
- package/{lib → src/utils}/settings/defaults/node.js +2 -12
- package/src/utils/settings/defaults/package.json +4 -0
- package/src/utils/settings/impressionsMode.js +15 -0
- package/src/utils/settings/index.js +217 -0
- package/src/utils/settings/integrations/browser.js +8 -0
- package/src/utils/settings/integrations/common.js +32 -0
- package/src/{settings → utils/settings}/integrations/node.js +3 -1
- package/src/utils/settings/integrations/package.json +4 -0
- package/src/utils/settings/language/browser.js +17 -0
- package/src/utils/settings/language/node.js +17 -0
- package/src/utils/settings/language/package.json +4 -0
- package/src/utils/settings/mode.js +12 -0
- package/src/utils/settings/runtime/browser.js +22 -0
- package/src/{settings → utils/settings}/runtime/node.js +6 -9
- package/src/utils/settings/runtime/package.json +4 -0
- package/src/{settings → utils/settings}/storage/browser.js +18 -13
- package/src/{settings → utils/settings}/storage/node.js +14 -19
- package/src/utils/settings/storage/package.json +4 -0
- package/src/utils/splits/usesSegments.js +17 -0
- package/src/utils/time/index.js +8 -0
- package/src/utils/timeTracker/index.js +223 -0
- package/src/utils/timeTracker/timer.js +27 -0
- package/types/splitio.d.ts +5 -22
- package/client/package.json +0 -5
- package/es/factory/browser.js +0 -58
- package/es/factory/node.js +0 -59
- package/es/platform/EventEmitter.js +0 -412
- package/es/platform/browser.js +0 -10
- package/es/platform/node.js +0 -12
- package/es/settings/browser.js +0 -18
- package/es/settings/defaults/version.js +0 -1
- package/es/settings/integrations/browser.js +0 -5
- package/es/settings/integrations/node.js +0 -5
- package/es/settings/node.js +0 -20
- package/lib/factory/browser.js +0 -79
- package/lib/factory/node.js +0 -78
- package/lib/platform/EventEmitter.js +0 -417
- package/lib/platform/browser.js +0 -21
- package/lib/platform/node.js +0 -26
- package/lib/settings/browser.js +0 -30
- package/lib/settings/defaults/version.js +0 -6
- package/lib/settings/integrations/browser.js +0 -14
- package/lib/settings/integrations/node.js +0 -12
- package/lib/settings/node.js +0 -33
- package/server/package.json +0 -5
- package/src/.DS_Store +0 -0
- package/src/factory/browser.js +0 -74
- package/src/factory/node.js +0 -71
- package/src/platform/.DS_Store +0 -0
- package/src/platform/EventEmitter.js +0 -443
- package/src/platform/browser.js +0 -12
- package/src/platform/node.js +0 -14
- package/src/settings/.DS_Store +0 -0
- package/src/settings/browser.js +0 -18
- package/src/settings/defaults/version.js +0 -1
- package/src/settings/integrations/browser.js +0 -6
- package/src/settings/node.js +0 -20
- package/types/client/index.d.ts +0 -14
- package/types/server/index.d.ts +0 -20
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { hash128 } from './murmur3_128';
|
|
2
|
+
/**
|
|
3
|
+
* Use instead of parseInt, to not lose precision when converting big integers (greater than 2^53 - 1)
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
function hex2dec(s
|
|
7
|
+
/*: string */
|
|
8
|
+
)
|
|
9
|
+
/*: string */
|
|
10
|
+
{
|
|
11
|
+
var i,
|
|
12
|
+
j,
|
|
13
|
+
digits = [0],
|
|
14
|
+
carry;
|
|
15
|
+
|
|
16
|
+
for (i = 0; i < s.length; i += 1) {
|
|
17
|
+
carry = parseInt(s.charAt(i), 16);
|
|
18
|
+
|
|
19
|
+
for (j = digits.length - 1; j >= 0; j -= 1) {
|
|
20
|
+
digits[j] = digits[j] * 16 + carry;
|
|
21
|
+
carry = digits[j] / 10 | 0;
|
|
22
|
+
digits[j] %= 10;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
while (carry > 0) {
|
|
26
|
+
digits.unshift(carry % 10);
|
|
27
|
+
carry = carry / 10 | 0;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
return digits.join('');
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Gets the higher 64 bits of the x64 version of Murmur3 for 128bits, as decimal and hexadecimal number strings.
|
|
35
|
+
* Used for MySegments channel V2 notifications.
|
|
36
|
+
* @param {string} str
|
|
37
|
+
*/
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
export function hash64(str
|
|
41
|
+
/*: string */
|
|
42
|
+
)
|
|
43
|
+
/*: { hex: string, dec: string } */
|
|
44
|
+
{
|
|
45
|
+
var hex = hash128(str).slice(0, 16);
|
|
46
|
+
return {
|
|
47
|
+
hex: hex,
|
|
48
|
+
// BoundedFetchRequest notification
|
|
49
|
+
dec: hex2dec(hex) // KeyList notification
|
|
50
|
+
|
|
51
|
+
};
|
|
52
|
+
}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
/*
|
|
2
|
+
Trimmed version of "utfx" library (https://www.npmjs.com/package/utfx/v/1.0.1) used to encode,
|
|
3
|
+
decode and convert UTF8 / UTF16 in JavaScript, with the minimal methods used by the SDK.
|
|
4
|
+
|
|
5
|
+
utfx (c) 2014 Daniel Wirtz <dcode@dcode.io>
|
|
6
|
+
Released under the Apache License, Version 2.0
|
|
7
|
+
see: https://github.com/dcodeIO/utfx for details
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Encodes UTF8 code points to UTF8 bytes.
|
|
12
|
+
* @param {(!function():number|null) | number} src Code points source, either as a function returning the next code point
|
|
13
|
+
* respectively `null` if there are no more code points left or a single numeric code point.
|
|
14
|
+
* @param {!function(number)} dst Bytes destination as a function successively called with the next byte
|
|
15
|
+
* @expose
|
|
16
|
+
*/
|
|
17
|
+
function encodeUTF8(src, dst) {
|
|
18
|
+
var cp = null;
|
|
19
|
+
if (typeof src === 'number') cp = src, src = function src() {
|
|
20
|
+
return null;
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
while (cp !== null || (cp = src()) !== null) {
|
|
24
|
+
if (cp < 0x80) dst(cp & 0x7F);else if (cp < 0x800) dst(cp >> 6 & 0x1F | 0xC0), dst(cp & 0x3F | 0x80);else if (cp < 0x10000) dst(cp >> 12 & 0x0F | 0xE0), dst(cp >> 6 & 0x3F | 0x80), dst(cp & 0x3F | 0x80);else dst(cp >> 18 & 0x07 | 0xF0), dst(cp >> 12 & 0x3F | 0x80), dst(cp >> 6 & 0x3F | 0x80), dst(cp & 0x3F | 0x80);
|
|
25
|
+
cp = null;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Converts UTF16 characters to UTF8 code points.
|
|
30
|
+
* @param {!function():number|null} src Characters source as a function returning the next char code respectively
|
|
31
|
+
* `null` if there are no more characters left.
|
|
32
|
+
* @param {!function(number)} dst Code points destination as a function successively called with each converted code
|
|
33
|
+
* point.
|
|
34
|
+
* @expose
|
|
35
|
+
*/
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
function UTF16toUTF8(src, dst) {
|
|
39
|
+
var c1,
|
|
40
|
+
c2 = null; // eslint-disable-next-line no-constant-condition
|
|
41
|
+
|
|
42
|
+
while (true) {
|
|
43
|
+
if ((c1 = c2 !== null ? c2 : src()) === null) break;
|
|
44
|
+
|
|
45
|
+
if (c1 >= 0xD800 && c1 <= 0xDFFF) {
|
|
46
|
+
if ((c2 = src()) !== null) {
|
|
47
|
+
if (c2 >= 0xDC00 && c2 <= 0xDFFF) {
|
|
48
|
+
dst((c1 - 0xD800) * 0x400 + c2 - 0xDC00 + 0x10000);
|
|
49
|
+
c2 = null;
|
|
50
|
+
continue;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
dst(c1);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
if (c2 !== null) dst(c2);
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Converts and encodes UTF16 characters to UTF8 bytes.
|
|
62
|
+
* @param {!function():number|null} src Characters source as a function returning the next char code respectively `null`
|
|
63
|
+
* if there are no more characters left.
|
|
64
|
+
* @param {!function(number)} dst Bytes destination as a function successively called with the next byte.
|
|
65
|
+
* @expose
|
|
66
|
+
*/
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
export function encodeUTF16toUTF8(src, dst) {
|
|
70
|
+
UTF16toUTF8(src, function (cp) {
|
|
71
|
+
encodeUTF8(cp, dst);
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* String.fromCharCode reference for compile time renaming.
|
|
76
|
+
* @type {!function(...[number]):string}
|
|
77
|
+
* @inner
|
|
78
|
+
*/
|
|
79
|
+
|
|
80
|
+
var stringFromCharCode = String.fromCharCode;
|
|
81
|
+
/**
|
|
82
|
+
* Creates a source function for a string.
|
|
83
|
+
* @param {string} s String to read from
|
|
84
|
+
* @returns {!function():number|null} Source function returning the next char code respectively `null` if there are
|
|
85
|
+
* no more characters left.
|
|
86
|
+
* @throws {TypeError} If the argument is invalid
|
|
87
|
+
* @expose
|
|
88
|
+
*/
|
|
89
|
+
|
|
90
|
+
export function stringSource(s) {
|
|
91
|
+
if (typeof s !== 'string') throw TypeError('Illegal argument: ' + typeof s);
|
|
92
|
+
var i = 0;
|
|
93
|
+
return function () {
|
|
94
|
+
return i >= s.length ? null : s.charCodeAt(i++);
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Creates a destination function for a string.
|
|
99
|
+
* @returns {function(number=):undefined|string} Destination function successively called with the next char code.
|
|
100
|
+
* Returns the final string when called without arguments.
|
|
101
|
+
* @expose
|
|
102
|
+
*/
|
|
103
|
+
|
|
104
|
+
export function stringDestination() {
|
|
105
|
+
var cs = [],
|
|
106
|
+
ps = [];
|
|
107
|
+
return function () {
|
|
108
|
+
if (arguments.length === 0) return ps.join('') + stringFromCharCode.apply(String, cs);
|
|
109
|
+
if (cs.length + arguments.length > 1024) ps.push(stringFromCharCode.apply(String, cs)), cs.length = 0;
|
|
110
|
+
Array.prototype.push.apply(cs, arguments);
|
|
111
|
+
};
|
|
112
|
+
}
|
|
@@ -0,0 +1,111 @@
|
|
|
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
|
+
import Engine from '../';
|
|
17
|
+
import thenable from '../../utils/promise/thenable';
|
|
18
|
+
import * as LabelsConstants from '../../utils/labels';
|
|
19
|
+
import { CONTROL } from '../../utils/constants';
|
|
20
|
+
var treatmentException = {
|
|
21
|
+
treatment: CONTROL,
|
|
22
|
+
label: LabelsConstants.EXCEPTION,
|
|
23
|
+
config: null
|
|
24
|
+
};
|
|
25
|
+
export function evaluateFeature(key, splitName, attributes, storage) {
|
|
26
|
+
var stringifiedSplit;
|
|
27
|
+
|
|
28
|
+
try {
|
|
29
|
+
stringifiedSplit = storage.splits.getSplit(splitName);
|
|
30
|
+
} catch (e) {
|
|
31
|
+
// the only scenario where getSplit can throw an error is when the storage
|
|
32
|
+
// is redis and there is a connection issue and we can't retrieve the split
|
|
33
|
+
// to be evaluated
|
|
34
|
+
return Promise.resolve(treatmentException);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
if (thenable(stringifiedSplit)) {
|
|
38
|
+
return stringifiedSplit.then(function (result) {
|
|
39
|
+
return getEvaluation(result, key, attributes, storage);
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
return getEvaluation(stringifiedSplit, key, attributes, storage);
|
|
44
|
+
}
|
|
45
|
+
export function evaluateFeatures(key, splitNames, attributes, storage) {
|
|
46
|
+
var stringifiedSplits;
|
|
47
|
+
var evaluations = {};
|
|
48
|
+
|
|
49
|
+
try {
|
|
50
|
+
stringifiedSplits = storage.splits.fetchMany(splitNames);
|
|
51
|
+
} catch (e) {
|
|
52
|
+
// the only scenario where fetchMany can throw an error is when the storage
|
|
53
|
+
// is redis and there is a connection issue and we can't retrieve the split
|
|
54
|
+
// to be evaluated
|
|
55
|
+
splitNames.forEach(function (splitName) {
|
|
56
|
+
evaluations[splitName] = treatmentException;
|
|
57
|
+
});
|
|
58
|
+
return Promise.resolve(evaluations);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
return thenable(stringifiedSplits) ? stringifiedSplits.then(function (splits) {
|
|
62
|
+
return getEvaluations(splitNames, splits, key, attributes, storage);
|
|
63
|
+
}) : getEvaluations(splitNames, stringifiedSplits, key, attributes, storage);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
function getEvaluation(stringifiedSplit, key, attributes, storage) {
|
|
67
|
+
var evaluation = {
|
|
68
|
+
treatment: CONTROL,
|
|
69
|
+
label: LabelsConstants.SPLIT_NOT_FOUND,
|
|
70
|
+
config: null
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
if (stringifiedSplit) {
|
|
74
|
+
var splitJSON = JSON.parse(stringifiedSplit);
|
|
75
|
+
var split = Engine.parse(splitJSON, storage);
|
|
76
|
+
evaluation = split.getTreatment(key, attributes, evaluateFeature); // If the storage is async and the evaluated split uses segment, evaluation is thenable
|
|
77
|
+
|
|
78
|
+
if (thenable(evaluation)) {
|
|
79
|
+
return evaluation.then(function (result) {
|
|
80
|
+
result.changeNumber = split.getChangeNumber();
|
|
81
|
+
result.config = splitJSON.configurations && splitJSON.configurations[result.treatment] || null;
|
|
82
|
+
return result;
|
|
83
|
+
});
|
|
84
|
+
} else {
|
|
85
|
+
evaluation.changeNumber = split.getChangeNumber(); // Always sync and optional
|
|
86
|
+
|
|
87
|
+
evaluation.config = splitJSON.configurations && splitJSON.configurations[evaluation.treatment] || null;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
return evaluation;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
function getEvaluations(splitNames, splits, key, attributes, storage) {
|
|
95
|
+
var result = {};
|
|
96
|
+
var thenables = [];
|
|
97
|
+
splitNames.forEach(function (splitName) {
|
|
98
|
+
var evaluation = getEvaluation(splits[splitName], key, attributes, storage);
|
|
99
|
+
|
|
100
|
+
if (thenable(evaluation)) {
|
|
101
|
+
thenables.push(evaluation.then(function (res) {
|
|
102
|
+
result[splitName] = res;
|
|
103
|
+
}));
|
|
104
|
+
} else {
|
|
105
|
+
result[splitName] = evaluation;
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
return thenables.length > 0 ? Promise.all(thenables).then(function () {
|
|
109
|
+
return result;
|
|
110
|
+
}) : result;
|
|
111
|
+
}
|
|
@@ -0,0 +1,112 @@
|
|
|
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
|
+
import objectAssign from 'object-assign';
|
|
17
|
+
import { get } from '../utils/lang';
|
|
18
|
+
import parser from './parser';
|
|
19
|
+
import keyParser from '../utils/key/parser';
|
|
20
|
+
import thenable from '../utils/promise/thenable';
|
|
21
|
+
import * as LabelsConstants from '../utils/labels';
|
|
22
|
+
import { CONTROL } from '../utils/constants';
|
|
23
|
+
|
|
24
|
+
function defaults(inst) {
|
|
25
|
+
// in case we don't have a default treatment in the instanciation, use 'control'
|
|
26
|
+
if (typeof inst.baseInfo.defaultTreatment !== 'string') {
|
|
27
|
+
inst.baseInfo.defaultTreatment = CONTROL;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
function evaluationResult(result, defaultTreatment) {
|
|
32
|
+
return {
|
|
33
|
+
treatment: get(result, 'treatment', defaultTreatment),
|
|
34
|
+
label: get(result, 'label', LabelsConstants.NO_CONDITION_MATCH)
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
function Split(baseInfo, evaluator) {
|
|
39
|
+
if (!(this instanceof Split)) {
|
|
40
|
+
return new Split(baseInfo, evaluator);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
this.baseInfo = baseInfo;
|
|
44
|
+
this.evaluator = evaluator;
|
|
45
|
+
defaults(this);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
Split.parse = function parse(splitFlatStructure, storage) {
|
|
49
|
+
var conditions = splitFlatStructure.conditions;
|
|
50
|
+
var evaluator = parser(conditions, storage);
|
|
51
|
+
return new Split(objectAssign({}, splitFlatStructure), evaluator);
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
Split.prototype.getKey = function getKey() {
|
|
55
|
+
return this.baseInfo.name;
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
Split.prototype.getTreatment = function getTreatment(key, attributes, splitEvaluator) {
|
|
59
|
+
var _this$baseInfo = this.baseInfo,
|
|
60
|
+
killed = _this$baseInfo.killed,
|
|
61
|
+
seed = _this$baseInfo.seed,
|
|
62
|
+
defaultTreatment = _this$baseInfo.defaultTreatment,
|
|
63
|
+
trafficAllocation = _this$baseInfo.trafficAllocation,
|
|
64
|
+
trafficAllocationSeed = _this$baseInfo.trafficAllocationSeed,
|
|
65
|
+
algo = _this$baseInfo.algo;
|
|
66
|
+
var parsedKey;
|
|
67
|
+
var treatment;
|
|
68
|
+
var label;
|
|
69
|
+
|
|
70
|
+
try {
|
|
71
|
+
parsedKey = keyParser(key);
|
|
72
|
+
} catch (err) {
|
|
73
|
+
return {
|
|
74
|
+
treatment: CONTROL,
|
|
75
|
+
label: LabelsConstants.EXCEPTION
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
if (this.isGarbage()) {
|
|
80
|
+
treatment = CONTROL;
|
|
81
|
+
label = LabelsConstants.SPLIT_ARCHIVED;
|
|
82
|
+
} else if (killed) {
|
|
83
|
+
treatment = defaultTreatment;
|
|
84
|
+
label = LabelsConstants.SPLIT_KILLED;
|
|
85
|
+
} else {
|
|
86
|
+
var evaluation = this.evaluator(parsedKey, seed, trafficAllocation, trafficAllocationSeed, attributes, algo, splitEvaluator); // Evaluation could be async, so we should handle that case checking for a
|
|
87
|
+
// thenable object
|
|
88
|
+
|
|
89
|
+
if (thenable(evaluation)) {
|
|
90
|
+
return evaluation.then(function (result) {
|
|
91
|
+
return evaluationResult(result, defaultTreatment);
|
|
92
|
+
});
|
|
93
|
+
} else {
|
|
94
|
+
return evaluationResult(evaluation, defaultTreatment);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
return {
|
|
99
|
+
treatment: treatment,
|
|
100
|
+
label: label
|
|
101
|
+
};
|
|
102
|
+
};
|
|
103
|
+
|
|
104
|
+
Split.prototype.isGarbage = function isGarbage() {
|
|
105
|
+
return this.baseInfo.status === 'ARCHIVED';
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
Split.prototype.getChangeNumber = function getChangeNumber() {
|
|
109
|
+
return this.baseInfo.changeNumber;
|
|
110
|
+
};
|
|
111
|
+
|
|
112
|
+
export default Split;
|
|
@@ -0,0 +1,32 @@
|
|
|
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
|
+
import logFactory from '../../utils/logger';
|
|
17
|
+
var log = logFactory('splitio-engine:matcher');
|
|
18
|
+
|
|
19
|
+
function allMatcher(runtimeAttr
|
|
20
|
+
/*: string */
|
|
21
|
+
)
|
|
22
|
+
/*: boolean */
|
|
23
|
+
{
|
|
24
|
+
log.debug('[allMatcher] is always true');
|
|
25
|
+
return runtimeAttr != null;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
function allMatcherContext() {
|
|
29
|
+
return allMatcher;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export default allMatcherContext;
|
|
@@ -0,0 +1,35 @@
|
|
|
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
|
+
import logFactory from '../../utils/logger';
|
|
17
|
+
var log = logFactory('splitio-engine:matcher');
|
|
18
|
+
|
|
19
|
+
function betweenMatcherContext(ruleVO
|
|
20
|
+
/*: betweenObject */
|
|
21
|
+
)
|
|
22
|
+
/*: Function */
|
|
23
|
+
{
|
|
24
|
+
return function betweenMatcher(runtimeAttr
|
|
25
|
+
/*: number */
|
|
26
|
+
)
|
|
27
|
+
/*: boolean */
|
|
28
|
+
{
|
|
29
|
+
var isBetween = runtimeAttr >= ruleVO.start && runtimeAttr <= ruleVO.end;
|
|
30
|
+
log.debug("[betweenMatcher] is " + runtimeAttr + " between " + ruleVO.start + " and " + ruleVO.end + "? " + isBetween);
|
|
31
|
+
return isBetween;
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export default betweenMatcherContext;
|
|
@@ -0,0 +1,35 @@
|
|
|
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
|
+
import logFactory from '../../utils/logger';
|
|
17
|
+
var log = logFactory('splitio-engine:matcher');
|
|
18
|
+
|
|
19
|
+
function booleanMatcherContext(ruleAttr
|
|
20
|
+
/*: bool */
|
|
21
|
+
)
|
|
22
|
+
/*: Function */
|
|
23
|
+
{
|
|
24
|
+
return function booleanMatcher(runtimeAttr
|
|
25
|
+
/*: bool */
|
|
26
|
+
)
|
|
27
|
+
/*: bool */
|
|
28
|
+
{
|
|
29
|
+
var booleanMatches = ruleAttr === runtimeAttr;
|
|
30
|
+
log.debug("[booleanMatcher] " + ruleAttr + " === " + runtimeAttr);
|
|
31
|
+
return booleanMatches;
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export default booleanMatcherContext;
|
|
@@ -0,0 +1,51 @@
|
|
|
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
|
+
import logFactory from '../../utils/logger';
|
|
17
|
+
var log = logFactory('splitio-engine:matcher');
|
|
18
|
+
import { findIndex } from '../../utils/lang';
|
|
19
|
+
|
|
20
|
+
function containsAllMatcherContext(ruleAttr
|
|
21
|
+
/*: array */
|
|
22
|
+
)
|
|
23
|
+
/*: Function */
|
|
24
|
+
{
|
|
25
|
+
return function containsAllMatcher(runtimeAttr
|
|
26
|
+
/*: array */
|
|
27
|
+
)
|
|
28
|
+
/*: boolean */
|
|
29
|
+
{
|
|
30
|
+
var containsAll = true;
|
|
31
|
+
|
|
32
|
+
if (runtimeAttr.length < ruleAttr.length) {
|
|
33
|
+
containsAll = false;
|
|
34
|
+
} else {
|
|
35
|
+
var _loop = function _loop(i) {
|
|
36
|
+
if (findIndex(runtimeAttr, function (e) {
|
|
37
|
+
return e === ruleAttr[i];
|
|
38
|
+
}) < 0) containsAll = false;
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
for (var i = 0; i < ruleAttr.length && containsAll; i++) {
|
|
42
|
+
_loop(i);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
log.debug("[containsAllMatcher] " + runtimeAttr + " contains all elements of " + ruleAttr + "? " + containsAll);
|
|
47
|
+
return containsAll;
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export default containsAllMatcherContext;
|
|
@@ -0,0 +1,47 @@
|
|
|
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
|
+
import logFactory from '../../utils/logger';
|
|
17
|
+
var log = logFactory('splitio-engine:matcher');
|
|
18
|
+
import { findIndex } from '../../utils/lang';
|
|
19
|
+
|
|
20
|
+
function containsAnyMatcherContext(ruleAttr
|
|
21
|
+
/*: array */
|
|
22
|
+
)
|
|
23
|
+
/*: Function */
|
|
24
|
+
{
|
|
25
|
+
return function containsAnyMatcher(runtimeAttr
|
|
26
|
+
/*: array */
|
|
27
|
+
)
|
|
28
|
+
/*: boolean */
|
|
29
|
+
{
|
|
30
|
+
var containsAny = false;
|
|
31
|
+
|
|
32
|
+
var _loop = function _loop(i) {
|
|
33
|
+
if (findIndex(runtimeAttr, function (e) {
|
|
34
|
+
return e === ruleAttr[i];
|
|
35
|
+
}) >= 0) containsAny = true;
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
for (var i = 0; i < ruleAttr.length && !containsAny; i++) {
|
|
39
|
+
_loop(i);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
log.debug("[containsAnyMatcher] " + runtimeAttr + " contains at least an element of " + ruleAttr + "? " + containsAny);
|
|
43
|
+
return containsAny;
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export default containsAnyMatcherContext;
|
|
@@ -0,0 +1,38 @@
|
|
|
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
|
+
import { isString } from '../../utils/lang';
|
|
17
|
+
import logFactory from '../../utils/logger';
|
|
18
|
+
var log = logFactory('splitio-engine:matcher');
|
|
19
|
+
|
|
20
|
+
function containsStringMatcherContext(ruleAttr
|
|
21
|
+
/*: array */
|
|
22
|
+
)
|
|
23
|
+
/*: Function */
|
|
24
|
+
{
|
|
25
|
+
return function containsStringMatcher(runtimeAttr
|
|
26
|
+
/*: string */
|
|
27
|
+
)
|
|
28
|
+
/*: boolean */
|
|
29
|
+
{
|
|
30
|
+
var contains = ruleAttr.some(function (e) {
|
|
31
|
+
return isString(runtimeAttr) && runtimeAttr.indexOf(e) > -1;
|
|
32
|
+
});
|
|
33
|
+
log.debug("[containsStringMatcher] " + runtimeAttr + " contains " + ruleAttr + "? " + contains);
|
|
34
|
+
return contains;
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export default containsStringMatcherContext;
|
|
@@ -0,0 +1,50 @@
|
|
|
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
|
+
import logFactory from '../../utils/logger';
|
|
17
|
+
var log = logFactory('splitio-engine:matcher');
|
|
18
|
+
import thenable from '../../utils/promise/thenable';
|
|
19
|
+
|
|
20
|
+
function checkTreatment(evaluation, acceptableTreatments, parentName) {
|
|
21
|
+
var matches = false;
|
|
22
|
+
|
|
23
|
+
if (Array.isArray(acceptableTreatments)) {
|
|
24
|
+
matches = acceptableTreatments.indexOf(evaluation.treatment) !== -1;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
log.debug("[dependencyMatcher] Parent split \"" + parentName + "\" evaluated to \"" + evaluation.treatment + "\" with label \"" + evaluation.label + "\". " + parentName + " evaluated treatment is part of [" + acceptableTreatments + "] ? " + matches + ".");
|
|
28
|
+
return matches;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
function dependencyMatcherContext(_ref, storage) {
|
|
32
|
+
var split = _ref.split,
|
|
33
|
+
treatments = _ref.treatments;
|
|
34
|
+
return function dependencyMatcher(_ref2, splitEvaluator) {
|
|
35
|
+
var key = _ref2.key,
|
|
36
|
+
attributes = _ref2.attributes;
|
|
37
|
+
log.debug("[dependencyMatcher] will evaluate parent split: \"" + split + "\" with key: " + JSON.stringify(key) + " " + (attributes ? "\n attributes: " + JSON.stringify(attributes) : ''));
|
|
38
|
+
var evaluation = splitEvaluator(key, split, attributes, storage);
|
|
39
|
+
|
|
40
|
+
if (thenable(evaluation)) {
|
|
41
|
+
return evaluation.then(function (ev) {
|
|
42
|
+
return checkTreatment(ev, treatments, split);
|
|
43
|
+
});
|
|
44
|
+
} else {
|
|
45
|
+
return checkTreatment(evaluation, treatments, split);
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export default dependencyMatcherContext;
|