yummies 5.11.0 → 5.11.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/date-time.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"date-time.js","sources":["../node_modules/.pnpm/dayjs@1.11.13/node_modules/dayjs/plugin/duration.js","../node_modules/.pnpm/dayjs@1.11.13/node_modules/dayjs/plugin/relativeTime.js","../node_modules/.pnpm/dayjs@1.11.13/node_modules/dayjs/locale/ru.js","../src/date-time.ts"],"sourcesContent":["!function(t,s){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=s():\"function\"==typeof define&&define.amd?define(s):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs_plugin_duration=s()}(this,(function(){\"use strict\";var t,s,n=1e3,i=6e4,e=36e5,r=864e5,o=/\\[([^\\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,u=31536e6,d=2628e6,a=/^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/,h={years:u,months:d,days:r,hours:e,minutes:i,seconds:n,milliseconds:1,weeks:6048e5},c=function(t){return t instanceof g},f=function(t,s,n){return new g(t,n,s.$l)},m=function(t){return s.p(t)+\"s\"},l=function(t){return t<0},$=function(t){return l(t)?Math.ceil(t):Math.floor(t)},y=function(t){return Math.abs(t)},v=function(t,s){return t?l(t)?{negative:!0,format:\"\"+y(t)+s}:{negative:!1,format:\"\"+t+s}:{negative:!1,format:\"\"}},g=function(){function l(t,s,n){var i=this;if(this.$d={},this.$l=n,void 0===t&&(this.$ms=0,this.parseFromMilliseconds()),s)return f(t*h[m(s)],this);if(\"number\"==typeof t)return this.$ms=t,this.parseFromMilliseconds(),this;if(\"object\"==typeof t)return Object.keys(t).forEach((function(s){i.$d[m(s)]=t[s]})),this.calMilliseconds(),this;if(\"string\"==typeof t){var e=t.match(a);if(e){var r=e.slice(2).map((function(t){return null!=t?Number(t):0}));return this.$d.years=r[0],this.$d.months=r[1],this.$d.weeks=r[2],this.$d.days=r[3],this.$d.hours=r[4],this.$d.minutes=r[5],this.$d.seconds=r[6],this.calMilliseconds(),this}}return this}var y=l.prototype;return y.calMilliseconds=function(){var t=this;this.$ms=Object.keys(this.$d).reduce((function(s,n){return s+(t.$d[n]||0)*h[n]}),0)},y.parseFromMilliseconds=function(){var t=this.$ms;this.$d.years=$(t/u),t%=u,this.$d.months=$(t/d),t%=d,this.$d.days=$(t/r),t%=r,this.$d.hours=$(t/e),t%=e,this.$d.minutes=$(t/i),t%=i,this.$d.seconds=$(t/n),t%=n,this.$d.milliseconds=t},y.toISOString=function(){var t=v(this.$d.years,\"Y\"),s=v(this.$d.months,\"M\"),n=+this.$d.days||0;this.$d.weeks&&(n+=7*this.$d.weeks);var i=v(n,\"D\"),e=v(this.$d.hours,\"H\"),r=v(this.$d.minutes,\"M\"),o=this.$d.seconds||0;this.$d.milliseconds&&(o+=this.$d.milliseconds/1e3,o=Math.round(1e3*o)/1e3);var u=v(o,\"S\"),d=t.negative||s.negative||i.negative||e.negative||r.negative||u.negative,a=e.format||r.format||u.format?\"T\":\"\",h=(d?\"-\":\"\")+\"P\"+t.format+s.format+i.format+a+e.format+r.format+u.format;return\"P\"===h||\"-P\"===h?\"P0D\":h},y.toJSON=function(){return this.toISOString()},y.format=function(t){var n=t||\"YYYY-MM-DDTHH:mm:ss\",i={Y:this.$d.years,YY:s.s(this.$d.years,2,\"0\"),YYYY:s.s(this.$d.years,4,\"0\"),M:this.$d.months,MM:s.s(this.$d.months,2,\"0\"),D:this.$d.days,DD:s.s(this.$d.days,2,\"0\"),H:this.$d.hours,HH:s.s(this.$d.hours,2,\"0\"),m:this.$d.minutes,mm:s.s(this.$d.minutes,2,\"0\"),s:this.$d.seconds,ss:s.s(this.$d.seconds,2,\"0\"),SSS:s.s(this.$d.milliseconds,3,\"0\")};return n.replace(o,(function(t,s){return s||String(i[t])}))},y.as=function(t){return this.$ms/h[m(t)]},y.get=function(t){var s=this.$ms,n=m(t);return\"milliseconds\"===n?s%=1e3:s=\"weeks\"===n?$(s/h[n]):this.$d[n],s||0},y.add=function(t,s,n){var i;return i=s?t*h[m(s)]:c(t)?t.$ms:f(t,this).$ms,f(this.$ms+i*(n?-1:1),this)},y.subtract=function(t,s){return this.add(t,s,!0)},y.locale=function(t){var s=this.clone();return s.$l=t,s},y.clone=function(){return f(this.$ms,this)},y.humanize=function(s){return t().add(this.$ms,\"ms\").locale(this.$l).fromNow(!s)},y.valueOf=function(){return this.asMilliseconds()},y.milliseconds=function(){return this.get(\"milliseconds\")},y.asMilliseconds=function(){return this.as(\"milliseconds\")},y.seconds=function(){return this.get(\"seconds\")},y.asSeconds=function(){return this.as(\"seconds\")},y.minutes=function(){return this.get(\"minutes\")},y.asMinutes=function(){return this.as(\"minutes\")},y.hours=function(){return this.get(\"hours\")},y.asHours=function(){return this.as(\"hours\")},y.days=function(){return this.get(\"days\")},y.asDays=function(){return this.as(\"days\")},y.weeks=function(){return this.get(\"weeks\")},y.asWeeks=function(){return this.as(\"weeks\")},y.months=function(){return this.get(\"months\")},y.asMonths=function(){return this.as(\"months\")},y.years=function(){return this.get(\"years\")},y.asYears=function(){return this.as(\"years\")},l}(),p=function(t,s,n){return t.add(s.years()*n,\"y\").add(s.months()*n,\"M\").add(s.days()*n,\"d\").add(s.hours()*n,\"h\").add(s.minutes()*n,\"m\").add(s.seconds()*n,\"s\").add(s.milliseconds()*n,\"ms\")};return function(n,i,e){t=e,s=e().$utils(),e.duration=function(t,s){var n=e.locale();return f(t,{$l:n},s)},e.isDuration=c;var r=i.prototype.add,o=i.prototype.subtract;i.prototype.add=function(t,s){return c(t)?p(this,t,1):r.bind(this)(t,s)},i.prototype.subtract=function(t,s){return c(t)?p(this,t,-1):o.bind(this)(t,s)}}}));","!function(r,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(r=\"undefined\"!=typeof globalThis?globalThis:r||self).dayjs_plugin_relativeTime=e()}(this,(function(){\"use strict\";return function(r,e,t){r=r||{};var n=e.prototype,o={future:\"in %s\",past:\"%s ago\",s:\"a few seconds\",m:\"a minute\",mm:\"%d minutes\",h:\"an hour\",hh:\"%d hours\",d:\"a day\",dd:\"%d days\",M:\"a month\",MM:\"%d months\",y:\"a year\",yy:\"%d years\"};function i(r,e,t,o){return n.fromToBase(r,e,t,o)}t.en.relativeTime=o,n.fromToBase=function(e,n,i,d,u){for(var f,a,s,l=i.$locale().relativeTime||o,h=r.thresholds||[{l:\"s\",r:44,d:\"second\"},{l:\"m\",r:89},{l:\"mm\",r:44,d:\"minute\"},{l:\"h\",r:89},{l:\"hh\",r:21,d:\"hour\"},{l:\"d\",r:35},{l:\"dd\",r:25,d:\"day\"},{l:\"M\",r:45},{l:\"MM\",r:10,d:\"month\"},{l:\"y\",r:17},{l:\"yy\",d:\"year\"}],m=h.length,c=0;c<m;c+=1){var y=h[c];y.d&&(f=d?t(e).diff(i,y.d,!0):i.diff(e,y.d,!0));var p=(r.rounding||Math.round)(Math.abs(f));if(s=f>0,p<=y.r||!y.r){p<=1&&c>0&&(y=h[c-1]);var v=l[y.l];u&&(p=u(\"\"+p)),a=\"string\"==typeof v?v.replace(\"%d\",p):v(p,n,y.l,s);break}}if(n)return a;var M=s?l.future:l.past;return\"function\"==typeof M?M(a):M.replace(\"%s\",a)},n.to=function(r,e){return i(r,e,this,!0)},n.from=function(r,e){return i(r,e,this)};var d=function(r){return r.$u?t.utc():t()};n.toNow=function(r){return this.to(d(this),r)},n.fromNow=function(r){return this.from(d(this),r)}}}));","!function(_,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=t(require(\"dayjs\")):\"function\"==typeof define&&define.amd?define([\"dayjs\"],t):(_=\"undefined\"!=typeof globalThis?globalThis:_||self).dayjs_locale_ru=t(_.dayjs)}(this,(function(_){\"use strict\";function t(_){return _&&\"object\"==typeof _&&\"default\"in _?_:{default:_}}var e=t(_),n=\"января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря\".split(\"_\"),s=\"январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь\".split(\"_\"),r=\"янв._февр._мар._апр._мая_июня_июля_авг._сент._окт._нояб._дек.\".split(\"_\"),o=\"янв._февр._март_апр._май_июнь_июль_авг._сент._окт._нояб._дек.\".split(\"_\"),i=/D[oD]?(\\[[^[\\]]*\\]|\\s)+MMMM?/;function d(_,t,e){var n,s;return\"m\"===e?t?\"минута\":\"минуту\":_+\" \"+(n=+_,s={mm:t?\"минута_минуты_минут\":\"минуту_минуты_минут\",hh:\"час_часа_часов\",dd:\"день_дня_дней\",MM:\"месяц_месяца_месяцев\",yy:\"год_года_лет\"}[e].split(\"_\"),n%10==1&&n%100!=11?s[0]:n%10>=2&&n%10<=4&&(n%100<10||n%100>=20)?s[1]:s[2])}var u=function(_,t){return i.test(t)?n[_.month()]:s[_.month()]};u.s=s,u.f=n;var a=function(_,t){return i.test(t)?r[_.month()]:o[_.month()]};a.s=o,a.f=r;var m={name:\"ru\",weekdays:\"воскресенье_понедельник_вторник_среда_четверг_пятница_суббота\".split(\"_\"),weekdaysShort:\"вск_пнд_втр_срд_чтв_птн_сбт\".split(\"_\"),weekdaysMin:\"вс_пн_вт_ср_чт_пт_сб\".split(\"_\"),months:u,monthsShort:a,weekStart:1,yearStart:4,formats:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D MMMM YYYY г.\",LLL:\"D MMMM YYYY г., H:mm\",LLLL:\"dddd, D MMMM YYYY г., H:mm\"},relativeTime:{future:\"через %s\",past:\"%s назад\",s:\"несколько секунд\",m:d,mm:d,h:\"час\",hh:d,d:\"день\",dd:d,M:\"месяц\",MM:d,y:\"год\",yy:d},ordinal:function(_){return _},meridiem:function(_){return _<4?\"ночи\":_<12?\"утра\":_<17?\"дня\":\"вечера\"}};return e.default.locale(m,null,!0),m}));","import dayjs, { type Dayjs, type ManipulateType } from 'dayjs';\nimport duration from 'dayjs/plugin/duration.js';\nimport relativeTime from 'dayjs/plugin/relativeTime.js';\nimport type { Maybe } from 'yummies/utils/types';\nimport { format } from './format/index.js';\nimport { unitsToMs } from './ms.js';\nimport { declension } from './text.js';\nimport { typeGuard } from './type-guard/index.js';\n\nimport 'dayjs/locale/ru.js';\n\ndayjs.extend(relativeTime);\ndayjs.extend(duration);\ndayjs.locale('ru');\n\nconst toLibFormat = (\n value: Maybe<RawDateToFormat>,\n asTime?: boolean,\n): Dayjs => {\n if (typeGuard.isNumber(value)) {\n if (asTime) {\n return dayjs.duration(value) as unknown as Dayjs;\n }\n return dayjs(value);\n } else if (dayjs.isDayjs(value)) {\n return value;\n } else {\n return dayjs(value);\n }\n};\n\nexport type RawDateToFormat = Date | string | number | Dayjs;\n\nexport const formatDate = (\n value: Maybe<RawDateToFormat>,\n settings?: Maybe<{\n format?:\n | 'human'\n | 'full'\n | 'short'\n | 'day'\n | 'day-only'\n | 'date'\n | 'month'\n | 'spent-time'\n | 'time'\n | 'time-short';\n pattern?: string;\n asTime?: boolean;\n }>,\n) => {\n const dateFormat = settings?.format;\n const datePattern = settings?.pattern;\n const asTime = settings?.asTime;\n\n value = toLibFormat(value, asTime);\n\n if (typeGuard.isUndefined(value) || !value.isValid()) {\n return format.NO_VALUE;\n }\n\n if (datePattern) {\n return value.format(datePattern);\n }\n\n switch (dateFormat) {\n case 'human': {\n return value.fromNow();\n }\n case 'spent-time': {\n return value.fromNow(true);\n }\n case 'full': {\n return value.format('DD MMM YYYY HH:mm:ss');\n }\n case 'short': {\n return value.format('DD MMM HH:mm');\n }\n case 'time': {\n return value.format('HH:mm:ss');\n }\n case 'time-short': {\n return value.format('HH:mm');\n }\n case 'day': {\n return value.format('DD MMM YYYY');\n }\n case 'month': {\n return value.format('MMMM YYYY');\n }\n default: {\n return value.format('DD.MM.YYYY');\n }\n }\n};\n\nexport const dayTimeDuration = (timeInMs: number) => {\n let left = Math.max(timeInMs, 0);\n\n const days = Math.floor(left / unitsToMs.day);\n left = left % unitsToMs.day;\n\n const hours = Math.floor(left / unitsToMs.hour);\n left = left % unitsToMs.hour;\n\n const minutes = Math.floor(left / unitsToMs.min);\n left = left % unitsToMs.min;\n\n const seconds = Math.floor(left / unitsToMs.sec);\n left = left % unitsToMs.sec;\n\n const milliseconds = Math.floor(left);\n\n return {\n days,\n hours,\n minutes,\n seconds,\n milliseconds,\n };\n};\n\ntype DateChangeParam = [amount: number, unit?: Maybe<ManipulateType>];\n\nexport const changeDate = (\n date: Maybe<RawDateToFormat>,\n ...args: [\n ...DateChangeParam,\n ...Partial<DateChangeParam>,\n ...Partial<DateChangeParam>,\n ...Partial<DateChangeParam>,\n ...Partial<DateChangeParam>,\n ...Partial<DateChangeParam>,\n ]\n) => {\n let wrappedDate = toLibFormat(date);\n\n for (let i = 0; i < args.length; i += 2) {\n const amount = args[i] as DateChangeParam[0];\n const unit = args[i + 1] as DateChangeParam[1];\n if (unit != null) {\n wrappedDate = wrappedDate.add(amount, unit);\n }\n }\n\n return wrappedDate.toDate();\n};\n\nexport const timeDuration = (timeInMs: number) => {\n const { days, hours, milliseconds, minutes, seconds } =\n dayTimeDuration(timeInMs);\n\n return {\n hours: hours + unitsToMs.day * days,\n milliseconds,\n minutes,\n seconds,\n };\n};\n\nconst durationFormatLabels = {\n days: { compact: 'д', full: ['день', 'дня', 'дней'] },\n hours: { compact: 'ч', full: ['час', 'часа', 'часов'] },\n minutes: { compact: 'мин', full: ['минута', 'минуты', 'минут'] },\n seconds: { compact: 'сек', full: ['секунда', 'секунды', 'секунд'] },\n} as const;\n\nexport function getFormatDuration(\n dateA: Date,\n dateB: Date,\n compact?: boolean,\n): string;\nexport function getFormatDuration(ms: number, compact?: boolean): string;\n\nexport function getFormatDuration(...args: any[]): string {\n let compact = false;\n let diff = 0;\n\n if (args[0] instanceof Date) {\n const startedDate = dayjs(args[0]);\n const endedDate = dayjs(args[1]);\n\n diff = endedDate.diff(startedDate, 'ms');\n compact = args[2] === true;\n } else {\n diff = args[0];\n compact = args[1] === true;\n }\n\n const { days, hours, minutes, seconds } = dayTimeDuration(diff);\n\n const formattedParts: string[] = [];\n\n if (days) {\n if (compact) {\n formattedParts.push(`${days} ${durationFormatLabels.days.compact}`);\n } else {\n formattedParts.push(\n `${days} ${declension(days, durationFormatLabels.days.full)}`,\n );\n }\n }\n\n if (hours) {\n if (compact) {\n formattedParts.push(`${hours} ${durationFormatLabels.hours.compact}`);\n } else {\n formattedParts.push(\n `${hours} ${declension(hours, durationFormatLabels.hours.full)}`,\n );\n }\n }\n\n if (minutes) {\n if (compact) {\n formattedParts.push(`${minutes} ${durationFormatLabels.minutes.compact}`);\n } else {\n formattedParts.push(\n `${minutes} ${declension(minutes, durationFormatLabels.minutes.full)}`,\n );\n }\n }\n\n if (seconds) {\n if (compact) {\n formattedParts.push(`${seconds} ${durationFormatLabels.seconds.compact}`);\n } else {\n formattedParts.push(\n `${seconds} ${declension(seconds, durationFormatLabels.seconds.full)}`,\n );\n }\n }\n\n return formattedParts.join(' ');\n}\n"],"names":["t","s","module","this","n","i","e","r","o","u","d","a","h","c","g","f","m","l","$","y","v","p","M","_","require$$0","dayjs","relativeTime","duration","toLibFormat","value","asTime","typeGuard.isNumber","formatDate","settings","dateFormat","datePattern","typeGuard.isUndefined","format.NO_VALUE","dayTimeDuration","timeInMs","left","days","unitsToMs","hours","minutes","seconds","milliseconds","changeDate","date","args","wrappedDate","amount","unit","timeDuration","durationFormatLabels","getFormatDuration","compact","diff","startedDate","formattedParts","declension"],"mappings":"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","x_google_ignoreList":[0,1,2]}
1
+ {"version":3,"file":"date-time.js","sources":["../node_modules/.pnpm/dayjs@1.11.13/node_modules/dayjs/plugin/duration.js","../node_modules/.pnpm/dayjs@1.11.13/node_modules/dayjs/plugin/relativeTime.js","../node_modules/.pnpm/dayjs@1.11.13/node_modules/dayjs/locale/ru.js","../src/date-time.ts"],"sourcesContent":["!function(t,s){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=s():\"function\"==typeof define&&define.amd?define(s):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs_plugin_duration=s()}(this,(function(){\"use strict\";var t,s,n=1e3,i=6e4,e=36e5,r=864e5,o=/\\[([^\\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,u=31536e6,d=2628e6,a=/^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/,h={years:u,months:d,days:r,hours:e,minutes:i,seconds:n,milliseconds:1,weeks:6048e5},c=function(t){return t instanceof g},f=function(t,s,n){return new g(t,n,s.$l)},m=function(t){return s.p(t)+\"s\"},l=function(t){return t<0},$=function(t){return l(t)?Math.ceil(t):Math.floor(t)},y=function(t){return Math.abs(t)},v=function(t,s){return t?l(t)?{negative:!0,format:\"\"+y(t)+s}:{negative:!1,format:\"\"+t+s}:{negative:!1,format:\"\"}},g=function(){function l(t,s,n){var i=this;if(this.$d={},this.$l=n,void 0===t&&(this.$ms=0,this.parseFromMilliseconds()),s)return f(t*h[m(s)],this);if(\"number\"==typeof t)return this.$ms=t,this.parseFromMilliseconds(),this;if(\"object\"==typeof t)return Object.keys(t).forEach((function(s){i.$d[m(s)]=t[s]})),this.calMilliseconds(),this;if(\"string\"==typeof t){var e=t.match(a);if(e){var r=e.slice(2).map((function(t){return null!=t?Number(t):0}));return this.$d.years=r[0],this.$d.months=r[1],this.$d.weeks=r[2],this.$d.days=r[3],this.$d.hours=r[4],this.$d.minutes=r[5],this.$d.seconds=r[6],this.calMilliseconds(),this}}return this}var y=l.prototype;return y.calMilliseconds=function(){var t=this;this.$ms=Object.keys(this.$d).reduce((function(s,n){return s+(t.$d[n]||0)*h[n]}),0)},y.parseFromMilliseconds=function(){var t=this.$ms;this.$d.years=$(t/u),t%=u,this.$d.months=$(t/d),t%=d,this.$d.days=$(t/r),t%=r,this.$d.hours=$(t/e),t%=e,this.$d.minutes=$(t/i),t%=i,this.$d.seconds=$(t/n),t%=n,this.$d.milliseconds=t},y.toISOString=function(){var t=v(this.$d.years,\"Y\"),s=v(this.$d.months,\"M\"),n=+this.$d.days||0;this.$d.weeks&&(n+=7*this.$d.weeks);var i=v(n,\"D\"),e=v(this.$d.hours,\"H\"),r=v(this.$d.minutes,\"M\"),o=this.$d.seconds||0;this.$d.milliseconds&&(o+=this.$d.milliseconds/1e3,o=Math.round(1e3*o)/1e3);var u=v(o,\"S\"),d=t.negative||s.negative||i.negative||e.negative||r.negative||u.negative,a=e.format||r.format||u.format?\"T\":\"\",h=(d?\"-\":\"\")+\"P\"+t.format+s.format+i.format+a+e.format+r.format+u.format;return\"P\"===h||\"-P\"===h?\"P0D\":h},y.toJSON=function(){return this.toISOString()},y.format=function(t){var n=t||\"YYYY-MM-DDTHH:mm:ss\",i={Y:this.$d.years,YY:s.s(this.$d.years,2,\"0\"),YYYY:s.s(this.$d.years,4,\"0\"),M:this.$d.months,MM:s.s(this.$d.months,2,\"0\"),D:this.$d.days,DD:s.s(this.$d.days,2,\"0\"),H:this.$d.hours,HH:s.s(this.$d.hours,2,\"0\"),m:this.$d.minutes,mm:s.s(this.$d.minutes,2,\"0\"),s:this.$d.seconds,ss:s.s(this.$d.seconds,2,\"0\"),SSS:s.s(this.$d.milliseconds,3,\"0\")};return n.replace(o,(function(t,s){return s||String(i[t])}))},y.as=function(t){return this.$ms/h[m(t)]},y.get=function(t){var s=this.$ms,n=m(t);return\"milliseconds\"===n?s%=1e3:s=\"weeks\"===n?$(s/h[n]):this.$d[n],s||0},y.add=function(t,s,n){var i;return i=s?t*h[m(s)]:c(t)?t.$ms:f(t,this).$ms,f(this.$ms+i*(n?-1:1),this)},y.subtract=function(t,s){return this.add(t,s,!0)},y.locale=function(t){var s=this.clone();return s.$l=t,s},y.clone=function(){return f(this.$ms,this)},y.humanize=function(s){return t().add(this.$ms,\"ms\").locale(this.$l).fromNow(!s)},y.valueOf=function(){return this.asMilliseconds()},y.milliseconds=function(){return this.get(\"milliseconds\")},y.asMilliseconds=function(){return this.as(\"milliseconds\")},y.seconds=function(){return this.get(\"seconds\")},y.asSeconds=function(){return this.as(\"seconds\")},y.minutes=function(){return this.get(\"minutes\")},y.asMinutes=function(){return this.as(\"minutes\")},y.hours=function(){return this.get(\"hours\")},y.asHours=function(){return this.as(\"hours\")},y.days=function(){return this.get(\"days\")},y.asDays=function(){return this.as(\"days\")},y.weeks=function(){return this.get(\"weeks\")},y.asWeeks=function(){return this.as(\"weeks\")},y.months=function(){return this.get(\"months\")},y.asMonths=function(){return this.as(\"months\")},y.years=function(){return this.get(\"years\")},y.asYears=function(){return this.as(\"years\")},l}(),p=function(t,s,n){return t.add(s.years()*n,\"y\").add(s.months()*n,\"M\").add(s.days()*n,\"d\").add(s.hours()*n,\"h\").add(s.minutes()*n,\"m\").add(s.seconds()*n,\"s\").add(s.milliseconds()*n,\"ms\")};return function(n,i,e){t=e,s=e().$utils(),e.duration=function(t,s){var n=e.locale();return f(t,{$l:n},s)},e.isDuration=c;var r=i.prototype.add,o=i.prototype.subtract;i.prototype.add=function(t,s){return c(t)?p(this,t,1):r.bind(this)(t,s)},i.prototype.subtract=function(t,s){return c(t)?p(this,t,-1):o.bind(this)(t,s)}}}));","!function(r,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(r=\"undefined\"!=typeof globalThis?globalThis:r||self).dayjs_plugin_relativeTime=e()}(this,(function(){\"use strict\";return function(r,e,t){r=r||{};var n=e.prototype,o={future:\"in %s\",past:\"%s ago\",s:\"a few seconds\",m:\"a minute\",mm:\"%d minutes\",h:\"an hour\",hh:\"%d hours\",d:\"a day\",dd:\"%d days\",M:\"a month\",MM:\"%d months\",y:\"a year\",yy:\"%d years\"};function i(r,e,t,o){return n.fromToBase(r,e,t,o)}t.en.relativeTime=o,n.fromToBase=function(e,n,i,d,u){for(var f,a,s,l=i.$locale().relativeTime||o,h=r.thresholds||[{l:\"s\",r:44,d:\"second\"},{l:\"m\",r:89},{l:\"mm\",r:44,d:\"minute\"},{l:\"h\",r:89},{l:\"hh\",r:21,d:\"hour\"},{l:\"d\",r:35},{l:\"dd\",r:25,d:\"day\"},{l:\"M\",r:45},{l:\"MM\",r:10,d:\"month\"},{l:\"y\",r:17},{l:\"yy\",d:\"year\"}],m=h.length,c=0;c<m;c+=1){var y=h[c];y.d&&(f=d?t(e).diff(i,y.d,!0):i.diff(e,y.d,!0));var p=(r.rounding||Math.round)(Math.abs(f));if(s=f>0,p<=y.r||!y.r){p<=1&&c>0&&(y=h[c-1]);var v=l[y.l];u&&(p=u(\"\"+p)),a=\"string\"==typeof v?v.replace(\"%d\",p):v(p,n,y.l,s);break}}if(n)return a;var M=s?l.future:l.past;return\"function\"==typeof M?M(a):M.replace(\"%s\",a)},n.to=function(r,e){return i(r,e,this,!0)},n.from=function(r,e){return i(r,e,this)};var d=function(r){return r.$u?t.utc():t()};n.toNow=function(r){return this.to(d(this),r)},n.fromNow=function(r){return this.from(d(this),r)}}}));","!function(_,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=t(require(\"dayjs\")):\"function\"==typeof define&&define.amd?define([\"dayjs\"],t):(_=\"undefined\"!=typeof globalThis?globalThis:_||self).dayjs_locale_ru=t(_.dayjs)}(this,(function(_){\"use strict\";function t(_){return _&&\"object\"==typeof _&&\"default\"in _?_:{default:_}}var e=t(_),n=\"января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря\".split(\"_\"),s=\"январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь\".split(\"_\"),r=\"янв._февр._мар._апр._мая_июня_июля_авг._сент._окт._нояб._дек.\".split(\"_\"),o=\"янв._февр._март_апр._май_июнь_июль_авг._сент._окт._нояб._дек.\".split(\"_\"),i=/D[oD]?(\\[[^[\\]]*\\]|\\s)+MMMM?/;function d(_,t,e){var n,s;return\"m\"===e?t?\"минута\":\"минуту\":_+\" \"+(n=+_,s={mm:t?\"минута_минуты_минут\":\"минуту_минуты_минут\",hh:\"час_часа_часов\",dd:\"день_дня_дней\",MM:\"месяц_месяца_месяцев\",yy:\"год_года_лет\"}[e].split(\"_\"),n%10==1&&n%100!=11?s[0]:n%10>=2&&n%10<=4&&(n%100<10||n%100>=20)?s[1]:s[2])}var u=function(_,t){return i.test(t)?n[_.month()]:s[_.month()]};u.s=s,u.f=n;var a=function(_,t){return i.test(t)?r[_.month()]:o[_.month()]};a.s=o,a.f=r;var m={name:\"ru\",weekdays:\"воскресенье_понедельник_вторник_среда_четверг_пятница_суббота\".split(\"_\"),weekdaysShort:\"вск_пнд_втр_срд_чтв_птн_сбт\".split(\"_\"),weekdaysMin:\"вс_пн_вт_ср_чт_пт_сб\".split(\"_\"),months:u,monthsShort:a,weekStart:1,yearStart:4,formats:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D MMMM YYYY г.\",LLL:\"D MMMM YYYY г., H:mm\",LLLL:\"dddd, D MMMM YYYY г., H:mm\"},relativeTime:{future:\"через %s\",past:\"%s назад\",s:\"несколько секунд\",m:d,mm:d,h:\"час\",hh:d,d:\"день\",dd:d,M:\"месяц\",MM:d,y:\"год\",yy:d},ordinal:function(_){return _},meridiem:function(_){return _<4?\"ночи\":_<12?\"утра\":_<17?\"дня\":\"вечера\"}};return e.default.locale(m,null,!0),m}));","import dayjs, { type Dayjs, type ManipulateType } from 'dayjs';\nimport duration from 'dayjs/plugin/duration.js';\nimport relativeTime from 'dayjs/plugin/relativeTime.js';\nimport { format } from 'yummies/format';\nimport { unitsToMs } from 'yummies/ms';\nimport { declension } from 'yummies/text';\nimport { typeGuard } from 'yummies/type-guard';\nimport type { Maybe } from 'yummies/utils/types';\n\nimport 'dayjs/locale/ru.js';\n\ndayjs.extend(relativeTime);\ndayjs.extend(duration);\ndayjs.locale('ru');\n\nconst toLibFormat = (\n value: Maybe<RawDateToFormat>,\n asTime?: boolean,\n): Dayjs => {\n if (typeGuard.isNumber(value)) {\n if (asTime) {\n return dayjs.duration(value) as unknown as Dayjs;\n }\n return dayjs(value);\n } else if (dayjs.isDayjs(value)) {\n return value;\n } else {\n return dayjs(value);\n }\n};\n\nexport type RawDateToFormat = Date | string | number | Dayjs;\n\nexport const formatDate = (\n value: Maybe<RawDateToFormat>,\n settings?: Maybe<{\n format?:\n | 'human'\n | 'full'\n | 'short'\n | 'day'\n | 'day-only'\n | 'date'\n | 'month'\n | 'spent-time'\n | 'time'\n | 'time-short';\n pattern?: string;\n asTime?: boolean;\n }>,\n) => {\n const dateFormat = settings?.format;\n const datePattern = settings?.pattern;\n const asTime = settings?.asTime;\n\n value = toLibFormat(value, asTime);\n\n if (typeGuard.isUndefined(value) || !value.isValid()) {\n return format.NO_VALUE;\n }\n\n if (datePattern) {\n return value.format(datePattern);\n }\n\n switch (dateFormat) {\n case 'human': {\n return value.fromNow();\n }\n case 'spent-time': {\n return value.fromNow(true);\n }\n case 'full': {\n return value.format('DD MMM YYYY HH:mm:ss');\n }\n case 'short': {\n return value.format('DD MMM HH:mm');\n }\n case 'time': {\n return value.format('HH:mm:ss');\n }\n case 'time-short': {\n return value.format('HH:mm');\n }\n case 'day': {\n return value.format('DD MMM YYYY');\n }\n case 'month': {\n return value.format('MMMM YYYY');\n }\n default: {\n return value.format('DD.MM.YYYY');\n }\n }\n};\n\nexport const dayTimeDuration = (timeInMs: number) => {\n let left = Math.max(timeInMs, 0);\n\n const days = Math.floor(left / unitsToMs.day);\n left = left % unitsToMs.day;\n\n const hours = Math.floor(left / unitsToMs.hour);\n left = left % unitsToMs.hour;\n\n const minutes = Math.floor(left / unitsToMs.min);\n left = left % unitsToMs.min;\n\n const seconds = Math.floor(left / unitsToMs.sec);\n left = left % unitsToMs.sec;\n\n const milliseconds = Math.floor(left);\n\n return {\n days,\n hours,\n minutes,\n seconds,\n milliseconds,\n };\n};\n\ntype DateChangeParam = [amount: number, unit?: Maybe<ManipulateType>];\n\nexport const changeDate = (\n date: Maybe<RawDateToFormat>,\n ...args: [\n ...DateChangeParam,\n ...Partial<DateChangeParam>,\n ...Partial<DateChangeParam>,\n ...Partial<DateChangeParam>,\n ...Partial<DateChangeParam>,\n ...Partial<DateChangeParam>,\n ]\n) => {\n let wrappedDate = toLibFormat(date);\n\n for (let i = 0; i < args.length; i += 2) {\n const amount = args[i] as DateChangeParam[0];\n const unit = args[i + 1] as DateChangeParam[1];\n if (unit != null) {\n wrappedDate = wrappedDate.add(amount, unit);\n }\n }\n\n return wrappedDate.toDate();\n};\n\nexport const timeDuration = (timeInMs: number) => {\n const { days, hours, milliseconds, minutes, seconds } =\n dayTimeDuration(timeInMs);\n\n return {\n hours: hours + unitsToMs.day * days,\n milliseconds,\n minutes,\n seconds,\n };\n};\n\nconst durationFormatLabels = {\n days: { compact: 'д', full: ['день', 'дня', 'дней'] },\n hours: { compact: 'ч', full: ['час', 'часа', 'часов'] },\n minutes: { compact: 'мин', full: ['минута', 'минуты', 'минут'] },\n seconds: { compact: 'сек', full: ['секунда', 'секунды', 'секунд'] },\n} as const;\n\nexport function getFormatDuration(\n dateA: Date,\n dateB: Date,\n compact?: boolean,\n): string;\nexport function getFormatDuration(ms: number, compact?: boolean): string;\n\nexport function getFormatDuration(...args: any[]): string {\n let compact = false;\n let diff = 0;\n\n if (args[0] instanceof Date) {\n const startedDate = dayjs(args[0]);\n const endedDate = dayjs(args[1]);\n\n diff = endedDate.diff(startedDate, 'ms');\n compact = args[2] === true;\n } else {\n diff = args[0];\n compact = args[1] === true;\n }\n\n const { days, hours, minutes, seconds } = dayTimeDuration(diff);\n\n const formattedParts: string[] = [];\n\n if (days) {\n if (compact) {\n formattedParts.push(`${days} ${durationFormatLabels.days.compact}`);\n } else {\n formattedParts.push(\n `${days} ${declension(days, durationFormatLabels.days.full)}`,\n );\n }\n }\n\n if (hours) {\n if (compact) {\n formattedParts.push(`${hours} ${durationFormatLabels.hours.compact}`);\n } else {\n formattedParts.push(\n `${hours} ${declension(hours, durationFormatLabels.hours.full)}`,\n );\n }\n }\n\n if (minutes) {\n if (compact) {\n formattedParts.push(`${minutes} ${durationFormatLabels.minutes.compact}`);\n } else {\n formattedParts.push(\n `${minutes} ${declension(minutes, durationFormatLabels.minutes.full)}`,\n );\n }\n }\n\n if (seconds) {\n if (compact) {\n formattedParts.push(`${seconds} ${durationFormatLabels.seconds.compact}`);\n } else {\n formattedParts.push(\n `${seconds} ${declension(seconds, durationFormatLabels.seconds.full)}`,\n );\n }\n }\n\n return formattedParts.join(' ');\n}\n"],"names":["t","s","module","this","n","i","e","r","o","u","d","a","h","c","g","f","m","l","$","y","v","p","M","_","require$$0","dayjs","relativeTime","duration","toLibFormat","value","asTime","typeGuard","formatDate","settings","dateFormat","datePattern","format","dayTimeDuration","timeInMs","left","days","unitsToMs","hours","minutes","seconds","milliseconds","changeDate","date","args","wrappedDate","amount","unit","timeDuration","durationFormatLabels","getFormatDuration","compact","diff","startedDate","formattedParts","declension"],"mappings":"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","x_google_ignoreList":[0,1,2]}
package/errors.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./~index-PKNbSTT-.js"),n=r=>r?e.isString(r)?r||n.unknownErrorText:r instanceof Error?(n.formatError?.(r)??r.message)||n.unknownErrorText:n.enhance?n.enhance(r)??n.unknownErrorText:n.unknownErrorText:n.unknownErrorText;n.unknownErrorText="";n.formatError=null;n.enhance=null;exports.getErrorText=n;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("yummies/type-guard"),n=r=>r?e.typeGuard.isString(r)?r||n.unknownErrorText:r instanceof Error?(n.formatError?.(r)??r.message)||n.unknownErrorText:n.enhance?n.enhance(r)??n.unknownErrorText:n.unknownErrorText:n.unknownErrorText;n.unknownErrorText="";n.formatError=null;n.enhance=null;exports.getErrorText=n;
2
2
  //# sourceMappingURL=errors.cjs.map
package/errors.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"errors.cjs","sources":["../src/errors.ts"],"sourcesContent":["import type { Maybe } from 'yummies/utils/types';\nimport { typeGuard } from './type-guard/index.js';\n\ntype GetErrorTextEnhancer = (error: any) => string;\ntype GetErrorTextFormatErrorFn = (error: Error) => string;\n\n/**\n * Universal function for transforming any errors into readable error text\n *\n * This function can be enhanced with custom handlers using:\n * - `getErrorText.unknownErrorText`\n * - `getErrorText.formatError`\n * - `getErrorText.enhance`\n */\nexport const getErrorText = (error: unknown) => {\n if (!error) {\n return getErrorText.unknownErrorText;\n }\n\n if (typeGuard.isString(error)) {\n return error || getErrorText.unknownErrorText;\n }\n\n if (error instanceof Error) {\n return (\n (getErrorText.formatError?.(error) ?? error.message) ||\n getErrorText.unknownErrorText\n );\n }\n\n if (getErrorText.enhance) {\n return getErrorText.enhance(error) ?? getErrorText.unknownErrorText;\n } else {\n return getErrorText.unknownErrorText;\n }\n};\n\ngetErrorText.unknownErrorText = '';\ngetErrorText.formatError = null as Maybe<GetErrorTextFormatErrorFn>;\ngetErrorText.enhance = null as Maybe<GetErrorTextEnhancer>;\n"],"names":["getErrorText","error","typeGuard.isString"],"mappings":"wHAcaA,EAAgBC,GACtBA,EAIDC,EAAAA,SAAmBD,CAAK,EACnBA,GAASD,EAAa,iBAG3BC,aAAiB,OAEhBD,EAAa,cAAcC,CAAK,GAAKA,EAAM,UAC5CD,EAAa,iBAIbA,EAAa,QACRA,EAAa,QAAQC,CAAK,GAAKD,EAAa,iBAE5CA,EAAa,iBAjBbA,EAAa,iBAqBxBA,EAAa,iBAAmB,GAChCA,EAAa,YAAc,KAC3BA,EAAa,QAAU"}
1
+ {"version":3,"file":"errors.cjs","sources":["../src/errors.ts"],"sourcesContent":["import { typeGuard } from 'yummies/type-guard';\nimport type { Maybe } from 'yummies/utils/types';\n\ntype GetErrorTextEnhancer = (error: any) => string;\ntype GetErrorTextFormatErrorFn = (error: Error) => string;\n\n/**\n * Universal function for transforming any errors into readable error text\n *\n * This function can be enhanced with custom handlers using:\n * - `getErrorText.unknownErrorText`\n * - `getErrorText.formatError`\n * - `getErrorText.enhance`\n */\nexport const getErrorText = (error: unknown) => {\n if (!error) {\n return getErrorText.unknownErrorText;\n }\n\n if (typeGuard.isString(error)) {\n return error || getErrorText.unknownErrorText;\n }\n\n if (error instanceof Error) {\n return (\n (getErrorText.formatError?.(error) ?? error.message) ||\n getErrorText.unknownErrorText\n );\n }\n\n if (getErrorText.enhance) {\n return getErrorText.enhance(error) ?? getErrorText.unknownErrorText;\n } else {\n return getErrorText.unknownErrorText;\n }\n};\n\ngetErrorText.unknownErrorText = '';\ngetErrorText.formatError = null as Maybe<GetErrorTextFormatErrorFn>;\ngetErrorText.enhance = null as Maybe<GetErrorTextEnhancer>;\n"],"names":["getErrorText","error","typeGuard"],"mappings":"sHAcaA,EAAgBC,GACtBA,EAIDC,EAAAA,UAAU,SAASD,CAAK,EACnBA,GAASD,EAAa,iBAG3BC,aAAiB,OAEhBD,EAAa,cAAcC,CAAK,GAAKA,EAAM,UAC5CD,EAAa,iBAIbA,EAAa,QACRA,EAAa,QAAQC,CAAK,GAAKD,EAAa,iBAE5CA,EAAa,iBAjBbA,EAAa,iBAqBxBA,EAAa,iBAAmB,GAChCA,EAAa,YAAc,KAC3BA,EAAa,QAAU"}
package/errors.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAGjD,KAAK,oBAAoB,GAAG,CAAC,KAAK,EAAE,GAAG,KAAK,MAAM,CAAC;AACnD,KAAK,yBAAyB,GAAG,CAAC,KAAK,EAAE,KAAK,KAAK,MAAM,CAAC;AAE1D;;;;;;;GAOG;AACH,eAAO,MAAM,YAAY;YAAW,OAAO;;;;CAqB1C,CAAC"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAEjD,KAAK,oBAAoB,GAAG,CAAC,KAAK,EAAE,GAAG,KAAK,MAAM,CAAC;AACnD,KAAK,yBAAyB,GAAG,CAAC,KAAK,EAAE,KAAK,KAAK,MAAM,CAAC;AAE1D;;;;;;;GAOG;AACH,eAAO,MAAM,YAAY;YAAW,OAAO;;;;CAqB1C,CAAC"}
package/errors.js CHANGED
@@ -1,5 +1,5 @@
1
- import { i as t } from "./~index-C3wKHvHr.js";
2
- const n = (r) => r ? t(r) ? r || n.unknownErrorText : r instanceof Error ? (n.formatError?.(r) ?? r.message) || n.unknownErrorText : n.enhance ? n.enhance(r) ?? n.unknownErrorText : n.unknownErrorText : n.unknownErrorText;
1
+ import { typeGuard as t } from "yummies/type-guard";
2
+ const n = (r) => r ? t.isString(r) ? r || n.unknownErrorText : r instanceof Error ? (n.formatError?.(r) ?? r.message) || n.unknownErrorText : n.enhance ? n.enhance(r) ?? n.unknownErrorText : n.unknownErrorText : n.unknownErrorText;
3
3
  n.unknownErrorText = "";
4
4
  n.formatError = null;
5
5
  n.enhance = null;
package/errors.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sources":["../src/errors.ts"],"sourcesContent":["import type { Maybe } from 'yummies/utils/types';\nimport { typeGuard } from './type-guard/index.js';\n\ntype GetErrorTextEnhancer = (error: any) => string;\ntype GetErrorTextFormatErrorFn = (error: Error) => string;\n\n/**\n * Universal function for transforming any errors into readable error text\n *\n * This function can be enhanced with custom handlers using:\n * - `getErrorText.unknownErrorText`\n * - `getErrorText.formatError`\n * - `getErrorText.enhance`\n */\nexport const getErrorText = (error: unknown) => {\n if (!error) {\n return getErrorText.unknownErrorText;\n }\n\n if (typeGuard.isString(error)) {\n return error || getErrorText.unknownErrorText;\n }\n\n if (error instanceof Error) {\n return (\n (getErrorText.formatError?.(error) ?? error.message) ||\n getErrorText.unknownErrorText\n );\n }\n\n if (getErrorText.enhance) {\n return getErrorText.enhance(error) ?? getErrorText.unknownErrorText;\n } else {\n return getErrorText.unknownErrorText;\n }\n};\n\ngetErrorText.unknownErrorText = '';\ngetErrorText.formatError = null as Maybe<GetErrorTextFormatErrorFn>;\ngetErrorText.enhance = null as Maybe<GetErrorTextEnhancer>;\n"],"names":["getErrorText","error","typeGuard.isString"],"mappings":";AAcO,MAAMA,IAAe,CAACC,MACtBA,IAIDC,EAAmBD,CAAK,IACnBA,KAASD,EAAa,mBAG3BC,aAAiB,SAEhBD,EAAa,cAAcC,CAAK,KAAKA,EAAM,YAC5CD,EAAa,mBAIbA,EAAa,UACRA,EAAa,QAAQC,CAAK,KAAKD,EAAa,mBAE5CA,EAAa,mBAjBbA,EAAa;AAqBxBA,EAAa,mBAAmB;AAChCA,EAAa,cAAc;AAC3BA,EAAa,UAAU;"}
1
+ {"version":3,"file":"errors.js","sources":["../src/errors.ts"],"sourcesContent":["import { typeGuard } from 'yummies/type-guard';\nimport type { Maybe } from 'yummies/utils/types';\n\ntype GetErrorTextEnhancer = (error: any) => string;\ntype GetErrorTextFormatErrorFn = (error: Error) => string;\n\n/**\n * Universal function for transforming any errors into readable error text\n *\n * This function can be enhanced with custom handlers using:\n * - `getErrorText.unknownErrorText`\n * - `getErrorText.formatError`\n * - `getErrorText.enhance`\n */\nexport const getErrorText = (error: unknown) => {\n if (!error) {\n return getErrorText.unknownErrorText;\n }\n\n if (typeGuard.isString(error)) {\n return error || getErrorText.unknownErrorText;\n }\n\n if (error instanceof Error) {\n return (\n (getErrorText.formatError?.(error) ?? error.message) ||\n getErrorText.unknownErrorText\n );\n }\n\n if (getErrorText.enhance) {\n return getErrorText.enhance(error) ?? getErrorText.unknownErrorText;\n } else {\n return getErrorText.unknownErrorText;\n }\n};\n\ngetErrorText.unknownErrorText = '';\ngetErrorText.formatError = null as Maybe<GetErrorTextFormatErrorFn>;\ngetErrorText.enhance = null as Maybe<GetErrorTextEnhancer>;\n"],"names":["getErrorText","error","typeGuard"],"mappings":";AAcO,MAAMA,IAAe,CAACC,MACtBA,IAIDC,EAAU,SAASD,CAAK,IACnBA,KAASD,EAAa,mBAG3BC,aAAiB,SAEhBD,EAAa,cAAcC,CAAK,KAAKA,EAAM,YAC5CD,EAAa,mBAIbA,EAAa,UACRA,EAAa,QAAQC,CAAK,KAAKD,EAAa,mBAE5CA,EAAa,mBAjBbA,EAAa;AAqBxBA,EAAa,mBAAmB;AAChCA,EAAa,cAAc;AAC3BA,EAAa,UAAU;"}
@@ -1,6 +1,6 @@
1
+ import { parser } from '../parser/index.ts';
1
2
  import { Maybe } from '../utils/types.ts';
2
- import { NumberParserSettings } from '../parser/number.js';
3
- export interface PercentFormatSettings extends Omit<NumberParserSettings, 'fallback'> {
3
+ export interface PercentFormatSettings extends Omit<parser.NumberParserSettings, 'fallback'> {
4
4
  divider?: string;
5
5
  delimiter?: string;
6
6
  symbol?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"percent.d.ts","sourceRoot":"","sources":["../../src/format/percent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,KAAK,oBAAoB,EAAU,MAAM,qBAAqB,CAAC;AAKxE,MAAM,WAAW,qBACf,SAAQ,IAAI,CAAC,oBAAoB,EAAE,UAAU,CAAC;IAC9C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;GAIG;AACH,eAAO,MAAM,OAAO,GAClB,OAAO,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,EAC7B,WAAW,qBAAqB,WAkBjC,CAAC"}
1
+ {"version":3,"file":"percent.d.ts","sourceRoot":"","sources":["../../src/format/percent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAExC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAIjD,MAAM,WAAW,qBACf,SAAQ,IAAI,CAAC,MAAM,CAAC,oBAAoB,EAAE,UAAU,CAAC;IACrD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;GAIG;AACH,eAAO,MAAM,OAAO,GAClB,OAAO,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,EAC7B,WAAW,qBAAqB,WAkBjC,CAAC"}
package/format.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("./~constants-HmaulHpr.js"),$=require("yummies/parser"),p=require("yummies/type-guard"),P=require("./~number-B1MpW9GU.js"),O=require("./~index-PKNbSTT-.js"),a=(r,t)=>{const e={...a.defaultSettings,...t},o=e.digits??0,u=e?.cutZeros??!1,d=e.delimiter??" ",b=e.postfix??"",N=e.emptyText??s.NO_VALUE,y=e.digitsOnlyForFloat??!0;let i;if(p.typeGuard.isString(r)?i=$.parser.number(i,{fallback:void 0}):i=r,p.typeGuard.isNumber(i)){let n=`${i}`;o!==!1&&(n=i.toFixed(o)),u&&(n=`${+n}`);const[g,l]=n.split(".",2);let c=g,m="";l&&(!y||!/^0+$/.test(l))&&(m=`.${l}`);const f=/(\d+)(\d{3})/;for(;f.test(c)&&d;)c=c.replace(f,`$1${d}$2`);return c+m+b}return N};a.defaultSettings={};const _=(r,t)=>{const e=P.number(r,{...t,digits:t?.digits??2,fallback:Number.NaN});if(O.isNumber(e)){const o=t?.divider??".";return`${o==="."?e:`${e}`.replace(".",o)}${t?.delimiter??""}${t?.symbol??"%"}`}else return t?.emptyText??s.NO_VALUE},x=r=>r.replaceAll(/\s/g,""),S=Object.freeze(Object.defineProperty({__proto__:null,HYPHEN:s.HYPHEN,INFINITY:s.INFINITY,NO_VALUE:s.NO_VALUE,number:a,percent:_,skipSpaces:x},Symbol.toStringTag,{value:"Module"}));exports.format=S;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const b=require("yummies/parser"),c=require("yummies/type-guard"),a="–",P="-",x="",d=(r,t)=>{const e={...d.defaultSettings,...t},o=e.digits??0,u=e?.cutZeros??!1,m=e.delimiter??" ",y=e.postfix??"",g=e.emptyText??a,$=e.digitsOnlyForFloat??!0;let i;if(c.typeGuard.isString(r)?i=b.parser.number(i,{fallback:void 0}):i=r,c.typeGuard.isNumber(i)){let s=`${i}`;o!==!1&&(s=i.toFixed(o)),u&&(s=`${+s}`);const[N,n]=s.split(".",2);let l=N,p="";n&&(!$||!/^0+$/.test(n))&&(p=`.${n}`);const f=/(\d+)(\d{3})/;for(;f.test(l)&&m;)l=l.replace(f,`$1${m}$2`);return l+p+y}return g};d.defaultSettings={};const S=(r,t)=>{const e=b.parser.number(r,{...t,digits:t?.digits??2,fallback:Number.NaN});if(c.typeGuard.isNumber(e)){const o=t?.divider??".";return`${o==="."?e:`${e}`.replace(".",o)}${t?.delimiter??""}${t?.symbol??"%"}`}else return t?.emptyText??a},v=r=>r.replaceAll(/\s/g,""),F=Object.freeze(Object.defineProperty({__proto__:null,HYPHEN:P,INFINITY:x,NO_VALUE:a,number:d,percent:S,skipSpaces:v},Symbol.toStringTag,{value:"Module"}));exports.format=F;
2
2
  //# sourceMappingURL=format.cjs.map
package/format.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"format.cjs","sources":["../src/format/number.ts","../src/format/percent.ts","../src/format/skip-spaces.ts"],"sourcesContent":["import { parser } from 'yummies/parser';\nimport { typeGuard } from 'yummies/type-guard';\nimport type { Maybe } from 'yummies/utils/types';\nimport { NO_VALUE } from './constants.js';\n\nexport interface NumberFormatSettings {\n delimiter?: string;\n /**\n * digitsOnlyForFloat - Show digits after decimal point only if they are not zeros after converting to number.\n * Example: \"0.00\" -> \"0\", \"0.10\" -> \"0.1\", but \"0.003\" -> \"0.003\"\n *\n * @default true\n */\n digitsOnlyForFloat?: boolean;\n /**\n * Text which will be returned if the value is undefined, null, NaN, Infinity or empty string.\n * Example: \"–\" will be returned if the value is undefined and emptyText is \"–\".\n */\n emptyText?: string;\n /**\n * Text to append to the end of the formatted number.\n * Example: if value is 1000 and postfix is \"₽\", result will be \"1 000₽\".\n */\n postfix?: string;\n /**\n * Fixed number of digits after the decimal point (number.toFixed() method)\n * If set to false, the truncation is ignored!\n */\n digits?: number | false;\n /**\n * Remove trailing zeros from the end of the number\n * Example: 0.010000000000000000000000000000000000000000000 -> 0.01\n */\n cutZeros?: boolean;\n}\n\nexport const number = (\n rawValue: Maybe<string | number>,\n userSettings?: Maybe<NumberFormatSettings>,\n): string => {\n const settings = {\n ...number.defaultSettings,\n ...userSettings,\n };\n\n const digits = settings.digits ?? 0;\n const cutZeros = settings?.cutZeros ?? false;\n const delimiter = settings.delimiter ?? ' ';\n const postfix = settings.postfix ?? '';\n const emptyText = settings.emptyText ?? NO_VALUE;\n const digitsOnlyForFloat = settings.digitsOnlyForFloat ?? true;\n\n let value: Maybe<number>;\n\n if (typeGuard.isString(rawValue)) {\n value = parser.number(value, { fallback: undefined });\n } else {\n value = rawValue;\n }\n\n if (typeGuard.isNumber(value)) {\n let raw: string = `${value}`;\n\n if (digits !== false) {\n raw = value.toFixed(digits);\n }\n if (cutZeros) {\n raw = `${+raw}`;\n }\n\n const [integerPart, decimalPart] = raw.split('.', 2);\n\n let formattedIntegerPart = integerPart;\n let formattedDecimalPart = '';\n\n if (decimalPart && (!digitsOnlyForFloat || !/^0+$/.test(decimalPart))) {\n formattedDecimalPart = `.${decimalPart}`;\n }\n\n const rgx = /(\\d+)(\\d{3})/;\n\n while (rgx.test(formattedIntegerPart) && delimiter) {\n formattedIntegerPart = formattedIntegerPart.replace(\n rgx,\n `$1${delimiter}$2`,\n );\n }\n\n return formattedIntegerPart + formattedDecimalPart + postfix;\n }\n\n return emptyText;\n};\n\nnumber.defaultSettings = {} as NumberFormatSettings;\n","import type { Maybe } from 'yummies/utils/types';\nimport { type NumberParserSettings, number } from '../parser/number.js';\nimport { typeGuard } from '../type-guard/index.js';\n\nimport { NO_VALUE } from './constants.js';\n\nexport interface PercentFormatSettings\n extends Omit<NumberParserSettings, 'fallback'> {\n divider?: string;\n delimiter?: string;\n symbol?: string;\n emptyText?: string;\n}\n\n/**\n * 100 -> 100%\n * 99.123214412 -> 99.12%\n * 99.123214412 -> 99,12%\n */\nexport const percent = (\n value: Maybe<number | string>,\n settings?: PercentFormatSettings,\n) => {\n const numericValue = number(value, {\n ...settings,\n digits: settings?.digits ?? 2,\n fallback: Number.NaN,\n });\n\n if (typeGuard.isNumber(numericValue)) {\n const divider = settings?.divider ?? '.';\n\n const formattedPercent =\n divider === '.' ? numericValue : `${numericValue}`.replace('.', divider);\n\n return `${formattedPercent}${settings?.delimiter ?? ''}${settings?.symbol ?? '%'}`;\n } else {\n return settings?.emptyText ?? NO_VALUE;\n }\n};\n","/**\n * Removes all spaces in string\n */\nexport const skipSpaces = (value: string) => value.replaceAll(/\\s/g, '');\n"],"names":["number","rawValue","userSettings","settings","digits","cutZeros","delimiter","postfix","emptyText","NO_VALUE","digitsOnlyForFloat","value","typeGuard","parser","raw","integerPart","decimalPart","formattedIntegerPart","formattedDecimalPart","rgx","percent","numericValue","typeGuard.isNumber","divider","skipSpaces"],"mappings":"6PAoCaA,EAAS,CACpBC,EACAC,IACW,CACX,MAAMC,EAAW,CACf,GAAGH,EAAO,gBACV,GAAGE,CAAA,EAGCE,EAASD,EAAS,QAAU,EAC5BE,EAAWF,GAAU,UAAY,GACjCG,EAAYH,EAAS,WAAa,IAClCI,EAAUJ,EAAS,SAAW,GAC9BK,EAAYL,EAAS,WAAaM,EAAAA,SAClCC,EAAqBP,EAAS,oBAAsB,GAE1D,IAAIQ,EAQJ,GANIC,EAAAA,UAAU,SAASX,CAAQ,EAC7BU,EAAQE,EAAAA,OAAO,OAAOF,EAAO,CAAE,SAAU,OAAW,EAEpDA,EAAQV,EAGNW,EAAAA,UAAU,SAASD,CAAK,EAAG,CAC7B,IAAIG,EAAc,GAAGH,CAAK,GAEtBP,IAAW,KACbU,EAAMH,EAAM,QAAQP,CAAM,GAExBC,IACFS,EAAM,GAAG,CAACA,CAAG,IAGf,KAAM,CAACC,EAAaC,CAAW,EAAIF,EAAI,MAAM,IAAK,CAAC,EAEnD,IAAIG,EAAuBF,EACvBG,EAAuB,GAEvBF,IAAgB,CAACN,GAAsB,CAAC,OAAO,KAAKM,CAAW,KACjEE,EAAuB,IAAIF,CAAW,IAGxC,MAAMG,EAAM,eAEZ,KAAOA,EAAI,KAAKF,CAAoB,GAAKX,GACvCW,EAAuBA,EAAqB,QAC1CE,EACA,KAAKb,CAAS,IAAA,EAIlB,OAAOW,EAAuBC,EAAuBX,CACvD,CAEA,OAAOC,CACT,EAEAR,EAAO,gBAAkB,CAAA,EC3ElB,MAAMoB,EAAU,CACrBT,EACAR,IACG,CACH,MAAMkB,EAAerB,EAAAA,OAAOW,EAAO,CACjC,GAAGR,EACH,OAAQA,GAAU,QAAU,EAC5B,SAAU,OAAO,GAAA,CAClB,EAED,GAAImB,EAAAA,SAAmBD,CAAY,EAAG,CACpC,MAAME,EAAUpB,GAAU,SAAW,IAKrC,MAAO,GAFLoB,IAAY,IAAMF,EAAe,GAAGA,CAAY,GAAG,QAAQ,IAAKE,CAAO,CAE/C,GAAGpB,GAAU,WAAa,EAAE,GAAGA,GAAU,QAAU,GAAG,EAClF,KACE,QAAOA,GAAU,WAAaM,EAAAA,QAElC,ECpCae,EAAcb,GAAkBA,EAAM,WAAW,MAAO,EAAE"}
1
+ {"version":3,"file":"format.cjs","sources":["../src/format/constants.ts","../src/format/number.ts","../src/format/percent.ts","../src/format/skip-spaces.ts"],"sourcesContent":["export const NO_VALUE = '–'; // en-dash\n\nexport const HYPHEN = '-';\n\nexport const INFINITY = '∞';\n","import { parser } from 'yummies/parser';\nimport { typeGuard } from 'yummies/type-guard';\nimport type { Maybe } from 'yummies/utils/types';\nimport { NO_VALUE } from './constants.js';\n\nexport interface NumberFormatSettings {\n delimiter?: string;\n /**\n * digitsOnlyForFloat - Show digits after decimal point only if they are not zeros after converting to number.\n * Example: \"0.00\" -> \"0\", \"0.10\" -> \"0.1\", but \"0.003\" -> \"0.003\"\n *\n * @default true\n */\n digitsOnlyForFloat?: boolean;\n /**\n * Text which will be returned if the value is undefined, null, NaN, Infinity or empty string.\n * Example: \"–\" will be returned if the value is undefined and emptyText is \"–\".\n */\n emptyText?: string;\n /**\n * Text to append to the end of the formatted number.\n * Example: if value is 1000 and postfix is \"₽\", result will be \"1 000₽\".\n */\n postfix?: string;\n /**\n * Fixed number of digits after the decimal point (number.toFixed() method)\n * If set to false, the truncation is ignored!\n */\n digits?: number | false;\n /**\n * Remove trailing zeros from the end of the number\n * Example: 0.010000000000000000000000000000000000000000000 -> 0.01\n */\n cutZeros?: boolean;\n}\n\nexport const number = (\n rawValue: Maybe<string | number>,\n userSettings?: Maybe<NumberFormatSettings>,\n): string => {\n const settings = {\n ...number.defaultSettings,\n ...userSettings,\n };\n\n const digits = settings.digits ?? 0;\n const cutZeros = settings?.cutZeros ?? false;\n const delimiter = settings.delimiter ?? ' ';\n const postfix = settings.postfix ?? '';\n const emptyText = settings.emptyText ?? NO_VALUE;\n const digitsOnlyForFloat = settings.digitsOnlyForFloat ?? true;\n\n let value: Maybe<number>;\n\n if (typeGuard.isString(rawValue)) {\n value = parser.number(value, { fallback: undefined });\n } else {\n value = rawValue;\n }\n\n if (typeGuard.isNumber(value)) {\n let raw: string = `${value}`;\n\n if (digits !== false) {\n raw = value.toFixed(digits);\n }\n if (cutZeros) {\n raw = `${+raw}`;\n }\n\n const [integerPart, decimalPart] = raw.split('.', 2);\n\n let formattedIntegerPart = integerPart;\n let formattedDecimalPart = '';\n\n if (decimalPart && (!digitsOnlyForFloat || !/^0+$/.test(decimalPart))) {\n formattedDecimalPart = `.${decimalPart}`;\n }\n\n const rgx = /(\\d+)(\\d{3})/;\n\n while (rgx.test(formattedIntegerPart) && delimiter) {\n formattedIntegerPart = formattedIntegerPart.replace(\n rgx,\n `$1${delimiter}$2`,\n );\n }\n\n return formattedIntegerPart + formattedDecimalPart + postfix;\n }\n\n return emptyText;\n};\n\nnumber.defaultSettings = {} as NumberFormatSettings;\n","import { parser } from 'yummies/parser';\nimport { typeGuard } from 'yummies/type-guard';\nimport type { Maybe } from 'yummies/utils/types';\n\nimport { NO_VALUE } from './constants.js';\n\nexport interface PercentFormatSettings\n extends Omit<parser.NumberParserSettings, 'fallback'> {\n divider?: string;\n delimiter?: string;\n symbol?: string;\n emptyText?: string;\n}\n\n/**\n * 100 -> 100%\n * 99.123214412 -> 99.12%\n * 99.123214412 -> 99,12%\n */\nexport const percent = (\n value: Maybe<number | string>,\n settings?: PercentFormatSettings,\n) => {\n const numericValue = parser.number(value, {\n ...settings,\n digits: settings?.digits ?? 2,\n fallback: Number.NaN,\n });\n\n if (typeGuard.isNumber(numericValue)) {\n const divider = settings?.divider ?? '.';\n\n const formattedPercent =\n divider === '.' ? numericValue : `${numericValue}`.replace('.', divider);\n\n return `${formattedPercent}${settings?.delimiter ?? ''}${settings?.symbol ?? '%'}`;\n } else {\n return settings?.emptyText ?? NO_VALUE;\n }\n};\n","/**\n * Removes all spaces in string\n */\nexport const skipSpaces = (value: string) => value.replaceAll(/\\s/g, '');\n"],"names":["NO_VALUE","HYPHEN","INFINITY","number","rawValue","userSettings","settings","digits","cutZeros","delimiter","postfix","emptyText","digitsOnlyForFloat","value","typeGuard","parser","raw","integerPart","decimalPart","formattedIntegerPart","formattedDecimalPart","rgx","percent","numericValue","divider","skipSpaces"],"mappings":"kJAAaA,EAAW,IAEXC,EAAS,IAETC,EAAW,ICgCXC,EAAS,CACpBC,EACAC,IACW,CACX,MAAMC,EAAW,CACf,GAAGH,EAAO,gBACV,GAAGE,CAAA,EAGCE,EAASD,EAAS,QAAU,EAC5BE,EAAWF,GAAU,UAAY,GACjCG,EAAYH,EAAS,WAAa,IAClCI,EAAUJ,EAAS,SAAW,GAC9BK,EAAYL,EAAS,WAAaN,EAClCY,EAAqBN,EAAS,oBAAsB,GAE1D,IAAIO,EAQJ,GANIC,EAAAA,UAAU,SAASV,CAAQ,EAC7BS,EAAQE,EAAAA,OAAO,OAAOF,EAAO,CAAE,SAAU,OAAW,EAEpDA,EAAQT,EAGNU,EAAAA,UAAU,SAASD,CAAK,EAAG,CAC7B,IAAIG,EAAc,GAAGH,CAAK,GAEtBN,IAAW,KACbS,EAAMH,EAAM,QAAQN,CAAM,GAExBC,IACFQ,EAAM,GAAG,CAACA,CAAG,IAGf,KAAM,CAACC,EAAaC,CAAW,EAAIF,EAAI,MAAM,IAAK,CAAC,EAEnD,IAAIG,EAAuBF,EACvBG,EAAuB,GAEvBF,IAAgB,CAACN,GAAsB,CAAC,OAAO,KAAKM,CAAW,KACjEE,EAAuB,IAAIF,CAAW,IAGxC,MAAMG,EAAM,eAEZ,KAAOA,EAAI,KAAKF,CAAoB,GAAKV,GACvCU,EAAuBA,EAAqB,QAC1CE,EACA,KAAKZ,CAAS,IAAA,EAIlB,OAAOU,EAAuBC,EAAuBV,CACvD,CAEA,OAAOC,CACT,EAEAR,EAAO,gBAAkB,CAAA,EC3ElB,MAAMmB,EAAU,CACrBT,EACAP,IACG,CACH,MAAMiB,EAAeR,EAAAA,OAAO,OAAOF,EAAO,CACxC,GAAGP,EACH,OAAQA,GAAU,QAAU,EAC5B,SAAU,OAAO,GAAA,CAClB,EAED,GAAIQ,EAAAA,UAAU,SAASS,CAAY,EAAG,CACpC,MAAMC,EAAUlB,GAAU,SAAW,IAKrC,MAAO,GAFLkB,IAAY,IAAMD,EAAe,GAAGA,CAAY,GAAG,QAAQ,IAAKC,CAAO,CAE/C,GAAGlB,GAAU,WAAa,EAAE,GAAGA,GAAU,QAAU,GAAG,EAClF,KACE,QAAOA,GAAU,WAAaN,CAElC,ECpCayB,EAAcZ,GAAkBA,EAAM,WAAW,MAAO,EAAE"}
package/format.js CHANGED
@@ -1,52 +1,49 @@
1
- import { N as n, H as x, I as y } from "./~constants-CFexlSUS.js";
2
- import { parser as P } from "yummies/parser";
3
- import { typeGuard as u } from "yummies/type-guard";
4
- import { n as F } from "./~number-EWff2XI6.js";
5
- import { a as S } from "./~index-C3wKHvHr.js";
6
- const c = (r, e) => {
1
+ import { parser as b } from "yummies/parser";
2
+ import { typeGuard as c } from "yummies/type-guard";
3
+ const a = "–", N = "-", P = "∞", d = (r, e) => {
7
4
  const t = {
8
- ...c.defaultSettings,
5
+ ...d.defaultSettings,
9
6
  ...e
10
- }, i = t.digits ?? 0, m = t?.cutZeros ?? !1, d = t.delimiter ?? " ", b = t.postfix ?? "", $ = t.emptyText ?? n, g = t.digitsOnlyForFloat ?? !0;
7
+ }, i = t.digits ?? 0, m = t?.cutZeros ?? !1, f = t.delimiter ?? " ", g = t.postfix ?? "", $ = t.emptyText ?? a, x = t.digitsOnlyForFloat ?? !0;
11
8
  let o;
12
- if (u.isString(r) ? o = P.number(o, { fallback: void 0 }) : o = r, u.isNumber(o)) {
9
+ if (c.isString(r) ? o = b.number(o, { fallback: void 0 }) : o = r, c.isNumber(o)) {
13
10
  let s = `${o}`;
14
11
  i !== !1 && (s = o.toFixed(i)), m && (s = `${+s}`);
15
- const [N, l] = s.split(".", 2);
16
- let a = N, f = "";
17
- l && (!g || !/^0+$/.test(l)) && (f = `.${l}`);
12
+ const [y, n] = s.split(".", 2);
13
+ let l = y, u = "";
14
+ n && (!x || !/^0+$/.test(n)) && (u = `.${n}`);
18
15
  const p = /(\d+)(\d{3})/;
19
- for (; p.test(a) && d; )
20
- a = a.replace(
16
+ for (; p.test(l) && f; )
17
+ l = l.replace(
21
18
  p,
22
- `$1${d}$2`
19
+ `$1${f}$2`
23
20
  );
24
- return a + f + b;
21
+ return l + u + g;
25
22
  }
26
23
  return $;
27
24
  };
28
- c.defaultSettings = {};
29
- const _ = (r, e) => {
30
- const t = F(r, {
25
+ d.defaultSettings = {};
26
+ const F = (r, e) => {
27
+ const t = b.number(r, {
31
28
  ...e,
32
29
  digits: e?.digits ?? 2,
33
30
  fallback: Number.NaN
34
31
  });
35
- if (S(t)) {
32
+ if (c.isNumber(t)) {
36
33
  const i = e?.divider ?? ".";
37
34
  return `${i === "." ? t : `${t}`.replace(".", i)}${e?.delimiter ?? ""}${e?.symbol ?? "%"}`;
38
35
  } else
39
- return e?.emptyText ?? n;
40
- }, v = (r) => r.replaceAll(/\s/g, ""), j = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
36
+ return e?.emptyText ?? a;
37
+ }, S = (r) => r.replaceAll(/\s/g, ""), O = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
41
38
  __proto__: null,
42
- HYPHEN: x,
43
- INFINITY: y,
44
- NO_VALUE: n,
45
- number: c,
46
- percent: _,
47
- skipSpaces: v
39
+ HYPHEN: N,
40
+ INFINITY: P,
41
+ NO_VALUE: a,
42
+ number: d,
43
+ percent: F,
44
+ skipSpaces: S
48
45
  }, Symbol.toStringTag, { value: "Module" }));
49
46
  export {
50
- j as format
47
+ O as format
51
48
  };
52
49
  //# sourceMappingURL=format.js.map
package/format.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"format.js","sources":["../src/format/number.ts","../src/format/percent.ts","../src/format/skip-spaces.ts"],"sourcesContent":["import { parser } from 'yummies/parser';\nimport { typeGuard } from 'yummies/type-guard';\nimport type { Maybe } from 'yummies/utils/types';\nimport { NO_VALUE } from './constants.js';\n\nexport interface NumberFormatSettings {\n delimiter?: string;\n /**\n * digitsOnlyForFloat - Show digits after decimal point only if they are not zeros after converting to number.\n * Example: \"0.00\" -> \"0\", \"0.10\" -> \"0.1\", but \"0.003\" -> \"0.003\"\n *\n * @default true\n */\n digitsOnlyForFloat?: boolean;\n /**\n * Text which will be returned if the value is undefined, null, NaN, Infinity or empty string.\n * Example: \"–\" will be returned if the value is undefined and emptyText is \"–\".\n */\n emptyText?: string;\n /**\n * Text to append to the end of the formatted number.\n * Example: if value is 1000 and postfix is \"₽\", result will be \"1 000₽\".\n */\n postfix?: string;\n /**\n * Fixed number of digits after the decimal point (number.toFixed() method)\n * If set to false, the truncation is ignored!\n */\n digits?: number | false;\n /**\n * Remove trailing zeros from the end of the number\n * Example: 0.010000000000000000000000000000000000000000000 -> 0.01\n */\n cutZeros?: boolean;\n}\n\nexport const number = (\n rawValue: Maybe<string | number>,\n userSettings?: Maybe<NumberFormatSettings>,\n): string => {\n const settings = {\n ...number.defaultSettings,\n ...userSettings,\n };\n\n const digits = settings.digits ?? 0;\n const cutZeros = settings?.cutZeros ?? false;\n const delimiter = settings.delimiter ?? ' ';\n const postfix = settings.postfix ?? '';\n const emptyText = settings.emptyText ?? NO_VALUE;\n const digitsOnlyForFloat = settings.digitsOnlyForFloat ?? true;\n\n let value: Maybe<number>;\n\n if (typeGuard.isString(rawValue)) {\n value = parser.number(value, { fallback: undefined });\n } else {\n value = rawValue;\n }\n\n if (typeGuard.isNumber(value)) {\n let raw: string = `${value}`;\n\n if (digits !== false) {\n raw = value.toFixed(digits);\n }\n if (cutZeros) {\n raw = `${+raw}`;\n }\n\n const [integerPart, decimalPart] = raw.split('.', 2);\n\n let formattedIntegerPart = integerPart;\n let formattedDecimalPart = '';\n\n if (decimalPart && (!digitsOnlyForFloat || !/^0+$/.test(decimalPart))) {\n formattedDecimalPart = `.${decimalPart}`;\n }\n\n const rgx = /(\\d+)(\\d{3})/;\n\n while (rgx.test(formattedIntegerPart) && delimiter) {\n formattedIntegerPart = formattedIntegerPart.replace(\n rgx,\n `$1${delimiter}$2`,\n );\n }\n\n return formattedIntegerPart + formattedDecimalPart + postfix;\n }\n\n return emptyText;\n};\n\nnumber.defaultSettings = {} as NumberFormatSettings;\n","import type { Maybe } from 'yummies/utils/types';\nimport { type NumberParserSettings, number } from '../parser/number.js';\nimport { typeGuard } from '../type-guard/index.js';\n\nimport { NO_VALUE } from './constants.js';\n\nexport interface PercentFormatSettings\n extends Omit<NumberParserSettings, 'fallback'> {\n divider?: string;\n delimiter?: string;\n symbol?: string;\n emptyText?: string;\n}\n\n/**\n * 100 -> 100%\n * 99.123214412 -> 99.12%\n * 99.123214412 -> 99,12%\n */\nexport const percent = (\n value: Maybe<number | string>,\n settings?: PercentFormatSettings,\n) => {\n const numericValue = number(value, {\n ...settings,\n digits: settings?.digits ?? 2,\n fallback: Number.NaN,\n });\n\n if (typeGuard.isNumber(numericValue)) {\n const divider = settings?.divider ?? '.';\n\n const formattedPercent =\n divider === '.' ? numericValue : `${numericValue}`.replace('.', divider);\n\n return `${formattedPercent}${settings?.delimiter ?? ''}${settings?.symbol ?? '%'}`;\n } else {\n return settings?.emptyText ?? NO_VALUE;\n }\n};\n","/**\n * Removes all spaces in string\n */\nexport const skipSpaces = (value: string) => value.replaceAll(/\\s/g, '');\n"],"names":["number","rawValue","userSettings","settings","digits","cutZeros","delimiter","postfix","emptyText","NO_VALUE","digitsOnlyForFloat","value","typeGuard","parser","raw","integerPart","decimalPart","formattedIntegerPart","formattedDecimalPart","rgx","percent","numericValue","typeGuard.isNumber","divider","skipSpaces"],"mappings":";;;;;AAoCO,MAAMA,IAAS,CACpBC,GACAC,MACW;AACX,QAAMC,IAAW;AAAA,IACf,GAAGH,EAAO;AAAA,IACV,GAAGE;AAAA,EAAA,GAGCE,IAASD,EAAS,UAAU,GAC5BE,IAAWF,GAAU,YAAY,IACjCG,IAAYH,EAAS,aAAa,KAClCI,IAAUJ,EAAS,WAAW,IAC9BK,IAAYL,EAAS,aAAaM,GAClCC,IAAqBP,EAAS,sBAAsB;AAE1D,MAAIQ;AAQJ,MANIC,EAAU,SAASX,CAAQ,IAC7BU,IAAQE,EAAO,OAAOF,GAAO,EAAE,UAAU,QAAW,IAEpDA,IAAQV,GAGNW,EAAU,SAASD,CAAK,GAAG;AAC7B,QAAIG,IAAc,GAAGH,CAAK;AAE1B,IAAIP,MAAW,OACbU,IAAMH,EAAM,QAAQP,CAAM,IAExBC,MACFS,IAAM,GAAG,CAACA,CAAG;AAGf,UAAM,CAACC,GAAaC,CAAW,IAAIF,EAAI,MAAM,KAAK,CAAC;AAEnD,QAAIG,IAAuBF,GACvBG,IAAuB;AAE3B,IAAIF,MAAgB,CAACN,KAAsB,CAAC,OAAO,KAAKM,CAAW,OACjEE,IAAuB,IAAIF,CAAW;AAGxC,UAAMG,IAAM;AAEZ,WAAOA,EAAI,KAAKF,CAAoB,KAAKX;AACvC,MAAAW,IAAuBA,EAAqB;AAAA,QAC1CE;AAAA,QACA,KAAKb,CAAS;AAAA,MAAA;AAIlB,WAAOW,IAAuBC,IAAuBX;AAAA,EACvD;AAEA,SAAOC;AACT;AAEAR,EAAO,kBAAkB,CAAA;AC3ElB,MAAMoB,IAAU,CACrBT,GACAR,MACG;AACH,QAAMkB,IAAerB,EAAOW,GAAO;AAAA,IACjC,GAAGR;AAAA,IACH,QAAQA,GAAU,UAAU;AAAA,IAC5B,UAAU,OAAO;AAAA,EAAA,CAClB;AAED,MAAImB,EAAmBD,CAAY,GAAG;AACpC,UAAME,IAAUpB,GAAU,WAAW;AAKrC,WAAO,GAFLoB,MAAY,MAAMF,IAAe,GAAGA,CAAY,GAAG,QAAQ,KAAKE,CAAO,CAE/C,GAAGpB,GAAU,aAAa,EAAE,GAAGA,GAAU,UAAU,GAAG;AAAA,EAClF;AACE,WAAOA,GAAU,aAAaM;AAElC,GCpCae,IAAa,CAACb,MAAkBA,EAAM,WAAW,OAAO,EAAE;;;;;;;;;"}
1
+ {"version":3,"file":"format.js","sources":["../src/format/constants.ts","../src/format/number.ts","../src/format/percent.ts","../src/format/skip-spaces.ts"],"sourcesContent":["export const NO_VALUE = '–'; // en-dash\n\nexport const HYPHEN = '-';\n\nexport const INFINITY = '∞';\n","import { parser } from 'yummies/parser';\nimport { typeGuard } from 'yummies/type-guard';\nimport type { Maybe } from 'yummies/utils/types';\nimport { NO_VALUE } from './constants.js';\n\nexport interface NumberFormatSettings {\n delimiter?: string;\n /**\n * digitsOnlyForFloat - Show digits after decimal point only if they are not zeros after converting to number.\n * Example: \"0.00\" -> \"0\", \"0.10\" -> \"0.1\", but \"0.003\" -> \"0.003\"\n *\n * @default true\n */\n digitsOnlyForFloat?: boolean;\n /**\n * Text which will be returned if the value is undefined, null, NaN, Infinity or empty string.\n * Example: \"–\" will be returned if the value is undefined and emptyText is \"–\".\n */\n emptyText?: string;\n /**\n * Text to append to the end of the formatted number.\n * Example: if value is 1000 and postfix is \"₽\", result will be \"1 000₽\".\n */\n postfix?: string;\n /**\n * Fixed number of digits after the decimal point (number.toFixed() method)\n * If set to false, the truncation is ignored!\n */\n digits?: number | false;\n /**\n * Remove trailing zeros from the end of the number\n * Example: 0.010000000000000000000000000000000000000000000 -> 0.01\n */\n cutZeros?: boolean;\n}\n\nexport const number = (\n rawValue: Maybe<string | number>,\n userSettings?: Maybe<NumberFormatSettings>,\n): string => {\n const settings = {\n ...number.defaultSettings,\n ...userSettings,\n };\n\n const digits = settings.digits ?? 0;\n const cutZeros = settings?.cutZeros ?? false;\n const delimiter = settings.delimiter ?? ' ';\n const postfix = settings.postfix ?? '';\n const emptyText = settings.emptyText ?? NO_VALUE;\n const digitsOnlyForFloat = settings.digitsOnlyForFloat ?? true;\n\n let value: Maybe<number>;\n\n if (typeGuard.isString(rawValue)) {\n value = parser.number(value, { fallback: undefined });\n } else {\n value = rawValue;\n }\n\n if (typeGuard.isNumber(value)) {\n let raw: string = `${value}`;\n\n if (digits !== false) {\n raw = value.toFixed(digits);\n }\n if (cutZeros) {\n raw = `${+raw}`;\n }\n\n const [integerPart, decimalPart] = raw.split('.', 2);\n\n let formattedIntegerPart = integerPart;\n let formattedDecimalPart = '';\n\n if (decimalPart && (!digitsOnlyForFloat || !/^0+$/.test(decimalPart))) {\n formattedDecimalPart = `.${decimalPart}`;\n }\n\n const rgx = /(\\d+)(\\d{3})/;\n\n while (rgx.test(formattedIntegerPart) && delimiter) {\n formattedIntegerPart = formattedIntegerPart.replace(\n rgx,\n `$1${delimiter}$2`,\n );\n }\n\n return formattedIntegerPart + formattedDecimalPart + postfix;\n }\n\n return emptyText;\n};\n\nnumber.defaultSettings = {} as NumberFormatSettings;\n","import { parser } from 'yummies/parser';\nimport { typeGuard } from 'yummies/type-guard';\nimport type { Maybe } from 'yummies/utils/types';\n\nimport { NO_VALUE } from './constants.js';\n\nexport interface PercentFormatSettings\n extends Omit<parser.NumberParserSettings, 'fallback'> {\n divider?: string;\n delimiter?: string;\n symbol?: string;\n emptyText?: string;\n}\n\n/**\n * 100 -> 100%\n * 99.123214412 -> 99.12%\n * 99.123214412 -> 99,12%\n */\nexport const percent = (\n value: Maybe<number | string>,\n settings?: PercentFormatSettings,\n) => {\n const numericValue = parser.number(value, {\n ...settings,\n digits: settings?.digits ?? 2,\n fallback: Number.NaN,\n });\n\n if (typeGuard.isNumber(numericValue)) {\n const divider = settings?.divider ?? '.';\n\n const formattedPercent =\n divider === '.' ? numericValue : `${numericValue}`.replace('.', divider);\n\n return `${formattedPercent}${settings?.delimiter ?? ''}${settings?.symbol ?? '%'}`;\n } else {\n return settings?.emptyText ?? NO_VALUE;\n }\n};\n","/**\n * Removes all spaces in string\n */\nexport const skipSpaces = (value: string) => value.replaceAll(/\\s/g, '');\n"],"names":["NO_VALUE","HYPHEN","INFINITY","number","rawValue","userSettings","settings","digits","cutZeros","delimiter","postfix","emptyText","digitsOnlyForFloat","value","typeGuard","parser","raw","integerPart","decimalPart","formattedIntegerPart","formattedDecimalPart","rgx","percent","numericValue","divider","skipSpaces"],"mappings":";;AAAO,MAAMA,IAAW,KAEXC,IAAS,KAETC,IAAW,KCgCXC,IAAS,CACpBC,GACAC,MACW;AACX,QAAMC,IAAW;AAAA,IACf,GAAGH,EAAO;AAAA,IACV,GAAGE;AAAA,EAAA,GAGCE,IAASD,EAAS,UAAU,GAC5BE,IAAWF,GAAU,YAAY,IACjCG,IAAYH,EAAS,aAAa,KAClCI,IAAUJ,EAAS,WAAW,IAC9BK,IAAYL,EAAS,aAAaN,GAClCY,IAAqBN,EAAS,sBAAsB;AAE1D,MAAIO;AAQJ,MANIC,EAAU,SAASV,CAAQ,IAC7BS,IAAQE,EAAO,OAAOF,GAAO,EAAE,UAAU,QAAW,IAEpDA,IAAQT,GAGNU,EAAU,SAASD,CAAK,GAAG;AAC7B,QAAIG,IAAc,GAAGH,CAAK;AAE1B,IAAIN,MAAW,OACbS,IAAMH,EAAM,QAAQN,CAAM,IAExBC,MACFQ,IAAM,GAAG,CAACA,CAAG;AAGf,UAAM,CAACC,GAAaC,CAAW,IAAIF,EAAI,MAAM,KAAK,CAAC;AAEnD,QAAIG,IAAuBF,GACvBG,IAAuB;AAE3B,IAAIF,MAAgB,CAACN,KAAsB,CAAC,OAAO,KAAKM,CAAW,OACjEE,IAAuB,IAAIF,CAAW;AAGxC,UAAMG,IAAM;AAEZ,WAAOA,EAAI,KAAKF,CAAoB,KAAKV;AACvC,MAAAU,IAAuBA,EAAqB;AAAA,QAC1CE;AAAA,QACA,KAAKZ,CAAS;AAAA,MAAA;AAIlB,WAAOU,IAAuBC,IAAuBV;AAAA,EACvD;AAEA,SAAOC;AACT;AAEAR,EAAO,kBAAkB,CAAA;AC3ElB,MAAMmB,IAAU,CACrBT,GACAP,MACG;AACH,QAAMiB,IAAeR,EAAO,OAAOF,GAAO;AAAA,IACxC,GAAGP;AAAA,IACH,QAAQA,GAAU,UAAU;AAAA,IAC5B,UAAU,OAAO;AAAA,EAAA,CAClB;AAED,MAAIQ,EAAU,SAASS,CAAY,GAAG;AACpC,UAAMC,IAAUlB,GAAU,WAAW;AAKrC,WAAO,GAFLkB,MAAY,MAAMD,IAAe,GAAGA,CAAY,GAAG,QAAQ,KAAKC,CAAO,CAE/C,GAAGlB,GAAU,aAAa,EAAE,GAAGA,GAAU,UAAU,GAAG;AAAA,EAClF;AACE,WAAOA,GAAU,aAAaN;AAElC,GCpCayB,IAAa,CAACZ,MAAkBA,EAAM,WAAW,OAAO,EAAE;;;;;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"deep-observable-struct.d.ts","sourceRoot":"","sources":["../../src/mobx/deep-observable-struct.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAGrD,qBAAa,oBAAoB,CAAC,KAAK,SAAS,SAAS;IACvD,IAAI,EAAE,KAAK,CAAC;gBAEA,IAAI,EAAE,KAAK;IASvB,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC;CAoD5B"}
1
+ {"version":3,"file":"deep-observable-struct.d.ts","sourceRoot":"","sources":["../../src/mobx/deep-observable-struct.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAErD,qBAAa,oBAAoB,CAAC,KAAK,SAAS,SAAS;IACvD,IAAI,EAAE,KAAK,CAAC;gBAEA,IAAI,EAAE,KAAK;IASvB,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC;CAoD5B"}
package/mobx.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const c=require("mobx"),m=require("./~index-PKNbSTT-.js"),h=(r,s,o)=>{o?(s.forEach(([n,t])=>{t(r,n)}),c.makeObservable(r)):c.makeObservable(r,Object.fromEntries(s))},g=(r,s,o,n)=>{const t=c.createAtom(r,s&&(()=>s(t)),o&&(()=>o(t)));return t.meta=n??{},t.reportChanged=t.reportChanged.bind(t),t.reportObserved=t.reportObserved.bind(t),t};class k{data;constructor(s){this.data=s,c.makeObservable(this,{data:c.observable.deep,set:c.action})}set(s){const o=Object.keys(this.data).map(e=>[e,this.data,s]);let n=0,t=o.length;for(;n<t;){const[e,i,b]=o[n],l=b[e],d=i[e];if(n++,e in b)if(m.isObject(l)&&m.isObject(d)){const v=Object.keys(l);Object.keys(d).forEach(u=>{u in l||delete i[e][u]}),v.forEach(u=>{t=o.push([u,i[e],l])})}else l!==d&&(i[e]=l);else delete i[e]}Object.keys(s).forEach(e=>{this.data[e]||(this.data[e]=s[e])})}}const j=r=>r[c.$mobx],A=({context:r,property:s,onStart:o,onEnd:n,endDelay:t=!1})=>{let e,i;const b=new Set,l=Array.isArray(s)?s:[s],d=()=>{if(b.clear(),t===!1){n?.(i,d),i=void 0;return}e&&(clearTimeout(e),e=void 0),e=setTimeout(()=>{n?.(i,d),e=void 0,i=void 0},t)},v=a=>{const O=b.size>0;b.add(a),!O&&(e&&(clearTimeout(e),e=void 0),i=o?.())},u=a=>{const O=!b.size;b.delete(a);const f=b.size>0;O||f||d()};return l.forEach(a=>{r?(c.onBecomeObserved(r,a,()=>v(a)),c.onBecomeUnobserved(r,a,()=>u(a))):(c.onBecomeObserved(a,()=>v(a)),c.onBecomeUnobserved(a,()=>u(a)))}),d};exports.DeepObservableStruct=k;exports.applyObservable=h;exports.createEnhancedAtom=g;exports.getMobxAdministration=j;exports.lazyObserve=A;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const c=require("mobx"),m=require("yummies/type-guard"),h=(r,s,o)=>{o?(s.forEach(([n,t])=>{t(r,n)}),c.makeObservable(r)):c.makeObservable(r,Object.fromEntries(s))},g=(r,s,o,n)=>{const t=c.createAtom(r,s&&(()=>s(t)),o&&(()=>o(t)));return t.meta=n??{},t.reportChanged=t.reportChanged.bind(t),t.reportObserved=t.reportObserved.bind(t),t};class k{data;constructor(s){this.data=s,c.makeObservable(this,{data:c.observable.deep,set:c.action})}set(s){const o=Object.keys(this.data).map(e=>[e,this.data,s]);let n=0,t=o.length;for(;n<t;){const[e,i,b]=o[n],l=b[e],d=i[e];if(n++,e in b)if(m.typeGuard.isObject(l)&&m.typeGuard.isObject(d)){const v=Object.keys(l);Object.keys(d).forEach(u=>{u in l||delete i[e][u]}),v.forEach(u=>{t=o.push([u,i[e],l])})}else l!==d&&(i[e]=l);else delete i[e]}Object.keys(s).forEach(e=>{this.data[e]||(this.data[e]=s[e])})}}const j=r=>r[c.$mobx],A=({context:r,property:s,onStart:o,onEnd:n,endDelay:t=!1})=>{let e,i;const b=new Set,l=Array.isArray(s)?s:[s],d=()=>{if(b.clear(),t===!1){n?.(i,d),i=void 0;return}e&&(clearTimeout(e),e=void 0),e=setTimeout(()=>{n?.(i,d),e=void 0,i=void 0},t)},v=a=>{const O=b.size>0;b.add(a),!O&&(e&&(clearTimeout(e),e=void 0),i=o?.())},u=a=>{const O=!b.size;b.delete(a);const f=b.size>0;O||f||d()};return l.forEach(a=>{r?(c.onBecomeObserved(r,a,()=>v(a)),c.onBecomeUnobserved(r,a,()=>u(a))):(c.onBecomeObserved(a,()=>v(a)),c.onBecomeUnobserved(a,()=>u(a)))}),d};exports.DeepObservableStruct=k;exports.applyObservable=h;exports.createEnhancedAtom=g;exports.getMobxAdministration=j;exports.lazyObserve=A;
2
2
  //# sourceMappingURL=mobx.cjs.map
package/mobx.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"mobx.cjs","sources":["../src/mobx/apply-observable.ts","../src/mobx/create-enhanced-atom.ts","../src/mobx/deep-observable-struct.ts","../src/mobx/get-mobx-administration.ts","../src/mobx/lazy-observe.ts"],"sourcesContent":["import { makeObservable } from 'mobx';\nimport type { AnyObject } from 'yummies/utils/types';\n\nexport type ObservableAnnotationsArray = [string, any][];\n\nexport const applyObservable = (\n context: AnyObject,\n annotationsArray: ObservableAnnotationsArray,\n useDecorators?: boolean,\n) => {\n if (useDecorators) {\n annotationsArray.forEach(([field, annotation]) => {\n annotation(context, field);\n });\n\n makeObservable(context);\n } else {\n makeObservable(context, Object.fromEntries(annotationsArray));\n }\n};\n","import { createAtom, type IAtom } from 'mobx';\nimport type { AnyObject } from 'yummies/utils/types';\n\nexport interface IEnhancedAtom<TMeta extends AnyObject = AnyObject>\n extends IAtom {\n meta: TMeta;\n}\n\n/**\n * Creates an enhanced atom with meta data\n * And bind `reportChanged` and `reportObserved` method to the atom\n */\nexport const createEnhancedAtom = <TMeta extends AnyObject>(\n name: string,\n onBecomeObservedHandler?: (atom: IEnhancedAtom<TMeta>) => void,\n onBecomeUnobservedHandler?: (atom: IEnhancedAtom<TMeta>) => void,\n meta?: TMeta,\n): IEnhancedAtom<TMeta> => {\n const atom = createAtom(\n name,\n onBecomeObservedHandler && (() => onBecomeObservedHandler(atom)),\n onBecomeUnobservedHandler && (() => onBecomeUnobservedHandler(atom)),\n ) as IEnhancedAtom<TMeta>;\n atom.meta = meta ?? ({} as TMeta);\n atom.reportChanged = atom.reportChanged.bind(atom);\n atom.reportObserved = atom.reportObserved.bind(atom);\n return atom;\n};\n","import { action, makeObservable, observable } from 'mobx';\nimport type { AnyObject } from 'yummies/utils/types';\nimport { typeGuard } from '../type-guard/index.js';\n\nexport class DeepObservableStruct<TData extends AnyObject> {\n data: TData;\n\n constructor(data: TData) {\n this.data = data;\n\n makeObservable(this, {\n data: observable.deep,\n set: action,\n });\n }\n\n set(newData: Partial<TData>) {\n type StackItem = [key: string, currObservable: AnyObject, new: AnyObject];\n\n const stack: StackItem[] = Object.keys(this.data).map((key) => [\n key,\n this.data,\n newData,\n ]);\n\n let currentIndex = 0;\n let stackLength = stack.length;\n\n while (currentIndex < stackLength) {\n const [key, currObservableData, newData] = stack[currentIndex];\n const newValue = newData[key];\n const currValue = currObservableData[key];\n\n currentIndex++;\n\n if (key in newData) {\n if (typeGuard.isObject(newValue) && typeGuard.isObject(currValue)) {\n const newValueKeys = Object.keys(newValue);\n\n Object.keys(currValue).forEach((childKey) => {\n if (!(childKey in newValue)) {\n delete currObservableData[key][childKey];\n }\n });\n\n newValueKeys.forEach((childKey) => {\n const length = stack.push([\n childKey,\n currObservableData[key],\n newValue,\n ]);\n stackLength = length;\n });\n } else if (newValue !== currValue) {\n currObservableData[key] = newValue;\n }\n } else {\n delete currObservableData[key];\n }\n }\n\n Object.keys(newData).forEach((newDataKey) => {\n if (!this.data[newDataKey]) {\n // @ts-expect-error\n this.data[newDataKey] = newData[newDataKey];\n }\n });\n }\n}\n","import { $mobx, type AnnotationMapEntry } from 'mobx';\nimport type { AnyObject } from 'yummies/utils/types';\n\ntype ObservableObjectAdministration = Parameters<\n Exclude<AnnotationMapEntry, boolean>['make_']\n>[0];\n\nexport const getMobxAdministration = (\n context: AnyObject,\n): ObservableObjectAdministration => context[$mobx];\n","import { onBecomeObserved, onBecomeUnobserved } from 'mobx';\n\n/**\n * When ONE OF the properties is becomes observed then `onStart` function is called.\n * WHen ALL properties are unobserved then `onEnd` function is called with the `metaData` that was returned by `onStart`.\n *\n * It uses `onBecomeObserved` and `onBecomeUnobserved` mobx hooks to perform lazy observation.\n */\nexport const lazyObserve = <TMetaData = void>({\n context,\n property,\n onStart,\n onEnd,\n endDelay = false,\n}: {\n context?: any;\n property: any | any[];\n onStart?: () => TMetaData;\n onEnd?: (metaData: TMetaData, cleanupFn: VoidFunction) => void;\n endDelay?: number | false;\n}) => {\n let timeoutId: ReturnType<typeof setTimeout> | undefined;\n let metaData: TMetaData | undefined;\n const observingProps = new Set<string>();\n const properties = Array.isArray(property) ? property : [property];\n\n const cleanup = () => {\n observingProps.clear();\n\n if (endDelay === false) {\n onEnd?.(metaData!, cleanup);\n metaData = undefined;\n return;\n }\n\n if (timeoutId) {\n clearTimeout(timeoutId);\n timeoutId = undefined;\n }\n\n timeoutId = setTimeout(() => {\n onEnd?.(metaData!, cleanup);\n timeoutId = undefined;\n metaData = undefined;\n }, endDelay);\n };\n\n const start = (property: string) => {\n const isAlreadyObserving = observingProps.size > 0;\n observingProps.add(property);\n\n if (isAlreadyObserving) {\n return;\n }\n\n if (timeoutId) {\n clearTimeout(timeoutId);\n timeoutId = undefined;\n }\n\n metaData = onStart?.();\n };\n\n const stop = (property: string) => {\n const isAlreadyNotObserving = !observingProps.size;\n\n observingProps.delete(property);\n\n const isObserving = observingProps.size > 0;\n\n if (isAlreadyNotObserving || isObserving) {\n return;\n }\n\n cleanup();\n };\n\n properties.forEach((property) => {\n if (context) {\n onBecomeObserved(context, property, () => start(property));\n onBecomeUnobserved(context, property, () => stop(property));\n } else {\n onBecomeObserved(property, () => start(property));\n onBecomeUnobserved(property, () => stop(property));\n }\n });\n\n return cleanup;\n};\n"],"names":["applyObservable","context","annotationsArray","useDecorators","field","annotation","makeObservable","createEnhancedAtom","name","onBecomeObservedHandler","onBecomeUnobservedHandler","meta","atom","createAtom","DeepObservableStruct","data","observable","action","newData","stack","key","currentIndex","stackLength","currObservableData","newValue","currValue","typeGuard.isObject","newValueKeys","childKey","newDataKey","getMobxAdministration","$mobx","lazyObserve","property","onStart","onEnd","endDelay","timeoutId","metaData","observingProps","properties","cleanup","start","isAlreadyObserving","stop","isAlreadyNotObserving","isObserving","onBecomeObserved","onBecomeUnobserved"],"mappings":"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"}
1
+ {"version":3,"file":"mobx.cjs","sources":["../src/mobx/apply-observable.ts","../src/mobx/create-enhanced-atom.ts","../src/mobx/deep-observable-struct.ts","../src/mobx/get-mobx-administration.ts","../src/mobx/lazy-observe.ts"],"sourcesContent":["import { makeObservable } from 'mobx';\nimport type { AnyObject } from 'yummies/utils/types';\n\nexport type ObservableAnnotationsArray = [string, any][];\n\nexport const applyObservable = (\n context: AnyObject,\n annotationsArray: ObservableAnnotationsArray,\n useDecorators?: boolean,\n) => {\n if (useDecorators) {\n annotationsArray.forEach(([field, annotation]) => {\n annotation(context, field);\n });\n\n makeObservable(context);\n } else {\n makeObservable(context, Object.fromEntries(annotationsArray));\n }\n};\n","import { createAtom, type IAtom } from 'mobx';\nimport type { AnyObject } from 'yummies/utils/types';\n\nexport interface IEnhancedAtom<TMeta extends AnyObject = AnyObject>\n extends IAtom {\n meta: TMeta;\n}\n\n/**\n * Creates an enhanced atom with meta data\n * And bind `reportChanged` and `reportObserved` method to the atom\n */\nexport const createEnhancedAtom = <TMeta extends AnyObject>(\n name: string,\n onBecomeObservedHandler?: (atom: IEnhancedAtom<TMeta>) => void,\n onBecomeUnobservedHandler?: (atom: IEnhancedAtom<TMeta>) => void,\n meta?: TMeta,\n): IEnhancedAtom<TMeta> => {\n const atom = createAtom(\n name,\n onBecomeObservedHandler && (() => onBecomeObservedHandler(atom)),\n onBecomeUnobservedHandler && (() => onBecomeUnobservedHandler(atom)),\n ) as IEnhancedAtom<TMeta>;\n atom.meta = meta ?? ({} as TMeta);\n atom.reportChanged = atom.reportChanged.bind(atom);\n atom.reportObserved = atom.reportObserved.bind(atom);\n return atom;\n};\n","import { action, makeObservable, observable } from 'mobx';\nimport { typeGuard } from 'yummies/type-guard';\nimport type { AnyObject } from 'yummies/utils/types';\n\nexport class DeepObservableStruct<TData extends AnyObject> {\n data: TData;\n\n constructor(data: TData) {\n this.data = data;\n\n makeObservable(this, {\n data: observable.deep,\n set: action,\n });\n }\n\n set(newData: Partial<TData>) {\n type StackItem = [key: string, currObservable: AnyObject, new: AnyObject];\n\n const stack: StackItem[] = Object.keys(this.data).map((key) => [\n key,\n this.data,\n newData,\n ]);\n\n let currentIndex = 0;\n let stackLength = stack.length;\n\n while (currentIndex < stackLength) {\n const [key, currObservableData, newData] = stack[currentIndex];\n const newValue = newData[key];\n const currValue = currObservableData[key];\n\n currentIndex++;\n\n if (key in newData) {\n if (typeGuard.isObject(newValue) && typeGuard.isObject(currValue)) {\n const newValueKeys = Object.keys(newValue);\n\n Object.keys(currValue).forEach((childKey) => {\n if (!(childKey in newValue)) {\n delete currObservableData[key][childKey];\n }\n });\n\n newValueKeys.forEach((childKey) => {\n const length = stack.push([\n childKey,\n currObservableData[key],\n newValue,\n ]);\n stackLength = length;\n });\n } else if (newValue !== currValue) {\n currObservableData[key] = newValue;\n }\n } else {\n delete currObservableData[key];\n }\n }\n\n Object.keys(newData).forEach((newDataKey) => {\n if (!this.data[newDataKey]) {\n // @ts-expect-error\n this.data[newDataKey] = newData[newDataKey];\n }\n });\n }\n}\n","import { $mobx, type AnnotationMapEntry } from 'mobx';\nimport type { AnyObject } from 'yummies/utils/types';\n\ntype ObservableObjectAdministration = Parameters<\n Exclude<AnnotationMapEntry, boolean>['make_']\n>[0];\n\nexport const getMobxAdministration = (\n context: AnyObject,\n): ObservableObjectAdministration => context[$mobx];\n","import { onBecomeObserved, onBecomeUnobserved } from 'mobx';\n\n/**\n * When ONE OF the properties is becomes observed then `onStart` function is called.\n * WHen ALL properties are unobserved then `onEnd` function is called with the `metaData` that was returned by `onStart`.\n *\n * It uses `onBecomeObserved` and `onBecomeUnobserved` mobx hooks to perform lazy observation.\n */\nexport const lazyObserve = <TMetaData = void>({\n context,\n property,\n onStart,\n onEnd,\n endDelay = false,\n}: {\n context?: any;\n property: any | any[];\n onStart?: () => TMetaData;\n onEnd?: (metaData: TMetaData, cleanupFn: VoidFunction) => void;\n endDelay?: number | false;\n}) => {\n let timeoutId: ReturnType<typeof setTimeout> | undefined;\n let metaData: TMetaData | undefined;\n const observingProps = new Set<string>();\n const properties = Array.isArray(property) ? property : [property];\n\n const cleanup = () => {\n observingProps.clear();\n\n if (endDelay === false) {\n onEnd?.(metaData!, cleanup);\n metaData = undefined;\n return;\n }\n\n if (timeoutId) {\n clearTimeout(timeoutId);\n timeoutId = undefined;\n }\n\n timeoutId = setTimeout(() => {\n onEnd?.(metaData!, cleanup);\n timeoutId = undefined;\n metaData = undefined;\n }, endDelay);\n };\n\n const start = (property: string) => {\n const isAlreadyObserving = observingProps.size > 0;\n observingProps.add(property);\n\n if (isAlreadyObserving) {\n return;\n }\n\n if (timeoutId) {\n clearTimeout(timeoutId);\n timeoutId = undefined;\n }\n\n metaData = onStart?.();\n };\n\n const stop = (property: string) => {\n const isAlreadyNotObserving = !observingProps.size;\n\n observingProps.delete(property);\n\n const isObserving = observingProps.size > 0;\n\n if (isAlreadyNotObserving || isObserving) {\n return;\n }\n\n cleanup();\n };\n\n properties.forEach((property) => {\n if (context) {\n onBecomeObserved(context, property, () => start(property));\n onBecomeUnobserved(context, property, () => stop(property));\n } else {\n onBecomeObserved(property, () => start(property));\n onBecomeUnobserved(property, () => stop(property));\n }\n });\n\n return cleanup;\n};\n"],"names":["applyObservable","context","annotationsArray","useDecorators","field","annotation","makeObservable","createEnhancedAtom","name","onBecomeObservedHandler","onBecomeUnobservedHandler","meta","atom","createAtom","DeepObservableStruct","data","observable","action","newData","stack","key","currentIndex","stackLength","currObservableData","newValue","currValue","typeGuard","newValueKeys","childKey","newDataKey","getMobxAdministration","$mobx","lazyObserve","property","onStart","onEnd","endDelay","timeoutId","metaData","observingProps","properties","cleanup","start","isAlreadyObserving","stop","isAlreadyNotObserving","isObserving","onBecomeObserved","onBecomeUnobserved"],"mappings":"wIAKaA,EAAkB,CAC7BC,EACAC,EACAC,IACG,CACCA,GACFD,EAAiB,QAAQ,CAAC,CAACE,EAAOC,CAAU,IAAM,CAChDA,EAAWJ,EAASG,CAAK,CAC3B,CAAC,EAEDE,EAAAA,eAAeL,CAAO,GAEtBK,EAAAA,eAAeL,EAAS,OAAO,YAAYC,CAAgB,CAAC,CAEhE,ECPaK,EAAqB,CAChCC,EACAC,EACAC,EACAC,IACyB,CACzB,MAAMC,EAAOC,EAAAA,WACXL,EACAC,IAA4B,IAAMA,EAAwBG,CAAI,GAC9DF,IAA8B,IAAMA,EAA0BE,CAAI,EAAA,EAEpE,OAAAA,EAAK,KAAOD,GAAS,CAAA,EACrBC,EAAK,cAAgBA,EAAK,cAAc,KAAKA,CAAI,EACjDA,EAAK,eAAiBA,EAAK,eAAe,KAAKA,CAAI,EAC5CA,CACT,ECvBO,MAAME,CAA8C,CACzD,KAEA,YAAYC,EAAa,CACvB,KAAK,KAAOA,EAEZT,EAAAA,eAAe,KAAM,CACnB,KAAMU,EAAAA,WAAW,KACjB,IAAKC,EAAAA,MAAA,CACN,CACH,CAEA,IAAIC,EAAyB,CAG3B,MAAMC,EAAqB,OAAO,KAAK,KAAK,IAAI,EAAE,IAAKC,GAAQ,CAC7DA,EACA,KAAK,KACLF,CAAA,CACD,EAED,IAAIG,EAAe,EACfC,EAAcH,EAAM,OAExB,KAAOE,EAAeC,GAAa,CACjC,KAAM,CAACF,EAAKG,EAAoBL,CAAO,EAAIC,EAAME,CAAY,EACvDG,EAAWN,EAAQE,CAAG,EACtBK,EAAYF,EAAmBH,CAAG,EAIxC,GAFAC,IAEID,KAAOF,EACT,GAAIQ,EAAAA,UAAU,SAASF,CAAQ,GAAKE,EAAAA,UAAU,SAASD,CAAS,EAAG,CACjE,MAAME,EAAe,OAAO,KAAKH,CAAQ,EAEzC,OAAO,KAAKC,CAAS,EAAE,QAASG,GAAa,CACrCA,KAAYJ,GAChB,OAAOD,EAAmBH,CAAG,EAAEQ,CAAQ,CAE3C,CAAC,EAEDD,EAAa,QAASC,GAAa,CAMjCN,EALeH,EAAM,KAAK,CACxBS,EACAL,EAAmBH,CAAG,EACtBI,CAAA,CACD,CAEH,CAAC,CACH,MAAWA,IAAaC,IACtBF,EAAmBH,CAAG,EAAII,QAG5B,OAAOD,EAAmBH,CAAG,CAEjC,CAEA,OAAO,KAAKF,CAAO,EAAE,QAASW,GAAe,CACtC,KAAK,KAAKA,CAAU,IAEvB,KAAK,KAAKA,CAAU,EAAIX,EAAQW,CAAU,EAE9C,CAAC,CACH,CACF,CC7DO,MAAMC,EACX7B,GACmCA,EAAQ8B,EAAAA,KAAK,ECDrCC,EAAc,CAAmB,CAC5C,QAAA/B,EACA,SAAAgC,EACA,QAAAC,EACA,MAAAC,EACA,SAAAC,EAAW,EACb,IAMM,CACJ,IAAIC,EACAC,EACJ,MAAMC,MAAqB,IACrBC,EAAa,MAAM,QAAQP,CAAQ,EAAIA,EAAW,CAACA,CAAQ,EAE3DQ,EAAU,IAAM,CAGpB,GAFAF,EAAe,MAAA,EAEXH,IAAa,GAAO,CACtBD,IAAQG,EAAWG,CAAO,EAC1BH,EAAW,OACX,MACF,CAEID,IACF,aAAaA,CAAS,EACtBA,EAAY,QAGdA,EAAY,WAAW,IAAM,CAC3BF,IAAQG,EAAWG,CAAO,EAC1BJ,EAAY,OACZC,EAAW,MACb,EAAGF,CAAQ,CACb,EAEMM,EAAST,GAAqB,CAClC,MAAMU,EAAqBJ,EAAe,KAAO,EACjDA,EAAe,IAAIN,CAAQ,EAEvB,CAAAU,IAIAN,IACF,aAAaA,CAAS,EACtBA,EAAY,QAGdC,EAAWJ,IAAA,EACb,EAEMU,EAAQX,GAAqB,CACjC,MAAMY,EAAwB,CAACN,EAAe,KAE9CA,EAAe,OAAON,CAAQ,EAE9B,MAAMa,EAAcP,EAAe,KAAO,EAEtCM,GAAyBC,GAI7BL,EAAA,CACF,EAEA,OAAAD,EAAW,QAASP,GAAa,CAC3BhC,GACF8C,EAAAA,iBAAiB9C,EAASgC,EAAU,IAAMS,EAAMT,CAAQ,CAAC,EACzDe,EAAAA,mBAAmB/C,EAASgC,EAAU,IAAMW,EAAKX,CAAQ,CAAC,IAE1Dc,EAAAA,iBAAiBd,EAAU,IAAMS,EAAMT,CAAQ,CAAC,EAChDe,EAAAA,mBAAmBf,EAAU,IAAMW,EAAKX,CAAQ,CAAC,EAErD,CAAC,EAEMQ,CACT"}
package/mobx.js CHANGED
@@ -1,9 +1,9 @@
1
- import { makeObservable as u, createAtom as k, action as j, observable as A, $mobx as E, onBecomeObserved as m, onBecomeUnobserved as v } from "mobx";
2
- import { b as O } from "./~index-C3wKHvHr.js";
1
+ import { makeObservable as h, createAtom as k, action as j, observable as A, $mobx as E, onBecomeObserved as m, onBecomeUnobserved as v } from "mobx";
2
+ import { typeGuard as O } from "yummies/type-guard";
3
3
  const V = (a, s, c) => {
4
4
  c ? (s.forEach(([o, t]) => {
5
5
  t(a, o);
6
- }), u(a)) : u(a, Object.fromEntries(s));
6
+ }), h(a)) : h(a, Object.fromEntries(s));
7
7
  }, C = (a, s, c, o) => {
8
8
  const t = k(
9
9
  a,
@@ -15,7 +15,7 @@ const V = (a, s, c) => {
15
15
  class I {
16
16
  data;
17
17
  constructor(s) {
18
- this.data = s, u(this, {
18
+ this.data = s, h(this, {
19
19
  data: A.deep,
20
20
  set: j
21
21
  });
@@ -30,7 +30,7 @@ class I {
30
30
  for (; o < t; ) {
31
31
  const [e, r, n] = c[o], l = n[e], b = r[e];
32
32
  if (o++, e in n)
33
- if (O(l) && O(b)) {
33
+ if (O.isObject(l) && O.isObject(b)) {
34
34
  const f = Object.keys(l);
35
35
  Object.keys(b).forEach((d) => {
36
36
  d in l || delete r[e][d];
@@ -50,7 +50,7 @@ class I {
50
50
  });
51
51
  }
52
52
  }
53
- const S = (a) => a[E], w = ({
53
+ const S = (a) => a[E], p = ({
54
54
  context: a,
55
55
  property: s,
56
56
  onStart: c,
@@ -67,13 +67,13 @@ const S = (a) => a[E], w = ({
67
67
  o?.(r, b), e = void 0, r = void 0;
68
68
  }, t);
69
69
  }, f = (i) => {
70
- const h = n.size > 0;
71
- n.add(i), !h && (e && (clearTimeout(e), e = void 0), r = c?.());
70
+ const u = n.size > 0;
71
+ n.add(i), !u && (e && (clearTimeout(e), e = void 0), r = c?.());
72
72
  }, d = (i) => {
73
- const h = !n.size;
73
+ const u = !n.size;
74
74
  n.delete(i);
75
75
  const g = n.size > 0;
76
- h || g || b();
76
+ u || g || b();
77
77
  };
78
78
  return l.forEach((i) => {
79
79
  a ? (m(a, i, () => f(i)), v(a, i, () => d(i))) : (m(i, () => f(i)), v(i, () => d(i)));
@@ -84,6 +84,6 @@ export {
84
84
  V as applyObservable,
85
85
  C as createEnhancedAtom,
86
86
  S as getMobxAdministration,
87
- w as lazyObserve
87
+ p as lazyObserve
88
88
  };
89
89
  //# sourceMappingURL=mobx.js.map
package/mobx.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"mobx.js","sources":["../src/mobx/apply-observable.ts","../src/mobx/create-enhanced-atom.ts","../src/mobx/deep-observable-struct.ts","../src/mobx/get-mobx-administration.ts","../src/mobx/lazy-observe.ts"],"sourcesContent":["import { makeObservable } from 'mobx';\nimport type { AnyObject } from 'yummies/utils/types';\n\nexport type ObservableAnnotationsArray = [string, any][];\n\nexport const applyObservable = (\n context: AnyObject,\n annotationsArray: ObservableAnnotationsArray,\n useDecorators?: boolean,\n) => {\n if (useDecorators) {\n annotationsArray.forEach(([field, annotation]) => {\n annotation(context, field);\n });\n\n makeObservable(context);\n } else {\n makeObservable(context, Object.fromEntries(annotationsArray));\n }\n};\n","import { createAtom, type IAtom } from 'mobx';\nimport type { AnyObject } from 'yummies/utils/types';\n\nexport interface IEnhancedAtom<TMeta extends AnyObject = AnyObject>\n extends IAtom {\n meta: TMeta;\n}\n\n/**\n * Creates an enhanced atom with meta data\n * And bind `reportChanged` and `reportObserved` method to the atom\n */\nexport const createEnhancedAtom = <TMeta extends AnyObject>(\n name: string,\n onBecomeObservedHandler?: (atom: IEnhancedAtom<TMeta>) => void,\n onBecomeUnobservedHandler?: (atom: IEnhancedAtom<TMeta>) => void,\n meta?: TMeta,\n): IEnhancedAtom<TMeta> => {\n const atom = createAtom(\n name,\n onBecomeObservedHandler && (() => onBecomeObservedHandler(atom)),\n onBecomeUnobservedHandler && (() => onBecomeUnobservedHandler(atom)),\n ) as IEnhancedAtom<TMeta>;\n atom.meta = meta ?? ({} as TMeta);\n atom.reportChanged = atom.reportChanged.bind(atom);\n atom.reportObserved = atom.reportObserved.bind(atom);\n return atom;\n};\n","import { action, makeObservable, observable } from 'mobx';\nimport type { AnyObject } from 'yummies/utils/types';\nimport { typeGuard } from '../type-guard/index.js';\n\nexport class DeepObservableStruct<TData extends AnyObject> {\n data: TData;\n\n constructor(data: TData) {\n this.data = data;\n\n makeObservable(this, {\n data: observable.deep,\n set: action,\n });\n }\n\n set(newData: Partial<TData>) {\n type StackItem = [key: string, currObservable: AnyObject, new: AnyObject];\n\n const stack: StackItem[] = Object.keys(this.data).map((key) => [\n key,\n this.data,\n newData,\n ]);\n\n let currentIndex = 0;\n let stackLength = stack.length;\n\n while (currentIndex < stackLength) {\n const [key, currObservableData, newData] = stack[currentIndex];\n const newValue = newData[key];\n const currValue = currObservableData[key];\n\n currentIndex++;\n\n if (key in newData) {\n if (typeGuard.isObject(newValue) && typeGuard.isObject(currValue)) {\n const newValueKeys = Object.keys(newValue);\n\n Object.keys(currValue).forEach((childKey) => {\n if (!(childKey in newValue)) {\n delete currObservableData[key][childKey];\n }\n });\n\n newValueKeys.forEach((childKey) => {\n const length = stack.push([\n childKey,\n currObservableData[key],\n newValue,\n ]);\n stackLength = length;\n });\n } else if (newValue !== currValue) {\n currObservableData[key] = newValue;\n }\n } else {\n delete currObservableData[key];\n }\n }\n\n Object.keys(newData).forEach((newDataKey) => {\n if (!this.data[newDataKey]) {\n // @ts-expect-error\n this.data[newDataKey] = newData[newDataKey];\n }\n });\n }\n}\n","import { $mobx, type AnnotationMapEntry } from 'mobx';\nimport type { AnyObject } from 'yummies/utils/types';\n\ntype ObservableObjectAdministration = Parameters<\n Exclude<AnnotationMapEntry, boolean>['make_']\n>[0];\n\nexport const getMobxAdministration = (\n context: AnyObject,\n): ObservableObjectAdministration => context[$mobx];\n","import { onBecomeObserved, onBecomeUnobserved } from 'mobx';\n\n/**\n * When ONE OF the properties is becomes observed then `onStart` function is called.\n * WHen ALL properties are unobserved then `onEnd` function is called with the `metaData` that was returned by `onStart`.\n *\n * It uses `onBecomeObserved` and `onBecomeUnobserved` mobx hooks to perform lazy observation.\n */\nexport const lazyObserve = <TMetaData = void>({\n context,\n property,\n onStart,\n onEnd,\n endDelay = false,\n}: {\n context?: any;\n property: any | any[];\n onStart?: () => TMetaData;\n onEnd?: (metaData: TMetaData, cleanupFn: VoidFunction) => void;\n endDelay?: number | false;\n}) => {\n let timeoutId: ReturnType<typeof setTimeout> | undefined;\n let metaData: TMetaData | undefined;\n const observingProps = new Set<string>();\n const properties = Array.isArray(property) ? property : [property];\n\n const cleanup = () => {\n observingProps.clear();\n\n if (endDelay === false) {\n onEnd?.(metaData!, cleanup);\n metaData = undefined;\n return;\n }\n\n if (timeoutId) {\n clearTimeout(timeoutId);\n timeoutId = undefined;\n }\n\n timeoutId = setTimeout(() => {\n onEnd?.(metaData!, cleanup);\n timeoutId = undefined;\n metaData = undefined;\n }, endDelay);\n };\n\n const start = (property: string) => {\n const isAlreadyObserving = observingProps.size > 0;\n observingProps.add(property);\n\n if (isAlreadyObserving) {\n return;\n }\n\n if (timeoutId) {\n clearTimeout(timeoutId);\n timeoutId = undefined;\n }\n\n metaData = onStart?.();\n };\n\n const stop = (property: string) => {\n const isAlreadyNotObserving = !observingProps.size;\n\n observingProps.delete(property);\n\n const isObserving = observingProps.size > 0;\n\n if (isAlreadyNotObserving || isObserving) {\n return;\n }\n\n cleanup();\n };\n\n properties.forEach((property) => {\n if (context) {\n onBecomeObserved(context, property, () => start(property));\n onBecomeUnobserved(context, property, () => stop(property));\n } else {\n onBecomeObserved(property, () => start(property));\n onBecomeUnobserved(property, () => stop(property));\n }\n });\n\n return cleanup;\n};\n"],"names":["applyObservable","context","annotationsArray","useDecorators","field","annotation","makeObservable","createEnhancedAtom","name","onBecomeObservedHandler","onBecomeUnobservedHandler","meta","atom","createAtom","DeepObservableStruct","data","observable","action","newData","stack","key","currentIndex","stackLength","currObservableData","newValue","currValue","typeGuard.isObject","newValueKeys","childKey","newDataKey","getMobxAdministration","$mobx","lazyObserve","property","onStart","onEnd","endDelay","timeoutId","metaData","observingProps","properties","cleanup","start","isAlreadyObserving","stop","isAlreadyNotObserving","isObserving","onBecomeObserved","onBecomeUnobserved"],"mappings":"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"}
1
+ {"version":3,"file":"mobx.js","sources":["../src/mobx/apply-observable.ts","../src/mobx/create-enhanced-atom.ts","../src/mobx/deep-observable-struct.ts","../src/mobx/get-mobx-administration.ts","../src/mobx/lazy-observe.ts"],"sourcesContent":["import { makeObservable } from 'mobx';\nimport type { AnyObject } from 'yummies/utils/types';\n\nexport type ObservableAnnotationsArray = [string, any][];\n\nexport const applyObservable = (\n context: AnyObject,\n annotationsArray: ObservableAnnotationsArray,\n useDecorators?: boolean,\n) => {\n if (useDecorators) {\n annotationsArray.forEach(([field, annotation]) => {\n annotation(context, field);\n });\n\n makeObservable(context);\n } else {\n makeObservable(context, Object.fromEntries(annotationsArray));\n }\n};\n","import { createAtom, type IAtom } from 'mobx';\nimport type { AnyObject } from 'yummies/utils/types';\n\nexport interface IEnhancedAtom<TMeta extends AnyObject = AnyObject>\n extends IAtom {\n meta: TMeta;\n}\n\n/**\n * Creates an enhanced atom with meta data\n * And bind `reportChanged` and `reportObserved` method to the atom\n */\nexport const createEnhancedAtom = <TMeta extends AnyObject>(\n name: string,\n onBecomeObservedHandler?: (atom: IEnhancedAtom<TMeta>) => void,\n onBecomeUnobservedHandler?: (atom: IEnhancedAtom<TMeta>) => void,\n meta?: TMeta,\n): IEnhancedAtom<TMeta> => {\n const atom = createAtom(\n name,\n onBecomeObservedHandler && (() => onBecomeObservedHandler(atom)),\n onBecomeUnobservedHandler && (() => onBecomeUnobservedHandler(atom)),\n ) as IEnhancedAtom<TMeta>;\n atom.meta = meta ?? ({} as TMeta);\n atom.reportChanged = atom.reportChanged.bind(atom);\n atom.reportObserved = atom.reportObserved.bind(atom);\n return atom;\n};\n","import { action, makeObservable, observable } from 'mobx';\nimport { typeGuard } from 'yummies/type-guard';\nimport type { AnyObject } from 'yummies/utils/types';\n\nexport class DeepObservableStruct<TData extends AnyObject> {\n data: TData;\n\n constructor(data: TData) {\n this.data = data;\n\n makeObservable(this, {\n data: observable.deep,\n set: action,\n });\n }\n\n set(newData: Partial<TData>) {\n type StackItem = [key: string, currObservable: AnyObject, new: AnyObject];\n\n const stack: StackItem[] = Object.keys(this.data).map((key) => [\n key,\n this.data,\n newData,\n ]);\n\n let currentIndex = 0;\n let stackLength = stack.length;\n\n while (currentIndex < stackLength) {\n const [key, currObservableData, newData] = stack[currentIndex];\n const newValue = newData[key];\n const currValue = currObservableData[key];\n\n currentIndex++;\n\n if (key in newData) {\n if (typeGuard.isObject(newValue) && typeGuard.isObject(currValue)) {\n const newValueKeys = Object.keys(newValue);\n\n Object.keys(currValue).forEach((childKey) => {\n if (!(childKey in newValue)) {\n delete currObservableData[key][childKey];\n }\n });\n\n newValueKeys.forEach((childKey) => {\n const length = stack.push([\n childKey,\n currObservableData[key],\n newValue,\n ]);\n stackLength = length;\n });\n } else if (newValue !== currValue) {\n currObservableData[key] = newValue;\n }\n } else {\n delete currObservableData[key];\n }\n }\n\n Object.keys(newData).forEach((newDataKey) => {\n if (!this.data[newDataKey]) {\n // @ts-expect-error\n this.data[newDataKey] = newData[newDataKey];\n }\n });\n }\n}\n","import { $mobx, type AnnotationMapEntry } from 'mobx';\nimport type { AnyObject } from 'yummies/utils/types';\n\ntype ObservableObjectAdministration = Parameters<\n Exclude<AnnotationMapEntry, boolean>['make_']\n>[0];\n\nexport const getMobxAdministration = (\n context: AnyObject,\n): ObservableObjectAdministration => context[$mobx];\n","import { onBecomeObserved, onBecomeUnobserved } from 'mobx';\n\n/**\n * When ONE OF the properties is becomes observed then `onStart` function is called.\n * WHen ALL properties are unobserved then `onEnd` function is called with the `metaData` that was returned by `onStart`.\n *\n * It uses `onBecomeObserved` and `onBecomeUnobserved` mobx hooks to perform lazy observation.\n */\nexport const lazyObserve = <TMetaData = void>({\n context,\n property,\n onStart,\n onEnd,\n endDelay = false,\n}: {\n context?: any;\n property: any | any[];\n onStart?: () => TMetaData;\n onEnd?: (metaData: TMetaData, cleanupFn: VoidFunction) => void;\n endDelay?: number | false;\n}) => {\n let timeoutId: ReturnType<typeof setTimeout> | undefined;\n let metaData: TMetaData | undefined;\n const observingProps = new Set<string>();\n const properties = Array.isArray(property) ? property : [property];\n\n const cleanup = () => {\n observingProps.clear();\n\n if (endDelay === false) {\n onEnd?.(metaData!, cleanup);\n metaData = undefined;\n return;\n }\n\n if (timeoutId) {\n clearTimeout(timeoutId);\n timeoutId = undefined;\n }\n\n timeoutId = setTimeout(() => {\n onEnd?.(metaData!, cleanup);\n timeoutId = undefined;\n metaData = undefined;\n }, endDelay);\n };\n\n const start = (property: string) => {\n const isAlreadyObserving = observingProps.size > 0;\n observingProps.add(property);\n\n if (isAlreadyObserving) {\n return;\n }\n\n if (timeoutId) {\n clearTimeout(timeoutId);\n timeoutId = undefined;\n }\n\n metaData = onStart?.();\n };\n\n const stop = (property: string) => {\n const isAlreadyNotObserving = !observingProps.size;\n\n observingProps.delete(property);\n\n const isObserving = observingProps.size > 0;\n\n if (isAlreadyNotObserving || isObserving) {\n return;\n }\n\n cleanup();\n };\n\n properties.forEach((property) => {\n if (context) {\n onBecomeObserved(context, property, () => start(property));\n onBecomeUnobserved(context, property, () => stop(property));\n } else {\n onBecomeObserved(property, () => start(property));\n onBecomeUnobserved(property, () => stop(property));\n }\n });\n\n return cleanup;\n};\n"],"names":["applyObservable","context","annotationsArray","useDecorators","field","annotation","makeObservable","createEnhancedAtom","name","onBecomeObservedHandler","onBecomeUnobservedHandler","meta","atom","createAtom","DeepObservableStruct","data","observable","action","newData","stack","key","currentIndex","stackLength","currObservableData","newValue","currValue","typeGuard","newValueKeys","childKey","newDataKey","getMobxAdministration","$mobx","lazyObserve","property","onStart","onEnd","endDelay","timeoutId","metaData","observingProps","properties","cleanup","start","isAlreadyObserving","stop","isAlreadyNotObserving","isObserving","onBecomeObserved","onBecomeUnobserved"],"mappings":"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"}