Security News
RubyGems.org Adds New Maintainer Role
RubyGems.org has added a new "maintainer" role that allows for publishing new versions of gems. This new permission type is aimed at improving security for gem owners and the service overall.
The klona npm package is a JavaScript utility for deep cloning objects. It allows developers to create a deep copy of an object, ensuring that changes to the new object do not affect the original object. This is particularly useful when working with complex data structures or when you need to ensure data immutability.
Deep cloning of objects
This feature allows you to create a deep clone of an object, which means that nested objects are also cloned, and changes to the cloned object do not affect the original object.
{"const klona = require('klona');\nconst original = { a: 1, b: { c: 2 } };\nconst copy = klona(original);\ncopy.b.c = 3;\nconsole.log(original.b.c); // 2\nconsole.log(copy.b.c); // 3"}
Deep cloning of arrays
Similar to object cloning, klona can also deep clone arrays, including nested arrays, ensuring that modifications to the cloned array do not affect the original array.
{"const klona = require('klona');\nconst original = [1, [2, 3], [4, 5]];\nconst copy = klona(original);\ncopy[1][0] = 'changed';\nconsole.log(original[1][0]); // 2\nconsole.log(copy[1][0]); // 'changed'"}
Cloning class instances
klona is capable of cloning instances of classes, allowing you to duplicate an instance and modify the copy without affecting the original instance.
{"const klona = require('klona');\nclass Example {\n constructor(value) {\n this.value = value;\n }\n}\nconst original = new Example(1);\nconst copy = klona(original);\ncopy.value = 2;\nconsole.log(original.value); // 1\nconsole.log(copy.value); // 2"}
Lodash is a popular utility library that includes a `cloneDeep` function for deep cloning objects. It is more feature-rich than klona but also larger in size, which might be a consideration for projects where bundle size is a concern.
deep-copy is another npm package that provides deep cloning functionality. It offers similar capabilities to klona but may have different performance characteristics or API nuances.
rfdc (Really Fast Deep Clone) is a package that focuses on performance for deep cloning objects and arrays. It claims to be faster than other deep cloning methods, which might make it a preferred choice for performance-critical applications.
A tiny (200B) utility to sort route patterns by specificity.
This module is available in three formats:
dist/rsort.mjs
dist/rsort.js
dist/rsort.min.js
$ npm install --save route-sort
import rsort from 'route-sort';
// We have multiple Author-based routes
// Note: These are currently an unsorted mess
const routes = ['/authors', '/authors/*', '/authors/:username/posts', '/authors/:username'];
const output = rsort(routes);
// Now, our routes are sorted correctly!
console.log(routes);
//=> [ '/authors', '/authors/:username', '/authors/:username/posts', '/authors/*' ]
// The original input was mutated, but it's also returned
console.log(routes === output);
//=> true
Returns: Array<String>
Returns the same patterns
you provide, sorted by specificity.
Important: Your original array is mutated!
Type: Array<String>
A list of route pattern strings.
The supported route pattern types are:
/users
/users/:id
/users/:id/books/:title
/users/:id?/books/:title?
/movies/:title.mp4
, /movies/:title.(mp4|mov)
/users/*
While this working definition may not apply completely across the board, route-sort
is meant to sort Express-like routing patterns in a safe manner, such that a serial traversal of the sorted array will always give you the most specific match.
You may use regexparam
to convert the patterns into RegExp
instances, and then use those to test an incoming URL against the patterns. We'll do that in the example below:
import rsort from 'route-sort';
import toRegExp from 'regexparam';
// We have multiple Author-based routes
// Note: These are currently an unsorted mess
const routes = ['/authors', '/authors/*', '/authors/:username/posts', '/authors/:username'];
rsort(routes);
// Now, our routes are sorted correctly!
//=> [ '/authors', '/authors/:username', '/authors/:username/posts', '/authors/*' ]
// Let's make an inefficent DEMO function to:
// 1) loop thru the `routes` array
// 2) convert each pattern to a RegExp (repetitive)
// 3) test the RegExp to see if we had a match
function find(path) {
for (let i=0; i < routes.length; i++) {
let { pattern } = toRegExp(routes[i]);
if (pattern.test(path)) return routes[i];
}
return false; // no match
}
find('/authors'); //=> "/authors"
find('/authors/lukeed'); //=> "/authors/:username"
find('/authors/foo/bar/baz'); //=> "/authors/*"
find('/authors/lukeed/posts'); //=> "/authors/:username/posts"
find('/hello/moto'); //=> false
// Sorting was important here, but otherwise our
// original `routes` list would have matched "/authors/*"
// against every path except `/hello/moto` and `/authors`.
// Cya!
RegExp
instancesMIT © Luke Edwards
FAQs
A tiny (240B to 501B) and fast utility to "deep clone" Objects, Arrays, Dates, RegExps, and more!
The npm package klona receives a total of 0 weekly downloads. As such, klona popularity was classified as not popular.
We found that klona demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
RubyGems.org has added a new "maintainer" role that allows for publishing new versions of gems. This new permission type is aimed at improving security for gem owners and the service overall.
Security News
Node.js will be enforcing stricter semver-major PR policies a month before major releases to enhance stability and ensure reliable release candidates.
Security News
Research
Socket's threat research team has detected five malicious npm packages targeting Roblox developers, deploying malware to steal credentials and personal data.