From ef55bf00602ea50dc76d9b95503c1e9fe353b092 Mon Sep 17 00:00:00 2001 From: BluJ Date: Fri, 15 Jul 2022 13:16:34 -0600 Subject: [PATCH] feat: Negation at the begining --- emvar-lite/mod.ts | 3 +++ emvar-lite/test.ts | 37 +++++++++++++++++++++++++++++++++++-- 2 files changed, 38 insertions(+), 2 deletions(-) diff --git a/emvar-lite/mod.ts b/emvar-lite/mod.ts index 8c11273..e5239b5 100644 --- a/emvar-lite/mod.ts +++ b/emvar-lite/mod.ts @@ -146,6 +146,9 @@ export class Checker { EmVar.from(version) return true }); + if (range.startsWith('!')) { + return Checker.parse(range.substring(1)).not() + } const starSubMatches = starSub.exec(range) if (starSubMatches != null) { const emVarLower = EmVar.parse(starSubMatches[1]) diff --git a/emvar-lite/test.ts b/emvar-lite/test.ts index 2e93784..4edeba6 100644 --- a/emvar-lite/test.ts +++ b/emvar-lite/test.ts @@ -142,7 +142,7 @@ const { test } = Deno; { const checker = notRange(rangeOf('1.2.*')); - test(`!rangeOf(1.2.*) valid`, () => { + test(`notRange(rangeOf(1.2.*)) valid`, () => { expect(checker.check("1.3")).toBe(true); expect(checker.check("1.3.1")).toBe(true); @@ -153,7 +153,26 @@ const { test } = Deno; expect(checker.check("2")).toBe(true); }) - test(`!rangeOf(1.2.*) invalid `, () => { + test(`notRange(rangeOf(1.2.*)) invalid `, () => { + expect(checker.check("1.2")).toBe(false); + expect(checker.check("1.2.1")).toBe(false); + }) +} + +{ + const checker = rangeOf('!1.2.*'); + test(`!(rangeOf(1.2.*)) valid`, () => { + expect(checker.check("1.3")).toBe(true); + expect(checker.check("1.3.1")).toBe(true); + + expect(checker.check("1.1.1")).toBe(true); + expect(checker.check("1.1")).toBe(true); + expect(checker.check("1")).toBe(true); + + + expect(checker.check("2")).toBe(true); + }) + test(`!(rangeOf(1.2.*)) invalid `, () => { expect(checker.check("1.2")).toBe(false); expect(checker.check("1.2.1")).toBe(false); }) @@ -166,4 +185,18 @@ const { test } = Deno; test(`no or ranges`, () => { expect(() => rangeOr()).toThrow() }) +} +{ + const checker = rangeOf("!>1.2.3.4"); + test(`rangeOf("!>1.2.3.4") invalid`, () => { + expect(checker.check("2")).toBe(false); + expect(checker.check("1.2.3.5")).toBe(false); + expect(checker.check("1.2.3.4.1")).toBe(false); + }) + + test(`rangeOf("!>1.2.3.4") valid`, () => { + expect(checker.check("1.2.3.4")).toBe(true); + expect(checker.check("1.2.3")).toBe(true); + expect(checker.check("1")).toBe(true); + }) } \ No newline at end of file