41 | );
42 | }
43 |
44 | export default App;
45 |
--------------------------------------------------------------------------------
/packages/experiment-core/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "@amplitude/experiment-core",
3 | "version": "0.12.0",
4 | "private": false,
5 | "description": "Amplitude Experiment evaluation JavaScript implementation.",
6 | "keywords": [
7 | "experiment",
8 | "amplitude",
9 | "evaluation"
10 | ],
11 | "author": "Amplitude",
12 | "homepage": "https://github.com/amplitude/experiment-js-client",
13 | "license": "MIT",
14 | "main": "dist/experiment-core.umd.js",
15 | "module": "dist/experiment-core.esm.js",
16 | "es2015": "dist/experiment-core.es2015.js",
17 | "types": "dist/types/src/index.d.ts",
18 | "publishConfig": {
19 | "access": "public"
20 | },
21 | "repository": {
22 | "type": "git",
23 | "url": "https://github.com/amplitude/experiment-js-client.git",
24 | "directory": "packages/experiment-core"
25 | },
26 | "scripts": {
27 | "build": "rm -rf dist && rollup -c",
28 | "clean": "rimraf node_modules dist",
29 | "lint": "eslint . --ignore-path ../../.eslintignore && prettier -c . --ignore-path ../../.prettierignore",
30 | "test": "jest",
31 | "prepublish": "yarn build"
32 | },
33 | "bugs": {
34 | "url": "https://github.com/amplitude/experiment-js-client/issues"
35 | },
36 | "dependencies": {
37 | "js-base64": "^3.7.5"
38 | },
39 | "devDependencies": {
40 | "unfetch": "^4.1.0"
41 | },
42 | "files": [
43 | "dist"
44 | ]
45 | }
46 |
--------------------------------------------------------------------------------
/packages/experiment-browser/src/util/index.ts:
--------------------------------------------------------------------------------
1 | import { EvaluationFlag } from '@amplitude/experiment-core';
2 |
3 | export const isNullOrUndefined = (value: unknown): boolean => {
4 | return value === null || value === undefined;
5 | };
6 |
7 | export const isNullUndefinedOrEmpty = (value: unknown): boolean => {
8 | if (isNullOrUndefined(value)) return true;
9 | return value && Object.keys(value).length === 0;
10 | };
11 |
12 | /**
13 | * Filters out null and undefined values from an object, returning a new object
14 | * with only defined values. This is useful for config merging where you want
15 | * defaults to take precedence over explicit null/undefined values.
16 | */
17 | export const filterNullUndefined =