Comparing version 1.23.0 to 2.0.0
@@ -22,5 +22,5 @@ var __defProp = Object.defineProperty; | ||
__export(src_exports, { | ||
ArrayUtils: () => ArrayUtils, | ||
ArrayTools: () => ArrayTools, | ||
CENTURY: () => CENTURY, | ||
ColourUtils: () => ColourUtils_exports, | ||
ColourTools: () => ColourTools_exports, | ||
DAY: () => DAY, | ||
@@ -33,8 +33,10 @@ DECADE: () => DECADE, | ||
MONTH: () => MONTH, | ||
ObjectUtils: () => ObjectUtils, | ||
PromiseUtils: () => PromiseUtils, | ||
MathTools: () => MathTools, | ||
MathsTools: () => MathsTools_exports, | ||
ObjectTools: () => ObjectTools, | ||
PromiseTools: () => PromiseTools, | ||
QueueManager: () => QueueManager, | ||
SECOND: () => SECOND, | ||
StringUtils: () => StringUtils, | ||
TimeUtils: () => TimeUtils, | ||
StringTools: () => StringTools_exports, | ||
TimeTools: () => TimeTools, | ||
WEEK: () => WEEK, | ||
@@ -203,3 +205,3 @@ YEAR: () => YEAR, | ||
// src/tools/TimeUtils.ts | ||
// src/tools/TimeTools.ts | ||
var units = [ | ||
@@ -274,3 +276,3 @@ { | ||
}; | ||
var TimeUtils = { | ||
var TimeTools = { | ||
toReadableDuration | ||
@@ -294,3 +296,3 @@ }; | ||
const lineStart = `${dispNames[label] || label}: `.padEnd(nameColLength + 1, " "); | ||
const lineEnd = `${TimeUtils.toReadableDuration(duration, false, 4)}`; | ||
const lineEnd = `${TimeTools.toReadableDuration(duration, false, 4)}`; | ||
const line = chalk.bold(prefix + lineStart) + lineEnd; | ||
@@ -382,3 +384,2 @@ console.log(wrapperFn(line)); | ||
__export(fn_exports, { | ||
addAll: () => addAll, | ||
arrayAsc: () => arrayAsc, | ||
@@ -388,5 +389,2 @@ arrayDesc: () => arrayDesc, | ||
byProp: () => byProp, | ||
capitalise: () => capitalise2, | ||
ceilTo: () => ceilTo, | ||
clamp: () => clamp, | ||
combine: () => combine, | ||
@@ -400,4 +398,2 @@ combineProp: () => combineProp, | ||
filters: () => filters, | ||
fixFloat: () => fixFloat, | ||
floorTo: () => floorTo, | ||
furthestFrom: () => furthestFrom, | ||
@@ -411,5 +407,2 @@ isAllEqual: () => isAllEqual, | ||
isTruthy: () => isTruthy, | ||
lerp: () => lerp, | ||
lerpArray: () => lerpArray, | ||
lerpObj: () => lerpObj, | ||
maps: () => maps, | ||
@@ -425,4 +418,2 @@ mode: () => mode, | ||
result: () => result, | ||
round: () => round, | ||
roundTo: () => roundTo, | ||
sorts: () => sorts, | ||
@@ -436,3 +427,18 @@ toBool: () => toBool, | ||
// src/tools/ArrayUtils.ts | ||
// src/tools/MathsTools.ts | ||
var MathsTools_exports = {}; | ||
__export(MathsTools_exports, { | ||
addAll: () => addAll, | ||
ceilTo: () => ceilTo, | ||
clamp: () => clamp, | ||
fixFloat: () => fixFloat, | ||
floorTo: () => floorTo, | ||
lerp: () => lerp, | ||
lerpArray: () => lerpArray, | ||
lerpObj: () => lerpObj, | ||
round: () => round, | ||
roundTo: () => roundTo | ||
}); | ||
// src/tools/ArrayTools.ts | ||
var range = (length = 1, multiplier = 1, offset = 0) => new Array(Math.floor(length)).fill(1).map((v, i) => fixFloat(i * multiplier) + offset); | ||
@@ -490,3 +496,3 @@ var zipFn = (length, arrs) => range(length).map((i) => arrs.map((arr) => (arr || [])[i])); | ||
}; | ||
var ArrayUtils = { | ||
var ArrayTools = { | ||
range, | ||
@@ -505,3 +511,3 @@ zip, | ||
group, | ||
utils: { | ||
Tools: { | ||
isNumString, | ||
@@ -512,69 +518,22 @@ partitionNums | ||
// src/tools/StringUtils.ts | ||
var capitalise = (input = "") => (input || "").split(/\s/).map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()).join(" "); | ||
var angloise = (input) => input.normalize("NFD").replace(/[\u0300-\u036f]/g, ""); | ||
var clean = (input = "") => angloise([input].flat().join(" ")).replace(/\s{1,}/g, " ").replace(/[^A-Za-z0-9 ]/gi, ""); | ||
var caseHandler = (overrideSplitter) => { | ||
const getSplit = (input = "") => { | ||
if (overrideSplitter) | ||
return overrideSplitter(input); | ||
const arr = [input].flat(); | ||
return arr.map((s) => clean(s.replace(/-|_/g, " ")).split(" ")).flat().filter((s) => s.length); | ||
}; | ||
const toCamelCase = (input, capitaliseFirst = false) => { | ||
const split = getSplit(input); | ||
return split.map((word, index) => index === 0 && !capitaliseFirst ? word.toLowerCase() : capitalise(word)).join(""); | ||
}; | ||
const toLowerCamelCase = (input) => toCamelCase(input, false); | ||
const toUpperCamelCase = (input) => toCamelCase(input, true); | ||
const toCharacterSeparated = (input, char, toUpper = false) => { | ||
const split = getSplit(input); | ||
return split.map((word, index) => toUpper ? word.toUpperCase() : word.toLowerCase()).join(char); | ||
}; | ||
const toSlugCase = (input, toUpper = false) => toCharacterSeparated(input, "-", toUpper); | ||
const toLowerSlugCase = (input) => toSlugCase(input, false); | ||
const toUpperSlugCase = (input) => toSlugCase(input, true); | ||
const toSnakeCase = (input, toUpper = false) => toCharacterSeparated(input, "_", toUpper); | ||
const toLowerSnakeCase = (input) => toSnakeCase(input, false); | ||
const toUpperSnakeCase = (input) => toSnakeCase(input, true); | ||
const toSpaced = (input, toUpper = false) => toCharacterSeparated(input, " ", toUpper); | ||
const toLowerSpaced = (input) => toSpaced(input, false); | ||
const toUpperSpaced = (input) => toSpaced(input, true); | ||
const toCapitalisedSpaced = (input) => capitalise(toSpaced(input, false)); | ||
return { | ||
toLowerCamelCase, | ||
toUpperCamelCase, | ||
toCamelCase, | ||
toLowerSlugCase, | ||
toUpperSlugCase, | ||
toSlugCase, | ||
toLowerSnakeCase, | ||
toUpperSnakeCase, | ||
toSnakeCase, | ||
toLowerSpaced, | ||
toUpperSpaced, | ||
toCapitalisedSpaced, | ||
toSpaced, | ||
toCharacterSeparated | ||
}; | ||
// src/tools/MathsTools.ts | ||
var fixFloat = (num, precision = 6) => Math.round(num * Math.pow(10, precision)) / Math.pow(10, precision); | ||
var addAll = (...args) => args.reduce((acc, num) => acc + num, 0); | ||
var floorTo = (to, value) => fixFloat(Math.floor(value / to) * to); | ||
var roundTo = (to, value) => fixFloat(Math.round(value / to) * to); | ||
var ceilTo = (to, value) => fixFloat(Math.ceil(value / to) * to); | ||
var round = { | ||
floorTo, | ||
roundTo, | ||
ceilTo, | ||
to: roundTo | ||
}; | ||
var standardCaseHandler = caseHandler(); | ||
var fromSlugCase = standardCaseHandler; | ||
var fromSnakeCase = standardCaseHandler; | ||
var fromSpaced = standardCaseHandler; | ||
var fromCamelCase = caseHandler( | ||
(input) => [input].flat().map((s) => clean(s)).map( | ||
(s) => s.replace(/([A-Z])/g, " $1").replace(/-|_/g, " ").trim() | ||
).map((s) => s.split(" ")).flat() | ||
); | ||
var StringUtils = { | ||
capitalise, | ||
angloise, | ||
clean, | ||
...standardCaseHandler, | ||
fromSlugCase, | ||
fromSnakeCase, | ||
fromSpaced, | ||
fromCamelCase | ||
var lerp = (progress, fromVal, toVal) => fromVal + (toVal - fromVal) * progress; | ||
var lerpArray = (progress, fromArr, toArr) => zip(fromArr, toArr).map(([fromVal, toVal]) => lerp(progress, fromVal, toVal)); | ||
var lerpObj = (progress, fromObj, toObj) => { | ||
const entries2 = Object.entries(fromObj); | ||
const lerped = entries2.map(([key, fromVal]) => typeof fromVal === "number" ? [key, lerp(progress, fromVal, toObj[key])] : [key, fromVal]); | ||
return Object.fromEntries(lerped); | ||
}; | ||
var clamp = (value, min, max) => Math.max(Math.min(min, max), Math.min(value, Math.max(min, max))); | ||
@@ -588,4 +547,2 @@ // src/tools/fn.ts | ||
var reject = (item) => () => Promise.reject(item); | ||
var fixFloat = (num, precision = 6) => Math.round(num * Math.pow(10, precision)) / Math.pow(10, precision); | ||
var addAll = (...args) => args.reduce((acc, num) => acc + num, 0); | ||
var exists = (item) => item !== void 0 && item !== null; | ||
@@ -709,23 +666,2 @@ var isTruthy = (item) => Boolean(item); | ||
}; | ||
var floorTo = (to, value) => fixFloat(Math.floor(value / to) * to); | ||
var roundTo = (to, value) => fixFloat(Math.round(value / to) * to); | ||
var ceilTo = (to, value) => fixFloat(Math.ceil(value / to) * to); | ||
var round = { | ||
floorTo, | ||
roundTo, | ||
ceilTo, | ||
to: roundTo | ||
}; | ||
var lerp = (progress, fromVal, toVal) => fromVal + (toVal - fromVal) * progress; | ||
var lerpArray = (progress, fromArr, toArr) => zip(fromArr, toArr).map(([fromVal, toVal]) => lerp(progress, fromVal, toVal)); | ||
var lerpObj = (progress, fromObj, toObj) => { | ||
const entries2 = Object.entries(fromObj); | ||
const lerped = entries2.map(([key, fromVal]) => typeof fromVal === "number" ? [key, lerp(progress, fromVal, toObj[key])] : [key, fromVal]); | ||
return Object.fromEntries(lerped); | ||
}; | ||
var clamp = (value, min, max) => Math.max(Math.min(min, max), Math.min(value, Math.max(min, max))); | ||
var capitalise2 = (str) => { | ||
console.warn("fn.capitalise is deprecated, use StringUtils.capitalize instead"); | ||
return StringUtils.capitalise(str); | ||
}; | ||
@@ -887,3 +823,3 @@ // src/tools/progressBar.ts | ||
// src/tools/PromiseUtils.ts | ||
// src/tools/PromiseTools.ts | ||
var getDeferred = () => { | ||
@@ -988,3 +924,3 @@ let resolve2, reject2; | ||
}; | ||
var PromiseUtils = { | ||
var PromiseTools = { | ||
getDeferred, | ||
@@ -1001,3 +937,3 @@ all, | ||
// src/tools/ObjectUtils.ts | ||
// src/tools/ObjectTools.ts | ||
var remodel = (obj, func) => Object.fromEntries(func(Object.entries(obj)) ?? Object.entries(obj)); | ||
@@ -1009,4 +945,4 @@ var remodelEach = (obj, func) => Object.fromEntries(Object.entries(obj).map((entry, index, entries2) => func(entry, index, entries2) ?? entry)); | ||
var filter = (obj, func) => remodel(obj, (entries2) => entries2.filter(([key, value], index) => func(key, value, index))); | ||
var clean2 = (obj) => filter(obj, (key, value) => value !== void 0); | ||
var ObjectUtils = { | ||
var clean = (obj) => filter(obj, (key, value) => value !== void 0); | ||
var ObjectTools = { | ||
remodel, | ||
@@ -1018,3 +954,3 @@ remodelEach, | ||
filter, | ||
clean: clean2 | ||
clean | ||
}; | ||
@@ -1131,5 +1067,5 @@ | ||
// src/tools/ColourUtils.ts | ||
var ColourUtils_exports = {}; | ||
__export(ColourUtils_exports, { | ||
// src/tools/ColourTools.ts | ||
var ColourTools_exports = {}; | ||
__export(ColourTools_exports, { | ||
fromHSL: () => fromHSL, | ||
@@ -1494,9 +1430,108 @@ getContrastedColour: () => getContrastedColour, | ||
// src/tools/StringTools.ts | ||
var StringTools_exports = {}; | ||
__export(StringTools_exports, { | ||
angloise: () => angloise, | ||
capitalise: () => capitalise, | ||
clean: () => clean2, | ||
fromCamelCase: () => fromCamelCase, | ||
fromSlugCase: () => fromSlugCase, | ||
fromSnakeCase: () => fromSnakeCase, | ||
fromSpaced: () => fromSpaced, | ||
toCamelCase: () => toCamelCase, | ||
toCapitalisedSpaced: () => toCapitalisedSpaced, | ||
toCharacterSeparated: () => toCharacterSeparated, | ||
toLowerCamelCase: () => toLowerCamelCase, | ||
toLowerSlugCase: () => toLowerSlugCase, | ||
toLowerSnakeCase: () => toLowerSnakeCase, | ||
toLowerSpaced: () => toLowerSpaced, | ||
toSlugCase: () => toSlugCase, | ||
toSnakeCase: () => toSnakeCase, | ||
toSpaced: () => toSpaced, | ||
toUpperCamelCase: () => toUpperCamelCase, | ||
toUpperSlugCase: () => toUpperSlugCase, | ||
toUpperSnakeCase: () => toUpperSnakeCase, | ||
toUpperSpaced: () => toUpperSpaced | ||
}); | ||
var capitalise = (input = "") => (input || "").split(/\s/).map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()).join(" "); | ||
var angloise = (input) => input.normalize("NFD").replace(/[\u0300-\u036f]/g, ""); | ||
var clean2 = (input = "") => angloise([input].flat().join(" ")).replace(/\s{1,}/g, " ").replace(/[^A-Za-z0-9 ]/gi, ""); | ||
var caseHandler = (overrideSplitter) => { | ||
const getSplit = (input = "") => { | ||
if (overrideSplitter) | ||
return overrideSplitter(input); | ||
const arr = [input].flat(); | ||
return arr.map((s) => clean2(s.replace(/-|_/g, " ")).split(" ")).flat().filter((s) => s.length); | ||
}; | ||
const toCamelCase2 = (input, capitaliseFirst = false) => { | ||
const split = getSplit(input); | ||
return split.map((word, index) => index === 0 && !capitaliseFirst ? word.toLowerCase() : capitalise(word)).join(""); | ||
}; | ||
const toLowerCamelCase2 = (input) => toCamelCase2(input, false); | ||
const toUpperCamelCase2 = (input) => toCamelCase2(input, true); | ||
const toCharacterSeparated2 = (input, char, toUpper = false) => { | ||
const split = getSplit(input); | ||
return split.map((word, index) => toUpper ? word.toUpperCase() : word.toLowerCase()).join(char); | ||
}; | ||
const toSlugCase2 = (input, toUpper = false) => toCharacterSeparated2(input, "-", toUpper); | ||
const toLowerSlugCase2 = (input) => toSlugCase2(input, false); | ||
const toUpperSlugCase2 = (input) => toSlugCase2(input, true); | ||
const toSnakeCase2 = (input, toUpper = false) => toCharacterSeparated2(input, "_", toUpper); | ||
const toLowerSnakeCase2 = (input) => toSnakeCase2(input, false); | ||
const toUpperSnakeCase2 = (input) => toSnakeCase2(input, true); | ||
const toSpaced2 = (input, toUpper = false) => toCharacterSeparated2(input, " ", toUpper); | ||
const toLowerSpaced2 = (input) => toSpaced2(input, false); | ||
const toUpperSpaced2 = (input) => toSpaced2(input, true); | ||
const toCapitalisedSpaced2 = (input) => capitalise(toSpaced2(input, false)); | ||
return { | ||
toLowerCamelCase: toLowerCamelCase2, | ||
toUpperCamelCase: toUpperCamelCase2, | ||
toCamelCase: toCamelCase2, | ||
toLowerSlugCase: toLowerSlugCase2, | ||
toUpperSlugCase: toUpperSlugCase2, | ||
toSlugCase: toSlugCase2, | ||
toLowerSnakeCase: toLowerSnakeCase2, | ||
toUpperSnakeCase: toUpperSnakeCase2, | ||
toSnakeCase: toSnakeCase2, | ||
toLowerSpaced: toLowerSpaced2, | ||
toUpperSpaced: toUpperSpaced2, | ||
toCapitalisedSpaced: toCapitalisedSpaced2, | ||
toSpaced: toSpaced2, | ||
toCharacterSeparated: toCharacterSeparated2 | ||
}; | ||
}; | ||
var standardCaseHandler = caseHandler(); | ||
var { | ||
toLowerCamelCase, | ||
toUpperCamelCase, | ||
toCamelCase, | ||
toLowerSlugCase, | ||
toUpperSlugCase, | ||
toSlugCase, | ||
toLowerSnakeCase, | ||
toUpperSnakeCase, | ||
toSnakeCase, | ||
toLowerSpaced, | ||
toUpperSpaced, | ||
toCapitalisedSpaced, | ||
toSpaced, | ||
toCharacterSeparated | ||
} = standardCaseHandler; | ||
var fromSlugCase = standardCaseHandler; | ||
var fromSnakeCase = standardCaseHandler; | ||
var fromSpaced = standardCaseHandler; | ||
var fromCamelCase = caseHandler( | ||
(input) => [input].flat().map((s) => clean2(s)).map( | ||
(s) => s.replace(/([A-Z])/g, " $1").replace(/-|_/g, " ").trim() | ||
).map((s) => s.split(" ")).flat() | ||
); | ||
// src/index.ts | ||
var MathTools = MathsTools_exports; | ||
var { filters: filters2, maps: maps2, sorts: sorts2, reduces: reduces2, everys: everys2 } = fn_exports; | ||
// Annotate the CommonJS export names for ESM import in node: | ||
0 && (module.exports = { | ||
ArrayUtils, | ||
ArrayTools, | ||
CENTURY, | ||
ColourUtils, | ||
ColourTools, | ||
DAY, | ||
@@ -1509,8 +1544,10 @@ DECADE, | ||
MONTH, | ||
ObjectUtils, | ||
PromiseUtils, | ||
MathTools, | ||
MathsTools, | ||
ObjectTools, | ||
PromiseTools, | ||
QueueManager, | ||
SECOND, | ||
StringUtils, | ||
TimeUtils, | ||
StringTools, | ||
TimeTools, | ||
WEEK, | ||
@@ -1517,0 +1554,0 @@ YEAR, |
{ | ||
"name": "swiss-ak", | ||
"version": "1.23.0", | ||
"version": "2.0.0", | ||
"author": "Jack Cannon <jackc@annon.co.uk> (http://c.annon.co.uk/)", | ||
@@ -23,2 +23,3 @@ "license": "MIT", | ||
"jest": "^28.1.3", | ||
"swiss-docs": "0.3.0", | ||
"ts-jest": "^28.0.7", | ||
@@ -32,9 +33,6 @@ "tsup": "^6.2.1", | ||
"watch": "yarn build -- --watch src", | ||
"docs": "swiss-docs -i src -o README.md -r=swiss-ak-swiss-army-knife", | ||
"docs": "swiss-docs -i src -o README.md", | ||
"test": "jest --no-cache", | ||
"prepublishOnly": "yarn test && yarn build" | ||
}, | ||
"dependencies": { | ||
"swiss-docs": "0.2.0" | ||
} | ||
} |
@@ -7,7 +7,6 @@ export * from './tools/types'; | ||
export * from './tools/errorHandling'; | ||
export * from './tools/PromiseUtils'; | ||
export * from './tools/ArrayUtils'; | ||
export * from './tools/ObjectUtils'; | ||
export * from './tools/TimeUtils'; | ||
export * from './tools/StringUtils'; | ||
export * from './tools/PromiseTools'; | ||
export * from './tools/ArrayTools'; | ||
export * from './tools/ObjectTools'; | ||
export * from './tools/TimeTools'; | ||
export * from './tools/symbols'; | ||
@@ -19,6 +18,12 @@ export * from './tools/queue'; | ||
import * as progressBar from './tools/progressBar'; | ||
import * as ColourUtils from './tools/ColourUtils'; | ||
import * as ColourTools from './tools/ColourTools'; | ||
export * as StringTools from './tools/StringTools'; | ||
export { times, waiters, progressBar, ColourUtils }; | ||
import * as MathsTools from './tools/MathsTools'; | ||
export { MathsTools }; | ||
// an alias | ||
export const MathTools = MathsTools; | ||
export { times, waiters, progressBar, ColourTools }; | ||
// Higher order functions | ||
@@ -25,0 +30,0 @@ import * as fn from './tools/fn'; |
@@ -1,3 +0,2 @@ | ||
import { range, zip } from './ArrayUtils'; | ||
import { StringUtils } from './StringUtils'; | ||
import { fixFloat } from './MathsTools'; | ||
@@ -82,32 +81,3 @@ //<!-- DOCS: 30 --> | ||
// TODO move to MathsUtils | ||
/**<!-- DOCS: ### --> | ||
* fixFloat | ||
* | ||
* - `fn.fixFloat` | ||
* | ||
* Fixes floating point errors that may occur when adding/subtracting/multiplying/dividing real/float numbers | ||
* | ||
* ```typescript | ||
* 0.1 + 0.2 // 0.30000000000000004 | ||
* fixFloat(0.1 + 0.2) // 0.3 | ||
* ``` | ||
*/ | ||
export const fixFloat = (num: number, precision = 6): number => Math.round(num * Math.pow(10, precision)) / Math.pow(10, precision); | ||
// TODO move to MathsUtils | ||
/**<!-- DOCS: ### --> | ||
* addAll | ||
* | ||
* - `fn.addAll` | ||
* | ||
* Adds all numbers together. Each argument is a number (use spread operator to pass in an array) similar to Math.min/Math.max | ||
* | ||
* ```typescript | ||
* addAll(1, 2, 3, 4, 5); // 15 | ||
* ``` | ||
*/ | ||
export const addAll = (...args: number[]): number => args.reduce((acc, num) => acc + num, 0); | ||
/**<!-- DOCS: ### --> | ||
* filters | ||
@@ -615,132 +585,1 @@ */ | ||
}; | ||
// TODO move to MathsUtils | ||
/**<!-- DOCS: ### --> | ||
* round | ||
*/ | ||
/**<!-- DOCS: #### --> | ||
* floorTo | ||
* | ||
* - `fn.floorTo` | ||
* - `fn.round.floorTo` | ||
* | ||
* Floors a number down to the nearest multiple of the given number. | ||
* | ||
* ```typescript | ||
* fn.round.floorTo(10, 102); // 100 | ||
* fn.round.floorTo(5, 53); // 50 | ||
* fn.round.floorTo(0.1, 0.25); // 0.2 | ||
* ``` | ||
*/ | ||
export const floorTo = (to: number, value: number) => fixFloat(Math.floor(value / to) * to); | ||
// TODO move to MathsUtils | ||
/**<!-- DOCS: #### --> | ||
* roundTo | ||
* | ||
* - `fn.round.to` | ||
* - `fn.roundTo` | ||
* - `fn.round.roundTo` | ||
* | ||
* Floors a number down to the nearest multiple of the given number. | ||
* | ||
* ```typescript | ||
* fn.round.to(10, 102); // 100 | ||
* fn.round.to(5, 53); // 55 | ||
* fn.round.to(0.1, 0.25); // 0.3 | ||
* ``` | ||
*/ | ||
export const roundTo = (to: number, value: number) => fixFloat(Math.round(value / to) * to); | ||
// TODO move to MathsUtils | ||
/**<!-- DOCS: #### --> | ||
* ceilTo | ||
* | ||
* - `fn.ceilTo` | ||
* - `fn.round.ceilTo` | ||
* | ||
* Floors a number down to the nearest multiple of the given number. | ||
* | ||
* ```typescript | ||
* fn.round.ceilTo(10, 102); // 110 | ||
* fn.round.ceilTo(5, 53); // 55 | ||
* fn.round.ceilTo(0.1, 0.25); // 0.3 | ||
* ``` | ||
*/ | ||
export const ceilTo = (to: number, value: number) => fixFloat(Math.ceil(value / to) * to); | ||
// TODO move to MathsUtils | ||
export const round = { | ||
floorTo, | ||
roundTo, | ||
ceilTo, | ||
to: roundTo | ||
}; | ||
// TODO move to MathsUtils | ||
/**<!-- DOCS: ### --> | ||
* lerp | ||
* | ||
* - `fn.lerp` | ||
* | ||
* Linearly interpolates between two values. | ||
* | ||
* ```typescript | ||
* fn.lerp(0.5, 0, 10); // 5 | ||
* ``` | ||
*/ | ||
export const lerp = (progress: number, fromVal: number, toVal: number): number => fromVal + (toVal - fromVal) * progress; | ||
// TODO move to MathsUtils | ||
/**<!-- DOCS: ### --> | ||
* lerpArray | ||
* | ||
* - `fn.lerpArray` | ||
* | ||
* Linearly interpolates between the values of 2 arrays. | ||
* | ||
* ```typescript | ||
* fn.lerpArray(0.5, [0, 0, 0], [10, 100, 1000]) // [5, 50, 500] | ||
* ``` | ||
*/ | ||
export const lerpArray = (progress: number, fromArr: number[], toArr: number[]): number[] => | ||
zip(fromArr, toArr).map(([fromVal, toVal]) => lerp(progress, fromVal, toVal)); | ||
// TODO move to MathsUtils | ||
/**<!-- DOCS: ### --> | ||
* lerpObj | ||
* | ||
* - `fn.lerpObj` | ||
* | ||
* Linearly interpolates between the values of 2 arrays. | ||
* | ||
* ```typescript | ||
* fn.lerpObj(0.5, {'ARS': 0, 'CHE': 0, 'FUL': 0}, {'ARS': 100, 'CHE': 10, 'FUL': 20}) // {'ARS': 50, 'CHE': 5, 'FUL': 10} | ||
* ``` | ||
*/ | ||
export const lerpObj = <T extends object>(progress: number, fromObj: T, toObj: T): T => { | ||
const entries = Object.entries(fromObj); | ||
const lerped = entries.map(([key, fromVal]) => (typeof fromVal === 'number' ? [key, lerp(progress, fromVal, toObj[key])] : [key, fromVal])); | ||
return Object.fromEntries(lerped) as T; | ||
}; | ||
// TODO move non high-level functions elsewhere (e.g. MathsUtils, StringUtils, etc) | ||
/**<!-- DOCS: ### --> | ||
* clamp | ||
* | ||
* - `fn.clamp` | ||
* | ||
* Clamps a value between a min and max. | ||
* | ||
* ```typescript | ||
* fn.clamp(5, 0, 10); // 5 | ||
* fn.clamp(-5, 0, 10); // 0 | ||
* ``` | ||
*/ | ||
export const clamp = (value: number, min: number, max: number) => Math.max(Math.min(min, max), Math.min(value, Math.max(min, max))); | ||
// TODO REMOVE | ||
export const capitalise = (str: string): string => { | ||
console.warn('fn.capitalise is deprecated, use StringUtils.capitalize instead'); | ||
return StringUtils.capitalise(str); | ||
}; |
@@ -30,3 +30,3 @@ import { wait } from './waiters'; | ||
* // happening async/concurrently | ||
* PromiseUtils.each(range(5), async (i) => { | ||
* PromiseTools.each(range(5), async (i) => { | ||
* await wait(seconds(Math.random() * 1)); | ||
@@ -33,0 +33,0 @@ * console.log(Date.now() - start, ' - trigger:', i, ); |
import { ms } from './times'; | ||
import { KeysOnly, Numbered } from './types'; | ||
import { noChalk, noWrap } from './fakeChalk'; | ||
import { TimeUtils } from './TimeUtils'; | ||
import { TimeTools } from './TimeTools'; | ||
@@ -104,3 +104,3 @@ //<!-- DOCS: 900 --> | ||
const lineStart = `${dispNames[label] || label}: `.padEnd(nameColLength + 1, ' '); | ||
const lineEnd = `${TimeUtils.toReadableDuration(duration, false, 4)}`; | ||
const lineEnd = `${TimeTools.toReadableDuration(duration, false, 4)}`; | ||
@@ -107,0 +107,0 @@ const line = chalk.bold(prefix + lineStart) + lineEnd; |
/*<!-- DOCS: ## 10 --> | ||
* times | ||
* | ||
* A collection of utils for calculating simple times. | ||
* A collection of Tools for calculating simple times. | ||
* Each unit (e.g. second) has: a type (`second`), a constant (`SECOND`) and a function for getting multiples (`seconds(x: second) => ms`) | ||
@@ -6,0 +6,0 @@ * |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is too big to display
361127
0
25
9843
2315
6
- Removedswiss-docs@0.2.0
- Removedbalanced-match@1.0.2(transitive)
- Removedbrace-expansion@2.0.1(transitive)
- Removedfs.realpath@1.0.0(transitive)
- Removedglob@9.3.5(transitive)
- Removedlru-cache@10.4.3(transitive)
- Removedminimatch@8.0.4(transitive)
- Removedminimist@1.2.8(transitive)
- Removedminipass@4.2.87.1.2(transitive)
- Removedpath-scurry@1.11.1(transitive)
- Removedswiss-docs@0.2.0(transitive)