Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

@rjweb/utils

Package Overview
Dependencies
Maintainers
1
Versions
79
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@rjweb/utils - npm Package Compare versions

Comparing version 1.11.4 to 1.12.0

2

docs/assets/search.js

@@ -1,1 +0,1 @@

window.searchData = "data:application/octet-stream;base64,H4sIAAAAAAAAA7WcXW/bOhKG/4t6q5NaJEVJuSu220WB3bM9p0B3ASMIVItJtLUlVx9Js0H++4ISJc3YM7ZsZ6+KRjPzknyGQ0qi/OJV5VPtXS9fvB95kXnXWvlekW6Md+2lted7bbX2rr27tlg1eVnU79P66qHZrD3fW63Tuja1d+15r/7gLsXo/s1UdV4WY4zHtMrT72tTv3dXDgYSiyQKwinaR2O2f5qfbV6ZbAzZPG9N/R5eOhgTdK2q0ucxzKbMWtuu7q8HI4DRqcymfDTUCHVR+stEMN/bppUpmrEVdPSySZsD0bvLZ0dPH02V3vPh3fWz49ftho1dt5uz467zTd6wkburZ8c2P9t0zcburp5PMy2ykh+S/vKF0fP/HkiXweI0DQC0qfLifm/C9H+eO2Me0vqBaOIQJK0fDjfPNYKmV6yq5y2VGy68MzhfITNHFJzB+Qr3pjAVPeudxGBxucZXc78xRUNV+B2twfJ8TW7WOqEZ0/ZQ9Mps1+nKfKifixUvAq0uybLHQxn2eGLkQMTTaulWxy9pVZtqVHGRBg1sdaJcGEzL6aos6qZqV015itY77HZId8cd9nohphEdNwWntAI6TW1o6uy3vP5tW+WP/SSa3SKxUPFei85p0NljglqwKjfb/LQGTC7n6U9AinbzHeTfUOn7P8+t9AcqmQs0r5K5xjA7pLbIeIHu8vnRt6ZaWSs2vjM4X2H1kBbkFswJ9NfPj89VXRd+RtXdiz4FL7//x6yavSzp/zw3SzJjtl0mEq10kUaTwy11zWFV/lJurO1hHWd0ohKYOaZ5Kqsf+1On//vcUWlMTWJzUezlI9hcO8joef35y4Ho9vJF0b+23wtzqP2DyQUqq7ayZgc7MtpcoJOVT8W6TMki42QGkwtU6qYyKXVvMGj0BqcqgBvxf3z49+3nL9/U7d//+fvfiNvxQQjZXa6nZ+rps/Tg3mkn6Yb1ctA5L+Hm7pYIlVnbJOzH7Y/yT3lVz+rau9F0zpZonrp9vjJL2xm+nXJhmk1a/5glPtmeONJo12VL36OaN9KD6cV6er6evlDvbnYi3e3l0elq63SmmDO8RKuGjz4OaTnDS7RmJ+VbZGSxWrcZcWtE5shkfInmMm/svrysbmap3g7mtxfrFvXWrJqvz5vv5XquOPS5petP2ZhV0z0ynlGBwJry+cuHLKtMzY/+aPH/Xlmw0EmLy9SLcyr8jvAZRf6ofpU+fUybdG4TJvPT+31Ktd+RnVnw56nyNZ9SPV72j6q2NXyyfUR0ML5Qc12Cx8VHJJ3thYr1Q1nxS86O5GB8Kc9itmJveqFe9xZibkV6N1pfqDq3Nu/IX1qeqXaB26bnujHTbdP4RqL789x7bfPLrFr6gXsfxxkcedDaN4W+V922fPTVtj0x8hT4Z2tas9f97q8Hew/XuD9QjAFnH+MPJhJoXd+E09e1XYFZKxpw4u8ZfjV/tsXX1YOxo5EdFyY85qxuM9pit7V/tsXxJkyGb6T8cxbUd4PZG6mW2y6zj+tOhm+kfFf8K7W70Bna0PSt+l18yoscvNfkOz5Zvpn2X6tqzvyaDM9X3rmXnNfnu/0en6hk5vXQ7PXvRJ1709jc+NhWaQMPrbCK+w5na6fZjFLVG12i8aHIbIs/ldXclKWdzm5D1Ra/m19NZ/MZLt5sAwiP8zMYlIx8bZj9w3Rp/ruu5lMOX2BOyzwINlgdXlFBw057VgyU5jwuPqZDv+cGIkffdZMK4NE6WCqGoc+Kw0fL0Dv/ulyTh69sEHf1cANtC5jYj4Z+J9XH7q6eEpvFB07R0MTodyzuiQt9EMEGGiyOHg+wjSHnRwuOUowzoyVPTpBtfKrSLZVANoS9diR3rDz9bizfUGDsn+c2rabPSdX04ajXG9/Li8z88q5fvEd3oPHaE1fyKvF87y4368yenuyj+/bVvT0s4924a9+M3dRai97k/cLzlwtfiSuRyJsbfzl4dBe6P3RmgecvA8osQGbC85eCMhPITHr+UlJmEpkpz18qykwhs9DzlyFlFiIz7flLTZlpZBZ5/jKizCJkFnv+MvalvIoFsoqRVeL5y4QKluDRtYMdkBiCHQ4dCJoERhHYIQ9IGAGmEdhRD0geAQYS2IEPSCQBZhLYsQ9IKgHGEtjhD7Qvo6sgVtgSkwksgYBkE2A4AUcnwHgCiyGIyYiYkOgIJVQrBSYkLAZBshQ7k6WbLYEvgyu5iLAlJiQsBkFPLExIWAyCZCkwIWExCJKlwISExSBIlgITEhHLUmBCwoIQ5HQUmJGwIARJXWBG0oIQJE2JGcmAyQ+JCcmOEDmB5U5F60oaSV1iQtJikOQMlpiQtBgkSV1iQtJikHRFxYSkxSBJ6hITkhaDJKlLTEhaDJJkKTEhZTFIkqXChJQFISlECiNSloMkESmMSFkOikSkdtadbuEhESmMSIXsFFYYkbIcFAlTYUTKclCSmkQKI1KWg6JXSIxIWQ4qJGNiRKHloMgpHGJEoQWhSJghZhRaEIqcmCFmFHaMyDIbYkahBRGSNMOd7UG3PyBphphRaEGEglTHjEILIiQZhZhRaEGEJKMQMwoTNpdCzEgv2AzRmJG2IEJyEmvMSAs2QzRmpCWbIRoz0h0jes+FGemOEZlLemcX1zEic0ljRrpjRFYGjRlpC0KTuaQxI52w3DVmFFkQmsy6CDOKLAhNVoYIM4osCE2W+QgziiwIrYjyGWFEkWINMaGIr3QRJhR1G20y56KdrbbFoMn8iDChKGabiQFFloKm9+8YUNwBIhMpxoDiDhCZSDEGFFsKEZlIMQYUWwwRmR4xJhRbDhGZHjFGFFsOEZkeMUYUWw4RWZRijCjubodImPHODZEFEZEwY8wotiAiklGMGSUWREQySjCjhN0vJBhRItiNfIIRJR0i+u4NI0osh5jEnmBEieUQk9gTjCjRbIcwoSRiF60EE0q6uyIyk5Kd21aLISYzKdm9c7UcYvqWcLFz77oI2NW9v3Zz0z3eeDRVY7LP/WOO5bJ/Hv3i3boHH9H48OTFi7V3/fL6Oj3osP+zgdMsS4vsKc2bu7IaHvuDGCGIEXEx+o8yJy85OUnOp4YOi8lhwTkMnz5OXnry4ro3HNafnKbXqC+e5MTGzzKAHxhNEbJ+4IUo8A2Ar7DWvqfC/t8w6f+N2Jj2TTToNBjcSHA+/SnqfIuogPGSCeM5fi03+QUgBwKulfYg/mo4rQ80Qc+lOuC77b8nAJ4gJySXRdazGj8uBgMOxptzLVAGRsnkkrBy48Fy0M5oclRcPo1fOYJRBfkUcCPTPc8HPqCRYtHnTcJ10H0XO3nDHh7yQeOiAQYdc279WzwwmgBAzHZuOMQB1IBfFDB+8C0QkAQcYq5/RIEDCRpz3N3B2slLAbGQbWfxNLy1Bj0E5Sfm0qV/jj85xWBYEg7C9O0WSBgw5QPdJ4zgyvgQoB4/MQWBQIcDPkBz179RA+ML+ptw/b03jR2qbHwnC/xBuYu54tN/oAxaC5wCDmq+TxUMs+JWlOm87uQYgiQKuUa6U1V1d6oKeYPWhlEPSXMZ3B1HA75gUmuOS75NhyOxwBPUn5DLqbzeWUKAk2Tl6nxrD12CgQUriHLrnebqVueukTvI4tCVPc1irWv3VQloNtCXbF/H93NgkEBGhG7+JFy/+xPxoNkg9UOut9apalHKa9DdiBXrvxIENQLMk76hgftXcgWqP78JegsmuebSuD8fD5zAAhFypX6T/rq1SXG7KylB/ipujJy33vNWQFtxCTF+ZQL8QBorLh/GzwJBa0E6SG6A7Nm0qi3q6WwaQAsSMeIqzPAlL9jOADfBuQ2fdgI3MLiSG9yy2F+9wbDGvN/+YqqBYMxl3XiQDPiBxIu4yjd+2Qs6CPwE5+cOzAE1QD+Sbvet3L9cNgy/BAIWGTBKAbeygZ/4AJ5guQi4YarSp6w7MQ+mGkgDzfq5n7cB2Q6SnXXqfmUh7X+LAbQUVJWAG+DxUAcoRmBsEl7UHdgAfmBkEm6CDT+xAwYGlCDWqfvqHOQOqLKCpd4Wdjp3KZTvbjhBgJgL4M6rg6aCEdXcVK53EkaBeRW6jLVPAhhvd1oF1C0gqgK3jA3/so1wPx0DsgGUv4CrC/urrwJQFZcM3S8PgcEFU5Tz2LsF0EAo4mZk/5k2GBv4sIIbi/78CshTePO2YKW6727AQAApNWz0OGf3PQfIHPi4gxvG6QctQKYDWXHMcet+xgS4g7ksuJwDv+wBPOFtOLc8D4dzYJ6BwWW8+oNKAAjoY0IWqhvf2+Zbs84L410vb15f/wfhcy+pQk0AAA==";
window.searchData = "data:application/octet-stream;base64,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";

@@ -79,3 +79,3 @@ "use strict";

else
return input.slice(0, length).concat(end != null ? end : "...");
return input.slice(0, length).concat(end ?? "...");
}

@@ -82,0 +82,0 @@ function equal(input) {

@@ -57,3 +57,3 @@ "use strict";

return result[0];
} catch (e) {
} catch {
return null;

@@ -60,0 +60,0 @@ }

@@ -33,2 +33,3 @@ "use strict";

getFiles: () => getFiles,
hash: () => hash,
stream: () => stream

@@ -40,13 +41,14 @@ });

var rl = __toESM(require("readline"));
var crypto = __toESM(require("crypto"));
var import__ = require(".");
function getFiles(folder, options) {
const cleanPath = path.resolve(folder);
if (options == null ? void 0 : options.async) {
if (options?.async) {
return new Promise(async (resolve, reject) => {
try {
const dir = await fs.promises.readdir(cleanPath, { withFileTypes: (options == null ? void 0 : options.stat) || void 0 });
if (!(options == null ? void 0 : options.recursive))
const dir = await fs.promises.readdir(cleanPath, { withFileTypes: options?.stat || void 0 });
if (!options?.recursive)
return resolve(dir);
const files = [];
if (options == null ? void 0 : options.stat) {
if (options?.stat) {
for (const f of dir) {

@@ -56,3 +58,3 @@ const file = f;

files.push(...await getFiles(path.join(folder, file.name), options));
} catch (e) {
} catch {
files.push(Object.assign(file, { name: path.join(folder, file.name) }));

@@ -66,3 +68,3 @@ }

files.push(...await getFiles(path.join(folder, file), options));
} catch (e) {
} catch {
files.push(path.join(folder, file));

@@ -78,7 +80,7 @@ }

} else {
const dir = fs.readdirSync(cleanPath, { withFileTypes: (options == null ? void 0 : options.stat) || void 0 });
if (!(options == null ? void 0 : options.recursive))
const dir = fs.readdirSync(cleanPath, { withFileTypes: options?.stat || void 0 });
if (!options?.recursive)
return dir;
const files = [];
if (options == null ? void 0 : options.stat) {
if (options?.stat) {
for (const f of dir) {

@@ -88,3 +90,3 @@ const file = f;

files.push(...(0, import__.as)(getFiles(path.join(folder, file.name), options)));
} catch (e) {
} catch {
files.push(Object.assign(file, { name: path.join(folder, file.name) }));

@@ -98,3 +100,3 @@ }

files.push(...(0, import__.as)(getFiles(path.join(folder, file), options)));
} catch (e) {
} catch {
files.push(path.join(folder, file));

@@ -108,6 +110,5 @@ }

function stream(file, options) {
var _a, _b;
const stream2 = fs.createReadStream(file, {
start: (_a = options == null ? void 0 : options.slice) == null ? void 0 : _a.start,
end: (_b = options == null ? void 0 : options.slice) == null ? void 0 : _b.end
start: options?.slice?.start,
end: options?.slice?.end
});

@@ -120,6 +121,39 @@ return Object.assign(import__.stream.iterator(stream2), {

}
async function env(file) {
const content = await fs.promises.readFile(file, "utf8");
return import__.string.env(content);
function env(file, options) {
if (options?.async ?? true) {
return new Promise(async (resolve) => {
const content = await fs.promises.readFile(file, "utf8");
return resolve(import__.string.env(content));
});
} else {
const content = fs.readFileSync(file, "utf8");
return import__.string.env(content);
}
}
async function hash(file, options) {
const stream2 = fs.createReadStream(file);
const pOptions = {
algorithm: options?.algorithm ?? "sha256",
salt: options?.salt,
output: options?.output ?? "hex"
};
const hash2 = pOptions.salt ? crypto.createHmac(pOptions.algorithm, pOptions.salt) : crypto.createHash(pOptions.algorithm);
await new Promise((resolve, reject) => {
stream2.on("data", (chunk) => {
hash2.update(chunk);
});
stream2.on("end", () => {
resolve(null);
});
stream2.on("error", (err) => {
reject(err);
});
});
let out;
if (pOptions.output === "buffer")
out = hash2.digest();
else
out = hash2.digest(pOptions.output);
return out;
}
// Annotate the CommonJS export names for ESM import in node:

@@ -129,3 +163,4 @@ 0 && (module.exports = {

getFiles,
hash,
stream
});

@@ -55,8 +55,8 @@ "use strict";

*
* const subnet = new network.Subnet('127.1/32')
* const subnet = new network.Subnet('127.0.0.1/24')
* subnet.type // 4
*
* subnet.size() // 1n
* subnet.first() // <IPAddress>
* subnet.last() // <IPAddress>
* subnet.size() // 255n
* subnet.first() // <IPAddress v4 127.0.0.0>
* subnet.last() // <IPAddress v4 127.0.0.255>
*

@@ -590,3 +590,3 @@ * for (const ip of subnet) {

return false;
} catch (e) {
} catch {
return false;

@@ -632,3 +632,3 @@ }

return new IPAddress(await ip.text());
} catch (e) {
} catch {
return null;

@@ -669,3 +669,3 @@ }

async return() {
if (!(fetchIterator == null ? void 0 : fetchIterator.return))
if (!fetchIterator?.return)
return { done: true, value: new Uint8Array(0) };

@@ -676,3 +676,3 @@ else

async throw(e) {
if (!(fetchIterator == null ? void 0 : fetchIterator.throw))
if (!fetchIterator?.throw)
return { done: true, value: new Uint8Array(0) };

@@ -702,3 +702,3 @@ else

async return() {
if (!(fetchIterator == null ? void 0 : fetchIterator.return))
if (!fetchIterator?.return)
return { done: true, value: "" };

@@ -709,3 +709,3 @@ else

async throw(e) {
if (!(fetchIterator == null ? void 0 : fetchIterator.throw))
if (!fetchIterator?.throw)
return { done: true, value: "" };

@@ -712,0 +712,0 @@ else

@@ -62,3 +62,3 @@ "use strict";

return handleObject(object, compare);
} catch (e) {
} catch {
return false;

@@ -65,0 +65,0 @@ }

{
"name": "@rjweb/utils",
"version": "1.11.4",
"version": "1.12.0",
"description": "Easy and Lightweight Utilities",

@@ -39,7 +39,7 @@ "module": "lib/esm/index.js",

"devDependencies": {
"@rjweb/utils": "link:.",
"@types/node": "^20.0.0",
"esbuild": "^0.17.2",
"typedoc": "^0.25.1",
"typescript": "^5.1.0"
"@rjweb/utils": "link:",
"@types/node": "^20.11.28",
"esbuild": "^0.20.2",
"typedoc": "^0.25.12",
"typescript": "^5.4.2"
},

@@ -46,0 +46,0 @@ "dependencies": {

@@ -32,5 +32,4 @@ "use strict";

this.onError = null;
var _a;
this.options = {
wait: (_a = options == null ? void 0 : options.wait) != null ? _a : 5e3
wait: options?.wait ?? 5e3
};

@@ -104,3 +103,3 @@ this.nextRunScheduled = false;

this.onFinish(item, result);
} catch (e) {
} catch {
}

@@ -117,3 +116,3 @@ const waiter = this.fnWaiters.find(([fn]) => Object.is(fn, item));

this.onError(item, err);
} catch (e) {
} catch {
}

@@ -120,0 +119,0 @@ const waiter = this.fnWaiters.find(([fn]) => Object.is(fn, item));

@@ -90,3 +90,3 @@ "use strict";

function size(amount, factor) {
return new Size(amount, factor != null ? factor : 1024);
return new Size(amount, factor ?? 1024);
}

@@ -65,4 +65,3 @@ "use strict";

const _generate = (options, pool) => {
var _a;
const optionsLength = (_a = options.length) != null ? _a : 12;
const optionsLength = options.length ?? 12;
const poolLength = pool.length;

@@ -75,3 +74,2 @@ let password = "";

const _string = (options) => {
var _a, _b;
options = options || {};

@@ -107,3 +105,3 @@ if (!("length" in options))

;
let i = (_b = (_a = options.exclude) == null ? void 0 : _a.length) != null ? _b : 0;
let i = options.exclude?.length ?? 0;
while (i--) {

@@ -116,7 +114,6 @@ pool = pool.replace(options.exclude[i], "");

function hash(input, options) {
var _a, _b;
const pOptions = {
algorithm: (_a = options == null ? void 0 : options.algorithm) != null ? _a : "sha256",
salt: options == null ? void 0 : options.salt,
output: (_b = options == null ? void 0 : options.output) != null ? _b : "hex"
algorithm: options?.algorithm ?? "sha256",
salt: options?.salt,
output: options?.output ?? "hex"
};

@@ -132,6 +129,5 @@ const hash2 = pOptions.salt ? crypto.createHmac(pOptions.algorithm, pOptions.salt).update(input) : crypto.createHash(pOptions.algorithm).update(input);

function encrypt(input, key, options) {
var _a, _b;
const pOptions = {
algorithm: (_a = options == null ? void 0 : options.algorithm) != null ? _a : "aes-256-cbc",
output: (_b = options == null ? void 0 : options.output) != null ? _b : "hex"
algorithm: options?.algorithm ?? "aes-256-cbc",
output: options?.output ?? "hex"
};

@@ -149,6 +145,5 @@ const iv = Buffer.alloc(16, 0);

function decrypt(input, key, options) {
var _a, _b;
const pOptions = {
algorithm: (_a = options == null ? void 0 : options.algorithm) != null ? _a : "aes-256-cbc",
input: (_b = options == null ? void 0 : options.input) != null ? _b : "hex"
algorithm: options?.algorithm ?? "aes-256-cbc",
input: options?.input ?? "hex"
};

@@ -214,3 +209,2 @@ const iv = Buffer.alloc(16, 0);

await replaceAsync(input, /{{(\w*)+(\(.*?\))?}}/g, async (match) => {
var _a, _b;
const slicedMatch = match.slice(2, -2);

@@ -227,3 +221,3 @@ const bracketIndex = slicedMatch.indexOf("(");

throw `Required Argument \`${key}\` not supplied to \`${name}\``;
parsedArgs[key] = (_b = (_a = args[index]) == null ? void 0 : _a.trim()) == null ? void 0 : _b.replaceAll("\\,", ",");
parsedArgs[key] = args[index]?.trim()?.replaceAll("\\,", ",");
}

@@ -251,3 +245,2 @@ let endEarly = null;

return replaceAsync(input, /{{(\w*)+(\(.*?\))?}}/g, async (match) => {
var _a, _b;
const slicedMatch = match.slice(2, -2);

@@ -265,3 +258,3 @@ const bracketIndex = slicedMatch.indexOf("(");

return match;
parsedArgs[key] = (_b = (_a = args[index]) == null ? void 0 : _a.trim()) == null ? void 0 : _b.replaceAll("\\,", ",");
parsedArgs[key] = args[index]?.trim()?.replaceAll("\\,", ",");
}

@@ -277,3 +270,3 @@ let endEarly = false;

return result;
} catch (e) {
} catch {
return match;

@@ -280,0 +273,0 @@ }

@@ -53,5 +53,4 @@ "use strict";

function execute(command, options) {
var _a;
const pOptions = {
async: (_a = options == null ? void 0 : options.async) != null ? _a : false
async: options?.async ?? false
};

@@ -58,0 +57,0 @@ if (pOptions.async) {

@@ -39,3 +39,3 @@ import * as number from "./number";

else
return input.slice(0, length).concat(end != null ? end : "...");
return input.slice(0, length).concat(end ?? "...");
}

@@ -42,0 +42,0 @@ function equal(input) {

@@ -23,3 +23,3 @@ import { IPAddress, isIP } from "./network";

return result[0];
} catch (e) {
} catch {
return null;

@@ -26,0 +26,0 @@ }

import * as fs from "fs";
import * as path from "path";
import * as rl from "readline";
import * as crypto from "crypto";
import { as, stream as _stream, string } from ".";
function getFiles(folder, options) {
const cleanPath = path.resolve(folder);
if (options == null ? void 0 : options.async) {
if (options?.async) {
return new Promise(async (resolve, reject) => {
try {
const dir = await fs.promises.readdir(cleanPath, { withFileTypes: (options == null ? void 0 : options.stat) || void 0 });
if (!(options == null ? void 0 : options.recursive))
const dir = await fs.promises.readdir(cleanPath, { withFileTypes: options?.stat || void 0 });
if (!options?.recursive)
return resolve(dir);
const files = [];
if (options == null ? void 0 : options.stat) {
if (options?.stat) {
for (const f of dir) {

@@ -19,3 +20,3 @@ const file = f;

files.push(...await getFiles(path.join(folder, file.name), options));
} catch (e) {
} catch {
files.push(Object.assign(file, { name: path.join(folder, file.name) }));

@@ -29,3 +30,3 @@ }

files.push(...await getFiles(path.join(folder, file), options));
} catch (e) {
} catch {
files.push(path.join(folder, file));

@@ -41,7 +42,7 @@ }

} else {
const dir = fs.readdirSync(cleanPath, { withFileTypes: (options == null ? void 0 : options.stat) || void 0 });
if (!(options == null ? void 0 : options.recursive))
const dir = fs.readdirSync(cleanPath, { withFileTypes: options?.stat || void 0 });
if (!options?.recursive)
return dir;
const files = [];
if (options == null ? void 0 : options.stat) {
if (options?.stat) {
for (const f of dir) {

@@ -51,3 +52,3 @@ const file = f;

files.push(...as(getFiles(path.join(folder, file.name), options)));
} catch (e) {
} catch {
files.push(Object.assign(file, { name: path.join(folder, file.name) }));

@@ -61,3 +62,3 @@ }

files.push(...as(getFiles(path.join(folder, file), options)));
} catch (e) {
} catch {
files.push(path.join(folder, file));

@@ -71,6 +72,5 @@ }

function stream(file, options) {
var _a, _b;
const stream2 = fs.createReadStream(file, {
start: (_a = options == null ? void 0 : options.slice) == null ? void 0 : _a.start,
end: (_b = options == null ? void 0 : options.slice) == null ? void 0 : _b.end
start: options?.slice?.start,
end: options?.slice?.end
});

@@ -83,10 +83,44 @@ return Object.assign(_stream.iterator(stream2), {

}
async function env(file) {
const content = await fs.promises.readFile(file, "utf8");
return string.env(content);
function env(file, options) {
if (options?.async ?? true) {
return new Promise(async (resolve) => {
const content = await fs.promises.readFile(file, "utf8");
return resolve(string.env(content));
});
} else {
const content = fs.readFileSync(file, "utf8");
return string.env(content);
}
}
async function hash(file, options) {
const stream2 = fs.createReadStream(file);
const pOptions = {
algorithm: options?.algorithm ?? "sha256",
salt: options?.salt,
output: options?.output ?? "hex"
};
const hash2 = pOptions.salt ? crypto.createHmac(pOptions.algorithm, pOptions.salt) : crypto.createHash(pOptions.algorithm);
await new Promise((resolve, reject) => {
stream2.on("data", (chunk) => {
hash2.update(chunk);
});
stream2.on("end", () => {
resolve(null);
});
stream2.on("error", (err) => {
reject(err);
});
});
let out;
if (pOptions.output === "buffer")
out = hash2.digest();
else
out = hash2.digest(pOptions.output);
return out;
}
export {
env,
getFiles,
hash,
stream
};

@@ -13,8 +13,8 @@ import * as net from "net";

*
* const subnet = new network.Subnet('127.1/32')
* const subnet = new network.Subnet('127.0.0.1/24')
* subnet.type // 4
*
* subnet.size() // 1n
* subnet.first() // <IPAddress>
* subnet.last() // <IPAddress>
* subnet.size() // 255n
* subnet.first() // <IPAddress v4 127.0.0.0>
* subnet.last() // <IPAddress v4 127.0.0.255>
*

@@ -548,3 +548,3 @@ * for (const ip of subnet) {

return false;
} catch (e) {
} catch {
return false;

@@ -590,3 +590,3 @@ }

return new IPAddress(await ip.text());
} catch (e) {
} catch {
return null;

@@ -627,3 +627,3 @@ }

async return() {
if (!(fetchIterator == null ? void 0 : fetchIterator.return))
if (!fetchIterator?.return)
return { done: true, value: new Uint8Array(0) };

@@ -634,3 +634,3 @@ else

async throw(e) {
if (!(fetchIterator == null ? void 0 : fetchIterator.throw))
if (!fetchIterator?.throw)
return { done: true, value: new Uint8Array(0) };

@@ -660,3 +660,3 @@ else

async return() {
if (!(fetchIterator == null ? void 0 : fetchIterator.return))
if (!fetchIterator?.return)
return { done: true, value: "" };

@@ -667,3 +667,3 @@ else

async throw(e) {
if (!(fetchIterator == null ? void 0 : fetchIterator.throw))
if (!fetchIterator?.throw)
return { done: true, value: "" };

@@ -670,0 +670,0 @@ else

@@ -38,3 +38,3 @@ function deepParse(object, provided) {

return handleObject(object, compare);
} catch (e) {
} catch {
return false;

@@ -41,0 +41,0 @@ }

{
"name": "@rjweb/utils",
"version": "1.11.4",
"version": "1.12.0",
"description": "Easy and Lightweight Utilities",

@@ -39,7 +39,7 @@ "module": "lib/esm/index.js",

"devDependencies": {
"@rjweb/utils": "link:.",
"@types/node": "^20.0.0",
"esbuild": "^0.17.2",
"typedoc": "^0.25.1",
"typescript": "^5.1.0"
"@rjweb/utils": "link:",
"@types/node": "^20.11.28",
"esbuild": "^0.20.2",
"typedoc": "^0.25.12",
"typescript": "^5.4.2"
},

@@ -46,0 +46,0 @@ "dependencies": {

@@ -9,5 +9,4 @@ import { array } from ".";

this.onError = null;
var _a;
this.options = {
wait: (_a = options == null ? void 0 : options.wait) != null ? _a : 5e3
wait: options?.wait ?? 5e3
};

@@ -81,3 +80,3 @@ this.nextRunScheduled = false;

this.onFinish(item, result);
} catch (e) {
} catch {
}

@@ -94,3 +93,3 @@ const waiter = this.fnWaiters.find(([fn]) => Object.is(fn, item));

this.onError(item, err);
} catch (e) {
} catch {
}

@@ -97,0 +96,0 @@ const waiter = this.fnWaiters.find(([fn]) => Object.is(fn, item));

@@ -67,3 +67,3 @@ class Size {

function size(amount, factor) {
return new Size(amount, factor != null ? factor : 1024);
return new Size(amount, factor ?? 1024);
}

@@ -70,0 +70,0 @@ export {

@@ -24,4 +24,3 @@ import * as crypto from "crypto";

const _generate = (options, pool) => {
var _a;
const optionsLength = (_a = options.length) != null ? _a : 12;
const optionsLength = options.length ?? 12;
const poolLength = pool.length;

@@ -34,3 +33,2 @@ let password = "";

const _string = (options) => {
var _a, _b;
options = options || {};

@@ -66,3 +64,3 @@ if (!("length" in options))

;
let i = (_b = (_a = options.exclude) == null ? void 0 : _a.length) != null ? _b : 0;
let i = options.exclude?.length ?? 0;
while (i--) {

@@ -75,7 +73,6 @@ pool = pool.replace(options.exclude[i], "");

function hash(input, options) {
var _a, _b;
const pOptions = {
algorithm: (_a = options == null ? void 0 : options.algorithm) != null ? _a : "sha256",
salt: options == null ? void 0 : options.salt,
output: (_b = options == null ? void 0 : options.output) != null ? _b : "hex"
algorithm: options?.algorithm ?? "sha256",
salt: options?.salt,
output: options?.output ?? "hex"
};

@@ -91,6 +88,5 @@ const hash2 = pOptions.salt ? crypto.createHmac(pOptions.algorithm, pOptions.salt).update(input) : crypto.createHash(pOptions.algorithm).update(input);

function encrypt(input, key, options) {
var _a, _b;
const pOptions = {
algorithm: (_a = options == null ? void 0 : options.algorithm) != null ? _a : "aes-256-cbc",
output: (_b = options == null ? void 0 : options.output) != null ? _b : "hex"
algorithm: options?.algorithm ?? "aes-256-cbc",
output: options?.output ?? "hex"
};

@@ -108,6 +104,5 @@ const iv = Buffer.alloc(16, 0);

function decrypt(input, key, options) {
var _a, _b;
const pOptions = {
algorithm: (_a = options == null ? void 0 : options.algorithm) != null ? _a : "aes-256-cbc",
input: (_b = options == null ? void 0 : options.input) != null ? _b : "hex"
algorithm: options?.algorithm ?? "aes-256-cbc",
input: options?.input ?? "hex"
};

@@ -173,3 +168,2 @@ const iv = Buffer.alloc(16, 0);

await replaceAsync(input, /{{(\w*)+(\(.*?\))?}}/g, async (match) => {
var _a, _b;
const slicedMatch = match.slice(2, -2);

@@ -186,3 +180,3 @@ const bracketIndex = slicedMatch.indexOf("(");

throw `Required Argument \`${key}\` not supplied to \`${name}\``;
parsedArgs[key] = (_b = (_a = args[index]) == null ? void 0 : _a.trim()) == null ? void 0 : _b.replaceAll("\\,", ",");
parsedArgs[key] = args[index]?.trim()?.replaceAll("\\,", ",");
}

@@ -210,3 +204,2 @@ let endEarly = null;

return replaceAsync(input, /{{(\w*)+(\(.*?\))?}}/g, async (match) => {
var _a, _b;
const slicedMatch = match.slice(2, -2);

@@ -224,3 +217,3 @@ const bracketIndex = slicedMatch.indexOf("(");

return match;
parsedArgs[key] = (_b = (_a = args[index]) == null ? void 0 : _a.trim()) == null ? void 0 : _b.replaceAll("\\,", ",");
parsedArgs[key] = args[index]?.trim()?.replaceAll("\\,", ",");
}

@@ -236,3 +229,3 @@ let endEarly = false;

return result;
} catch (e) {
} catch {
return match;

@@ -239,0 +232,0 @@ }

@@ -19,5 +19,4 @@ import * as child from "child_process";

function execute(command, options) {
var _a;
const pOptions = {
async: (_a = options == null ? void 0 : options.async) != null ? _a : false
async: options?.async ?? false
};

@@ -24,0 +23,0 @@ if (pOptions.async) {

/// <reference types="node" />
/// <reference types="node" />
/// <reference types="node" />
import * as fs from "fs";
import * as crypto from "crypto";
/**

@@ -67,2 +69,33 @@ * Get Files from a folder

* @since 1.10.4
*/ export declare function env(file: fs.PathLike): Promise<Record<string, string>>;
*/ export declare function env<Options extends {
/**
* Whether to use async fs
* @default true
* @since 1.12.0
*/ async?: boolean;
}>(file: fs.PathLike, options?: Options): Options['async'] extends false ? Record<string, string> : Promise<Record<string, string>>;
/**
* Hash a File
* @example
* ```
* import { filesystem } from "@rjweb/utils"
*
* await filesystem.hash('./doc.txt', { algorithm: 'sha256', salt: '123', output: 'hex' }) // 91be40b8a3959b7821be224d8ce5ad09874fc84dcacd9fed77bf07000141e15a
* ```
* @since 1.12.0
*/ export declare function hash<Options extends {
/**
* The Algorithm to use
* @default "sha256"
* @since 1.12.0
*/ algorithm?: string;
/**
* The Salt to add
* @since 1.12.0
*/ salt?: string;
/**
* The Output type to emit
* @default "hex"
* @since 1.12.0
*/ output?: crypto.BinaryToTextEncoding | 'buffer';
}>(file: fs.PathLike, options?: Options): Promise<Options['output'] extends 'buffer' ? Buffer : string>;

@@ -33,8 +33,8 @@ /// <reference types="node" />

*
* const subnet = new network.Subnet('127.1/32')
* const subnet = new network.Subnet('127.0.0.1/24')
* subnet.type // 4
*
* subnet.size() // 1n
* subnet.first() // <IPAddress>
* subnet.last() // <IPAddress>
* subnet.size() // 255n
* subnet.first() // <IPAddress v4 127.0.0.0>
* subnet.last() // <IPAddress v4 127.0.0.255>
*

@@ -41,0 +41,0 @@ * for (const ip of subnet) {

{
"name": "@rjweb/utils",
"version": "1.11.4",
"version": "1.12.0",
"description": "Easy and Lightweight Utilities",

@@ -11,7 +11,2 @@ "module": "lib/esm/index.js",

},
"scripts": {
"build": "rm -rf lib && tsc && esbuild `find src -type f -name \"*.ts\"` --platform='node' --ignore-annotations --format='cjs' --outdir='lib/cjs' && esbuild `find src -type f -name \"*.ts\"` --platform='node' --ignore-annotations --format='esm' --outdir='lib/esm' && cp package.json lib/cjs/pckg.json && cp package.json lib/esm/pckg.json",
"docs": "rm -rf docs && typedoc --out docs src/index.ts && sed -i -e 's|<meta charSet=\"utf-8\"/>|<meta charSet=\"utf-8\"/><link rel=\"icon\" type=\"image/png\" href=\"https://img.rjansen.de/rjweb/icon.png\">|' docs/**/*.html && chmod -R a+rw docs",
"test": "yarn build && node test"
},
"repository": {

@@ -40,11 +35,16 @@ "type": "git",

"devDependencies": {
"@rjweb/utils": "link:.",
"@types/node": "^20.0.0",
"esbuild": "^0.17.2",
"typedoc": "^0.25.1",
"typescript": "^5.1.0"
"@rjweb/utils": "link:",
"@types/node": "^20.11.28",
"esbuild": "^0.20.2",
"typedoc": "^0.25.12",
"typescript": "^5.4.2"
},
"dependencies": {
"ts-arithmetic": "^0.1.1"
},
"scripts": {
"build": "rm -rf lib && tsc && esbuild `find src -type f -name \"*.ts\"` --platform='node' --ignore-annotations --format='cjs' --outdir='lib/cjs' && esbuild `find src -type f -name \"*.ts\"` --platform='node' --ignore-annotations --format='esm' --outdir='lib/esm' && cp package.json lib/cjs/pckg.json && cp package.json lib/esm/pckg.json",
"docs": "rm -rf docs && typedoc --out docs src/index.ts && sed -i -e 's|<meta charSet=\"utf-8\"/>|<meta charSet=\"utf-8\"/><link rel=\"icon\" type=\"image/png\" href=\"https://img.rjansen.de/rjweb/icon.png\">|' docs/**/*.html && chmod -R a+rw docs",
"test": "yarn build && node test"
}
}
}

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc