nhb-toolbox
Version:
A versatile collection of smart, efficient, and reusable utility functions, classes and types for everyday development needs.
103 lines (102 loc) • 5.03 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.banglaPlugin = void 0;
const convert_1 = require("../../number/convert");
const constants_1 = require("../constants");
const helpers_1 = require("../helpers");
const banglaPlugin = ($Chronos) => {
const { internalDate: $Date } = $Chronos[constants_1.INTERNALS];
const DEFAULT_CONFIG = new Map();
function $bnDaysMonthIdx(date, variant) {
return (0, helpers_1._bnDaysMonthIdx)(date, variant ?? DEFAULT_CONFIG.get('config')?.variant);
}
$Chronos.prototype.configureBanglaCalendar = (configs) => {
DEFAULT_CONFIG.set('config', configs);
};
$Chronos.prototype.getBanglaYear = function (locale = 'bn') {
const bnYear = (0, helpers_1._getBnYear)($Date(this));
return (locale === 'en' ? bnYear : (0, convert_1.digitToBangla)(bnYear));
};
$Chronos.prototype.getBanglaMonth = function (options) {
const { locale = 'bn', variant } = options ?? {};
const isoMonth = $bnDaysMonthIdx($Date(this), variant).monthIdx + 1;
return (locale === 'en' ? isoMonth : (0, convert_1.digitToBangla)(isoMonth));
};
$Chronos.prototype.getBanglaDay = function (options) {
const { locale = 'bn', variant } = options ?? {};
const date = $bnDaysMonthIdx($Date(this), variant).days + 1;
return (locale === 'en' ? date : (0, convert_1.digitToBangla)(date));
};
$Chronos.prototype.getBanglaDayName = function (locale = 'bn') {
const DAY = constants_1.BN_DAYS[this.weekDay];
return (locale === 'en' ? DAY.en : DAY.bn);
};
$Chronos.prototype.getBanglaMonthName = function (options) {
const { locale = 'bn', variant } = options ?? {};
const { monthIdx } = $bnDaysMonthIdx($Date(this), variant);
const MONTH = constants_1.BN_MONTHS[monthIdx];
return (locale === 'en' ? MONTH.en : MONTH.bn);
};
$Chronos.prototype.getBanglaSeasonName = function (options) {
const { locale, variant } = options ?? {};
const { monthIdx } = $bnDaysMonthIdx($Date(this), variant);
return (0, helpers_1._getBnSeason)(monthIdx, locale);
};
$Chronos.prototype.toBangla = function (opts) {
return {
year: this.getBanglaYear(opts?.locale),
month: this.getBanglaMonth(opts),
date: this.getBanglaDay(opts),
monthName: this.getBanglaMonthName(opts),
dayName: this.getBanglaDayName(opts?.locale),
seasonName: this.getBanglaSeasonName(opts),
isLeapYear: (0, helpers_1._isBnLeapYear)((0, helpers_1._getBnYear)($Date(this)), this.year, opts?.variant),
};
};
$Chronos.prototype.formatBangla = function (fmt, opts) {
const { variant } = opts ?? {};
const { hour, minute, second, millisecond } = this;
const D_NAME = constants_1.BN_DAYS[this.weekDay];
const { monthIdx } = $bnDaysMonthIdx($Date(this), variant);
const M_NAME = constants_1.BN_MONTHS[monthIdx];
const month = this.getBanglaMonth({ variant });
const year = (0, helpers_1._padShunno)(this.getBanglaYear(), 4);
const date = this.getBanglaDay({ variant });
const seasonName = this.getBanglaSeasonName({ variant });
const offset = (0, convert_1.digitToBangla)(this.getTimeZoneOffset());
const dateComponents = {
YYYY: year,
YY: year.slice(-2),
yyyy: year,
yy: year.slice(-2),
M: month,
MM: (0, helpers_1._padShunno)(month),
mmm: M_NAME.short,
mmmm: M_NAME.bn,
d: D_NAME.short,
dd: D_NAME.bn.replace('বার', ''),
ddd: D_NAME.bn,
D: date,
DD: (0, helpers_1._padShunno)(date),
Do: date,
H: (0, convert_1.digitToBangla)(hour),
HH: (0, helpers_1._padShunno)((0, convert_1.digitToBangla)(hour)),
h: (0, convert_1.digitToBangla)(hour % 12 || 12),
hh: (0, helpers_1._padShunno)((0, convert_1.digitToBangla)(hour % 12 || 12)),
m: (0, convert_1.digitToBangla)(minute),
mm: (0, helpers_1._padShunno)((0, convert_1.digitToBangla)(minute)),
s: (0, convert_1.digitToBangla)(second),
ss: (0, helpers_1._padShunno)((0, convert_1.digitToBangla)(second)),
ms: (0, convert_1.digitToBangla)(millisecond),
mss: (0, helpers_1._padShunno)((0, convert_1.digitToBangla)(millisecond), 3),
a: hour < 12 ? 'পূর্বাহ্ণ' : 'অপরাহ্ণ',
A: hour < 12 ? 'পূর্বাহ্ণ' : 'অপরাহ্ণ',
Z: offset,
ZZ: offset,
S: seasonName,
SS: `${seasonName}কাল`,
};
return (0, helpers_1._formatDateCore)(fmt || 'ddd, DD mmmm (SS), YYYY বঙ্গাব্দ - hh:mm:ss (A)', dateComponents);
};
};
exports.banglaPlugin = banglaPlugin;