GitHub - Dhaxor/super-utils-plus
Extracto
Contribute to Dhaxor/super-utils-plus development by creating an account on GitHub.
Resumen
Resumen Principal
SuperUtilsPlus emerge como una alternativa superior a Lodash, diseñada específicamente para las exigencias del desarrollo moderno, ofreciendo un conjunto de utilidades robusto y eficiente. Se distingue por su soporte nativo de TypeScript, donde las definiciones de tipos son una prioridad, garantizando una mayor seguridad y predictibilidad en el código. Desarrollado para JavaScript ES2020+, asegura compatibilidad total con módulos ESM y CommonJS, facilitando su integración en cualquier entorno. La biblioteca ha sido optimizada para el rendimiento, con un enfoque en la velocidad y la eficiencia, y destaca por ser tree-shakable, lo que permite importar únicamente las funciones necesarias, reduciendo significativamente el tamaño del bundle. Además, su arquitectura de cero dependencias elimina el bloat innecesario, y su cobertura exhaustiva de pruebas garantiza un código fiable y predecible tanto en navegadores como en Node.js, elevando la experiencia del desarrollador.
Elementos Clave
- Integración Superior con TypeScript y Modern JavaScript: SuperUtilsPlus se construye con TypeScript de primera clase, lo que significa que las definiciones de tipos están profundamente integradas, no son un añadido. Esto asegura una experiencia de desarrollo totalmente tipada y previene errores comunes en tiempo de compilación. Su desarrollo para ES2020+ y la compatibilidad con ESM y CommonJS lo posicionan como una herramienta de vanguardia para proyectos modernos, aprovechando las últimas características del lenguaje.
- Optimización de Rendimiento y Tamaño del Bundle: La librería está enfocada en el rendimiento, con un código optimizado para la velocidad y la eficiencia. Una característica crucial es su capacidad de ser tree-shakable, lo que permite a los desarrolladores importar solo las funciones específicas que necesitan (ej.,
chunkdesuper-utils/array), resultando en bundles más pequeños y tiempos de carga más rápidos. La política de cero dependencias contribuye aún más a su ligereza, eliminando la carga de librerías externas. - Funcionalidad Extendida y Ejemplos Prácticos Diversos: SuperUtilsPlus va más allá de Lodash en su oferta de funciones de utilidad, abarcando una amplia gama de necesidades. Esto incluye manipulación de arrays (como
compactNil,differenceDeep,groupBy), operaciones de objetos (get,deepClone), manejo de cadenas (camelCase), utilidades de funciones (debouncecon opciones avanzadas), comprobación de tipos (isNumbercon un comportamiento más intuitivo paraNaN,isObjectdiferenciando arrays) y utilidades aleatorias (randomInt,randomString,randomUUID). Los ejemplos proporcionados demuestran la facilidad de uso y la versatilidad de estas funciones. - Robustez del Código y Flexibilidad de Uso: La biblioteca presume de una extensa cobertura de pruebas, garantizando la fiabilidad y consistencia de su código. Además, su diseño permite una gran flexibilidad en la forma de consumir sus funciones, tanto a través de importaciones globales (ej.,
import { chunk } from 'super-utils';) como mediante importaciones específicas de módulos para un tree-shaking óptimo (ej.,import { chunk } from 'super-utils/array';), lo cual es fundamental para proyectos con restricciones de tamaño de paquete.
Análisis e Implicaciones
La adopción de SuperUtilsPlus implica una mejora directa en la calidad y eficiencia del código base, al aprovechar la seguridad de tipos de TypeScript y optimizaciones de rendimiento. Esto se traduce en una mayor productividad del desarrollador y una reducción en los errores en producción, siendo ideal para aplicaciones que requieren alto rendimiento y mantenibilidad a largo plazo.
Contexto Adicional
SuperUtilsPlus se distribuye bajo la Licencia MIT, fomentando su uso y modificación libre en proyectos de cualquier escala, y su capacidad para operar en entornos de navegador y Node.js subraya su amplia aplicabilidad en el ecosistema JavaScript.
Contenido
SuperUtilsPlus
A superior alternative to Lodash with improved performance, TypeScript support, and developer experience.
Features
- Full TypeScript Support: Type definitions are first-class citizens
- Modern JavaScript: Written for ES2020+ with full ESM and CommonJS support
- Tree-Shakable: Only import what you need
- Zero Dependencies: Lightweight and no bloat
- Extensive Testing: High test coverage for reliable code
- Extended Functionality: More utility functions than Lodash
- Performance Focused: Optimized for speed and efficiency
- Browser & Node.js: Works everywhere JavaScript runs
Installation
npm install super-utils-plus # or yarn add super-utils-plus # or pnpm add super-utils-plus
Usage Examples
Array Functions
import { chunk, compact, difference, flatten, flattenDeep, groupBy } from 'super-utils'; // Create chunks of arrays chunk([1, 2, 3, 4, 5], 2); // => [[1, 2], [3, 4], [5]] // Remove falsy values from array compact([0, 1, false, 2, '', 3, null, undefined, NaN]); // => [1, 2, 3] // Remove only null and undefined values compactNil([0, 1, false, 2, '', 3, null, undefined, NaN]); // => [0, 1, false, 2, '', 3, NaN] // Find values not included in other arrays difference([2, 1], [2, 3]); // => [1] // Find values not included using deep equality differenceDeep([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }]); // => [{ 'x': 2 }] // Find values not included using a custom iteratee differenceBy([2.1, 1.2], Math.floor, [2.3, 3.4]); // => [1.2] // Flatten an array one level flatten([1, [2, [3, [4]], 5]]); // => [1, 2, [3, [4]], 5] // Recursively flatten an array flattenDeep([1, [2, [3, [4]], 5]]); // => [1, 2, 3, 4, 5] // Group array elements by a key or function groupBy([6.1, 4.2, 6.3], Math.floor); // => { '4': [4.2], '6': [6.1, 6.3] } groupBy(['one', 'two', 'three'], 'length'); // => { '3': ['one', 'two'], '5': ['three'] }
Object Functions
import { get, deepClone } from 'super-utils'; // Get a value from an object with a path const object = { 'a': [{ 'b': { 'c': 3 } }] }; get(object, 'a[0].b.c'); // => 3 get(object, ['a', '0', 'b', 'c']); // => 3 get(object, 'a.b.c', 'default'); // => 'default' // Create a deep clone of an object const original = { a: 1, b: { c: 2 } }; const clone = deepClone(original); original.b.c = 99; // clone.b.c is still 2
String Functions
import { camelCase } from 'super-utils'; // Convert a string to camel case camelCase('Foo Bar'); // => 'fooBar' camelCase('--foo-bar--'); // => 'fooBar' camelCase('__FOO_BAR__'); // => 'fooBar'
Function Utilities
import { debounce } from 'super-utils'; // Create a debounced function const debouncedSave = debounce(saveFunction, 300, { leading: true, trailing: true }); // Call it multiple times, but it will only execute once after 300ms of inactivity debouncedSave(); debouncedSave(); debouncedSave(); // Cancel the debounced function debouncedSave.cancel(); // Immediately invoke the debounced function debouncedSave.flush();
Type Checking
import { isNil, isUndefined, isNull, isNumber, isString, isBoolean, isFunction, isArray, isObject, isPlainObject, isEmpty, isEqual } from 'super-utils'; // Check types isNumber(123); // => true isNumber('123'); // => false isNumber(NaN); // => false (more intuitive than Lodash) isString('hello'); // => true isObject({}); // => true isObject([]); // => false (unlike Lodash, arrays are not objects) isArray([]); // => true // Check for null or undefined isNil(null); // => true isNil(undefined); // => true isNil(0); // => false // Deep equality comparison isEqual({ a: 1, b: 2 }, { a: 1, b: 2 }); // => true isEqual([1, 2, 3], [1, 2, 3]); // => true
Random Utilities
import { random, randomInt, randomString, randomUUID } from 'super-utils'; // Generate a random number between min and max random(1, 10); // => 4.237... // Generate a random integer between min and max (inclusive) randomInt(1, 10); // => 7 // Generate a random string randomString(10); // => "a1b2c3d4e5" randomString(5, 'ABC'); // => "BACAB" // Generate a random UUID randomUUID(); // => "1b9d6bcd-bbfd-4b2d-9b5d-ab8dfbbd4bed"
Tree-Shaking with Module Imports
For optimal bundle size, import only what you need:
// Import only what you need from specific modules import { chunk, difference } from 'super-utils/array'; import { get } from 'super-utils/object'; import { debounce } from 'super-utils/function'; import { isArray } from 'super-utils/utils';
TypeScript Support
SuperUtilsPlus is written in TypeScript and provides full type definitions:
import { get } from 'super-utils'; interface User { name: string; profile: { age: number; email: string; }; } // Type-safe access with generics const user = get<User>(data, 'users[0]');
License
MIT
Fuente: GitHub