@turndown/library 0.1.53 → 0.1.55
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/dist/index.cjs +200 -146
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +348 -338
- package/dist/index.d.ts +348 -338
- package/dist/index.mjs +199 -146
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../node_modules/dayjs/dayjs.min.js","../node_modules/dayjs/plugin/isoWeek.js","../node_modules/dayjs/plugin/relativeTime.js","../src/index.ts","../src/helpers/date/index.ts","../src/helpers/object/index.ts","../src/helpers/string/index.ts","../src/types/api/index.ts","../src/types/auth/index.ts","../src/types/base/paging.types.ts","../src/types/base/index.ts","../src/types/company/routes.ts","../src/types/company/index.ts","../src/types/damage-report/index.ts","../src/types/errors/index.ts","../src/types/image/index.ts","../src/types/inventory/index.ts","../src/types/property/index.ts","../src/types/room/index.ts","../src/types/subscription/index.ts","../src/types/user/index.ts","../src/types/work-session/index.ts"],"sourcesContent":["!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs=e()}(this,(function(){\"use strict\";var t=1e3,e=6e4,n=36e5,r=\"millisecond\",i=\"second\",s=\"minute\",u=\"hour\",a=\"day\",o=\"week\",c=\"month\",f=\"quarter\",h=\"year\",d=\"date\",l=\"Invalid Date\",$=/^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[Tt\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/,y=/\\[([^\\]]+)]|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,M={name:\"en\",weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),ordinal:function(t){var e=[\"th\",\"st\",\"nd\",\"rd\"],n=t%100;return\"[\"+t+(e[(n-20)%10]||e[n]||e[0])+\"]\"}},m=function(t,e,n){var r=String(t);return!r||r.length>=e?t:\"\"+Array(e+1-r.length).join(n)+t},v={s:m,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),i=n%60;return(e<=0?\"+\":\"-\")+m(r,2,\"0\")+\":\"+m(i,2,\"0\")},m:function t(e,n){if(e.date()<n.date())return-t(n,e);var r=12*(n.year()-e.year())+(n.month()-e.month()),i=e.clone().add(r,c),s=n-i<0,u=e.clone().add(r+(s?-1:1),c);return+(-(r+(n-i)/(s?i-u:u-i))||0)},a:function(t){return t<0?Math.ceil(t)||0:Math.floor(t)},p:function(t){return{M:c,y:h,w:o,d:a,D:d,h:u,m:s,s:i,ms:r,Q:f}[t]||String(t||\"\").toLowerCase().replace(/s$/,\"\")},u:function(t){return void 0===t}},g=\"en\",D={};D[g]=M;var p=\"$isDayjsObject\",S=function(t){return t instanceof _||!(!t||!t[p])},w=function t(e,n,r){var i;if(!e)return g;if(\"string\"==typeof e){var s=e.toLowerCase();D[s]&&(i=s),n&&(D[s]=n,i=s);var u=e.split(\"-\");if(!i&&u.length>1)return t(u[0])}else{var a=e.name;D[a]=e,i=a}return!r&&i&&(g=i),i||!r&&g},O=function(t,e){if(S(t))return t.clone();var n=\"object\"==typeof e?e:{};return n.date=t,n.args=arguments,new _(n)},b=v;b.l=w,b.i=S,b.w=function(t,e){return O(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var _=function(){function M(t){this.$L=w(t.locale,null,!0),this.parse(t),this.$x=this.$x||t.x||{},this[p]=!0}var m=M.prototype;return m.parse=function(t){this.$d=function(t){var e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(b.u(e))return new Date;if(e instanceof Date)return new Date(e);if(\"string\"==typeof e&&!/Z$/i.test(e)){var r=e.match($);if(r){var i=r[2]-1||0,s=(r[7]||\"0\").substring(0,3);return n?new Date(Date.UTC(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)):new Date(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)}}return new Date(e)}(t),this.init()},m.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},m.$utils=function(){return b},m.isValid=function(){return!(this.$d.toString()===l)},m.isSame=function(t,e){var n=O(t);return this.startOf(e)<=n&&n<=this.endOf(e)},m.isAfter=function(t,e){return O(t)<this.startOf(e)},m.isBefore=function(t,e){return this.endOf(e)<O(t)},m.$g=function(t,e,n){return b.u(t)?this[e]:this.set(n,t)},m.unix=function(){return Math.floor(this.valueOf()/1e3)},m.valueOf=function(){return this.$d.getTime()},m.startOf=function(t,e){var n=this,r=!!b.u(e)||e,f=b.p(t),l=function(t,e){var i=b.w(n.$u?Date.UTC(n.$y,e,t):new Date(n.$y,e,t),n);return r?i:i.endOf(a)},$=function(t,e){return b.w(n.toDate()[t].apply(n.toDate(\"s\"),(r?[0,0,0,0]:[23,59,59,999]).slice(e)),n)},y=this.$W,M=this.$M,m=this.$D,v=\"set\"+(this.$u?\"UTC\":\"\");switch(f){case h:return r?l(1,0):l(31,11);case c:return r?l(1,M):l(0,M+1);case o:var g=this.$locale().weekStart||0,D=(y<g?y+7:y)-g;return l(r?m-D:m+(6-D),M);case a:case d:return $(v+\"Hours\",0);case u:return $(v+\"Minutes\",1);case s:return $(v+\"Seconds\",2);case i:return $(v+\"Milliseconds\",3);default:return this.clone()}},m.endOf=function(t){return this.startOf(t,!1)},m.$set=function(t,e){var n,o=b.p(t),f=\"set\"+(this.$u?\"UTC\":\"\"),l=(n={},n[a]=f+\"Date\",n[d]=f+\"Date\",n[c]=f+\"Month\",n[h]=f+\"FullYear\",n[u]=f+\"Hours\",n[s]=f+\"Minutes\",n[i]=f+\"Seconds\",n[r]=f+\"Milliseconds\",n)[o],$=o===a?this.$D+(e-this.$W):e;if(o===c||o===h){var y=this.clone().set(d,1);y.$d[l]($),y.init(),this.$d=y.set(d,Math.min(this.$D,y.daysInMonth())).$d}else l&&this.$d[l]($);return this.init(),this},m.set=function(t,e){return this.clone().$set(t,e)},m.get=function(t){return this[b.p(t)]()},m.add=function(r,f){var d,l=this;r=Number(r);var $=b.p(f),y=function(t){var e=O(l);return b.w(e.date(e.date()+Math.round(t*r)),l)};if($===c)return this.set(c,this.$M+r);if($===h)return this.set(h,this.$y+r);if($===a)return y(1);if($===o)return y(7);var M=(d={},d[s]=e,d[u]=n,d[i]=t,d)[$]||1,m=this.$d.getTime()+r*M;return b.w(m,this)},m.subtract=function(t,e){return this.add(-1*t,e)},m.format=function(t){var e=this,n=this.$locale();if(!this.isValid())return n.invalidDate||l;var r=t||\"YYYY-MM-DDTHH:mm:ssZ\",i=b.z(this),s=this.$H,u=this.$m,a=this.$M,o=n.weekdays,c=n.months,f=n.meridiem,h=function(t,n,i,s){return t&&(t[n]||t(e,r))||i[n].slice(0,s)},d=function(t){return b.s(s%12||12,t,\"0\")},$=f||function(t,e,n){var r=t<12?\"AM\":\"PM\";return n?r.toLowerCase():r};return r.replace(y,(function(t,r){return r||function(t){switch(t){case\"YY\":return String(e.$y).slice(-2);case\"YYYY\":return b.s(e.$y,4,\"0\");case\"M\":return a+1;case\"MM\":return b.s(a+1,2,\"0\");case\"MMM\":return h(n.monthsShort,a,c,3);case\"MMMM\":return h(c,a);case\"D\":return e.$D;case\"DD\":return b.s(e.$D,2,\"0\");case\"d\":return String(e.$W);case\"dd\":return h(n.weekdaysMin,e.$W,o,2);case\"ddd\":return h(n.weekdaysShort,e.$W,o,3);case\"dddd\":return o[e.$W];case\"H\":return String(s);case\"HH\":return b.s(s,2,\"0\");case\"h\":return d(1);case\"hh\":return d(2);case\"a\":return $(s,u,!0);case\"A\":return $(s,u,!1);case\"m\":return String(u);case\"mm\":return b.s(u,2,\"0\");case\"s\":return String(e.$s);case\"ss\":return b.s(e.$s,2,\"0\");case\"SSS\":return b.s(e.$ms,3,\"0\");case\"Z\":return i}return null}(t)||i.replace(\":\",\"\")}))},m.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},m.diff=function(r,d,l){var $,y=this,M=b.p(d),m=O(r),v=(m.utcOffset()-this.utcOffset())*e,g=this-m,D=function(){return b.m(y,m)};switch(M){case h:$=D()/12;break;case c:$=D();break;case f:$=D()/3;break;case o:$=(g-v)/6048e5;break;case a:$=(g-v)/864e5;break;case u:$=g/n;break;case s:$=g/e;break;case i:$=g/t;break;default:$=g}return l?$:b.a($)},m.daysInMonth=function(){return this.endOf(c).$D},m.$locale=function(){return D[this.$L]},m.locale=function(t,e){if(!t)return this.$L;var n=this.clone(),r=w(t,e,!0);return r&&(n.$L=r),n},m.clone=function(){return b.w(this.$d,this)},m.toDate=function(){return new Date(this.valueOf())},m.toJSON=function(){return this.isValid()?this.toISOString():null},m.toISOString=function(){return this.$d.toISOString()},m.toString=function(){return this.$d.toUTCString()},M}(),k=_.prototype;return O.prototype=k,[[\"$ms\",r],[\"$s\",i],[\"$m\",s],[\"$H\",u],[\"$W\",a],[\"$M\",c],[\"$y\",h],[\"$D\",d]].forEach((function(t){k[t[1]]=function(e){return this.$g(e,t[0],t[1])}})),O.extend=function(t,e){return t.$i||(t(e,_,O),t.$i=!0),O},O.locale=w,O.isDayjs=S,O.unix=function(t){return O(1e3*t)},O.en=D[g],O.Ls=D,O.p={},O}));","!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(t):(e=\"undefined\"!=typeof globalThis?globalThis:e||self).dayjs_plugin_isoWeek=t()}(this,(function(){\"use strict\";var e=\"day\";return function(t,i,s){var a=function(t){return t.add(4-t.isoWeekday(),e)},d=i.prototype;d.isoWeekYear=function(){return a(this).year()},d.isoWeek=function(t){if(!this.$utils().u(t))return this.add(7*(t-this.isoWeek()),e);var i,d,n,o,r=a(this),u=(i=this.isoWeekYear(),d=this.$u,n=(d?s.utc:s)().year(i).startOf(\"year\"),o=4-n.isoWeekday(),n.isoWeekday()>4&&(o+=7),n.add(o,e));return r.diff(u,\"week\")+1},d.isoWeekday=function(e){return this.$utils().u(e)?this.day()||7:this.day(this.day()%7?e:e-7)};var n=d.startOf;d.startOf=function(e,t){var i=this.$utils(),s=!!i.u(t)||t;return\"isoweek\"===i.p(e)?s?this.date(this.date()-(this.isoWeekday()-1)).startOf(\"day\"):this.date(this.date()-1-(this.isoWeekday()-1)+7).endOf(\"day\"):n.bind(this)(e,t)}}}));","!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)}}}));","export * from \"./helpers\";\nexport * from \"./types\";\n","import dayjs from \"dayjs\";\nimport isoWeek from \"dayjs/plugin/isoWeek\";\nimport relativeTime from \"dayjs/plugin/relativeTime\";\n\ndayjs.extend(relativeTime);\ndayjs.extend(isoWeek);\n\nexport type TDateInput = Date | string | number | null | undefined;\nexport type TDateFormat = \"MM/DD/YYYY\" | \"MM/DD/YY HH:mm A\" | string;\n\nconst defaultDateFallback = \"--\";\n\nconst isValidDateInput = (date: TDateInput): boolean => {\n return date !== null && date !== undefined && dayjs(date).isValid();\n};\n\n/**\n * Format a date using a dayjs format string.\n *\n * @param {TDateInput} date - Date-like value to format.\n * @param {TDateFormat} format - dayjs format string.\n * @returns {string} Formatted date or `--` for missing/invalid input.\n */\nexport const formatDate = (\n date?: TDateInput,\n format: TDateFormat = \"MM/DD/YYYY\",\n): string => {\n if (!isValidDateInput(date)) {\n return defaultDateFallback;\n }\n\n return dayjs(date).format(format);\n};\n\n/**\n * Return a human-readable relative time string.\n *\n * @param {TDateInput} date - Date-like value to compare against now.\n * @returns {string} Relative time or `--` for missing/invalid input.\n */\nexport const timeAgo = (date: TDateInput): string => {\n if (!isValidDateInput(date)) {\n return defaultDateFallback;\n }\n\n return dayjs(date).fromNow();\n};\n\n/**\n * Add days to a date.\n *\n * @param {TDateInput} date - Source date.\n * @param {number} days - Number of days to add.\n * @returns {Date} Updated date.\n */\nexport const addDays = (date: TDateInput, days: number): Date => {\n return dayjs(date).add(days, \"day\").toDate();\n};\n\n/**\n * Subtract days from a date.\n *\n * @param {TDateInput} date - Source date.\n * @param {number} days - Number of days to subtract.\n * @returns {Date} Updated date.\n */\nexport const subtractDays = (date: TDateInput, days: number): Date => {\n return dayjs(date).subtract(days, \"day\").toDate();\n};\n\n/**\n * Return the absolute number of whole day boundaries between two dates.\n *\n * @param {TDateInput} dateA - First date.\n * @param {TDateInput} dateB - Second date.\n * @returns {number} Absolute difference in days, or 0 for invalid input.\n */\nexport const daysBetween = (dateA: TDateInput, dateB: TDateInput): number => {\n if (!isValidDateInput(dateA) || !isValidDateInput(dateB)) {\n return 0;\n }\n\n return Math.abs(dayjs(dateA).diff(dayjs(dateB), \"day\"));\n};\n\n/**\n * Check whether a date is today.\n *\n * @param {TDateInput} date - Date-like value.\n * @returns {boolean} True when the date is today.\n */\nexport const isToday = (date: TDateInput): boolean => {\n if (!isValidDateInput(date)) {\n return false;\n }\n\n return dayjs(date).isSame(dayjs(), \"day\");\n};\n\n/**\n * Check whether a date is in the past.\n *\n * @param {TDateInput} date - Date-like value.\n * @returns {boolean} True when the date is before now.\n */\nexport const isPast = (date: TDateInput): boolean => {\n if (!isValidDateInput(date)) {\n return false;\n }\n\n return dayjs(date).isBefore(dayjs());\n};\n\n/**\n * Check whether a date is in the future.\n *\n * @param {TDateInput} date - Date-like value.\n * @returns {boolean} True when the date is after now.\n */\nexport const isFuture = (date: TDateInput): boolean => {\n if (!isValidDateInput(date)) {\n return false;\n }\n\n return dayjs(date).isAfter(dayjs());\n};\n\n/**\n * Return the start of the day for a date.\n *\n * @param {TDateInput} date - Source date.\n * @returns {Date} Date set to 00:00:00.000.\n */\nexport const startOfDay = (date: TDateInput): Date => {\n return dayjs(date).startOf(\"day\").toDate();\n};\n\n/**\n * Return the end of the day for a date.\n *\n * @param {TDateInput} date - Source date.\n * @returns {Date} Date set to 23:59:59.999.\n */\nexport const endOfDay = (date: TDateInput): Date => {\n return dayjs(date).endOf(\"day\").toDate();\n};\n\n/**\n * Return the ISO week start date, Monday at 00:00:00.000.\n *\n * @param {TDateInput} date - Source date.\n * @returns {Date} Start of ISO week.\n */\nexport const startOfWeek = (date: TDateInput): Date => {\n return dayjs(date).startOf(\"isoWeek\").toDate();\n};\n\n/**\n * Return the ISO week end date, Sunday at 23:59:59.999.\n *\n * @param {TDateInput} date - Source date.\n * @returns {Date} End of ISO week.\n */\nexport const endOfWeek = (date: TDateInput): Date => {\n return dayjs(date).endOf(\"isoWeek\").toDate();\n};\n\n/**\n * Return all seven dates in the ISO week containing the provided date.\n *\n * @param {TDateInput} date - Source date.\n * @returns {Date[]} Monday-through-Sunday dates at the start of each day.\n */\nexport const getWeekDays = (date: TDateInput): Date[] => {\n const weekStart = dayjs(date).startOf(\"isoWeek\");\n\n return Array.from({ length: 7 }, (_value, index) => {\n return weekStart.add(index, \"day\").startOf(\"day\").toDate();\n });\n};\n\n/**\n * Add weeks to a date.\n *\n * @param {TDateInput} date - Source date.\n * @param {number} weeks - Number of weeks to add.\n * @returns {Date} Updated date.\n */\nexport const addWeeks = (date: TDateInput, weeks: number): Date => {\n return dayjs(date).add(weeks, \"week\").toDate();\n};\n\n/**\n * Subtract weeks from a date.\n *\n * @param {TDateInput} date - Source date.\n * @param {number} weeks - Number of weeks to subtract.\n * @returns {Date} Updated date.\n */\nexport const subtractWeeks = (date: TDateInput, weeks: number): Date => {\n return dayjs(date).subtract(weeks, \"week\").toDate();\n};\n","import type {\n IFilterCondition,\n ISortCondition,\n} from \"../../types/base/paging.types\";\n\ntype TRecord = Record<string, unknown>;\ntype TPropertyRecord = Record<PropertyKey, unknown>;\ntype TSortableValue =\n | string\n | number\n | bigint\n | boolean\n | Date\n | null\n | undefined;\n\ntype TReplaceNulls<TValue> = TValue extends null\n ? \"\"\n : TValue extends (infer TItem)[]\n ? TReplaceNulls<TItem>[]\n : TValue extends Date\n ? TValue\n : TValue extends object\n ? { [TKey in keyof TValue]: TReplaceNulls<TValue[TKey]> }\n : TValue;\n\nconst unsafePathSegments = new Set([\"__proto__\", \"prototype\", \"constructor\"]);\n\nconst isRecord = (value: unknown): value is TRecord => {\n return (\n typeof value === \"object\" &&\n value !== null &&\n !Array.isArray(value) &&\n !(value instanceof Date)\n );\n};\n\nconst isSafePathSegment = (segment: string): boolean => {\n return segment.length > 0 && !unsafePathSegments.has(segment);\n};\n\nconst getPathSegments = (path: string): string[] => {\n return path.split(\".\").filter((segment) => segment.length > 0);\n};\n\n/**\n * Safely parse a JSON string into a typed value.\n *\n * When a fallback value is provided, the function always returns that generic\n * type. Without a fallback value, parse failures return an empty object.\n *\n * @typeParam TParsed - Expected parsed value type.\n * @param {string | null | undefined} jsonString - JSON string to parse.\n * @param {TParsed} [fallbackValue] - Value returned when parsing fails.\n * @returns {TParsed | Record<string, unknown>} Parsed value or fallback.\n * @example\n * parseJSON<{ a: number }>('{\"a\":1}', { a: 0 }) // => { a: 1 }\n * parseJSON('not json') // => {}\n */\nexport function parseJSON<TParsed>(\n jsonString: string | null | undefined,\n fallbackValue: TParsed,\n): TParsed;\nexport function parseJSON(\n jsonString: string | null | undefined,\n): Record<string, unknown>;\nexport function parseJSON<TParsed>(\n jsonString: string | null | undefined,\n fallbackValue?: TParsed,\n): TParsed | Record<string, unknown> {\n if (!jsonString) {\n return fallbackValue ?? {};\n }\n\n try {\n const parsedValue = JSON.parse(jsonString) as unknown;\n\n return parsedValue as TParsed;\n } catch {\n return fallbackValue ?? {};\n }\n}\n\n/**\n * Stringify a value to JSON while skipping circular references.\n *\n * Uses an internal cache to omit repeated object references that would\n * normally cause `JSON.stringify` to throw.\n *\n * @param {unknown} value - Value to stringify.\n * @returns {string | undefined} JSON string with circulars omitted.\n * @example\n * const value: Record<string, unknown> = {}; value.self = value;\n * JSONStringify(value) // => \"{}\"\n */\nexport const JSONStringify = (value: unknown): string | undefined => {\n const seenValues = new WeakSet<object>();\n\n try {\n return JSON.stringify(value, (_key, nestedValue) => {\n if (typeof nestedValue === \"bigint\") {\n return nestedValue.toString();\n }\n\n if (typeof nestedValue === \"object\" && nestedValue !== null) {\n if (seenValues.has(nestedValue)) {\n return undefined;\n }\n\n seenValues.add(nestedValue);\n }\n\n return nestedValue;\n });\n } catch {\n return undefined;\n }\n};\n\n/**\n * Deep-remove `undefined` properties while preserving Dates and arrays.\n *\n * Object properties with `undefined` values are removed. Array items are\n * preserved so array indexes do not shift.\n *\n * @typeParam TValue - Input value type.\n * @param {TValue} value - Input value.\n * @returns {TValue} Cleaned clone with `undefined` object properties removed.\n */\nexport const removeUndefined = <TValue>(value: TValue): TValue => {\n if (Array.isArray(value)) {\n return value.map((item) => removeUndefined(item)) as TValue;\n }\n\n if (isRecord(value)) {\n const updatedValue = Object.entries(value).reduce<TRecord>(\n (accumulator, [key, nestedValue]) => {\n if (nestedValue !== undefined) {\n accumulator[key] = removeUndefined(nestedValue);\n }\n\n return accumulator;\n },\n {},\n );\n\n return updatedValue as TValue;\n }\n\n return value;\n};\n\n/**\n * Test whether a location object's `pathname` equals a key.\n *\n * @param {{ pathname?: string } | null | undefined} location - Object expected\n * to have a `pathname`.\n * @param {string} key - Path to compare.\n * @returns {boolean}\n * @example\n * validPath({ pathname: \"/home\" }, \"/home\") // true\n */\nexport const validPath = (\n location: { pathname?: string } | null | undefined,\n key: string,\n): boolean => {\n return location?.pathname === key;\n};\n\n/**\n * Return the first element if the input is an array; otherwise return the value itself.\n *\n * @typeParam T - Element type.\n * @param {T | T[]} input - A single value or an array.\n * @returns {T} First element or the input value.\n * @example\n * returnObject([1,2,3]) // 1\n * returnObject(5) // 5\n */\nexport const returnObject = <T>(input: T | T[]): T => {\n return Array.isArray(input) ? input[0] : input;\n};\n\n/**\n * Filter out items from `array1` whose `id` appears in `array2`.\n *\n * @typeParam T - Object type with an `id` field.\n * @param {T[]} [array1] - Source array.\n * @param {T[]} [array2] - Items whose `id`s should be excluded.\n * @returns {T[]} Filtered array (or `[]` on invalid input).\n */\nexport const filterArrayById = <T extends { id: number | string }>(\n array1?: T[],\n array2?: T[],\n): T[] => {\n if (!Array.isArray(array1) || !Array.isArray(array2)) {\n return [];\n }\n\n const idsToExclude = new Set(array2.map((item) => item.id));\n return array1.filter((item) => !idsToExclude.has(item.id));\n};\n\n/**\n * Sort an array of objects by a given property (ascending).\n *\n * Mutates the original array (uses `Array.prototype.sort`).\n *\n * @typeParam T - Object type.\n * @typeParam TKey - Sortable property key.\n * @param {T[]} array - Array to sort.\n * @param {TKey} property - Property name to sort by.\n * @returns {T[]} The same array instance, sorted (or empty array if input invalid).\n */\nexport const sortArrayByProperty = <\n TKey extends PropertyKey,\n T extends Record<TKey, TSortableValue>,\n>(\n array: T[],\n property: TKey,\n): T[] => {\n if (!Array.isArray(array) || array.length === 0) return [];\n\n return array.sort((a, b) => {\n const firstValue = a[property];\n const secondValue = b[property];\n\n if (firstValue === secondValue) return 0;\n if (firstValue === null || firstValue === undefined) return 1;\n if (secondValue === null || secondValue === undefined) return -1;\n if (firstValue < secondValue) return -1;\n if (firstValue > secondValue) return 1;\n return 0;\n });\n};\n\n/**\n * Recursively replace `null` values with empty strings.\n *\n * Works on primitives, arrays, Dates, and plain objects.\n *\n * @typeParam TValue - Input value type.\n * @param {TValue} value - Input value.\n * @returns {TReplaceNulls<TValue>} Value with all `null` replaced by `\"\"`.\n */\nexport const replaceNulls = <TValue>(value: TValue): TReplaceNulls<TValue> => {\n if (value === null) {\n return \"\" as TReplaceNulls<TValue>;\n }\n\n if (Array.isArray(value)) {\n return value.map((item) => replaceNulls(item)) as TReplaceNulls<TValue>;\n }\n\n if (isRecord(value)) {\n const updatedValue = Object.entries(value).reduce<TRecord>(\n (accumulator, [key, nestedValue]) => {\n accumulator[key] = replaceNulls(nestedValue);\n return accumulator;\n },\n {},\n );\n\n return updatedValue as TReplaceNulls<TValue>;\n }\n\n return value as TReplaceNulls<TValue>;\n};\n\n/**\n * Recursively remove object keys that contain a dot (`.`).\n *\n * @typeParam TValue - Input value type.\n * @param {TValue} value - Input object or array.\n * @returns {TValue} New value with dotted keys removed at all levels.\n */\nexport const removeFormProperties = <TValue>(value: TValue): TValue => {\n if (Array.isArray(value)) {\n return value.map((item) => removeFormProperties(item)) as TValue;\n }\n\n if (isRecord(value)) {\n const updatedValue = Object.entries(value).reduce<TRecord>(\n (accumulator, [key, nestedValue]) => {\n if (!key.includes(\".\")) {\n accumulator[key] = removeFormProperties(nestedValue);\n }\n\n return accumulator;\n },\n {},\n );\n\n return updatedValue as TValue;\n }\n\n return value;\n};\n\n/**\n * Recursively convert string booleans `\"true\"`/`\"false\"` to actual booleans.\n *\n * Leaves all other values unchanged.\n *\n * @typeParam TValue - Input value type.\n * @param {TValue} value - Input object or array.\n * @returns {TValue} New value with boolean-like strings converted.\n */\nexport const convertStringBooleans = <TValue>(value: TValue): TValue => {\n if (Array.isArray(value)) {\n return value.map((item) => convertStringBooleans(item)) as TValue;\n }\n\n if (isRecord(value)) {\n const updatedValue = Object.entries(value).reduce<TRecord>(\n (accumulator, [key, nestedValue]) => {\n if (nestedValue === \"true\") {\n accumulator[key] = true;\n } else if (nestedValue === \"false\") {\n accumulator[key] = false;\n } else {\n accumulator[key] = convertStringBooleans(nestedValue);\n }\n\n return accumulator;\n },\n {},\n );\n\n return updatedValue as TValue;\n }\n\n return value;\n};\n\n/**\n * Convenience helper to clean form-like data:\n * - Removes `undefined` properties\n * - Converts string booleans to booleans\n * - Removes keys containing a dot (`.`)\n *\n * @typeParam TObject - Form data object type.\n * @param {TObject} objectToClean - Input data.\n * @returns {Partial<TObject>} Cleaned clone.\n */\nexport const cleanFormData = <TObject extends TRecord>(\n objectToClean: TObject,\n): Partial<TObject> => {\n return removeFormProperties(\n convertStringBooleans(removeUndefined(objectToClean)),\n ) as Partial<TObject>;\n};\n\n/**\n * Return a default pagination object, allowing optional sort and filters.\n *\n * @param {ISortCondition[]} [sort] - Optional sort conditions.\n * @param {IFilterCondition[]} [filters] - Optional filter conditions.\n * @returns {{ page: number; size: number; sort: ISortCondition[]; filters: IFilterCondition[] }}\n * @example\n * resetPagination() // => { page:1, size:25, sort:[], filters:[] }\n */\nexport const resetPagination = (\n sort?: ISortCondition[],\n filters?: IFilterCondition[],\n) => {\n return {\n page: 1,\n size: 25,\n sort: sort || [],\n filters: filters || [],\n };\n};\n\n/**\n * Format a string of digits into a U.S. phone number.\n *\n * Strips non-numeric characters and formats 10 digits as `(XXX) XXX-XXXX`.\n * Strips a leading US country code when 11 digits are provided.\n * If a value cannot be formatted, returns the original value as a string.\n *\n * @param {string | number} value - Phone number digits (string or number).\n * @returns {string} Formatted phone number, or original input if invalid length.\n * @example\n * formatPhoneNumber(\"1234567890\") // \"(123) 456-7890\"\n * formatPhoneNumber(9876543210) // \"(987) 654-3210\"\n * formatPhoneNumber(\"555\") // \"555\"\n */\nexport const formatPhoneNumber = (value: string | number): string => {\n const originalValue = value.toString();\n const digits = originalValue.replace(/\\D/g, \"\");\n const normalizedDigits =\n digits.length === 11 && digits.startsWith(\"1\") ? digits.slice(1) : digits;\n\n if (normalizedDigits.length !== 10) return originalValue;\n\n const area = normalizedDigits.slice(0, 3);\n const prefix = normalizedDigits.slice(3, 6);\n const line = normalizedDigits.slice(6);\n\n return `(${area}) ${prefix}-${line}`;\n};\n\n/**\n * Format a number with thousands separators (commas).\n *\n * @param {number} value - Number to format.\n * @returns {string} String with commas.\n * @example\n * formatNumber(1234567) // \"1,234,567\"\n */\nexport const formatNumber = (value: number): string => {\n return value.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\n};\n\n/**\n * Remove comma separators from a number-like value.\n *\n * @param {number | string} value - Number-like value.\n * @returns {string} Value without comma separators.\n */\nexport const parseNumber = (value: number | string): string => {\n return value.toString().replace(/,/g, \"\");\n};\n\n/**\n * Delete a property from an object if it exists (no-op if it doesn't).\n *\n * @typeParam TObject - Object type.\n * @param {TObject} objectToUpdate - Target object (mutated).\n * @param {keyof TObject | string} propertyName - Property to delete.\n * @returns {void}\n */\nexport const deletePropertyIfExists = <TObject extends TRecord>(\n objectToUpdate: TObject,\n propertyName: keyof TObject | string,\n): void => {\n if (Object.prototype.hasOwnProperty.call(objectToUpdate, propertyName)) {\n delete objectToUpdate[propertyName as keyof TObject];\n }\n};\n\n/**\n * Split an array into chunks of a given size.\n *\n * @typeParam T - Element type.\n * @param {T[]} array - Source array.\n * @param {number} chunkSize - Size of each chunk.\n * @returns {T[][]} Array of chunks (last one may be smaller).\n * @example\n * chunkArray([1,2,3,4,5], 2) // [[1,2],[3,4],[5]]\n */\nexport const chunkArray = <T>(array: T[], chunkSize: number): T[][] => {\n if (!Array.isArray(array) || chunkSize <= 0 || !Number.isFinite(chunkSize)) {\n return [];\n }\n\n const result: T[][] = [];\n const normalizedChunkSize = Math.floor(chunkSize);\n\n for (let i = 0; i < array.length; i += normalizedChunkSize) {\n result.push(array.slice(i, i + normalizedChunkSize));\n }\n\n return result;\n};\n\n/**\n * Return a shallow clone of `objectToOmitFrom` without the listed properties.\n *\n * @typeParam TObject - Source object type.\n * @typeParam TKey - Keys to omit.\n * @param {TObject} objectToOmitFrom - Source object.\n * @param {readonly TKey[]} propsToOmit - Property names to omit.\n * @returns {Omit<TObject, TKey>} New object without omitted props.\n * @example\n * omitProperties({a:1,b:2}, [\"b\"]) // { a:1 }\n */\nexport const omitProperties = <\n TObject extends TRecord,\n TKey extends keyof TObject,\n>(\n objectToOmitFrom: TObject,\n propsToOmit: readonly TKey[],\n): Omit<TObject, TKey> => {\n const updatedObject: Partial<TObject> = { ...objectToOmitFrom };\n\n propsToOmit.forEach((propertyName) => {\n delete updatedObject[propertyName];\n });\n\n return updatedObject as Omit<TObject, TKey>;\n};\n\n/**\n * Safe `hasOwnProperty` check.\n *\n * @param {unknown} value - Value to test.\n * @param {PropertyKey} key - Property name.\n * @returns {boolean}\n */\nexport const hasProperty = <TKey extends PropertyKey>(\n value: unknown,\n key: TKey,\n): value is Record<TKey, unknown> => {\n if (value === null || value === undefined) return false;\n return Object.prototype.hasOwnProperty.call(value, key);\n};\n\n/**\n * Safe `hasOwnProperty` alias from the reference utilities.\n *\n * @param {unknown} value - Value to test.\n * @param {PropertyKey} key - Property name.\n * @returns {boolean}\n */\nexport const hasOwnProp = <TKey extends PropertyKey>(\n value: unknown,\n key: TKey,\n): value is Record<TKey, unknown> => {\n return hasProperty(value, key);\n};\n\n/**\n * Determine if an object has at least one own enumerable property.\n *\n * @param {unknown} value - Object to test.\n * @returns {boolean} `true` if there is at least one key.\n */\nexport const hasProperties = (value: unknown): boolean => {\n return isRecord(value) && Object.keys(value).length > 0;\n};\n\n/**\n * Get the first own enumerable property value from an object.\n *\n * @typeParam TObject - Source object type.\n * @param {TObject | null | undefined} value - Source object.\n * @returns {TObject[keyof TObject] | null} First value, or null for empty/non-object input.\n */\nexport const getFirstPropertyValue = <TObject extends TRecord>(\n value: TObject | null | undefined,\n): TObject[keyof TObject] | null => {\n if (value === null || value === undefined || !hasProperties(value)) {\n return null;\n }\n\n const source = value as TObject;\n const keys = Object.keys(source) as (keyof TObject)[];\n return source[keys[0]];\n};\n\n/**\n * Get a nested value from an object using dot notation.\n *\n * @param {unknown} value - Source object.\n * @param {string} path - Dot-delimited path.\n * @returns {unknown} Nested value, or undefined when the path cannot be resolved.\n * @example\n * getNestedValue({ user: { name: \"John\" } }, \"user.name\") // \"John\"\n */\nexport const getNestedValue = (value: unknown, path: string): unknown => {\n const pathSegments = getPathSegments(path);\n\n if (pathSegments.length === 0) {\n return value;\n }\n\n let currentValue: unknown = value;\n\n for (const pathSegment of pathSegments) {\n if (!isSafePathSegment(pathSegment)) {\n return undefined;\n }\n\n if (currentValue === null || currentValue === undefined) {\n return undefined;\n }\n\n if (\n typeof currentValue !== \"object\" &&\n typeof currentValue !== \"function\"\n ) {\n return undefined;\n }\n\n currentValue = (currentValue as TPropertyRecord)[pathSegment];\n }\n\n return currentValue;\n};\n\n/**\n * Set a nested value on an object using dot notation.\n *\n * Mutates and returns the provided object. Unsafe path segments are ignored to\n * prevent prototype pollution.\n *\n * @typeParam TObject - Target object type.\n * @param {TObject} objectToUpdate - Target object.\n * @param {string} path - Dot-delimited path.\n * @param {unknown} value - Value to set.\n * @returns {TObject} The mutated target object.\n * @example\n * setNestedValue({}, \"user.name\", \"John\") // { user: { name: \"John\" } }\n */\nexport const setNestedValue = <TObject extends TRecord>(\n objectToUpdate: TObject,\n path: string,\n value: unknown,\n): TObject => {\n const pathSegments = getPathSegments(path);\n\n if (\n pathSegments.length === 0 ||\n pathSegments.some((pathSegment) => !isSafePathSegment(pathSegment))\n ) {\n return objectToUpdate;\n }\n\n let currentValue: TRecord = objectToUpdate;\n\n for (let i = 0; i < pathSegments.length - 1; i += 1) {\n const pathSegment = pathSegments[i];\n const nextValue = currentValue[pathSegment];\n\n if (!isRecord(nextValue)) {\n currentValue[pathSegment] = {};\n }\n\n currentValue = currentValue[pathSegment] as TRecord;\n }\n\n currentValue[pathSegments[pathSegments.length - 1]] = value;\n return objectToUpdate;\n};\n\n/**\n * Deep clone a value while preserving Dates and circular references.\n *\n * @typeParam TValue - Input value type.\n * @param {TValue} value - Value to clone.\n * @returns {TValue} Deep clone of the input.\n */\nexport const deepClone = <TValue>(value: TValue): TValue => {\n const cloneValue = <TNestedValue>(\n nestedValue: TNestedValue,\n seenValues: WeakMap<object, unknown>,\n ): TNestedValue => {\n if (nestedValue === null || typeof nestedValue !== \"object\") {\n return nestedValue;\n }\n\n if (nestedValue instanceof Date) {\n return new Date(nestedValue.getTime()) as TNestedValue;\n }\n\n if (seenValues.has(nestedValue)) {\n return seenValues.get(nestedValue) as TNestedValue;\n }\n\n if (Array.isArray(nestedValue)) {\n const clonedArray: unknown[] = [];\n seenValues.set(nestedValue, clonedArray);\n\n nestedValue.forEach((item) => {\n clonedArray.push(cloneValue(item, seenValues));\n });\n\n return clonedArray as TNestedValue;\n }\n\n const clonedObject = Object.create(\n Object.getPrototypeOf(nestedValue),\n ) as TPropertyRecord;\n seenValues.set(nestedValue, clonedObject);\n\n Reflect.ownKeys(nestedValue).forEach((key) => {\n clonedObject[key] = cloneValue(\n (nestedValue as TPropertyRecord)[key],\n seenValues,\n );\n });\n\n return clonedObject as TNestedValue;\n };\n\n return cloneValue(value, new WeakMap<object, unknown>());\n};\n\n/**\n * Flatten a nested object into dot notation.\n *\n * Arrays and Dates are treated as leaf values.\n *\n * @param {TRecord} value - Source object.\n * @param {string} [prefix] - Internal prefix for recursion.\n * @returns {TRecord} Flattened object.\n * @example\n * flatten({ user: { name: \"John\" } }) // { \"user.name\": \"John\" }\n */\nexport const flatten = (value: TRecord, prefix = \"\"): TRecord => {\n const result: TRecord = {};\n\n Object.entries(value).forEach(([key, nestedValue]) => {\n const newKey = prefix ? `${prefix}.${key}` : key;\n\n if (isRecord(nestedValue)) {\n Object.assign(result, flatten(nestedValue, newKey));\n return;\n }\n\n result[newKey] = nestedValue;\n });\n\n return result;\n};\n\n/**\n * Convert a dot-notation object into a nested object.\n *\n * Unsafe path segments are ignored to prevent prototype pollution.\n *\n * @param {TRecord} value - Dot-notation source object.\n * @returns {TRecord} Nested object.\n * @example\n * unflatten({ \"user.name\": \"John\" }) // { user: { name: \"John\" } }\n */\nexport const unflatten = (value: TRecord): TRecord => {\n const result: TRecord = {};\n\n Object.entries(value).forEach(([key, nestedValue]) => {\n setNestedValue(result, key, nestedValue);\n });\n\n return result;\n};\n","/**\n * String utilities for common text manipulation tasks.\n */\n\nimport { TUSStateCode } from \"@/types\";\n\nconst wordBoundaryRegex = /([a-z0-9])([A-Z])/g;\nconst acronymBoundaryRegex = /([A-Z]+)([A-Z][a-z])/g;\n\nconst getWords = (value: string): string[] => {\n return value\n .trim()\n .replace(acronymBoundaryRegex, \"$1 $2\")\n .replace(wordBoundaryRegex, \"$1 $2\")\n .replace(/[^a-zA-Z0-9]+/g, \" \")\n .trim()\n .split(/\\s+/)\n .filter(Boolean);\n};\n\nconst capitalizeWord = (value: string): string => {\n if (!value) {\n return \"\";\n }\n\n return value.charAt(0).toUpperCase() + value.slice(1).toLowerCase();\n};\n\n/**\n * Adds commas to a number for thousands separators.\n *\n * @example formatNumber(1000) => '1,000'\n * @example formatNumber('1234567') => '1,234,567'\n * @example formatNumber(1234567.89) => '1,234,567.89'\n */\nexport const formatNumber = (value: string | number): string => {\n const str = String(value);\n const [integer, decimal] = str.split(\".\");\n const formattedInteger = integer.replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\n\n return decimal !== undefined\n ? `${formattedInteger}.${decimal}`\n : formattedInteger;\n};\n\nexport const normalCase = (str?: string): string => {\n if (!str) {\n return \"\";\n }\n\n return getWords(str).map(capitalizeWord).join(\" \");\n};\n\nexport const sentenceCase = (str?: string): string => {\n if (!str) {\n return \"\";\n }\n\n const normalizedValue = str.trim().toLowerCase();\n\n return normalizedValue.charAt(0).toUpperCase() + normalizedValue.slice(1);\n};\n\nexport const upperCase = (str?: string): string => {\n return str?.toUpperCase() ?? \"\";\n};\n\nexport const lowerCase = (str?: string): string => {\n return str?.toLowerCase() ?? \"\";\n};\n\n/**\n * Converts a string to camelCase.\n *\n * @example toCamelCase('hello-world') => 'helloWorld'\n * @example toCamelCase('hello_world') => 'helloWorld'\n */\nexport const toCamelCase = (str: string): string => {\n const words = getWords(str);\n\n if (words.length === 0) {\n return \"\";\n }\n\n const [firstWord, ...remainingWords] = words;\n\n return [firstWord.toLowerCase(), ...remainingWords.map(capitalizeWord)].join(\n \"\",\n );\n};\n\nexport const camelCase = toCamelCase;\n\n/**\n * Converts a string to kebab-case.\n *\n * @example toKebabCase('helloWorld') => 'hello-world'\n * @example toKebabCase('Hello_World') => 'hello-world'\n */\nexport const toKebabCase = (str: string): string => {\n return getWords(str)\n .map((word) => word.toLowerCase())\n .join(\"-\");\n};\n\nexport const kebabCase = toKebabCase;\n\n/**\n * Converts a string to snake_case.\n *\n * @example toSnakeCase('helloWorld') => 'hello_world'\n * @example toSnakeCase('hello-world') => 'hello_world'\n */\nexport const toSnakeCase = (str: string): string => {\n return getWords(str)\n .map((word) => word.toLowerCase())\n .join(\"_\");\n};\n\nexport const snakeCase = toSnakeCase;\n\n/**\n * Converts a string to PascalCase.\n *\n * @example toPascalCase('hello-world') => 'HelloWorld'\n * @example toPascalCase('hello_world') => 'HelloWorld'\n */\nexport const toPascalCase = (str: string): string => {\n return getWords(str).map(capitalizeWord).join(\"\");\n};\n\nexport const pascalCase = toPascalCase;\n\nexport const snakeCaseToSpaces = (str: string): string => {\n return str.replace(/_+/g, \" \").trim();\n};\n\nexport const kebabToSpaces = (str: string): string => {\n return str.replace(/-+/g, \" \").trim();\n};\n\n/**\n * Capitalizes the first character of a string.\n *\n * @example capitalize('hello world') => 'Hello world'\n */\nexport const capitalize = (str: string): string => {\n if (!str) {\n return \"\";\n }\n\n return str.charAt(0).toUpperCase() + str.slice(1);\n};\n\n/**\n * Capitalizes the first letter of each word.\n *\n * @example titleCase('hello world') => 'Hello World'\n */\nexport const titleCase = (str: string): string => {\n return str.replace(/\\b\\w/g, (char) => char.toUpperCase());\n};\n\n/**\n * Truncates a string to a specified length and adds ellipsis.\n *\n * @example truncate('hello world', 5) => 'he...'\n */\nexport const truncate = (\n str: string,\n length: number,\n suffix = \"...\",\n): string => {\n if (length <= 0) {\n return \"\";\n }\n\n if (str.length <= length) {\n return str;\n }\n\n const maxLength = Math.max(0, length - suffix.length);\n\n if (maxLength === 0) {\n return suffix.length > length ? \"\" : suffix;\n }\n\n return str.slice(0, maxLength) + suffix;\n};\n\n/**\n * Removes all whitespace from a string.\n *\n * @example removeWhitespace('hello world') => 'helloworld'\n */\nexport const removeWhitespace = (str: string): string => {\n return str.replace(/\\s+/g, \"\");\n};\n\n/**\n * Removes all non-alphanumeric characters.\n *\n * @example removeSpecialChars('hello@world#123') => 'helloworld123'\n */\nexport const removeSpecialChars = (str: string): string => {\n return str.replace(/[^a-zA-Z0-9]/g, \"\");\n};\n\n/**\n * Generates a URL-friendly slug from a string.\n *\n * @example slug('Hello World 2024!') => 'hello-world-2024'\n */\nexport const slug = (str: string): string => {\n return str\n .toLowerCase()\n .trim()\n .replace(/[^\\w\\s-]/g, \"\")\n .replace(/[\\s_]+/g, \"-\")\n .replace(/-+/g, \"-\")\n .replace(/^-+|-+$/g, \"\");\n};\n\n/**\n * Validates if a string is a valid email.\n *\n * @example isEmail('user@example.com') => true\n */\nexport const isEmail = (str: string): boolean => {\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n return emailRegex.test(str.trim());\n};\n\n/**\n * Validates if a string is a valid URL.\n *\n * @example isUrl('https://example.com') => true\n */\nexport const isUrl = (str: string): boolean => {\n try {\n const parsedUrl = new URL(str);\n return parsedUrl.protocol === \"http:\" || parsedUrl.protocol === \"https:\";\n } catch {\n return false;\n }\n};\n\n/**\n * Validates if a string contains only numbers.\n *\n * @example isNumeric('12345') => true\n * @example isNumeric('123abc') => false\n */\nexport const isNumeric = (str: string): boolean => {\n return /^\\d+$/.test(str);\n};\n\n/**\n * Checks if a string is empty or contains only whitespace.\n *\n * @example isEmpty(' ') => true\n * @example isEmpty('hello') => false\n */\nexport const isEmpty = (str: string): boolean => {\n return str.trim().length === 0;\n};\n\n/**\n * Reverses a string.\n *\n * @example reverse('hello') => 'olleh'\n */\nexport const reverse = (str: string): string => {\n return Array.from(str).reverse().join(\"\");\n};\n\n/**\n * Repeats a string a specified number of times.\n *\n * @example repeat('ab', 3) => 'ababab'\n */\nexport const repeat = (str: string, times: number): string => {\n return str.repeat(Math.max(0, Math.floor(times)));\n};\n\n/**\n * Pads a string to a specified length.\n *\n * @example padStart('5', 3, '0') => '005'\n * @example padEnd('5', 3, '0') => '500'\n */\nexport const padStart = (\n str: string,\n length: number,\n padChar = \" \",\n): string => {\n return str.padStart(length, padChar);\n};\n\nexport const padEnd = (str: string, length: number, padChar = \" \"): string => {\n return str.padEnd(length, padChar);\n};\n\n/**\n * Encodes a string to Base64.\n *\n * @example toBase64('hello') => 'aGVsbG8='\n */\nexport const toBase64 = (str: string): string => {\n return Buffer.from(str, \"utf-8\").toString(\"base64\");\n};\n\n/**\n * Decodes a Base64 string.\n *\n * @example fromBase64('aGVsbG8=') => 'hello'\n */\nexport const fromBase64 = (str: string): string => {\n return Buffer.from(str, \"base64\").toString(\"utf-8\");\n};\n\n/**\n * Counts the number of words in a string.\n *\n * @example wordCount('hello world test') => 3\n */\nexport const wordCount = (str: string): number => {\n const trimmedValue = str.trim();\n\n if (!trimmedValue) {\n return 0;\n }\n\n return trimmedValue.split(/\\s+/).length;\n};\n\n/**\n * Counts the number of characters, excluding whitespace.\n *\n * @example charCount('hello world') => 10\n */\nexport const charCount = (str: string): number => {\n return str.replace(/\\s/g, \"\").length;\n};\n\n/**\n * Repeats a character a specified number of times.\n *\n * @example repeatChar('*', 5) => '*****'\n */\nexport const repeatChar = (char: string, times: number): string => {\n return char.repeat(Math.max(0, Math.floor(times)));\n};\n\n/**\n * Extracts numbers from a string.\n *\n * @example extractNumbers('abc123def456') => '123456'\n */\nexport const extractNumbers = (str: string): string => {\n return str.replace(/\\D/g, \"\");\n};\n\n/**\n * Removes duplicate consecutive characters.\n *\n * @example removeDuplicates('aabbccdd') => 'abcd'\n */\nexport const removeDuplicates = (str: string): string => {\n return str.replace(/(.)\\1+/g, \"$1\");\n};\n\n/**\n * Checks if a string is a palindrome.\n *\n * @example isPalindrome('racecar') => true\n * @example isPalindrome('hello') => false\n */\nexport const isPalindrome = (str: string): boolean => {\n const cleaned = str.toLowerCase().replace(/[^a-z0-9]/g, \"\");\n return cleaned === cleaned.split(\"\").reverse().join(\"\");\n};\n\n/**\n * Finds the longest word in a string.\n *\n * @example longestWord('the quick brown fox') => 'quick'\n */\nexport const longestWord = (str: string): string => {\n const words = str.trim().split(/\\s+/).filter(Boolean);\n\n return words.reduce(\n (longest, word) => (word.length > longest.length ? word : longest),\n \"\",\n );\n};\n\n/**\n * Pluralizes common English words using a simple ruleset.\n *\n * @example pluralize('cat') => 'cats'\n * @example pluralize('box') => 'boxes'\n */\nexport const pluralize = (word: string): string => {\n const exceptions: Record<string, string> = {\n child: \"children\",\n person: \"people\",\n man: \"men\",\n woman: \"women\",\n tooth: \"teeth\",\n foot: \"feet\",\n mouse: \"mice\",\n };\n const lowercaseWord = word.toLowerCase();\n const exception = exceptions[lowercaseWord];\n\n if (exception) {\n return word.charAt(0) === word.charAt(0).toUpperCase()\n ? capitalize(exception)\n : exception;\n }\n\n if (/[^aeiou]y$/i.test(word)) {\n return `${word.slice(0, -1)}ies`;\n }\n\n if (/(s|x|z|ch|sh)$/i.test(word)) {\n return `${word}es`;\n }\n\n if (/fe$/i.test(word)) {\n return `${word.slice(0, -2)}ves`;\n }\n\n if (/f$/i.test(word)) {\n return `${word.slice(0, -1)}ves`;\n }\n\n return `${word}s`;\n};\n\n/**\n * Highlights a substring within a string by wrapping it with markers.\n *\n * @example highlight('hello world', 'world', '**') => 'hello **world**'\n */\nexport const highlight = (\n str: string,\n substring: string,\n marker = \"**\",\n): string => {\n if (!substring) {\n return str;\n }\n\n return str.replace(\n new RegExp(`(${escapeRegex(substring)})`, \"gi\"),\n `${marker}$1${marker}`,\n );\n};\n\n/**\n * Converts a string to a regex-safe string.\n *\n * @example escapeRegex('a.b*c') => 'a\\\\.b\\\\*c'\n */\nexport const escapeRegex = (str: string): string => {\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n};\n\n/**\n * Finds similarity between two strings using Levenshtein distance.\n * Returns a value between 0 and 1, where 1 means identical.\n *\n * @example stringSimilarity('hello', 'hallo') => 0.8\n */\nexport const stringSimilarity = (str1: string, str2: string): number => {\n const s1 = str1.toLowerCase();\n const s2 = str2.toLowerCase();\n const longer = s1.length > s2.length ? s1 : s2;\n const shorter = s1.length > s2.length ? s2 : s1;\n\n if (longer.length === 0) {\n return 1;\n }\n\n const editDistance = getEditDistance(longer, shorter);\n return (longer.length - editDistance) / longer.length;\n};\n\n/**\n * Helper function to calculate edit distance (Levenshtein distance).\n */\nconst getEditDistance = (s1: string, s2: string): number => {\n const costs: number[] = [];\n\n for (let i = 0; i <= s1.length; i += 1) {\n let lastValue = i;\n\n for (let j = 0; j <= s2.length; j += 1) {\n if (i === 0) {\n costs[j] = j;\n } else if (j > 0) {\n let newValue = costs[j - 1];\n\n if (s1.charAt(i - 1) !== s2.charAt(j - 1)) {\n newValue = Math.min(Math.min(newValue, lastValue), costs[j]) + 1;\n }\n\n costs[j - 1] = lastValue;\n lastValue = newValue;\n }\n }\n\n if (i > 0) {\n costs[s2.length] = lastValue;\n }\n }\n\n return costs[s2.length];\n};\n\n/**\n * Strips HTML tags from a string.\n *\n * @example stripHtml('<p>Hello <b>world</b></p>') => 'Hello world'\n */\nexport const stripHtml = (str: string): string => {\n return str.replace(/<[^>]*>/g, \"\");\n};\n\n/**\n * Replaces multiple spaces with a single space.\n *\n * @example normalizeSpaces('hello world') => 'hello world'\n */\nexport const normalizeSpaces = (str: string): string => {\n return str.replace(/\\s+/g, \" \").trim();\n};\n\n/**\n * Converts a string to a number, returning null if not valid.\n *\n * @example toNumber('123') => 123\n * @example toNumber('abc') => null\n */\nexport const toNumber = (str: string): number | null => {\n if (str.trim() === \"\") {\n return null;\n }\n\n const num = Number(str);\n return Number.isNaN(num) ? null : num;\n};\n\n/**\n * Splits a string by multiple delimiters.\n *\n * @example splitMultiple('a,b;c:d', ',', ';', ':') => ['a', 'b', 'c', 'd']\n */\nexport const splitMultiple = (\n str: string,\n ...delimiters: string[]\n): string[] => {\n if (delimiters.length === 0) {\n return [str].filter((part) => part.length > 0);\n }\n\n let result = [str];\n\n delimiters.forEach((delimiter) => {\n if (delimiter !== \"\") {\n result = result.flatMap((part) => part.split(delimiter));\n }\n });\n\n return result.filter((part) => part.length > 0);\n};\n\n/**\n * Checks if a string contains any of the provided substrings.\n *\n * @example containsAny('hello world', 'foo', 'world') => true\n */\nexport const containsAny = (str: string, ...substrings: string[]): boolean => {\n return substrings.some((substring) => str.includes(substring));\n};\n\n/**\n * Checks if a string contains all of the provided substrings.\n *\n * @example containsAll('hello world', 'hello', 'world') => true\n */\nexport const containsAll = (str: string, ...substrings: string[]): boolean => {\n return substrings.every((substring) => str.includes(substring));\n};\n\nexport interface IAddress {\n addressLine1: string;\n addressLine2?: string;\n city: string;\n stateCode: TUSStateCode;\n postalCode: string;\n}\n\nexport const formatAddress = (address: IAddress): string => {\n const parts = [\n address.addressLine1,\n address.addressLine2,\n address.city,\n address.stateCode,\n address.postalCode,\n ].filter(Boolean);\n\n return parts.join(\", \");\n};\n","/**\n * API Response Types\n * Standard response structure for all API endpoints.\n */\n\nimport type { TJsonValue } from \"../base\";\n\nexport const HTTP_METHOD = {\n GET: \"GET\",\n POST: \"POST\",\n PUT: \"PUT\",\n PATCH: \"PATCH\",\n DELETE: \"DELETE\",\n\n // Backward-compatible aliases. Prefer uppercase keys for new usage.\n Get: \"GET\",\n Post: \"POST\",\n Put: \"PUT\",\n Patch: \"PATCH\",\n Delete: \"DELETE\",\n} as const;\n\nexport type THttpMethod = (typeof HTTP_METHOD)[keyof typeof HTTP_METHOD];\n\n/**\n * Error Codes\n * Standardized error codes used across the platform.\n */\nexport const ERROR_CODES = {\n BAD_REQUEST: \"BAD_REQUEST\",\n VALIDATION_ERROR: \"VALIDATION_ERROR\",\n MISSING_FIELDS: \"MISSING_FIELDS\",\n UNAUTHORIZED: \"UNAUTHORIZED\",\n INVALID_TOKEN: \"INVALID_TOKEN\",\n INVALID_CREDENTIALS: \"INVALID_CREDENTIALS\",\n FORBIDDEN: \"FORBIDDEN\",\n NOT_FOUND: \"NOT_FOUND\",\n CONFLICT: \"CONFLICT\",\n ALREADY_EXISTS: \"ALREADY_EXISTS\",\n RATE_LIMIT_EXCEEDED: \"RATE_LIMIT_EXCEEDED\",\n INTERNAL_ERROR: \"INTERNAL_ERROR\",\n DATABASE_ERROR: \"DATABASE_ERROR\",\n NOT_IMPLEMENTED: \"NOT_IMPLEMENTED\",\n\n // Backward-compatible aliases. Prefer uppercase keys for new usage.\n BadRequest: \"BAD_REQUEST\",\n ValidationError: \"VALIDATION_ERROR\",\n MissingFields: \"MISSING_FIELDS\",\n Unauthorized: \"UNAUTHORIZED\",\n InvalidToken: \"INVALID_TOKEN\",\n InvalidCredentials: \"INVALID_CREDENTIALS\",\n Forbidden: \"FORBIDDEN\",\n NotFound: \"NOT_FOUND\",\n Conflict: \"CONFLICT\",\n AlreadyExists: \"ALREADY_EXISTS\",\n RateLimit: \"RATE_LIMIT_EXCEEDED\",\n InternalError: \"INTERNAL_ERROR\",\n DatabaseError: \"DATABASE_ERROR\",\n NotImplemented: \"NOT_IMPLEMENTED\",\n} as const;\n\nexport type TErrorCode = (typeof ERROR_CODES)[keyof typeof ERROR_CODES];\n\n/**\n * HTTP Status Codes\n * Common status codes used in API responses.\n */\nexport const HTTP_STATUS = {\n Ok: 200,\n Created: 201,\n NoContent: 204,\n BadRequest: 400,\n Unauthorized: 401,\n Forbidden: 403,\n NotFound: 404,\n Conflict: 409,\n UnprocessableEntity: 422,\n TooManyRequests: 429,\n InternalError: 500,\n} as const;\n\nexport type THttpStatusCode = (typeof HTTP_STATUS)[keyof typeof HTTP_STATUS];\n\nexport type TApiErrorDetails = TJsonValue | undefined;\n\nexport interface IApiError<TDetails = TApiErrorDetails> {\n message: string;\n code?: TErrorCode;\n details?: TDetails;\n}\n\nexport interface IApiMeta {\n timestamp: string;\n version: string;\n environment: string;\n requestId?: string;\n}\n\nexport interface IApiResponse<TData = null, TErrorDetails = TApiErrorDetails> {\n success: boolean;\n data?: TData | null;\n error?: IApiError<TErrorDetails> | null;\n meta?: IApiMeta;\n}\n","export * from \"./routes\";\n\nimport type { TServiceType } from \"../base\";\nimport type { IUserSafe } from \"../user\";\n\nexport const AUTH_STATUS = {\n Initializing: \"Initializing\",\n Unauthenticated: \"Unauthenticated\",\n Authenticated: \"Authenticated\",\n Refreshing: \"Refreshing\",\n SessionExpired: \"SessionExpired\",\n} as const;\n\nexport type TAuthStatus = (typeof AUTH_STATUS)[keyof typeof AUTH_STATUS];\n\nexport interface ITokenPayload {\n userId: string;\n email: string;\n name: string;\n}\n\nexport interface IRefreshTokenData {\n token: string;\n tokenHash: string;\n tokenFamily: string;\n expiresAt: Date;\n}\n\nexport interface IAuthTokenBundle {\n accessToken: string;\n refreshToken: string;\n expiresAt: Date | null;\n}\n\nexport interface IStoredAuthSession {\n accessToken: string | null;\n refreshToken: string | null;\n expiresAt: Date | null;\n}\n\nexport interface IAuthTokenResponse extends IAuthTokenBundle {\n user: IUserSafe | null;\n companyId?: string;\n}\n\nexport interface IAuthSession {\n user: IUserSafe | null;\n accessToken: string | null;\n expiresAt: Date | null;\n}\n\nexport interface ISetAuthSessionParams extends IAuthTokenBundle {\n user: IUserSafe | null;\n}\n\nexport interface ILoginCredentials {\n email: string;\n password: string;\n rememberMe: boolean;\n}\n\nexport interface IRegisterCredentials {\n businessType: TServiceType[];\n firstName: string;\n lastName: string;\n email: string;\n password: string;\n}\n\nexport interface IPasswordValidationRules {\n minLength: number;\n requireUppercase: boolean;\n requireLowercase: boolean;\n requireNumbers: boolean;\n requireSpecialChars: boolean;\n}\n\nexport interface IPasswordValidationResult {\n valid: boolean;\n errors: string[];\n}\n\nexport interface IEmailValidationResult {\n valid: boolean;\n error?: string;\n}\n\nexport interface IRateLimitStatus {\n isLimited: boolean;\n attempts: number;\n maxAttempts: number;\n resetTime?: string;\n}\n","/**\n * Pagination metadata for a paginated response.\n */\nexport interface IPagingResult {\n hasNextPage: boolean;\n totalPages: number;\n totalRecords: number;\n}\n\n/**\n * Generic wrapper for paginated data.\n */\nexport interface IDataWithPagingResult<TData> {\n data: TData;\n pagination: IPagingResult;\n}\n\nexport const SortDirection = {\n Asc: \"Asc\",\n Desc: \"Desc\",\n} as const;\n\nexport type TSortDirection = (typeof SortDirection)[keyof typeof SortDirection];\n\n/**\n * Sorting condition for query results.\n */\nexport interface ISortCondition {\n name: string;\n direction: TSortDirection;\n}\n\nexport const FilterCondition = {\n Equal: \"=\",\n GreaterThan: \">\",\n LessThan: \"<\",\n NotEqual: \"!=\",\n Like: \"LIKE\",\n In: \"IN\",\n GreaterThanOrEqual: \">=\",\n LessThanOrEqual: \"<=\",\n} as const;\n\nexport type TFilterCondition =\n (typeof FilterCondition)[keyof typeof FilterCondition];\n\nexport interface IFilterConditionBase {\n name: string;\n condition: TFilterCondition;\n useAnd?: boolean;\n}\n\nexport interface IStringFilterCondition extends IFilterConditionBase {\n valueString: string;\n valueNumber?: never;\n valueBoolean?: never;\n}\n\nexport interface INumberFilterCondition extends IFilterConditionBase {\n valueString?: never;\n valueNumber: number;\n valueBoolean?: never;\n}\n\nexport interface IBooleanFilterCondition extends IFilterConditionBase {\n valueString?: never;\n valueNumber?: never;\n valueBoolean: boolean;\n}\n\n/**\n * Filter condition for querying data.\n *\n * Exactly one value field should be provided.\n */\nexport type TFilterConditionValue =\n | IStringFilterCondition\n | INumberFilterCondition\n | IBooleanFilterCondition;\n\n/**\n * Kept as an exported alias to preserve the existing public API name.\n */\nexport type IFilterCondition = TFilterConditionValue;\n\n/**\n * Request shape for paginated data with optional sorting and filtering.\n */\nexport interface IPaginationRequest {\n page: number;\n size: number;\n sort?: ISortCondition[];\n filters?: IFilterCondition[];\n}\n\nexport interface IPagingObject {\n pagination: IPaginationRequest;\n}\n\nexport const createPagingObject = (\n page: number,\n size: number,\n sort?: ISortCondition[],\n filters?: IFilterCondition[],\n): IPagingObject => ({\n pagination: {\n page,\n size,\n sort,\n filters,\n },\n});\n","export type TJsonPrimitive = string | number | boolean | null;\n\nexport type TJsonObject = {\n [key: string]: TJsonValue;\n};\n\nexport type TJsonValue = TJsonPrimitive | TJsonValue[] | TJsonObject;\n\nexport type TUnknownRecord = Record<string, unknown>;\n\nexport type TDateTimeString = string;\n\nexport type TurndownObject<TObject extends object = TUnknownRecord> = TObject;\n\nexport type TEmptyObject = Record<string, never>;\n\nexport type IEmptyRouteRequest = TEmptyObject;\n\nexport type IEmptyRouteParams = TEmptyObject;\n\nexport interface IMessageResponse {\n message: string;\n}\n\nexport interface ISuccessResponse {\n success: boolean;\n}\n\nexport interface ICountResponse {\n count: number;\n}\n\nexport interface IMetaData {\n createdAt: Date;\n updatedAt: Date;\n deletedAt?: Date;\n}\n\nexport type TRecordValue<TRecord extends object> = TRecord[keyof TRecord];\n\nexport type TRecordKeys<TRecord extends object> = keyof TRecord;\n\nexport interface IVersion {\n major: number;\n minor: number;\n patch: number;\n}\n\nexport type TVersionInput = string | IVersion;\n\nexport interface ISelectOption<TValue extends string = string> {\n label: string;\n value: TValue;\n}\n\nexport const MODE = {\n Create: \"Create\",\n Edit: \"Edit\",\n Delete: \"Delete\",\n Details: \"Details\",\n} as const;\n\nexport type TMode = TRecordValue<typeof MODE> | null;\n\nexport const IMAGE_ENTITY = {\n UserProfile: \"UserProfile\",\n Property: \"Property\",\n PropertyRoom: \"PropertyRoom\",\n MaintenanceTicket: \"MaintenanceTicket\",\n WorkReport: \"WorkReport\",\n} as const;\n\nexport type TImageEntityType = TRecordValue<typeof IMAGE_ENTITY>;\n\nexport type TUSStateCode = TRecordKeys<typeof US_JURISDICTIONS>;\n\nexport const US_JURISDICTIONS = {\n // 50 States\n AL: \"Alabama\",\n AK: \"Alaska\",\n AZ: \"Arizona\",\n AR: \"Arkansas\",\n CA: \"California\",\n CO: \"Colorado\",\n CT: \"Connecticut\",\n DE: \"Delaware\",\n FL: \"Florida\",\n GA: \"Georgia\",\n HI: \"Hawaii\",\n ID: \"Idaho\",\n IL: \"Illinois\",\n IN: \"Indiana\",\n IA: \"Iowa\",\n KS: \"Kansas\",\n KY: \"Kentucky\",\n LA: \"Louisiana\",\n ME: \"Maine\",\n MD: \"Maryland\",\n MA: \"Massachusetts\",\n MI: \"Michigan\",\n MN: \"Minnesota\",\n MS: \"Mississippi\",\n MO: \"Missouri\",\n MT: \"Montana\",\n NE: \"Nebraska\",\n NV: \"Nevada\",\n NH: \"New Hampshire\",\n NJ: \"New Jersey\",\n NM: \"New Mexico\",\n NY: \"New York\",\n NC: \"North Carolina\",\n ND: \"North Dakota\",\n OH: \"Ohio\",\n OK: \"Oklahoma\",\n OR: \"Oregon\",\n PA: \"Pennsylvania\",\n RI: \"Rhode Island\",\n SC: \"South Carolina\",\n SD: \"South Dakota\",\n TN: \"Tennessee\",\n TX: \"Texas\",\n UT: \"Utah\",\n VT: \"Vermont\",\n VA: \"Virginia\",\n WA: \"Washington\",\n WV: \"West Virginia\",\n WI: \"Wisconsin\",\n WY: \"Wyoming\",\n\n // Territories\n DC: \"District of Columbia\",\n PR: \"Puerto Rico\",\n GU: \"Guam\",\n VI: \"United States Virgin Islands\",\n AS: \"American Samoa\",\n MP: \"Northern Mariana Islands\",\n} as const;\n\nexport type TUSJurisdiction = TRecordValue<typeof US_JURISDICTIONS>;\n\nexport const STATUS = {\n Pending: \"Pending\",\n InProgress: \"InProgress\",\n Completed: \"Completed\",\n Overdue: \"Overdue\",\n Active: \"Active\",\n Inactive: \"Inactive\",\n} as const;\n\nexport type TStatus = TRecordValue<typeof STATUS>;\n\nexport const SEVERITY = {\n Low: \"Low\",\n Medium: \"Medium\",\n High: \"High\",\n} as const;\n\nexport type TSeverity = TRecordValue<typeof SEVERITY>;\n\nexport const SERVICE_TYPES = {\n Property: \"Property\",\n Cleaning: \"Cleaning\",\n Maintenance: \"Maintenance\",\n Inspection: \"Inspections\",\n Other: \"Other\",\n} as const;\n\nexport type TServiceType = TRecordValue<typeof SERVICE_TYPES>;\n\nexport const MONTHS = [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\",\n] as const;\n\nexport type TMonth = (typeof MONTHS)[number];\n\nexport interface IWeekDay {\n date: Date;\n dayOfMonth: number;\n shortLabel: string;\n letter: string;\n isToday: boolean;\n}\n\nconst createSelectOptions = <TValue extends string>(\n values: readonly TValue[],\n): ISelectOption<TValue>[] =>\n values.map((value) => ({\n label: value,\n value,\n }));\n\nconst getRecordValues = <TRecord extends Record<string, string>>(\n record: TRecord,\n): TRecordValue<TRecord>[] => Object.values(record) as TRecordValue<TRecord>[];\n\nexport const UnitedStatesJurisdictionOptions = createSelectOptions(\n getRecordValues(US_JURISDICTIONS),\n);\n\nexport const StatusOptions = createSelectOptions(getRecordValues(STATUS));\n\nexport const SeverityOptions = createSelectOptions(getRecordValues(SEVERITY));\n\nexport const ServiceTypeOptions = createSelectOptions(\n getRecordValues(SERVICE_TYPES),\n);\n\nexport * from \"./paging.types\";\n","import type { ICompany } from \".\";\nimport type { IEmptyRouteRequest, IMessageResponse } from \"../base\";\nimport type { TAccountType } from \"../user\";\n\nexport interface ICompanyRouteParams {\n companyId: string;\n}\n\nexport interface ICompanyUserRouteParams {\n userId: string;\n}\n\nexport interface ICompanyInvitationTokenParams {\n token: string;\n}\n\nexport interface ICompanyInvitationIdParams extends ICompanyRouteParams {\n invitationId: string;\n}\n\nexport const CompanyFilter = {\n Active: \"active\",\n Pending: \"pending\",\n All: \"all\",\n} as const;\n\nexport type TCompanyFilter = (typeof CompanyFilter)[keyof typeof CompanyFilter];\n\nexport interface IGetCompaniesQuery {\n search?: string;\n filter?: TCompanyFilter;\n}\n\nexport interface ICreateCompanyRequest extends Pick<\n ICompany,\n | \"displayName\"\n | \"addressLine1\"\n | \"addressLine2\"\n | \"city\"\n | \"stateCode\"\n | \"postalCode\"\n | \"companyType\"\n> {}\nexport interface ICreateCompanyResponse extends ICompany {}\n\nexport type IGetCompaniesRequest = IEmptyRouteRequest;\nexport type IGetCompaniesResponse = ICompany[];\n\nexport interface IGetCompanyByIdRequest extends ICompanyRouteParams {}\nexport interface IGetCompanyByIdResponse extends ICompany {}\n\nexport interface IUpdateCompanyRequest extends Partial<\n Pick<\n ICompany,\n | \"displayName\"\n | \"addressLine1\"\n | \"addressLine2\"\n | \"city\"\n | \"stateCode\"\n | \"postalCode\"\n | \"companyType\"\n | \"country\"\n | \"timezone\"\n | \"imageUrl\"\n >\n> {}\nexport interface IUpdateCompanyResponse extends ICompany {}\n\nexport interface IInviteUserToCompanyRequest {\n email: string;\n role: TAccountType;\n}\nexport interface IInviteUserToCompanyResponse extends IMessageResponse {}\n\nexport interface IGetCompanyUsersRequest extends ICompanyRouteParams {}\nexport interface ICompanyUserSummary {\n id: string;\n email: string;\n firstName: string;\n lastName?: string;\n role: TAccountType;\n}\nexport type IGetCompanyUsersResponse = ICompanyUserSummary[];\n\nexport interface IGetUserCompaniesRequest extends ICompanyUserRouteParams {}\nexport type IGetUserCompaniesResponse = ICompany[];\n\nexport interface IInviteCompanyToCompanyRequest {\n message?: string;\n}\nexport interface IInviteCompanyToCompanyResponse {\n id: string;\n token: string;\n expiresAt: Date;\n}\n\nexport interface IValidateCompanyInvitationRequest extends ICompanyInvitationTokenParams {}\nexport interface IValidateCompanyInvitationResponse {\n id: string;\n requesterCompanyId: string;\n providerCompanyId: string;\n invitedBy: string;\n message?: string | null;\n expiresAt: Date;\n requesterCompanyName: string;\n providerCompanyName: string;\n invitedByName: string;\n}\n\nexport interface IAcceptCompanyInvitationRequest extends ICompanyInvitationTokenParams {}\nexport interface IAcceptCompanyInvitationResponse {\n requesterCompanyId: string;\n providerCompanyId: string;\n requesterCompanyName: string;\n providerCompanyName: string;\n}\n\nexport interface IDeclineCompanyInvitationRequest extends ICompanyInvitationTokenParams {}\nexport interface IDeclineCompanyInvitationResponse extends IMessageResponse {}\n\nexport interface IGetPendingCompanyInvitationsRequest extends ICompanyRouteParams {}\nexport type IGetPendingCompanyInvitationsResponse =\n IValidateCompanyInvitationResponse[];\n\nexport interface IRevokeCompanyInvitationRequest extends ICompanyInvitationIdParams {}\nexport interface IRevokeCompanyInvitationResponse extends IMessageResponse {}\n","import type { IMetaData, TRecordValue, TUSStateCode } from \"../base\";\nexport * from \"./routes\";\n\nexport interface ICompany extends IMetaData {\n id: string;\n displayName: string;\n addressLine1: string;\n addressLine2?: string;\n city: string;\n stateCode: TUSStateCode;\n companyType: TCompanyType;\n postalCode: string;\n country?: string;\n timezone?: string;\n imageUrl?: string;\n}\n\nexport const COMPANY_TYPES = {\n PropertyManagement: \"PropertyManagement\",\n Maintenance: \"Maintenance\",\n Cleaner: \"Cleaner\",\n Other: \"Other\",\n} as const;\n\nexport type TCompanyType = TRecordValue<typeof COMPANY_TYPES>;\n","import type { TRecordValue } from \"../base\";\n\nexport const DAMAGE_SEVERITY = {\n Low: \"Low\",\n Medium: \"Medium\",\n High: \"High\",\n Critical: \"Critical\",\n} as const;\n\nexport type TDamageSeverity = TRecordValue<typeof DAMAGE_SEVERITY>;\n\nexport const DAMAGE_STATUS = {\n Open: \"Open\",\n InReview: \"InReview\",\n Assigned: \"Assigned\",\n InProgress: \"InProgress\",\n Resolved: \"Resolved\",\n Closed: \"Closed\",\n Escalated: \"Escalated\",\n} as const;\n\nexport type TDamageStatus = TRecordValue<typeof DAMAGE_STATUS>;\n\nexport const WORK_ORDER_PRIORITY = {\n Low: \"Low\",\n Normal: \"Normal\",\n High: \"High\",\n Urgent: \"Urgent\",\n} as const;\n\nexport type TWorkOrderPriority = TRecordValue<typeof WORK_ORDER_PRIORITY>;\n\nexport const WORK_ORDER_STATUS = {\n Pending: \"Pending\",\n Scheduled: \"Scheduled\",\n InProgress: \"InProgress\",\n Completed: \"Completed\",\n Cancelled: \"Cancelled\",\n} as const;\n\nexport type TWorkOrderStatus = TRecordValue<typeof WORK_ORDER_STATUS>;\n\nexport interface IDamageReport {\n id: string;\n propertyId: string;\n roomId: string;\n workSessionId: string | null;\n cleaningSessionId?: string;\n reportedBy: string;\n reportedAt: Date;\n severity: TDamageSeverity;\n status: TDamageStatus;\n title: string;\n description: string;\n locationDetails: string | null;\n estimatedCost: number | null;\n actualCost: number | null;\n assignedTo: string | null;\n assignedAt: Date | null;\n resolvedAt: Date | null;\n resolvedBy: string | null;\n resolutionNotes: string | null;\n requiresProfessional: boolean;\n vendorInfo: string | null;\n insuranceClaimNumber: string | null;\n isTenantResponsible: boolean;\n tenantChargeAmount: number | null;\n createdAt: Date;\n updatedAt: Date;\n photos?: IDamagePhoto[];\n comments?: IDamageComment[];\n}\n\nexport interface IDamageReportPhoto {\n id: string;\n damageReportId: string;\n photoId: string;\n imageUrl?: string;\n caption: string | null;\n isBeforePhoto: boolean;\n displayOrder: number;\n uploadedBy: string | null;\n createdAt: Date;\n}\n\nexport interface IDamagePhoto extends IDamageReportPhoto {}\n\nexport interface IDamageComment {\n id: string;\n damageReportId: string;\n userId: string;\n userName?: string;\n comment: string;\n isInternal: boolean;\n createdAt: Date;\n updatedAt: Date;\n}\n\nexport interface IDamageReportStatusHistory {\n id: string;\n damageReportId: string;\n previousStatus: TDamageStatus | null;\n newStatus: TDamageStatus;\n changedBy: string;\n reason: string | null;\n createdAt: Date;\n}\n\nexport interface IWorkOrder {\n id: string;\n damageReportId: string | null;\n propertyId: string;\n roomId: string | null;\n workOrderNumber: string | null;\n priority: TWorkOrderPriority;\n category: string | null;\n assignedTo: string | null;\n assignedAt: Date | null;\n scheduledDate: Date | null;\n scheduledTimeStart: string | null;\n scheduledTimeEnd: string | null;\n startedAt: Date | null;\n completedAt: Date | null;\n completedBy: string | null;\n description: string;\n workPerformed: string | null;\n materialsUsed: string | null;\n laborHours: number | null;\n laborCost: number | null;\n materialsCost: number | null;\n totalCost: number | null;\n status: TWorkOrderStatus;\n createdAt: Date;\n updatedAt: Date;\n}\n\nexport interface ICreateDamageReportInput {\n propertyId: string;\n roomId: string;\n workSessionId?: string;\n reportedBy: string;\n severity: TDamageSeverity;\n title: string;\n description: string;\n locationDetails?: string;\n estimatedCost?: number;\n requiresProfessional?: boolean;\n isTenantResponsible?: boolean;\n tenantChargeAmount?: number;\n}\n\nexport interface ICreateWorkOrderInput {\n damageReportId?: string;\n propertyId: string;\n roomId?: string;\n priority?: TWorkOrderPriority;\n category?: string;\n description: string;\n scheduledDate?: Date;\n scheduledTimeStart?: string;\n scheduledTimeEnd?: string;\n}\n\nexport * from \"./routes\";\n","/**\n * Error Types\n * Custom error types and validation error structures.\n */\n\nimport { ERROR_CODES } from \"../api\";\nimport type { TErrorCode } from \"../api\";\nimport type { TJsonObject, TJsonValue } from \"../base\";\n\n/**\n * Detailed information about a validation error.\n */\nexport interface IValidationErrorDetail {\n field: string;\n message: string;\n value?: TJsonValue;\n}\n\n/**\n * Information about missing required fields.\n */\nexport interface IMissingFieldsErrorDetail {\n missingFields: string[];\n}\n\n/**\n * Information about rate limiting.\n */\nexport interface IRateLimitErrorDetail {\n retryAfter?: number;\n message: string;\n}\n\nexport type TErrorResponseDetail =\n | IValidationErrorDetail[]\n | IMissingFieldsErrorDetail\n | IRateLimitErrorDetail\n | TJsonObject\n | string;\n\nexport interface ITypedApiError<TDetails = TErrorResponseDetail> {\n message: string;\n code: TErrorCode;\n details?: TDetails;\n}\n\nexport type TValidationError = ITypedApiError<IValidationErrorDetail[]>;\nexport type TMissingFieldsError = ITypedApiError<IMissingFieldsErrorDetail>;\nexport type TRateLimitError = ITypedApiError<IRateLimitErrorDetail>;\n\ntype TErrorLike = {\n code?: string;\n details?: unknown;\n};\n\nconst isErrorLike = (error: unknown): error is TErrorLike => {\n return typeof error === \"object\" && error !== null;\n};\n\n/**\n * Type guard for validation errors.\n */\nexport function isValidationError(error: unknown): error is TValidationError {\n return (\n isErrorLike(error) &&\n error.code === ERROR_CODES.VALIDATION_ERROR &&\n Array.isArray(error.details)\n );\n}\n\n/**\n * Type guard for missing-field errors.\n */\nexport function isMissingFieldsError(\n error: unknown,\n): error is TMissingFieldsError {\n return (\n isErrorLike(error) &&\n error.code === ERROR_CODES.MISSING_FIELDS &&\n typeof error.details === \"object\" &&\n error.details !== null &&\n \"missingFields\" in error.details &&\n Array.isArray(error.details.missingFields)\n );\n}\n\n/**\n * Type guard for rate-limit errors.\n */\nexport function isRateLimitError(error: unknown): error is TRateLimitError {\n return isErrorLike(error) && error.code === ERROR_CODES.RATE_LIMIT_EXCEEDED;\n}\n\n/**\n * Type guard for authentication errors.\n */\nexport function isAuthError(error: unknown): boolean {\n return (\n isErrorLike(error) &&\n (error.code === ERROR_CODES.UNAUTHORIZED ||\n error.code === ERROR_CODES.INVALID_TOKEN ||\n error.code === ERROR_CODES.INVALID_CREDENTIALS)\n );\n}\n","export * from \"./routes\";\n\nexport const IMAGE_ENTITY_TYPE = {\n UserProfile: \"UserProfile\",\n Property: \"Property\",\n Company: \"Company\",\n ChecklistItem: \"ChecklistItem\",\n PropertyRoom: \"PropertyRoom\",\n MaintenanceTicket: \"MaintenanceTicket\",\n WorkReport: \"WorkReport\",\n CleaningReport: \"CleaningReport\",\n TurndownDefault: \"TurndownDefault\",\n} as const;\n\nexport type TStoredImageEntityType =\n (typeof IMAGE_ENTITY_TYPE)[keyof typeof IMAGE_ENTITY_TYPE];\n\nexport interface IImage {\n id: string;\n s3Key: string;\n s3Bucket: string;\n entityType: TStoredImageEntityType;\n entityId: string;\n fileName: string;\n mimeType: string;\n fileSizeBytes?: number;\n width?: number;\n height?: number;\n isPublic: boolean;\n category?: string;\n displayOrder: number;\n uploadedBy?: string;\n createdAt: Date;\n updatedAt: Date;\n deletedAt?: Date;\n}\n\nexport interface IImageWithUrl extends IImage {\n url: string;\n}\n","import type { IMetaData, TRecordValue } from \"../base\";\nexport * from \"./routes\";\n\nexport const INVENTORY_RESTOCK_ORDER_STATUS = {\n Pending: \"Pending\",\n Ordered: \"Ordered\",\n Shipped: \"Shipped\",\n Received: \"Received\",\n} as const;\n\nexport type TInventoryRestockOrderStatus = TRecordValue<\n typeof INVENTORY_RESTOCK_ORDER_STATUS\n>;\n\nexport const INVENTORY_UNITS = {\n Count: \"Count\",\n Rolls: \"Rolls\",\n Pods: \"Pods\",\n Boxes: \"Boxes\",\n Bottles: \"Bottles\",\n Packs: \"Packs\",\n Bags: \"Bags\",\n Gallons: \"Gallons\",\n Liters: \"Liters\",\n Kilograms: \"Kilograms\",\n Pounds: \"Pounds\",\n Ounces: \"Ounces\",\n Grams: \"Grams\",\n Sheets: \"Sheets\",\n Cases: \"Cases\",\n Cartons: \"Cartons\",\n Other: \"Other\",\n} as const;\n\nexport type TInventoryUnitType = TRecordValue<typeof INVENTORY_UNITS>;\n\nexport const INVENTORY_ITEM_TYPE = {\n Consumable: \"Consumable\",\n Fixed: \"Fixed\",\n} as const;\n\nexport type TInventoryItemType = TRecordValue<typeof INVENTORY_ITEM_TYPE>;\n\nexport interface IInventoryItem extends IMetaData {\n id: string;\n companyId: string;\n name: string;\n description?: string;\n itemType: TInventoryItemType;\n unit: TInventoryUnitType;\n unitCustom?: string;\n minimumLevel: number;\n reorderLevel: number;\n maximumLevel?: number;\n costPerUnit?: number;\n supplierInfo?: string;\n sku?: string;\n barcode?: string;\n}\n\nexport interface IRoomInventory extends IMetaData {\n id: string;\n roomId: string;\n inventoryItemId: string;\n currentLevel: number;\n minimumLevel: number;\n maximumLevel?: number;\n parLevel?: number;\n lastRestockedAt?: Date;\n lastRestockedBy?: string;\n lastCheckedAt?: Date;\n lastCheckedBy?: string;\n autoReorder: boolean;\n locationNotes?: string;\n}\n\nexport interface IPropertyInventory extends IMetaData {\n id: string;\n propertyId: string;\n inventoryItemId: string;\n currentLevel: number;\n minimumLevel: number;\n maximumLevel?: number;\n parLevel?: number;\n lastRestockedAt?: Date;\n lastRestockedBy?: string;\n lastCheckedAt?: Date;\n lastCheckedBy?: string;\n autoReorder: boolean;\n locationNotes?: string;\n}\n\nexport interface IInventoryCount {\n id: string;\n checklistExecutionId: string;\n roomInventoryId: string;\n previousLevel: number;\n countedLevel: number;\n consumedAmount: number;\n restockedAmount: number;\n finalLevel: number;\n countedBy: string;\n countedAt: Date;\n needsRestock: boolean;\n notes?: string;\n createdAt: Date;\n}\n\nexport interface IInventoryRestockOrder {\n id: string;\n companyId: string;\n orderNumber?: string;\n status: TInventoryRestockOrderStatus;\n totalItems?: number;\n totalCost?: number;\n orderedBy?: string;\n orderedAt?: Date;\n expectedDelivery?: Date;\n receivedBy?: string;\n receivedAt?: Date;\n supplierInfo?: string;\n notes?: string;\n createdAt: Date;\n updatedAt: Date;\n}\n\nexport interface IInventoryRestockOrderItem {\n id: string;\n orderId: string;\n inventoryItemId: string;\n roomInventoryId?: string;\n propertyInventoryId?: string;\n quantityOrdered: number;\n quantityReceived: number;\n unitCost?: number;\n totalCost?: number;\n createdAt: Date;\n}\n","import type {\n ISelectOption,\n IMetaData,\n TRecordValue,\n TStatus,\n TUSStateCode,\n} from \"../base\";\n\nexport * from \"./routes\";\n\nexport const PROPERTY_STATUS = {\n Active: \"Active\",\n Inactive: \"Inactive\",\n} as const;\n\nexport type TPropertyStatus = TRecordValue<typeof PROPERTY_STATUS>;\n\nexport const PropertyStatusOptions: ISelectOption<TPropertyStatus>[] = [\n {\n label: \"Active\",\n value: PROPERTY_STATUS.Active,\n },\n {\n label: \"Inactive\",\n value: PROPERTY_STATUS.Inactive,\n },\n];\n\nexport const PROPERTY_TYPES = {\n Apartment: \"Apartment\",\n Commercial: \"Commercial\",\n Condo: \"Condo\",\n Duplex: \"Duplex\",\n House: \"House\",\n MultiFamily: \"Multi-Family\",\n Office: \"Office\",\n Retail: \"Retail\",\n Townhouse: \"Townhouse\",\n Vacation: \"Vacation Rental\",\n Warehouse: \"Warehouse\",\n} as const;\n\nexport type TPropertyType = TRecordValue<typeof PROPERTY_TYPES>;\n\nexport const PropertyTypeOptions: ISelectOption<TPropertyType>[] =\n Object.entries(PROPERTY_TYPES).map(([_, value]) => ({\n label: value,\n value: value,\n }));\n\nexport interface IProperty extends IMetaData {\n id: string;\n displayName: string;\n addressLine1: string;\n addressLine2?: string;\n city: string;\n stateCode: TUSStateCode;\n propertyType?: TPropertyType;\n status?: TPropertyStatus;\n sqft?: number;\n postalCode: string;\n country?: string;\n timezone?: string;\n imageUrl?: string;\n companyId: string;\n specialNotes?: string;\n}\n\nexport interface IPropertyAccessInformation {\n propertyId: string;\n entryInstructions?: string;\n accessCode?: string;\n wifiName?: string;\n wifiPassword?: string;\n alarmCode?: string;\n parkingInfo?: string;\n specialNotes?: string;\n}\n\nexport interface IPropertyBase {\n id: string;\n name: string;\n address?: string;\n propertyType?: string;\n imageUrl?: string;\n status?: TPropertyStatus;\n}\n\nexport interface IPropertyMetric {\n id: string;\n label: string;\n value: string | number;\n iconName?: string;\n}\n\nexport interface IPropertyAccessItem {\n id: string;\n label: string;\n value?: string;\n iconName?: string;\n}\n\nexport interface IPropertyRoomSummaryItem {\n id: string;\n name: string;\n roomType?: string;\n imageUrl?: string;\n checklistCount?: number;\n inventoryCount?: number;\n}\n\nexport interface IPropertyJobSummaryItem {\n id: string;\n title: string;\n description?: string;\n status?: TStatus;\n}\n\nexport interface IPropertyFormValues {\n displayName: string;\n propertyType: TPropertyType;\n status: TPropertyStatus;\n addressLine1: string;\n city: string;\n stateCode: TUSStateCode;\n postalCode: string;\n specialNotes: string;\n}\n\nexport interface IPropertyAccessFormValues {\n entryInstructions: string;\n accessCode: string;\n wifiName: string;\n wifiPassword: string;\n parkingInfo: string;\n specialNotes: string;\n}\n\nexport interface IPropertyFilterValues {\n status: TPropertyStatus;\n propertyType: TPropertyType;\n}\n\nexport interface IPropertySummary {\n id: string;\n displayName: string;\n propertyType: TPropertyType;\n addressLine1: string;\n addressLine2?: string;\n city: string;\n stateCode: TUSStateCode;\n postalCode: string;\n imageUrl?: string;\n status?: TPropertyStatus;\n}\n\nexport interface IPropertyDetail extends IPropertySummary {\n specialNotes?: string;\n roomCount?: number;\n createdAt?: Date;\n updatedAt?: Date;\n}\n","import type { IMetaData, TRecordValue } from \"../base\";\n\nexport * from \"./routes\";\n\nexport const ROOM_TYPE = {\n BEDROOM: \"BEDROOM\",\n BATHROOM: \"BATHROOM\",\n KITCHEN: \"KITCHEN\",\n LIVING_ROOM: \"LIVING_ROOM\",\n DINING_ROOM: \"DINING_ROOM\",\n OFFICE: \"OFFICE\",\n GARAGE: \"GARAGE\",\n LAUNDRY_ROOM: \"LAUNDRY_ROOM\",\n BASEMENT: \"BASEMENT\",\n ATTIC: \"ATTIC\",\n BALCONY: \"BALCONY\",\n PORCH: \"PORCH\",\n GARDEN: \"GARDEN\",\n OTHER: \"OTHER\",\n} as const;\n\nexport type TRoomType = TRecordValue<typeof ROOM_TYPE>;\n\nexport interface IRoom extends IMetaData {\n id: string;\n displayName: string;\n checklistTemplateId?: string;\n roomType?: TRoomType;\n heroPhoto?: string;\n propertyId: string;\n description?: string;\n}\n","import type { TRecordValue } from \"../base\";\n\nexport const SUBSCRIPTION_STATUS = {\n Active: \"Active\",\n Canceled: \"Canceled\",\n Expired: \"Expired\",\n PastDue: \"PastDue\",\n Trialing: \"Trialing\",\n} as const;\n\nexport type TSubscriptionStatus = TRecordValue<typeof SUBSCRIPTION_STATUS>;\n\nexport const SUBSCRIPTION_PROVIDER = {\n Stripe: \"Stripe\",\n Apple: \"Apple\",\n Google: \"Google\",\n} as const;\n\nexport type TSubscriptionProvider = TRecordValue<typeof SUBSCRIPTION_PROVIDER>;\n\nexport const BILLING_PERIOD = {\n Monthly: \"Monthly\",\n Yearly: \"Yearly\",\n} as const;\n\nexport type TBillingPeriod = TRecordValue<typeof BILLING_PERIOD>;\n\nexport interface IUserSubscription {\n id: string;\n userId: string;\n planId: string;\n status: TSubscriptionStatus;\n billingPeriod: TBillingPeriod;\n currentPeriodStart: Date;\n currentPeriodEnd: Date;\n provider: TSubscriptionProvider;\n providerSubscriptionId: string;\n cancelAtPeriodEnd: boolean;\n}\n","import type { IMetaData, TRecordValue } from \"../base\";\n\nexport * from \"./routes\";\n\nexport const ACCOUNT_TYPE = {\n TurndownAdmin: \"TurndownAdmin\",\n AccountAdmin: \"AccountAdmin\",\n Manager: \"Manager\",\n Staff: \"Staff\",\n Guest: \"Guest\",\n} as const;\n\nexport type TAccountType = TRecordValue<typeof ACCOUNT_TYPE>;\n\nexport const ACCOUNT_STATUS = {\n Active: \"Active\",\n Inactive: \"Inactive\",\n Suspended: \"Suspended\",\n Pending: \"Pending\",\n} as const;\n\nexport type TAccountStatus = TRecordValue<typeof ACCOUNT_STATUS>;\n\nexport const LANGUAGE = {\n English: \"English\",\n French: \"French\",\n Spanish: \"Spanish\",\n German: \"German\",\n} as const;\n\nexport type TLanguage = TRecordValue<typeof LANGUAGE>;\n\nexport interface IUser extends IMetaData {\n readonly id: string;\n\n firstName: string;\n lastName?: string;\n mi?: string;\n username?: string;\n email: string;\n profilePhoto?: string;\n\n passwordHash?: string;\n loginAttempts?: number;\n locked?: boolean;\n passwordLastReset?: Date;\n passwordResetRequired?: boolean;\n lastLogin?: Date;\n\n accountType: TAccountType;\n status: TAccountStatus;\n phoneNumber?: string;\n phoneFormat?: string;\n preferredLanguage?: TLanguage;\n\n biometrics?: string;\n}\n\nexport type IUserSafe = Omit<\n IUser,\n | \"passwordLastReset\"\n | \"lastLogin\"\n | \"passwordHash\"\n | \"loginAttempts\"\n | \"biometrics\"\n>;\n\nexport interface IDeviceInfo {\n userAgent?: string;\n ip?: string;\n deviceName?: string;\n}\n\nexport interface IUserSession {\n id: number;\n deviceInfo?: IDeviceInfo | null;\n createdAt: Date;\n lastUsedAt: Date;\n}\n","import type { TRecordValue } from \"../base\";\nexport * from \"./routes\";\n\n/**\n * Work session status enum\n */\nexport const WORK_SESSION_STATUS = {\n IN_PROGRESS: \"IN_PROGRESS\",\n COMPLETED: \"COMPLETED\",\n CANCELLED: \"CANCELLED\",\n} as const;\n\nexport type TWorkSessionStatus = TRecordValue<typeof WORK_SESSION_STATUS>;\n\n/**\n * Checklist execution status enum\n */\nexport const CHECKLIST_EXECUTION_STATUS = {\n PENDING: \"PENDING\",\n IN_PROGRESS: \"IN_PROGRESS\",\n COMPLETED: \"COMPLETED\",\n SKIPPED: \"SKIPPED\",\n} as const;\n\nexport type TChecklistExecutionStatus = TRecordValue<\n typeof CHECKLIST_EXECUTION_STATUS\n>;\n\n/**\n * Work session\n */\nexport interface IWorkSession {\n id: string;\n propertyId: string;\n serviceProviderCompanyId: string;\n performedBy: string;\n status: TWorkSessionStatus;\n scheduledDate: Date | null;\n startedAt: Date;\n completedAt: Date | null;\n totalTimeMinutes: number | null;\n notes: string | null;\n createdAt: Date;\n updatedAt: Date;\n}\n\n/**\n * Checklist execution\n */\nexport interface IChecklistExecution {\n id: string;\n workSessionId: string;\n roomChecklistId: string;\n roomId: string;\n workerId: string;\n status: TChecklistExecutionStatus;\n startedAt: Date | null;\n completedAt: Date | null;\n timeSpentMinutes: number | null;\n notes: string | null;\n createdAt: Date;\n updatedAt: Date;\n}\n\n/**\n * Checklist item completion\n */\nexport interface IChecklistItemCompletion {\n id: string;\n checklistExecutionId: string;\n roomChecklistItemId: string;\n completedBy: string;\n completedAt: Date;\n photoId: string | null;\n notes: string | null;\n skipped: boolean;\n skipReason: string | null;\n createdAt: Date;\n}\n\n/**\n * Work session with executions\n */\nexport interface IWorkSessionWithExecutions extends IWorkSession {\n executions: IChecklistExecution[];\n}\n\n/**\n * Input for creating a work session\n */\nexport interface ICreateWorkSessionInput {\n propertyId: string;\n serviceProviderCompanyId: string;\n performedBy: string;\n scheduledDate?: Date;\n notes?: string;\n}\n\n/**\n * Input for completing a checklist item\n */\nexport interface ICompleteChecklistItemInput {\n roomChecklistItemId: string;\n completedBy: string;\n photoId?: string;\n notes?: string;\n skipped?: boolean;\n skipReason?: string;\n}\n"],"mappings":"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","names":["exports","module","t","e","n","r","i","s","u","a","M","m","f","l","$","y","v","g","D","o","d","c","h","exports","module","t","i","d","n","e","s","exports","module","r","e","t","o","n","i","d","dayjs","relativeTime","isoWeek"]}
|
|
1
|
+
{"version":3,"sources":["../node_modules/dayjs/dayjs.min.js","../node_modules/dayjs/plugin/isoWeek.js","../node_modules/dayjs/plugin/relativeTime.js","../src/index.ts","../src/helpers/date/index.ts","../src/helpers/object/index.ts","../src/helpers/string/index.ts","../src/helpers/index.ts","../src/types/api/index.ts","../src/types/auth/index.ts","../src/types/base/paging.types.ts","../src/types/base/index.ts","../src/types/company/routes.ts","../src/types/company/index.ts","../src/types/damage-report/index.ts","../src/types/errors/index.ts","../src/types/image/index.ts","../src/types/inventory/index.ts","../src/types/property/index.ts","../src/types/room/index.ts","../src/types/subscription/index.ts","../src/types/user/index.ts","../src/types/work-session/index.ts"],"sourcesContent":["!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs=e()}(this,(function(){\"use strict\";var t=1e3,e=6e4,n=36e5,r=\"millisecond\",i=\"second\",s=\"minute\",u=\"hour\",a=\"day\",o=\"week\",c=\"month\",f=\"quarter\",h=\"year\",d=\"date\",l=\"Invalid Date\",$=/^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[Tt\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/,y=/\\[([^\\]]+)]|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,M={name:\"en\",weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),ordinal:function(t){var e=[\"th\",\"st\",\"nd\",\"rd\"],n=t%100;return\"[\"+t+(e[(n-20)%10]||e[n]||e[0])+\"]\"}},m=function(t,e,n){var r=String(t);return!r||r.length>=e?t:\"\"+Array(e+1-r.length).join(n)+t},v={s:m,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),i=n%60;return(e<=0?\"+\":\"-\")+m(r,2,\"0\")+\":\"+m(i,2,\"0\")},m:function t(e,n){if(e.date()<n.date())return-t(n,e);var r=12*(n.year()-e.year())+(n.month()-e.month()),i=e.clone().add(r,c),s=n-i<0,u=e.clone().add(r+(s?-1:1),c);return+(-(r+(n-i)/(s?i-u:u-i))||0)},a:function(t){return t<0?Math.ceil(t)||0:Math.floor(t)},p:function(t){return{M:c,y:h,w:o,d:a,D:d,h:u,m:s,s:i,ms:r,Q:f}[t]||String(t||\"\").toLowerCase().replace(/s$/,\"\")},u:function(t){return void 0===t}},g=\"en\",D={};D[g]=M;var p=\"$isDayjsObject\",S=function(t){return t instanceof _||!(!t||!t[p])},w=function t(e,n,r){var i;if(!e)return g;if(\"string\"==typeof e){var s=e.toLowerCase();D[s]&&(i=s),n&&(D[s]=n,i=s);var u=e.split(\"-\");if(!i&&u.length>1)return t(u[0])}else{var a=e.name;D[a]=e,i=a}return!r&&i&&(g=i),i||!r&&g},O=function(t,e){if(S(t))return t.clone();var n=\"object\"==typeof e?e:{};return n.date=t,n.args=arguments,new _(n)},b=v;b.l=w,b.i=S,b.w=function(t,e){return O(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var _=function(){function M(t){this.$L=w(t.locale,null,!0),this.parse(t),this.$x=this.$x||t.x||{},this[p]=!0}var m=M.prototype;return m.parse=function(t){this.$d=function(t){var e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(b.u(e))return new Date;if(e instanceof Date)return new Date(e);if(\"string\"==typeof e&&!/Z$/i.test(e)){var r=e.match($);if(r){var i=r[2]-1||0,s=(r[7]||\"0\").substring(0,3);return n?new Date(Date.UTC(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)):new Date(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)}}return new Date(e)}(t),this.init()},m.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},m.$utils=function(){return b},m.isValid=function(){return!(this.$d.toString()===l)},m.isSame=function(t,e){var n=O(t);return this.startOf(e)<=n&&n<=this.endOf(e)},m.isAfter=function(t,e){return O(t)<this.startOf(e)},m.isBefore=function(t,e){return this.endOf(e)<O(t)},m.$g=function(t,e,n){return b.u(t)?this[e]:this.set(n,t)},m.unix=function(){return Math.floor(this.valueOf()/1e3)},m.valueOf=function(){return this.$d.getTime()},m.startOf=function(t,e){var n=this,r=!!b.u(e)||e,f=b.p(t),l=function(t,e){var i=b.w(n.$u?Date.UTC(n.$y,e,t):new Date(n.$y,e,t),n);return r?i:i.endOf(a)},$=function(t,e){return b.w(n.toDate()[t].apply(n.toDate(\"s\"),(r?[0,0,0,0]:[23,59,59,999]).slice(e)),n)},y=this.$W,M=this.$M,m=this.$D,v=\"set\"+(this.$u?\"UTC\":\"\");switch(f){case h:return r?l(1,0):l(31,11);case c:return r?l(1,M):l(0,M+1);case o:var g=this.$locale().weekStart||0,D=(y<g?y+7:y)-g;return l(r?m-D:m+(6-D),M);case a:case d:return $(v+\"Hours\",0);case u:return $(v+\"Minutes\",1);case s:return $(v+\"Seconds\",2);case i:return $(v+\"Milliseconds\",3);default:return this.clone()}},m.endOf=function(t){return this.startOf(t,!1)},m.$set=function(t,e){var n,o=b.p(t),f=\"set\"+(this.$u?\"UTC\":\"\"),l=(n={},n[a]=f+\"Date\",n[d]=f+\"Date\",n[c]=f+\"Month\",n[h]=f+\"FullYear\",n[u]=f+\"Hours\",n[s]=f+\"Minutes\",n[i]=f+\"Seconds\",n[r]=f+\"Milliseconds\",n)[o],$=o===a?this.$D+(e-this.$W):e;if(o===c||o===h){var y=this.clone().set(d,1);y.$d[l]($),y.init(),this.$d=y.set(d,Math.min(this.$D,y.daysInMonth())).$d}else l&&this.$d[l]($);return this.init(),this},m.set=function(t,e){return this.clone().$set(t,e)},m.get=function(t){return this[b.p(t)]()},m.add=function(r,f){var d,l=this;r=Number(r);var $=b.p(f),y=function(t){var e=O(l);return b.w(e.date(e.date()+Math.round(t*r)),l)};if($===c)return this.set(c,this.$M+r);if($===h)return this.set(h,this.$y+r);if($===a)return y(1);if($===o)return y(7);var M=(d={},d[s]=e,d[u]=n,d[i]=t,d)[$]||1,m=this.$d.getTime()+r*M;return b.w(m,this)},m.subtract=function(t,e){return this.add(-1*t,e)},m.format=function(t){var e=this,n=this.$locale();if(!this.isValid())return n.invalidDate||l;var r=t||\"YYYY-MM-DDTHH:mm:ssZ\",i=b.z(this),s=this.$H,u=this.$m,a=this.$M,o=n.weekdays,c=n.months,f=n.meridiem,h=function(t,n,i,s){return t&&(t[n]||t(e,r))||i[n].slice(0,s)},d=function(t){return b.s(s%12||12,t,\"0\")},$=f||function(t,e,n){var r=t<12?\"AM\":\"PM\";return n?r.toLowerCase():r};return r.replace(y,(function(t,r){return r||function(t){switch(t){case\"YY\":return String(e.$y).slice(-2);case\"YYYY\":return b.s(e.$y,4,\"0\");case\"M\":return a+1;case\"MM\":return b.s(a+1,2,\"0\");case\"MMM\":return h(n.monthsShort,a,c,3);case\"MMMM\":return h(c,a);case\"D\":return e.$D;case\"DD\":return b.s(e.$D,2,\"0\");case\"d\":return String(e.$W);case\"dd\":return h(n.weekdaysMin,e.$W,o,2);case\"ddd\":return h(n.weekdaysShort,e.$W,o,3);case\"dddd\":return o[e.$W];case\"H\":return String(s);case\"HH\":return b.s(s,2,\"0\");case\"h\":return d(1);case\"hh\":return d(2);case\"a\":return $(s,u,!0);case\"A\":return $(s,u,!1);case\"m\":return String(u);case\"mm\":return b.s(u,2,\"0\");case\"s\":return String(e.$s);case\"ss\":return b.s(e.$s,2,\"0\");case\"SSS\":return b.s(e.$ms,3,\"0\");case\"Z\":return i}return null}(t)||i.replace(\":\",\"\")}))},m.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},m.diff=function(r,d,l){var $,y=this,M=b.p(d),m=O(r),v=(m.utcOffset()-this.utcOffset())*e,g=this-m,D=function(){return b.m(y,m)};switch(M){case h:$=D()/12;break;case c:$=D();break;case f:$=D()/3;break;case o:$=(g-v)/6048e5;break;case a:$=(g-v)/864e5;break;case u:$=g/n;break;case s:$=g/e;break;case i:$=g/t;break;default:$=g}return l?$:b.a($)},m.daysInMonth=function(){return this.endOf(c).$D},m.$locale=function(){return D[this.$L]},m.locale=function(t,e){if(!t)return this.$L;var n=this.clone(),r=w(t,e,!0);return r&&(n.$L=r),n},m.clone=function(){return b.w(this.$d,this)},m.toDate=function(){return new Date(this.valueOf())},m.toJSON=function(){return this.isValid()?this.toISOString():null},m.toISOString=function(){return this.$d.toISOString()},m.toString=function(){return this.$d.toUTCString()},M}(),k=_.prototype;return O.prototype=k,[[\"$ms\",r],[\"$s\",i],[\"$m\",s],[\"$H\",u],[\"$W\",a],[\"$M\",c],[\"$y\",h],[\"$D\",d]].forEach((function(t){k[t[1]]=function(e){return this.$g(e,t[0],t[1])}})),O.extend=function(t,e){return t.$i||(t(e,_,O),t.$i=!0),O},O.locale=w,O.isDayjs=S,O.unix=function(t){return O(1e3*t)},O.en=D[g],O.Ls=D,O.p={},O}));","!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(t):(e=\"undefined\"!=typeof globalThis?globalThis:e||self).dayjs_plugin_isoWeek=t()}(this,(function(){\"use strict\";var e=\"day\";return function(t,i,s){var a=function(t){return t.add(4-t.isoWeekday(),e)},d=i.prototype;d.isoWeekYear=function(){return a(this).year()},d.isoWeek=function(t){if(!this.$utils().u(t))return this.add(7*(t-this.isoWeek()),e);var i,d,n,o,r=a(this),u=(i=this.isoWeekYear(),d=this.$u,n=(d?s.utc:s)().year(i).startOf(\"year\"),o=4-n.isoWeekday(),n.isoWeekday()>4&&(o+=7),n.add(o,e));return r.diff(u,\"week\")+1},d.isoWeekday=function(e){return this.$utils().u(e)?this.day()||7:this.day(this.day()%7?e:e-7)};var n=d.startOf;d.startOf=function(e,t){var i=this.$utils(),s=!!i.u(t)||t;return\"isoweek\"===i.p(e)?s?this.date(this.date()-(this.isoWeekday()-1)).startOf(\"day\"):this.date(this.date()-1-(this.isoWeekday()-1)+7).endOf(\"day\"):n.bind(this)(e,t)}}}));","!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)}}}));","export * from \"./helpers\";\nexport * from \"./types\";\n","import dayjs from \"dayjs\";\nimport isoWeek from \"dayjs/plugin/isoWeek\";\nimport relativeTime from \"dayjs/plugin/relativeTime\";\n\ndayjs.extend(relativeTime);\ndayjs.extend(isoWeek);\n\nexport type TDateInput = Date | string | number | null | undefined;\nexport type TDateFormat = \"MM/DD/YYYY\" | \"MM/DD/YY HH:mm A\" | string;\n\nconst defaultDateFallback = \"--\";\n\nconst isValidDateInput = (date: TDateInput): boolean => {\n return date !== null && date !== undefined && dayjs(date).isValid();\n};\n\n/**\n * Format a date using a dayjs format string.\n *\n * @param {TDateInput} date - Date-like value to format.\n * @param {TDateFormat} format - dayjs format string.\n * @returns {string} Formatted date or `--` for missing/invalid input.\n */\nexport const formatDate = (\n date?: TDateInput,\n format: TDateFormat = \"MM/DD/YYYY\",\n): string => {\n if (!isValidDateInput(date)) {\n return defaultDateFallback;\n }\n\n return dayjs(date).format(format);\n};\n\n/**\n * Return a human-readable relative time string.\n *\n * @param {TDateInput} date - Date-like value to compare against now.\n * @returns {string} Relative time or `--` for missing/invalid input.\n */\nexport const timeAgo = (date: TDateInput): string => {\n if (!isValidDateInput(date)) {\n return defaultDateFallback;\n }\n\n return dayjs(date).fromNow();\n};\n\n/**\n * Add days to a date.\n *\n * @param {TDateInput} date - Source date.\n * @param {number} days - Number of days to add.\n * @returns {Date} Updated date.\n */\nexport const addDays = (date: TDateInput, days: number): Date => {\n return dayjs(date).add(days, \"day\").toDate();\n};\n\n/**\n * Subtract days from a date.\n *\n * @param {TDateInput} date - Source date.\n * @param {number} days - Number of days to subtract.\n * @returns {Date} Updated date.\n */\nexport const subtractDays = (date: TDateInput, days: number): Date => {\n return dayjs(date).subtract(days, \"day\").toDate();\n};\n\n/**\n * Return the absolute number of whole day boundaries between two dates.\n *\n * @param {TDateInput} dateA - First date.\n * @param {TDateInput} dateB - Second date.\n * @returns {number} Absolute difference in days, or 0 for invalid input.\n */\nexport const daysBetween = (dateA: TDateInput, dateB: TDateInput): number => {\n if (!isValidDateInput(dateA) || !isValidDateInput(dateB)) {\n return 0;\n }\n\n return Math.abs(dayjs(dateA).diff(dayjs(dateB), \"day\"));\n};\n\n/**\n * Check whether a date is today.\n *\n * @param {TDateInput} date - Date-like value.\n * @returns {boolean} True when the date is today.\n */\nexport const isToday = (date: TDateInput): boolean => {\n if (!isValidDateInput(date)) {\n return false;\n }\n\n return dayjs(date).isSame(dayjs(), \"day\");\n};\n\n/**\n * Check whether a date is in the past.\n *\n * @param {TDateInput} date - Date-like value.\n * @returns {boolean} True when the date is before now.\n */\nexport const isPast = (date: TDateInput): boolean => {\n if (!isValidDateInput(date)) {\n return false;\n }\n\n return dayjs(date).isBefore(dayjs());\n};\n\n/**\n * Check whether a date is in the future.\n *\n * @param {TDateInput} date - Date-like value.\n * @returns {boolean} True when the date is after now.\n */\nexport const isFuture = (date: TDateInput): boolean => {\n if (!isValidDateInput(date)) {\n return false;\n }\n\n return dayjs(date).isAfter(dayjs());\n};\n\n/**\n * Return the start of the day for a date.\n *\n * @param {TDateInput} date - Source date.\n * @returns {Date} Date set to 00:00:00.000.\n */\nexport const startOfDay = (date: TDateInput): Date => {\n return dayjs(date).startOf(\"day\").toDate();\n};\n\n/**\n * Return the end of the day for a date.\n *\n * @param {TDateInput} date - Source date.\n * @returns {Date} Date set to 23:59:59.999.\n */\nexport const endOfDay = (date: TDateInput): Date => {\n return dayjs(date).endOf(\"day\").toDate();\n};\n\n/**\n * Return the ISO week start date, Monday at 00:00:00.000.\n *\n * @param {TDateInput} date - Source date.\n * @returns {Date} Start of ISO week.\n */\nexport const startOfWeek = (date: TDateInput): Date => {\n return dayjs(date).startOf(\"isoWeek\").toDate();\n};\n\n/**\n * Return the ISO week end date, Sunday at 23:59:59.999.\n *\n * @param {TDateInput} date - Source date.\n * @returns {Date} End of ISO week.\n */\nexport const endOfWeek = (date: TDateInput): Date => {\n return dayjs(date).endOf(\"isoWeek\").toDate();\n};\n\n/**\n * Return all seven dates in the ISO week containing the provided date.\n *\n * @param {TDateInput} date - Source date.\n * @returns {Date[]} Monday-through-Sunday dates at the start of each day.\n */\nexport const getWeekDays = (date: TDateInput): Date[] => {\n const weekStart = dayjs(date).startOf(\"isoWeek\");\n\n return Array.from({ length: 7 }, (_value, index) => {\n return weekStart.add(index, \"day\").startOf(\"day\").toDate();\n });\n};\n\n/**\n * Add weeks to a date.\n *\n * @param {TDateInput} date - Source date.\n * @param {number} weeks - Number of weeks to add.\n * @returns {Date} Updated date.\n */\nexport const addWeeks = (date: TDateInput, weeks: number): Date => {\n return dayjs(date).add(weeks, \"week\").toDate();\n};\n\n/**\n * Subtract weeks from a date.\n *\n * @param {TDateInput} date - Source date.\n * @param {number} weeks - Number of weeks to subtract.\n * @returns {Date} Updated date.\n */\nexport const subtractWeeks = (date: TDateInput, weeks: number): Date => {\n return dayjs(date).subtract(weeks, \"week\").toDate();\n};\n","import type {\n IFilterCondition,\n ISortCondition,\n} from \"../../types/base/paging.types\";\n\ntype TRecord = Record<string, unknown>;\ntype TPropertyRecord = Record<PropertyKey, unknown>;\ntype TSortableValue =\n | string\n | number\n | bigint\n | boolean\n | Date\n | null\n | undefined;\n\ntype TReplaceNulls<TValue> = TValue extends null\n ? \"\"\n : TValue extends (infer TItem)[]\n ? TReplaceNulls<TItem>[]\n : TValue extends Date\n ? TValue\n : TValue extends object\n ? { [TKey in keyof TValue]: TReplaceNulls<TValue[TKey]> }\n : TValue;\n\nconst unsafePathSegments = new Set([\"__proto__\", \"prototype\", \"constructor\"]);\n\nconst isRecord = (value: unknown): value is TRecord => {\n return (\n typeof value === \"object\" &&\n value !== null &&\n !Array.isArray(value) &&\n !(value instanceof Date)\n );\n};\n\nconst isSafePathSegment = (segment: string): boolean => {\n return segment.length > 0 && !unsafePathSegments.has(segment);\n};\n\nconst getPathSegments = (path: string): string[] => {\n return path.split(\".\").filter((segment) => segment.length > 0);\n};\n\n/**\n * Safely parse a JSON string into a typed value.\n *\n * When a fallback value is provided, the function always returns that generic\n * type. Without a fallback value, parse failures return an empty object.\n *\n * @typeParam TParsed - Expected parsed value type.\n * @param {string | null | undefined} jsonString - JSON string to parse.\n * @param {TParsed} [fallbackValue] - Value returned when parsing fails.\n * @returns {TParsed | Record<string, unknown>} Parsed value or fallback.\n * @example\n * parseJSON<{ a: number }>('{\"a\":1}', { a: 0 }) // => { a: 1 }\n * parseJSON('not json') // => {}\n */\nexport function parseJSON<TParsed>(\n jsonString: string | null | undefined,\n fallbackValue: TParsed,\n): TParsed;\nexport function parseJSON(\n jsonString: string | null | undefined,\n): Record<string, unknown>;\nexport function parseJSON<TParsed>(\n jsonString: string | null | undefined,\n fallbackValue?: TParsed,\n): TParsed | Record<string, unknown> {\n if (!jsonString) {\n return fallbackValue ?? {};\n }\n\n try {\n const parsedValue = JSON.parse(jsonString) as unknown;\n\n return parsedValue as TParsed;\n } catch {\n return fallbackValue ?? {};\n }\n}\n\n/**\n * Stringify a value to JSON while skipping circular references.\n *\n * Uses an internal cache to omit repeated object references that would\n * normally cause `JSON.stringify` to throw.\n *\n * @param {unknown} value - Value to stringify.\n * @returns {string | undefined} JSON string with circulars omitted.\n * @example\n * const value: Record<string, unknown> = {}; value.self = value;\n * JSONStringify(value) // => \"{}\"\n */\nexport const JSONStringify = (value: unknown): string | undefined => {\n const seenValues = new WeakSet<object>();\n\n try {\n return JSON.stringify(value, (_key, nestedValue) => {\n if (typeof nestedValue === \"bigint\") {\n return nestedValue.toString();\n }\n\n if (typeof nestedValue === \"object\" && nestedValue !== null) {\n if (seenValues.has(nestedValue)) {\n return undefined;\n }\n\n seenValues.add(nestedValue);\n }\n\n return nestedValue;\n });\n } catch {\n return undefined;\n }\n};\n\n/**\n * Deep-remove `undefined` properties while preserving Dates and arrays.\n *\n * Object properties with `undefined` values are removed. Array items are\n * preserved so array indexes do not shift.\n *\n * @typeParam TValue - Input value type.\n * @param {TValue} value - Input value.\n * @returns {TValue} Cleaned clone with `undefined` object properties removed.\n */\nexport const removeUndefined = <TValue>(value: TValue): TValue => {\n if (Array.isArray(value)) {\n return value.map((item) => removeUndefined(item)) as TValue;\n }\n\n if (isRecord(value)) {\n const updatedValue = Object.entries(value).reduce<TRecord>(\n (accumulator, [key, nestedValue]) => {\n if (nestedValue !== undefined) {\n accumulator[key] = removeUndefined(nestedValue);\n }\n\n return accumulator;\n },\n {},\n );\n\n return updatedValue as TValue;\n }\n\n return value;\n};\n\n/**\n * Test whether a location object's `pathname` equals a key.\n *\n * @param {{ pathname?: string } | null | undefined} location - Object expected\n * to have a `pathname`.\n * @param {string} key - Path to compare.\n * @returns {boolean}\n * @example\n * validPath({ pathname: \"/home\" }, \"/home\") // true\n */\nexport const validPath = (\n location: { pathname?: string } | null | undefined,\n key: string,\n): boolean => {\n return location?.pathname === key;\n};\n\n/**\n * Return the first element if the input is an array; otherwise return the value itself.\n *\n * @typeParam T - Element type.\n * @param {T | T[]} input - A single value or an array.\n * @returns {T} First element or the input value.\n * @example\n * returnObject([1,2,3]) // 1\n * returnObject(5) // 5\n */\nexport const returnObject = <T>(input: T | T[]): T => {\n return Array.isArray(input) ? input[0] : input;\n};\n\n/**\n * Filter out items from `array1` whose `id` appears in `array2`.\n *\n * @typeParam T - Object type with an `id` field.\n * @param {T[]} [array1] - Source array.\n * @param {T[]} [array2] - Items whose `id`s should be excluded.\n * @returns {T[]} Filtered array (or `[]` on invalid input).\n */\nexport const filterArrayById = <T extends { id: number | string }>(\n array1?: T[],\n array2?: T[],\n): T[] => {\n if (!Array.isArray(array1) || !Array.isArray(array2)) {\n return [];\n }\n\n const idsToExclude = new Set(array2.map((item) => item.id));\n return array1.filter((item) => !idsToExclude.has(item.id));\n};\n\n/**\n * Sort an array of objects by a given property (ascending).\n *\n * Mutates the original array (uses `Array.prototype.sort`).\n *\n * @typeParam T - Object type.\n * @typeParam TKey - Sortable property key.\n * @param {T[]} array - Array to sort.\n * @param {TKey} property - Property name to sort by.\n * @returns {T[]} The same array instance, sorted (or empty array if input invalid).\n */\nexport const sortArrayByProperty = <\n TKey extends PropertyKey,\n T extends Record<TKey, TSortableValue>,\n>(\n array: T[],\n property: TKey,\n): T[] => {\n if (!Array.isArray(array) || array.length === 0) return [];\n\n return array.sort((a, b) => {\n const firstValue = a[property];\n const secondValue = b[property];\n\n if (firstValue === secondValue) return 0;\n if (firstValue === null || firstValue === undefined) return 1;\n if (secondValue === null || secondValue === undefined) return -1;\n if (firstValue < secondValue) return -1;\n if (firstValue > secondValue) return 1;\n return 0;\n });\n};\n\n/**\n * Recursively replace `null` values with empty strings.\n *\n * Works on primitives, arrays, Dates, and plain objects.\n *\n * @typeParam TValue - Input value type.\n * @param {TValue} value - Input value.\n * @returns {TReplaceNulls<TValue>} Value with all `null` replaced by `\"\"`.\n */\nexport const replaceNulls = <TValue>(value: TValue): TReplaceNulls<TValue> => {\n if (value === null) {\n return \"\" as TReplaceNulls<TValue>;\n }\n\n if (Array.isArray(value)) {\n return value.map((item) => replaceNulls(item)) as TReplaceNulls<TValue>;\n }\n\n if (isRecord(value)) {\n const updatedValue = Object.entries(value).reduce<TRecord>(\n (accumulator, [key, nestedValue]) => {\n accumulator[key] = replaceNulls(nestedValue);\n return accumulator;\n },\n {},\n );\n\n return updatedValue as TReplaceNulls<TValue>;\n }\n\n return value as TReplaceNulls<TValue>;\n};\n\n/**\n * Recursively remove object keys that contain a dot (`.`).\n *\n * @typeParam TValue - Input value type.\n * @param {TValue} value - Input object or array.\n * @returns {TValue} New value with dotted keys removed at all levels.\n */\nexport const removeFormProperties = <TValue>(value: TValue): TValue => {\n if (Array.isArray(value)) {\n return value.map((item) => removeFormProperties(item)) as TValue;\n }\n\n if (isRecord(value)) {\n const updatedValue = Object.entries(value).reduce<TRecord>(\n (accumulator, [key, nestedValue]) => {\n if (!key.includes(\".\")) {\n accumulator[key] = removeFormProperties(nestedValue);\n }\n\n return accumulator;\n },\n {},\n );\n\n return updatedValue as TValue;\n }\n\n return value;\n};\n\n/**\n * Recursively convert string booleans `\"true\"`/`\"false\"` to actual booleans.\n *\n * Leaves all other values unchanged.\n *\n * @typeParam TValue - Input value type.\n * @param {TValue} value - Input object or array.\n * @returns {TValue} New value with boolean-like strings converted.\n */\nexport const convertStringBooleans = <TValue>(value: TValue): TValue => {\n if (Array.isArray(value)) {\n return value.map((item) => convertStringBooleans(item)) as TValue;\n }\n\n if (isRecord(value)) {\n const updatedValue = Object.entries(value).reduce<TRecord>(\n (accumulator, [key, nestedValue]) => {\n if (nestedValue === \"true\") {\n accumulator[key] = true;\n } else if (nestedValue === \"false\") {\n accumulator[key] = false;\n } else {\n accumulator[key] = convertStringBooleans(nestedValue);\n }\n\n return accumulator;\n },\n {},\n );\n\n return updatedValue as TValue;\n }\n\n return value;\n};\n\n/**\n * Convenience helper to clean form-like data:\n * - Removes `undefined` properties\n * - Converts string booleans to booleans\n * - Removes keys containing a dot (`.`)\n *\n * @typeParam TObject - Form data object type.\n * @param {TObject} objectToClean - Input data.\n * @returns {Partial<TObject>} Cleaned clone.\n */\nexport const cleanFormData = <TObject extends TRecord>(\n objectToClean: TObject,\n): Partial<TObject> => {\n return removeFormProperties(\n convertStringBooleans(removeUndefined(objectToClean)),\n ) as Partial<TObject>;\n};\n\n/**\n * Return a default pagination object, allowing optional sort and filters.\n *\n * @param {ISortCondition[]} [sort] - Optional sort conditions.\n * @param {IFilterCondition[]} [filters] - Optional filter conditions.\n * @returns {{ page: number; size: number; sort: ISortCondition[]; filters: IFilterCondition[] }}\n * @example\n * resetPagination() // => { page:1, size:25, sort:[], filters:[] }\n */\nexport const resetPagination = (\n sort?: ISortCondition[],\n filters?: IFilterCondition[],\n) => {\n return {\n page: 1,\n size: 25,\n sort: sort || [],\n filters: filters || [],\n };\n};\n\n/**\n * Format a string of digits into a U.S. phone number.\n *\n * Strips non-numeric characters and formats 10 digits as `(XXX) XXX-XXXX`.\n * Strips a leading US country code when 11 digits are provided.\n * If a value cannot be formatted, returns the original value as a string.\n *\n * @param {string | number} value - Phone number digits (string or number).\n * @returns {string} Formatted phone number, or original input if invalid length.\n * @example\n * formatPhoneNumber(\"1234567890\") // \"(123) 456-7890\"\n * formatPhoneNumber(9876543210) // \"(987) 654-3210\"\n * formatPhoneNumber(\"555\") // \"555\"\n */\nexport const formatPhoneNumber = (value: string | number): string => {\n const originalValue = value.toString();\n const digits = originalValue.replace(/\\D/g, \"\");\n const normalizedDigits =\n digits.length === 11 && digits.startsWith(\"1\") ? digits.slice(1) : digits;\n\n if (normalizedDigits.length !== 10) return originalValue;\n\n const area = normalizedDigits.slice(0, 3);\n const prefix = normalizedDigits.slice(3, 6);\n const line = normalizedDigits.slice(6);\n\n return `(${area}) ${prefix}-${line}`;\n};\n\n/**\n * Format a number with thousands separators (commas).\n *\n * @param {number} value - Number to format.\n * @returns {string} String with commas.\n * @example\n * formatNumber(1234567) // \"1,234,567\"\n */\nexport const formatNumber = (value: number): string => {\n return value.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\n};\n\n/**\n * Remove comma separators from a number-like value.\n *\n * @param {number | string} value - Number-like value.\n * @returns {string} Value without comma separators.\n */\nexport const parseNumber = (value: number | string): string => {\n return value.toString().replace(/,/g, \"\");\n};\n\n/**\n * Delete a property from an object if it exists (no-op if it doesn't).\n *\n * @typeParam TObject - Object type.\n * @param {TObject} objectToUpdate - Target object (mutated).\n * @param {keyof TObject | string} propertyName - Property to delete.\n * @returns {void}\n */\nexport const deletePropertyIfExists = <TObject extends TRecord>(\n objectToUpdate: TObject,\n propertyName: keyof TObject | string,\n): void => {\n if (Object.prototype.hasOwnProperty.call(objectToUpdate, propertyName)) {\n delete objectToUpdate[propertyName as keyof TObject];\n }\n};\n\n/**\n * Split an array into chunks of a given size.\n *\n * @typeParam T - Element type.\n * @param {T[]} array - Source array.\n * @param {number} chunkSize - Size of each chunk.\n * @returns {T[][]} Array of chunks (last one may be smaller).\n * @example\n * chunkArray([1,2,3,4,5], 2) // [[1,2],[3,4],[5]]\n */\nexport const chunkArray = <T>(array: T[], chunkSize: number): T[][] => {\n if (!Array.isArray(array) || chunkSize <= 0 || !Number.isFinite(chunkSize)) {\n return [];\n }\n\n const result: T[][] = [];\n const normalizedChunkSize = Math.floor(chunkSize);\n\n for (let i = 0; i < array.length; i += normalizedChunkSize) {\n result.push(array.slice(i, i + normalizedChunkSize));\n }\n\n return result;\n};\n\n/**\n * Return a shallow clone of `objectToOmitFrom` without the listed properties.\n *\n * @typeParam TObject - Source object type.\n * @typeParam TKey - Keys to omit.\n * @param {TObject} objectToOmitFrom - Source object.\n * @param {readonly TKey[]} propsToOmit - Property names to omit.\n * @returns {Omit<TObject, TKey>} New object without omitted props.\n * @example\n * omitProperties({a:1,b:2}, [\"b\"]) // { a:1 }\n */\nexport const omitProperties = <\n TObject extends TRecord,\n TKey extends keyof TObject,\n>(\n objectToOmitFrom: TObject,\n propsToOmit: readonly TKey[],\n): Omit<TObject, TKey> => {\n const updatedObject: Partial<TObject> = { ...objectToOmitFrom };\n\n propsToOmit.forEach((propertyName) => {\n delete updatedObject[propertyName];\n });\n\n return updatedObject as Omit<TObject, TKey>;\n};\n\n/**\n * Safe `hasOwnProperty` check.\n *\n * @param {unknown} value - Value to test.\n * @param {PropertyKey} key - Property name.\n * @returns {boolean}\n */\nexport const hasProperty = <TKey extends PropertyKey>(\n value: unknown,\n key: TKey,\n): value is Record<TKey, unknown> => {\n if (value === null || value === undefined) return false;\n return Object.prototype.hasOwnProperty.call(value, key);\n};\n\n/**\n * Safe `hasOwnProperty` alias from the reference utilities.\n *\n * @param {unknown} value - Value to test.\n * @param {PropertyKey} key - Property name.\n * @returns {boolean}\n */\nexport const hasOwnProp = <TKey extends PropertyKey>(\n value: unknown,\n key: TKey,\n): value is Record<TKey, unknown> => {\n return hasProperty(value, key);\n};\n\n/**\n * Determine if an object has at least one own enumerable property.\n *\n * @param {unknown} value - Object to test.\n * @returns {boolean} `true` if there is at least one key.\n */\nexport const hasProperties = (value: unknown): boolean => {\n return isRecord(value) && Object.keys(value).length > 0;\n};\n\n/**\n * Get the first own enumerable property value from an object.\n *\n * @typeParam TObject - Source object type.\n * @param {TObject | null | undefined} value - Source object.\n * @returns {TObject[keyof TObject] | null} First value, or null for empty/non-object input.\n */\nexport const getFirstPropertyValue = <TObject extends TRecord>(\n value: TObject | null | undefined,\n): TObject[keyof TObject] | null => {\n if (value === null || value === undefined || !hasProperties(value)) {\n return null;\n }\n\n const source = value as TObject;\n const keys = Object.keys(source) as (keyof TObject)[];\n return source[keys[0]];\n};\n\n/**\n * Get a nested value from an object using dot notation.\n *\n * @param {unknown} value - Source object.\n * @param {string} path - Dot-delimited path.\n * @returns {unknown} Nested value, or undefined when the path cannot be resolved.\n * @example\n * getNestedValue({ user: { name: \"John\" } }, \"user.name\") // \"John\"\n */\nexport const getNestedValue = (value: unknown, path: string): unknown => {\n const pathSegments = getPathSegments(path);\n\n if (pathSegments.length === 0) {\n return value;\n }\n\n let currentValue: unknown = value;\n\n for (const pathSegment of pathSegments) {\n if (!isSafePathSegment(pathSegment)) {\n return undefined;\n }\n\n if (currentValue === null || currentValue === undefined) {\n return undefined;\n }\n\n if (\n typeof currentValue !== \"object\" &&\n typeof currentValue !== \"function\"\n ) {\n return undefined;\n }\n\n currentValue = (currentValue as TPropertyRecord)[pathSegment];\n }\n\n return currentValue;\n};\n\n/**\n * Set a nested value on an object using dot notation.\n *\n * Mutates and returns the provided object. Unsafe path segments are ignored to\n * prevent prototype pollution.\n *\n * @typeParam TObject - Target object type.\n * @param {TObject} objectToUpdate - Target object.\n * @param {string} path - Dot-delimited path.\n * @param {unknown} value - Value to set.\n * @returns {TObject} The mutated target object.\n * @example\n * setNestedValue({}, \"user.name\", \"John\") // { user: { name: \"John\" } }\n */\nexport const setNestedValue = <TObject extends TRecord>(\n objectToUpdate: TObject,\n path: string,\n value: unknown,\n): TObject => {\n const pathSegments = getPathSegments(path);\n\n if (\n pathSegments.length === 0 ||\n pathSegments.some((pathSegment) => !isSafePathSegment(pathSegment))\n ) {\n return objectToUpdate;\n }\n\n let currentValue: TRecord = objectToUpdate;\n\n for (let i = 0; i < pathSegments.length - 1; i += 1) {\n const pathSegment = pathSegments[i];\n const nextValue = currentValue[pathSegment];\n\n if (!isRecord(nextValue)) {\n currentValue[pathSegment] = {};\n }\n\n currentValue = currentValue[pathSegment] as TRecord;\n }\n\n currentValue[pathSegments[pathSegments.length - 1]] = value;\n return objectToUpdate;\n};\n\n/**\n * Deep clone a value while preserving Dates and circular references.\n *\n * @typeParam TValue - Input value type.\n * @param {TValue} value - Value to clone.\n * @returns {TValue} Deep clone of the input.\n */\nexport const deepClone = <TValue>(value: TValue): TValue => {\n const cloneValue = <TNestedValue>(\n nestedValue: TNestedValue,\n seenValues: WeakMap<object, unknown>,\n ): TNestedValue => {\n if (nestedValue === null || typeof nestedValue !== \"object\") {\n return nestedValue;\n }\n\n if (nestedValue instanceof Date) {\n return new Date(nestedValue.getTime()) as TNestedValue;\n }\n\n if (seenValues.has(nestedValue)) {\n return seenValues.get(nestedValue) as TNestedValue;\n }\n\n if (Array.isArray(nestedValue)) {\n const clonedArray: unknown[] = [];\n seenValues.set(nestedValue, clonedArray);\n\n nestedValue.forEach((item) => {\n clonedArray.push(cloneValue(item, seenValues));\n });\n\n return clonedArray as TNestedValue;\n }\n\n const clonedObject = Object.create(\n Object.getPrototypeOf(nestedValue),\n ) as TPropertyRecord;\n seenValues.set(nestedValue, clonedObject);\n\n Reflect.ownKeys(nestedValue).forEach((key) => {\n clonedObject[key] = cloneValue(\n (nestedValue as TPropertyRecord)[key],\n seenValues,\n );\n });\n\n return clonedObject as TNestedValue;\n };\n\n return cloneValue(value, new WeakMap<object, unknown>());\n};\n\n/**\n * Flatten a nested object into dot notation.\n *\n * Arrays and Dates are treated as leaf values.\n *\n * @param {TRecord} value - Source object.\n * @param {string} [prefix] - Internal prefix for recursion.\n * @returns {TRecord} Flattened object.\n * @example\n * flatten({ user: { name: \"John\" } }) // { \"user.name\": \"John\" }\n */\nexport const flatten = (value: TRecord, prefix = \"\"): TRecord => {\n const result: TRecord = {};\n\n Object.entries(value).forEach(([key, nestedValue]) => {\n const newKey = prefix ? `${prefix}.${key}` : key;\n\n if (isRecord(nestedValue)) {\n Object.assign(result, flatten(nestedValue, newKey));\n return;\n }\n\n result[newKey] = nestedValue;\n });\n\n return result;\n};\n\n/**\n * Convert a dot-notation object into a nested object.\n *\n * Unsafe path segments are ignored to prevent prototype pollution.\n *\n * @param {TRecord} value - Dot-notation source object.\n * @returns {TRecord} Nested object.\n * @example\n * unflatten({ \"user.name\": \"John\" }) // { user: { name: \"John\" } }\n */\nexport const unflatten = (value: TRecord): TRecord => {\n const result: TRecord = {};\n\n Object.entries(value).forEach(([key, nestedValue]) => {\n setNestedValue(result, key, nestedValue);\n });\n\n return result;\n};\n","/**\n * String utilities for common text manipulation tasks.\n */\n\nimport { TUSStateCode } from \"@/types\";\n\nconst wordBoundaryRegex = /([a-z0-9])([A-Z])/g;\nconst acronymBoundaryRegex = /([A-Z]+)([A-Z][a-z])/g;\n\nconst getWords = (value: string): string[] => {\n return value\n .trim()\n .replace(acronymBoundaryRegex, \"$1 $2\")\n .replace(wordBoundaryRegex, \"$1 $2\")\n .replace(/[^a-zA-Z0-9]+/g, \" \")\n .trim()\n .split(/\\s+/)\n .filter(Boolean);\n};\n\nconst capitalizeWord = (value: string): string => {\n if (!value) {\n return \"\";\n }\n\n return value.charAt(0).toUpperCase() + value.slice(1).toLowerCase();\n};\n\n/**\n * Adds commas to a number for thousands separators.\n *\n * @example formatNumber(1000) => '1,000'\n * @example formatNumber('1234567') => '1,234,567'\n * @example formatNumber(1234567.89) => '1,234,567.89'\n */\nexport const formatNumber = (value: string | number): string => {\n const str = String(value);\n const [integer, decimal] = str.split(\".\");\n const formattedInteger = integer.replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\n\n return decimal !== undefined\n ? `${formattedInteger}.${decimal}`\n : formattedInteger;\n};\n\nexport const normalCase = (str?: string): string => {\n if (!str) {\n return \"\";\n }\n\n return getWords(str).map(capitalizeWord).join(\" \");\n};\n\nexport const sentenceCase = (str?: string): string => {\n if (!str) {\n return \"\";\n }\n\n const normalizedValue = str.trim().toLowerCase();\n\n return normalizedValue.charAt(0).toUpperCase() + normalizedValue.slice(1);\n};\n\nexport const upperCase = (str?: string): string => {\n return str?.toUpperCase() ?? \"\";\n};\n\nexport const lowerCase = (str?: string): string => {\n return str?.toLowerCase() ?? \"\";\n};\n\n/**\n * Converts a string to camelCase.\n *\n * @example toCamelCase('hello-world') => 'helloWorld'\n * @example toCamelCase('hello_world') => 'helloWorld'\n */\nexport const toCamelCase = (str: string): string => {\n const words = getWords(str);\n\n if (words.length === 0) {\n return \"\";\n }\n\n const [firstWord, ...remainingWords] = words;\n\n return [firstWord.toLowerCase(), ...remainingWords.map(capitalizeWord)].join(\n \"\",\n );\n};\n\nexport const camelCase = toCamelCase;\n\n/**\n * Converts a string to kebab-case.\n *\n * @example toKebabCase('helloWorld') => 'hello-world'\n * @example toKebabCase('Hello_World') => 'hello-world'\n */\nexport const toKebabCase = (str: string): string => {\n return getWords(str)\n .map((word) => word.toLowerCase())\n .join(\"-\");\n};\n\nexport const kebabCase = toKebabCase;\n\n/**\n * Converts a string to snake_case.\n *\n * @example toSnakeCase('helloWorld') => 'hello_world'\n * @example toSnakeCase('hello-world') => 'hello_world'\n */\nexport const toSnakeCase = (str: string): string => {\n return getWords(str)\n .map((word) => word.toLowerCase())\n .join(\"_\");\n};\n\nexport const snakeCase = toSnakeCase;\n\n/**\n * Converts a string to PascalCase.\n *\n * @example toPascalCase('hello-world') => 'HelloWorld'\n * @example toPascalCase('hello_world') => 'HelloWorld'\n */\nexport const toPascalCase = (str: string): string => {\n return getWords(str).map(capitalizeWord).join(\"\");\n};\n\nexport const pascalCase = toPascalCase;\n\nexport const snakeCaseToSpaces = (str: string): string => {\n return str.replace(/_+/g, \" \").trim();\n};\n\nexport const kebabToSpaces = (str: string): string => {\n return str.replace(/-+/g, \" \").trim();\n};\n\n/**\n * Capitalizes the first character of a string.\n *\n * @example capitalize('hello world') => 'Hello world'\n */\nexport const capitalize = (str: string): string => {\n if (!str) {\n return \"\";\n }\n\n return str.charAt(0).toUpperCase() + str.slice(1);\n};\n\n/**\n * Capitalizes the first letter of each word.\n *\n * @example titleCase('hello world') => 'Hello World'\n */\nexport const titleCase = (str: string): string => {\n return str.replace(/\\b\\w/g, (char) => char.toUpperCase());\n};\n\n/**\n * Truncates a string to a specified length and adds ellipsis.\n *\n * @example truncate('hello world', 5) => 'he...'\n */\nexport const truncate = (\n str: string,\n length: number,\n suffix = \"...\",\n): string => {\n if (length <= 0) {\n return \"\";\n }\n\n if (str.length <= length) {\n return str;\n }\n\n const maxLength = Math.max(0, length - suffix.length);\n\n if (maxLength === 0) {\n return suffix.length > length ? \"\" : suffix;\n }\n\n return str.slice(0, maxLength) + suffix;\n};\n\n/**\n * Removes all whitespace from a string.\n *\n * @example removeWhitespace('hello world') => 'helloworld'\n */\nexport const removeWhitespace = (str: string): string => {\n return str.replace(/\\s+/g, \"\");\n};\n\n/**\n * Removes all non-alphanumeric characters.\n *\n * @example removeSpecialChars('hello@world#123') => 'helloworld123'\n */\nexport const removeSpecialChars = (str: string): string => {\n return str.replace(/[^a-zA-Z0-9]/g, \"\");\n};\n\n/**\n * Generates a URL-friendly slug from a string.\n *\n * @example slug('Hello World 2024!') => 'hello-world-2024'\n */\nexport const slug = (str: string): string => {\n return str\n .toLowerCase()\n .trim()\n .replace(/[^\\w\\s-]/g, \"\")\n .replace(/[\\s_]+/g, \"-\")\n .replace(/-+/g, \"-\")\n .replace(/^-+|-+$/g, \"\");\n};\n\n/**\n * Validates if a string is a valid email.\n *\n * @example isEmail('user@example.com') => true\n */\nexport const isEmail = (str: string): boolean => {\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n return emailRegex.test(str.trim());\n};\n\n/**\n * Validates if a string is a valid URL.\n *\n * @example isUrl('https://example.com') => true\n */\nexport const isUrl = (str: string): boolean => {\n try {\n const parsedUrl = new URL(str);\n return parsedUrl.protocol === \"http:\" || parsedUrl.protocol === \"https:\";\n } catch {\n return false;\n }\n};\n\n/**\n * Validates if a string contains only numbers.\n *\n * @example isNumeric('12345') => true\n * @example isNumeric('123abc') => false\n */\nexport const isNumeric = (str: string): boolean => {\n return /^\\d+$/.test(str);\n};\n\n/**\n * Checks if a string is empty or contains only whitespace.\n *\n * @example isEmpty(' ') => true\n * @example isEmpty('hello') => false\n */\nexport const isEmpty = (str: string): boolean => {\n return str.trim().length === 0;\n};\n\n/**\n * Reverses a string.\n *\n * @example reverse('hello') => 'olleh'\n */\nexport const reverse = (str: string): string => {\n return Array.from(str).reverse().join(\"\");\n};\n\n/**\n * Repeats a string a specified number of times.\n *\n * @example repeat('ab', 3) => 'ababab'\n */\nexport const repeat = (str: string, times: number): string => {\n return str.repeat(Math.max(0, Math.floor(times)));\n};\n\n/**\n * Pads a string to a specified length.\n *\n * @example padStart('5', 3, '0') => '005'\n * @example padEnd('5', 3, '0') => '500'\n */\nexport const padStart = (\n str: string,\n length: number,\n padChar = \" \",\n): string => {\n return str.padStart(length, padChar);\n};\n\nexport const padEnd = (str: string, length: number, padChar = \" \"): string => {\n return str.padEnd(length, padChar);\n};\n\n/**\n * Encodes a string to Base64.\n *\n * @example toBase64('hello') => 'aGVsbG8='\n */\nexport const toBase64 = (str: string): string => {\n return Buffer.from(str, \"utf-8\").toString(\"base64\");\n};\n\n/**\n * Decodes a Base64 string.\n *\n * @example fromBase64('aGVsbG8=') => 'hello'\n */\nexport const fromBase64 = (str: string): string => {\n return Buffer.from(str, \"base64\").toString(\"utf-8\");\n};\n\n/**\n * Counts the number of words in a string.\n *\n * @example wordCount('hello world test') => 3\n */\nexport const wordCount = (str: string): number => {\n const trimmedValue = str.trim();\n\n if (!trimmedValue) {\n return 0;\n }\n\n return trimmedValue.split(/\\s+/).length;\n};\n\n/**\n * Counts the number of characters, excluding whitespace.\n *\n * @example charCount('hello world') => 10\n */\nexport const charCount = (str: string): number => {\n return str.replace(/\\s/g, \"\").length;\n};\n\n/**\n * Repeats a character a specified number of times.\n *\n * @example repeatChar('*', 5) => '*****'\n */\nexport const repeatChar = (char: string, times: number): string => {\n return char.repeat(Math.max(0, Math.floor(times)));\n};\n\n/**\n * Extracts numbers from a string.\n *\n * @example extractNumbers('abc123def456') => '123456'\n */\nexport const extractNumbers = (str: string): string => {\n return str.replace(/\\D/g, \"\");\n};\n\n/**\n * Removes duplicate consecutive characters.\n *\n * @example removeDuplicates('aabbccdd') => 'abcd'\n */\nexport const removeDuplicates = (str: string): string => {\n return str.replace(/(.)\\1+/g, \"$1\");\n};\n\n/**\n * Checks if a string is a palindrome.\n *\n * @example isPalindrome('racecar') => true\n * @example isPalindrome('hello') => false\n */\nexport const isPalindrome = (str: string): boolean => {\n const cleaned = str.toLowerCase().replace(/[^a-z0-9]/g, \"\");\n return cleaned === cleaned.split(\"\").reverse().join(\"\");\n};\n\n/**\n * Finds the longest word in a string.\n *\n * @example longestWord('the quick brown fox') => 'quick'\n */\nexport const longestWord = (str: string): string => {\n const words = str.trim().split(/\\s+/).filter(Boolean);\n\n return words.reduce(\n (longest, word) => (word.length > longest.length ? word : longest),\n \"\",\n );\n};\n\n/**\n * Pluralizes common English words using a simple ruleset.\n *\n * @example pluralize('cat') => 'cats'\n * @example pluralize('box') => 'boxes'\n */\nexport const pluralize = (word: string): string => {\n const exceptions: Record<string, string> = {\n child: \"children\",\n person: \"people\",\n man: \"men\",\n woman: \"women\",\n tooth: \"teeth\",\n foot: \"feet\",\n mouse: \"mice\",\n };\n const lowercaseWord = word.toLowerCase();\n const exception = exceptions[lowercaseWord];\n\n if (exception) {\n return word.charAt(0) === word.charAt(0).toUpperCase()\n ? capitalize(exception)\n : exception;\n }\n\n if (/[^aeiou]y$/i.test(word)) {\n return `${word.slice(0, -1)}ies`;\n }\n\n if (/(s|x|z|ch|sh)$/i.test(word)) {\n return `${word}es`;\n }\n\n if (/fe$/i.test(word)) {\n return `${word.slice(0, -2)}ves`;\n }\n\n if (/f$/i.test(word)) {\n return `${word.slice(0, -1)}ves`;\n }\n\n return `${word}s`;\n};\n\n/**\n * Highlights a substring within a string by wrapping it with markers.\n *\n * @example highlight('hello world', 'world', '**') => 'hello **world**'\n */\nexport const highlight = (\n str: string,\n substring: string,\n marker = \"**\",\n): string => {\n if (!substring) {\n return str;\n }\n\n return str.replace(\n new RegExp(`(${escapeRegex(substring)})`, \"gi\"),\n `${marker}$1${marker}`,\n );\n};\n\n/**\n * Converts a string to a regex-safe string.\n *\n * @example escapeRegex('a.b*c') => 'a\\\\.b\\\\*c'\n */\nexport const escapeRegex = (str: string): string => {\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n};\n\n/**\n * Finds similarity between two strings using Levenshtein distance.\n * Returns a value between 0 and 1, where 1 means identical.\n *\n * @example stringSimilarity('hello', 'hallo') => 0.8\n */\nexport const stringSimilarity = (str1: string, str2: string): number => {\n const s1 = str1.toLowerCase();\n const s2 = str2.toLowerCase();\n const longer = s1.length > s2.length ? s1 : s2;\n const shorter = s1.length > s2.length ? s2 : s1;\n\n if (longer.length === 0) {\n return 1;\n }\n\n const editDistance = getEditDistance(longer, shorter);\n return (longer.length - editDistance) / longer.length;\n};\n\n/**\n * Helper function to calculate edit distance (Levenshtein distance).\n */\nconst getEditDistance = (s1: string, s2: string): number => {\n const costs: number[] = [];\n\n for (let i = 0; i <= s1.length; i += 1) {\n let lastValue = i;\n\n for (let j = 0; j <= s2.length; j += 1) {\n if (i === 0) {\n costs[j] = j;\n } else if (j > 0) {\n let newValue = costs[j - 1];\n\n if (s1.charAt(i - 1) !== s2.charAt(j - 1)) {\n newValue = Math.min(Math.min(newValue, lastValue), costs[j]) + 1;\n }\n\n costs[j - 1] = lastValue;\n lastValue = newValue;\n }\n }\n\n if (i > 0) {\n costs[s2.length] = lastValue;\n }\n }\n\n return costs[s2.length];\n};\n\n/**\n * Strips HTML tags from a string.\n *\n * @example stripHtml('<p>Hello <b>world</b></p>') => 'Hello world'\n */\nexport const stripHtml = (str: string): string => {\n return str.replace(/<[^>]*>/g, \"\");\n};\n\n/**\n * Replaces multiple spaces with a single space.\n *\n * @example normalizeSpaces('hello world') => 'hello world'\n */\nexport const normalizeSpaces = (str: string): string => {\n return str.replace(/\\s+/g, \" \").trim();\n};\n\n/**\n * Converts a string to a number, returning null if not valid.\n *\n * @example toNumber('123') => 123\n * @example toNumber('abc') => null\n */\nexport const toNumber = (str: string): number | null => {\n if (str.trim() === \"\") {\n return null;\n }\n\n const num = Number(str);\n return Number.isNaN(num) ? null : num;\n};\n\n/**\n * Splits a string by multiple delimiters.\n *\n * @example splitMultiple('a,b;c:d', ',', ';', ':') => ['a', 'b', 'c', 'd']\n */\nexport const splitMultiple = (\n str: string,\n ...delimiters: string[]\n): string[] => {\n if (delimiters.length === 0) {\n return [str].filter((part) => part.length > 0);\n }\n\n let result = [str];\n\n delimiters.forEach((delimiter) => {\n if (delimiter !== \"\") {\n result = result.flatMap((part) => part.split(delimiter));\n }\n });\n\n return result.filter((part) => part.length > 0);\n};\n\n/**\n * Checks if a string contains any of the provided substrings.\n *\n * @example containsAny('hello world', 'foo', 'world') => true\n */\nexport const containsAny = (str: string, ...substrings: string[]): boolean => {\n return substrings.some((substring) => str.includes(substring));\n};\n\n/**\n * Checks if a string contains all of the provided substrings.\n *\n * @example containsAll('hello world', 'hello', 'world') => true\n */\nexport const containsAll = (str: string, ...substrings: string[]): boolean => {\n return substrings.every((substring) => str.includes(substring));\n};\n\nexport interface IAddress {\n addressLine1: string;\n addressLine2?: string;\n city: string;\n stateCode: TUSStateCode;\n postalCode: string;\n}\n\nexport const formatAddress = (address: IAddress): string => {\n const parts = [\n address.addressLine1,\n address.addressLine2,\n address.city,\n address.stateCode,\n address.postalCode,\n ].filter(Boolean);\n\n return parts.join(\", \");\n};\n","export * from \"./date\";\nexport * from \"./object\";\nexport {\n camelCase,\n capitalize,\n charCount,\n containsAll,\n containsAny,\n escapeRegex,\n extractNumbers,\n formatAddress,\n fromBase64,\n highlight,\n isEmail,\n isEmpty,\n isNumeric,\n isPalindrome,\n isUrl,\n kebabCase,\n kebabToSpaces,\n longestWord,\n lowerCase,\n normalCase,\n normalizeSpaces,\n padEnd,\n padStart,\n pascalCase,\n pluralize,\n removeDuplicates,\n removeSpecialChars,\n removeWhitespace,\n repeat,\n repeatChar,\n reverse,\n sentenceCase,\n slug,\n snakeCase,\n snakeCaseToSpaces,\n splitMultiple,\n stringSimilarity,\n stripHtml,\n titleCase,\n toBase64,\n toCamelCase,\n toKebabCase,\n toNumber,\n toPascalCase,\n toSnakeCase,\n truncate,\n upperCase,\n wordCount,\n} from \"./string\";\n\nexport type { IAddress } from \"./string\";\n\ntype Success<T> = {\n data: T;\n error: null;\n};\n\ntype Failure<E> = {\n data: null;\n error: E;\n};\n\ntype Result<T, E = unknown> = Success<T> | Failure<E>;\n\nexport const tryCatch = async <T, E = unknown>(\n callback: () => T | Promise<T>,\n): Promise<Result<T, E>> => {\n try {\n const data = await callback();\n\n return {\n data,\n error: null,\n };\n } catch (error) {\n return {\n data: null,\n error: error as E,\n };\n }\n};\n","/**\n * API Response Types\n * Standard response structure for all API endpoints.\n */\n\nimport type { TDateTimeString, TJsonValue } from \"../base\";\n\nexport const HTTP_METHOD = {\n GET: \"GET\",\n POST: \"POST\",\n PUT: \"PUT\",\n PATCH: \"PATCH\",\n DELETE: \"DELETE\",\n} as const;\n\nexport type THttpMethod = (typeof HTTP_METHOD)[keyof typeof HTTP_METHOD];\n\n/**\n * Error Codes\n * Standardized error codes used across the platform.\n */\nexport const ERROR_CODES = {\n BAD_REQUEST: \"BAD_REQUEST\",\n VALIDATION_ERROR: \"VALIDATION_ERROR\",\n MISSING_FIELDS: \"MISSING_FIELDS\",\n UNAUTHORIZED: \"UNAUTHORIZED\",\n INVALID_TOKEN: \"INVALID_TOKEN\",\n INVALID_CREDENTIALS: \"INVALID_CREDENTIALS\",\n FORBIDDEN: \"FORBIDDEN\",\n NOT_FOUND: \"NOT_FOUND\",\n CONFLICT: \"CONFLICT\",\n ALREADY_EXISTS: \"ALREADY_EXISTS\",\n RATE_LIMIT_EXCEEDED: \"RATE_LIMIT_EXCEEDED\",\n INTERNAL_ERROR: \"INTERNAL_ERROR\",\n DATABASE_ERROR: \"DATABASE_ERROR\",\n NOT_IMPLEMENTED: \"NOT_IMPLEMENTED\",\n} as const;\n\nexport type TErrorCode = (typeof ERROR_CODES)[keyof typeof ERROR_CODES];\n\n/**\n * HTTP Status Codes\n * Common status codes used in API responses.\n */\nexport const HTTP_STATUS = {\n Ok: 200,\n Created: 201,\n NoContent: 204,\n BadRequest: 400,\n Unauthorized: 401,\n Forbidden: 403,\n NotFound: 404,\n Conflict: 409,\n UnprocessableEntity: 422,\n TooManyRequests: 429,\n InternalError: 500,\n} as const;\n\nexport type THttpStatusCode = (typeof HTTP_STATUS)[keyof typeof HTTP_STATUS];\n\nexport type TApiErrorDetails = TJsonValue | undefined;\n\nexport interface IApiError<TDetails = TApiErrorDetails> {\n message: string;\n code?: TErrorCode;\n details?: TDetails;\n}\n\nexport interface IApiMeta {\n timestamp: TDateTimeString;\n version: string;\n environment: string;\n requestId?: string;\n}\n\nexport interface IApiResponse<TData = null, TErrorDetails = TApiErrorDetails> {\n success: boolean;\n data?: TData | null;\n error?: IApiError<TErrorDetails> | null;\n meta?: IApiMeta;\n}\n","export * from \"./routes\";\n\nimport type { TDateTimeString, TServiceType } from \"../base\";\nimport type { IUserSafe } from \"../user\";\n\nexport const AUTH_STATUS = {\n Initializing: \"Initializing\",\n Unauthenticated: \"Unauthenticated\",\n Authenticated: \"Authenticated\",\n Refreshing: \"Refreshing\",\n SessionExpired: \"SessionExpired\",\n} as const;\n\nexport type TAuthStatus = (typeof AUTH_STATUS)[keyof typeof AUTH_STATUS];\n\nexport interface ITokenPayload {\n userId: string;\n email: string;\n name: string;\n}\n\nexport interface IRefreshTokenData {\n token: string;\n tokenHash: string;\n tokenFamily: string;\n expiresAt: TDateTimeString;\n}\n\nexport interface IAuthTokenBundle {\n accessToken: string;\n refreshToken: string;\n expiresAt: TDateTimeString | null;\n}\n\nexport interface IStoredAuthSession {\n accessToken: string | null;\n refreshToken: string | null;\n expiresAt: TDateTimeString | null;\n}\n\nexport interface IAuthTokenResponse extends IAuthTokenBundle {\n user: IUserSafe | null;\n companyId?: string;\n}\n\nexport interface IAuthSession {\n user: IUserSafe | null;\n accessToken: string | null;\n expiresAt: TDateTimeString | null;\n}\n\nexport interface ISetAuthSessionParams extends IAuthTokenBundle {\n user: IUserSafe | null;\n}\n\nexport interface ILoginCredentials {\n email: string;\n password: string;\n rememberMe: boolean;\n}\n\nexport interface IRegisterCredentials {\n businessType: TServiceType[];\n firstName: string;\n lastName: string;\n email: string;\n password: string;\n}\n\nexport interface IPasswordValidationRules {\n minLength: number;\n requireUppercase: boolean;\n requireLowercase: boolean;\n requireNumbers: boolean;\n requireSpecialChars: boolean;\n}\n\nexport interface IPasswordValidationResult {\n valid: boolean;\n errors: string[];\n}\n\nexport interface IEmailValidationResult {\n valid: boolean;\n error?: string;\n}\n\nexport interface IRateLimitStatus {\n isLimited: boolean;\n attempts: number;\n maxAttempts: number;\n resetTime?: TDateTimeString;\n}\n","/**\n * Pagination metadata for a paginated response.\n */\nexport interface IPagingResult {\n hasNextPage: boolean;\n totalPages: number;\n totalRecords: number;\n}\n\n/**\n * Generic wrapper for paginated data.\n */\nexport interface IDataWithPagingResult<TData> {\n data: TData;\n pagination: IPagingResult;\n}\n\nexport const SortDirection = {\n Asc: \"Asc\",\n Desc: \"Desc\",\n} as const;\n\nexport type TSortDirection = (typeof SortDirection)[keyof typeof SortDirection];\n\n/**\n * Sorting condition for query results.\n */\nexport interface ISortCondition {\n name: string;\n direction: TSortDirection;\n}\n\nexport const FilterCondition = {\n Equal: \"=\",\n GreaterThan: \">\",\n LessThan: \"<\",\n NotEqual: \"!=\",\n Like: \"LIKE\",\n In: \"IN\",\n GreaterThanOrEqual: \">=\",\n LessThanOrEqual: \"<=\",\n} as const;\n\nexport type TFilterCondition =\n (typeof FilterCondition)[keyof typeof FilterCondition];\n\nexport interface IFilterConditionBase {\n name: string;\n condition: TFilterCondition;\n useAnd?: boolean;\n}\n\nexport interface IStringFilterCondition extends IFilterConditionBase {\n valueString: string;\n valueNumber?: never;\n valueBoolean?: never;\n}\n\nexport interface INumberFilterCondition extends IFilterConditionBase {\n valueString?: never;\n valueNumber: number;\n valueBoolean?: never;\n}\n\nexport interface IBooleanFilterCondition extends IFilterConditionBase {\n valueString?: never;\n valueNumber?: never;\n valueBoolean: boolean;\n}\n\n/**\n * Filter condition for querying data.\n *\n * Exactly one value field should be provided.\n */\nexport type TFilterConditionValue =\n | IStringFilterCondition\n | INumberFilterCondition\n | IBooleanFilterCondition;\n\n/**\n * Kept as an exported alias to preserve the existing public API name.\n */\nexport type IFilterCondition = TFilterConditionValue;\n\n/**\n * Request shape for paginated data with optional sorting and filtering.\n */\nexport interface IPaginationRequest {\n page: number;\n size: number;\n sort?: ISortCondition[];\n filters?: IFilterCondition[];\n}\n\nexport interface IPagingObject {\n pagination: IPaginationRequest;\n}\n\nexport const createPagingObject = (\n page: number,\n size: number,\n sort?: ISortCondition[],\n filters?: IFilterCondition[],\n): IPagingObject => ({\n pagination: {\n page,\n size,\n sort,\n filters,\n },\n});\n","export type TJsonPrimitive = string | number | boolean | null;\n\nexport type TJsonObject = {\n [key: string]: TJsonValue;\n};\n\nexport type TJsonValue = TJsonPrimitive | TJsonValue[] | TJsonObject;\n\nexport type TUnknownRecord = Record<string, unknown>;\n\n/**\n * Serialized ISO-8601 date/time value returned by API JSON contracts.\n */\nexport type TDateTimeString = string;\n\nexport type TurndownObject<TObject extends object = TUnknownRecord> = TObject;\n\nexport type TEmptyObject = Record<string, never>;\n\nexport type IEmptyRouteRequest = TEmptyObject;\n\nexport type IEmptyRouteParams = TEmptyObject;\n\nexport interface IMessageResponse {\n message: string;\n}\n\nexport interface ISuccessResponse {\n success: boolean;\n}\n\nexport interface ICountResponse {\n count: number;\n}\n\nexport interface IMetaData {\n createdAt: TDateTimeString;\n updatedAt: TDateTimeString;\n deletedAt: TDateTimeString | null;\n}\n\nexport type TRecordValue<TRecord extends object> = TRecord[keyof TRecord];\n\nexport type TRecordKeys<TRecord extends object> = keyof TRecord;\n\nexport interface IVersion {\n major: number;\n minor: number;\n patch: number;\n}\n\nexport type TVersionInput = string | IVersion;\n\nexport interface ISelectOption<TValue extends string = string> {\n label: string;\n value: TValue;\n}\n\nexport const MODE = {\n Create: \"Create\",\n Edit: \"Edit\",\n Delete: \"Delete\",\n Details: \"Details\",\n} as const;\n\nexport type TMode = TRecordValue<typeof MODE> | null;\n\nexport const IMAGE_ENTITY = {\n USER_PROFILE: \"USER_PROFILE\",\n PROPERTY: \"PROPERTY\",\n PROPERTY_ROOM: \"PROPERTY_ROOM\",\n MAINTENANCE_TICKET: \"MAINTENANCE_TICKET\",\n WORK_REPORT: \"WORK_REPORT\",\n} as const;\n\nexport type TImageEntityType = TRecordValue<typeof IMAGE_ENTITY>;\n\nexport type TUSStateCode = TRecordKeys<typeof US_JURISDICTIONS>;\n\nexport const US_JURISDICTIONS = {\n // 50 States\n AL: \"Alabama\",\n AK: \"Alaska\",\n AZ: \"Arizona\",\n AR: \"Arkansas\",\n CA: \"California\",\n CO: \"Colorado\",\n CT: \"Connecticut\",\n DE: \"Delaware\",\n FL: \"Florida\",\n GA: \"Georgia\",\n HI: \"Hawaii\",\n ID: \"Idaho\",\n IL: \"Illinois\",\n IN: \"Indiana\",\n IA: \"Iowa\",\n KS: \"Kansas\",\n KY: \"Kentucky\",\n LA: \"Louisiana\",\n ME: \"Maine\",\n MD: \"Maryland\",\n MA: \"Massachusetts\",\n MI: \"Michigan\",\n MN: \"Minnesota\",\n MS: \"Mississippi\",\n MO: \"Missouri\",\n MT: \"Montana\",\n NE: \"Nebraska\",\n NV: \"Nevada\",\n NH: \"New Hampshire\",\n NJ: \"New Jersey\",\n NM: \"New Mexico\",\n NY: \"New York\",\n NC: \"North Carolina\",\n ND: \"North Dakota\",\n OH: \"Ohio\",\n OK: \"Oklahoma\",\n OR: \"Oregon\",\n PA: \"Pennsylvania\",\n RI: \"Rhode Island\",\n SC: \"South Carolina\",\n SD: \"South Dakota\",\n TN: \"Tennessee\",\n TX: \"Texas\",\n UT: \"Utah\",\n VT: \"Vermont\",\n VA: \"Virginia\",\n WA: \"Washington\",\n WV: \"West Virginia\",\n WI: \"Wisconsin\",\n WY: \"Wyoming\",\n\n // Territories\n DC: \"District of Columbia\",\n PR: \"Puerto Rico\",\n GU: \"Guam\",\n VI: \"United States Virgin Islands\",\n AS: \"American Samoa\",\n MP: \"Northern Mariana Islands\",\n} as const;\n\nexport type TUSJurisdiction = TRecordValue<typeof US_JURISDICTIONS>;\n\nexport const STATUS = {\n PENDING: \"PENDING\",\n IN_PROGRESS: \"IN_PROGRESS\",\n COMPLETED: \"COMPLETED\",\n OVERDUE: \"OVERDUE\",\n ACTIVE: \"ACTIVE\",\n INACTIVE: \"INACTIVE\",\n} as const;\n\nexport type TStatus = TRecordValue<typeof STATUS>;\n\nexport const SEVERITY = {\n LOW: \"LOW\",\n MEDIUM: \"MEDIUM\",\n HIGH: \"HIGH\",\n} as const;\n\nexport type TSeverity = TRecordValue<typeof SEVERITY>;\n\nexport const SERVICE_TYPES = {\n PROPERTY: \"PROPERTY\",\n CLEANING: \"CLEANING\",\n MAINTENANCE: \"MAINTENANCE\",\n INSPECTION: \"INSPECTION\",\n OTHER: \"OTHER\",\n} as const;\n\nexport type TServiceType = TRecordValue<typeof SERVICE_TYPES>;\n\nexport const MONTHS = [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\",\n] as const;\n\nexport type TMonth = (typeof MONTHS)[number];\n\nexport interface IWeekDay {\n date: Date;\n dayOfMonth: number;\n shortLabel: string;\n letter: string;\n isToday: boolean;\n}\n\nconst createSelectOptions = <TValue extends string>(\n values: readonly TValue[],\n): ISelectOption<TValue>[] =>\n values.map((value) => ({\n label: value,\n value,\n }));\n\nconst getRecordValues = <TRecord extends Record<string, string>>(\n record: TRecord,\n): TRecordValue<TRecord>[] => Object.values(record) as TRecordValue<TRecord>[];\n\nexport const UnitedStatesJurisdictionOptions = createSelectOptions(\n getRecordValues(US_JURISDICTIONS),\n);\n\nexport const StatusOptions: ISelectOption<TStatus>[] = [\n { label: \"Pending\", value: STATUS.PENDING },\n { label: \"In Progress\", value: STATUS.IN_PROGRESS },\n { label: \"Completed\", value: STATUS.COMPLETED },\n { label: \"Overdue\", value: STATUS.OVERDUE },\n { label: \"Active\", value: STATUS.ACTIVE },\n { label: \"Inactive\", value: STATUS.INACTIVE },\n];\n\nexport const SeverityOptions: ISelectOption<TSeverity>[] = [\n { label: \"Low\", value: SEVERITY.LOW },\n { label: \"Medium\", value: SEVERITY.MEDIUM },\n { label: \"High\", value: SEVERITY.HIGH },\n];\n\nexport const ServiceTypeOptions: ISelectOption<TServiceType>[] = [\n { label: \"Property\", value: SERVICE_TYPES.PROPERTY },\n { label: \"Cleaning\", value: SERVICE_TYPES.CLEANING },\n { label: \"Maintenance\", value: SERVICE_TYPES.MAINTENANCE },\n { label: \"Inspection\", value: SERVICE_TYPES.INSPECTION },\n { label: \"Other\", value: SERVICE_TYPES.OTHER },\n];\n\nexport * from \"./paging.types\";\n","import type { ICompany } from \".\";\nimport type {\n IEmptyRouteRequest,\n IMessageResponse,\n TDateTimeString,\n TUSStateCode,\n} from \"../base\";\nimport type { TAccountType } from \"../user\";\n\nexport interface ICompanyRouteParams {\n companyId: string;\n}\n\nexport interface ICompanyUserRouteParams {\n userId: string;\n}\n\nexport interface ICompanyInvitationTokenParams {\n token: string;\n}\n\nexport interface ICompanyInvitationIdParams extends ICompanyRouteParams {\n invitationId: string;\n}\n\nexport const CompanyFilter = {\n Active: \"active\",\n Pending: \"pending\",\n All: \"all\",\n} as const;\n\nexport type TCompanyFilter = (typeof CompanyFilter)[keyof typeof CompanyFilter];\n\nexport interface IGetCompaniesQuery {\n search?: string;\n filter?: TCompanyFilter;\n}\n\nexport interface ICreateCompanyRequest {\n displayName: string;\n addressLine1: string;\n addressLine2?: string | null;\n city: string;\n stateCode: TUSStateCode;\n postalCode: string;\n companyType: ICompany[\"companyType\"];\n}\nexport interface ICreateCompanyResponse extends ICompany {}\n\nexport type IGetCompaniesRequest = IEmptyRouteRequest;\nexport type IGetCompaniesResponse = ICompany[];\n\nexport interface IGetCompanyByIdRequest extends ICompanyRouteParams {}\nexport interface IGetCompanyByIdResponse extends ICompany {}\n\nexport interface IUpdateCompanyRequest {\n displayName?: string;\n addressLine1?: string;\n addressLine2?: string | null;\n city?: string;\n stateCode?: TUSStateCode;\n postalCode?: string;\n companyType?: ICompany[\"companyType\"];\n country?: string | null;\n timezone?: string | null;\n imageUrl?: string | null;\n}\nexport interface IUpdateCompanyResponse extends ICompany {}\n\nexport interface IInviteUserToCompanyRequest {\n email: string;\n role: TAccountType;\n}\nexport interface IInviteUserToCompanyResponse extends IMessageResponse {}\n\nexport interface IGetCompanyUsersRequest extends ICompanyRouteParams {}\nexport interface ICompanyUserSummary {\n id: string;\n email: string;\n firstName: string;\n lastName: string | null;\n role: TAccountType;\n}\nexport type IGetCompanyUsersResponse = ICompanyUserSummary[];\n\nexport interface IGetUserCompaniesRequest extends ICompanyUserRouteParams {}\nexport type IGetUserCompaniesResponse = ICompany[];\n\nexport interface IInviteCompanyToCompanyRequest {\n message?: string;\n}\nexport interface IInviteCompanyToCompanyResponse {\n id: string;\n token: string;\n expiresAt: TDateTimeString;\n}\n\nexport interface IValidateCompanyInvitationRequest extends ICompanyInvitationTokenParams {}\nexport interface IValidateCompanyInvitationResponse {\n id: string;\n requesterCompanyId: string;\n providerCompanyId: string;\n invitedBy: string;\n message: string | null;\n expiresAt: TDateTimeString;\n requesterCompanyName: string;\n providerCompanyName: string;\n invitedByName: string;\n}\n\nexport interface IAcceptCompanyInvitationRequest extends ICompanyInvitationTokenParams {}\nexport interface IAcceptCompanyInvitationResponse {\n requesterCompanyId: string;\n providerCompanyId: string;\n requesterCompanyName: string;\n providerCompanyName: string;\n}\n\nexport interface IDeclineCompanyInvitationRequest extends ICompanyInvitationTokenParams {}\nexport interface IDeclineCompanyInvitationResponse extends IMessageResponse {}\n\nexport interface IGetPendingCompanyInvitationsRequest extends ICompanyRouteParams {}\nexport type IGetPendingCompanyInvitationsResponse =\n IValidateCompanyInvitationResponse[];\n\nexport interface IRevokeCompanyInvitationRequest extends ICompanyInvitationIdParams {}\nexport interface IRevokeCompanyInvitationResponse extends IMessageResponse {}\n","import type { IMetaData, TRecordValue, TUSStateCode } from \"../base\";\nexport * from \"./routes\";\n\nexport interface ICompany extends IMetaData {\n id: string;\n displayName: string;\n addressLine1: string;\n addressLine2: string | null;\n city: string;\n stateCode: TUSStateCode;\n companyType: TCompanyType;\n postalCode: string;\n country: string | null;\n timezone: string | null;\n imageUrl: string | null;\n}\n\nexport const COMPANY_TYPES = {\n PROPERTY_MANAGEMENT: \"PROPERTY_MANAGEMENT\",\n MAINTENANCE: \"MAINTENANCE\",\n CLEANER: \"CLEANER\",\n OTHER: \"OTHER\",\n} as const;\n\nexport type TCompanyType = TRecordValue<typeof COMPANY_TYPES>;\n","import type { TDateTimeString, TRecordValue } from \"../base\";\n\nexport const DAMAGE_SEVERITY = {\n LOW: \"LOW\",\n MEDIUM: \"MEDIUM\",\n HIGH: \"HIGH\",\n CRITICAL: \"CRITICAL\",\n} as const;\n\nexport type TDamageSeverity = TRecordValue<typeof DAMAGE_SEVERITY>;\n\nexport const DAMAGE_STATUS = {\n OPEN: \"OPEN\",\n IN_REVIEW: \"IN_REVIEW\",\n ASSIGNED: \"ASSIGNED\",\n IN_PROGRESS: \"IN_PROGRESS\",\n RESOLVED: \"RESOLVED\",\n CLOSED: \"CLOSED\",\n ESCALATED: \"ESCALATED\",\n} as const;\n\nexport type TDamageStatus = TRecordValue<typeof DAMAGE_STATUS>;\n\nexport const WORK_ORDER_PRIORITY = {\n LOW: \"LOW\",\n NORMAL: \"NORMAL\",\n HIGH: \"HIGH\",\n URGENT: \"URGENT\",\n} as const;\n\nexport type TWorkOrderPriority = TRecordValue<typeof WORK_ORDER_PRIORITY>;\n\nexport const WORK_ORDER_STATUS = {\n PENDING: \"PENDING\",\n SCHEDULED: \"SCHEDULED\",\n IN_PROGRESS: \"IN_PROGRESS\",\n COMPLETED: \"COMPLETED\",\n CANCELLED: \"CANCELLED\",\n} as const;\n\nexport type TWorkOrderStatus = TRecordValue<typeof WORK_ORDER_STATUS>;\n\nexport interface IDamageReport {\n id: string;\n propertyId: string;\n roomId: string;\n workSessionId: string | null;\n cleaningSessionId: string | null;\n reportedBy: string;\n reportedAt: TDateTimeString;\n severity: TDamageSeverity;\n status: TDamageStatus;\n title: string;\n description: string;\n locationDetails: string | null;\n estimatedCost: number | null;\n actualCost: number | null;\n assignedTo: string | null;\n assignedAt: TDateTimeString | null;\n resolvedAt: TDateTimeString | null;\n resolvedBy: string | null;\n resolutionNotes: string | null;\n requiresProfessional: boolean;\n vendorInfo: string | null;\n insuranceClaimNumber: string | null;\n isTenantResponsible: boolean;\n tenantChargeAmount: number | null;\n createdAt: TDateTimeString;\n updatedAt: TDateTimeString;\n photos?: IDamagePhoto[];\n comments?: IDamageComment[];\n}\n\nexport interface IDamageReportPhoto {\n id: string;\n damageReportId: string;\n photoId: string;\n imageUrl: string | null;\n caption: string | null;\n isBeforePhoto: boolean;\n displayOrder: number;\n uploadedBy: string | null;\n createdAt: TDateTimeString;\n}\n\nexport interface IDamagePhoto extends IDamageReportPhoto {}\n\nexport interface IDamageComment {\n id: string;\n damageReportId: string;\n userId: string;\n userName: string | null;\n comment: string;\n isInternal: boolean;\n createdAt: TDateTimeString;\n updatedAt: TDateTimeString;\n}\n\nexport interface IDamageReportStatusHistory {\n id: string;\n damageReportId: string;\n previousStatus: TDamageStatus | null;\n newStatus: TDamageStatus;\n changedBy: string;\n reason: string | null;\n createdAt: TDateTimeString;\n}\n\nexport interface IWorkOrder {\n id: string;\n damageReportId: string | null;\n propertyId: string;\n roomId: string | null;\n workOrderNumber: string | null;\n priority: TWorkOrderPriority;\n category: string | null;\n assignedTo: string | null;\n assignedAt: TDateTimeString | null;\n scheduledDate: TDateTimeString | null;\n scheduledTimeStart: string | null;\n scheduledTimeEnd: string | null;\n startedAt: TDateTimeString | null;\n completedAt: TDateTimeString | null;\n completedBy: string | null;\n description: string;\n workPerformed: string | null;\n materialsUsed: string | null;\n laborHours: number | null;\n laborCost: number | null;\n materialsCost: number | null;\n totalCost: number | null;\n status: TWorkOrderStatus;\n createdAt: TDateTimeString;\n updatedAt: TDateTimeString;\n}\n\nexport interface ICreateDamageReportInput {\n propertyId: string;\n roomId: string;\n workSessionId?: string;\n reportedBy: string;\n severity: TDamageSeverity;\n title: string;\n description: string;\n locationDetails?: string;\n estimatedCost?: number;\n requiresProfessional?: boolean;\n isTenantResponsible?: boolean;\n tenantChargeAmount?: number;\n}\n\nexport interface ICreateWorkOrderInput {\n damageReportId?: string;\n propertyId: string;\n roomId?: string;\n priority?: TWorkOrderPriority;\n category?: string;\n description: string;\n scheduledDate?: TDateTimeString;\n scheduledTimeStart?: string;\n scheduledTimeEnd?: string;\n}\n\nexport * from \"./routes\";\n","/**\n * Error Types\n * Custom error types and validation error structures.\n */\n\nimport { ERROR_CODES } from \"../api\";\nimport type { TErrorCode } from \"../api\";\nimport type { TJsonObject, TJsonValue } from \"../base\";\n\n/**\n * Detailed information about a validation error.\n */\nexport interface IValidationErrorDetail {\n field: string;\n message: string;\n value?: TJsonValue;\n}\n\n/**\n * Information about missing required fields.\n */\nexport interface IMissingFieldsErrorDetail {\n missingFields: string[];\n}\n\n/**\n * Information about rate limiting.\n */\nexport interface IRateLimitErrorDetail {\n retryAfter?: number;\n message: string;\n}\n\nexport type TErrorResponseDetail =\n | IValidationErrorDetail[]\n | IMissingFieldsErrorDetail\n | IRateLimitErrorDetail\n | TJsonObject\n | string;\n\nexport interface ITypedApiError<TDetails = TErrorResponseDetail> {\n message: string;\n code: TErrorCode;\n details?: TDetails;\n}\n\nexport type TValidationError = ITypedApiError<IValidationErrorDetail[]>;\nexport type TMissingFieldsError = ITypedApiError<IMissingFieldsErrorDetail>;\nexport type TRateLimitError = ITypedApiError<IRateLimitErrorDetail>;\n\ntype TErrorLike = {\n code?: string;\n details?: unknown;\n};\n\nconst isErrorLike = (error: unknown): error is TErrorLike => {\n return typeof error === \"object\" && error !== null;\n};\n\n/**\n * Type guard for validation errors.\n */\nexport function isValidationError(error: unknown): error is TValidationError {\n return (\n isErrorLike(error) &&\n error.code === ERROR_CODES.VALIDATION_ERROR &&\n Array.isArray(error.details)\n );\n}\n\n/**\n * Type guard for missing-field errors.\n */\nexport function isMissingFieldsError(\n error: unknown,\n): error is TMissingFieldsError {\n return (\n isErrorLike(error) &&\n error.code === ERROR_CODES.MISSING_FIELDS &&\n typeof error.details === \"object\" &&\n error.details !== null &&\n \"missingFields\" in error.details &&\n Array.isArray(error.details.missingFields)\n );\n}\n\n/**\n * Type guard for rate-limit errors.\n */\nexport function isRateLimitError(error: unknown): error is TRateLimitError {\n return isErrorLike(error) && error.code === ERROR_CODES.RATE_LIMIT_EXCEEDED;\n}\n\n/**\n * Type guard for authentication errors.\n */\nexport function isAuthError(error: unknown): boolean {\n return (\n isErrorLike(error) &&\n (error.code === ERROR_CODES.UNAUTHORIZED ||\n error.code === ERROR_CODES.INVALID_TOKEN ||\n error.code === ERROR_CODES.INVALID_CREDENTIALS)\n );\n}\n","import type { TDateTimeString } from \"../base\";\n\nexport * from \"./routes\";\n\nexport const IMAGE_ENTITY_TYPE = {\n USER_PROFILE: \"USER_PROFILE\",\n PROPERTY: \"PROPERTY\",\n COMPANY: \"COMPANY\",\n CHECKLIST_ITEM: \"CHECKLIST_ITEM\",\n PROPERTY_ROOM: \"PROPERTY_ROOM\",\n MAINTENANCE_TICKET: \"MAINTENANCE_TICKET\",\n WORK_REPORT: \"WORK_REPORT\",\n CLEANING_REPORT: \"CLEANING_REPORT\",\n TURNDOWN_DEFAULT: \"TURNDOWN_DEFAULT\",\n} as const;\n\nexport type TStoredImageEntityType =\n (typeof IMAGE_ENTITY_TYPE)[keyof typeof IMAGE_ENTITY_TYPE];\n\nexport interface IImage {\n id: string;\n s3Key: string;\n s3Bucket: string;\n entityType: TStoredImageEntityType;\n entityId: string;\n fileName: string;\n mimeType: string;\n fileSizeBytes: number | null;\n width: number | null;\n height: number | null;\n isPublic: boolean;\n category: string | null;\n displayOrder: number;\n uploadedBy: string | null;\n createdAt: TDateTimeString;\n updatedAt: TDateTimeString;\n deletedAt: TDateTimeString | null;\n}\n\nexport interface IImageWithUrl extends IImage {\n url: string;\n}\n","import type { IMetaData, TDateTimeString, TRecordValue } from \"../base\";\nexport * from \"./routes\";\n\nexport const INVENTORY_RESTOCK_ORDER_STATUS = {\n PENDING: \"PENDING\",\n ORDERED: \"ORDERED\",\n SHIPPED: \"SHIPPED\",\n RECEIVED: \"RECEIVED\",\n} as const;\n\nexport type TInventoryRestockOrderStatus = TRecordValue<\n typeof INVENTORY_RESTOCK_ORDER_STATUS\n>;\n\nexport const INVENTORY_UNITS = {\n COUNT: \"COUNT\",\n ROLLS: \"ROLLS\",\n PODS: \"PODS\",\n BOXES: \"BOXES\",\n BOTTLES: \"BOTTLES\",\n PACKS: \"PACKS\",\n BAGS: \"BAGS\",\n GALLONS: \"GALLONS\",\n LITERS: \"LITERS\",\n KILOGRAMS: \"KILOGRAMS\",\n POUNDS: \"POUNDS\",\n OUNCES: \"OUNCES\",\n GRAMS: \"GRAMS\",\n SHEETS: \"SHEETS\",\n CASES: \"CASES\",\n CARTONS: \"CARTONS\",\n OTHER: \"OTHER\",\n} as const;\n\nexport type TInventoryUnitType = TRecordValue<typeof INVENTORY_UNITS>;\n\nexport const INVENTORY_ITEM_TYPE = {\n CONSUMABLE: \"CONSUMABLE\",\n FIXED: \"FIXED\",\n} as const;\n\nexport type TInventoryItemType = TRecordValue<typeof INVENTORY_ITEM_TYPE>;\n\nexport interface IInventoryItem extends IMetaData {\n id: string;\n companyId: string;\n name: string;\n description: string | null;\n itemType: TInventoryItemType;\n unit: TInventoryUnitType;\n unitCustom: string | null;\n minimumLevel: number;\n reorderLevel: number;\n maximumLevel: number | null;\n costPerUnit: number | null;\n supplierInfo: string | null;\n sku: string | null;\n barcode: string | null;\n}\n\nexport interface IRoomInventory extends IMetaData {\n id: string;\n roomId: string;\n inventoryItemId: string;\n currentLevel: number;\n minimumLevel: number;\n maximumLevel: number | null;\n parLevel: number | null;\n lastRestockedAt: TDateTimeString | null;\n lastRestockedBy: string | null;\n lastCheckedAt: TDateTimeString | null;\n lastCheckedBy: string | null;\n autoReorder: boolean;\n locationNotes: string | null;\n}\n\nexport interface IPropertyInventory extends IMetaData {\n id: string;\n propertyId: string;\n inventoryItemId: string;\n currentLevel: number;\n minimumLevel: number;\n maximumLevel: number | null;\n parLevel: number | null;\n lastRestockedAt: TDateTimeString | null;\n lastRestockedBy: string | null;\n lastCheckedAt: TDateTimeString | null;\n lastCheckedBy: string | null;\n autoReorder: boolean;\n locationNotes: string | null;\n}\n\nexport interface IInventoryCount {\n id: string;\n checklistExecutionId: string;\n roomInventoryId: string;\n previousLevel: number;\n countedLevel: number;\n consumedAmount: number;\n restockedAmount: number;\n finalLevel: number;\n countedBy: string;\n countedAt: TDateTimeString;\n needsRestock: boolean;\n notes: string | null;\n createdAt: TDateTimeString;\n}\n\nexport interface IInventoryRestockOrder {\n id: string;\n companyId: string;\n orderNumber: string | null;\n status: TInventoryRestockOrderStatus;\n totalItems: number | null;\n totalCost: number | null;\n orderedBy: string | null;\n orderedAt: TDateTimeString | null;\n expectedDelivery: TDateTimeString | null;\n receivedBy: string | null;\n receivedAt: TDateTimeString | null;\n supplierInfo: string | null;\n notes: string | null;\n createdAt: TDateTimeString;\n updatedAt: TDateTimeString;\n}\n\nexport interface IInventoryRestockOrderItem {\n id: string;\n orderId: string;\n inventoryItemId: string;\n roomInventoryId: string | null;\n propertyInventoryId: string | null;\n quantityOrdered: number;\n quantityReceived: number;\n unitCost: number | null;\n totalCost: number | null;\n createdAt: TDateTimeString;\n}\n","import type {\n ISelectOption,\n IMetaData,\n TDateTimeString,\n TRecordValue,\n TStatus,\n TUSStateCode,\n} from \"../base\";\n\nexport * from \"./routes\";\n\nexport const PROPERTY_STATUS = {\n ACTIVE: \"ACTIVE\",\n INACTIVE: \"INACTIVE\",\n} as const;\n\nexport type TPropertyStatus = TRecordValue<typeof PROPERTY_STATUS>;\n\nexport const PropertyStatusOptions: ISelectOption<TPropertyStatus>[] = [\n {\n label: \"Active\",\n value: PROPERTY_STATUS.ACTIVE,\n },\n {\n label: \"Inactive\",\n value: PROPERTY_STATUS.INACTIVE,\n },\n];\n\nexport const PROPERTY_TYPES = {\n APARTMENT: \"APARTMENT\",\n COMMERCIAL: \"COMMERCIAL\",\n CONDO: \"CONDO\",\n DUPLEX: \"DUPLEX\",\n HOUSE: \"HOUSE\",\n MULTI_FAMILY: \"MULTI_FAMILY\",\n OFFICE: \"OFFICE\",\n RETAIL: \"RETAIL\",\n TOWNHOUSE: \"TOWNHOUSE\",\n VACATION_RENTAL: \"VACATION_RENTAL\",\n WAREHOUSE: \"WAREHOUSE\",\n} as const;\n\nexport type TPropertyType = TRecordValue<typeof PROPERTY_TYPES>;\n\nexport const PropertyTypeOptions: ISelectOption<TPropertyType>[] = [\n {\n label: \"Apartment\",\n value: PROPERTY_TYPES.APARTMENT,\n },\n {\n label: \"Commercial\",\n value: PROPERTY_TYPES.COMMERCIAL,\n },\n {\n label: \"Condo\",\n value: PROPERTY_TYPES.CONDO,\n },\n {\n label: \"Duplex\",\n value: PROPERTY_TYPES.DUPLEX,\n },\n {\n label: \"House\",\n value: PROPERTY_TYPES.HOUSE,\n },\n {\n label: \"Multi-Family\",\n value: PROPERTY_TYPES.MULTI_FAMILY,\n },\n {\n label: \"Office\",\n value: PROPERTY_TYPES.OFFICE,\n },\n {\n label: \"Retail\",\n value: PROPERTY_TYPES.RETAIL,\n },\n {\n label: \"Townhouse\",\n value: PROPERTY_TYPES.TOWNHOUSE,\n },\n {\n label: \"Vacation Rental\",\n value: PROPERTY_TYPES.VACATION_RENTAL,\n },\n {\n label: \"Warehouse\",\n value: PROPERTY_TYPES.WAREHOUSE,\n },\n];\n\nexport interface IProperty extends IMetaData {\n id: string;\n displayName: string;\n addressLine1: string;\n addressLine2: string | null;\n city: string;\n stateCode: TUSStateCode;\n propertyType: TPropertyType | null;\n status: TPropertyStatus | null;\n sqft: number | null;\n postalCode: string;\n country: string | null;\n timezone: string | null;\n imageUrl: string | null;\n companyId: string;\n specialNotes: string | null;\n}\n\nexport interface IPropertyAccessInformation {\n propertyId: string;\n entryInstructions: string | null;\n accessCode: string | null;\n wifiName: string | null;\n wifiPassword: string | null;\n alarmCode: string | null;\n parkingInfo: string | null;\n specialNotes: string | null;\n}\n\nexport interface IPropertyBase {\n id: string;\n name: string;\n address?: string;\n propertyType?: string;\n imageUrl?: string;\n status?: TPropertyStatus;\n}\n\nexport interface IPropertyMetric {\n id: string;\n label: string;\n value: string | number;\n iconName?: string;\n}\n\nexport interface IPropertyAccessItem {\n id: string;\n label: string;\n value?: string;\n iconName?: string;\n}\n\nexport interface IPropertyRoomSummaryItem {\n id: string;\n name: string;\n roomType?: string;\n imageUrl?: string;\n checklistCount?: number;\n inventoryCount?: number;\n}\n\nexport interface IPropertyJobSummaryItem {\n id: string;\n title: string;\n description?: string;\n status?: TStatus;\n}\n\nexport interface IPropertyFormValues {\n displayName: string;\n propertyType: TPropertyType;\n status: TPropertyStatus;\n addressLine1: string;\n city: string;\n stateCode: TUSStateCode;\n postalCode: string;\n specialNotes: string;\n}\n\nexport interface IPropertyAccessFormValues {\n entryInstructions: string;\n accessCode: string;\n wifiName: string;\n wifiPassword: string;\n parkingInfo: string;\n specialNotes: string;\n}\n\nexport interface IPropertyFilterValues {\n status: TPropertyStatus;\n propertyType: TPropertyType;\n}\n\nexport interface IPropertySummary {\n id: string;\n displayName: string;\n propertyType: TPropertyType | null;\n addressLine1: string;\n addressLine2: string | null;\n city: string;\n stateCode: TUSStateCode;\n postalCode: string;\n imageUrl: string | null;\n status: TPropertyStatus | null;\n}\n\nexport interface IPropertyDetail extends IPropertySummary {\n specialNotes: string | null;\n roomCount?: number;\n createdAt: TDateTimeString;\n updatedAt: TDateTimeString;\n}\n","import type { IMetaData, TRecordValue } from \"../base\";\n\nexport * from \"./routes\";\n\nexport const ROOM_TYPE = {\n BEDROOM: \"BEDROOM\",\n BATHROOM: \"BATHROOM\",\n KITCHEN: \"KITCHEN\",\n LIVING_ROOM: \"LIVING_ROOM\",\n DINING_ROOM: \"DINING_ROOM\",\n OFFICE: \"OFFICE\",\n GARAGE: \"GARAGE\",\n LAUNDRY_ROOM: \"LAUNDRY_ROOM\",\n BASEMENT: \"BASEMENT\",\n ATTIC: \"ATTIC\",\n BALCONY: \"BALCONY\",\n PORCH: \"PORCH\",\n GARDEN: \"GARDEN\",\n OTHER: \"OTHER\",\n} as const;\n\nexport type TRoomType = TRecordValue<typeof ROOM_TYPE>;\n\nexport interface IRoom extends IMetaData {\n id: string;\n displayName: string;\n checklistTemplateId: string | null;\n roomType: TRoomType | null;\n heroPhoto: string | null;\n propertyId: string;\n description: string | null;\n}\n","import type { TDateTimeString, TRecordValue } from \"../base\";\n\nexport const SUBSCRIPTION_STATUS = {\n ACTIVE: \"ACTIVE\",\n CANCELED: \"CANCELED\",\n EXPIRED: \"EXPIRED\",\n PAST_DUE: \"PAST_DUE\",\n TRIALING: \"TRIALING\",\n} as const;\n\nexport type TSubscriptionStatus = TRecordValue<typeof SUBSCRIPTION_STATUS>;\n\nexport const SUBSCRIPTION_PROVIDER = {\n STRIPE: \"STRIPE\",\n APPLE: \"APPLE\",\n GOOGLE: \"GOOGLE\",\n} as const;\n\nexport type TSubscriptionProvider = TRecordValue<typeof SUBSCRIPTION_PROVIDER>;\n\nexport const BILLING_PERIOD = {\n MONTHLY: \"MONTHLY\",\n YEARLY: \"YEARLY\",\n} as const;\n\nexport type TBillingPeriod = TRecordValue<typeof BILLING_PERIOD>;\n\nexport interface IUserSubscription {\n id: string;\n userId: string;\n planId: string;\n status: TSubscriptionStatus;\n billingPeriod: TBillingPeriod;\n currentPeriodStart: TDateTimeString;\n currentPeriodEnd: TDateTimeString;\n provider: TSubscriptionProvider;\n providerSubscriptionId: string;\n cancelAtPeriodEnd: boolean;\n}\n","import type { IMetaData, TDateTimeString, TRecordValue } from \"../base\";\n\nexport * from \"./routes\";\n\nexport const ACCOUNT_TYPE = {\n TURNDOWN_ADMIN: \"TURNDOWN_ADMIN\",\n ACCOUNT_ADMIN: \"ACCOUNT_ADMIN\",\n MANAGER: \"MANAGER\",\n STAFF: \"STAFF\",\n GUEST: \"GUEST\",\n} as const;\n\nexport type TAccountType = TRecordValue<typeof ACCOUNT_TYPE>;\n\nexport const ACCOUNT_STATUS = {\n ACTIVE: \"ACTIVE\",\n INACTIVE: \"INACTIVE\",\n SUSPENDED: \"SUSPENDED\",\n PENDING: \"PENDING\",\n} as const;\n\nexport type TAccountStatus = TRecordValue<typeof ACCOUNT_STATUS>;\n\nexport const LANGUAGE = {\n ENGLISH: \"ENGLISH\",\n FRENCH: \"FRENCH\",\n SPANISH: \"SPANISH\",\n GERMAN: \"GERMAN\",\n} as const;\n\nexport type TLanguage = TRecordValue<typeof LANGUAGE>;\n\nexport interface IUser extends IMetaData {\n readonly id: string;\n\n firstName: string;\n lastName: string | null;\n mi: string | null;\n username: string | null;\n email: string;\n profilePhoto: string | null;\n\n passwordHash?: string;\n loginAttempts?: number;\n locked?: boolean;\n passwordLastReset: TDateTimeString | null;\n passwordResetRequired?: boolean;\n lastLogin: TDateTimeString | null;\n\n accountType: TAccountType;\n status: TAccountStatus;\n phoneNumber: string | null;\n phoneFormat: string | null;\n preferredLanguage: TLanguage | null;\n\n biometrics?: string;\n}\n\nexport type IUserSafe = Omit<\n IUser,\n | \"passwordLastReset\"\n | \"lastLogin\"\n | \"passwordHash\"\n | \"loginAttempts\"\n | \"biometrics\"\n>;\n\nexport interface IDeviceInfo {\n userAgent?: string;\n ip?: string;\n deviceName?: string;\n}\n\nexport interface IUserSession {\n id: number;\n deviceInfo: IDeviceInfo | null;\n createdAt: TDateTimeString;\n lastUsedAt: TDateTimeString;\n}\n","import type { TDateTimeString, TRecordValue } from \"../base\";\nexport * from \"./routes\";\n\n/**\n * Work session status enum.\n */\nexport const WORK_SESSION_STATUS = {\n IN_PROGRESS: \"IN_PROGRESS\",\n COMPLETED: \"COMPLETED\",\n CANCELLED: \"CANCELLED\",\n} as const;\n\nexport type TWorkSessionStatus = TRecordValue<typeof WORK_SESSION_STATUS>;\n\n/**\n * Checklist execution status enum.\n */\nexport const CHECKLIST_EXECUTION_STATUS = {\n PENDING: \"PENDING\",\n IN_PROGRESS: \"IN_PROGRESS\",\n COMPLETED: \"COMPLETED\",\n SKIPPED: \"SKIPPED\",\n} as const;\n\nexport type TChecklistExecutionStatus = TRecordValue<\n typeof CHECKLIST_EXECUTION_STATUS\n>;\n\n/**\n * Work session.\n */\nexport interface IWorkSession {\n id: string;\n propertyId: string;\n serviceProviderCompanyId: string;\n performedBy: string;\n status: TWorkSessionStatus;\n scheduledDate: TDateTimeString | null;\n startedAt: TDateTimeString;\n completedAt: TDateTimeString | null;\n totalTimeMinutes: number | null;\n notes: string | null;\n createdAt: TDateTimeString;\n updatedAt: TDateTimeString;\n}\n\n/**\n * Checklist execution.\n */\nexport interface IChecklistExecution {\n id: string;\n workSessionId: string;\n roomChecklistId: string;\n roomId: string;\n workerId: string;\n status: TChecklistExecutionStatus;\n startedAt: TDateTimeString | null;\n completedAt: TDateTimeString | null;\n timeSpentMinutes: number | null;\n notes: string | null;\n createdAt: TDateTimeString;\n updatedAt: TDateTimeString;\n}\n\n/**\n * Checklist item completion.\n */\nexport interface IChecklistItemCompletion {\n id: string;\n checklistExecutionId: string;\n roomChecklistItemId: string;\n completedBy: string;\n completedAt: TDateTimeString;\n photoId: string | null;\n notes: string | null;\n skipped: boolean;\n skipReason: string | null;\n createdAt: TDateTimeString;\n}\n\n/**\n * Work session with executions.\n */\nexport interface IWorkSessionWithExecutions extends IWorkSession {\n executions: IChecklistExecution[];\n}\n\n/**\n * Input for creating a work session.\n */\nexport interface ICreateWorkSessionInput {\n propertyId: string;\n serviceProviderCompanyId: string;\n performedBy: string;\n scheduledDate?: TDateTimeString;\n notes?: string;\n}\n\n/**\n * Input for completing a checklist item.\n */\nexport interface ICompleteChecklistItemInput {\n roomChecklistItemId: string;\n completedBy: string;\n photoId?: string;\n notes?: string;\n skipped?: boolean;\n skipReason?: string;\n}\n"],"mappings":"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","names":["exports","module","t","e","n","r","i","s","u","a","M","m","f","l","$","y","v","g","D","o","d","c","h","exports","module","t","i","d","n","e","s","exports","module","r","e","t","o","n","i","d","dayjs","relativeTime","isoWeek"]}
|