@statsig/js-local-overrides 3.25.6 → 3.27.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@statsig/js-local-overrides",
3
- "version": "3.25.6",
3
+ "version": "3.27.0",
4
4
  "license": "ISC",
5
5
  "homepage": "https://github.com/statsig-io/js-client-monorepo",
6
6
  "repository": {
@@ -9,7 +9,7 @@
9
9
  "directory": "packages/js-local-overrides"
10
10
  },
11
11
  "dependencies": {
12
- "@statsig/client-core": "3.25.6"
12
+ "@statsig/client-core": "3.27.0"
13
13
  },
14
14
  "type": "commonjs",
15
15
  "main": "./src/index.js",
@@ -1,9 +1,10 @@
1
- import { DynamicConfig, Experiment, FeatureGate, Layer, OverrideAdapter, StatsigUser } from '@statsig/client-core';
1
+ import { DynamicConfig, EvaluationDetails, Experiment, FeatureGate, Layer, OverrideAdapter, ParamStoreConfig, ParameterStore, StatsigUser } from '@statsig/client-core';
2
2
  export type OverrideStore = {
3
3
  gate: Record<string, boolean>;
4
4
  dynamicConfig: Record<string, Record<string, unknown>>;
5
5
  experiment: OverrideStore['dynamicConfig'];
6
6
  layer: OverrideStore['dynamicConfig'];
7
+ paramStore: Record<string, Record<string, unknown>>;
7
8
  };
8
9
  export declare class LocalOverrideAdapter implements OverrideAdapter {
9
10
  private _overrides;
@@ -24,9 +25,16 @@ export declare class LocalOverrideAdapter implements OverrideAdapter {
24
25
  getExperimentOverride(current: Experiment, _user: StatsigUser): Experiment | null;
25
26
  overrideLayer(name: string, value: Record<string, unknown>): void;
26
27
  removeLayerOverride(name: string): void;
28
+ overrideParamStore(name: string, value: Record<string, unknown>): void;
29
+ removeParamStoreOverride(name: string): void;
30
+ getParamStoreOverride(current: ParameterStore): {
31
+ config: ParamStoreConfig;
32
+ details: EvaluationDetails;
33
+ } | null;
27
34
  getAllOverrides(): OverrideStore;
28
35
  removeAllOverrides(): void;
29
36
  getLayerOverride(current: Layer, _user: StatsigUser): Layer | null;
30
37
  private _getConfigOverride;
31
38
  private _hasInMemoryOverrides;
39
+ private _inferParamType;
32
40
  }
@@ -18,6 +18,7 @@ function _makeEmptyStore() {
18
18
  dynamicConfig: {},
19
19
  experiment: {},
20
20
  layer: {},
21
+ paramStore: {},
21
22
  };
22
23
  }
23
24
  function _mergeOverrides(currentValues, newValues) {
@@ -26,6 +27,7 @@ function _mergeOverrides(currentValues, newValues) {
26
27
  dynamicConfig: Object.assign({}, currentValues.dynamicConfig, newValues.dynamicConfig),
27
28
  experiment: Object.assign({}, currentValues.experiment, newValues.experiment),
28
29
  layer: Object.assign({}, currentValues.layer, newValues.layer),
30
+ paramStore: Object.assign({}, currentValues.paramStore, newValues.paramStore),
29
31
  };
30
32
  }
31
33
  class LocalOverrideAdapter {
@@ -133,6 +135,37 @@ class LocalOverrideAdapter {
133
135
  delete this._overrides.layer[(0, client_core_1._DJB2)(name)];
134
136
  this._saveOverridesToStorage();
135
137
  }
138
+ overrideParamStore(name, value) {
139
+ this._overrides.paramStore[name] = value;
140
+ this._overrides.paramStore[(0, client_core_1._DJB2)(name)] = value;
141
+ this._saveOverridesToStorage();
142
+ }
143
+ removeParamStoreOverride(name) {
144
+ this._warnIfStorageNotReady();
145
+ delete this._overrides.paramStore[name];
146
+ delete this._overrides.paramStore[(0, client_core_1._DJB2)(name)];
147
+ this._saveOverridesToStorage();
148
+ }
149
+ getParamStoreOverride(current) {
150
+ var _a;
151
+ const overridden = (_a = this._overrides.paramStore[current.name]) !== null && _a !== void 0 ? _a : this._overrides.paramStore[(0, client_core_1._DJB2)(current.name)];
152
+ if (overridden == null) {
153
+ return null;
154
+ }
155
+ const config = Object.assign({}, (current.__configuration || {}));
156
+ for (const [key, value] of Object.entries(overridden)) {
157
+ const paramType = this._inferParamType(value);
158
+ config[key] = {
159
+ ref_type: 'static',
160
+ param_type: paramType,
161
+ value,
162
+ };
163
+ }
164
+ return {
165
+ config,
166
+ details: Object.assign(Object.assign({}, current.details), { reason: LOCAL_OVERRIDE_REASON }),
167
+ };
168
+ }
136
169
  getAllOverrides() {
137
170
  return JSON.parse(JSON.stringify(this._overrides));
138
171
  }
@@ -161,7 +194,19 @@ class LocalOverrideAdapter {
161
194
  return (Object.keys(this._overrides.gate).length > 0 ||
162
195
  Object.keys(this._overrides.dynamicConfig).length > 0 ||
163
196
  Object.keys(this._overrides.experiment).length > 0 ||
164
- Object.keys(this._overrides.layer).length > 0);
197
+ Object.keys(this._overrides.layer).length > 0 ||
198
+ Object.keys(this._overrides.paramStore).length > 0);
199
+ }
200
+ _inferParamType(value) {
201
+ if (typeof value === 'string')
202
+ return 'string';
203
+ if (typeof value === 'boolean')
204
+ return 'boolean';
205
+ if (typeof value === 'number')
206
+ return 'number';
207
+ if (Array.isArray(value))
208
+ return 'array';
209
+ return 'object';
165
210
  }
166
211
  }
167
212
  exports.LocalOverrideAdapter = LocalOverrideAdapter;