New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

@ckirby/mr-lister

Package Overview
Dependencies
Maintainers
1
Versions
18
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@ckirby/mr-lister - npm Package Compare versions

Comparing version 2.4.0 to 2.5.0

2

package.json
{
"name": "@ckirby/mr-lister",
"version": "2.4.0",
"version": "2.5.0",
"description": "format lists of numbers, letters, or arbitrary items",

@@ -5,0 +5,0 @@ "main": "./src/index",

@@ -34,6 +34,6 @@ const re = require('block-re');

// get a list of the individual items
let items = matchAll(match, item).map(({ index, 0: item }) => ({ index, item }));
let items = matchAll(match, item).map((x) => ({ index: x.index, item: x[0] }));
// get a list of all the integers the range refers to
let list = stringList(range);
let list = stringList(range).slice();
return { index, items, match, label, list };

@@ -40,0 +40,0 @@ }

@@ -31,3 +31,7 @@

// is numeric range
arr = consolidateRanges(Array.from(list).map((a) => parseInt(a, 10)));
arr = consolidateRanges(
Array.from(list).map((a) => parseInt(a, 10)),
'–',
list
);
} else { // test if alphabetic range

@@ -34,0 +38,0 @@ isRange = list.every((x) => /^[a-z]$/i.test(x));

function stringList(str, { sort = true, unique = true } = {}) {
let numbers = [];
let groups = [];
// allow dash, en-dash, or em-dash between ranges

@@ -23,18 +23,36 @@ // allow a dot after the first number in a range

while (num <= endNum) {
numbers.push(num);
num++;
groups.push(Array(endNum - num + 1).fill(num).map((n, i) => n + i));
}
// sort range groups by their start value
let sortedGroups = groups.slice().sort(([ a ], [ b ]) => a - b);
let needsSort = false;
let needsUnique = false;
for (const [ i, range ] of sortedGroups.slice(1).entries()) {
let prev = sortedGroups[i][sortedGroups[i].length - 1];
let curr = range[0];
needsSort = needsSort || curr < prev;
needsUnique = needsUnique || curr <= prev;
if (needsSort && needsUnique) {
break;
}
if (unique) {
}
let numbers = [].concat(...(sort ? sortedGroups : groups));
if (groups.length > 1) {
if (unique && needsUnique) {
needsUnique = false;
numbers = [ ...new Set(numbers) ];
}
if (sort && needsSort) {
needsSort = false;
numbers.sort((a, b) => a - b);
}
}
if (sort) {
numbers.sort((a, b) => a - b);
}
return numbers;
return Object.assign(numbers, { needsSort, needsUnique });
}
module.exports = stringList;

@@ -40,5 +40,12 @@ /*

function consolidateRanges(inputArray, delimiter = '–') {
function consolidateRanges(inputArray, delimiter = '–', { needsSort = true, needsUnique = true } = {}) {
let arr = inputArray.slice();
if (needsUnique) {
arr = unique(arr);
}
if (needsSort) {
arr.sort((a, b) => a - b);
}
return consolidate(
unique(inputArray).sort((a, b) => a - b),
arr,
delimiter,

@@ -45,0 +52,0 @@ (x) => x

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