
Security News
Node.js Drops Bug Bounty Rewards After Funding Dries Up
Node.js has paused its bug bounty program after funding ended, removing payouts for vulnerability reports but keeping its security process unchanged.
@xan105/is
Advanced tools
Collection of various checks for asserting types and values at runtime.
📦 Scoped @xan105 packages are for my own personal use but feel free to use them.
Check Windows/Linux 64-bit/32-bit executable
import { is64bit, is32bit } from "@xan105/is";
const is64 = await is64bit("path/to/executable");
const is32 = await is32bit("path/to/executable");
Check is PNG file
import { isPNG } from "@xan105/is";
const is = await isPNG("path/to/img");
Check winver
import * as check from "@xan105/is";
check.isWin10orGreater();
check.isWin11();
check.isWindows();
check.isWin64(); //64-bits
//etc...
Check Linux
import * as check from "@xan105/is";
check.isDebian();
check.isDebianLike(); //Debian + derivatives (eg: Ubuntu)
check.isGnome();
check.isWayland();
Check type
import * as check from "@xan105/is";
check.isStringNotEmpty("hello world");
check.isIntegerWithinRange(1,0,2);
check.isArrayOfString(["a","b"]);
//etc...
Check Object like
import { isObjLike, isString, isNumber } from "@xan105/is";
const family = {
name: "Xan",
age: 26,
child: {
name: "Xanette",
age: 15
}
};
isObjLike(family,{
name: isString,
age: isNumber,
child: {
name: isString,
age: isNumber
}
});
Perform the same check but throw an error instead.
import { shouldWin10orGreater } from "@xan105/is/assert";
shouldWin10orGreater();
import { assert } from "@xan105/is";
assert.shouldStringNotEmpty("hello world");
assert.shouldIntegerWithinRange(1,0,2, "Custom error message");
assert.shouldArrayOfString(["a","b"], new Error("custom error", { cause: err }));
//etc...
Return the given value when the condition is true otherwise null.
import { asString, asInteger } from "@xan105/is/opt";
function(option = {}){
const options = {
param1: asString(option.param1) || "hello world",
param2: asInteger(option.param2) ?? 0
};
}
npm install @xan105/is
import ... from "https://esm.sh/@xan105/is"
Please see https://esm.sh/ for more details.
⚠️ This module is only available as an ECMAScript module (ESM)
💡 assert and opt are under their respective namespace.
import { assert } from "@xan105/is";
assert.shouldWin10orGreater();
import { shouldWin10orGreater } from "@xan105/is/assert";
shouldWin10orGreater();
is64bit(filePath: string): Promise<boolean>Check if it's a 64-bits (x86_64) Windows or Linux binary.
is32bit(filePath: string): Promise<boolean>Same as above but for a 32-bits (x86) Windows or Linux binary.
isPNG(filePath: string): Promise<boolean>isJPG(filePath: string): Promise<boolean>isICO(filePath: string): Promise<boolean>isGIF(filePath: string): Promise<boolean>isWEBP(filePath: string): Promise<boolean>isQOI(filePath: string): Promise<boolean>isArray(value: unknown): booleanisArrayNotEmpty(value: unknown): booleanisArrayOfString(value: unknown): booleanisSizeArrayOfString(value: unknown, length: number): booleanisArrayOfStringNotEmpty(value: unknown): booleanisSizeArrayOfStringNotEmpty(value: unknown, length: number): booleanisArrayOfNumber(value: unknown): booleanisArrayOfStringLike(value: unknown, pattern: RegExp | string): booleanisSizeArrayOfStringLike(value: unknown, length: number, pattern: RegExp | string): booleanisSizeArrayOfNumber(value: unknown, length: number): booleanisArrayOfNumberWithinRange(value: unknown, min: number, max: number): booleanisSizeArrayOfNumberWithinRange(value: unknown, length: number, min: number, max: number): booleanisArrayOfInteger(value: unknown): booleanisSizeArrayOfInteger(value: unknown, length: number): booleanisArrayOfIntegerPositive(value: unknown): booleanisSizeArrayOfIntegerPositive(value: unknown, length: number): booleanisArrayOfIntegerPositiveOrZero(value: unknown): booleanisSizeArrayOfIntegerPositiveOrZero(value: unknown, length: number): booleanisArrayOfIntegerWithinRange(value: unknown, min: number, max: number): booleanisSizeArrayOfIntegerWithinRange(value: unknown, length: number, min: number, max: number): booleanisArrayOfObj(value: unknown): booleanisSizeArrayOfObj(value: unknown, length: number): booleanisArrayOfObjWithProperties(value: unknown, prop: string[]): booleanisSizeArrayOfObjWithProperties(value: unknown, length: number, prop: string[]): booleanisArrayOfObjLike(value: unknown, schema: object): booleanisArrayOfSomeObjLike(value: unknown, schema: object): booleanSame as isArrayOfObjLike() but at least one element in the array must pass the test instead of all
isSizeArrayOfObjLike(value: unknown, length: number, schema: object): booleanisArrayOfUint8Array(value: unknown): booleanalias: isArrayOfBuffer(value: unknown): boolean
isSizeArrayOfUint8Array(value: unknown, length: number): booleanalias: isSizeArrayOfBuffer
isBigInt(value: unknown): booleanisBigIntPositive(value: unknown): booleanisBigIntPositiveOrZero(value: unknown): booleanisBigIntWithinRange(value: unknown, min: bigint, max: bigint): booleanisInteger(value: unknown): booleanisIntegerPositive(value: unknown): booleanisIntegerPositiveOrZero(value: unknown): booleanisIntegerWithinRange(value: unknown, min: number, max: number): booleanisNumber(value: unknown): booleanisNumberWithinRange(value: unknown, min: number, max: number): booleanisObj(value: unknown): booleanas in a "plain obj" and not a JS obj so {}, new Object() and Object.create(null).
isObjNotEmpty(value: unknown): booleanisObjWithProperties(value: unknown, prop: string[]): booleanisObjLike(value: unknown, schema: object): booleanCheck if an obj is like the specified schema.
Where schema is an obj containing a set of required property name and its corresponding check function.
If the obj has these properties and they are validated by said corresponding function then this will return true otherwise false.
const family = {
name: "Xan",
age: 26,
child: {
name: "Xanette",
age: 15,
height: 164,
weight: 42
}
};
isObjLike(family,{
name: isString,
age: isNumber,
child: {
name: isStringNotEmpty,
age: [ isIntegerWithinRange, [0,100] ],
height: isNumber,
weight: [ isNumber, [] ]
}
});
The check funtion should only return a boolean.
Otherwise or if the function throws then false will be assumed.
NB: Function that use @xan105/error will bypass this and still throw (this is by design).
The check funtion should be defined as follow: something: [function, [args,...] ]
If you don't have any args then an empty array: something: [function, [] ]
Or you can pass the function as is (shortcut): something: function
Note that something: [function] is invalid !
💡 You can flag a property to be optional by using {optional: true}.
If the property is missing it will be skipped.
eg: something: [function, [], {optional: true}]
isObjWithinObj(value: unknown): booleanPlain object assigned as property within another:
{
foo: {
bar: "foo"
},
bar: {
foo: "bar"
}
}
isString(value: unknown): booleanisStringNotEmpty(value: unknown): booleanisStringLike(value: unknown, pattern: RegExp | string): booleanIf pattern is a string, this function will look for a corresponding known regex pattern.
As of this writing, these are:
hex: HexadecimalSRI: Subresource IntegrityisHexString(value: unknown): booleanisBoolean(value: unknown): booleanisUint8Array(value: unknown): booleanalias: isBuffer(value: unknown): boolean
isError(value: unknown): booleanisRegExp(value: unknown): booleanisPromise(value: unknown): booleanisFunction(value: unknown): booleanisWindows(): booleanisWindowsX86(): booleanalias: isWin32(): boolean
isWindowsX64(): booleanalias: isWin64(): boolean
isWin11orGreater(): booleanisWin10orGreater(): booleanisWin8orGreater(): booleanisWin7orGreater(): booleanisWin11orLesser(): booleanisWin10orLesser(): booleanisWin8orLesser(): booleanisWin7orLesser(): booleanisWin11(): booleanisWin10(): booleanisWin8(): booleanisWin7(): booleanisLinux(): booleanisArch(): Promise<boolean>isArchLike(): Promise<boolean>isManjaro(): Promise<boolean>isDebian(): Promise<boolean>isDebianLike(): Promise<boolean>isUbuntu(): Promise<boolean>isUbuntuLike(): Promise<boolean>isMint(): Promise<boolean>isPopOS(): Promise<boolean>isElementaryOS(): Promise<boolean>isDeepin(): Promise<boolean>isRaspberryPiOS(): Promise<boolean>alias: isRaspbian(): Promise<boolean>
isFedora(): Promise<boolean>isFedoraLike(): Promise<boolean>isOpenSUSE(): Promise<boolean>isSlackware(): Promise<boolean>isGentoo(): Promise<boolean>isGnome(): booleanisKDE(): booleanisXFCE(): booleanisMate(): booleanisCinnamon(): booleanisWayland(): booleanisIP(value: string): booleanisIPv4(value: string): booleanisIPv6(value: string): booleanisDeno(): booleanisNode(): booleanisBrowser(): booleanPerform the same checks as above but throw an error instead.
This replace the cumbersome and often repetitive "if(unexpected) throw Error" pattern.
💡 Every assertion has an optional error parameter to override the default Error.
You can either use
Error classeg:
assert.shouldIntegerWithinRange(1,0,2, "Custom error message");
assert.shouldArrayOfString(["a","b"], new Error("custom error", { cause: err }));
should64bit (filePath: string, error?: Error | string): Promise<void>should32bit (filePath: string, error?: Error | string): Promise<void>shouldPNG(filePath: string, error?: Error | string): Promise<void>shouldJPG(filePath: string, error?: Error | string): Promise<void>shouldICO(filePath: string, error?: Error | string): Promise<void>shouldGIF(filePath: string, error?: Error | string): Promise<void>shouldWEBP(filePath: string, error?: Error | string): Promise<void>shouldQOI(filePath: string, error?: Error | string): Promise<void>shouldArray(value: unknown, error?: Error | string): voidshouldArrayNotEmpty(value: unknown, error?: Error | string): voidshouldArrayOfString(value: unknown, error?: Error | string): voidshouldSizeArrayOfString(value: unknown, length: number, error?: Error | string): voidshouldArrayOfStringNotEmpty(value: unknown, error?: Error | string): voidshouldSizeArrayOfStringNotEmpty(value: unknown, length: number, error?: Error | string): voidshouldArrayOfStringLike(value: unknown, pattern: RegExp | string, error?: Error | string | null): voidshouldSizeArrayOfStringLike(value: unknown, length: number, pattern: RegExp | string, error?: Error | string | null): voidshouldArrayOfNumber(value: unknown, error?: Error | string): voidshouldSizeArrayOfNumber(value: unknown, length: number, error?: Error | string): voidshouldArrayOfNumberWithinRange(value: unknown, min: number, max: number, error?: Error | string): voidshouldSizeArrayOfNumberWithinRange(value: unknown, length: number, min: number, max: number, error?: Error | string): voidshouldArrayOfInteger(value: unknown, error?: Error | string): voidshouldSizeArrayOfInteger(value: unknown, length: number, error?: Error | string): voidshouldArrayOfIntegerPositive(value: unknown, error?: Error | string): voidshouldSizeArrayOfIntegerPositive(value: unknown, length: number, error?: Error | string): voidshouldArrayOfIntegerPositiveOrZero(value: unknown, error?: Error | string): voidshouldSizeArrayOfIntegerPositiveOrZero(value: unknown, length: number, error?: Error | string): voidshouldArrayOfIntegerWithinRange(value: unknown, min: number, max: number, error?: Error | string): voidshouldSizeArrayOfIntegerWithinRange(value: unknown, length: number, min: number, max: number, error?: Error | string): voidshouldArrayOfObj(value: unknown, error?: Error | string): voidshouldSizeArrayOfObj(value: unknown, length: number, error?: Error | string): voidshouldArrayOfObjWithProperties(value: unknown, prop: string[], error?: Error | string): voidshouldSizeArrayOfObjWithProperties(value: unknown, length: number, prop: string[], error?: Error | string): voidshouldArrayOfObjLike(value: unknown, schema: object, error?: Error | string): voidshouldArrayOfSomeObjLike(value: unknown, schema: object, error?: Error | string): voidshouldSizeArrayOfObjLike(value: unknown, length: number, schema: object, error?: Error | string): voidshouldArrayOfUint8Array(value: unknown, error?: Error | string): voidalias: shouldArrayOfBuffer(value: unknown, error?: Error | string): void
shouldSizeArrayOfUint8Array(value: unknown, length: number, error?: Error | string): voidalias: shouldSizeArrayOfBuffer(value: unknown, length: number, error?: Error | string): void
shouldBigInt(value: unknown, error?: Error | string): voidshouldBigIntPositive(value: unknown, error?: Error | string): voidshouldBigIntPositiveOrZero(value: unknown, error?: Error | string): voidshouldBigIntWithinRange(value: unknown, min: bigint, max: bigint, error?: Error | string): voidshouldInteger(value: unknown, error?: Error | string): voidshouldIntegerPositive(value: unknown, error?: Error | string): voidshouldIntegerPositiveOrZero(value: unknown, error?: Error | string): voidshouldIntegerWithinRange(value: unknown, min: number, max: number, error?: Error | string): voidshouldNumber(value: unknown, error?: Error | string): voidshouldNumberWithinRange(value: unknown, min: number, max: number, error?: Error | string): voidshouldObj(value: unknown, error?: Error | string): voidshouldObjNotEmpty(value: unknown, error?: Error | string): voidshouldObjWithProperties(value: unknown, prop: string[], error?: Error | string): voidshouldObjLike(value: unknown, schema: object, error?: Error | string): voidshouldObjWithinObj(value: unknown, error?: Error | string | null): voidshouldString(value: unknown, error?: Error | string): voidshouldStringNotEmpty(value: unknown, error?: Error | string): voidshouldStringLike(value: unknown, pattern: RegExp | string, error?: Error | string | null): voidshouldHexString(value: unknown, error?: Error | string): voidshouldBoolean(value: unknown, error?: Error | string): voidshouldUint8Array(value: unknown, error?: Error | string): voidalias: #### shouldBuffer(value: unknown, error?: Error | string): void
shouldError(value: unknown, error?: Error | string): voidshouldRegExp(value: unknown, error?: Error | string): voidshouldPromise(value: unknown, error?: Error | string | null): voidshouldFunction(value: unknown, error?: Error | string | null): voidshouldWindows(error?: Error | string): voidshouldWindowsX86(error?: Error | string): voidalias: shouldWin32(error?: Error | string): void
shouldWindowsX64(error?: Error | string): voidalias: shouldWin64(error?: Error | string): void
shouldWin11orGreater(error?: Error | string): voidshouldWin10orGreater(error?: Error | string): voidshouldWin8orGreater(error?: Error | string): voidshouldWin7orGreater(error?: Error | string): voidshouldWin11orLesser(error?: Error | string): voidshouldWin10orLesser(error?: Error | string): voidshouldWin8orLesser(error?: Error | string): voidshouldWin7orLesser(error?: Error | string): voidshouldWin11(error?: Error | string): voidshouldWin10(error?: Error | string): voidshouldWin8(error?: Error | string): voidshouldWin7(error?: Error | string): voidshouldLinux(error?: Error | string): voidshouldArch(error?: Error | string): Promise<void>shouldArchLike(error?: Error | string): Promise<void>shouldManjaro(error?: Error | string): Promise<void>shouldDebian(error?: Error | string): Promise<void>shouldDebianLike(error?: Error | string): Promise<void>shouldUbuntu(error?: Error | string): Promise<void>shouldUbuntuLike(error?: Error | string): Promise<void>shouldMint(error?: Error | string): Promise<void>shouldPopOS(error?: Error | string): Promise<void>shouldElementaryOS(error?: Error | string): Promise<void>shouldDeepin(error?: Error | string): Promise<void>shouldRaspberryPiOS(error?: Error | string): Promise<void>alias: shouldRaspbian(error?: Error | string): Promise<void>
shouldFedora(error?: Error | string): Promise<void>shouldFedoraLike(error?: Error | string): Promise<void>shouldOpenSUSE(error?: Error | string): Promise<void>shouldSlackware(error?: Error | string): Promise<void>shouldGentoo(error?: Error | string): Promise<void>shouldGnome(error?: Error | string): voidshouldKDE(error?: Error | string): voidshouldXFCE(error?: Error | string): voidshouldMate(error?: Error | string): voidshouldCinnamon(error?: Error | string): voidshouldWayland(error?: Error | string): voidshouldIP(value: string, error?: Error | string): voidshouldIPv4(value: string, error?: Error | string): voidshouldIPv6(value: string, error?: Error | string): voidshouldDeno(error?: Error | string): booleanshouldNode(error?: Error | string): booleanshouldBrowser(error?: Error | string): booleanReturn the given value when the condition is true otherwise null.
Works great with operator such as || and ??
eg:
function(option = {}){
const options = {
param1: asString(option.param1) || "hello world",
param2: asInteger(option.param2) ?? 0
};
}
asArray(value: unknown): [] | nullasArrayNotEmpty(value: unknown): [] | nullasArrayOfString(value: unknown): string[] | nullasSizeArrayOfString(value: unknown, length: number): string[] | nullasArrayOfStringNotEmpty(value: unknown): string[] | nullasSizeArrayOfStringNotEmpty(value: unknown, length: number): string[] | nullasArrayOfNumber(value: unknown): number[] | nullasSizeArrayOfNumber(value: unknown, length: number): number[] | nullasArrayOfNumberWithinRange(value: unknown, min: number, max: number): number[] | nullasSizeArrayOfNumberWithinRange(value: unknown, length: number, min: number, max: number): number[] | nullasArrayOfInteger(value: unknown): number[] | nullasSizeArrayOfInteger(value: unknown, length: number): number[] | nullasArrayOfIntegerPositive(value: unknown): number[] | nullasSizeArrayOfIntegerPositive(value: unknown, length: number): number[] | nullasArrayOfIntegerPositiveOrZero(value: unknown): number[] | nullasSizeArrayOfIntegerPositiveOrZero(value: unknown, length: number): number[] | nullasArrayOfIntegerWithinRange(value: unknown, min: number, max: number): number[] | nullasSizeArrayOfIntegerWithinRange(value: unknown, length: number, min: number, max: number): number[] | nullasArrayOfObj(value: unknown): object[] | nullasSizeArrayOfObj(value: unknown, length: number): object[] | nullasArrayOfObjWithProperties(value: unknown, prop: string[]): object[] | nullasSizeArrayOfObjWithProperties(value: unknown, length: number, prop: string[]): object[] | nullasArrayOfObjLike(value: unknown, schema: object): object[] | nullasArrayOfSomeObjLike(value: unknown, schema: object): object[] | nullThis will return every element matching the given schema.
Unlike asArrayOfObjLike which return the array only if all elements pass the test.
asSizeArrayOfObjLike(value: unknown, length: number, schema: object): object[] | nullasArrayOfUint8Array(value: unknown): Uint8Array[] | Buffer[] | nullalias: asArrayOfBuffer(value: unknown): Uint8Array[] | Buffer[] | null
asSizeArrayOfUint8Array(value: unknown, length: number): Uint8Array[] | Buffer[] | nullalias: asSizeArrayOfBuffer(value: unknown, length: number): Uint8Array[] | Buffer[] | null
asBigInt(value: unknown): bigint | nullasBigIntPositive(value: unknown): bigint | nullasBigIntPositiveOrZero(value: unknown): bigint | nullasBigIntWithinRange(value: unknown, min: bigint, max: bigint): bigint | nullasInteger(value: unknown): number | nullasIntegerPositive(value: unknown): number | nullasIntegerPositiveOrZero(value: unknown): number | nullasIntegerWithinRange(value: unknown, min: number, max: number): number | nullasNumber(value: unknown): number | nullasNumberWithinRange(value: unknown, min: number, max: number): number | nullasObj(value: unknown): object | nullasObjNotEmpty(value: unknown): object | nullasObjWithProperties(value: unknown, prop: string[]): object | nullasObjLike(value: unknown, schema: object): object | nullasObjWithinObj(value: unknown): object | nullasString(value: unknown): string | nullasStringNotEmpty(value: unknown): string | nullasStringLike(value: unknown, pattern: RegExp | string): string | nullasHexString(value: unknown): string | nullasBoolean(value: unknown): boolean | nullasUint8Array(value: unknown): Uint8Array | Buffer | nullalias: asBuffer(value: unknown): Uint8Array | Buffer | null
asError(value: unknown): Error | nullasRegExp(value: unknown): RegExp | nullasPromise(value: unknown): Promise | nullasFunction(value: unknown): anyFAQs
Collection of various checks for asserting types and values at runtime
We found that @xan105/is demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
Node.js has paused its bug bounty program after funding ended, removing payouts for vulnerability reports but keeping its security process unchanged.

Security News
The Axios compromise shows how time-dependent dependency resolution makes exposure harder to detect and contain.

Research
A supply chain attack on Axios introduced a malicious dependency, plain-crypto-js@4.2.1, published minutes earlier and absent from the project’s GitHub releases.