diff --git a/commitlint/fpHelpers.ts b/commitlint/fpHelpers.ts index 33f950e7..5e01fc06 100644 --- a/commitlint/fpHelpers.ts +++ b/commitlint/fpHelpers.ts @@ -49,3 +49,15 @@ export class OptionStatic { } } } + +export class TypeHelpers { + // because instanceof doesn't work with primitive types (e.g. String), taken from https://stackoverflow.com/a/58184883/544947 + public static IsInstanceOf(variable: any, type: any) { + let res:boolean = false; + if (typeof type == 'string') + res = (typeof variable == type.toLowerCase()); + else + res = (variable.constructor == type); + return res; + } +} diff --git a/commitlint/tests/testHelpers.ts b/commitlint/tests/testHelpers.ts index d86f9eb8..24ac6959 100644 --- a/commitlint/tests/testHelpers.ts +++ b/commitlint/tests/testHelpers.ts @@ -1,5 +1,5 @@ import { test, expect } from "vitest"; -import { None, Some, Option, OptionStatic } from "../fpHelpers.js"; +import { None, Some, Option, OptionStatic, TypeHelpers } from "../fpHelpers.js"; const { spawnSync } = require("child_process"); const os = require("os"); @@ -50,6 +50,42 @@ test("testing OfObj", () => { expect(typeGuard(ofObj2(four))).toBe("NAH"); }); +class Foo { + public JustToMakeFooNonEmpty(){ + return null; + } +} +class Bar { + public JustToMakeBarNonEmpty(){ + return null; + } +} + +test("testing TypeHelpers.IsInstanceOf", () => { + let str1 = "foo"; + expect(TypeHelpers.IsInstanceOf(str1, String)).toBe(true); + let str2 = String("foo"); + expect(TypeHelpers.IsInstanceOf(str2, String)).toBe(true); + let str3 = 'foo'; + expect(TypeHelpers.IsInstanceOf(str3, String)).toBe(true); + let nonStr = 3; + expect(TypeHelpers.IsInstanceOf(nonStr, String)).toBe(false); + + let int1 = 2; + expect(TypeHelpers.IsInstanceOf(int1, Number)).toBe(true); + let int2 = Number(2); + expect(TypeHelpers.IsInstanceOf(int2, Number)).toBe(true); + let nonInt = "2"; + expect(TypeHelpers.IsInstanceOf(nonInt, Number)).toBe(false); + + let foo = new Foo(); + let bar = new Bar(); + expect(TypeHelpers.IsInstanceOf(foo, Foo)).toBe(true); + expect(TypeHelpers.IsInstanceOf(bar, Bar)).toBe(true); + expect(TypeHelpers.IsInstanceOf(foo, Bar)).toBe(false); + expect(TypeHelpers.IsInstanceOf(bar, Foo)).toBe(false); +}); + export function runCommitLintOnMsg(inputMsg: string) { // FIXME: should we .lowerCase().startsWith("win") in case it starts // returning Win64 in the future? thing is, our CI doesn't like this