Skip to content

unosquare/uno-js

Repository files navigation

npm version

uno-js

Unosquare Typescript/JavaScript Library, zero dependencies.

String, array, and Date manipulation, easy-to-use fetch controller, and more, written in Typescript.

Installation (npm)

To install uno-js through npm, you only need to run the following command:

    npm install uno-js --save

Check the documentation of this library at https://unosquare.github.io/uno/uno-js.

🚨 Deprecated Functions - Native API Replacements

Many functions in this library can be replaced by modern browser native APIs. Below are the recommended native alternatives:

✅ Fully Replaceable

abortController.ts

Status: ❌ DEPRECATED

// ❌ uno-js
import { getAbortController } from 'uno-js';
const controller = getAbortController();

// ✅ Native API (available since 2017)
const controller = new AbortController();

removeDuplicated.ts

Status: ❌ DEPRECATED

// ❌ uno-js
import { removeDuplicated } from 'uno-js';
const unique = removeDuplicated(array, 'id');

// ✅ Native API with filtering
const unique = array.filter((item, index, arr) => 
  arr.findIndex(x => x.id === item.id) === index
);

// ✅ Or using Set for primitives
const unique = [...new Set(array)];

toTitleCase.ts

Status: ❌ DEPRECATED

// ❌ uno-js
import { toTitleCase } from 'uno-js';
const title = toTitleCase('hello world');

// ✅ Native CSS
.title-case { text-transform: capitalize; }

// ✅ Or with simple regex
const title = text.toLowerCase().replace(/\b\w/g, l => l.toUpperCase());

withEnter.ts (Keyboard events)

Status: ❌ DEPRECATED

// ❌ uno-js
import { onEnterKey } from 'uno-js';
element.addEventListener('keydown', onEnterKey(callback));

// ✅ Modern Native API
element.addEventListener('keydown', (e) => {
  if (e.key === 'Enter') callback(); // More semantic than keyCode
});

SimpleObservable.ts

Status: ❌ DEPRECATED

// ❌ uno-js
import { SimpleObservable } from 'uno-js';
const obs = new SimpleObservable();

// ✅ Native API - EventTarget
class SimpleObservable extends EventTarget {
  inform(data) { this.dispatchEvent(new CustomEvent('change', { detail: data })); }
  subscribe(callback) { 
    this.addEventListener('change', callback);
    return () => this.removeEventListener('change', callback);
  }
}

⚠️ Partially Replaceable

formatter.ts (Number and date formatting)

Status: ⚠️ PARTIALLY DEPRECATED

// ❌ uno-js money formatting
import { toMoney } from 'uno-js';
const formatted = toMoney(1234.56);

// ✅ Native API - Intl.NumberFormat
const formatted = new Intl.NumberFormat('en-US', {
  style: 'currency',
  currency: 'USD'
}).format(1234.56);

// ❌ uno-js percentage
import { toPercentage } from 'uno-js';

// ✅ Native API
const percentage = new Intl.NumberFormat('en-US', {
  style: 'percent',
  minimumFractionDigits: 2
}).format(0.1234);

// ❌ uno-js date formatting
// ✅ Native API - Intl.DateTimeFormat
const dateFormatted = new Intl.DateTimeFormat('en-US').format(new Date());

dateUtils.ts (Date manipulation)

Status: ⚠️ PARTIALLY DEPRECATED

// ❌ uno-js
import { compareDates } from 'uno-js';

// ✅ Native API - Date comparison
const compareResult = new Date(a) - new Date(b); // Returns difference in ms
const isAfter = new Date(a) > new Date(b);

// ❌ uno-js toLocalTime
// ✅ Native API - Temporal API (upcoming) or Date methods
const localDate = new Date().toLocaleString();

groupBy.ts

Status: ⚠️ PARTIALLY DEPRECATED

// ❌ uno-js
import { groupBy } from 'uno-js';
const grouped = groupBy(data, 'category');

// ✅ Native API - Object.groupBy (Stage 3, Chrome 117+)
const grouped = Object.groupBy(data, item => item.category);

// ✅ Alternative with Map.groupBy
const grouped = Map.groupBy(data, item => item.category);

// ✅ Fallback with reduce
const grouped = data.reduce((acc, item) => {
  (acc[item.category] ??= []).push(item);
  return acc;
}, {});

🔧 Functions That Retain Value

debounce.ts

Status: ✅ KEEP - No native API equivalent, but it's a standard implementation.

accurateSum.ts

Status: ✅ KEEP - Solves JavaScript-specific floating-point precision issues.

createCsv.ts

Status: ✅ KEEP - Business-specific functionality with no native equivalent.

dateRange.ts, weekUtils.ts

Status: ✅ KEEP - Complex business logic. Temporal API (future) might partially replace.

money.ts

Status: ✅ KEEP - Business-specific type, though formatting can use Intl.NumberFormat.

stringTemplate.ts

Status: ⚠️ EVALUATE - Native template literals (${variable}) cover most cases.

truncate.ts, delta.ts

Status: ✅ KEEP - Specific mathematical logic with no direct equivalent.

validateObject.ts, validateNotNull.ts

Status: ✅ KEEP - Specific validation utilities.

📋 Recommended Migration Plan

  1. Immediate: Replace abortController, removeDuplicated, toTitleCase, withEnter, SimpleObservable
  2. Short term: Migrate formatting to Intl APIs where possible
  3. Medium term: Evaluate groupBy when Object.groupBy has better support
  4. Long term: Monitor Temporal API to replace date utilities

🌐 Native API Browser Compatibility

  • AbortController: Chrome 66+, Firefox 57+, Safari 11.1+
  • Intl.NumberFormat: Chrome 24+, Firefox 29+, Safari 10+
  • Object.groupBy: Chrome 117+, Firefox 119+ (Stage 3)
  • EventTarget constructor: Chrome 64+, Firefox 59+, Safari 14+

About

Unosquare Typescript/JavaScript Library

Topics

Resources

License

Code of conduct

Stars

Watchers

Forks

Packages

No packages published

Contributors 13