Skip to content

Commit

Permalink
feat: Update in-range? to support regular expression experimentally
Browse files Browse the repository at this point in the history
  • Loading branch information
liquidz committed Apr 30, 2023
1 parent eb338fd commit eb7be87
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 16 deletions.
30 changes: 23 additions & 7 deletions src/antq/util/ver.clj
Original file line number Diff line number Diff line change
Expand Up @@ -53,11 +53,27 @@
no-latest-version-error))

(defn in-range?
"e.g. '1.x' matches '1.0.0', '1.1.0' and so on."
"e.g. '1.x' matches '1.0.0', '1.1.0' and so on.
cf. https://docs.npmjs.com/cli/v6/configuring-npm/package-json#dependencies"
[version-range target-version]
(let [re (-> version-range
(str/replace "." "\\.")
(str/replace "\\.x" "\\.+")
(->> (str "^"))
(re-pattern))]
(some? (re-seq re target-version))))

(cond
(str/starts-with? version-range "=~")
(-> version-range
(subs 2)
(str/trim)
(re-pattern)
(re-seq target-version)
(some?))

(str/includes? version-range ".x")
(-> version-range
(str/replace "." "\\.")
(str/replace "\\.x" "\\.+")
(->> (str "^"))
(re-pattern)
(re-seq target-version)
(some?))

:else
(= version-range target-version)))
26 changes: 17 additions & 9 deletions test/antq/util/ver_test.clj
Original file line number Diff line number Diff line change
Expand Up @@ -53,13 +53,21 @@

(t/deftest in-range?-test
(t/is (true? (sut/in-range? "1.0.0" "1.0.0")))
(t/is (true? (sut/in-range? "1.0.x" "1.0.0")))
(t/is (true? (sut/in-range? "1.x" "1.0.0")))
(t/is (true? (sut/in-range? "1.x" "1.1.0")))
(t/is (true? (sut/in-range? "2.x" "2.0.0")))

(t/is (false? (sut/in-range? "1.0.0" "1.0.1")))
(t/is (false? (sut/in-range? "1.0.0" "10000")))
(t/is (false? (sut/in-range? "1.0.1" "1.0.0")))
(t/is (false? (sut/in-range? "1.0.x" "1.1.0")))
(t/is (false? (sut/in-range? "1.x" "2.0.0")))
(t/is (false? (sut/in-range? "2.x" "1.2.0"))))

(t/testing "=~"
(t/is (true? (sut/in-range? "=~1.0.0" "1.0.0")))
(t/is (true? (sut/in-range? "=~1.0.0" "1a0a0")))
(t/is (true? (sut/in-range? "=~1.*" "1.0.0")))
(t/is (true? (sut/in-range? "=~1.*" "1foo"))))

(t/testing ".x"
(t/is (true? (sut/in-range? "1.0.x" "1.0.0")))
(t/is (true? (sut/in-range? "1.x" "1.0.0")))
(t/is (true? (sut/in-range? "1.x" "1.1.0")))
(t/is (true? (sut/in-range? "2.x" "2.0.0")))

(t/is (false? (sut/in-range? "1.0.x" "1.1.0")))
(t/is (false? (sut/in-range? "1.x" "2.0.0")))
(t/is (false? (sut/in-range? "2.x" "1.2.0")))))

0 comments on commit eb7be87

Please sign in to comment.