Skip to content

Commit

Permalink
Merge pull request #24 from molassesapp/add-semver-support
Browse files Browse the repository at this point in the history
feat: Add support for semver and upgrade dependencies
  • Loading branch information
securingsincity authored Jul 10, 2021
2 parents 91f4e54 + e07e019 commit 6a64e55
Show file tree
Hide file tree
Showing 16 changed files with 8,665 additions and 14,753 deletions.
14,170 changes: 6,747 additions & 7,423 deletions package-lock.json

Large diffs are not rendered by default.

38 changes: 19 additions & 19 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -19,31 +19,31 @@
},
"homepage": "https://github.com/molassesapp/molasses-node#readme",
"devDependencies": {
"@babel/core": "^7.11.5",
"@babel/plugin-proposal-class-properties": "^7.10.4",
"@babel/preset-env": "^7.11.5",
"@babel/preset-react": "^7.10.4",
"@babel/preset-typescript": "^7.10.4",
"@types/jest": "^26.0.12",
"@typescript-eslint/eslint-plugin": "^4.0.1",
"@typescript-eslint/parser": "^4.0.1",
"babel-jest": "^26.3.0",
"eslint": "^7.8.1",
"@babel/core": "^7.14.6",
"@babel/plugin-proposal-class-properties": "^7.14.5",
"@babel/preset-env": "^7.14.7",
"@babel/preset-react": "^7.14.5",
"@babel/preset-typescript": "^7.14.5",
"@types/jest": "^26.0.24",
"@typescript-eslint/eslint-plugin": "^4.28.2",
"@typescript-eslint/parser": "^4.28.2",
"babel-jest": "^27.0.6",
"eslint": "^7.30.0",
"eventsourcemock": "^2.0.0",
"jest": "^26.4.2",
"jest-mock-axios": "^4.2.1",
"lerna": "^3.22.1",
"mocksse": "^1.0.2",
"prettier": "^2.1.1",
"jest": "^27.0.6",
"jest-mock-axios": "^4.4.0",
"lerna": "^4.0.0",
"mocksse": "^1.0.3",
"prettier": "^2.3.2",
"react": "^16.13.1",
"react-dom": "^16.13.1",
"ts-jest": "^26.3.0",
"typescript": "^4.0.2"
"ts-jest": "^27.0.3",
"typescript": "^4.3.5"
},
"dependencies": {
"axios": "^0.21.1",
"axios-retry": "^3.1.8",
"core-js": "^3.6.5",
"axios-retry": "^3.1.9",
"core-js": "^3.15.2",
"express": "^4.17.1"
}
}
21 changes: 21 additions & 0 deletions packages/common/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion packages/common/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
},
"gitHead": "939c3bb0e2d390ded7d422ade06e355b09ccf667",
"dependencies": {
"crc": "^3.8.0"
"crc": "^3.8.0",
"semver": "^7.3.5"
}
}
55 changes: 55 additions & 0 deletions packages/common/src/feature.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
const { crc32 } = require("crc")
const compare = require("semver/functions/compare-loose")
export interface Feature {
id?: string
key: string
Expand Down Expand Up @@ -27,11 +28,14 @@ export enum SegmentType {
alwaysExperiment = "alwaysExperiment",
everyoneElse = "everyoneElse",
}

export enum UserParamType {
number = "number",
boolean = "boolean",
string = "string",
semver = "semver",
}

export enum Operator {
any = "any",
all = "all",
Expand Down Expand Up @@ -143,6 +147,12 @@ const isUserInSegment = (user: User, s: FeatureSegment) => {
constraintsMet = constraintsMet + 1
}
break
case UserParamType.semver:
const valueSemver = parseString(userValue)
if (meetsConstraintForSemVer(valueSemver as string, paramExists, constraint)) {
constraintsMet = constraintsMet + 1
}
break
default:
const value = parseString(userValue)
if (meetsConstraint(value as string, paramExists, constraint)) {
Expand Down Expand Up @@ -209,6 +219,51 @@ const meetsConstraintForBool = (
}
return false
}
const meetsConstraintForSemVer = (
userValue: string,
paramExists: boolean,
constraint: UserConstraint,
) => {
const value = userValue
if (!paramExists) {
return false
}
switch (constraint.operator) {
case Operator.equals:
if (compare(value, constraint.values) === 0) {
return true
}
break
case Operator.doesNotEqual:
if (compare(value, constraint.values) !== 0) {
return true
}
break
case Operator.lessThan:
if (compare(value, constraint.values) < 0) {
return true
}
break
case Operator.lessThanOrEqualTo:
if (compare(value, constraint.values) <= 0) {
return true
}
break
case Operator.greaterThan:
if (compare(value, constraint.values) > 0) {
return true
}
break
case Operator.greaterThanOrEqualTo:
if (compare(value, constraint.values) >= 0) {
return true
}
break
default:
return false
}
return false
}

const meetsConstraint = (userValue: string, paramExists: boolean, constraint: UserConstraint) => {
switch (constraint.operator) {
Expand Down
Loading

0 comments on commit 6a64e55

Please sign in to comment.