@builtwithjavascript/formatters
Advanced tools
@@ -42,4 +42,4 @@ const defaultDateStyle = "short"; | ||
| const items = []; | ||
| for (let i = 1; i < 8; i++) { | ||
| const date = new Date(1970, 1, i); | ||
| for (let i = 0; i < 7; i++) { | ||
| const date = new Date(1970, 2, i + 1); | ||
| const name = date.toLocaleString(_lcid, { weekday: format }); | ||
@@ -56,3 +56,3 @@ items.push({ id: i, name }); | ||
| for (let i = 0; i < 12; i++) { | ||
| const date = new Date(1970, i, 1); | ||
| const date = new Date(1970, i + 1, 0); | ||
| const name = date.toLocaleString(_lcid, { month: format }); | ||
@@ -67,3 +67,3 @@ items.push({ id: i, name }); | ||
| }; | ||
| const defualtcurrencyDisplay = "symbol"; | ||
| const defaultcurrencyDisplay = "symbol"; | ||
| const getNumberFormattersCacheKey = (params) => { | ||
@@ -80,3 +80,3 @@ let { | ||
| currency = (currency || "").trim(); | ||
| currencyDisplay = (currencyDisplay || defualtcurrencyDisplay).trim(); | ||
| currencyDisplay = (currencyDisplay || defaultcurrencyDisplay).trim(); | ||
| let cacheKey = `${lcid}-${style}`; | ||
@@ -105,3 +105,3 @@ if (currency.length > 0) { | ||
| currency = (currency || "").trim(); | ||
| currencyDisplay = (currencyDisplay || defualtcurrencyDisplay).trim(); | ||
| currencyDisplay = (currencyDisplay || defaultcurrencyDisplay).trim(); | ||
| let cacheKey = getNumberFormattersCacheKey({ | ||
@@ -108,0 +108,0 @@ lcid: _lcid, |
@@ -1,1 +0,1 @@ | ||
| (function(a,l){typeof exports=="object"&&typeof module!="undefined"?l(exports):typeof define=="function"&&define.amd?define(["exports"],l):(a=typeof globalThis!="undefined"?globalThis:a||self,l(a.formatters={}))})(this,function(a){"use strict";const l="short",y=u=>{let{lcid:s,dateStyle:c,timeStyle:i}=u;c=(c||l).trim().toLowerCase(),i=(i||"").trim().toLowerCase();let n=`${s}-${c}`;return i.length&&(n=`${n}-${i}`),n.trim().toLowerCase()},p=u=>{const s=u,c=new Map,i=new Map,n=new Map;return{dateTime:(t,r)=>{t=(t||l).trim().toLowerCase(),r=(r||"").trim().toLowerCase();const e=y({lcid:s,dateStyle:t,timeStyle:r});if(!c.has(e)){let o={};t.length&&(o.dateStyle=t),r.length&&(o.timeStyle=r);const m=new Intl.DateTimeFormat(s,o);c.set(e,m)}return c.get(e)},dayNames:(t="long")=>{if(!i.has(t)){const r=[];for(let e=1;e<8;e++){const m=new Date(1970,1,e).toLocaleString(s,{weekday:t});r.push({id:e,name:m})}i.set(t,r)}return i.get(t)},monthNames:(t="long")=>{if(!n.has(t)){const r=[];for(let e=0;e<12;e++){const m=new Date(1970,e,1).toLocaleString(s,{month:t});r.push({id:e,name:m})}n.set(t,r)}return n.get(t)}}},g="symbol",f=u=>{let{lcid:s,style:c,currency:i,currencyDisplay:n,minimumFractionDigits:t,maximumFractionDigits:r}=u;c=(c||"decimal").trim().toLowerCase(),i=(i||"").trim(),n=(n||g).trim();let e=`${s}-${c}`;return i.length>0&&(e=`${e}-${i}`,n.length>0&&(e=`${e}-${n}`)),e=`${e}-${t}-${r}`.trim().toLowerCase(),e},D=u=>{const s=u,c=new Map,i=n=>{let{style:t,currency:r,currencyDisplay:e,minimumFractionDigits:o,maximumFractionDigits:m}=n;t=(t||"decimal").trim().toLowerCase(),r=(r||"").trim(),e=(e||g).trim();let h=f({lcid:s,style:t,currency:r,currencyDisplay:e,minimumFractionDigits:o,maximumFractionDigits:m});if(!c.has(h)){let d={style:t,minimumFractionDigits:o,maximumFractionDigits:m};r.length>0&&(d.currency=r,e.length>0&&(d.currencyDisplay=e));const w=new Intl.NumberFormat(s,d);c.set(h,w)}return c.get(h)};return{whole:()=>i({style:"decimal",minimumFractionDigits:0,maximumFractionDigits:0}),decimal:(n=0,t=2)=>i({style:"decimal",minimumFractionDigits:n,maximumFractionDigits:t}),currency:(n,t,r=0,e=2)=>i({style:"currency",currency:n,currencyDisplay:t,minimumFractionDigits:r,maximumFractionDigits:e}),percent:(n=0,t=2)=>i({style:"percent",minimumFractionDigits:n,maximumFractionDigits:t}),unescapeResult(n){return(n||"").replace(/\xa0/g," ").replace(/\u202f/g," ")}}};a.getDateTimeFormattersCacheKey=y,a.getNumberFormattersCacheKey=f,a.useDateTimeFormatters=p,a.useNumberFormatters=D,Object.defineProperties(a,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})}); | ||
| (function(a,l){typeof exports=="object"&&typeof module!="undefined"?l(exports):typeof define=="function"&&define.amd?define(["exports"],l):(a=typeof globalThis!="undefined"?globalThis:a||self,l(a.formatters={}))})(this,function(a){"use strict";const l="short",y=u=>{let{lcid:s,dateStyle:c,timeStyle:i}=u;c=(c||l).trim().toLowerCase(),i=(i||"").trim().toLowerCase();let n=`${s}-${c}`;return i.length&&(n=`${n}-${i}`),n.trim().toLowerCase()},p=u=>{const s=u,c=new Map,i=new Map,n=new Map;return{dateTime:(t,r)=>{t=(t||l).trim().toLowerCase(),r=(r||"").trim().toLowerCase();const e=y({lcid:s,dateStyle:t,timeStyle:r});if(!c.has(e)){let o={};t.length&&(o.dateStyle=t),r.length&&(o.timeStyle=r);const m=new Intl.DateTimeFormat(s,o);c.set(e,m)}return c.get(e)},dayNames:(t="long")=>{if(!i.has(t)){const r=[];for(let e=0;e<7;e++){const m=new Date(1970,2,e+1).toLocaleString(s,{weekday:t});r.push({id:e,name:m})}i.set(t,r)}return i.get(t)},monthNames:(t="long")=>{if(!n.has(t)){const r=[];for(let e=0;e<12;e++){const m=new Date(1970,e+1,0).toLocaleString(s,{month:t});r.push({id:e,name:m})}n.set(t,r)}return n.get(t)}}},g="symbol",f=u=>{let{lcid:s,style:c,currency:i,currencyDisplay:n,minimumFractionDigits:t,maximumFractionDigits:r}=u;c=(c||"decimal").trim().toLowerCase(),i=(i||"").trim(),n=(n||g).trim();let e=`${s}-${c}`;return i.length>0&&(e=`${e}-${i}`,n.length>0&&(e=`${e}-${n}`)),e=`${e}-${t}-${r}`.trim().toLowerCase(),e},D=u=>{const s=u,c=new Map,i=n=>{let{style:t,currency:r,currencyDisplay:e,minimumFractionDigits:o,maximumFractionDigits:m}=n;t=(t||"decimal").trim().toLowerCase(),r=(r||"").trim(),e=(e||g).trim();let h=f({lcid:s,style:t,currency:r,currencyDisplay:e,minimumFractionDigits:o,maximumFractionDigits:m});if(!c.has(h)){let d={style:t,minimumFractionDigits:o,maximumFractionDigits:m};r.length>0&&(d.currency=r,e.length>0&&(d.currencyDisplay=e));const w=new Intl.NumberFormat(s,d);c.set(h,w)}return c.get(h)};return{whole:()=>i({style:"decimal",minimumFractionDigits:0,maximumFractionDigits:0}),decimal:(n=0,t=2)=>i({style:"decimal",minimumFractionDigits:n,maximumFractionDigits:t}),currency:(n,t,r=0,e=2)=>i({style:"currency",currency:n,currencyDisplay:t,minimumFractionDigits:r,maximumFractionDigits:e}),percent:(n=0,t=2)=>i({style:"percent",minimumFractionDigits:n,maximumFractionDigits:t}),unescapeResult(n){return(n||"").replace(/\xa0/g," ").replace(/\u202f/g," ")}}};a.getDateTimeFormattersCacheKey=y,a.getNumberFormattersCacheKey=f,a.useDateTimeFormatters=p,a.useNumberFormatters=D,Object.defineProperties(a,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})}); |
+1
-1
| { | ||
| "name": "@builtwithjavascript/formatters", | ||
| "version": "0.9.7", | ||
| "version": "1.0.1", | ||
| "description": "DateTime and Number formatters based on Intl API", | ||
@@ -5,0 +5,0 @@ "author": "Damiano Fusco", |
+138
-2
@@ -1,2 +0,138 @@ | ||
| # formatters | ||
| DateTime and Number formatters based on Intl API | ||
| # @builtwithjavascript/formatters | ||
| DateTime and Number formatters based on Intl API[^ref-1] | ||
| [](https://badge.fury.io/js/@builtwithjavascript%2Fformatters) | ||
| ## Description | ||
| Contains hooks: | ||
| - useDateTimeFormatters | ||
| - useNumberFormatters | ||
| These are wrappers around Intl API NumberFormat and DateTimeFormat that allow to access the formatting function in a more concise way and avoid code cluttering. | ||
| ## How to use | ||
| ### install: | ||
| ``` | ||
| npm isntall --save @builtwithjavascript/formatters | ||
| ``` | ||
| ### Consume Number Formatters: | ||
| Note: these are just some of the possible parameter combinations: | ||
| ```typescript | ||
| import { useNumberFormatters } from '@builtwithjavascript/formatters' | ||
| const lcid = 'en-US' // or return it from your i18n current locale | ||
| const numberFormatters = useNumberFormatters(lcid) | ||
| // whole number | ||
| const wholeNumberFormatter = numberFormatters.whole() | ||
| wholeNumberFormatter().format(123456789.321654) // outputs: 12,345,654,322 | ||
| // decimal number (default options) | ||
| const decimalNumberFormatter = numberFormatters.decimal() | ||
| decimalNumberFormatter().format(123456789.321654) // outputs: 12,345,654,321.89 | ||
| // decimal number (with min/max fraction digits parameters) | ||
| const decimalNumberFormatter = numberFormatters.decimal(3, 5) // params are (minimumFractionDigits, maximumFractionDigits) | ||
| decimalNumberFormatter().format(123456789.321654) // outputs 12,345,654,321.89235 | ||
| // percent number (default options) | ||
| const percentNumberFormatter = numberFormatters.percent() | ||
| percentNumberFormatter().format(4.892345) // outputs: 489.23% | ||
| // decimal number (with min/max fraction digits parameters) | ||
| const percentNumberFormatter = numberFormatters.percent(3, 5) // params are (minimumFractionDigits, maximumFractionDigits) | ||
| percentNumberFormatter().format(4.892345) // outputs 489.2345% | ||
| // currency ('USD' with default options) | ||
| const currencyNumberFormatter = numberFormatters.currency('USD') | ||
| currencyNumberFormatter().format(12345654321.892345) // outputs: $12,345,654,321.89 | ||
| // currency ('EUR' with default options) | ||
| const currencyNumberFormatter = numberFormatters.currency('EUR') | ||
| currencyNumberFormatter().format(12345654321.892345) // outputs: €12,345,654,321.89 | ||
| // currency ('USD' with params currencyDisplay[^ref-2], minimumFractionDigits, maximumFractionDigits) | ||
| const currencyNumberFormatter = numberFormatters.currency('USD', 'code', 1, 3) | ||
| currencyNumberFormatter().format(12345654321.892345) // outputs: USD12,345,654,321.892 | ||
| ``` | ||
| ### Consume DateTime Formatters: | ||
| Note: these are just some of the possible parameter combinations: | ||
| ```typescript | ||
| import { useDatetimeFormatters } from '@builtwithjavascript/formatters' | ||
| const lcid = 'en-US' // or return it from your i18n current locale | ||
| const datetimeFormatters = useDatetimeFormatters(lcid) | ||
| // datetime (default options) | ||
| datetimeFormatters.dateTime().format(inputValue) // outputs: "3/24/70" | ||
| // datetime (with dateStyle param) | ||
| datetimeFormatters.dateTime('long').format(inputValue) // outputs: "March 24, 1970" | ||
| // datetime (with dateStyle and timeStyle param) | ||
| datetimeFormatters.dateTime('short', 'short').format(inputValue) // outputs: "3/25/70, 12:11 AM" | ||
| ``` | ||
| ### Consume DateTime Utils: | ||
| ```typescript | ||
| import { useDatetimeFormatters } from '@builtwithjavascript/formatters' | ||
| const lcid = 'en-US' // or return it from your i18n current locale | ||
| const { dayNames, monthNames } = useDatetimeFormatters(lcid) | ||
| // dayNames | ||
| dayNames().map((o) => o.name) | ||
| // outputs: [ "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" ] | ||
| // monthNames | ||
| monthNames().map((o) => o.name) | ||
| // outputs: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] | ||
| // dayNames | ||
| dayNames() | ||
| /* outputs: | ||
| [ | ||
| { id: 0, name: 'Sunday' }, | ||
| { id: 1, name: 'Monday' }, | ||
| { id: 2, name: 'Tuesday' }, | ||
| { id: 3, name: 'Wednesday' }, | ||
| { id: 4, name: 'Thursday' }, | ||
| { id: 5, name: 'Friday' }, | ||
| { id: 6, name: 'Saturday' } | ||
| ] | ||
| */ | ||
| // monthNames | ||
| monthNames() | ||
| /* outputs: | ||
| [ | ||
| { id: 0, name: 'January' }, | ||
| { id: 1, name: 'February' }, | ||
| { id: 2, name: 'March' }, | ||
| { id: 3, name: 'April' }, | ||
| { id: 4, name: 'May' }, | ||
| { id: 5, name: 'June' }, | ||
| { id: 6, name: 'July' }, | ||
| { id: 7, name: 'August' }, | ||
| { id: 8, name: 'September' }, | ||
| { id: 9, name: 'October' }, | ||
| { id: 10, name: 'November' }, | ||
| { id: 11, name: 'December' } | ||
| ] | ||
| */ | ||
| ``` | ||
| #### References | ||
| [^ref-1] Intl API: [https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl) | ||
| [^ref-2] for 'currencyDisplay' the options are 'symbol', 'narrowSymbol', 'code', 'name' - Reference: [https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat) |
No v1
QualityPackage is not semver >=1. This means it is not stable and does not support ^ ranges.
Found 1 instance in 1 package
16741
41.18%2
-33.33%139
4533.33%