npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

ameliance-scripts

v0.3.4

Published

scripts

Downloads

300

Readme

Ameliance SkyMusic TypeScript Scripts Collection

A collection of my personal scripts, scripts I found on the Internet, maybe even modified

Installation

npm i ameliance-scripts

Usage

Import like this

import { getRandomRGBColor } from "ameliance-scripts";

const randomRGBColor = getRandomRGBColor();

or

import a from "ameliance-scripts";

const randomRGBColor = getRandomRGBColor();

Functions list

const arr = ["a", "b", "c"];
addId(arr);
// [
//    { a: 'a', id: 0 },
//    { b: 'b', id: 0 },
//    { c: 'c', id: 0 }
// ]

const arr = [{ key: "a" }, { key: "b" }, { key: "c" }];
addId(arr);
// [
//    { key: 'a', id: 0 },
//    { key: 'b', id: 0 },
//    { key: 'c', id: 0 }
// ]

const arr = [{ key: "a" }, { key: "b" }, { key: "c" }];
const ids = [2923, 0292, 8347];
addId(arr, ids);
// [
//    { key: 'a', id: 2923 },
//    { key: 'b', id: 0292 },
//    { key: 'c', id: 8347 }
// ]
const someVar = 'class-b'
const someArr = [null, '', 'icon', '', '', undefined, '']
<Component {...className(['class-a', undefined, someVar, someArr.length > 0 && someArr]);}/>
// <Component className='class-a class-b icon'/>
clearLocalStorageAndReload();
createHTMLElem();
detectValueType("some string");
// 'string'

detectValueType(123);
// 'number'

detectValueType(true);
// 'boolean'

detectValueType(new Date());
// 'date'
errorHandler(error);

export function handleAppError(error: unknown, code?: number): ReturnError {
	return errorHandler({
		error,
		code,
		errorTitle: process.env.APP_NAME,
		wrapperCount: 1,
	});
}

// '{status: 520, message: "Unknown Error", code?: "UNKNOWN_ERROR" }';
const originalObject = { a: 1, b: 2, c: 3 };
const updatedObject = { a: 2, b: 2, d: 5 };
getChangedProperties(obj1, obj2);
// { a:2, c: 3, d: 5 }
getCommonValues(["1", "2", "3"], ["3", "4"], ["3", "5"]);
// ['3']

getCommonValues([1, 2, 3], [3, 4], [3, 5]);
// [3]

getCommonValues(["1", "2", "3", 1], ["3", "4", 1], [1, "3", "5"]);
// ['3', 1]
getCurrentDateInMs();
// 1675366990061
getDifferentValues(["1", "2", "3"], ["3", "4"], ["3", "5"]);
// ['1', '2']

getDifferentValues([1, 2, 3], [3, 4], [3, 5]);
// [1, 2]

getDifferentValues(["1", "2", "3", 1, 3], ["3", "4", 1], [1, "3", "5"]);
// ['1', '2', 3]
const arr = [
	{ a: 1, b: 2 },
	{ a: 3, b: 4 },
	{ a: 3, b: 2 },
];
getElemByKey(arr, a, 3);
// { a: 3, b: 4 }
getFormattedDate("2023-06-01");
// June 1, 2023

getFormattedDate("2023-06-01", "short");
// 6/1/23

getFormattedDate("2023-06-01", "full", "uk-UA");
// четвер, 1 червня 2023 р.

getFormattedDate("2023-06-01", "full", "ja-JP");
// 2023年6月1日木曜日
const arr = [
	{ a: 1, b: 2 },
	{ a: 3, b: 4 },
	{ a: 3, b: 2 },
];
getIndexByKey(arr, a, 3);
// 2
getIndexesOfNonEmptyElements(["1", "", "3"]);
// [0, 2]
const code = 999;
getMatchSoft(code, {
	403: "Forbidden ",
	500: "Server Error",
	_: "Unknown error",
});
// "Unknown error"

const code = 999;
getMatchSoft(code, {
	403: "Forbidden ",
	500: "Server Error",
	_: "Unknown error",
});
// null
const code = 403;
getMatch(code, {
	403: "Forbidden ",
	500: "Server Error",
	_: "Unknown error",
});
// Forbidden
getObjKeyByValue();
getRandomHEXColor();
// '#FFAA00'
getRandomNumber(0, 7);
// 5
getRandomRGBColor();
// [255, 10, 8]
getScrollDirection();
// 'UP'
// 'DOWN'
getToday();
// 2024-12-09
getValueType("some string");
// 'string'

getValueType(123);
// 'number'
groupBy(["aa", "aq", "ab", "bx", "ba"]);
// [
//   [a, ['aa', 'aq', 'ab]],
//   [b, ['bx', ba]]
// ]

groupBy([
	{ key1: "aa", key2: 1 },
	{ key1: "aq", key2: 3 },
	{ key1: "ab", key2: "2" },
	{ key1: "bx", key2: "5" },
	{ key1: "ba", key2: 4 },
]),
	"key1";
//[
//   [a, [
//      {key1:'aa', key2: 1 },
//      {key1:'ab', key2: '2' },
//      {key1:'aq', key2: 3 },
//   ]],
//   [b, [
//      {key1:'ba', key2: 4 }
//      {key1:'bx', key2: '5' },
//   ]]
//]
hideEmail("[email protected]");
// a***************[email protected]
isArraysEqual([1, 2, 3], [1, 2, 3]);
// true

isArraysEqual([1, 2, 3], [1, 2]);
// false
isClient(); // on client
// true

isClient(); // on server
// false
isObjectEmpty({ a: "a" });
// false
isObjectHasValue({ a: "world", b: "hello" }, "react");
// false

isObjectHasValue({ a: "world", b: "hello" }, "world");
// true
isObjectValid("a");
// false
isObjectValid(null);
// false
isObjectValid({});
// false
isObjectValid({ a: "a" });
// true
isObject({ a: "a" });
// true
console.log(isValidUrl("https://example.com"));
// true - a valid URL with a protocol

console.log(isValidUrl("http://example.com"));
// true - a valid URL with another protocol

console.log(isValidUrl("ftp://example.com"));
// true - a valid URL with the FTP protocol

console.log(isValidUrl("www.example.com"));
// false - missing protocol

console.log(isValidUrl("example.com"));
// false - missing protocol

console.log(isValidUrl(""));
// false - empty string

console.log(isValidUrl("random_string"));
// false - not a valid URL format

console.log(isValidUrl("https://"));
// false - protocol exists, but domain is missing

console.log(isValidUrl("https://example.com/path?query=123"));
// true - valid URL with a path and query parameters

console.log(isValidUrl("https://example.com:8080"));
// true - valid URL with a port

console.log(isValidUrl("https://invalid_domain"));
// true - technically valid format, but the domain looks suspicious
joinWith(" ", ["a", "b", "c"]);
// 'a b c'

joinWith(", ", ["a", "b", "c", null, undefined]);
// 'a, b, c'

const someVar = "class-b";
const someArr = [null, "", "icon", "", "", undefined, ""];
joinWith(",", ["class-a", undefined, someVar, someVar, someArr.length > 0 && someArr]);
// 'class-a, class-b, icon'
const someVar = "class-b";
const someArr = [null, "", "icon", "", "", undefined, ""];
const someObj = { "active-class-name": false, "another-class": a === b };
join([
	"class-a",
	undefined,
	someVar,
	someVar,
	someArr.length > 0 && someArr,
	someObj,
	path === curPath && "active",
]);
// 'class-a class-b icon another-class'
const someVar = "class-b";
const someArr = [null, "", "icon", "", "", undefined, ""];
const someObj = { "active-class-name": false, "another-class": a === b };
join([
	"class-a",
	undefined,
	someVar,
	someVar,
	someArr.length > 0 && someArr,
	someObj,
	path === curPath && "active",
]);
// 'class-a class-b icon another-class'
kebabToCamelCase("some-class-name");
// someClassName
log.warn(
	errorTitle,
	errorSubtitle,
	new Error().stack?.split("\n").splice(errorCount, errorDeep).join("\n"),
);

log.error(
	errorTitle,
	[errorSubtitle, "background-color: red;"],
	[`\n${new Error().stack?.split("\n").splice(errorCount, errorDeep).join("\n")}`, ""],
);
parseCurrentDateFromMs(1675366990061);
// Thu Feb 02 2023 21:43:10 GMT+0200
removeEmptyValues(["", "", "a", "", "b", "", ""]);
// ['a', 'b']

removeEmptyValues(
	[
		{ key1: "", key2: "someKey" },
		{ key1: "", key2: "someKey" },
		{ key1: "a", key2: "someKey" },
		{ key1: "", key2: "someKey" },
		{ key1: "b", key2: "someKey" },
		{ key1: "", key2: "someKey" },
		{ key1: "", key2: "someKey" },
	],
	"key1",
);
// [
//    {key1: 'a', key2: 'someKey'},
//    {key1: 'b', key2: 'someKey'}
// ]
setIntervalCounts({ () => console.log('Hello'), 1000, 3 })
// Hello // 1st time after delay 1s
// Hello // 2nd time after delay 2s
// Hello // 3rd time after delay 3s
shuffleArray(["a", "b", "c"]);
// ['b', 'c', 'a']
sortArrayLocalCompare(["Яблуко", "ćma", "BBC", "10", "fast"]);
// ['10', 'Яблуко', 'BBC', 'ćma', 'fast']

sortArrayLocalCompare(
	[
		{ key1: "Яблуко", key2: "someKey" },
		{ key1: "ćma", key2: "someKey" },
		{ key1: "BBC", key2: "someKey" },
		{ key1: "10", key2: "someKey" },
		{ key1: "fast", key2: "someKey" },
	],
	"key1",
);
// [
//    {key1: '10', key2: 'someKey'},
//    {key1: 'Яблуко', key2: 'someKey'},
//    {key1: 'BBC', key2: 'someKey'},
//    {key1: 'ćma', key2: 'someKey'},
//    {key1: 'fast', key2: 'someKey'},
// ]
sortArrayOfObj();
stringCut("long string", 5);
// 'long...'

stringCut("long string", 8, "=)");
// 'long str=)'
toTimeFormat(60); // 00:60
trimEndEmptyValues(["", "", "a", "", "b", "", ""]);
// ['', '', 'a', '', 'b']

trimEndEmptyValues(
	[
		{ key1: "", key2: "someKey" },
		{ key1: "", key2: "someKey" },
		{ key1: "a", key2: "someKey" },
		{ key1: "", key2: "someKey" },
		{ key1: "b", key2: "someKey" },
		{ key1: "", key2: "someKey" },
		{ key1: "", key2: "someKey" },
	],
	"key1",
);
// [
//    {key1: '', key2: 'someKey'},
//    {key1: '', key2: 'someKey'},
//    {key1: 'a', key2: 'someKey'},
//    {key1: '', key2: 'someKey'},
//    {key1: 'b', key2: 'someKey'}
// ]
trimStartEmptyValues(["", "", "a", "", "b", "", ""]);
// ['a', '', 'b', '', '']

trimStartEmptyValues(
	[
		{ key1: "a", key2: "someKey" },
		{ key1: "", key2: "someKey" },
		{ key1: "b", key2: "someKey" },
		{ key1: "", key2: "someKey" },
		{ key1: "", key2: "someKey" },
	],
	"key1",
);
// [
//    {key1: 'a', key2: 'someKey'},
//    {key1: '', key2: 'someKey'},
//    {key1: 'b', key2: 'someKey'},
//    {key1: '', key2: 'someKey'},
//    {key1: '', key2: 'someKey'}
// ]
const isActiveClass = useActiveClass("some-class another-class");

function SomeComponent() {
	return <Link className={isActiveClass(link.path === path)} />;
}
writeTextToClipboard("some text string");

react

react.splitTextByBr('Hello!\nYour code is awesome!');

Hello!
<br />
Your code is awesome!

react.splitTextByBr("Some\nfew\nlines");
// <>
// 	some
// 	<br/>
// 	few
// 	<br/>
// 	lines
// 	<br/>
// </>

next

return next.api.generateResponseJsonError({
	status: 401,
	statusText: "Session is invalid",
	code: "SESSION_IS_INVALID",
});
return next.api.generateResponseJsonSuccess({ userId: 1234567890 });

lab

lab.getLocalStorage(APP_NAME, "user", "displayName", "Ameliance SkyMusic");
lab.setLocalStorage(APP_NAME, "user", "displayName", "Ameliance SkyMusic");

legacy

legacy.join();
legacy.returnError2();
legacy.returnError1();

History

0.3.4 [2024_11_18]:
   +: add detectValueType
   +: add getChangedProperties
   +: add getCurrentTimeWithOffset
   +: add getMatchSoft
   +: add getValueType
   +: add isArraysEqual
   +: add іsValidUrl
   +: add kebabToCamelCase
   +: add trimStartEmptyValues
   *: update getMatch
   *: update sortArrayOfObj

0.3.3 [2024_10_04]:
   +: add log
   #: add styles error-handler console.log

0.3.2 [2024_09_11]:
   #: fix publish issues

0.3.1 [2024_09_11]:
   *: update code style

0.3.0 [2024_09_10]:
   +: add generate-response-json-error
   +: add generate-response-json-success
   ^: update error-handler
   *: rename return-error to error-handler
   *: update function file names to kebab-case name convention
   *: reorganize structure
   *: migrate to use tsup bundler
   #: fixes during migration to tsup

0.2.4 [2023_12_01]:
   *: update returnError
   +: add hideEmail
   +: add isClient
   +: add getElemByKey
   +: add getIndexByKey
   +: add getMatch
   +: add splitTextByBr
   +: add getObjKeyByValue

0.2.3 [2023_06_01]:
   *: extend join function
   +: add getFormattedDate
   +: add isObjectHasValue
   +: add isObjectValid
   +: add useActiveClass


0.2.2 [2023_05_07]:
   ^: add deep fourth param to returnError
   #: fix work with numbers groupBy
   #: fix work with numbers removeEmptyValues
   #: fix work with numbers sortArrayLocalCompare

0.2.1 [2023_05_02]:
   *: update naming

0.2.0 [2023_05_02]:
   ^: rename and move library to https://www.npmjs.com/package/ameliance-scripts

0.1.104 [2023_05_02]:
   +: add writeTextToClipboard
   +: add toTimeFormat
   +: add returnError
   +: add joinWith
   +: add getToday
   +: add clearLocalStorageAndReload
   +: add setLocalStorage to _LAB
   +: add getLocalStorage to _LAB
   *: update types anc add some improvements sortBy
   *: update types anc add some improvements removeEmptyValues
   *: update types anc add some improvements sortArrayLocalCompare

0.1.103 [2023_03_06]:
   +: add addId

0.1.102 [2023_02_02]:
   *: rename joinClasses to join
   #: fix join
   +: add className
   +: add setIntervalCounts
   +: add getCurrentDateInMs
   +: add parseCurrentDateFromMs

0.1.101 [2023_01_02]:
   #: fixes

0.1.1 [2023_01_02]:
   +: add isObject
   +: add getCommonValues
   +: add removeEmptyValues
   +: add getDifferentValues
   +: add trimEndEmptyValues
   +: add trimStartEmptyValues
   +: add getIndexesOfNonEmptyElements
   ^: add support sorting objects in groupBy
   ^: add support sorting objects in sortArrayLocalCompare
   *: rename combineListToSortedArray to groupBy
   *: rename sortStringArrayLocalCompare to sortArrayLocalCompare
   *: refactor code

0.0.107 [2022_12_22]:
   ^: update readme file

0.0.106 [2022_12_22]:
   ^: update readme file

0.0.105 [2022_12_22]:
   #: fix export
   ^: update readme file

0.0.104 [2022_12_22]:
   +: add sortStringArrayLocalCompare
   #: fix stringCut
   ^: clean code

0.0.103 [2022_12_22]:
   +: add combineListToSortedArray
   #: fix joinClasses

0.0.102 [2022_12_17]:
   ^: update readme file

0.0.101 [2022_12_17]:
   ^: update readme file

0.0.100 [2022_12_17]:
   +: add createHTMLElem
   +: add getRandomHEXColor
   +: add getRandomNumber
   +: add getRandomRGBColor
   +: add getScrollDirection
   +: add isObjectEmpty
   +: add joinClasses
   +: add shuffleArray
   +: add sortArrayOfObj
   +: add stringCut