Big News: Socket raises $60M Series C at a $1B valuation to secure software supply chains for AI-driven development.Announcement
Sign In

@serwist/utils

Package Overview
Dependencies
Maintainers
1
Versions
28
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@serwist/utils - npm Package Compare versions

Comparing version
9.5.7
to
9.5.8
+92
dist/index.d.mts
import Browserslist from "browserslist";
//#region src/non-nullable.d.ts
declare const nonNullable: <T>(value: T) => value is NonNullable<T>;
//#endregion
//#region src/parallel.d.ts
/**
* Executes many async functions in parallel. Returns the
* results from all functions as an array. Does not handle
* any error.
*/
declare const parallel: <T, K>(limit: number, array: readonly T[], func: (item: T) => Promise<K>) => Promise<K[]>;
//#endregion
//#region src/to-unix.d.ts
declare const toUnix: (p: string) => string;
//#endregion
//#region src/browserslist.d.ts
/**
* Loads and converts Browserslist into esbuild's `target` option.
*
* @param cwd
* @returns
*/
declare const browserslistToEsbuild: (browserslist: typeof Browserslist, cwd: string, defaultBrowserslist: string[]) => string[];
//#endregion
//#region src/compare.d.ts
declare const compare: <T extends string | number>(a: T, b: T) => 1 | -1 | 0;
//#endregion
//#region src/constants.d.ts
/** @see https://esbuild.github.io/api/#target */
declare const SUPPORTED_ESBUILD_TARGETS: string[];
declare const UNSUPPORTED_BROWSERLIST_TARGETS: string[];
//#endregion
//#region src/semver.d.ts
declare const compareSemver: (a: string[], b: string[]) => 1 | -1 | 0;
//#endregion
//#region src/types.d.ts
/**
* Make certain fields in a object type required
*
* @example
* interface A {
* a?: string;
* b?: string;
* c?: string;
* }
* type B = RequiredFields<A, "b" | "c">;
* const b: B = {
* b: "hehe",
* c: "hehe",
* }; //valid
* const b: B = { a: "hehe" }; //invalid
* const c: B = { a: "hehe", b: "hehe" }; //invalid
*/
type Require<T, U extends keyof T> = T & Required<Pick<T, U>>;
/**
* Make certain fields in a object type optional
*
* @example
* interface A {
* a: string;
* b: string;
* c: string;
* }
* type B = Optional<A, "b" | "c">;
* const b: B = { a: "hehe" }; //valid
* const b: B = {}; //invalid
*/
type Optional<T, U extends keyof T> = Omit<T, U> & Partial<Pick<T, U>>;
/**
* Makes an object type's hover overlay more readable
*
* @example
*
* interface A {
* b: string;
* c: boolean;
* }
*
* interface B {
* c: number;
* }
*
* type D = A | B; // Displayed as is written
*
* type C = Prettify<A | B>; // { b: string; c: boolean; } | { c: number; }
*/
type Prettify<T> = { [K in keyof T]: T[K] } & {};
type MaybePromise<T> = T | Promise<T>;
//#endregion
export { MaybePromise, Optional, Prettify, Require, SUPPORTED_ESBUILD_TARGETS, UNSUPPORTED_BROWSERLIST_TARGETS, browserslistToEsbuild, compare, compareSemver, nonNullable, parallel, toUnix };
//# sourceMappingURL=index.d.mts.map
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/non-nullable.ts","../src/parallel.ts","../src/to-unix.ts","../src/browserslist.ts","../src/compare.ts","../src/constants.ts","../src/semver.ts","../src/types.ts"],"mappings":";;;cAAa,WAAA,MAAkB,KAAA,EAAO,CAAA,KAAI,KAAA,IAAS,WAAA,CAAY,CAAA;;;;;;AAA/D;;cCaa,QAAA,SAAwB,KAAA,UAAe,KAAA,WAAgB,CAAA,IAAK,IAAA,GAAO,IAAA,EAAM,CAAA,KAAM,OAAA,CAAQ,CAAA,MAAK,OAAA,CAAQ,CAAA;;;cCbpG,MAAA,GAAU,CAAA;;;;;AFAvB;;;;cGaa,qBAAA,GAAyB,YAAA,SAAqB,YAAA,EAAc,GAAA,UAAa,mBAAA;;;cCbzE,OAAA,8BAAsC,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA;;;;cCC/C,yBAAA;AAAA,cAEA,+BAAA;;;cCCA,aAAA,GAAiB,CAAA,YAAa,CAAA;;;;;;ANJ3C;;;;;;;;;;;;;;KOiBY,OAAA,oBAA2B,CAAA,IAAK,CAAA,GAAI,QAAA,CAAS,IAAA,CAAK,CAAA,EAAG,CAAA;;;;;ANJjE;;;;;;;;;KMmBY,QAAA,oBAA4B,CAAA,IAAK,IAAA,CAAK,CAAA,EAAG,CAAA,IAAK,OAAA,CAAQ,IAAA,CAAK,CAAA,EAAG,CAAA;;;;;;;;;;;;;;;;;;;KAoB9D,QAAA,oBACE,CAAA,GAAI,CAAA,CAAE,CAAA;AAAA,KAGR,YAAA,MAAkB,CAAA,GAAI,OAAA,CAAQ,CAAA"}
//#region src/non-nullable.ts
const nonNullable = (value) => value !== null && value !== void 0;
//#endregion
//#region src/parallel.ts
/**
* Executes many async functions in parallel. Returns the
* results from all functions as an array. Does not handle
* any error.
*/
const parallel = async (limit, array, func) => {
const work = array.map((item, index) => ({
index,
item
}));
const processor = async (res) => {
const results = [];
while (true) {
const next = work.pop();
if (!next) return res(results);
const result = await func(next.item);
results.push({
result,
index: next.index
});
}
};
const queues = Array.from({ length: limit }, () => new Promise(processor));
return (await Promise.all(queues)).flat().sort((a, b) => a.index < b.index ? -1 : 1).map((res) => res.result);
};
//#endregion
//#region src/to-unix.ts
const toUnix = (p) => p.replace(/\\/g, "/").replace(/(?<!^)\/+/g, "/");
//#endregion
//#region src/compare.ts
const compare = (a, b) => {
if (a < b) return -1;
if (a > b) return 1;
return 0;
};
//#endregion
//#region src/constants.ts
/** @see https://esbuild.github.io/api/#target */
const SUPPORTED_ESBUILD_TARGETS = [
"chrome",
"deno",
"edge",
"firefox",
"hermes",
"ie",
"ios",
"node",
"opera",
"rhino",
"safari"
];
const UNSUPPORTED_BROWSERLIST_TARGETS = [
"android 4",
"android 3",
"android 2"
];
//#endregion
//#region src/semver.ts
const compareSemver = (a, b) => {
return compare(Number.parseInt(a[0], 10), Number.parseInt(b[0], 10)) || compare(Number.parseInt(a[1] || "0", 10), Number.parseInt(b[1] || "0", 10)) || compare(Number.parseInt(a[2] || "0", 10), Number.parseInt(b[2] || "0", 10));
};
//#endregion
//#region src/browserslist.ts
/**
* Loads and converts Browserslist into esbuild's `target` option.
*
* @param cwd
* @returns
*/
const browserslistToEsbuild = (browserslist, cwd, defaultBrowserslist) => {
return browserslist(browserslist.loadConfig({ path: cwd }) ?? defaultBrowserslist).filter((query) => !UNSUPPORTED_BROWSERLIST_TARGETS.some((target) => query.startsWith(target))).map((query) => {
const split = (query === "safari TP" ? browserslist("last 1 safari version")[0] : query).split(" ");
if (split[0] === "android" || split[0] === "and_chr") split[0] = "chrome";
if (split[0] === "and_ff") split[0] = "firefox";
if (split[0] === "ios_saf" || split[0] === "ios") split[0] = "safari";
if (split[1].includes("-")) split[1] = split[1].slice(0, split[1].indexOf("-"));
if (split[1].endsWith(".0")) split[1] = split[1].slice(0, -2);
return split;
}).filter((split) => SUPPORTED_ESBUILD_TARGETS.includes(split[0]) && /^\d+(\.\d+)*$/.test(split[1])).sort((a, b) => {
if (a[0] === b[0]) return compareSemver(b[1].split("."), a[1].split("."));
else return compare(a[0], b[0]);
}).reduce((acc, browser) => {
const existingIndex = acc.findIndex((br) => br[0] === browser[0]);
if (existingIndex !== -1) acc[existingIndex][1] = browser[1];
else acc.push(browser);
return acc;
}, []).map((split) => split.join(""));
};
//#endregion
export { SUPPORTED_ESBUILD_TARGETS, UNSUPPORTED_BROWSERLIST_TARGETS, browserslistToEsbuild, compare, compareSemver, nonNullable, parallel, toUnix };
//# sourceMappingURL=index.mjs.map
{"version":3,"file":"index.mjs","names":[],"sources":["../src/non-nullable.ts","../src/parallel.ts","../src/to-unix.ts","../src/compare.ts","../src/constants.ts","../src/semver.ts","../src/browserslist.ts"],"sourcesContent":["export const nonNullable = <T>(value: T): value is NonNullable<T> => value !== null && value !== undefined;\n","// Source code: https://github.com/rayepps/radash/blob/03dd3152f560414e933cedcd3bda3c6db3e8306b/src/async.ts#L112-L147\n// License: MIT\n// Author: rayepps\ninterface ItemResult<K> {\n index: number;\n result: K;\n}\n\n/**\n * Executes many async functions in parallel. Returns the\n * results from all functions as an array. Does not handle\n * any error.\n */\nexport const parallel = async <T, K>(limit: number, array: readonly T[], func: (item: T) => Promise<K>): Promise<K[]> => {\n const work = array.map((item, index) => ({\n index,\n item,\n }));\n // Process array items\n const processor = async (res: (value: ItemResult<K>[]) => void) => {\n const results: ItemResult<K>[] = [];\n while (true) {\n const next = work.pop();\n if (!next) {\n return res(results);\n }\n const result = await func(next.item);\n results.push({\n result: result,\n index: next.index,\n });\n }\n };\n // Create queues\n const queues = Array.from({ length: limit }, () => new Promise(processor));\n // Wait for all queues to complete\n const results = (await Promise.all(queues))\n .flat()\n .sort((a, b) => (a.index < b.index ? -1 : 1))\n .map((res) => res.result);\n return results;\n};\n","export const toUnix = (p: string) => p.replace(/\\\\/g, \"/\").replace(/(?<!^)\\/+/g, \"/\");\n","export const compare = <T extends string | number>(a: T, b: T) => {\n if (a < b) return -1;\n if (a > b) return +1;\n return 0;\n};\n","/** @see https://esbuild.github.io/api/#target */\nexport const SUPPORTED_ESBUILD_TARGETS = [\"chrome\", \"deno\", \"edge\", \"firefox\", \"hermes\", \"ie\", \"ios\", \"node\", \"opera\", \"rhino\", \"safari\"];\n\nexport const UNSUPPORTED_BROWSERLIST_TARGETS = [\"android 4\", \"android 3\", \"android 2\"];\n","// Source: https://github.com/browserslist/browserslist/blob/5cad191bc1a1e5beb7768ca263503cc15d0dcc7d/index.js#L139-L151\n// License: MIT\nimport { compare } from \"./compare.js\";\n\nexport const compareSemver = (a: string[], b: string[]) => {\n return (\n compare(Number.parseInt(a[0], 10), Number.parseInt(b[0], 10)) ||\n compare(Number.parseInt(a[1] || \"0\", 10), Number.parseInt(b[1] || \"0\", 10)) ||\n compare(Number.parseInt(a[2] || \"0\", 10), Number.parseInt(b[2] || \"0\", 10))\n );\n};\n","import type Browserslist from \"browserslist\";\nimport { compare } from \"./compare.js\";\nimport { SUPPORTED_ESBUILD_TARGETS, UNSUPPORTED_BROWSERLIST_TARGETS } from \"./constants.js\";\nimport { compareSemver } from \"./semver.js\";\n\n// Original: https://github.com/marcofugaro/browserslist-to-esbuild/blob/0875f1a4ec71f206a634ba406c3528ca5ecf04de/src/index.js\n// License: MIT\n/**\n * Loads and converts Browserslist into esbuild's `target` option.\n *\n * @param cwd\n * @returns\n */\nexport const browserslistToEsbuild = (browserslist: typeof Browserslist, cwd: string, defaultBrowserslist: string[]): string[] => {\n const browserslistConfig = browserslist.loadConfig({ path: cwd }) ?? defaultBrowserslist;\n return (\n browserslist(browserslistConfig)\n // Filter out legacy Android webview to avoid converting them into Chrome targets\n .filter((query) => !UNSUPPORTED_BROWSERLIST_TARGETS.some((target) => query.startsWith(target)))\n .map((query) => {\n const modified = query === \"safari TP\" ? browserslist(\"last 1 safari version\")[0] : query;\n const split = modified.split(\" \");\n // https://github.com/browserslist/browserslist/blob/5cad191bc1a1e5beb7768ca263503cc15d0dcc7d/README.md?plain=1#L329-L350\n // https://esbuild.github.io/api/#target\n if (split[0] === \"android\" || split[0] === \"and_chr\") {\n split[0] = \"chrome\";\n }\n if (split[0] === \"and_ff\") {\n split[0] = \"firefox\";\n }\n if (split[0] === \"ios_saf\" || split[0] === \"ios\") {\n split[0] = \"safari\";\n }\n // Remove upper version bound\n if (split[1].includes(\"-\")) {\n split[1] = split[1].slice(0, split[1].indexOf(\"-\"));\n }\n // Trim ending .0\n if (split[1].endsWith(\".0\")) {\n split[1] = split[1].slice(0, -2);\n }\n return split;\n })\n // Remove unsupported browsers and invalid versions\n .filter((split) => SUPPORTED_ESBUILD_TARGETS.includes(split[0]) && /^\\d+(\\.\\d+)*$/.test(split[1]))\n // Re-sort the result such that the oldest versions end up the latest, same as how\n // Browserslist does it.\n .sort((a, b) => {\n if (a[0] === b[0]) {\n return compareSemver(b[1].split(\".\"), a[1].split(\".\"));\n } else {\n return compare(a[0], b[0]);\n }\n })\n // Only pick the oldest included version for each browser to avoid duplications.\n .reduce((acc, browser) => {\n const existingIndex = acc.findIndex((br) => br[0] === browser[0]);\n if (existingIndex !== -1) {\n acc[existingIndex][1] = browser[1];\n } else {\n acc.push(browser);\n }\n return acc;\n }, [] as string[][])\n .map((split) => split.join(\"\"))\n );\n};\n"],"mappings":"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"}
+10
-11
{
"name": "@serwist/utils",
"version": "9.5.7",
"version": "9.5.8",
"type": "module",

@@ -21,8 +21,8 @@ "description": "This module contains utilities used by Serwist packages.",

"homepage": "https://serwist.pages.dev",
"main": "./dist/index.js",
"types": "./dist/index.d.ts",
"main": "./dist/index.mjs",
"types": "./dist/index.d.mts",
"exports": {
".": {
"types": "./dist/index.d.ts",
"default": "./dist/index.js"
"types": "./dist/index.d.mts",
"default": "./dist/index.mjs"
},

@@ -33,6 +33,5 @@ "./package.json": "./package.json"

"@types/common-tags": "1.8.4",
"browserslist": "4.28.1",
"rollup": "4.59.0",
"typescript": "5.9.3",
"@serwist/configs": "9.5.7"
"browserslist": "4.28.2",
"tsdown": "0.21.10",
"typescript": "6.0.3"
},

@@ -48,4 +47,4 @@ "peerDependencies": {

"scripts": {
"build": "rimraf dist && NODE_ENV=production rollup --config rollup.config.js",
"dev": "rollup --config rollup.config.js --watch",
"build": "rimraf dist && NODE_ENV=production tsdown",
"dev": "tsdown --watch",
"lint": "biome lint ./src",

@@ -52,0 +51,0 @@ "typecheck": "tsc"

import type Browserslist from "browserslist";
/**
* Loads and converts Browserslist into esbuild's `target` option.
*
* @param cwd
* @returns
*/
export declare const browserslistToEsbuild: (browserslist: typeof Browserslist, cwd: string, defaultBrowserslist: string[]) => string[];
//# sourceMappingURL=browserslist.d.ts.map
{"version":3,"file":"browserslist.d.ts","sourceRoot":"","sources":["../src/browserslist.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,YAAY,MAAM,cAAc,CAAC;AAO7C;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,GAAI,cAAc,OAAO,YAAY,EAAE,KAAK,MAAM,EAAE,qBAAqB,MAAM,EAAE,KAAG,MAAM,EAqD3H,CAAC"}
export declare const compare: <T extends string | number>(a: T, b: T) => 1 | -1 | 0;
//# sourceMappingURL=compare.d.ts.map
{"version":3,"file":"compare.d.ts","sourceRoot":"","sources":["../src/compare.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,GAAI,CAAC,SAAS,MAAM,GAAG,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,eAI5D,CAAC"}
/** @see https://esbuild.github.io/api/#target */
export declare const SUPPORTED_ESBUILD_TARGETS: string[];
export declare const UNSUPPORTED_BROWSERLIST_TARGETS: string[];
//# sourceMappingURL=constants.d.ts.map
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,iDAAiD;AACjD,eAAO,MAAM,yBAAyB,UAAmG,CAAC;AAE1I,eAAO,MAAM,+BAA+B,UAA0C,CAAC"}
import { nonNullable } from "./non-nullable.js";
import { parallel } from "./parallel.js";
import { toUnix } from "./to-unix.js";
export { browserslistToEsbuild } from "./browserslist.js";
export { compare } from "./compare.js";
export { SUPPORTED_ESBUILD_TARGETS, UNSUPPORTED_BROWSERLIST_TARGETS } from "./constants.js";
export { compareSemver } from "./semver.js";
export { nonNullable, parallel, toUnix };
export type * from "./types.js";
//# sourceMappingURL=index.d.ts.map
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEtC,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,yBAAyB,EAAE,+BAA+B,EAAE,MAAM,gBAAgB,CAAC;AAC5F,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;AAEzC,mBAAmB,YAAY,CAAC"}
const nonNullable = (value)=>value !== null && value !== undefined;
const parallel = async (limit, array, func)=>{
const work = array.map((item, index)=>({
index,
item
}));
const processor = async (res)=>{
const results = [];
while(true){
const next = work.pop();
if (!next) {
return res(results);
}
const result = await func(next.item);
results.push({
result: result,
index: next.index
});
}
};
const queues = Array.from({
length: limit
}, ()=>new Promise(processor));
const results = (await Promise.all(queues)).flat().sort((a, b)=>a.index < b.index ? -1 : 1).map((res)=>res.result);
return results;
};
const toUnix = (p)=>p.replace(/\\/g, "/").replace(/(?<!^)\/+/g, "/");
const compare = (a, b)=>{
if (a < b) return -1;
if (a > b) return 1;
return 0;
};
const SUPPORTED_ESBUILD_TARGETS = [
"chrome",
"deno",
"edge",
"firefox",
"hermes",
"ie",
"ios",
"node",
"opera",
"rhino",
"safari"
];
const UNSUPPORTED_BROWSERLIST_TARGETS = [
"android 4",
"android 3",
"android 2"
];
const compareSemver = (a, b)=>{
return compare(Number.parseInt(a[0], 10), Number.parseInt(b[0], 10)) || compare(Number.parseInt(a[1] || "0", 10), Number.parseInt(b[1] || "0", 10)) || compare(Number.parseInt(a[2] || "0", 10), Number.parseInt(b[2] || "0", 10));
};
const browserslistToEsbuild = (browserslist, cwd, defaultBrowserslist)=>{
const browserslistConfig = browserslist.loadConfig({
path: cwd
}) ?? defaultBrowserslist;
return browserslist(browserslistConfig).filter((query)=>!UNSUPPORTED_BROWSERLIST_TARGETS.some((target)=>query.startsWith(target))).map((query)=>{
const modified = query === "safari TP" ? browserslist("last 1 safari version")[0] : query;
const split = modified.split(" ");
if (split[0] === "android" || split[0] === "and_chr") {
split[0] = "chrome";
}
if (split[0] === "and_ff") {
split[0] = "firefox";
}
if (split[0] === "ios_saf" || split[0] === "ios") {
split[0] = "safari";
}
if (split[1].includes("-")) {
split[1] = split[1].slice(0, split[1].indexOf("-"));
}
if (split[1].endsWith(".0")) {
split[1] = split[1].slice(0, -2);
}
return split;
}).filter((split)=>SUPPORTED_ESBUILD_TARGETS.includes(split[0]) && /^\d+(\.\d+)*$/.test(split[1])).sort((a, b)=>{
if (a[0] === b[0]) {
return compareSemver(b[1].split("."), a[1].split("."));
} else {
return compare(a[0], b[0]);
}
}).reduce((acc, browser)=>{
const existingIndex = acc.findIndex((br)=>br[0] === browser[0]);
if (existingIndex !== -1) {
acc[existingIndex][1] = browser[1];
} else {
acc.push(browser);
}
return acc;
}, []).map((split)=>split.join(""));
};
export { SUPPORTED_ESBUILD_TARGETS, UNSUPPORTED_BROWSERLIST_TARGETS, browserslistToEsbuild, compare, compareSemver, nonNullable, parallel, toUnix };
export declare const nonNullable: <T>(value: T) => value is NonNullable<T>;
//# sourceMappingURL=non-nullable.d.ts.map
{"version":3,"file":"non-nullable.d.ts","sourceRoot":"","sources":["../src/non-nullable.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW,GAAI,CAAC,EAAE,OAAO,CAAC,KAAG,KAAK,IAAI,WAAW,CAAC,CAAC,CAA0C,CAAC"}
/**
* Executes many async functions in parallel. Returns the
* results from all functions as an array. Does not handle
* any error.
*/
export declare const parallel: <T, K>(limit: number, array: readonly T[], func: (item: T) => Promise<K>) => Promise<K[]>;
//# sourceMappingURL=parallel.d.ts.map
{"version":3,"file":"parallel.d.ts","sourceRoot":"","sources":["../src/parallel.ts"],"names":[],"mappings":"AAQA;;;;GAIG;AACH,eAAO,MAAM,QAAQ,GAAU,CAAC,EAAE,CAAC,EAAE,OAAO,MAAM,EAAE,OAAO,SAAS,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,KAAG,OAAO,CAAC,CAAC,EAAE,CA4BnH,CAAC"}
export declare const compareSemver: (a: string[], b: string[]) => 1 | -1 | 0;
//# sourceMappingURL=semver.d.ts.map
{"version":3,"file":"semver.d.ts","sourceRoot":"","sources":["../src/semver.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,aAAa,GAAI,GAAG,MAAM,EAAE,EAAE,GAAG,MAAM,EAAE,eAMrD,CAAC"}
export declare const toUnix: (p: string) => string;
//# sourceMappingURL=to-unix.d.ts.map
{"version":3,"file":"to-unix.d.ts","sourceRoot":"","sources":["../src/to-unix.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,MAAM,GAAI,GAAG,MAAM,WAAqD,CAAC"}
/**
* Make certain fields in a object type required
*
* @example
* interface A {
* a?: string;
* b?: string;
* c?: string;
* }
* type B = RequiredFields<A, "b" | "c">;
* const b: B = {
* b: "hehe",
* c: "hehe",
* }; //valid
* const b: B = { a: "hehe" }; //invalid
* const c: B = { a: "hehe", b: "hehe" }; //invalid
*/
export type Require<T, U extends keyof T> = T & Required<Pick<T, U>>;
/**
* Make certain fields in a object type optional
*
* @example
* interface A {
* a: string;
* b: string;
* c: string;
* }
* type B = Optional<A, "b" | "c">;
* const b: B = { a: "hehe" }; //valid
* const b: B = {}; //invalid
*/
export type Optional<T, U extends keyof T> = Omit<T, U> & Partial<Pick<T, U>>;
/**
* Makes an object type's hover overlay more readable
*
* @example
*
* interface A {
* b: string;
* c: boolean;
* }
*
* interface B {
* c: number;
* }
*
* type D = A | B; // Displayed as is written
*
* type C = Prettify<A | B>; // { b: string; c: boolean; } | { c: number; }
*/
export type Prettify<T> = {
[K in keyof T]: T[K];
} & {};
export type MaybePromise<T> = T | Promise<T>;
//# sourceMappingURL=types.d.ts.map
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,MAAM,OAAO,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAErE;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,QAAQ,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAE9E;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,MAAM,QAAQ,CAAC,CAAC,IAAI;KACvB,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CACrB,GAAG,EAAE,CAAC;AAEP,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC"}