@pol-studios/db 1.0.57 → 1.0.59

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.
Files changed (49) hide show
  1. package/dist/DataLayerContext-V5FotiSk.d.ts +563 -0
  2. package/dist/auth/context.js +2 -2
  3. package/dist/auth/hooks.js +3 -3
  4. package/dist/auth/index.js +3 -3
  5. package/dist/{chunk-YRIPM2AN.js → chunk-4PZ744G2.js} +207 -6
  6. package/dist/chunk-4PZ744G2.js.map +1 -0
  7. package/dist/{chunk-6SDH7M7J.js → chunk-ARALLEDJ.js} +2 -2
  8. package/dist/{chunk-Z456IHCB.js → chunk-F4HW4NT5.js} +1 -1
  9. package/dist/chunk-F4HW4NT5.js.map +1 -0
  10. package/dist/{chunk-VSJKGPRI.js → chunk-K46TGKB2.js} +323 -379
  11. package/dist/chunk-K46TGKB2.js.map +1 -0
  12. package/dist/{chunk-GWYTROSD.js → chunk-L4DFVMTS.js} +335 -4
  13. package/dist/chunk-L4DFVMTS.js.map +1 -0
  14. package/dist/{chunk-MEBT5YHA.js → chunk-SNPZMRBC.js} +2 -2
  15. package/dist/{chunk-DDL63KLQ.js → chunk-VADZSRHY.js} +16 -337
  16. package/dist/chunk-VADZSRHY.js.map +1 -0
  17. package/dist/{chunk-4EO55YV2.js → chunk-VSY6766U.js} +4 -4
  18. package/dist/{chunk-VYFAMTHI.js → chunk-WY6MNB6K.js} +2 -2
  19. package/dist/core/index.d.ts +1 -1
  20. package/dist/{executor-D15yjeMo.d.ts → executor-Bu1OlqCl.d.ts} +43 -3
  21. package/dist/hooks/index.d.ts +3 -3
  22. package/dist/hooks/index.js +2 -2
  23. package/dist/{index-CFUuTzXO.d.ts → index-vwVJ0BWj.d.ts} +1 -9
  24. package/dist/index.d.ts +5 -5
  25. package/dist/index.js +20 -12
  26. package/dist/index.native.d.ts +77 -76
  27. package/dist/index.native.js +20 -12
  28. package/dist/index.web.d.ts +21 -44
  29. package/dist/index.web.js +215 -149
  30. package/dist/index.web.js.map +1 -1
  31. package/dist/powersync-bridge/index.d.ts +1 -1
  32. package/dist/query/index.d.ts +1 -1
  33. package/dist/query/index.js +1 -1
  34. package/dist/types/index.d.ts +3 -3
  35. package/dist/types/index.js +1 -1
  36. package/dist/{useDbCount-Ckb-FhZk.d.ts → useDbCount-dCkdaBpP.d.ts} +41 -83
  37. package/dist/{useResolveFeedback-CuUkdHoR.d.ts → useResolveFeedback-thFi-4h8.d.ts} +429 -5
  38. package/dist/with-auth/index.js +5 -5
  39. package/package.json +1 -1
  40. package/dist/DataLayerContext-BYZtDD0g.d.ts +0 -946
  41. package/dist/chunk-DDL63KLQ.js.map +0 -1
  42. package/dist/chunk-GWYTROSD.js.map +0 -1
  43. package/dist/chunk-VSJKGPRI.js.map +0 -1
  44. package/dist/chunk-YRIPM2AN.js.map +0 -1
  45. package/dist/chunk-Z456IHCB.js.map +0 -1
  46. /package/dist/{chunk-6SDH7M7J.js.map → chunk-ARALLEDJ.js.map} +0 -0
  47. /package/dist/{chunk-MEBT5YHA.js.map → chunk-SNPZMRBC.js.map} +0 -0
  48. /package/dist/{chunk-4EO55YV2.js.map → chunk-VSY6766U.js.map} +0 -0
  49. /package/dist/{chunk-VYFAMTHI.js.map → chunk-WY6MNB6K.js.map} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/moment.js","../src/useMutationSuccess.ts","../src/adapters/types.ts","../src/adapters/sync-tracking-adapter.ts","../src/adapters/registry.ts","../src/adapters/auto-detector.ts","../src/query/supabase-utils.ts","../src/query/supabase-executor.ts","../src/adapters/supabase-adapter.ts","../src/supabase-functions.tsx","../src/useAI.ts","../src/useServerAvailability.ts","../src/useSearchQuery.ts","../src/useLiveChangeTracking.ts","../src/useLatestOperationLog.ts","../src/useAutosaveState.ts","../src/useAutosave.ts","../src/useToastError.ts","../src/advance-query.tsx","../src/storage/bucketConfig.ts","../src/storage/StorageQueueContext.ts","../src/storage/auth-error-utils.ts","../src/storage/useStorageSource.ts","../src/storage/StorageQueueProvider.tsx","../src/utilities/query-utils.ts","../src/useDbRealtime.ts","../src/useDbRealtimeQuery.tsx","../src/useDbDelete.ts","../src/useDbMultiUpsert.ts","../src/useDbMultiDelete.ts","../src/changelog/useChangelogMutations.ts","../src/changelog/useChangelogQuery.ts","../src/nl-training/useFeedbackList.ts","../src/nl-training/useSubmitFeedback.ts","../src/nl-training/useApplyFeedback.ts","../src/nl-training/useResolveFeedback.ts"],"sourcesContent":["//! moment.js\n//! version : 2.30.1\n//! authors : Tim Wood, Iskren Chernev, Moment.js contributors\n//! license : MIT\n//! momentjs.com\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n global.moment = factory()\n}(this, (function () { 'use strict';\n\n var hookCallback;\n\n function hooks() {\n return hookCallback.apply(null, arguments);\n }\n\n // This is done to register the method called with moment()\n // without creating circular dependencies.\n function setHookCallback(callback) {\n hookCallback = callback;\n }\n\n function isArray(input) {\n return (\n input instanceof Array ||\n Object.prototype.toString.call(input) === '[object Array]'\n );\n }\n\n function isObject(input) {\n // IE8 will treat undefined and null as object if it wasn't for\n // input != null\n return (\n input != null &&\n Object.prototype.toString.call(input) === '[object Object]'\n );\n }\n\n function hasOwnProp(a, b) {\n return Object.prototype.hasOwnProperty.call(a, b);\n }\n\n function isObjectEmpty(obj) {\n if (Object.getOwnPropertyNames) {\n return Object.getOwnPropertyNames(obj).length === 0;\n } else {\n var k;\n for (k in obj) {\n if (hasOwnProp(obj, k)) {\n return false;\n }\n }\n return true;\n }\n }\n\n function isUndefined(input) {\n return input === void 0;\n }\n\n function isNumber(input) {\n return (\n typeof input === 'number' ||\n Object.prototype.toString.call(input) === '[object Number]'\n );\n }\n\n function isDate(input) {\n return (\n input instanceof Date ||\n Object.prototype.toString.call(input) === '[object Date]'\n );\n }\n\n function map(arr, fn) {\n var res = [],\n i,\n arrLen = arr.length;\n for (i = 0; i < arrLen; ++i) {\n res.push(fn(arr[i], i));\n }\n return res;\n }\n\n function extend(a, b) {\n for (var i in b) {\n if (hasOwnProp(b, i)) {\n a[i] = b[i];\n }\n }\n\n if (hasOwnProp(b, 'toString')) {\n a.toString = b.toString;\n }\n\n if (hasOwnProp(b, 'valueOf')) {\n a.valueOf = b.valueOf;\n }\n\n return a;\n }\n\n function createUTC(input, format, locale, strict) {\n return createLocalOrUTC(input, format, locale, strict, true).utc();\n }\n\n function defaultParsingFlags() {\n // We need to deep clone this object.\n return {\n empty: false,\n unusedTokens: [],\n unusedInput: [],\n overflow: -2,\n charsLeftOver: 0,\n nullInput: false,\n invalidEra: null,\n invalidMonth: null,\n invalidFormat: false,\n userInvalidated: false,\n iso: false,\n parsedDateParts: [],\n era: null,\n meridiem: null,\n rfc2822: false,\n weekdayMismatch: false,\n };\n }\n\n function getParsingFlags(m) {\n if (m._pf == null) {\n m._pf = defaultParsingFlags();\n }\n return m._pf;\n }\n\n var some;\n if (Array.prototype.some) {\n some = Array.prototype.some;\n } else {\n some = function (fun) {\n var t = Object(this),\n len = t.length >>> 0,\n i;\n\n for (i = 0; i < len; i++) {\n if (i in t && fun.call(this, t[i], i, t)) {\n return true;\n }\n }\n\n return false;\n };\n }\n\n function isValid(m) {\n var flags = null,\n parsedParts = false,\n isNowValid = m._d && !isNaN(m._d.getTime());\n if (isNowValid) {\n flags = getParsingFlags(m);\n parsedParts = some.call(flags.parsedDateParts, function (i) {\n return i != null;\n });\n isNowValid =\n flags.overflow < 0 &&\n !flags.empty &&\n !flags.invalidEra &&\n !flags.invalidMonth &&\n !flags.invalidWeekday &&\n !flags.weekdayMismatch &&\n !flags.nullInput &&\n !flags.invalidFormat &&\n !flags.userInvalidated &&\n (!flags.meridiem || (flags.meridiem && parsedParts));\n if (m._strict) {\n isNowValid =\n isNowValid &&\n flags.charsLeftOver === 0 &&\n flags.unusedTokens.length === 0 &&\n flags.bigHour === undefined;\n }\n }\n if (Object.isFrozen == null || !Object.isFrozen(m)) {\n m._isValid = isNowValid;\n } else {\n return isNowValid;\n }\n return m._isValid;\n }\n\n function createInvalid(flags) {\n var m = createUTC(NaN);\n if (flags != null) {\n extend(getParsingFlags(m), flags);\n } else {\n getParsingFlags(m).userInvalidated = true;\n }\n\n return m;\n }\n\n // Plugins that add properties should also add the key here (null value),\n // so we can properly clone ourselves.\n var momentProperties = (hooks.momentProperties = []),\n updateInProgress = false;\n\n function copyConfig(to, from) {\n var i,\n prop,\n val,\n momentPropertiesLen = momentProperties.length;\n\n if (!isUndefined(from._isAMomentObject)) {\n to._isAMomentObject = from._isAMomentObject;\n }\n if (!isUndefined(from._i)) {\n to._i = from._i;\n }\n if (!isUndefined(from._f)) {\n to._f = from._f;\n }\n if (!isUndefined(from._l)) {\n to._l = from._l;\n }\n if (!isUndefined(from._strict)) {\n to._strict = from._strict;\n }\n if (!isUndefined(from._tzm)) {\n to._tzm = from._tzm;\n }\n if (!isUndefined(from._isUTC)) {\n to._isUTC = from._isUTC;\n }\n if (!isUndefined(from._offset)) {\n to._offset = from._offset;\n }\n if (!isUndefined(from._pf)) {\n to._pf = getParsingFlags(from);\n }\n if (!isUndefined(from._locale)) {\n to._locale = from._locale;\n }\n\n if (momentPropertiesLen > 0) {\n for (i = 0; i < momentPropertiesLen; i++) {\n prop = momentProperties[i];\n val = from[prop];\n if (!isUndefined(val)) {\n to[prop] = val;\n }\n }\n }\n\n return to;\n }\n\n // Moment prototype object\n function Moment(config) {\n copyConfig(this, config);\n this._d = new Date(config._d != null ? config._d.getTime() : NaN);\n if (!this.isValid()) {\n this._d = new Date(NaN);\n }\n // Prevent infinite loop in case updateOffset creates new moment\n // objects.\n if (updateInProgress === false) {\n updateInProgress = true;\n hooks.updateOffset(this);\n updateInProgress = false;\n }\n }\n\n function isMoment(obj) {\n return (\n obj instanceof Moment || (obj != null && obj._isAMomentObject != null)\n );\n }\n\n function warn(msg) {\n if (\n hooks.suppressDeprecationWarnings === false &&\n typeof console !== 'undefined' &&\n console.warn\n ) {\n console.warn('Deprecation warning: ' + msg);\n }\n }\n\n function deprecate(msg, fn) {\n var firstTime = true;\n\n return extend(function () {\n if (hooks.deprecationHandler != null) {\n hooks.deprecationHandler(null, msg);\n }\n if (firstTime) {\n var args = [],\n arg,\n i,\n key,\n argLen = arguments.length;\n for (i = 0; i < argLen; i++) {\n arg = '';\n if (typeof arguments[i] === 'object') {\n arg += '\\n[' + i + '] ';\n for (key in arguments[0]) {\n if (hasOwnProp(arguments[0], key)) {\n arg += key + ': ' + arguments[0][key] + ', ';\n }\n }\n arg = arg.slice(0, -2); // Remove trailing comma and space\n } else {\n arg = arguments[i];\n }\n args.push(arg);\n }\n warn(\n msg +\n '\\nArguments: ' +\n Array.prototype.slice.call(args).join('') +\n '\\n' +\n new Error().stack\n );\n firstTime = false;\n }\n return fn.apply(this, arguments);\n }, fn);\n }\n\n var deprecations = {};\n\n function deprecateSimple(name, msg) {\n if (hooks.deprecationHandler != null) {\n hooks.deprecationHandler(name, msg);\n }\n if (!deprecations[name]) {\n warn(msg);\n deprecations[name] = true;\n }\n }\n\n hooks.suppressDeprecationWarnings = false;\n hooks.deprecationHandler = null;\n\n function isFunction(input) {\n return (\n (typeof Function !== 'undefined' && input instanceof Function) ||\n Object.prototype.toString.call(input) === '[object Function]'\n );\n }\n\n function set(config) {\n var prop, i;\n for (i in config) {\n if (hasOwnProp(config, i)) {\n prop = config[i];\n if (isFunction(prop)) {\n this[i] = prop;\n } else {\n this['_' + i] = prop;\n }\n }\n }\n this._config = config;\n // Lenient ordinal parsing accepts just a number in addition to\n // number + (possibly) stuff coming from _dayOfMonthOrdinalParse.\n // TODO: Remove \"ordinalParse\" fallback in next major release.\n this._dayOfMonthOrdinalParseLenient = new RegExp(\n (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) +\n '|' +\n /\\d{1,2}/.source\n );\n }\n\n function mergeConfigs(parentConfig, childConfig) {\n var res = extend({}, parentConfig),\n prop;\n for (prop in childConfig) {\n if (hasOwnProp(childConfig, prop)) {\n if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {\n res[prop] = {};\n extend(res[prop], parentConfig[prop]);\n extend(res[prop], childConfig[prop]);\n } else if (childConfig[prop] != null) {\n res[prop] = childConfig[prop];\n } else {\n delete res[prop];\n }\n }\n }\n for (prop in parentConfig) {\n if (\n hasOwnProp(parentConfig, prop) &&\n !hasOwnProp(childConfig, prop) &&\n isObject(parentConfig[prop])\n ) {\n // make sure changes to properties don't modify parent config\n res[prop] = extend({}, res[prop]);\n }\n }\n return res;\n }\n\n function Locale(config) {\n if (config != null) {\n this.set(config);\n }\n }\n\n var keys;\n\n if (Object.keys) {\n keys = Object.keys;\n } else {\n keys = function (obj) {\n var i,\n res = [];\n for (i in obj) {\n if (hasOwnProp(obj, i)) {\n res.push(i);\n }\n }\n return res;\n };\n }\n\n var defaultCalendar = {\n sameDay: '[Today at] LT',\n nextDay: '[Tomorrow at] LT',\n nextWeek: 'dddd [at] LT',\n lastDay: '[Yesterday at] LT',\n lastWeek: '[Last] dddd [at] LT',\n sameElse: 'L',\n };\n\n function calendar(key, mom, now) {\n var output = this._calendar[key] || this._calendar['sameElse'];\n return isFunction(output) ? output.call(mom, now) : output;\n }\n\n function zeroFill(number, targetLength, forceSign) {\n var absNumber = '' + Math.abs(number),\n zerosToFill = targetLength - absNumber.length,\n sign = number >= 0;\n return (\n (sign ? (forceSign ? '+' : '') : '-') +\n Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) +\n absNumber\n );\n }\n\n var formattingTokens =\n /(\\[[^\\[]*\\])|(\\\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,\n localFormattingTokens = /(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g,\n formatFunctions = {},\n formatTokenFunctions = {};\n\n // token: 'M'\n // padded: ['MM', 2]\n // ordinal: 'Mo'\n // callback: function () { this.month() + 1 }\n function addFormatToken(token, padded, ordinal, callback) {\n var func = callback;\n if (typeof callback === 'string') {\n func = function () {\n return this[callback]();\n };\n }\n if (token) {\n formatTokenFunctions[token] = func;\n }\n if (padded) {\n formatTokenFunctions[padded[0]] = function () {\n return zeroFill(func.apply(this, arguments), padded[1], padded[2]);\n };\n }\n if (ordinal) {\n formatTokenFunctions[ordinal] = function () {\n return this.localeData().ordinal(\n func.apply(this, arguments),\n token\n );\n };\n }\n }\n\n function removeFormattingTokens(input) {\n if (input.match(/\\[[\\s\\S]/)) {\n return input.replace(/^\\[|\\]$/g, '');\n }\n return input.replace(/\\\\/g, '');\n }\n\n function makeFormatFunction(format) {\n var array = format.match(formattingTokens),\n i,\n length;\n\n for (i = 0, length = array.length; i < length; i++) {\n if (formatTokenFunctions[array[i]]) {\n array[i] = formatTokenFunctions[array[i]];\n } else {\n array[i] = removeFormattingTokens(array[i]);\n }\n }\n\n return function (mom) {\n var output = '',\n i;\n for (i = 0; i < length; i++) {\n output += isFunction(array[i])\n ? array[i].call(mom, format)\n : array[i];\n }\n return output;\n };\n }\n\n // format date using native date object\n function formatMoment(m, format) {\n if (!m.isValid()) {\n return m.localeData().invalidDate();\n }\n\n format = expandFormat(format, m.localeData());\n formatFunctions[format] =\n formatFunctions[format] || makeFormatFunction(format);\n\n return formatFunctions[format](m);\n }\n\n function expandFormat(format, locale) {\n var i = 5;\n\n function replaceLongDateFormatTokens(input) {\n return locale.longDateFormat(input) || input;\n }\n\n localFormattingTokens.lastIndex = 0;\n while (i >= 0 && localFormattingTokens.test(format)) {\n format = format.replace(\n localFormattingTokens,\n replaceLongDateFormatTokens\n );\n localFormattingTokens.lastIndex = 0;\n i -= 1;\n }\n\n return format;\n }\n\n var defaultLongDateFormat = {\n LTS: 'h:mm:ss A',\n LT: 'h:mm A',\n L: 'MM/DD/YYYY',\n LL: 'MMMM D, YYYY',\n LLL: 'MMMM D, YYYY h:mm A',\n LLLL: 'dddd, MMMM D, YYYY h:mm A',\n };\n\n function longDateFormat(key) {\n var format = this._longDateFormat[key],\n formatUpper = this._longDateFormat[key.toUpperCase()];\n\n if (format || !formatUpper) {\n return format;\n }\n\n this._longDateFormat[key] = formatUpper\n .match(formattingTokens)\n .map(function (tok) {\n if (\n tok === 'MMMM' ||\n tok === 'MM' ||\n tok === 'DD' ||\n tok === 'dddd'\n ) {\n return tok.slice(1);\n }\n return tok;\n })\n .join('');\n\n return this._longDateFormat[key];\n }\n\n var defaultInvalidDate = 'Invalid date';\n\n function invalidDate() {\n return this._invalidDate;\n }\n\n var defaultOrdinal = '%d',\n defaultDayOfMonthOrdinalParse = /\\d{1,2}/;\n\n function ordinal(number) {\n return this._ordinal.replace('%d', number);\n }\n\n var defaultRelativeTime = {\n future: 'in %s',\n past: '%s ago',\n s: 'a few seconds',\n ss: '%d seconds',\n m: 'a minute',\n mm: '%d minutes',\n h: 'an hour',\n hh: '%d hours',\n d: 'a day',\n dd: '%d days',\n w: 'a week',\n ww: '%d weeks',\n M: 'a month',\n MM: '%d months',\n y: 'a year',\n yy: '%d years',\n };\n\n function relativeTime(number, withoutSuffix, string, isFuture) {\n var output = this._relativeTime[string];\n return isFunction(output)\n ? output(number, withoutSuffix, string, isFuture)\n : output.replace(/%d/i, number);\n }\n\n function pastFuture(diff, output) {\n var format = this._relativeTime[diff > 0 ? 'future' : 'past'];\n return isFunction(format) ? format(output) : format.replace(/%s/i, output);\n }\n\n var aliases = {\n D: 'date',\n dates: 'date',\n date: 'date',\n d: 'day',\n days: 'day',\n day: 'day',\n e: 'weekday',\n weekdays: 'weekday',\n weekday: 'weekday',\n E: 'isoWeekday',\n isoweekdays: 'isoWeekday',\n isoweekday: 'isoWeekday',\n DDD: 'dayOfYear',\n dayofyears: 'dayOfYear',\n dayofyear: 'dayOfYear',\n h: 'hour',\n hours: 'hour',\n hour: 'hour',\n ms: 'millisecond',\n milliseconds: 'millisecond',\n millisecond: 'millisecond',\n m: 'minute',\n minutes: 'minute',\n minute: 'minute',\n M: 'month',\n months: 'month',\n month: 'month',\n Q: 'quarter',\n quarters: 'quarter',\n quarter: 'quarter',\n s: 'second',\n seconds: 'second',\n second: 'second',\n gg: 'weekYear',\n weekyears: 'weekYear',\n weekyear: 'weekYear',\n GG: 'isoWeekYear',\n isoweekyears: 'isoWeekYear',\n isoweekyear: 'isoWeekYear',\n w: 'week',\n weeks: 'week',\n week: 'week',\n W: 'isoWeek',\n isoweeks: 'isoWeek',\n isoweek: 'isoWeek',\n y: 'year',\n years: 'year',\n year: 'year',\n };\n\n function normalizeUnits(units) {\n return typeof units === 'string'\n ? aliases[units] || aliases[units.toLowerCase()]\n : undefined;\n }\n\n function normalizeObjectUnits(inputObject) {\n var normalizedInput = {},\n normalizedProp,\n prop;\n\n for (prop in inputObject) {\n if (hasOwnProp(inputObject, prop)) {\n normalizedProp = normalizeUnits(prop);\n if (normalizedProp) {\n normalizedInput[normalizedProp] = inputObject[prop];\n }\n }\n }\n\n return normalizedInput;\n }\n\n var priorities = {\n date: 9,\n day: 11,\n weekday: 11,\n isoWeekday: 11,\n dayOfYear: 4,\n hour: 13,\n millisecond: 16,\n minute: 14,\n month: 8,\n quarter: 7,\n second: 15,\n weekYear: 1,\n isoWeekYear: 1,\n week: 5,\n isoWeek: 5,\n year: 1,\n };\n\n function getPrioritizedUnits(unitsObj) {\n var units = [],\n u;\n for (u in unitsObj) {\n if (hasOwnProp(unitsObj, u)) {\n units.push({ unit: u, priority: priorities[u] });\n }\n }\n units.sort(function (a, b) {\n return a.priority - b.priority;\n });\n return units;\n }\n\n var match1 = /\\d/, // 0 - 9\n match2 = /\\d\\d/, // 00 - 99\n match3 = /\\d{3}/, // 000 - 999\n match4 = /\\d{4}/, // 0000 - 9999\n match6 = /[+-]?\\d{6}/, // -999999 - 999999\n match1to2 = /\\d\\d?/, // 0 - 99\n match3to4 = /\\d\\d\\d\\d?/, // 999 - 9999\n match5to6 = /\\d\\d\\d\\d\\d\\d?/, // 99999 - 999999\n match1to3 = /\\d{1,3}/, // 0 - 999\n match1to4 = /\\d{1,4}/, // 0 - 9999\n match1to6 = /[+-]?\\d{1,6}/, // -999999 - 999999\n matchUnsigned = /\\d+/, // 0 - inf\n matchSigned = /[+-]?\\d+/, // -inf - inf\n matchOffset = /Z|[+-]\\d\\d:?\\d\\d/gi, // +00:00 -00:00 +0000 -0000 or Z\n matchShortOffset = /Z|[+-]\\d\\d(?::?\\d\\d)?/gi, // +00 -00 +00:00 -00:00 +0000 -0000 or Z\n matchTimestamp = /[+-]?\\d+(\\.\\d{1,3})?/, // 123456789 123456789.123\n // any word (or two) characters or numbers including two/three word month in arabic.\n // includes scottish gaelic two word and hyphenated months\n matchWord =\n /[0-9]{0,256}['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFF07\\uFF10-\\uFFEF]{1,256}|[\\u0600-\\u06FF\\/]{1,256}(\\s*?[\\u0600-\\u06FF]{1,256}){1,2}/i,\n match1to2NoLeadingZero = /^[1-9]\\d?/, // 1-99\n match1to2HasZero = /^([1-9]\\d|\\d)/, // 0-99\n regexes;\n\n regexes = {};\n\n function addRegexToken(token, regex, strictRegex) {\n regexes[token] = isFunction(regex)\n ? regex\n : function (isStrict, localeData) {\n return isStrict && strictRegex ? strictRegex : regex;\n };\n }\n\n function getParseRegexForToken(token, config) {\n if (!hasOwnProp(regexes, token)) {\n return new RegExp(unescapeFormat(token));\n }\n\n return regexes[token](config._strict, config._locale);\n }\n\n // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript\n function unescapeFormat(s) {\n return regexEscape(\n s\n .replace('\\\\', '')\n .replace(\n /\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g,\n function (matched, p1, p2, p3, p4) {\n return p1 || p2 || p3 || p4;\n }\n )\n );\n }\n\n function regexEscape(s) {\n return s.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n }\n\n function absFloor(number) {\n if (number < 0) {\n // -0 -> 0\n return Math.ceil(number) || 0;\n } else {\n return Math.floor(number);\n }\n }\n\n function toInt(argumentForCoercion) {\n var coercedNumber = +argumentForCoercion,\n value = 0;\n\n if (coercedNumber !== 0 && isFinite(coercedNumber)) {\n value = absFloor(coercedNumber);\n }\n\n return value;\n }\n\n var tokens = {};\n\n function addParseToken(token, callback) {\n var i,\n func = callback,\n tokenLen;\n if (typeof token === 'string') {\n token = [token];\n }\n if (isNumber(callback)) {\n func = function (input, array) {\n array[callback] = toInt(input);\n };\n }\n tokenLen = token.length;\n for (i = 0; i < tokenLen; i++) {\n tokens[token[i]] = func;\n }\n }\n\n function addWeekParseToken(token, callback) {\n addParseToken(token, function (input, array, config, token) {\n config._w = config._w || {};\n callback(input, config._w, config, token);\n });\n }\n\n function addTimeToArrayFromToken(token, input, config) {\n if (input != null && hasOwnProp(tokens, token)) {\n tokens[token](input, config._a, config, token);\n }\n }\n\n function isLeapYear(year) {\n return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n }\n\n var YEAR = 0,\n MONTH = 1,\n DATE = 2,\n HOUR = 3,\n MINUTE = 4,\n SECOND = 5,\n MILLISECOND = 6,\n WEEK = 7,\n WEEKDAY = 8;\n\n // FORMATTING\n\n addFormatToken('Y', 0, 0, function () {\n var y = this.year();\n return y <= 9999 ? zeroFill(y, 4) : '+' + y;\n });\n\n addFormatToken(0, ['YY', 2], 0, function () {\n return this.year() % 100;\n });\n\n addFormatToken(0, ['YYYY', 4], 0, 'year');\n addFormatToken(0, ['YYYYY', 5], 0, 'year');\n addFormatToken(0, ['YYYYYY', 6, true], 0, 'year');\n\n // PARSING\n\n addRegexToken('Y', matchSigned);\n addRegexToken('YY', match1to2, match2);\n addRegexToken('YYYY', match1to4, match4);\n addRegexToken('YYYYY', match1to6, match6);\n addRegexToken('YYYYYY', match1to6, match6);\n\n addParseToken(['YYYYY', 'YYYYYY'], YEAR);\n addParseToken('YYYY', function (input, array) {\n array[YEAR] =\n input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);\n });\n addParseToken('YY', function (input, array) {\n array[YEAR] = hooks.parseTwoDigitYear(input);\n });\n addParseToken('Y', function (input, array) {\n array[YEAR] = parseInt(input, 10);\n });\n\n // HELPERS\n\n function daysInYear(year) {\n return isLeapYear(year) ? 366 : 365;\n }\n\n // HOOKS\n\n hooks.parseTwoDigitYear = function (input) {\n return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);\n };\n\n // MOMENTS\n\n var getSetYear = makeGetSet('FullYear', true);\n\n function getIsLeapYear() {\n return isLeapYear(this.year());\n }\n\n function makeGetSet(unit, keepTime) {\n return function (value) {\n if (value != null) {\n set$1(this, unit, value);\n hooks.updateOffset(this, keepTime);\n return this;\n } else {\n return get(this, unit);\n }\n };\n }\n\n function get(mom, unit) {\n if (!mom.isValid()) {\n return NaN;\n }\n\n var d = mom._d,\n isUTC = mom._isUTC;\n\n switch (unit) {\n case 'Milliseconds':\n return isUTC ? d.getUTCMilliseconds() : d.getMilliseconds();\n case 'Seconds':\n return isUTC ? d.getUTCSeconds() : d.getSeconds();\n case 'Minutes':\n return isUTC ? d.getUTCMinutes() : d.getMinutes();\n case 'Hours':\n return isUTC ? d.getUTCHours() : d.getHours();\n case 'Date':\n return isUTC ? d.getUTCDate() : d.getDate();\n case 'Day':\n return isUTC ? d.getUTCDay() : d.getDay();\n case 'Month':\n return isUTC ? d.getUTCMonth() : d.getMonth();\n case 'FullYear':\n return isUTC ? d.getUTCFullYear() : d.getFullYear();\n default:\n return NaN; // Just in case\n }\n }\n\n function set$1(mom, unit, value) {\n var d, isUTC, year, month, date;\n\n if (!mom.isValid() || isNaN(value)) {\n return;\n }\n\n d = mom._d;\n isUTC = mom._isUTC;\n\n switch (unit) {\n case 'Milliseconds':\n return void (isUTC\n ? d.setUTCMilliseconds(value)\n : d.setMilliseconds(value));\n case 'Seconds':\n return void (isUTC ? d.setUTCSeconds(value) : d.setSeconds(value));\n case 'Minutes':\n return void (isUTC ? d.setUTCMinutes(value) : d.setMinutes(value));\n case 'Hours':\n return void (isUTC ? d.setUTCHours(value) : d.setHours(value));\n case 'Date':\n return void (isUTC ? d.setUTCDate(value) : d.setDate(value));\n // case 'Day': // Not real\n // return void (isUTC ? d.setUTCDay(value) : d.setDay(value));\n // case 'Month': // Not used because we need to pass two variables\n // return void (isUTC ? d.setUTCMonth(value) : d.setMonth(value));\n case 'FullYear':\n break; // See below ...\n default:\n return; // Just in case\n }\n\n year = value;\n month = mom.month();\n date = mom.date();\n date = date === 29 && month === 1 && !isLeapYear(year) ? 28 : date;\n void (isUTC\n ? d.setUTCFullYear(year, month, date)\n : d.setFullYear(year, month, date));\n }\n\n // MOMENTS\n\n function stringGet(units) {\n units = normalizeUnits(units);\n if (isFunction(this[units])) {\n return this[units]();\n }\n return this;\n }\n\n function stringSet(units, value) {\n if (typeof units === 'object') {\n units = normalizeObjectUnits(units);\n var prioritized = getPrioritizedUnits(units),\n i,\n prioritizedLen = prioritized.length;\n for (i = 0; i < prioritizedLen; i++) {\n this[prioritized[i].unit](units[prioritized[i].unit]);\n }\n } else {\n units = normalizeUnits(units);\n if (isFunction(this[units])) {\n return this[units](value);\n }\n }\n return this;\n }\n\n function mod(n, x) {\n return ((n % x) + x) % x;\n }\n\n var indexOf;\n\n if (Array.prototype.indexOf) {\n indexOf = Array.prototype.indexOf;\n } else {\n indexOf = function (o) {\n // I know\n var i;\n for (i = 0; i < this.length; ++i) {\n if (this[i] === o) {\n return i;\n }\n }\n return -1;\n };\n }\n\n function daysInMonth(year, month) {\n if (isNaN(year) || isNaN(month)) {\n return NaN;\n }\n var modMonth = mod(month, 12);\n year += (month - modMonth) / 12;\n return modMonth === 1\n ? isLeapYear(year)\n ? 29\n : 28\n : 31 - ((modMonth % 7) % 2);\n }\n\n // FORMATTING\n\n addFormatToken('M', ['MM', 2], 'Mo', function () {\n return this.month() + 1;\n });\n\n addFormatToken('MMM', 0, 0, function (format) {\n return this.localeData().monthsShort(this, format);\n });\n\n addFormatToken('MMMM', 0, 0, function (format) {\n return this.localeData().months(this, format);\n });\n\n // PARSING\n\n addRegexToken('M', match1to2, match1to2NoLeadingZero);\n addRegexToken('MM', match1to2, match2);\n addRegexToken('MMM', function (isStrict, locale) {\n return locale.monthsShortRegex(isStrict);\n });\n addRegexToken('MMMM', function (isStrict, locale) {\n return locale.monthsRegex(isStrict);\n });\n\n addParseToken(['M', 'MM'], function (input, array) {\n array[MONTH] = toInt(input) - 1;\n });\n\n addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {\n var month = config._locale.monthsParse(input, token, config._strict);\n // if we didn't find a month name, mark the date as invalid.\n if (month != null) {\n array[MONTH] = month;\n } else {\n getParsingFlags(config).invalidMonth = input;\n }\n });\n\n // LOCALES\n\n var defaultLocaleMonths =\n 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n '_'\n ),\n defaultLocaleMonthsShort =\n 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n MONTHS_IN_FORMAT = /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?/,\n defaultMonthsShortRegex = matchWord,\n defaultMonthsRegex = matchWord;\n\n function localeMonths(m, format) {\n if (!m) {\n return isArray(this._months)\n ? this._months\n : this._months['standalone'];\n }\n return isArray(this._months)\n ? this._months[m.month()]\n : this._months[\n (this._months.isFormat || MONTHS_IN_FORMAT).test(format)\n ? 'format'\n : 'standalone'\n ][m.month()];\n }\n\n function localeMonthsShort(m, format) {\n if (!m) {\n return isArray(this._monthsShort)\n ? this._monthsShort\n : this._monthsShort['standalone'];\n }\n return isArray(this._monthsShort)\n ? this._monthsShort[m.month()]\n : this._monthsShort[\n MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'\n ][m.month()];\n }\n\n function handleStrictParse(monthName, format, strict) {\n var i,\n ii,\n mom,\n llc = monthName.toLocaleLowerCase();\n if (!this._monthsParse) {\n // this is not used\n this._monthsParse = [];\n this._longMonthsParse = [];\n this._shortMonthsParse = [];\n for (i = 0; i < 12; ++i) {\n mom = createUTC([2000, i]);\n this._shortMonthsParse[i] = this.monthsShort(\n mom,\n ''\n ).toLocaleLowerCase();\n this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();\n }\n }\n\n if (strict) {\n if (format === 'MMM') {\n ii = indexOf.call(this._shortMonthsParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._longMonthsParse, llc);\n return ii !== -1 ? ii : null;\n }\n } else {\n if (format === 'MMM') {\n ii = indexOf.call(this._shortMonthsParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._longMonthsParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._longMonthsParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortMonthsParse, llc);\n return ii !== -1 ? ii : null;\n }\n }\n }\n\n function localeMonthsParse(monthName, format, strict) {\n var i, mom, regex;\n\n if (this._monthsParseExact) {\n return handleStrictParse.call(this, monthName, format, strict);\n }\n\n if (!this._monthsParse) {\n this._monthsParse = [];\n this._longMonthsParse = [];\n this._shortMonthsParse = [];\n }\n\n // TODO: add sorting\n // Sorting makes sure if one month (or abbr) is a prefix of another\n // see sorting in computeMonthsParse\n for (i = 0; i < 12; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, i]);\n if (strict && !this._longMonthsParse[i]) {\n this._longMonthsParse[i] = new RegExp(\n '^' + this.months(mom, '').replace('.', '') + '$',\n 'i'\n );\n this._shortMonthsParse[i] = new RegExp(\n '^' + this.monthsShort(mom, '').replace('.', '') + '$',\n 'i'\n );\n }\n if (!strict && !this._monthsParse[i]) {\n regex =\n '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');\n this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');\n }\n // test the regex\n if (\n strict &&\n format === 'MMMM' &&\n this._longMonthsParse[i].test(monthName)\n ) {\n return i;\n } else if (\n strict &&\n format === 'MMM' &&\n this._shortMonthsParse[i].test(monthName)\n ) {\n return i;\n } else if (!strict && this._monthsParse[i].test(monthName)) {\n return i;\n }\n }\n }\n\n // MOMENTS\n\n function setMonth(mom, value) {\n if (!mom.isValid()) {\n // No op\n return mom;\n }\n\n if (typeof value === 'string') {\n if (/^\\d+$/.test(value)) {\n value = toInt(value);\n } else {\n value = mom.localeData().monthsParse(value);\n // TODO: Another silent failure?\n if (!isNumber(value)) {\n return mom;\n }\n }\n }\n\n var month = value,\n date = mom.date();\n\n date = date < 29 ? date : Math.min(date, daysInMonth(mom.year(), month));\n void (mom._isUTC\n ? mom._d.setUTCMonth(month, date)\n : mom._d.setMonth(month, date));\n return mom;\n }\n\n function getSetMonth(value) {\n if (value != null) {\n setMonth(this, value);\n hooks.updateOffset(this, true);\n return this;\n } else {\n return get(this, 'Month');\n }\n }\n\n function getDaysInMonth() {\n return daysInMonth(this.year(), this.month());\n }\n\n function monthsShortRegex(isStrict) {\n if (this._monthsParseExact) {\n if (!hasOwnProp(this, '_monthsRegex')) {\n computeMonthsParse.call(this);\n }\n if (isStrict) {\n return this._monthsShortStrictRegex;\n } else {\n return this._monthsShortRegex;\n }\n } else {\n if (!hasOwnProp(this, '_monthsShortRegex')) {\n this._monthsShortRegex = defaultMonthsShortRegex;\n }\n return this._monthsShortStrictRegex && isStrict\n ? this._monthsShortStrictRegex\n : this._monthsShortRegex;\n }\n }\n\n function monthsRegex(isStrict) {\n if (this._monthsParseExact) {\n if (!hasOwnProp(this, '_monthsRegex')) {\n computeMonthsParse.call(this);\n }\n if (isStrict) {\n return this._monthsStrictRegex;\n } else {\n return this._monthsRegex;\n }\n } else {\n if (!hasOwnProp(this, '_monthsRegex')) {\n this._monthsRegex = defaultMonthsRegex;\n }\n return this._monthsStrictRegex && isStrict\n ? this._monthsStrictRegex\n : this._monthsRegex;\n }\n }\n\n function computeMonthsParse() {\n function cmpLenRev(a, b) {\n return b.length - a.length;\n }\n\n var shortPieces = [],\n longPieces = [],\n mixedPieces = [],\n i,\n mom,\n shortP,\n longP;\n for (i = 0; i < 12; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, i]);\n shortP = regexEscape(this.monthsShort(mom, ''));\n longP = regexEscape(this.months(mom, ''));\n shortPieces.push(shortP);\n longPieces.push(longP);\n mixedPieces.push(longP);\n mixedPieces.push(shortP);\n }\n // Sorting makes sure if one month (or abbr) is a prefix of another it\n // will match the longer piece.\n shortPieces.sort(cmpLenRev);\n longPieces.sort(cmpLenRev);\n mixedPieces.sort(cmpLenRev);\n\n this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._monthsShortRegex = this._monthsRegex;\n this._monthsStrictRegex = new RegExp(\n '^(' + longPieces.join('|') + ')',\n 'i'\n );\n this._monthsShortStrictRegex = new RegExp(\n '^(' + shortPieces.join('|') + ')',\n 'i'\n );\n }\n\n function createDate(y, m, d, h, M, s, ms) {\n // can't just apply() to create a date:\n // https://stackoverflow.com/q/181348\n var date;\n // the date constructor remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n date = new Date(y + 400, m, d, h, M, s, ms);\n if (isFinite(date.getFullYear())) {\n date.setFullYear(y);\n }\n } else {\n date = new Date(y, m, d, h, M, s, ms);\n }\n\n return date;\n }\n\n function createUTCDate(y) {\n var date, args;\n // the Date.UTC function remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n args = Array.prototype.slice.call(arguments);\n // preserve leap years using a full 400 year cycle, then reset\n args[0] = y + 400;\n date = new Date(Date.UTC.apply(null, args));\n if (isFinite(date.getUTCFullYear())) {\n date.setUTCFullYear(y);\n }\n } else {\n date = new Date(Date.UTC.apply(null, arguments));\n }\n\n return date;\n }\n\n // start-of-first-week - start-of-year\n function firstWeekOffset(year, dow, doy) {\n var // first-week day -- which january is always in the first week (4 for iso, 1 for other)\n fwd = 7 + dow - doy,\n // first-week day local weekday -- which local weekday is fwd\n fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;\n\n return -fwdlw + fwd - 1;\n }\n\n // https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday\n function dayOfYearFromWeeks(year, week, weekday, dow, doy) {\n var localWeekday = (7 + weekday - dow) % 7,\n weekOffset = firstWeekOffset(year, dow, doy),\n dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,\n resYear,\n resDayOfYear;\n\n if (dayOfYear <= 0) {\n resYear = year - 1;\n resDayOfYear = daysInYear(resYear) + dayOfYear;\n } else if (dayOfYear > daysInYear(year)) {\n resYear = year + 1;\n resDayOfYear = dayOfYear - daysInYear(year);\n } else {\n resYear = year;\n resDayOfYear = dayOfYear;\n }\n\n return {\n year: resYear,\n dayOfYear: resDayOfYear,\n };\n }\n\n function weekOfYear(mom, dow, doy) {\n var weekOffset = firstWeekOffset(mom.year(), dow, doy),\n week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,\n resWeek,\n resYear;\n\n if (week < 1) {\n resYear = mom.year() - 1;\n resWeek = week + weeksInYear(resYear, dow, doy);\n } else if (week > weeksInYear(mom.year(), dow, doy)) {\n resWeek = week - weeksInYear(mom.year(), dow, doy);\n resYear = mom.year() + 1;\n } else {\n resYear = mom.year();\n resWeek = week;\n }\n\n return {\n week: resWeek,\n year: resYear,\n };\n }\n\n function weeksInYear(year, dow, doy) {\n var weekOffset = firstWeekOffset(year, dow, doy),\n weekOffsetNext = firstWeekOffset(year + 1, dow, doy);\n return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;\n }\n\n // FORMATTING\n\n addFormatToken('w', ['ww', 2], 'wo', 'week');\n addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');\n\n // PARSING\n\n addRegexToken('w', match1to2, match1to2NoLeadingZero);\n addRegexToken('ww', match1to2, match2);\n addRegexToken('W', match1to2, match1to2NoLeadingZero);\n addRegexToken('WW', match1to2, match2);\n\n addWeekParseToken(\n ['w', 'ww', 'W', 'WW'],\n function (input, week, config, token) {\n week[token.substr(0, 1)] = toInt(input);\n }\n );\n\n // HELPERS\n\n // LOCALES\n\n function localeWeek(mom) {\n return weekOfYear(mom, this._week.dow, this._week.doy).week;\n }\n\n var defaultLocaleWeek = {\n dow: 0, // Sunday is the first day of the week.\n doy: 6, // The week that contains Jan 6th is the first week of the year.\n };\n\n function localeFirstDayOfWeek() {\n return this._week.dow;\n }\n\n function localeFirstDayOfYear() {\n return this._week.doy;\n }\n\n // MOMENTS\n\n function getSetWeek(input) {\n var week = this.localeData().week(this);\n return input == null ? week : this.add((input - week) * 7, 'd');\n }\n\n function getSetISOWeek(input) {\n var week = weekOfYear(this, 1, 4).week;\n return input == null ? week : this.add((input - week) * 7, 'd');\n }\n\n // FORMATTING\n\n addFormatToken('d', 0, 'do', 'day');\n\n addFormatToken('dd', 0, 0, function (format) {\n return this.localeData().weekdaysMin(this, format);\n });\n\n addFormatToken('ddd', 0, 0, function (format) {\n return this.localeData().weekdaysShort(this, format);\n });\n\n addFormatToken('dddd', 0, 0, function (format) {\n return this.localeData().weekdays(this, format);\n });\n\n addFormatToken('e', 0, 0, 'weekday');\n addFormatToken('E', 0, 0, 'isoWeekday');\n\n // PARSING\n\n addRegexToken('d', match1to2);\n addRegexToken('e', match1to2);\n addRegexToken('E', match1to2);\n addRegexToken('dd', function (isStrict, locale) {\n return locale.weekdaysMinRegex(isStrict);\n });\n addRegexToken('ddd', function (isStrict, locale) {\n return locale.weekdaysShortRegex(isStrict);\n });\n addRegexToken('dddd', function (isStrict, locale) {\n return locale.weekdaysRegex(isStrict);\n });\n\n addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {\n var weekday = config._locale.weekdaysParse(input, token, config._strict);\n // if we didn't get a weekday name, mark the date as invalid\n if (weekday != null) {\n week.d = weekday;\n } else {\n getParsingFlags(config).invalidWeekday = input;\n }\n });\n\n addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {\n week[token] = toInt(input);\n });\n\n // HELPERS\n\n function parseWeekday(input, locale) {\n if (typeof input !== 'string') {\n return input;\n }\n\n if (!isNaN(input)) {\n return parseInt(input, 10);\n }\n\n input = locale.weekdaysParse(input);\n if (typeof input === 'number') {\n return input;\n }\n\n return null;\n }\n\n function parseIsoWeekday(input, locale) {\n if (typeof input === 'string') {\n return locale.weekdaysParse(input) % 7 || 7;\n }\n return isNaN(input) ? null : input;\n }\n\n // LOCALES\n function shiftWeekdays(ws, n) {\n return ws.slice(n, 7).concat(ws.slice(0, n));\n }\n\n var defaultLocaleWeekdays =\n 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n defaultWeekdaysRegex = matchWord,\n defaultWeekdaysShortRegex = matchWord,\n defaultWeekdaysMinRegex = matchWord;\n\n function localeWeekdays(m, format) {\n var weekdays = isArray(this._weekdays)\n ? this._weekdays\n : this._weekdays[\n m && m !== true && this._weekdays.isFormat.test(format)\n ? 'format'\n : 'standalone'\n ];\n return m === true\n ? shiftWeekdays(weekdays, this._week.dow)\n : m\n ? weekdays[m.day()]\n : weekdays;\n }\n\n function localeWeekdaysShort(m) {\n return m === true\n ? shiftWeekdays(this._weekdaysShort, this._week.dow)\n : m\n ? this._weekdaysShort[m.day()]\n : this._weekdaysShort;\n }\n\n function localeWeekdaysMin(m) {\n return m === true\n ? shiftWeekdays(this._weekdaysMin, this._week.dow)\n : m\n ? this._weekdaysMin[m.day()]\n : this._weekdaysMin;\n }\n\n function handleStrictParse$1(weekdayName, format, strict) {\n var i,\n ii,\n mom,\n llc = weekdayName.toLocaleLowerCase();\n if (!this._weekdaysParse) {\n this._weekdaysParse = [];\n this._shortWeekdaysParse = [];\n this._minWeekdaysParse = [];\n\n for (i = 0; i < 7; ++i) {\n mom = createUTC([2000, 1]).day(i);\n this._minWeekdaysParse[i] = this.weekdaysMin(\n mom,\n ''\n ).toLocaleLowerCase();\n this._shortWeekdaysParse[i] = this.weekdaysShort(\n mom,\n ''\n ).toLocaleLowerCase();\n this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();\n }\n }\n\n if (strict) {\n if (format === 'dddd') {\n ii = indexOf.call(this._weekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else if (format === 'ddd') {\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n }\n } else {\n if (format === 'dddd') {\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else if (format === 'ddd') {\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._minWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n }\n }\n }\n\n function localeWeekdaysParse(weekdayName, format, strict) {\n var i, mom, regex;\n\n if (this._weekdaysParseExact) {\n return handleStrictParse$1.call(this, weekdayName, format, strict);\n }\n\n if (!this._weekdaysParse) {\n this._weekdaysParse = [];\n this._minWeekdaysParse = [];\n this._shortWeekdaysParse = [];\n this._fullWeekdaysParse = [];\n }\n\n for (i = 0; i < 7; i++) {\n // make the regex if we don't have it already\n\n mom = createUTC([2000, 1]).day(i);\n if (strict && !this._fullWeekdaysParse[i]) {\n this._fullWeekdaysParse[i] = new RegExp(\n '^' + this.weekdays(mom, '').replace('.', '\\\\.?') + '$',\n 'i'\n );\n this._shortWeekdaysParse[i] = new RegExp(\n '^' + this.weekdaysShort(mom, '').replace('.', '\\\\.?') + '$',\n 'i'\n );\n this._minWeekdaysParse[i] = new RegExp(\n '^' + this.weekdaysMin(mom, '').replace('.', '\\\\.?') + '$',\n 'i'\n );\n }\n if (!this._weekdaysParse[i]) {\n regex =\n '^' +\n this.weekdays(mom, '') +\n '|^' +\n this.weekdaysShort(mom, '') +\n '|^' +\n this.weekdaysMin(mom, '');\n this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');\n }\n // test the regex\n if (\n strict &&\n format === 'dddd' &&\n this._fullWeekdaysParse[i].test(weekdayName)\n ) {\n return i;\n } else if (\n strict &&\n format === 'ddd' &&\n this._shortWeekdaysParse[i].test(weekdayName)\n ) {\n return i;\n } else if (\n strict &&\n format === 'dd' &&\n this._minWeekdaysParse[i].test(weekdayName)\n ) {\n return i;\n } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {\n return i;\n }\n }\n }\n\n // MOMENTS\n\n function getSetDayOfWeek(input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n\n var day = get(this, 'Day');\n if (input != null) {\n input = parseWeekday(input, this.localeData());\n return this.add(input - day, 'd');\n } else {\n return day;\n }\n }\n\n function getSetLocaleDayOfWeek(input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;\n return input == null ? weekday : this.add(input - weekday, 'd');\n }\n\n function getSetISODayOfWeek(input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n\n // behaves the same as moment#day except\n // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)\n // as a setter, sunday should belong to the previous week.\n\n if (input != null) {\n var weekday = parseIsoWeekday(input, this.localeData());\n return this.day(this.day() % 7 ? weekday : weekday - 7);\n } else {\n return this.day() || 7;\n }\n }\n\n function weekdaysRegex(isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysStrictRegex;\n } else {\n return this._weekdaysRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n this._weekdaysRegex = defaultWeekdaysRegex;\n }\n return this._weekdaysStrictRegex && isStrict\n ? this._weekdaysStrictRegex\n : this._weekdaysRegex;\n }\n }\n\n function weekdaysShortRegex(isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysShortStrictRegex;\n } else {\n return this._weekdaysShortRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysShortRegex')) {\n this._weekdaysShortRegex = defaultWeekdaysShortRegex;\n }\n return this._weekdaysShortStrictRegex && isStrict\n ? this._weekdaysShortStrictRegex\n : this._weekdaysShortRegex;\n }\n }\n\n function weekdaysMinRegex(isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysMinStrictRegex;\n } else {\n return this._weekdaysMinRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysMinRegex')) {\n this._weekdaysMinRegex = defaultWeekdaysMinRegex;\n }\n return this._weekdaysMinStrictRegex && isStrict\n ? this._weekdaysMinStrictRegex\n : this._weekdaysMinRegex;\n }\n }\n\n function computeWeekdaysParse() {\n function cmpLenRev(a, b) {\n return b.length - a.length;\n }\n\n var minPieces = [],\n shortPieces = [],\n longPieces = [],\n mixedPieces = [],\n i,\n mom,\n minp,\n shortp,\n longp;\n for (i = 0; i < 7; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, 1]).day(i);\n minp = regexEscape(this.weekdaysMin(mom, ''));\n shortp = regexEscape(this.weekdaysShort(mom, ''));\n longp = regexEscape(this.weekdays(mom, ''));\n minPieces.push(minp);\n shortPieces.push(shortp);\n longPieces.push(longp);\n mixedPieces.push(minp);\n mixedPieces.push(shortp);\n mixedPieces.push(longp);\n }\n // Sorting makes sure if one weekday (or abbr) is a prefix of another it\n // will match the longer piece.\n minPieces.sort(cmpLenRev);\n shortPieces.sort(cmpLenRev);\n longPieces.sort(cmpLenRev);\n mixedPieces.sort(cmpLenRev);\n\n this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._weekdaysShortRegex = this._weekdaysRegex;\n this._weekdaysMinRegex = this._weekdaysRegex;\n\n this._weekdaysStrictRegex = new RegExp(\n '^(' + longPieces.join('|') + ')',\n 'i'\n );\n this._weekdaysShortStrictRegex = new RegExp(\n '^(' + shortPieces.join('|') + ')',\n 'i'\n );\n this._weekdaysMinStrictRegex = new RegExp(\n '^(' + minPieces.join('|') + ')',\n 'i'\n );\n }\n\n // FORMATTING\n\n function hFormat() {\n return this.hours() % 12 || 12;\n }\n\n function kFormat() {\n return this.hours() || 24;\n }\n\n addFormatToken('H', ['HH', 2], 0, 'hour');\n addFormatToken('h', ['hh', 2], 0, hFormat);\n addFormatToken('k', ['kk', 2], 0, kFormat);\n\n addFormatToken('hmm', 0, 0, function () {\n return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);\n });\n\n addFormatToken('hmmss', 0, 0, function () {\n return (\n '' +\n hFormat.apply(this) +\n zeroFill(this.minutes(), 2) +\n zeroFill(this.seconds(), 2)\n );\n });\n\n addFormatToken('Hmm', 0, 0, function () {\n return '' + this.hours() + zeroFill(this.minutes(), 2);\n });\n\n addFormatToken('Hmmss', 0, 0, function () {\n return (\n '' +\n this.hours() +\n zeroFill(this.minutes(), 2) +\n zeroFill(this.seconds(), 2)\n );\n });\n\n function meridiem(token, lowercase) {\n addFormatToken(token, 0, 0, function () {\n return this.localeData().meridiem(\n this.hours(),\n this.minutes(),\n lowercase\n );\n });\n }\n\n meridiem('a', true);\n meridiem('A', false);\n\n // PARSING\n\n function matchMeridiem(isStrict, locale) {\n return locale._meridiemParse;\n }\n\n addRegexToken('a', matchMeridiem);\n addRegexToken('A', matchMeridiem);\n addRegexToken('H', match1to2, match1to2HasZero);\n addRegexToken('h', match1to2, match1to2NoLeadingZero);\n addRegexToken('k', match1to2, match1to2NoLeadingZero);\n addRegexToken('HH', match1to2, match2);\n addRegexToken('hh', match1to2, match2);\n addRegexToken('kk', match1to2, match2);\n\n addRegexToken('hmm', match3to4);\n addRegexToken('hmmss', match5to6);\n addRegexToken('Hmm', match3to4);\n addRegexToken('Hmmss', match5to6);\n\n addParseToken(['H', 'HH'], HOUR);\n addParseToken(['k', 'kk'], function (input, array, config) {\n var kInput = toInt(input);\n array[HOUR] = kInput === 24 ? 0 : kInput;\n });\n addParseToken(['a', 'A'], function (input, array, config) {\n config._isPm = config._locale.isPM(input);\n config._meridiem = input;\n });\n addParseToken(['h', 'hh'], function (input, array, config) {\n array[HOUR] = toInt(input);\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('hmm', function (input, array, config) {\n var pos = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos));\n array[MINUTE] = toInt(input.substr(pos));\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('hmmss', function (input, array, config) {\n var pos1 = input.length - 4,\n pos2 = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos1));\n array[MINUTE] = toInt(input.substr(pos1, 2));\n array[SECOND] = toInt(input.substr(pos2));\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('Hmm', function (input, array, config) {\n var pos = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos));\n array[MINUTE] = toInt(input.substr(pos));\n });\n addParseToken('Hmmss', function (input, array, config) {\n var pos1 = input.length - 4,\n pos2 = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos1));\n array[MINUTE] = toInt(input.substr(pos1, 2));\n array[SECOND] = toInt(input.substr(pos2));\n });\n\n // LOCALES\n\n function localeIsPM(input) {\n // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays\n // Using charAt should be more compatible.\n return (input + '').toLowerCase().charAt(0) === 'p';\n }\n\n var defaultLocaleMeridiemParse = /[ap]\\.?m?\\.?/i,\n // Setting the hour should keep the time, because the user explicitly\n // specified which hour they want. So trying to maintain the same hour (in\n // a new timezone) makes sense. Adding/subtracting hours does not follow\n // this rule.\n getSetHour = makeGetSet('Hours', true);\n\n function localeMeridiem(hours, minutes, isLower) {\n if (hours > 11) {\n return isLower ? 'pm' : 'PM';\n } else {\n return isLower ? 'am' : 'AM';\n }\n }\n\n var baseConfig = {\n calendar: defaultCalendar,\n longDateFormat: defaultLongDateFormat,\n invalidDate: defaultInvalidDate,\n ordinal: defaultOrdinal,\n dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,\n relativeTime: defaultRelativeTime,\n\n months: defaultLocaleMonths,\n monthsShort: defaultLocaleMonthsShort,\n\n week: defaultLocaleWeek,\n\n weekdays: defaultLocaleWeekdays,\n weekdaysMin: defaultLocaleWeekdaysMin,\n weekdaysShort: defaultLocaleWeekdaysShort,\n\n meridiemParse: defaultLocaleMeridiemParse,\n };\n\n // internal storage for locale config files\n var locales = {},\n localeFamilies = {},\n globalLocale;\n\n function commonPrefix(arr1, arr2) {\n var i,\n minl = Math.min(arr1.length, arr2.length);\n for (i = 0; i < minl; i += 1) {\n if (arr1[i] !== arr2[i]) {\n return i;\n }\n }\n return minl;\n }\n\n function normalizeLocale(key) {\n return key ? key.toLowerCase().replace('_', '-') : key;\n }\n\n // pick the locale from the array\n // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each\n // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root\n function chooseLocale(names) {\n var i = 0,\n j,\n next,\n locale,\n split;\n\n while (i < names.length) {\n split = normalizeLocale(names[i]).split('-');\n j = split.length;\n next = normalizeLocale(names[i + 1]);\n next = next ? next.split('-') : null;\n while (j > 0) {\n locale = loadLocale(split.slice(0, j).join('-'));\n if (locale) {\n return locale;\n }\n if (\n next &&\n next.length >= j &&\n commonPrefix(split, next) >= j - 1\n ) {\n //the next array item is better than a shallower substring of this one\n break;\n }\n j--;\n }\n i++;\n }\n return globalLocale;\n }\n\n function isLocaleNameSane(name) {\n // Prevent names that look like filesystem paths, i.e contain '/' or '\\'\n // Ensure name is available and function returns boolean\n return !!(name && name.match('^[^/\\\\\\\\]*$'));\n }\n\n function loadLocale(name) {\n var oldLocale = null,\n aliasedRequire;\n // TODO: Find a better way to register and load all the locales in Node\n if (\n locales[name] === undefined &&\n typeof module !== 'undefined' &&\n module &&\n module.exports &&\n isLocaleNameSane(name)\n ) {\n try {\n oldLocale = globalLocale._abbr;\n aliasedRequire = require;\n aliasedRequire('./locale/' + name);\n getSetGlobalLocale(oldLocale);\n } catch (e) {\n // mark as not found to avoid repeating expensive file require call causing high CPU\n // when trying to find en-US, en_US, en-us for every format call\n locales[name] = null; // null means not found\n }\n }\n return locales[name];\n }\n\n // This function will load locale and then set the global locale. If\n // no arguments are passed in, it will simply return the current global\n // locale key.\n function getSetGlobalLocale(key, values) {\n var data;\n if (key) {\n if (isUndefined(values)) {\n data = getLocale(key);\n } else {\n data = defineLocale(key, values);\n }\n\n if (data) {\n // moment.duration._locale = moment._locale = data;\n globalLocale = data;\n } else {\n if (typeof console !== 'undefined' && console.warn) {\n //warn user if arguments are passed but the locale could not be set\n console.warn(\n 'Locale ' + key + ' not found. Did you forget to load it?'\n );\n }\n }\n }\n\n return globalLocale._abbr;\n }\n\n function defineLocale(name, config) {\n if (config !== null) {\n var locale,\n parentConfig = baseConfig;\n config.abbr = name;\n if (locales[name] != null) {\n deprecateSimple(\n 'defineLocaleOverride',\n 'use moment.updateLocale(localeName, config) to change ' +\n 'an existing locale. moment.defineLocale(localeName, ' +\n 'config) should only be used for creating a new locale ' +\n 'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.'\n );\n parentConfig = locales[name]._config;\n } else if (config.parentLocale != null) {\n if (locales[config.parentLocale] != null) {\n parentConfig = locales[config.parentLocale]._config;\n } else {\n locale = loadLocale(config.parentLocale);\n if (locale != null) {\n parentConfig = locale._config;\n } else {\n if (!localeFamilies[config.parentLocale]) {\n localeFamilies[config.parentLocale] = [];\n }\n localeFamilies[config.parentLocale].push({\n name: name,\n config: config,\n });\n return null;\n }\n }\n }\n locales[name] = new Locale(mergeConfigs(parentConfig, config));\n\n if (localeFamilies[name]) {\n localeFamilies[name].forEach(function (x) {\n defineLocale(x.name, x.config);\n });\n }\n\n // backwards compat for now: also set the locale\n // make sure we set the locale AFTER all child locales have been\n // created, so we won't end up with the child locale set.\n getSetGlobalLocale(name);\n\n return locales[name];\n } else {\n // useful for testing\n delete locales[name];\n return null;\n }\n }\n\n function updateLocale(name, config) {\n if (config != null) {\n var locale,\n tmpLocale,\n parentConfig = baseConfig;\n\n if (locales[name] != null && locales[name].parentLocale != null) {\n // Update existing child locale in-place to avoid memory-leaks\n locales[name].set(mergeConfigs(locales[name]._config, config));\n } else {\n // MERGE\n tmpLocale = loadLocale(name);\n if (tmpLocale != null) {\n parentConfig = tmpLocale._config;\n }\n config = mergeConfigs(parentConfig, config);\n if (tmpLocale == null) {\n // updateLocale is called for creating a new locale\n // Set abbr so it will have a name (getters return\n // undefined otherwise).\n config.abbr = name;\n }\n locale = new Locale(config);\n locale.parentLocale = locales[name];\n locales[name] = locale;\n }\n\n // backwards compat for now: also set the locale\n getSetGlobalLocale(name);\n } else {\n // pass null for config to unupdate, useful for tests\n if (locales[name] != null) {\n if (locales[name].parentLocale != null) {\n locales[name] = locales[name].parentLocale;\n if (name === getSetGlobalLocale()) {\n getSetGlobalLocale(name);\n }\n } else if (locales[name] != null) {\n delete locales[name];\n }\n }\n }\n return locales[name];\n }\n\n // returns locale data\n function getLocale(key) {\n var locale;\n\n if (key && key._locale && key._locale._abbr) {\n key = key._locale._abbr;\n }\n\n if (!key) {\n return globalLocale;\n }\n\n if (!isArray(key)) {\n //short-circuit everything else\n locale = loadLocale(key);\n if (locale) {\n return locale;\n }\n key = [key];\n }\n\n return chooseLocale(key);\n }\n\n function listLocales() {\n return keys(locales);\n }\n\n function checkOverflow(m) {\n var overflow,\n a = m._a;\n\n if (a && getParsingFlags(m).overflow === -2) {\n overflow =\n a[MONTH] < 0 || a[MONTH] > 11\n ? MONTH\n : a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH])\n ? DATE\n : a[HOUR] < 0 ||\n a[HOUR] > 24 ||\n (a[HOUR] === 24 &&\n (a[MINUTE] !== 0 ||\n a[SECOND] !== 0 ||\n a[MILLISECOND] !== 0))\n ? HOUR\n : a[MINUTE] < 0 || a[MINUTE] > 59\n ? MINUTE\n : a[SECOND] < 0 || a[SECOND] > 59\n ? SECOND\n : a[MILLISECOND] < 0 || a[MILLISECOND] > 999\n ? MILLISECOND\n : -1;\n\n if (\n getParsingFlags(m)._overflowDayOfYear &&\n (overflow < YEAR || overflow > DATE)\n ) {\n overflow = DATE;\n }\n if (getParsingFlags(m)._overflowWeeks && overflow === -1) {\n overflow = WEEK;\n }\n if (getParsingFlags(m)._overflowWeekday && overflow === -1) {\n overflow = WEEKDAY;\n }\n\n getParsingFlags(m).overflow = overflow;\n }\n\n return m;\n }\n\n // iso 8601 regex\n // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)\n var extendedIsoRegex =\n /^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,\n basicIsoRegex =\n /^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d|))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,\n tzRegex = /Z|[+-]\\d\\d(?::?\\d\\d)?/,\n isoDates = [\n ['YYYYYY-MM-DD', /[+-]\\d{6}-\\d\\d-\\d\\d/],\n ['YYYY-MM-DD', /\\d{4}-\\d\\d-\\d\\d/],\n ['GGGG-[W]WW-E', /\\d{4}-W\\d\\d-\\d/],\n ['GGGG-[W]WW', /\\d{4}-W\\d\\d/, false],\n ['YYYY-DDD', /\\d{4}-\\d{3}/],\n ['YYYY-MM', /\\d{4}-\\d\\d/, false],\n ['YYYYYYMMDD', /[+-]\\d{10}/],\n ['YYYYMMDD', /\\d{8}/],\n ['GGGG[W]WWE', /\\d{4}W\\d{3}/],\n ['GGGG[W]WW', /\\d{4}W\\d{2}/, false],\n ['YYYYDDD', /\\d{7}/],\n ['YYYYMM', /\\d{6}/, false],\n ['YYYY', /\\d{4}/, false],\n ],\n // iso time formats and regexes\n isoTimes = [\n ['HH:mm:ss.SSSS', /\\d\\d:\\d\\d:\\d\\d\\.\\d+/],\n ['HH:mm:ss,SSSS', /\\d\\d:\\d\\d:\\d\\d,\\d+/],\n ['HH:mm:ss', /\\d\\d:\\d\\d:\\d\\d/],\n ['HH:mm', /\\d\\d:\\d\\d/],\n ['HHmmss.SSSS', /\\d\\d\\d\\d\\d\\d\\.\\d+/],\n ['HHmmss,SSSS', /\\d\\d\\d\\d\\d\\d,\\d+/],\n ['HHmmss', /\\d\\d\\d\\d\\d\\d/],\n ['HHmm', /\\d\\d\\d\\d/],\n ['HH', /\\d\\d/],\n ],\n aspNetJsonRegex = /^\\/?Date\\((-?\\d+)/i,\n // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3\n rfc2822 =\n /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\\d{4}))$/,\n obsOffsets = {\n UT: 0,\n GMT: 0,\n EDT: -4 * 60,\n EST: -5 * 60,\n CDT: -5 * 60,\n CST: -6 * 60,\n MDT: -6 * 60,\n MST: -7 * 60,\n PDT: -7 * 60,\n PST: -8 * 60,\n };\n\n // date from iso format\n function configFromISO(config) {\n var i,\n l,\n string = config._i,\n match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),\n allowTime,\n dateFormat,\n timeFormat,\n tzFormat,\n isoDatesLen = isoDates.length,\n isoTimesLen = isoTimes.length;\n\n if (match) {\n getParsingFlags(config).iso = true;\n for (i = 0, l = isoDatesLen; i < l; i++) {\n if (isoDates[i][1].exec(match[1])) {\n dateFormat = isoDates[i][0];\n allowTime = isoDates[i][2] !== false;\n break;\n }\n }\n if (dateFormat == null) {\n config._isValid = false;\n return;\n }\n if (match[3]) {\n for (i = 0, l = isoTimesLen; i < l; i++) {\n if (isoTimes[i][1].exec(match[3])) {\n // match[2] should be 'T' or space\n timeFormat = (match[2] || ' ') + isoTimes[i][0];\n break;\n }\n }\n if (timeFormat == null) {\n config._isValid = false;\n return;\n }\n }\n if (!allowTime && timeFormat != null) {\n config._isValid = false;\n return;\n }\n if (match[4]) {\n if (tzRegex.exec(match[4])) {\n tzFormat = 'Z';\n } else {\n config._isValid = false;\n return;\n }\n }\n config._f = dateFormat + (timeFormat || '') + (tzFormat || '');\n configFromStringAndFormat(config);\n } else {\n config._isValid = false;\n }\n }\n\n function extractFromRFC2822Strings(\n yearStr,\n monthStr,\n dayStr,\n hourStr,\n minuteStr,\n secondStr\n ) {\n var result = [\n untruncateYear(yearStr),\n defaultLocaleMonthsShort.indexOf(monthStr),\n parseInt(dayStr, 10),\n parseInt(hourStr, 10),\n parseInt(minuteStr, 10),\n ];\n\n if (secondStr) {\n result.push(parseInt(secondStr, 10));\n }\n\n return result;\n }\n\n function untruncateYear(yearStr) {\n var year = parseInt(yearStr, 10);\n if (year <= 49) {\n return 2000 + year;\n } else if (year <= 999) {\n return 1900 + year;\n }\n return year;\n }\n\n function preprocessRFC2822(s) {\n // Remove comments and folding whitespace and replace multiple-spaces with a single space\n return s\n .replace(/\\([^()]*\\)|[\\n\\t]/g, ' ')\n .replace(/(\\s\\s+)/g, ' ')\n .replace(/^\\s\\s*/, '')\n .replace(/\\s\\s*$/, '');\n }\n\n function checkWeekday(weekdayStr, parsedInput, config) {\n if (weekdayStr) {\n // TODO: Replace the vanilla JS Date object with an independent day-of-week check.\n var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),\n weekdayActual = new Date(\n parsedInput[0],\n parsedInput[1],\n parsedInput[2]\n ).getDay();\n if (weekdayProvided !== weekdayActual) {\n getParsingFlags(config).weekdayMismatch = true;\n config._isValid = false;\n return false;\n }\n }\n return true;\n }\n\n function calculateOffset(obsOffset, militaryOffset, numOffset) {\n if (obsOffset) {\n return obsOffsets[obsOffset];\n } else if (militaryOffset) {\n // the only allowed military tz is Z\n return 0;\n } else {\n var hm = parseInt(numOffset, 10),\n m = hm % 100,\n h = (hm - m) / 100;\n return h * 60 + m;\n }\n }\n\n // date and time from ref 2822 format\n function configFromRFC2822(config) {\n var match = rfc2822.exec(preprocessRFC2822(config._i)),\n parsedArray;\n if (match) {\n parsedArray = extractFromRFC2822Strings(\n match[4],\n match[3],\n match[2],\n match[5],\n match[6],\n match[7]\n );\n if (!checkWeekday(match[1], parsedArray, config)) {\n return;\n }\n\n config._a = parsedArray;\n config._tzm = calculateOffset(match[8], match[9], match[10]);\n\n config._d = createUTCDate.apply(null, config._a);\n config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n\n getParsingFlags(config).rfc2822 = true;\n } else {\n config._isValid = false;\n }\n }\n\n // date from 1) ASP.NET, 2) ISO, 3) RFC 2822 formats, or 4) optional fallback if parsing isn't strict\n function configFromString(config) {\n var matched = aspNetJsonRegex.exec(config._i);\n if (matched !== null) {\n config._d = new Date(+matched[1]);\n return;\n }\n\n configFromISO(config);\n if (config._isValid === false) {\n delete config._isValid;\n } else {\n return;\n }\n\n configFromRFC2822(config);\n if (config._isValid === false) {\n delete config._isValid;\n } else {\n return;\n }\n\n if (config._strict) {\n config._isValid = false;\n } else {\n // Final attempt, use Input Fallback\n hooks.createFromInputFallback(config);\n }\n }\n\n hooks.createFromInputFallback = deprecate(\n 'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' +\n 'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' +\n 'discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.',\n function (config) {\n config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));\n }\n );\n\n // Pick the first defined of two or three arguments.\n function defaults(a, b, c) {\n if (a != null) {\n return a;\n }\n if (b != null) {\n return b;\n }\n return c;\n }\n\n function currentDateArray(config) {\n // hooks is actually the exported moment object\n var nowValue = new Date(hooks.now());\n if (config._useUTC) {\n return [\n nowValue.getUTCFullYear(),\n nowValue.getUTCMonth(),\n nowValue.getUTCDate(),\n ];\n }\n return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];\n }\n\n // convert an array to a date.\n // the array should mirror the parameters below\n // note: all values past the year are optional and will default to the lowest possible value.\n // [year, month, day , hour, minute, second, millisecond]\n function configFromArray(config) {\n var i,\n date,\n input = [],\n currentDate,\n expectedWeekday,\n yearToUse;\n\n if (config._d) {\n return;\n }\n\n currentDate = currentDateArray(config);\n\n //compute day of the year from weeks and weekdays\n if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {\n dayOfYearFromWeekInfo(config);\n }\n\n //if the day of the year is set, figure out what it is\n if (config._dayOfYear != null) {\n yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);\n\n if (\n config._dayOfYear > daysInYear(yearToUse) ||\n config._dayOfYear === 0\n ) {\n getParsingFlags(config)._overflowDayOfYear = true;\n }\n\n date = createUTCDate(yearToUse, 0, config._dayOfYear);\n config._a[MONTH] = date.getUTCMonth();\n config._a[DATE] = date.getUTCDate();\n }\n\n // Default to current date.\n // * if no year, month, day of month are given, default to today\n // * if day of month is given, default month and year\n // * if month is given, default only year\n // * if year is given, don't default anything\n for (i = 0; i < 3 && config._a[i] == null; ++i) {\n config._a[i] = input[i] = currentDate[i];\n }\n\n // Zero out whatever was not defaulted, including time\n for (; i < 7; i++) {\n config._a[i] = input[i] =\n config._a[i] == null ? (i === 2 ? 1 : 0) : config._a[i];\n }\n\n // Check for 24:00:00.000\n if (\n config._a[HOUR] === 24 &&\n config._a[MINUTE] === 0 &&\n config._a[SECOND] === 0 &&\n config._a[MILLISECOND] === 0\n ) {\n config._nextDay = true;\n config._a[HOUR] = 0;\n }\n\n config._d = (config._useUTC ? createUTCDate : createDate).apply(\n null,\n input\n );\n expectedWeekday = config._useUTC\n ? config._d.getUTCDay()\n : config._d.getDay();\n\n // Apply timezone offset from input. The actual utcOffset can be changed\n // with parseZone.\n if (config._tzm != null) {\n config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n }\n\n if (config._nextDay) {\n config._a[HOUR] = 24;\n }\n\n // check for mismatching day of week\n if (\n config._w &&\n typeof config._w.d !== 'undefined' &&\n config._w.d !== expectedWeekday\n ) {\n getParsingFlags(config).weekdayMismatch = true;\n }\n }\n\n function dayOfYearFromWeekInfo(config) {\n var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow, curWeek;\n\n w = config._w;\n if (w.GG != null || w.W != null || w.E != null) {\n dow = 1;\n doy = 4;\n\n // TODO: We need to take the current isoWeekYear, but that depends on\n // how we interpret now (local, utc, fixed offset). So create\n // a now version of current config (take local/utc/offset flags, and\n // create now).\n weekYear = defaults(\n w.GG,\n config._a[YEAR],\n weekOfYear(createLocal(), 1, 4).year\n );\n week = defaults(w.W, 1);\n weekday = defaults(w.E, 1);\n if (weekday < 1 || weekday > 7) {\n weekdayOverflow = true;\n }\n } else {\n dow = config._locale._week.dow;\n doy = config._locale._week.doy;\n\n curWeek = weekOfYear(createLocal(), dow, doy);\n\n weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);\n\n // Default to current week.\n week = defaults(w.w, curWeek.week);\n\n if (w.d != null) {\n // weekday -- low day numbers are considered next week\n weekday = w.d;\n if (weekday < 0 || weekday > 6) {\n weekdayOverflow = true;\n }\n } else if (w.e != null) {\n // local weekday -- counting starts from beginning of week\n weekday = w.e + dow;\n if (w.e < 0 || w.e > 6) {\n weekdayOverflow = true;\n }\n } else {\n // default to beginning of week\n weekday = dow;\n }\n }\n if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {\n getParsingFlags(config)._overflowWeeks = true;\n } else if (weekdayOverflow != null) {\n getParsingFlags(config)._overflowWeekday = true;\n } else {\n temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);\n config._a[YEAR] = temp.year;\n config._dayOfYear = temp.dayOfYear;\n }\n }\n\n // constant that refers to the ISO standard\n hooks.ISO_8601 = function () {};\n\n // constant that refers to the RFC 2822 form\n hooks.RFC_2822 = function () {};\n\n // date from string and format string\n function configFromStringAndFormat(config) {\n // TODO: Move this to another part of the creation flow to prevent circular deps\n if (config._f === hooks.ISO_8601) {\n configFromISO(config);\n return;\n }\n if (config._f === hooks.RFC_2822) {\n configFromRFC2822(config);\n return;\n }\n config._a = [];\n getParsingFlags(config).empty = true;\n\n // This array is used to make a Date, either with `new Date` or `Date.UTC`\n var string = '' + config._i,\n i,\n parsedInput,\n tokens,\n token,\n skipped,\n stringLength = string.length,\n totalParsedInputLength = 0,\n era,\n tokenLen;\n\n tokens =\n expandFormat(config._f, config._locale).match(formattingTokens) || [];\n tokenLen = tokens.length;\n for (i = 0; i < tokenLen; i++) {\n token = tokens[i];\n parsedInput = (string.match(getParseRegexForToken(token, config)) ||\n [])[0];\n if (parsedInput) {\n skipped = string.substr(0, string.indexOf(parsedInput));\n if (skipped.length > 0) {\n getParsingFlags(config).unusedInput.push(skipped);\n }\n string = string.slice(\n string.indexOf(parsedInput) + parsedInput.length\n );\n totalParsedInputLength += parsedInput.length;\n }\n // don't parse if it's not a known token\n if (formatTokenFunctions[token]) {\n if (parsedInput) {\n getParsingFlags(config).empty = false;\n } else {\n getParsingFlags(config).unusedTokens.push(token);\n }\n addTimeToArrayFromToken(token, parsedInput, config);\n } else if (config._strict && !parsedInput) {\n getParsingFlags(config).unusedTokens.push(token);\n }\n }\n\n // add remaining unparsed input length to the string\n getParsingFlags(config).charsLeftOver =\n stringLength - totalParsedInputLength;\n if (string.length > 0) {\n getParsingFlags(config).unusedInput.push(string);\n }\n\n // clear _12h flag if hour is <= 12\n if (\n config._a[HOUR] <= 12 &&\n getParsingFlags(config).bigHour === true &&\n config._a[HOUR] > 0\n ) {\n getParsingFlags(config).bigHour = undefined;\n }\n\n getParsingFlags(config).parsedDateParts = config._a.slice(0);\n getParsingFlags(config).meridiem = config._meridiem;\n // handle meridiem\n config._a[HOUR] = meridiemFixWrap(\n config._locale,\n config._a[HOUR],\n config._meridiem\n );\n\n // handle era\n era = getParsingFlags(config).era;\n if (era !== null) {\n config._a[YEAR] = config._locale.erasConvertYear(era, config._a[YEAR]);\n }\n\n configFromArray(config);\n checkOverflow(config);\n }\n\n function meridiemFixWrap(locale, hour, meridiem) {\n var isPm;\n\n if (meridiem == null) {\n // nothing to do\n return hour;\n }\n if (locale.meridiemHour != null) {\n return locale.meridiemHour(hour, meridiem);\n } else if (locale.isPM != null) {\n // Fallback\n isPm = locale.isPM(meridiem);\n if (isPm && hour < 12) {\n hour += 12;\n }\n if (!isPm && hour === 12) {\n hour = 0;\n }\n return hour;\n } else {\n // this is not supposed to happen\n return hour;\n }\n }\n\n // date from string and array of format strings\n function configFromStringAndArray(config) {\n var tempConfig,\n bestMoment,\n scoreToBeat,\n i,\n currentScore,\n validFormatFound,\n bestFormatIsValid = false,\n configfLen = config._f.length;\n\n if (configfLen === 0) {\n getParsingFlags(config).invalidFormat = true;\n config._d = new Date(NaN);\n return;\n }\n\n for (i = 0; i < configfLen; i++) {\n currentScore = 0;\n validFormatFound = false;\n tempConfig = copyConfig({}, config);\n if (config._useUTC != null) {\n tempConfig._useUTC = config._useUTC;\n }\n tempConfig._f = config._f[i];\n configFromStringAndFormat(tempConfig);\n\n if (isValid(tempConfig)) {\n validFormatFound = true;\n }\n\n // if there is any input that was not parsed add a penalty for that format\n currentScore += getParsingFlags(tempConfig).charsLeftOver;\n\n //or tokens\n currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;\n\n getParsingFlags(tempConfig).score = currentScore;\n\n if (!bestFormatIsValid) {\n if (\n scoreToBeat == null ||\n currentScore < scoreToBeat ||\n validFormatFound\n ) {\n scoreToBeat = currentScore;\n bestMoment = tempConfig;\n if (validFormatFound) {\n bestFormatIsValid = true;\n }\n }\n } else {\n if (currentScore < scoreToBeat) {\n scoreToBeat = currentScore;\n bestMoment = tempConfig;\n }\n }\n }\n\n extend(config, bestMoment || tempConfig);\n }\n\n function configFromObject(config) {\n if (config._d) {\n return;\n }\n\n var i = normalizeObjectUnits(config._i),\n dayOrDate = i.day === undefined ? i.date : i.day;\n config._a = map(\n [i.year, i.month, dayOrDate, i.hour, i.minute, i.second, i.millisecond],\n function (obj) {\n return obj && parseInt(obj, 10);\n }\n );\n\n configFromArray(config);\n }\n\n function createFromConfig(config) {\n var res = new Moment(checkOverflow(prepareConfig(config)));\n if (res._nextDay) {\n // Adding is smart enough around DST\n res.add(1, 'd');\n res._nextDay = undefined;\n }\n\n return res;\n }\n\n function prepareConfig(config) {\n var input = config._i,\n format = config._f;\n\n config._locale = config._locale || getLocale(config._l);\n\n if (input === null || (format === undefined && input === '')) {\n return createInvalid({ nullInput: true });\n }\n\n if (typeof input === 'string') {\n config._i = input = config._locale.preparse(input);\n }\n\n if (isMoment(input)) {\n return new Moment(checkOverflow(input));\n } else if (isDate(input)) {\n config._d = input;\n } else if (isArray(format)) {\n configFromStringAndArray(config);\n } else if (format) {\n configFromStringAndFormat(config);\n } else {\n configFromInput(config);\n }\n\n if (!isValid(config)) {\n config._d = null;\n }\n\n return config;\n }\n\n function configFromInput(config) {\n var input = config._i;\n if (isUndefined(input)) {\n config._d = new Date(hooks.now());\n } else if (isDate(input)) {\n config._d = new Date(input.valueOf());\n } else if (typeof input === 'string') {\n configFromString(config);\n } else if (isArray(input)) {\n config._a = map(input.slice(0), function (obj) {\n return parseInt(obj, 10);\n });\n configFromArray(config);\n } else if (isObject(input)) {\n configFromObject(config);\n } else if (isNumber(input)) {\n // from milliseconds\n config._d = new Date(input);\n } else {\n hooks.createFromInputFallback(config);\n }\n }\n\n function createLocalOrUTC(input, format, locale, strict, isUTC) {\n var c = {};\n\n if (format === true || format === false) {\n strict = format;\n format = undefined;\n }\n\n if (locale === true || locale === false) {\n strict = locale;\n locale = undefined;\n }\n\n if (\n (isObject(input) && isObjectEmpty(input)) ||\n (isArray(input) && input.length === 0)\n ) {\n input = undefined;\n }\n // object construction must be done this way.\n // https://github.com/moment/moment/issues/1423\n c._isAMomentObject = true;\n c._useUTC = c._isUTC = isUTC;\n c._l = locale;\n c._i = input;\n c._f = format;\n c._strict = strict;\n\n return createFromConfig(c);\n }\n\n function createLocal(input, format, locale, strict) {\n return createLocalOrUTC(input, format, locale, strict, false);\n }\n\n var prototypeMin = deprecate(\n 'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',\n function () {\n var other = createLocal.apply(null, arguments);\n if (this.isValid() && other.isValid()) {\n return other < this ? this : other;\n } else {\n return createInvalid();\n }\n }\n ),\n prototypeMax = deprecate(\n 'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',\n function () {\n var other = createLocal.apply(null, arguments);\n if (this.isValid() && other.isValid()) {\n return other > this ? this : other;\n } else {\n return createInvalid();\n }\n }\n );\n\n // Pick a moment m from moments so that m[fn](other) is true for all\n // other. This relies on the function fn to be transitive.\n //\n // moments should either be an array of moment objects or an array, whose\n // first element is an array of moment objects.\n function pickBy(fn, moments) {\n var res, i;\n if (moments.length === 1 && isArray(moments[0])) {\n moments = moments[0];\n }\n if (!moments.length) {\n return createLocal();\n }\n res = moments[0];\n for (i = 1; i < moments.length; ++i) {\n if (!moments[i].isValid() || moments[i][fn](res)) {\n res = moments[i];\n }\n }\n return res;\n }\n\n // TODO: Use [].sort instead?\n function min() {\n var args = [].slice.call(arguments, 0);\n\n return pickBy('isBefore', args);\n }\n\n function max() {\n var args = [].slice.call(arguments, 0);\n\n return pickBy('isAfter', args);\n }\n\n var now = function () {\n return Date.now ? Date.now() : +new Date();\n };\n\n var ordering = [\n 'year',\n 'quarter',\n 'month',\n 'week',\n 'day',\n 'hour',\n 'minute',\n 'second',\n 'millisecond',\n ];\n\n function isDurationValid(m) {\n var key,\n unitHasDecimal = false,\n i,\n orderLen = ordering.length;\n for (key in m) {\n if (\n hasOwnProp(m, key) &&\n !(\n indexOf.call(ordering, key) !== -1 &&\n (m[key] == null || !isNaN(m[key]))\n )\n ) {\n return false;\n }\n }\n\n for (i = 0; i < orderLen; ++i) {\n if (m[ordering[i]]) {\n if (unitHasDecimal) {\n return false; // only allow non-integers for smallest unit\n }\n if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {\n unitHasDecimal = true;\n }\n }\n }\n\n return true;\n }\n\n function isValid$1() {\n return this._isValid;\n }\n\n function createInvalid$1() {\n return createDuration(NaN);\n }\n\n function Duration(duration) {\n var normalizedInput = normalizeObjectUnits(duration),\n years = normalizedInput.year || 0,\n quarters = normalizedInput.quarter || 0,\n months = normalizedInput.month || 0,\n weeks = normalizedInput.week || normalizedInput.isoWeek || 0,\n days = normalizedInput.day || 0,\n hours = normalizedInput.hour || 0,\n minutes = normalizedInput.minute || 0,\n seconds = normalizedInput.second || 0,\n milliseconds = normalizedInput.millisecond || 0;\n\n this._isValid = isDurationValid(normalizedInput);\n\n // representation for dateAddRemove\n this._milliseconds =\n +milliseconds +\n seconds * 1e3 + // 1000\n minutes * 6e4 + // 1000 * 60\n hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978\n // Because of dateAddRemove treats 24 hours as different from a\n // day when working around DST, we need to store them separately\n this._days = +days + weeks * 7;\n // It is impossible to translate months into days without knowing\n // which months you are are talking about, so we have to store\n // it separately.\n this._months = +months + quarters * 3 + years * 12;\n\n this._data = {};\n\n this._locale = getLocale();\n\n this._bubble();\n }\n\n function isDuration(obj) {\n return obj instanceof Duration;\n }\n\n function absRound(number) {\n if (number < 0) {\n return Math.round(-1 * number) * -1;\n } else {\n return Math.round(number);\n }\n }\n\n // compare two arrays, return the number of differences\n function compareArrays(array1, array2, dontConvert) {\n var len = Math.min(array1.length, array2.length),\n lengthDiff = Math.abs(array1.length - array2.length),\n diffs = 0,\n i;\n for (i = 0; i < len; i++) {\n if (\n (dontConvert && array1[i] !== array2[i]) ||\n (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))\n ) {\n diffs++;\n }\n }\n return diffs + lengthDiff;\n }\n\n // FORMATTING\n\n function offset(token, separator) {\n addFormatToken(token, 0, 0, function () {\n var offset = this.utcOffset(),\n sign = '+';\n if (offset < 0) {\n offset = -offset;\n sign = '-';\n }\n return (\n sign +\n zeroFill(~~(offset / 60), 2) +\n separator +\n zeroFill(~~offset % 60, 2)\n );\n });\n }\n\n offset('Z', ':');\n offset('ZZ', '');\n\n // PARSING\n\n addRegexToken('Z', matchShortOffset);\n addRegexToken('ZZ', matchShortOffset);\n addParseToken(['Z', 'ZZ'], function (input, array, config) {\n config._useUTC = true;\n config._tzm = offsetFromString(matchShortOffset, input);\n });\n\n // HELPERS\n\n // timezone chunker\n // '+10:00' > ['10', '00']\n // '-1530' > ['-15', '30']\n var chunkOffset = /([\\+\\-]|\\d\\d)/gi;\n\n function offsetFromString(matcher, string) {\n var matches = (string || '').match(matcher),\n chunk,\n parts,\n minutes;\n\n if (matches === null) {\n return null;\n }\n\n chunk = matches[matches.length - 1] || [];\n parts = (chunk + '').match(chunkOffset) || ['-', 0, 0];\n minutes = +(parts[1] * 60) + toInt(parts[2]);\n\n return minutes === 0 ? 0 : parts[0] === '+' ? minutes : -minutes;\n }\n\n // Return a moment from input, that is local/utc/zone equivalent to model.\n function cloneWithOffset(input, model) {\n var res, diff;\n if (model._isUTC) {\n res = model.clone();\n diff =\n (isMoment(input) || isDate(input)\n ? input.valueOf()\n : createLocal(input).valueOf()) - res.valueOf();\n // Use low-level api, because this fn is low-level api.\n res._d.setTime(res._d.valueOf() + diff);\n hooks.updateOffset(res, false);\n return res;\n } else {\n return createLocal(input).local();\n }\n }\n\n function getDateOffset(m) {\n // On Firefox.24 Date#getTimezoneOffset returns a floating point.\n // https://github.com/moment/moment/pull/1871\n return -Math.round(m._d.getTimezoneOffset());\n }\n\n // HOOKS\n\n // This function will be called whenever a moment is mutated.\n // It is intended to keep the offset in sync with the timezone.\n hooks.updateOffset = function () {};\n\n // MOMENTS\n\n // keepLocalTime = true means only change the timezone, without\n // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->\n // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset\n // +0200, so we adjust the time as needed, to be valid.\n //\n // Keeping the time actually adds/subtracts (one hour)\n // from the actual represented time. That is why we call updateOffset\n // a second time. In case it wants us to change the offset again\n // _changeInProgress == true case, then we have to adjust, because\n // there is no such time in the given timezone.\n function getSetOffset(input, keepLocalTime, keepMinutes) {\n var offset = this._offset || 0,\n localAdjust;\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n if (input != null) {\n if (typeof input === 'string') {\n input = offsetFromString(matchShortOffset, input);\n if (input === null) {\n return this;\n }\n } else if (Math.abs(input) < 16 && !keepMinutes) {\n input = input * 60;\n }\n if (!this._isUTC && keepLocalTime) {\n localAdjust = getDateOffset(this);\n }\n this._offset = input;\n this._isUTC = true;\n if (localAdjust != null) {\n this.add(localAdjust, 'm');\n }\n if (offset !== input) {\n if (!keepLocalTime || this._changeInProgress) {\n addSubtract(\n this,\n createDuration(input - offset, 'm'),\n 1,\n false\n );\n } else if (!this._changeInProgress) {\n this._changeInProgress = true;\n hooks.updateOffset(this, true);\n this._changeInProgress = null;\n }\n }\n return this;\n } else {\n return this._isUTC ? offset : getDateOffset(this);\n }\n }\n\n function getSetZone(input, keepLocalTime) {\n if (input != null) {\n if (typeof input !== 'string') {\n input = -input;\n }\n\n this.utcOffset(input, keepLocalTime);\n\n return this;\n } else {\n return -this.utcOffset();\n }\n }\n\n function setOffsetToUTC(keepLocalTime) {\n return this.utcOffset(0, keepLocalTime);\n }\n\n function setOffsetToLocal(keepLocalTime) {\n if (this._isUTC) {\n this.utcOffset(0, keepLocalTime);\n this._isUTC = false;\n\n if (keepLocalTime) {\n this.subtract(getDateOffset(this), 'm');\n }\n }\n return this;\n }\n\n function setOffsetToParsedOffset() {\n if (this._tzm != null) {\n this.utcOffset(this._tzm, false, true);\n } else if (typeof this._i === 'string') {\n var tZone = offsetFromString(matchOffset, this._i);\n if (tZone != null) {\n this.utcOffset(tZone);\n } else {\n this.utcOffset(0, true);\n }\n }\n return this;\n }\n\n function hasAlignedHourOffset(input) {\n if (!this.isValid()) {\n return false;\n }\n input = input ? createLocal(input).utcOffset() : 0;\n\n return (this.utcOffset() - input) % 60 === 0;\n }\n\n function isDaylightSavingTime() {\n return (\n this.utcOffset() > this.clone().month(0).utcOffset() ||\n this.utcOffset() > this.clone().month(5).utcOffset()\n );\n }\n\n function isDaylightSavingTimeShifted() {\n if (!isUndefined(this._isDSTShifted)) {\n return this._isDSTShifted;\n }\n\n var c = {},\n other;\n\n copyConfig(c, this);\n c = prepareConfig(c);\n\n if (c._a) {\n other = c._isUTC ? createUTC(c._a) : createLocal(c._a);\n this._isDSTShifted =\n this.isValid() && compareArrays(c._a, other.toArray()) > 0;\n } else {\n this._isDSTShifted = false;\n }\n\n return this._isDSTShifted;\n }\n\n function isLocal() {\n return this.isValid() ? !this._isUTC : false;\n }\n\n function isUtcOffset() {\n return this.isValid() ? this._isUTC : false;\n }\n\n function isUtc() {\n return this.isValid() ? this._isUTC && this._offset === 0 : false;\n }\n\n // ASP.NET json date format regex\n var aspNetRegex = /^(-|\\+)?(?:(\\d*)[. ])?(\\d+):(\\d+)(?::(\\d+)(\\.\\d*)?)?$/,\n // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html\n // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere\n // and further modified to allow for strings containing both week and day\n isoRegex =\n /^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;\n\n function createDuration(input, key) {\n var duration = input,\n // matching against regexp is expensive, do it on demand\n match = null,\n sign,\n ret,\n diffRes;\n\n if (isDuration(input)) {\n duration = {\n ms: input._milliseconds,\n d: input._days,\n M: input._months,\n };\n } else if (isNumber(input) || !isNaN(+input)) {\n duration = {};\n if (key) {\n duration[key] = +input;\n } else {\n duration.milliseconds = +input;\n }\n } else if ((match = aspNetRegex.exec(input))) {\n sign = match[1] === '-' ? -1 : 1;\n duration = {\n y: 0,\n d: toInt(match[DATE]) * sign,\n h: toInt(match[HOUR]) * sign,\n m: toInt(match[MINUTE]) * sign,\n s: toInt(match[SECOND]) * sign,\n ms: toInt(absRound(match[MILLISECOND] * 1000)) * sign, // the millisecond decimal point is included in the match\n };\n } else if ((match = isoRegex.exec(input))) {\n sign = match[1] === '-' ? -1 : 1;\n duration = {\n y: parseIso(match[2], sign),\n M: parseIso(match[3], sign),\n w: parseIso(match[4], sign),\n d: parseIso(match[5], sign),\n h: parseIso(match[6], sign),\n m: parseIso(match[7], sign),\n s: parseIso(match[8], sign),\n };\n } else if (duration == null) {\n // checks for null or undefined\n duration = {};\n } else if (\n typeof duration === 'object' &&\n ('from' in duration || 'to' in duration)\n ) {\n diffRes = momentsDifference(\n createLocal(duration.from),\n createLocal(duration.to)\n );\n\n duration = {};\n duration.ms = diffRes.milliseconds;\n duration.M = diffRes.months;\n }\n\n ret = new Duration(duration);\n\n if (isDuration(input) && hasOwnProp(input, '_locale')) {\n ret._locale = input._locale;\n }\n\n if (isDuration(input) && hasOwnProp(input, '_isValid')) {\n ret._isValid = input._isValid;\n }\n\n return ret;\n }\n\n createDuration.fn = Duration.prototype;\n createDuration.invalid = createInvalid$1;\n\n function parseIso(inp, sign) {\n // We'd normally use ~~inp for this, but unfortunately it also\n // converts floats to ints.\n // inp may be undefined, so careful calling replace on it.\n var res = inp && parseFloat(inp.replace(',', '.'));\n // apply sign while we're at it\n return (isNaN(res) ? 0 : res) * sign;\n }\n\n function positiveMomentsDifference(base, other) {\n var res = {};\n\n res.months =\n other.month() - base.month() + (other.year() - base.year()) * 12;\n if (base.clone().add(res.months, 'M').isAfter(other)) {\n --res.months;\n }\n\n res.milliseconds = +other - +base.clone().add(res.months, 'M');\n\n return res;\n }\n\n function momentsDifference(base, other) {\n var res;\n if (!(base.isValid() && other.isValid())) {\n return { milliseconds: 0, months: 0 };\n }\n\n other = cloneWithOffset(other, base);\n if (base.isBefore(other)) {\n res = positiveMomentsDifference(base, other);\n } else {\n res = positiveMomentsDifference(other, base);\n res.milliseconds = -res.milliseconds;\n res.months = -res.months;\n }\n\n return res;\n }\n\n // TODO: remove 'name' arg after deprecation is removed\n function createAdder(direction, name) {\n return function (val, period) {\n var dur, tmp;\n //invert the arguments, but complain about it\n if (period !== null && !isNaN(+period)) {\n deprecateSimple(\n name,\n 'moment().' +\n name +\n '(period, number) is deprecated. Please use moment().' +\n name +\n '(number, period). ' +\n 'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.'\n );\n tmp = val;\n val = period;\n period = tmp;\n }\n\n dur = createDuration(val, period);\n addSubtract(this, dur, direction);\n return this;\n };\n }\n\n function addSubtract(mom, duration, isAdding, updateOffset) {\n var milliseconds = duration._milliseconds,\n days = absRound(duration._days),\n months = absRound(duration._months);\n\n if (!mom.isValid()) {\n // No op\n return;\n }\n\n updateOffset = updateOffset == null ? true : updateOffset;\n\n if (months) {\n setMonth(mom, get(mom, 'Month') + months * isAdding);\n }\n if (days) {\n set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);\n }\n if (milliseconds) {\n mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);\n }\n if (updateOffset) {\n hooks.updateOffset(mom, days || months);\n }\n }\n\n var add = createAdder(1, 'add'),\n subtract = createAdder(-1, 'subtract');\n\n function isString(input) {\n return typeof input === 'string' || input instanceof String;\n }\n\n // type MomentInput = Moment | Date | string | number | (number | string)[] | MomentInputObject | void; // null | undefined\n function isMomentInput(input) {\n return (\n isMoment(input) ||\n isDate(input) ||\n isString(input) ||\n isNumber(input) ||\n isNumberOrStringArray(input) ||\n isMomentInputObject(input) ||\n input === null ||\n input === undefined\n );\n }\n\n function isMomentInputObject(input) {\n var objectTest = isObject(input) && !isObjectEmpty(input),\n propertyTest = false,\n properties = [\n 'years',\n 'year',\n 'y',\n 'months',\n 'month',\n 'M',\n 'days',\n 'day',\n 'd',\n 'dates',\n 'date',\n 'D',\n 'hours',\n 'hour',\n 'h',\n 'minutes',\n 'minute',\n 'm',\n 'seconds',\n 'second',\n 's',\n 'milliseconds',\n 'millisecond',\n 'ms',\n ],\n i,\n property,\n propertyLen = properties.length;\n\n for (i = 0; i < propertyLen; i += 1) {\n property = properties[i];\n propertyTest = propertyTest || hasOwnProp(input, property);\n }\n\n return objectTest && propertyTest;\n }\n\n function isNumberOrStringArray(input) {\n var arrayTest = isArray(input),\n dataTypeTest = false;\n if (arrayTest) {\n dataTypeTest =\n input.filter(function (item) {\n return !isNumber(item) && isString(input);\n }).length === 0;\n }\n return arrayTest && dataTypeTest;\n }\n\n function isCalendarSpec(input) {\n var objectTest = isObject(input) && !isObjectEmpty(input),\n propertyTest = false,\n properties = [\n 'sameDay',\n 'nextDay',\n 'lastDay',\n 'nextWeek',\n 'lastWeek',\n 'sameElse',\n ],\n i,\n property;\n\n for (i = 0; i < properties.length; i += 1) {\n property = properties[i];\n propertyTest = propertyTest || hasOwnProp(input, property);\n }\n\n return objectTest && propertyTest;\n }\n\n function getCalendarFormat(myMoment, now) {\n var diff = myMoment.diff(now, 'days', true);\n return diff < -6\n ? 'sameElse'\n : diff < -1\n ? 'lastWeek'\n : diff < 0\n ? 'lastDay'\n : diff < 1\n ? 'sameDay'\n : diff < 2\n ? 'nextDay'\n : diff < 7\n ? 'nextWeek'\n : 'sameElse';\n }\n\n function calendar$1(time, formats) {\n // Support for single parameter, formats only overload to the calendar function\n if (arguments.length === 1) {\n if (!arguments[0]) {\n time = undefined;\n formats = undefined;\n } else if (isMomentInput(arguments[0])) {\n time = arguments[0];\n formats = undefined;\n } else if (isCalendarSpec(arguments[0])) {\n formats = arguments[0];\n time = undefined;\n }\n }\n // We want to compare the start of today, vs this.\n // Getting start-of-today depends on whether we're local/utc/offset or not.\n var now = time || createLocal(),\n sod = cloneWithOffset(now, this).startOf('day'),\n format = hooks.calendarFormat(this, sod) || 'sameElse',\n output =\n formats &&\n (isFunction(formats[format])\n ? formats[format].call(this, now)\n : formats[format]);\n\n return this.format(\n output || this.localeData().calendar(format, this, createLocal(now))\n );\n }\n\n function clone() {\n return new Moment(this);\n }\n\n function isAfter(input, units) {\n var localInput = isMoment(input) ? input : createLocal(input);\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units) || 'millisecond';\n if (units === 'millisecond') {\n return this.valueOf() > localInput.valueOf();\n } else {\n return localInput.valueOf() < this.clone().startOf(units).valueOf();\n }\n }\n\n function isBefore(input, units) {\n var localInput = isMoment(input) ? input : createLocal(input);\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units) || 'millisecond';\n if (units === 'millisecond') {\n return this.valueOf() < localInput.valueOf();\n } else {\n return this.clone().endOf(units).valueOf() < localInput.valueOf();\n }\n }\n\n function isBetween(from, to, units, inclusivity) {\n var localFrom = isMoment(from) ? from : createLocal(from),\n localTo = isMoment(to) ? to : createLocal(to);\n if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) {\n return false;\n }\n inclusivity = inclusivity || '()';\n return (\n (inclusivity[0] === '('\n ? this.isAfter(localFrom, units)\n : !this.isBefore(localFrom, units)) &&\n (inclusivity[1] === ')'\n ? this.isBefore(localTo, units)\n : !this.isAfter(localTo, units))\n );\n }\n\n function isSame(input, units) {\n var localInput = isMoment(input) ? input : createLocal(input),\n inputMs;\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units) || 'millisecond';\n if (units === 'millisecond') {\n return this.valueOf() === localInput.valueOf();\n } else {\n inputMs = localInput.valueOf();\n return (\n this.clone().startOf(units).valueOf() <= inputMs &&\n inputMs <= this.clone().endOf(units).valueOf()\n );\n }\n }\n\n function isSameOrAfter(input, units) {\n return this.isSame(input, units) || this.isAfter(input, units);\n }\n\n function isSameOrBefore(input, units) {\n return this.isSame(input, units) || this.isBefore(input, units);\n }\n\n function diff(input, units, asFloat) {\n var that, zoneDelta, output;\n\n if (!this.isValid()) {\n return NaN;\n }\n\n that = cloneWithOffset(input, this);\n\n if (!that.isValid()) {\n return NaN;\n }\n\n zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;\n\n units = normalizeUnits(units);\n\n switch (units) {\n case 'year':\n output = monthDiff(this, that) / 12;\n break;\n case 'month':\n output = monthDiff(this, that);\n break;\n case 'quarter':\n output = monthDiff(this, that) / 3;\n break;\n case 'second':\n output = (this - that) / 1e3;\n break; // 1000\n case 'minute':\n output = (this - that) / 6e4;\n break; // 1000 * 60\n case 'hour':\n output = (this - that) / 36e5;\n break; // 1000 * 60 * 60\n case 'day':\n output = (this - that - zoneDelta) / 864e5;\n break; // 1000 * 60 * 60 * 24, negate dst\n case 'week':\n output = (this - that - zoneDelta) / 6048e5;\n break; // 1000 * 60 * 60 * 24 * 7, negate dst\n default:\n output = this - that;\n }\n\n return asFloat ? output : absFloor(output);\n }\n\n function monthDiff(a, b) {\n if (a.date() < b.date()) {\n // end-of-month calculations work correct when the start month has more\n // days than the end month.\n return -monthDiff(b, a);\n }\n // difference in months\n var wholeMonthDiff = (b.year() - a.year()) * 12 + (b.month() - a.month()),\n // b is in (anchor - 1 month, anchor + 1 month)\n anchor = a.clone().add(wholeMonthDiff, 'months'),\n anchor2,\n adjust;\n\n if (b - anchor < 0) {\n anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');\n // linear across the month\n adjust = (b - anchor) / (anchor - anchor2);\n } else {\n anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');\n // linear across the month\n adjust = (b - anchor) / (anchor2 - anchor);\n }\n\n //check for negative zero, return zero if negative zero\n return -(wholeMonthDiff + adjust) || 0;\n }\n\n hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';\n hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';\n\n function toString() {\n return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');\n }\n\n function toISOString(keepOffset) {\n if (!this.isValid()) {\n return null;\n }\n var utc = keepOffset !== true,\n m = utc ? this.clone().utc() : this;\n if (m.year() < 0 || m.year() > 9999) {\n return formatMoment(\n m,\n utc\n ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]'\n : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ'\n );\n }\n if (isFunction(Date.prototype.toISOString)) {\n // native implementation is ~50x faster, use it when we can\n if (utc) {\n return this.toDate().toISOString();\n } else {\n return new Date(this.valueOf() + this.utcOffset() * 60 * 1000)\n .toISOString()\n .replace('Z', formatMoment(m, 'Z'));\n }\n }\n return formatMoment(\n m,\n utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ'\n );\n }\n\n /**\n * Return a human readable representation of a moment that can\n * also be evaluated to get a new moment which is the same\n *\n * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects\n */\n function inspect() {\n if (!this.isValid()) {\n return 'moment.invalid(/* ' + this._i + ' */)';\n }\n var func = 'moment',\n zone = '',\n prefix,\n year,\n datetime,\n suffix;\n if (!this.isLocal()) {\n func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';\n zone = 'Z';\n }\n prefix = '[' + func + '(\"]';\n year = 0 <= this.year() && this.year() <= 9999 ? 'YYYY' : 'YYYYYY';\n datetime = '-MM-DD[T]HH:mm:ss.SSS';\n suffix = zone + '[\")]';\n\n return this.format(prefix + year + datetime + suffix);\n }\n\n function format(inputString) {\n if (!inputString) {\n inputString = this.isUtc()\n ? hooks.defaultFormatUtc\n : hooks.defaultFormat;\n }\n var output = formatMoment(this, inputString);\n return this.localeData().postformat(output);\n }\n\n function from(time, withoutSuffix) {\n if (\n this.isValid() &&\n ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n ) {\n return createDuration({ to: this, from: time })\n .locale(this.locale())\n .humanize(!withoutSuffix);\n } else {\n return this.localeData().invalidDate();\n }\n }\n\n function fromNow(withoutSuffix) {\n return this.from(createLocal(), withoutSuffix);\n }\n\n function to(time, withoutSuffix) {\n if (\n this.isValid() &&\n ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n ) {\n return createDuration({ from: this, to: time })\n .locale(this.locale())\n .humanize(!withoutSuffix);\n } else {\n return this.localeData().invalidDate();\n }\n }\n\n function toNow(withoutSuffix) {\n return this.to(createLocal(), withoutSuffix);\n }\n\n // If passed a locale key, it will set the locale for this\n // instance. Otherwise, it will return the locale configuration\n // variables for this instance.\n function locale(key) {\n var newLocaleData;\n\n if (key === undefined) {\n return this._locale._abbr;\n } else {\n newLocaleData = getLocale(key);\n if (newLocaleData != null) {\n this._locale = newLocaleData;\n }\n return this;\n }\n }\n\n var lang = deprecate(\n 'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',\n function (key) {\n if (key === undefined) {\n return this.localeData();\n } else {\n return this.locale(key);\n }\n }\n );\n\n function localeData() {\n return this._locale;\n }\n\n var MS_PER_SECOND = 1000,\n MS_PER_MINUTE = 60 * MS_PER_SECOND,\n MS_PER_HOUR = 60 * MS_PER_MINUTE,\n MS_PER_400_YEARS = (365 * 400 + 97) * 24 * MS_PER_HOUR;\n\n // actual modulo - handles negative numbers (for dates before 1970):\n function mod$1(dividend, divisor) {\n return ((dividend % divisor) + divisor) % divisor;\n }\n\n function localStartOfDate(y, m, d) {\n // the date constructor remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n return new Date(y + 400, m, d) - MS_PER_400_YEARS;\n } else {\n return new Date(y, m, d).valueOf();\n }\n }\n\n function utcStartOfDate(y, m, d) {\n // Date.UTC remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n return Date.UTC(y + 400, m, d) - MS_PER_400_YEARS;\n } else {\n return Date.UTC(y, m, d);\n }\n }\n\n function startOf(units) {\n var time, startOfDate;\n units = normalizeUnits(units);\n if (units === undefined || units === 'millisecond' || !this.isValid()) {\n return this;\n }\n\n startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n switch (units) {\n case 'year':\n time = startOfDate(this.year(), 0, 1);\n break;\n case 'quarter':\n time = startOfDate(\n this.year(),\n this.month() - (this.month() % 3),\n 1\n );\n break;\n case 'month':\n time = startOfDate(this.year(), this.month(), 1);\n break;\n case 'week':\n time = startOfDate(\n this.year(),\n this.month(),\n this.date() - this.weekday()\n );\n break;\n case 'isoWeek':\n time = startOfDate(\n this.year(),\n this.month(),\n this.date() - (this.isoWeekday() - 1)\n );\n break;\n case 'day':\n case 'date':\n time = startOfDate(this.year(), this.month(), this.date());\n break;\n case 'hour':\n time = this._d.valueOf();\n time -= mod$1(\n time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n MS_PER_HOUR\n );\n break;\n case 'minute':\n time = this._d.valueOf();\n time -= mod$1(time, MS_PER_MINUTE);\n break;\n case 'second':\n time = this._d.valueOf();\n time -= mod$1(time, MS_PER_SECOND);\n break;\n }\n\n this._d.setTime(time);\n hooks.updateOffset(this, true);\n return this;\n }\n\n function endOf(units) {\n var time, startOfDate;\n units = normalizeUnits(units);\n if (units === undefined || units === 'millisecond' || !this.isValid()) {\n return this;\n }\n\n startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n switch (units) {\n case 'year':\n time = startOfDate(this.year() + 1, 0, 1) - 1;\n break;\n case 'quarter':\n time =\n startOfDate(\n this.year(),\n this.month() - (this.month() % 3) + 3,\n 1\n ) - 1;\n break;\n case 'month':\n time = startOfDate(this.year(), this.month() + 1, 1) - 1;\n break;\n case 'week':\n time =\n startOfDate(\n this.year(),\n this.month(),\n this.date() - this.weekday() + 7\n ) - 1;\n break;\n case 'isoWeek':\n time =\n startOfDate(\n this.year(),\n this.month(),\n this.date() - (this.isoWeekday() - 1) + 7\n ) - 1;\n break;\n case 'day':\n case 'date':\n time = startOfDate(this.year(), this.month(), this.date() + 1) - 1;\n break;\n case 'hour':\n time = this._d.valueOf();\n time +=\n MS_PER_HOUR -\n mod$1(\n time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n MS_PER_HOUR\n ) -\n 1;\n break;\n case 'minute':\n time = this._d.valueOf();\n time += MS_PER_MINUTE - mod$1(time, MS_PER_MINUTE) - 1;\n break;\n case 'second':\n time = this._d.valueOf();\n time += MS_PER_SECOND - mod$1(time, MS_PER_SECOND) - 1;\n break;\n }\n\n this._d.setTime(time);\n hooks.updateOffset(this, true);\n return this;\n }\n\n function valueOf() {\n return this._d.valueOf() - (this._offset || 0) * 60000;\n }\n\n function unix() {\n return Math.floor(this.valueOf() / 1000);\n }\n\n function toDate() {\n return new Date(this.valueOf());\n }\n\n function toArray() {\n var m = this;\n return [\n m.year(),\n m.month(),\n m.date(),\n m.hour(),\n m.minute(),\n m.second(),\n m.millisecond(),\n ];\n }\n\n function toObject() {\n var m = this;\n return {\n years: m.year(),\n months: m.month(),\n date: m.date(),\n hours: m.hours(),\n minutes: m.minutes(),\n seconds: m.seconds(),\n milliseconds: m.milliseconds(),\n };\n }\n\n function toJSON() {\n // new Date(NaN).toJSON() === null\n return this.isValid() ? this.toISOString() : null;\n }\n\n function isValid$2() {\n return isValid(this);\n }\n\n function parsingFlags() {\n return extend({}, getParsingFlags(this));\n }\n\n function invalidAt() {\n return getParsingFlags(this).overflow;\n }\n\n function creationData() {\n return {\n input: this._i,\n format: this._f,\n locale: this._locale,\n isUTC: this._isUTC,\n strict: this._strict,\n };\n }\n\n addFormatToken('N', 0, 0, 'eraAbbr');\n addFormatToken('NN', 0, 0, 'eraAbbr');\n addFormatToken('NNN', 0, 0, 'eraAbbr');\n addFormatToken('NNNN', 0, 0, 'eraName');\n addFormatToken('NNNNN', 0, 0, 'eraNarrow');\n\n addFormatToken('y', ['y', 1], 'yo', 'eraYear');\n addFormatToken('y', ['yy', 2], 0, 'eraYear');\n addFormatToken('y', ['yyy', 3], 0, 'eraYear');\n addFormatToken('y', ['yyyy', 4], 0, 'eraYear');\n\n addRegexToken('N', matchEraAbbr);\n addRegexToken('NN', matchEraAbbr);\n addRegexToken('NNN', matchEraAbbr);\n addRegexToken('NNNN', matchEraName);\n addRegexToken('NNNNN', matchEraNarrow);\n\n addParseToken(\n ['N', 'NN', 'NNN', 'NNNN', 'NNNNN'],\n function (input, array, config, token) {\n var era = config._locale.erasParse(input, token, config._strict);\n if (era) {\n getParsingFlags(config).era = era;\n } else {\n getParsingFlags(config).invalidEra = input;\n }\n }\n );\n\n addRegexToken('y', matchUnsigned);\n addRegexToken('yy', matchUnsigned);\n addRegexToken('yyy', matchUnsigned);\n addRegexToken('yyyy', matchUnsigned);\n addRegexToken('yo', matchEraYearOrdinal);\n\n addParseToken(['y', 'yy', 'yyy', 'yyyy'], YEAR);\n addParseToken(['yo'], function (input, array, config, token) {\n var match;\n if (config._locale._eraYearOrdinalRegex) {\n match = input.match(config._locale._eraYearOrdinalRegex);\n }\n\n if (config._locale.eraYearOrdinalParse) {\n array[YEAR] = config._locale.eraYearOrdinalParse(input, match);\n } else {\n array[YEAR] = parseInt(input, 10);\n }\n });\n\n function localeEras(m, format) {\n var i,\n l,\n date,\n eras = this._eras || getLocale('en')._eras;\n for (i = 0, l = eras.length; i < l; ++i) {\n switch (typeof eras[i].since) {\n case 'string':\n // truncate time\n date = hooks(eras[i].since).startOf('day');\n eras[i].since = date.valueOf();\n break;\n }\n\n switch (typeof eras[i].until) {\n case 'undefined':\n eras[i].until = +Infinity;\n break;\n case 'string':\n // truncate time\n date = hooks(eras[i].until).startOf('day').valueOf();\n eras[i].until = date.valueOf();\n break;\n }\n }\n return eras;\n }\n\n function localeErasParse(eraName, format, strict) {\n var i,\n l,\n eras = this.eras(),\n name,\n abbr,\n narrow;\n eraName = eraName.toUpperCase();\n\n for (i = 0, l = eras.length; i < l; ++i) {\n name = eras[i].name.toUpperCase();\n abbr = eras[i].abbr.toUpperCase();\n narrow = eras[i].narrow.toUpperCase();\n\n if (strict) {\n switch (format) {\n case 'N':\n case 'NN':\n case 'NNN':\n if (abbr === eraName) {\n return eras[i];\n }\n break;\n\n case 'NNNN':\n if (name === eraName) {\n return eras[i];\n }\n break;\n\n case 'NNNNN':\n if (narrow === eraName) {\n return eras[i];\n }\n break;\n }\n } else if ([name, abbr, narrow].indexOf(eraName) >= 0) {\n return eras[i];\n }\n }\n }\n\n function localeErasConvertYear(era, year) {\n var dir = era.since <= era.until ? +1 : -1;\n if (year === undefined) {\n return hooks(era.since).year();\n } else {\n return hooks(era.since).year() + (year - era.offset) * dir;\n }\n }\n\n function getEraName() {\n var i,\n l,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (eras[i].since <= val && val <= eras[i].until) {\n return eras[i].name;\n }\n if (eras[i].until <= val && val <= eras[i].since) {\n return eras[i].name;\n }\n }\n\n return '';\n }\n\n function getEraNarrow() {\n var i,\n l,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (eras[i].since <= val && val <= eras[i].until) {\n return eras[i].narrow;\n }\n if (eras[i].until <= val && val <= eras[i].since) {\n return eras[i].narrow;\n }\n }\n\n return '';\n }\n\n function getEraAbbr() {\n var i,\n l,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (eras[i].since <= val && val <= eras[i].until) {\n return eras[i].abbr;\n }\n if (eras[i].until <= val && val <= eras[i].since) {\n return eras[i].abbr;\n }\n }\n\n return '';\n }\n\n function getEraYear() {\n var i,\n l,\n dir,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n dir = eras[i].since <= eras[i].until ? +1 : -1;\n\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (\n (eras[i].since <= val && val <= eras[i].until) ||\n (eras[i].until <= val && val <= eras[i].since)\n ) {\n return (\n (this.year() - hooks(eras[i].since).year()) * dir +\n eras[i].offset\n );\n }\n }\n\n return this.year();\n }\n\n function erasNameRegex(isStrict) {\n if (!hasOwnProp(this, '_erasNameRegex')) {\n computeErasParse.call(this);\n }\n return isStrict ? this._erasNameRegex : this._erasRegex;\n }\n\n function erasAbbrRegex(isStrict) {\n if (!hasOwnProp(this, '_erasAbbrRegex')) {\n computeErasParse.call(this);\n }\n return isStrict ? this._erasAbbrRegex : this._erasRegex;\n }\n\n function erasNarrowRegex(isStrict) {\n if (!hasOwnProp(this, '_erasNarrowRegex')) {\n computeErasParse.call(this);\n }\n return isStrict ? this._erasNarrowRegex : this._erasRegex;\n }\n\n function matchEraAbbr(isStrict, locale) {\n return locale.erasAbbrRegex(isStrict);\n }\n\n function matchEraName(isStrict, locale) {\n return locale.erasNameRegex(isStrict);\n }\n\n function matchEraNarrow(isStrict, locale) {\n return locale.erasNarrowRegex(isStrict);\n }\n\n function matchEraYearOrdinal(isStrict, locale) {\n return locale._eraYearOrdinalRegex || matchUnsigned;\n }\n\n function computeErasParse() {\n var abbrPieces = [],\n namePieces = [],\n narrowPieces = [],\n mixedPieces = [],\n i,\n l,\n erasName,\n erasAbbr,\n erasNarrow,\n eras = this.eras();\n\n for (i = 0, l = eras.length; i < l; ++i) {\n erasName = regexEscape(eras[i].name);\n erasAbbr = regexEscape(eras[i].abbr);\n erasNarrow = regexEscape(eras[i].narrow);\n\n namePieces.push(erasName);\n abbrPieces.push(erasAbbr);\n narrowPieces.push(erasNarrow);\n mixedPieces.push(erasName);\n mixedPieces.push(erasAbbr);\n mixedPieces.push(erasNarrow);\n }\n\n this._erasRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._erasNameRegex = new RegExp('^(' + namePieces.join('|') + ')', 'i');\n this._erasAbbrRegex = new RegExp('^(' + abbrPieces.join('|') + ')', 'i');\n this._erasNarrowRegex = new RegExp(\n '^(' + narrowPieces.join('|') + ')',\n 'i'\n );\n }\n\n // FORMATTING\n\n addFormatToken(0, ['gg', 2], 0, function () {\n return this.weekYear() % 100;\n });\n\n addFormatToken(0, ['GG', 2], 0, function () {\n return this.isoWeekYear() % 100;\n });\n\n function addWeekYearFormatToken(token, getter) {\n addFormatToken(0, [token, token.length], 0, getter);\n }\n\n addWeekYearFormatToken('gggg', 'weekYear');\n addWeekYearFormatToken('ggggg', 'weekYear');\n addWeekYearFormatToken('GGGG', 'isoWeekYear');\n addWeekYearFormatToken('GGGGG', 'isoWeekYear');\n\n // ALIASES\n\n // PARSING\n\n addRegexToken('G', matchSigned);\n addRegexToken('g', matchSigned);\n addRegexToken('GG', match1to2, match2);\n addRegexToken('gg', match1to2, match2);\n addRegexToken('GGGG', match1to4, match4);\n addRegexToken('gggg', match1to4, match4);\n addRegexToken('GGGGG', match1to6, match6);\n addRegexToken('ggggg', match1to6, match6);\n\n addWeekParseToken(\n ['gggg', 'ggggg', 'GGGG', 'GGGGG'],\n function (input, week, config, token) {\n week[token.substr(0, 2)] = toInt(input);\n }\n );\n\n addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {\n week[token] = hooks.parseTwoDigitYear(input);\n });\n\n // MOMENTS\n\n function getSetWeekYear(input) {\n return getSetWeekYearHelper.call(\n this,\n input,\n this.week(),\n this.weekday() + this.localeData()._week.dow,\n this.localeData()._week.dow,\n this.localeData()._week.doy\n );\n }\n\n function getSetISOWeekYear(input) {\n return getSetWeekYearHelper.call(\n this,\n input,\n this.isoWeek(),\n this.isoWeekday(),\n 1,\n 4\n );\n }\n\n function getISOWeeksInYear() {\n return weeksInYear(this.year(), 1, 4);\n }\n\n function getISOWeeksInISOWeekYear() {\n return weeksInYear(this.isoWeekYear(), 1, 4);\n }\n\n function getWeeksInYear() {\n var weekInfo = this.localeData()._week;\n return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);\n }\n\n function getWeeksInWeekYear() {\n var weekInfo = this.localeData()._week;\n return weeksInYear(this.weekYear(), weekInfo.dow, weekInfo.doy);\n }\n\n function getSetWeekYearHelper(input, week, weekday, dow, doy) {\n var weeksTarget;\n if (input == null) {\n return weekOfYear(this, dow, doy).year;\n } else {\n weeksTarget = weeksInYear(input, dow, doy);\n if (week > weeksTarget) {\n week = weeksTarget;\n }\n return setWeekAll.call(this, input, week, weekday, dow, doy);\n }\n }\n\n function setWeekAll(weekYear, week, weekday, dow, doy) {\n var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),\n date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);\n\n this.year(date.getUTCFullYear());\n this.month(date.getUTCMonth());\n this.date(date.getUTCDate());\n return this;\n }\n\n // FORMATTING\n\n addFormatToken('Q', 0, 'Qo', 'quarter');\n\n // PARSING\n\n addRegexToken('Q', match1);\n addParseToken('Q', function (input, array) {\n array[MONTH] = (toInt(input) - 1) * 3;\n });\n\n // MOMENTS\n\n function getSetQuarter(input) {\n return input == null\n ? Math.ceil((this.month() + 1) / 3)\n : this.month((input - 1) * 3 + (this.month() % 3));\n }\n\n // FORMATTING\n\n addFormatToken('D', ['DD', 2], 'Do', 'date');\n\n // PARSING\n\n addRegexToken('D', match1to2, match1to2NoLeadingZero);\n addRegexToken('DD', match1to2, match2);\n addRegexToken('Do', function (isStrict, locale) {\n // TODO: Remove \"ordinalParse\" fallback in next major release.\n return isStrict\n ? locale._dayOfMonthOrdinalParse || locale._ordinalParse\n : locale._dayOfMonthOrdinalParseLenient;\n });\n\n addParseToken(['D', 'DD'], DATE);\n addParseToken('Do', function (input, array) {\n array[DATE] = toInt(input.match(match1to2)[0]);\n });\n\n // MOMENTS\n\n var getSetDayOfMonth = makeGetSet('Date', true);\n\n // FORMATTING\n\n addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');\n\n // PARSING\n\n addRegexToken('DDD', match1to3);\n addRegexToken('DDDD', match3);\n addParseToken(['DDD', 'DDDD'], function (input, array, config) {\n config._dayOfYear = toInt(input);\n });\n\n // HELPERS\n\n // MOMENTS\n\n function getSetDayOfYear(input) {\n var dayOfYear =\n Math.round(\n (this.clone().startOf('day') - this.clone().startOf('year')) / 864e5\n ) + 1;\n return input == null ? dayOfYear : this.add(input - dayOfYear, 'd');\n }\n\n // FORMATTING\n\n addFormatToken('m', ['mm', 2], 0, 'minute');\n\n // PARSING\n\n addRegexToken('m', match1to2, match1to2HasZero);\n addRegexToken('mm', match1to2, match2);\n addParseToken(['m', 'mm'], MINUTE);\n\n // MOMENTS\n\n var getSetMinute = makeGetSet('Minutes', false);\n\n // FORMATTING\n\n addFormatToken('s', ['ss', 2], 0, 'second');\n\n // PARSING\n\n addRegexToken('s', match1to2, match1to2HasZero);\n addRegexToken('ss', match1to2, match2);\n addParseToken(['s', 'ss'], SECOND);\n\n // MOMENTS\n\n var getSetSecond = makeGetSet('Seconds', false);\n\n // FORMATTING\n\n addFormatToken('S', 0, 0, function () {\n return ~~(this.millisecond() / 100);\n });\n\n addFormatToken(0, ['SS', 2], 0, function () {\n return ~~(this.millisecond() / 10);\n });\n\n addFormatToken(0, ['SSS', 3], 0, 'millisecond');\n addFormatToken(0, ['SSSS', 4], 0, function () {\n return this.millisecond() * 10;\n });\n addFormatToken(0, ['SSSSS', 5], 0, function () {\n return this.millisecond() * 100;\n });\n addFormatToken(0, ['SSSSSS', 6], 0, function () {\n return this.millisecond() * 1000;\n });\n addFormatToken(0, ['SSSSSSS', 7], 0, function () {\n return this.millisecond() * 10000;\n });\n addFormatToken(0, ['SSSSSSSS', 8], 0, function () {\n return this.millisecond() * 100000;\n });\n addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {\n return this.millisecond() * 1000000;\n });\n\n // PARSING\n\n addRegexToken('S', match1to3, match1);\n addRegexToken('SS', match1to3, match2);\n addRegexToken('SSS', match1to3, match3);\n\n var token, getSetMillisecond;\n for (token = 'SSSS'; token.length <= 9; token += 'S') {\n addRegexToken(token, matchUnsigned);\n }\n\n function parseMs(input, array) {\n array[MILLISECOND] = toInt(('0.' + input) * 1000);\n }\n\n for (token = 'S'; token.length <= 9; token += 'S') {\n addParseToken(token, parseMs);\n }\n\n getSetMillisecond = makeGetSet('Milliseconds', false);\n\n // FORMATTING\n\n addFormatToken('z', 0, 0, 'zoneAbbr');\n addFormatToken('zz', 0, 0, 'zoneName');\n\n // MOMENTS\n\n function getZoneAbbr() {\n return this._isUTC ? 'UTC' : '';\n }\n\n function getZoneName() {\n return this._isUTC ? 'Coordinated Universal Time' : '';\n }\n\n var proto = Moment.prototype;\n\n proto.add = add;\n proto.calendar = calendar$1;\n proto.clone = clone;\n proto.diff = diff;\n proto.endOf = endOf;\n proto.format = format;\n proto.from = from;\n proto.fromNow = fromNow;\n proto.to = to;\n proto.toNow = toNow;\n proto.get = stringGet;\n proto.invalidAt = invalidAt;\n proto.isAfter = isAfter;\n proto.isBefore = isBefore;\n proto.isBetween = isBetween;\n proto.isSame = isSame;\n proto.isSameOrAfter = isSameOrAfter;\n proto.isSameOrBefore = isSameOrBefore;\n proto.isValid = isValid$2;\n proto.lang = lang;\n proto.locale = locale;\n proto.localeData = localeData;\n proto.max = prototypeMax;\n proto.min = prototypeMin;\n proto.parsingFlags = parsingFlags;\n proto.set = stringSet;\n proto.startOf = startOf;\n proto.subtract = subtract;\n proto.toArray = toArray;\n proto.toObject = toObject;\n proto.toDate = toDate;\n proto.toISOString = toISOString;\n proto.inspect = inspect;\n if (typeof Symbol !== 'undefined' && Symbol.for != null) {\n proto[Symbol.for('nodejs.util.inspect.custom')] = function () {\n return 'Moment<' + this.format() + '>';\n };\n }\n proto.toJSON = toJSON;\n proto.toString = toString;\n proto.unix = unix;\n proto.valueOf = valueOf;\n proto.creationData = creationData;\n proto.eraName = getEraName;\n proto.eraNarrow = getEraNarrow;\n proto.eraAbbr = getEraAbbr;\n proto.eraYear = getEraYear;\n proto.year = getSetYear;\n proto.isLeapYear = getIsLeapYear;\n proto.weekYear = getSetWeekYear;\n proto.isoWeekYear = getSetISOWeekYear;\n proto.quarter = proto.quarters = getSetQuarter;\n proto.month = getSetMonth;\n proto.daysInMonth = getDaysInMonth;\n proto.week = proto.weeks = getSetWeek;\n proto.isoWeek = proto.isoWeeks = getSetISOWeek;\n proto.weeksInYear = getWeeksInYear;\n proto.weeksInWeekYear = getWeeksInWeekYear;\n proto.isoWeeksInYear = getISOWeeksInYear;\n proto.isoWeeksInISOWeekYear = getISOWeeksInISOWeekYear;\n proto.date = getSetDayOfMonth;\n proto.day = proto.days = getSetDayOfWeek;\n proto.weekday = getSetLocaleDayOfWeek;\n proto.isoWeekday = getSetISODayOfWeek;\n proto.dayOfYear = getSetDayOfYear;\n proto.hour = proto.hours = getSetHour;\n proto.minute = proto.minutes = getSetMinute;\n proto.second = proto.seconds = getSetSecond;\n proto.millisecond = proto.milliseconds = getSetMillisecond;\n proto.utcOffset = getSetOffset;\n proto.utc = setOffsetToUTC;\n proto.local = setOffsetToLocal;\n proto.parseZone = setOffsetToParsedOffset;\n proto.hasAlignedHourOffset = hasAlignedHourOffset;\n proto.isDST = isDaylightSavingTime;\n proto.isLocal = isLocal;\n proto.isUtcOffset = isUtcOffset;\n proto.isUtc = isUtc;\n proto.isUTC = isUtc;\n proto.zoneAbbr = getZoneAbbr;\n proto.zoneName = getZoneName;\n proto.dates = deprecate(\n 'dates accessor is deprecated. Use date instead.',\n getSetDayOfMonth\n );\n proto.months = deprecate(\n 'months accessor is deprecated. Use month instead',\n getSetMonth\n );\n proto.years = deprecate(\n 'years accessor is deprecated. Use year instead',\n getSetYear\n );\n proto.zone = deprecate(\n 'moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/',\n getSetZone\n );\n proto.isDSTShifted = deprecate(\n 'isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information',\n isDaylightSavingTimeShifted\n );\n\n function createUnix(input) {\n return createLocal(input * 1000);\n }\n\n function createInZone() {\n return createLocal.apply(null, arguments).parseZone();\n }\n\n function preParsePostFormat(string) {\n return string;\n }\n\n var proto$1 = Locale.prototype;\n\n proto$1.calendar = calendar;\n proto$1.longDateFormat = longDateFormat;\n proto$1.invalidDate = invalidDate;\n proto$1.ordinal = ordinal;\n proto$1.preparse = preParsePostFormat;\n proto$1.postformat = preParsePostFormat;\n proto$1.relativeTime = relativeTime;\n proto$1.pastFuture = pastFuture;\n proto$1.set = set;\n proto$1.eras = localeEras;\n proto$1.erasParse = localeErasParse;\n proto$1.erasConvertYear = localeErasConvertYear;\n proto$1.erasAbbrRegex = erasAbbrRegex;\n proto$1.erasNameRegex = erasNameRegex;\n proto$1.erasNarrowRegex = erasNarrowRegex;\n\n proto$1.months = localeMonths;\n proto$1.monthsShort = localeMonthsShort;\n proto$1.monthsParse = localeMonthsParse;\n proto$1.monthsRegex = monthsRegex;\n proto$1.monthsShortRegex = monthsShortRegex;\n proto$1.week = localeWeek;\n proto$1.firstDayOfYear = localeFirstDayOfYear;\n proto$1.firstDayOfWeek = localeFirstDayOfWeek;\n\n proto$1.weekdays = localeWeekdays;\n proto$1.weekdaysMin = localeWeekdaysMin;\n proto$1.weekdaysShort = localeWeekdaysShort;\n proto$1.weekdaysParse = localeWeekdaysParse;\n\n proto$1.weekdaysRegex = weekdaysRegex;\n proto$1.weekdaysShortRegex = weekdaysShortRegex;\n proto$1.weekdaysMinRegex = weekdaysMinRegex;\n\n proto$1.isPM = localeIsPM;\n proto$1.meridiem = localeMeridiem;\n\n function get$1(format, index, field, setter) {\n var locale = getLocale(),\n utc = createUTC().set(setter, index);\n return locale[field](utc, format);\n }\n\n function listMonthsImpl(format, index, field) {\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n\n if (index != null) {\n return get$1(format, index, field, 'month');\n }\n\n var i,\n out = [];\n for (i = 0; i < 12; i++) {\n out[i] = get$1(format, i, field, 'month');\n }\n return out;\n }\n\n // ()\n // (5)\n // (fmt, 5)\n // (fmt)\n // (true)\n // (true, 5)\n // (true, fmt, 5)\n // (true, fmt)\n function listWeekdaysImpl(localeSorted, format, index, field) {\n if (typeof localeSorted === 'boolean') {\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n } else {\n format = localeSorted;\n index = format;\n localeSorted = false;\n\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n }\n\n var locale = getLocale(),\n shift = localeSorted ? locale._week.dow : 0,\n i,\n out = [];\n\n if (index != null) {\n return get$1(format, (index + shift) % 7, field, 'day');\n }\n\n for (i = 0; i < 7; i++) {\n out[i] = get$1(format, (i + shift) % 7, field, 'day');\n }\n return out;\n }\n\n function listMonths(format, index) {\n return listMonthsImpl(format, index, 'months');\n }\n\n function listMonthsShort(format, index) {\n return listMonthsImpl(format, index, 'monthsShort');\n }\n\n function listWeekdays(localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdays');\n }\n\n function listWeekdaysShort(localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');\n }\n\n function listWeekdaysMin(localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');\n }\n\n getSetGlobalLocale('en', {\n eras: [\n {\n since: '0001-01-01',\n until: +Infinity,\n offset: 1,\n name: 'Anno Domini',\n narrow: 'AD',\n abbr: 'AD',\n },\n {\n since: '0000-12-31',\n until: -Infinity,\n offset: 1,\n name: 'Before Christ',\n narrow: 'BC',\n abbr: 'BC',\n },\n ],\n dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n ordinal: function (number) {\n var b = number % 10,\n output =\n toInt((number % 100) / 10) === 1\n ? 'th'\n : b === 1\n ? 'st'\n : b === 2\n ? 'nd'\n : b === 3\n ? 'rd'\n : 'th';\n return number + output;\n },\n });\n\n // Side effect imports\n\n hooks.lang = deprecate(\n 'moment.lang is deprecated. Use moment.locale instead.',\n getSetGlobalLocale\n );\n hooks.langData = deprecate(\n 'moment.langData is deprecated. Use moment.localeData instead.',\n getLocale\n );\n\n var mathAbs = Math.abs;\n\n function abs() {\n var data = this._data;\n\n this._milliseconds = mathAbs(this._milliseconds);\n this._days = mathAbs(this._days);\n this._months = mathAbs(this._months);\n\n data.milliseconds = mathAbs(data.milliseconds);\n data.seconds = mathAbs(data.seconds);\n data.minutes = mathAbs(data.minutes);\n data.hours = mathAbs(data.hours);\n data.months = mathAbs(data.months);\n data.years = mathAbs(data.years);\n\n return this;\n }\n\n function addSubtract$1(duration, input, value, direction) {\n var other = createDuration(input, value);\n\n duration._milliseconds += direction * other._milliseconds;\n duration._days += direction * other._days;\n duration._months += direction * other._months;\n\n return duration._bubble();\n }\n\n // supports only 2.0-style add(1, 's') or add(duration)\n function add$1(input, value) {\n return addSubtract$1(this, input, value, 1);\n }\n\n // supports only 2.0-style subtract(1, 's') or subtract(duration)\n function subtract$1(input, value) {\n return addSubtract$1(this, input, value, -1);\n }\n\n function absCeil(number) {\n if (number < 0) {\n return Math.floor(number);\n } else {\n return Math.ceil(number);\n }\n }\n\n function bubble() {\n var milliseconds = this._milliseconds,\n days = this._days,\n months = this._months,\n data = this._data,\n seconds,\n minutes,\n hours,\n years,\n monthsFromDays;\n\n // if we have a mix of positive and negative values, bubble down first\n // check: https://github.com/moment/moment/issues/2166\n if (\n !(\n (milliseconds >= 0 && days >= 0 && months >= 0) ||\n (milliseconds <= 0 && days <= 0 && months <= 0)\n )\n ) {\n milliseconds += absCeil(monthsToDays(months) + days) * 864e5;\n days = 0;\n months = 0;\n }\n\n // The following code bubbles up values, see the tests for\n // examples of what that means.\n data.milliseconds = milliseconds % 1000;\n\n seconds = absFloor(milliseconds / 1000);\n data.seconds = seconds % 60;\n\n minutes = absFloor(seconds / 60);\n data.minutes = minutes % 60;\n\n hours = absFloor(minutes / 60);\n data.hours = hours % 24;\n\n days += absFloor(hours / 24);\n\n // convert days to months\n monthsFromDays = absFloor(daysToMonths(days));\n months += monthsFromDays;\n days -= absCeil(monthsToDays(monthsFromDays));\n\n // 12 months -> 1 year\n years = absFloor(months / 12);\n months %= 12;\n\n data.days = days;\n data.months = months;\n data.years = years;\n\n return this;\n }\n\n function daysToMonths(days) {\n // 400 years have 146097 days (taking into account leap year rules)\n // 400 years have 12 months === 4800\n return (days * 4800) / 146097;\n }\n\n function monthsToDays(months) {\n // the reverse of daysToMonths\n return (months * 146097) / 4800;\n }\n\n function as(units) {\n if (!this.isValid()) {\n return NaN;\n }\n var days,\n months,\n milliseconds = this._milliseconds;\n\n units = normalizeUnits(units);\n\n if (units === 'month' || units === 'quarter' || units === 'year') {\n days = this._days + milliseconds / 864e5;\n months = this._months + daysToMonths(days);\n switch (units) {\n case 'month':\n return months;\n case 'quarter':\n return months / 3;\n case 'year':\n return months / 12;\n }\n } else {\n // handle milliseconds separately because of floating point math errors (issue #1867)\n days = this._days + Math.round(monthsToDays(this._months));\n switch (units) {\n case 'week':\n return days / 7 + milliseconds / 6048e5;\n case 'day':\n return days + milliseconds / 864e5;\n case 'hour':\n return days * 24 + milliseconds / 36e5;\n case 'minute':\n return days * 1440 + milliseconds / 6e4;\n case 'second':\n return days * 86400 + milliseconds / 1000;\n // Math.floor prevents floating point math errors here\n case 'millisecond':\n return Math.floor(days * 864e5) + milliseconds;\n default:\n throw new Error('Unknown unit ' + units);\n }\n }\n }\n\n function makeAs(alias) {\n return function () {\n return this.as(alias);\n };\n }\n\n var asMilliseconds = makeAs('ms'),\n asSeconds = makeAs('s'),\n asMinutes = makeAs('m'),\n asHours = makeAs('h'),\n asDays = makeAs('d'),\n asWeeks = makeAs('w'),\n asMonths = makeAs('M'),\n asQuarters = makeAs('Q'),\n asYears = makeAs('y'),\n valueOf$1 = asMilliseconds;\n\n function clone$1() {\n return createDuration(this);\n }\n\n function get$2(units) {\n units = normalizeUnits(units);\n return this.isValid() ? this[units + 's']() : NaN;\n }\n\n function makeGetter(name) {\n return function () {\n return this.isValid() ? this._data[name] : NaN;\n };\n }\n\n var milliseconds = makeGetter('milliseconds'),\n seconds = makeGetter('seconds'),\n minutes = makeGetter('minutes'),\n hours = makeGetter('hours'),\n days = makeGetter('days'),\n months = makeGetter('months'),\n years = makeGetter('years');\n\n function weeks() {\n return absFloor(this.days() / 7);\n }\n\n var round = Math.round,\n thresholds = {\n ss: 44, // a few seconds to seconds\n s: 45, // seconds to minute\n m: 45, // minutes to hour\n h: 22, // hours to day\n d: 26, // days to month/week\n w: null, // weeks to month\n M: 11, // months to year\n };\n\n // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize\n function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {\n return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);\n }\n\n function relativeTime$1(posNegDuration, withoutSuffix, thresholds, locale) {\n var duration = createDuration(posNegDuration).abs(),\n seconds = round(duration.as('s')),\n minutes = round(duration.as('m')),\n hours = round(duration.as('h')),\n days = round(duration.as('d')),\n months = round(duration.as('M')),\n weeks = round(duration.as('w')),\n years = round(duration.as('y')),\n a =\n (seconds <= thresholds.ss && ['s', seconds]) ||\n (seconds < thresholds.s && ['ss', seconds]) ||\n (minutes <= 1 && ['m']) ||\n (minutes < thresholds.m && ['mm', minutes]) ||\n (hours <= 1 && ['h']) ||\n (hours < thresholds.h && ['hh', hours]) ||\n (days <= 1 && ['d']) ||\n (days < thresholds.d && ['dd', days]);\n\n if (thresholds.w != null) {\n a =\n a ||\n (weeks <= 1 && ['w']) ||\n (weeks < thresholds.w && ['ww', weeks]);\n }\n a = a ||\n (months <= 1 && ['M']) ||\n (months < thresholds.M && ['MM', months]) ||\n (years <= 1 && ['y']) || ['yy', years];\n\n a[2] = withoutSuffix;\n a[3] = +posNegDuration > 0;\n a[4] = locale;\n return substituteTimeAgo.apply(null, a);\n }\n\n // This function allows you to set the rounding function for relative time strings\n function getSetRelativeTimeRounding(roundingFunction) {\n if (roundingFunction === undefined) {\n return round;\n }\n if (typeof roundingFunction === 'function') {\n round = roundingFunction;\n return true;\n }\n return false;\n }\n\n // This function allows you to set a threshold for relative time strings\n function getSetRelativeTimeThreshold(threshold, limit) {\n if (thresholds[threshold] === undefined) {\n return false;\n }\n if (limit === undefined) {\n return thresholds[threshold];\n }\n thresholds[threshold] = limit;\n if (threshold === 's') {\n thresholds.ss = limit - 1;\n }\n return true;\n }\n\n function humanize(argWithSuffix, argThresholds) {\n if (!this.isValid()) {\n return this.localeData().invalidDate();\n }\n\n var withSuffix = false,\n th = thresholds,\n locale,\n output;\n\n if (typeof argWithSuffix === 'object') {\n argThresholds = argWithSuffix;\n argWithSuffix = false;\n }\n if (typeof argWithSuffix === 'boolean') {\n withSuffix = argWithSuffix;\n }\n if (typeof argThresholds === 'object') {\n th = Object.assign({}, thresholds, argThresholds);\n if (argThresholds.s != null && argThresholds.ss == null) {\n th.ss = argThresholds.s - 1;\n }\n }\n\n locale = this.localeData();\n output = relativeTime$1(this, !withSuffix, th, locale);\n\n if (withSuffix) {\n output = locale.pastFuture(+this, output);\n }\n\n return locale.postformat(output);\n }\n\n var abs$1 = Math.abs;\n\n function sign(x) {\n return (x > 0) - (x < 0) || +x;\n }\n\n function toISOString$1() {\n // for ISO strings we do not use the normal bubbling rules:\n // * milliseconds bubble up until they become hours\n // * days do not bubble at all\n // * months bubble up until they become years\n // This is because there is no context-free conversion between hours and days\n // (think of clock changes)\n // and also not between days and months (28-31 days per month)\n if (!this.isValid()) {\n return this.localeData().invalidDate();\n }\n\n var seconds = abs$1(this._milliseconds) / 1000,\n days = abs$1(this._days),\n months = abs$1(this._months),\n minutes,\n hours,\n years,\n s,\n total = this.asSeconds(),\n totalSign,\n ymSign,\n daysSign,\n hmsSign;\n\n if (!total) {\n // this is the same as C#'s (Noda) and python (isodate)...\n // but not other JS (goog.date)\n return 'P0D';\n }\n\n // 3600 seconds -> 60 minutes -> 1 hour\n minutes = absFloor(seconds / 60);\n hours = absFloor(minutes / 60);\n seconds %= 60;\n minutes %= 60;\n\n // 12 months -> 1 year\n years = absFloor(months / 12);\n months %= 12;\n\n // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js\n s = seconds ? seconds.toFixed(3).replace(/\\.?0+$/, '') : '';\n\n totalSign = total < 0 ? '-' : '';\n ymSign = sign(this._months) !== sign(total) ? '-' : '';\n daysSign = sign(this._days) !== sign(total) ? '-' : '';\n hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : '';\n\n return (\n totalSign +\n 'P' +\n (years ? ymSign + years + 'Y' : '') +\n (months ? ymSign + months + 'M' : '') +\n (days ? daysSign + days + 'D' : '') +\n (hours || minutes || seconds ? 'T' : '') +\n (hours ? hmsSign + hours + 'H' : '') +\n (minutes ? hmsSign + minutes + 'M' : '') +\n (seconds ? hmsSign + s + 'S' : '')\n );\n }\n\n var proto$2 = Duration.prototype;\n\n proto$2.isValid = isValid$1;\n proto$2.abs = abs;\n proto$2.add = add$1;\n proto$2.subtract = subtract$1;\n proto$2.as = as;\n proto$2.asMilliseconds = asMilliseconds;\n proto$2.asSeconds = asSeconds;\n proto$2.asMinutes = asMinutes;\n proto$2.asHours = asHours;\n proto$2.asDays = asDays;\n proto$2.asWeeks = asWeeks;\n proto$2.asMonths = asMonths;\n proto$2.asQuarters = asQuarters;\n proto$2.asYears = asYears;\n proto$2.valueOf = valueOf$1;\n proto$2._bubble = bubble;\n proto$2.clone = clone$1;\n proto$2.get = get$2;\n proto$2.milliseconds = milliseconds;\n proto$2.seconds = seconds;\n proto$2.minutes = minutes;\n proto$2.hours = hours;\n proto$2.days = days;\n proto$2.weeks = weeks;\n proto$2.months = months;\n proto$2.years = years;\n proto$2.humanize = humanize;\n proto$2.toISOString = toISOString$1;\n proto$2.toString = toISOString$1;\n proto$2.toJSON = toISOString$1;\n proto$2.locale = locale;\n proto$2.localeData = localeData;\n\n proto$2.toIsoString = deprecate(\n 'toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)',\n toISOString$1\n );\n proto$2.lang = lang;\n\n // FORMATTING\n\n addFormatToken('X', 0, 0, 'unix');\n addFormatToken('x', 0, 0, 'valueOf');\n\n // PARSING\n\n addRegexToken('x', matchSigned);\n addRegexToken('X', matchTimestamp);\n addParseToken('X', function (input, array, config) {\n config._d = new Date(parseFloat(input) * 1000);\n });\n addParseToken('x', function (input, array, config) {\n config._d = new Date(toInt(input));\n });\n\n //! moment.js\n\n hooks.version = '2.30.1';\n\n setHookCallback(createLocal);\n\n hooks.fn = proto;\n hooks.min = min;\n hooks.max = max;\n hooks.now = now;\n hooks.utc = createUTC;\n hooks.unix = createUnix;\n hooks.months = listMonths;\n hooks.isDate = isDate;\n hooks.locale = getSetGlobalLocale;\n hooks.invalid = createInvalid;\n hooks.duration = createDuration;\n hooks.isMoment = isMoment;\n hooks.weekdays = listWeekdays;\n hooks.parseZone = createInZone;\n hooks.localeData = getLocale;\n hooks.isDuration = isDuration;\n hooks.monthsShort = listMonthsShort;\n hooks.weekdaysMin = listWeekdaysMin;\n hooks.defineLocale = defineLocale;\n hooks.updateLocale = updateLocale;\n hooks.locales = listLocales;\n hooks.weekdaysShort = listWeekdaysShort;\n hooks.normalizeUnits = normalizeUnits;\n hooks.relativeTimeRounding = getSetRelativeTimeRounding;\n hooks.relativeTimeThreshold = getSetRelativeTimeThreshold;\n hooks.calendarFormat = getCalendarFormat;\n hooks.prototype = proto;\n\n // currently HTML5 input type only supports 24-hour formats\n hooks.HTML5_FMT = {\n DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm', // <input type=\"datetime-local\" />\n DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss', // <input type=\"datetime-local\" step=\"1\" />\n DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS', // <input type=\"datetime-local\" step=\"0.001\" />\n DATE: 'YYYY-MM-DD', // <input type=\"date\" />\n TIME: 'HH:mm', // <input type=\"time\" />\n TIME_SECONDS: 'HH:mm:ss', // <input type=\"time\" step=\"1\" />\n TIME_MS: 'HH:mm:ss.SSS', // <input type=\"time\" step=\"0.001\" />\n WEEK: 'GGGG-[W]WW', // <input type=\"week\" />\n MONTH: 'YYYY-MM', // <input type=\"month\" />\n };\n\n return hooks;\n\n})));\n","import { c as _c } from \"react/compiler-runtime\";\nimport { useEffect, useRef } from \"react\";\nimport { UseMutationResult } from \"@tanstack/react-query\";\nimport { isUsable } from \"@pol-studios/utils\";\nexport interface UseMutationSuccessOptions {\n successMessage?: string;\n entityName?: string;\n enabled?: boolean;\n onSuccess?: () => void;\n}\n\n/**\n * Hook to automatically show success feedback after successful mutations\n * Works with both React Native and Web platforms\n */\nexport function useMutationSuccess(mutation, t0) {\n const $ = _c(10);\n let t1;\n if ($[0] !== t0) {\n t1 = t0 === undefined ? {} : t0;\n $[0] = t0;\n $[1] = t1;\n } else {\n t1 = $[1];\n }\n const options = t1;\n const {\n successMessage,\n entityName,\n enabled: t2,\n onSuccess\n } = options;\n const enabled = t2 === undefined ? true : t2;\n const previousSuccessRef = useRef(false);\n const previousDataRef = useRef(undefined);\n let t3;\n let t4;\n if ($[2] !== enabled || $[3] !== entityName || $[4] !== mutation.data || $[5] !== mutation.isSuccess || $[6] !== onSuccess || $[7] !== successMessage) {\n t3 = () => {\n if (!enabled) {\n return;\n }\n const isSuccess = mutation.isSuccess;\n const hasNewData = mutation.data !== previousDataRef.current;\n if (isSuccess && hasNewData && !previousSuccessRef.current) {\n const message = successMessage || getDefaultSuccessMessage(entityName);\n if (typeof window !== \"undefined\") {\n try {\n const {\n toast\n } = require(\"@pol-studios/hooks\");\n toast.toast({\n title: \"Success\",\n description: message\n });\n } catch {}\n } else {\n try {\n const {\n Toast\n } = require(\"toastify-react-native\");\n Toast.success(message);\n } catch {}\n }\n onSuccess?.();\n }\n previousSuccessRef.current = isSuccess;\n previousDataRef.current = mutation.data;\n };\n t4 = [mutation.isSuccess, mutation.data, enabled, successMessage, entityName, onSuccess];\n $[2] = enabled;\n $[3] = entityName;\n $[4] = mutation.data;\n $[5] = mutation.isSuccess;\n $[6] = onSuccess;\n $[7] = successMessage;\n $[8] = t3;\n $[9] = t4;\n } else {\n t3 = $[8];\n t4 = $[9];\n }\n useEffect(t3, t4);\n return mutation;\n}\n\n/**\n * Generates a default success message based on entity name\n */\nfunction getDefaultSuccessMessage(entityName?: string): string {\n if (!entityName) {\n return \"Saved successfully\";\n }\n return `${entityName} saved successfully`;\n}\n\n/**\n * Hook for React Native that uses native toast/alert system\n * @deprecated Use useMutationSuccess instead - it auto-detects platform\n */\nexport function useMutationSuccessRN(mutation, t0) {\n const $ = _c(2);\n let t1;\n if ($[0] !== t0) {\n t1 = t0 === undefined ? {} : t0;\n $[0] = t0;\n $[1] = t1;\n } else {\n t1 = $[1];\n }\n const options = t1;\n return useMutationSuccess(mutation, options);\n}","/**\n * V3 Data Layer Adapter Types\n *\n * Extended types for the adapter layer that complement the core DataAdapter interface.\n * These types support the Strategy pattern for routing queries to different backends.\n */\n\nimport type { QueryOptions, DatabaseSchema } from \"../core/types\";\n\n// =============================================================================\n// Query Result Types\n// =============================================================================\n\n/**\n * Result from adapter query operations.\n * Extends the basic array with optional count for pagination.\n */\nexport interface AdapterQueryResult<T> {\n /** The queried data */\n data: T[];\n /** Total count of matching records (for pagination) */\n count?: number;\n}\n\n// =============================================================================\n// Table-Aware Data Adapter Interface\n// =============================================================================\n\n/**\n * Extended adapter interface that accepts table name for multi-table routing.\n *\n * This interface is used by the AdapterRegistry to provide table-aware adapters\n * that can handle multiple tables with a single adapter instance.\n *\n * Differences from core DataAdapter:\n * - Includes table name parameter in all methods\n * - Returns AdapterQueryResult with optional count\n * - Supports optional subscribe method for reactivity\n */\nexport interface TableDataAdapter {\n /**\n * Unique identifier for the adapter type\n */\n readonly name: string;\n\n // ===========================================================================\n // Query Operations\n // ===========================================================================\n\n /**\n * Execute a query and return results\n *\n * @param table - The table name to query\n * @param options - Query options (select, where, orderBy, limit, offset)\n * @returns Promise resolving to query results with optional count\n */\n query<T>(table: string, options: QueryOptions): Promise<AdapterQueryResult<T>>;\n\n /**\n * Query a single record by ID\n *\n * @param table - The table name to query\n * @param id - The record ID\n * @param options - Optional query options (mainly for select)\n * @returns Promise resolving to the record or null if not found\n */\n queryById?<T>(table: string, id: string, options?: Pick<QueryOptions, \"select\">): Promise<T | null>;\n\n /**\n * Subscribe to real-time changes on a query.\n * Not all adapters support this - it's optional.\n *\n * @param table - The table name to watch\n * @param options - Query options to filter what to watch\n * @param callback - Function called with updated data\n * @returns Unsubscribe function\n */\n subscribe?<T>(table: string, options: QueryOptions, callback: (data: T[]) => void): () => void;\n\n // ===========================================================================\n // Mutation Operations\n // ===========================================================================\n\n /**\n * Insert a new record\n *\n * @param table - The table name\n * @param data - The data to insert\n * @returns Promise resolving to the inserted record\n */\n insert<T>(table: string, data: Partial<T>): Promise<T>;\n\n /**\n * Update an existing record by ID\n *\n * @param table - The table name\n * @param id - The record ID to update\n * @param data - The data to update\n * @returns Promise resolving to the updated record\n */\n update<T>(table: string, id: string, data: Partial<T>): Promise<T>;\n\n /**\n * Upsert (insert or update) a record\n * If the record has an ID and exists, it will be updated.\n * Otherwise, a new record will be inserted.\n *\n * @param table - The table name\n * @param data - The data to upsert\n * @returns Promise resolving to the upserted record\n */\n upsert<T>(table: string, data: Partial<T>): Promise<T>;\n\n /**\n * Delete a record by ID\n *\n * @param table - The table name\n * @param id - The record ID to delete\n * @returns Promise that resolves when deletion is complete\n */\n delete(table: string, id: string): Promise<void>;\n}\n\n// =============================================================================\n// Adapter Factory Types\n// =============================================================================\n\n/**\n * Configuration for creating an adapter\n */\nexport interface AdapterConfig {\n /**\n * The strategy type to create\n */\n strategy: \"powersync\" | \"supabase\" | \"cached\" | \"hybrid\";\n\n /**\n * Additional strategy-specific configuration\n */\n [key: string]: unknown;\n}\n\n/**\n * Factory interface for creating adapters\n */\nexport interface AdapterFactory {\n /**\n * Create a new adapter instance based on configuration\n *\n * @param config - Adapter configuration\n * @returns The created adapter instance\n */\n create(config: AdapterConfig): TableDataAdapter;\n}\n\n// =============================================================================\n// Adapter Capability Types\n// =============================================================================\n\n/**\n * Describes the capabilities of an adapter\n */\nexport interface AdapterCapabilities {\n /**\n * Whether the adapter supports real-time subscriptions\n */\n supportsSubscribe: boolean;\n\n /**\n * Whether the adapter works offline\n */\n supportsOffline: boolean;\n\n /**\n * Whether the adapter caches data locally\n */\n supportsCache: boolean;\n\n /**\n * Whether the adapter syncs data bidirectionally\n */\n supportsSync: boolean;\n}\n\n/**\n * Extended adapter interface with capability reporting\n */\nexport interface CapableDataAdapter extends TableDataAdapter {\n /**\n * Get the capabilities of this adapter\n */\n readonly capabilities: AdapterCapabilities;\n}\n\n// =============================================================================\n// Adapter Initialization Types\n// =============================================================================\n\n/**\n * Dependencies required to initialize adapters.\n * Uses 'unknown' type for external dependencies to allow proper typing\n * when concrete implementations are provided.\n */\nexport interface AdapterDependencies {\n /**\n * PowerSync database instance\n * Will be typed as PowerSyncDatabase when PowerSync is integrated\n */\n powerSync: unknown;\n\n /**\n * Supabase client instance\n * Will be typed as SupabaseClient when imported\n */\n supabase: unknown;\n\n /**\n * TanStack Query client for caching\n * Will be typed as QueryClient when imported\n */\n queryClient: unknown;\n\n /**\n * Database schema for relationship resolution\n */\n schema: DatabaseSchema;\n}\n\n// =============================================================================\n// Adapter Strategy Constants\n// =============================================================================\n\n/**\n * String literals for adapter strategy types\n */\nexport const ADAPTER_STRATEGIES = {\n POWERSYNC: \"powersync\",\n SUPABASE: \"supabase\",\n CACHED: \"cached\",\n HYBRID: \"hybrid\",\n AUTO: \"auto\"\n} as const;\n\n// =============================================================================\n// Auto-Detection Strategy Types\n// =============================================================================\n\n// Re-export AutoStrategy from core types for convenience\nexport type { AutoStrategy } from \"../core/types\";\n\n/**\n * Type for adapter strategy values\n */\nexport type AdapterStrategyType = (typeof ADAPTER_STRATEGIES)[keyof typeof ADAPTER_STRATEGIES];","import type { TableDataAdapter, AdapterQueryResult } from \"./types\";\nimport type { QueryOptions } from \"../core/types\";\n\n// Debug flag for sync tracking internals - disabled by default to avoid log spam\n// Enable by setting DEBUG_SYNC_TRACKING_VERBOSE = true when debugging sync issues\nconst DEBUG_SYNC_TRACKING_VERBOSE = false;\nfunction debugLog(message: string, ...args: unknown[]) {\n if (DEBUG_SYNC_TRACKING_VERBOSE) {\n console.log(`[SyncTracker] ${message}`, ...args);\n }\n}\n\n/**\n * Minimal interface for sync tracking callbacks.\n * Intentionally decoupled from the full SyncControl to keep\n * the adapter layer independent of React context types.\n */\nexport interface SyncTracker {\n addPendingMutation: (entry: {\n id: string;\n table: string;\n op: string;\n opData?: unknown;\n createdAt?: Date;\n }) => void;\n removePendingMutation: (id: string) => void;\n}\n\n/**\n * Decorator that wraps a TableDataAdapter and automatically\n * tracks pending mutations via SyncTracker callbacks.\n *\n * Read operations (query, queryById, subscribe) are passed\n * through without modification. Mutation operations (insert,\n * update, upsert, delete) are wrapped with addPendingMutation\n * before the write and removePendingMutation on error.\n *\n * NOTE: The syncTracker can be null/undefined during initialization\n * due to React's useEffect timing. The adapter handles this gracefully\n * by using optional chaining - mutations still work, just without tracking.\n */\nexport class SyncTrackingAdapter implements TableDataAdapter {\n readonly name: string;\n constructor(private readonly inner: TableDataAdapter, private readonly syncTracker: SyncTracker | null | undefined) {\n this.name = `sync-tracking(${inner.name})`;\n debugLog('Created with syncTracker:', syncTracker ? 'defined' : 'undefined');\n }\n\n // ── Pass-through: Read Operations ──────────────────────────\n\n query<T>(table: string, options: QueryOptions): Promise<AdapterQueryResult<T>> {\n return this.inner.query<T>(table, options);\n }\n queryById<T>(table: string, id: string, options?: Pick<QueryOptions, \"select\">): Promise<T | null> {\n return this.inner.queryById ? this.inner.queryById<T>(table, id, options) : Promise.resolve(null);\n }\n subscribe<T>(table: string, options: QueryOptions, callback: (data: T[]) => void): () => void {\n return this.inner.subscribe ? this.inner.subscribe<T>(table, options, callback) : () => {};\n }\n\n // ── Tracked: Mutation Operations ───────────────────────────\n\n async insert<T>(table: string, data: Partial<T>): Promise<T> {\n const entityId = (data as {\n id?: string;\n }).id || crypto.randomUUID();\n const dataWithId = {\n ...data,\n id: entityId\n } as Partial<T>;\n debugLog('insert:', {\n table,\n entityId,\n hasSyncTracker: !!this.syncTracker\n });\n\n // Use optional chaining - syncTracker may be undefined during initialization\n this.syncTracker?.addPendingMutation({\n id: entityId,\n table,\n op: \"PUT\",\n opData: dataWithId,\n createdAt: new Date()\n });\n try {\n return await this.inner.insert<T>(table, dataWithId);\n } catch (error) {\n this.syncTracker?.removePendingMutation(entityId);\n throw error;\n }\n }\n async update<T>(table: string, id: string, data: Partial<T>): Promise<T> {\n debugLog('update:', {\n table,\n id,\n hasSyncTracker: !!this.syncTracker\n });\n\n // Use optional chaining - syncTracker may be undefined during initialization\n this.syncTracker?.addPendingMutation({\n id,\n table,\n op: \"PATCH\",\n opData: data,\n createdAt: new Date()\n });\n try {\n return await this.inner.update<T>(table, id, data);\n } catch (error) {\n this.syncTracker?.removePendingMutation(id);\n throw error;\n }\n }\n async upsert<T>(table: string, data: Partial<T>): Promise<T> {\n const entityId = (data as {\n id?: string;\n }).id || crypto.randomUUID();\n const dataWithId = {\n ...data,\n id: entityId\n } as Partial<T>;\n debugLog('upsert:', {\n table,\n entityId,\n hasSyncTracker: !!this.syncTracker\n });\n\n // Use optional chaining - syncTracker may be undefined during initialization\n this.syncTracker?.addPendingMutation({\n id: entityId,\n table,\n op: \"PUT\",\n opData: dataWithId,\n createdAt: new Date()\n });\n try {\n return await this.inner.upsert<T>(table, dataWithId);\n } catch (error) {\n this.syncTracker?.removePendingMutation(entityId);\n throw error;\n }\n }\n async delete(table: string, id: string): Promise<void> {\n debugLog('delete:', {\n table,\n id,\n hasSyncTracker: !!this.syncTracker\n });\n\n // Use optional chaining - syncTracker may be undefined during initialization\n this.syncTracker?.addPendingMutation({\n id,\n table,\n op: \"DELETE\",\n createdAt: new Date()\n });\n try {\n return await this.inner.delete(table, id);\n } catch (error) {\n this.syncTracker?.removePendingMutation(id);\n throw error;\n }\n }\n\n /** Get the underlying unwrapped adapter */\n getInnerAdapter(): TableDataAdapter {\n return this.inner;\n }\n}","/**\n * V3 Data Layer Adapter Registry\n *\n * Factory that creates and manages adapter instances based on table configuration.\n * Uses lazy initialization to create adapters on first access.\n */\n\nimport type { DataLayerConfig, TableStrategy, DatabaseSchema, AutoStrategy, PowerSyncStrategy, HybridStrategy } from \"../core/types\";\nimport type { TableDataAdapter, AdapterDependencies } from \"./types\";\nimport { AdapterAutoDetector, type AutoDetectionResult } from \"./auto-detector\";\nimport { SyncTrackingAdapter, type SyncTracker } from \"./sync-tracking-adapter\";\n\n// =============================================================================\n// Alias Utilities\n// =============================================================================\n\n/**\n * Strip schema prefix from a table name.\n *\n * Examples:\n * - \"core.Profile\" → \"Profile\"\n * - \"billing.Invoice\" → \"Invoice\"\n * - \"Profile\" → \"Profile\" (no schema, unchanged)\n *\n * @param tableName - Table name, optionally schema-qualified\n * @returns Table name without schema prefix\n */\nexport function stripSchemaPrefix(tableName: string): string {\n if (!tableName.includes('.')) {\n return tableName;\n }\n return tableName.split('.')[1];\n}\n\n/**\n * Generate a PowerSync alias from a schema-qualified table name.\n * Use this when there are conflicting table names across schemas.\n *\n * Examples:\n * - \"core.Profile\" → \"CoreProfile\"\n * - \"billing.Invoice\" → \"BillingInvoice\"\n * - \"Profile\" → \"Profile\" (no schema, unchanged)\n *\n * @param tableName - Table name, optionally schema-qualified\n * @returns PascalCase alias suitable for PowerSync schema\n */\nexport function generatePowerSyncAlias(tableName: string): string {\n if (!tableName.includes('.')) {\n return tableName;\n }\n const [schema, table] = tableName.split('.');\n // Capitalize first letter of schema\n const pascalSchema = schema.charAt(0).toUpperCase() + schema.slice(1);\n return `${pascalSchema}${table}`;\n}\n\n/**\n * Get the PowerSync alias for a table from its strategy config.\n *\n * Resolution order:\n * 1. Explicit alias in strategy config → use it\n * 2. Schema-qualified name → strip schema (e.g., \"core.Profile\" → \"Profile\")\n * 3. Unqualified name → use as-is\n *\n * Note: If you have conflicting table names (e.g., both \"core.Profile\" and \"public.Profile\"),\n * you MUST set an explicit `alias` in the config for at least one of them.\n *\n * @param tableName - Table name (may be schema-qualified)\n * @param strategy - Table strategy config\n * @returns The alias to use in PowerSync schema\n */\nexport function getPowerSyncAlias(tableName: string, strategy: TableStrategy | undefined): string {\n // Check for explicit alias in strategy\n if (strategy && (strategy.strategy === 'powersync' || strategy.strategy === 'hybrid')) {\n const typedStrategy = strategy as PowerSyncStrategy | HybridStrategy;\n if (typedStrategy.alias) {\n return typedStrategy.alias;\n }\n }\n\n // Default: strip schema prefix (e.g., \"core.Profile\" → \"Profile\")\n return stripSchemaPrefix(tableName);\n}\n\n// =============================================================================\n// Adapter Registry Class\n// =============================================================================\n\n/**\n * Registry that manages and provides adapters based on table configuration.\n *\n * The registry:\n * - Stores configuration for table strategies\n * - Lazily creates adapters when first accessed\n * - Caches created adapters for reuse\n * - Provides default fallback for unconfigured tables\n *\n * Usage:\n * ```typescript\n * const registry = createAdapterRegistry(config);\n *\n * // Later, when providers initialize:\n * registry.setPowerSyncAdapter(powerSyncAdapter);\n * registry.setSupabaseAdapter(supabaseAdapter);\n *\n * // Get adapter for a table:\n * const adapter = registry.getAdapter(\"Project\");\n * ```\n */\nexport class AdapterRegistry {\n /**\n * Cache of created adapters by table name\n */\n private adapters: Map<string, TableDataAdapter> = new Map();\n\n /**\n * PowerSync adapter instance (set during initialization or lazily via getter)\n */\n private powerSyncAdapter: TableDataAdapter | null = null;\n\n /**\n * Getter function to retrieve PowerSync database instance.\n * Used for lazy initialization when PowerSync becomes available after registry creation.\n */\n private powerSyncGetter: (() => unknown) | null = null;\n\n /**\n * Factory function to create PowerSync adapter from database instance.\n * Set via setPowerSyncGetter along with the getter.\n */\n private powerSyncAdapterFactory: ((db: unknown) => TableDataAdapter) | null = null;\n\n /**\n * Supabase adapter instance (set during initialization)\n */\n private supabaseAdapter: TableDataAdapter | null = null;\n\n /**\n * Cached adapter instance (wraps Supabase with TanStack Query)\n */\n private cachedAdapter: TableDataAdapter | null = null;\n\n /**\n * Dependencies for creating adapters\n */\n private deps: AdapterDependencies | null = null;\n\n /**\n * Whether the registry has been initialized with adapters\n */\n private _isInitialized = false;\n\n /**\n * Auto-detector instance for automatic backend selection\n */\n private autoDetector: AdapterAutoDetector | null = null;\n\n /**\n * Sync tracker for mutation tracking\n */\n private syncTracker: SyncTracker | null = null;\n\n /**\n * Sync tracking adapter that wraps PowerSync adapter\n */\n private syncTrackingAdapter: TableDataAdapter | null = null;\n\n /**\n * Listeners for backend change events\n */\n private backendChangeListeners: Set<(backend: \"powersync\" | \"supabase\") => void> = new Set();\n\n /**\n * Last auto-detection result for debugging and status\n */\n private lastDetectionResult: AutoDetectionResult | null = null;\n\n /**\n * Create a new adapter registry\n *\n * @param config - Data layer configuration with table strategies\n */\n constructor(private config: DataLayerConfig) {}\n\n // ===========================================================================\n // Initialization\n // ===========================================================================\n\n /**\n * Check if the registry has been initialized\n */\n get isInitialized(): boolean {\n return this._isInitialized;\n }\n\n /**\n * Initialize the registry with dependencies.\n * Called by DataLayerProvider when PowerSync and Supabase are ready.\n *\n * @param deps - Dependencies needed to create adapters\n */\n initialize(deps: AdapterDependencies): void {\n this.deps = deps;\n\n // Actual adapter instantiation is deferred to setters\n // This allows Wave 2 agents to provide concrete implementations\n this._isInitialized = true;\n }\n\n /**\n * Set the PowerSync adapter instance\n *\n * @param adapter - PowerSync adapter implementation\n */\n setPowerSyncAdapter(adapter: TableDataAdapter): void {\n this.powerSyncAdapter = adapter;\n // If sync tracker already exists, wrap the new adapter\n if (this.syncTracker) {\n this.syncTrackingAdapter = new SyncTrackingAdapter(adapter, this.syncTracker);\n } else {\n this.syncTrackingAdapter = null;\n }\n // Clear adapter cache so next getAdapter call creates fresh adapters using PowerSync\n // This handles the race condition where adapters were cached with Supabase fallback\n // before PowerSync became available\n this.adapters.clear();\n }\n\n /**\n * Set a getter function for lazy PowerSync adapter initialization.\n *\n * This allows the registry to lazily create the PowerSync adapter when\n * PowerSync becomes available, rather than requiring it at initialization time.\n * Solves race conditions where queries/mutations run before PowerSync is ready.\n *\n * @param getter - Function that returns the PowerSync database instance (or null if not ready)\n * @param factory - Function that creates a TableDataAdapter from the database instance\n */\n setPowerSyncGetter(getter: () => unknown, factory: (db: unknown) => TableDataAdapter): void {\n this.powerSyncGetter = getter;\n this.powerSyncAdapterFactory = factory;\n }\n\n /**\n * Ensure PowerSync adapter is initialized if available.\n *\n * Checks the getter (if set) and lazily creates the adapter if PowerSync\n * is now available. Also updates the auto-detector with the new reference.\n *\n * @returns true if PowerSync adapter is available, false otherwise\n */\n private ensurePowerSyncAdapter(): boolean {\n // Already have adapter\n if (this.powerSyncAdapter) {\n return true;\n }\n\n // No getter configured - can't lazily initialize\n if (!this.powerSyncGetter || !this.powerSyncAdapterFactory) {\n return false;\n }\n\n // Try to get PowerSync instance\n const db = this.powerSyncGetter();\n if (!db) {\n return false;\n }\n\n // Create and set the adapter\n const adapter = this.powerSyncAdapterFactory(db);\n this.setPowerSyncAdapter(adapter);\n\n // Also update the auto-detector if it exists\n if (this.autoDetector) {\n // Cast to the expected type - the auto-detector will validate\n this.autoDetector.setPowerSyncDb(db as import(\"../query/executor\").PowerSyncDatabase);\n }\n return true;\n }\n\n /**\n * Set the sync tracker for mutation tracking.\n * When set, write operations on PowerSync tables will\n * automatically track pending mutations.\n *\n * NOTE: This also clears the adapter cache to ensure any\n * previously cached adapters (which may have been created\n * before the sync tracker was available) are recreated\n * with the new sync tracker on next access.\n */\n setSyncTracker(tracker: SyncTracker): void {\n this.syncTracker = tracker;\n // If PowerSync adapter already exists, wrap it immediately\n if (this.powerSyncAdapter) {\n this.syncTrackingAdapter = new SyncTrackingAdapter(this.powerSyncAdapter, tracker);\n }\n // Clear adapter cache so next getAdapter call creates fresh wrapped adapters\n // This handles the race condition where adapters were cached before\n // the sync tracker was set (due to useEffect timing)\n this.adapters.clear();\n }\n\n /**\n * Set the Supabase adapter instance\n *\n * @param adapter - Supabase adapter implementation\n */\n setSupabaseAdapter(adapter: TableDataAdapter): void {\n this.supabaseAdapter = adapter;\n }\n\n /**\n * Set the Cached adapter instance\n *\n * @param adapter - Cached adapter implementation\n */\n setCachedAdapter(adapter: TableDataAdapter): void {\n this.cachedAdapter = adapter;\n }\n\n /**\n * Initialize auto-detection with a detector instance\n *\n * @param detector - The auto-detector to use\n */\n initializeAutoDetection(detector: AdapterAutoDetector): void {\n this.autoDetector = detector;\n\n // Listen for backend changes\n detector.addListener(result => {\n this.lastDetectionResult = result;\n this.notifyBackendChange(result.recommendedBackend);\n });\n }\n\n // ===========================================================================\n // Adapter Access\n // ===========================================================================\n\n /**\n * Get the appropriate adapter for a table based on configuration.\n *\n * The adapter is selected based on the table's strategy in config.tables:\n * - \"powersync\": Returns PowerSyncAdapter\n * - \"supabase\": Returns SupabaseAdapter\n * - \"cached\": Returns CachedAdapter (wrapping Supabase)\n * - \"hybrid\": Returns HybridAdapter (combining PowerSync + Cached)\n * - \"auto\": Uses auto-detection to select the best backend\n *\n * For tables not in config, defaults to auto-detection if available,\n * otherwise falls back to SupabaseAdapter.\n *\n * Supports schema-qualified table names:\n * - \"core.Profile\" looks up config[\"core.Profile\"] first, then config[\"Profile\"]\n * - Auto-generates PowerSync alias as \"CoreProfile\" if not explicitly set\n *\n * @param table - The table name (may be schema-qualified like \"core.Profile\")\n * @param operation - The operation type: 'read' uses fallback logic during init, 'write' always uses PowerSync for powersync tables\n * @returns The appropriate adapter for the table\n * @throws Error if adapters are not initialized\n */\n getAdapter(table: string, _operation: 'read' | 'write' = 'read'): TableDataAdapter {\n // Lazily initialize PowerSync adapter if available via getter\n // This solves race conditions where queries run before PowerSync is ready\n this.ensurePowerSyncAdapter();\n\n // Look up strategy - try full name first, then unqualified for backward compat\n const tableWithoutSchema = table.includes('.') ? table.split('.')[1] : table;\n const strategy = this.config.tables[table] ?? this.config.tables[tableWithoutSchema];\n\n // Handle unconfigured tables or explicit auto strategy\n if (!strategy || strategy.strategy === \"auto\") {\n // IMPORTANT: Check if table exists in PowerSync schema before auto-detection\n // If the table is NOT configured for PowerSync sync, we must use Supabase\n // to avoid \"no such table\" SQLite errors when auto-detection recommends PowerSync\n if (this.powerSyncAdapter) {\n const powerSyncTableKeys = this.getPowerSyncTableKeys();\n // Check if table matches any config key (schema-qualified or unqualified)\n const isConfigured = powerSyncTableKeys.some(key => key === table || key === tableWithoutSchema || key.includes('.') && key.split('.')[1] === tableWithoutSchema);\n if (!isConfigured) {\n // Table is not in PowerSync schema - must use Supabase\n if (this.supabaseAdapter) {\n if (typeof __DEV__ !== \"undefined\" && __DEV__) {\n console.warn(`[AdapterRegistry] Table \"${table}\" is not configured for PowerSync sync. ` + `Using Supabase fallback.`);\n }\n return this.supabaseAdapter;\n }\n throw new Error(`Table \"${table}\" is not configured for PowerSync sync and Supabase adapter is not available. ` + \"Either add this table to the PowerSync schema or initialize the Supabase adapter.\");\n }\n }\n\n // Auto-strategy: use auto-detection for both reads and writes\n // getAutoAdapter() handles fallback to Supabase when PowerSync isn't ready\n return this.getAutoAdapter(strategy as AutoStrategy | undefined, table);\n }\n\n // PowerSync tables use PowerSync when available, Supabase fallback\n if (strategy.strategy === \"powersync\") {\n if (this.powerSyncAdapter) {\n return this.syncTrackingAdapter ?? this.powerSyncAdapter;\n }\n // PowerSync not ready yet - use Supabase temporarily\n if (this.supabaseAdapter) {\n return this.supabaseAdapter;\n }\n }\n\n // Check if adapter already exists for this table (only cache after sync complete)\n const existing = this.adapters.get(table);\n if (existing) {\n return existing;\n }\n\n // Create adapter lazily based on strategy\n const adapter = this.createAdapter(strategy);\n this.adapters.set(table, adapter);\n return adapter;\n }\n\n /**\n * Get the PowerSync adapter directly\n *\n * @returns PowerSync adapter or null if not initialized\n */\n getPowerSyncAdapter(): TableDataAdapter | null {\n return this.powerSyncAdapter;\n }\n\n /**\n * Get the Supabase adapter directly\n *\n * @returns Supabase adapter or null if not initialized\n */\n getSupabaseAdapter(): TableDataAdapter | null {\n return this.supabaseAdapter;\n }\n\n /**\n * Get the Cached adapter directly\n *\n * @returns Cached adapter or null if not initialized\n */\n getCachedAdapter(): TableDataAdapter | null {\n return this.cachedAdapter;\n }\n\n /**\n * Get all configured table names\n *\n * @returns Array of table names with explicit strategy configuration\n */\n getConfiguredTables(): string[] {\n return Object.keys(this.config.tables);\n }\n\n /**\n * Get the strategy for a specific table\n *\n * @param table - The table name (may include schema prefix like \"core.Profile\")\n * @returns The table strategy or undefined if not configured\n */\n getTableStrategy(table: string): TableStrategy | undefined {\n // Try full name first (e.g., \"core.Profile\"), then unqualified for backward compat\n const tableWithoutSchema = table.includes('.') ? table.split('.')[1] : table;\n return this.config.tables[table] ?? this.config.tables[tableWithoutSchema];\n }\n\n /**\n * Check if a table uses PowerSync strategy\n *\n * @param table - The table name (may include schema prefix like \"core.Profile\")\n * @returns True if table uses PowerSync, Hybrid, or Auto strategy\n */\n usesPowerSync(table: string): boolean {\n const strategy = this.getTableStrategy(table);\n return strategy?.strategy === \"powersync\" || strategy?.strategy === \"hybrid\" || strategy?.strategy === \"auto\";\n }\n\n /**\n * Get all table config keys that use PowerSync (may be schema-qualified)\n *\n * @returns Array of config keys using PowerSync, Hybrid, or Auto strategy\n */\n getPowerSyncTableKeys(): string[] {\n return Object.entries(this.config.tables).filter(([_, strategy]) => strategy.strategy === \"powersync\" || strategy.strategy === \"hybrid\" || strategy.strategy === \"auto\").map(([key]) => key);\n }\n\n /**\n * Get all tables that use PowerSync (returns aliases for PowerSync schema)\n *\n * @returns Array of PowerSync table aliases\n */\n getPowerSyncTables(): string[] {\n return Object.entries(this.config.tables).filter(([_, strategy]) => strategy.strategy === \"powersync\" || strategy.strategy === \"hybrid\" || strategy.strategy === \"auto\").map(([key, strategy]) => getPowerSyncAlias(key, strategy));\n }\n\n /**\n * Get the PowerSync alias for a table.\n * Uses explicit alias from config if set, otherwise auto-generates.\n *\n * @param table - Table name (may be schema-qualified)\n * @returns The alias to use in PowerSync schema\n */\n getTableAlias(table: string): string {\n const strategy = this.getTableStrategy(table);\n // Determine which config key matched\n const tableWithoutSchema = table.includes('.') ? table.split('.')[1] : table;\n const configKey = this.config.tables[table] ? table : tableWithoutSchema;\n return getPowerSyncAlias(configKey, strategy);\n }\n\n // ===========================================================================\n // Auto-Detection Methods\n // ===========================================================================\n\n /**\n * Get adapter using auto-detection.\n *\n * Simple logic: PowerSync first, Supabase fallback.\n * Once PowerSync is initialized, always use it for offline-first behavior.\n */\n private getAutoAdapter(_strategy?: AutoStrategy, _table?: string): TableDataAdapter {\n // PowerSync available → use it (offline-first)\n if (this.powerSyncAdapter) {\n return this.syncTrackingAdapter ?? this.powerSyncAdapter;\n }\n\n // PowerSync not ready yet - use Supabase as temporary fallback\n // Supabase will fail naturally if offline, no need to check\n if (this.supabaseAdapter) {\n return this.supabaseAdapter;\n }\n throw new Error(\"No adapters available. Initialize PowerSync or Supabase.\");\n }\n\n /**\n * Subscribe to backend changes\n *\n * @param callback - Function called when recommended backend changes\n * @returns Unsubscribe function\n */\n onBackendChange(callback: (backend: \"powersync\" | \"supabase\") => void): () => void {\n this.backendChangeListeners.add(callback);\n return () => {\n this.backendChangeListeners.delete(callback);\n };\n }\n\n /**\n * Notify listeners of backend change\n *\n * @param backend - The new recommended backend\n */\n private notifyBackendChange(backend: \"powersync\" | \"supabase\"): void {\n this.backendChangeListeners.forEach(callback => {\n try {\n callback(backend);\n } catch (error) {\n console.error(\"Error in backend change listener:\", error);\n }\n });\n }\n\n /**\n * Get the last auto-detection result\n *\n * @returns Last detection result or null if never detected\n */\n getLastDetectionResult(): AutoDetectionResult | null {\n return this.lastDetectionResult;\n }\n\n /**\n * Get the auto-detector instance\n *\n * @returns Auto-detector instance or null if not initialized\n */\n getAutoDetector(): AdapterAutoDetector | null {\n return this.autoDetector;\n }\n\n // ===========================================================================\n // Private Methods\n // ===========================================================================\n\n /**\n * Create an adapter based on the strategy type\n *\n * @param strategy - The table strategy configuration\n * @returns The created adapter\n * @throws Error if the required base adapter is not initialized\n */\n private createAdapter(strategy: TableStrategy): TableDataAdapter {\n switch (strategy.strategy) {\n case \"powersync\":\n if (!this.powerSyncAdapter) {\n // PowerSync not ready yet - fall back to Supabase if available\n if (this.supabaseAdapter) {\n if (typeof __DEV__ !== \"undefined\" && __DEV__) {\n console.warn(`[AdapterRegistry] PowerSync not ready, falling back to Supabase`);\n }\n return this.supabaseAdapter;\n }\n throw new Error(\"PowerSync adapter not initialized and Supabase not available. \" + \"Ensure PowerSyncAdapter is set before accessing PowerSync tables.\");\n }\n // Return sync tracking adapter when available for consistent behavior\n return this.syncTrackingAdapter ?? this.powerSyncAdapter;\n case \"supabase\":\n if (!this.supabaseAdapter) {\n throw new Error(\"Supabase adapter not initialized. \" + \"Ensure SupabaseAdapter is set before accessing Supabase tables.\");\n }\n return this.supabaseAdapter;\n case \"cached\":\n // CachedAdapter wraps SupabaseAdapter with TanStack Query caching\n // Will be fully implemented when CachedAdapter class exists (Wave 2)\n if (this.cachedAdapter) {\n return this.cachedAdapter;\n }\n throw new Error(\"CachedAdapter not yet implemented. \" + \"This feature will be available in Wave 2. \" + \"For now, use 'supabase' strategy as a fallback.\");\n case \"hybrid\":\n // HybridAdapter combines PowerSync (for recent data) with Cached (for overflow)\n // Will be fully implemented when HybridAdapter class exists (Wave 2)\n throw new Error(\"HybridAdapter not yet implemented. \" + \"This feature will be available in Wave 2. \" + \"For now, use 'powersync' or 'supabase' strategy as a fallback.\");\n default:\n // Fallback to Supabase for unknown strategies\n if (!this.supabaseAdapter) {\n throw new Error(\"Supabase adapter not initialized. \" + \"Ensure SupabaseAdapter is set before accessing tables.\");\n }\n if (typeof __DEV__ !== \"undefined\" && __DEV__) {\n console.warn(`[AdapterRegistry] Unknown strategy \"${(strategy as TableStrategy).strategy}\". ` + `Using Supabase fallback.`);\n }\n return this.supabaseAdapter;\n }\n }\n\n // ===========================================================================\n // Utility Methods\n // ===========================================================================\n\n /**\n * Clear all cached adapters.\n * Useful when configuration changes and adapters need to be recreated.\n */\n clearCache(): void {\n this.adapters.clear();\n }\n\n /**\n * Reset the registry to uninitialized state.\n * Used during cleanup or testing.\n */\n reset(): void {\n this.adapters.clear();\n this.powerSyncAdapter = null;\n this.powerSyncGetter = null;\n this.powerSyncAdapterFactory = null;\n this.supabaseAdapter = null;\n this.cachedAdapter = null;\n this.deps = null;\n this._isInitialized = false;\n this.autoDetector = null;\n this.backendChangeListeners.clear();\n this.lastDetectionResult = null;\n this.syncTracker = null;\n this.syncTrackingAdapter = null;\n }\n\n /**\n * Dispose all adapters and clean up resources.\n * Called when the DataLayerProvider unmounts.\n */\n dispose(): void {\n this.reset();\n }\n\n /**\n * Get debug information about the registry state\n */\n getDebugInfo(): {\n isInitialized: boolean;\n hasPowerSync: boolean;\n hasSupabase: boolean;\n hasCached: boolean;\n cachedAdapterCount: number;\n configuredTableCount: number;\n powerSyncTables: string[];\n hasAutoDetector: boolean;\n lastDetectionResult: AutoDetectionResult | null;\n } {\n return {\n isInitialized: this._isInitialized,\n hasPowerSync: this.powerSyncAdapter !== null,\n hasSupabase: this.supabaseAdapter !== null,\n hasCached: this.cachedAdapter !== null,\n cachedAdapterCount: this.adapters.size,\n configuredTableCount: Object.keys(this.config.tables).length,\n powerSyncTables: this.getPowerSyncTables(),\n hasAutoDetector: this.autoDetector !== null,\n lastDetectionResult: this.lastDetectionResult\n };\n }\n}\n\n// =============================================================================\n// Factory Function\n// =============================================================================\n\n/**\n * Create a new adapter registry\n *\n * @param config - Data layer configuration\n * @returns A new AdapterRegistry instance\n *\n * @example\n * ```typescript\n * const config: DataLayerConfig = {\n * schema: databaseSchema,\n * connections: { ... },\n * tables: {\n * Project: { strategy: \"powersync\", syncScope: \"activeProject\" },\n * AuditLog: { strategy: \"supabase\" },\n * Report: { strategy: \"cached\", cacheTime: 60000 },\n * },\n * scopes: { ... },\n * defaults: { syncMode: \"live\" },\n * };\n *\n * const registry = createAdapterRegistry(config);\n *\n * // In provider:\n * registry.setPowerSyncAdapter(new PowerSyncAdapter(db, schema));\n * registry.setSupabaseAdapter(new SupabaseAdapter(supabase));\n *\n * // In hooks:\n * const adapter = registry.getAdapter(\"Project\"); // Returns PowerSyncAdapter\n * ```\n */\nexport function createAdapterRegistry(config: DataLayerConfig): AdapterRegistry {\n return new AdapterRegistry(config);\n}","/**\n * Adapter Auto-Detector\n *\n * Detects available backends (PowerSync, Supabase) at runtime and recommends\n * the best one to use based on availability and configuration preferences.\n *\n * This enables the V3 data layer to automatically select the optimal backend\n * for offline-first or online-first experiences.\n */\n\nimport type { SupabaseClient } from \"@supabase/supabase-js\";\nimport type { PowerSyncDatabase } from \"../query/executor\";\n\n// React Native global for dev mode detection\ndeclare const __DEV__: boolean | undefined;\n\n// =============================================================================\n// Enums\n// =============================================================================\n\n/**\n * Status of a backend adapter\n */\nexport enum BackendStatus {\n /** Backend is available and ready to use */\n AVAILABLE = \"available\",\n /** Backend is initializing (e.g., PowerSync syncing) */\n INITIALIZING = \"initializing\",\n /** Backend is not available */\n UNAVAILABLE = \"unavailable\",\n}\n\n// =============================================================================\n// Types\n// =============================================================================\n\n/**\n * Result of auto-detection\n */\nexport interface AutoDetectionResult {\n /** PowerSync availability status */\n powerSyncStatus: BackendStatus;\n /** Supabase availability status */\n supabaseStatus: BackendStatus;\n /** Recommended backend to use */\n recommendedBackend: \"powersync\" | \"supabase\";\n /** Whether device is online */\n isOnline: boolean;\n /** Reason for recommendation */\n reason: string;\n}\n\n/**\n * Sync status information from PowerSync\n */\nexport interface SyncStatusInfo {\n /** Whether PowerSync has completed at least one full sync */\n hasSynced: boolean;\n /** Whether connected to PowerSync service */\n connected: boolean;\n /** Whether currently connecting */\n connecting: boolean;\n /** Network connectivity status from platform adapter (NetInfo on React Native) */\n isOnline?: boolean;\n}\n\n/**\n * Options for auto-detection\n */\nexport interface AutoDetectorOptions {\n /** Prefer PowerSync when available (default: true) */\n preferPowerSync?: boolean;\n /** Timeout for status checks in ms (default: 1000) */\n statusCheckTimeout?: number;\n /**\n * Use Supabase for queries until PowerSync completes initial sync.\n * When true, queries return online data while syncing.\n * @default true\n */\n useOnlineUntilSynced?: boolean;\n}\n\n/**\n * Listener for backend change events\n */\nexport type BackendChangeListener = (result: AutoDetectionResult) => void;\n\n// =============================================================================\n// AdapterAutoDetector Class\n// =============================================================================\n\n/**\n * Detects available backends and recommends the best one to use.\n *\n * The auto-detector checks for PowerSync and Supabase availability and\n * makes intelligent recommendations based on:\n * - Backend availability\n * - Network connectivity\n * - User preferences (preferPowerSync option)\n *\n * @example\n * ```typescript\n * const detector = new AdapterAutoDetector(powerSyncDb, supabaseClient, {\n * preferPowerSync: true,\n * });\n *\n * const result = detector.detect();\n * console.log(`Using ${result.recommendedBackend}: ${result.reason}`);\n * ```\n */\nexport class AdapterAutoDetector {\n private options: Required<AutoDetectorOptions>;\n private listeners: Set<BackendChangeListener> = new Set();\n private lastResult: AutoDetectionResult | null = null;\n private syncStatus: SyncStatusInfo | null = null;\n constructor(private powerSyncDb: PowerSyncDatabase | null, private supabase: SupabaseClient | null, options: AutoDetectorOptions = {}) {\n this.options = {\n preferPowerSync: options.preferPowerSync ?? true,\n statusCheckTimeout: options.statusCheckTimeout ?? 1000,\n useOnlineUntilSynced: options.useOnlineUntilSynced ?? true\n };\n }\n\n /**\n * Update the PowerSync database reference.\n * Called when PowerSync becomes available after initial construction.\n *\n * @param db - PowerSync database instance or null\n */\n setPowerSyncDb(db: PowerSyncDatabase | null): void {\n this.powerSyncDb = db;\n // Re-detect to update backend recommendation\n if (db) {\n this.detect();\n }\n }\n\n /**\n * Update the sync status from PowerSync.\n * Called when sync status changes to re-evaluate backend recommendation.\n *\n * @param status - Current sync status or null if not available\n */\n updateSyncStatus(status: SyncStatusInfo | null): void {\n const hadSynced = this.syncStatus?.hasSynced;\n const hasSyncedNow = status?.hasSynced;\n const changed = hadSynced !== hasSyncedNow;\n this.syncStatus = status;\n if (changed) {\n // Re-detect to potentially switch backends\n this.detect();\n }\n }\n\n /**\n * Get current sync status.\n * @returns Current sync status or null\n */\n getSyncStatus(): SyncStatusInfo | null {\n return this.syncStatus;\n }\n\n // ===========================================================================\n // Main Detection Methods\n // ===========================================================================\n\n /**\n * Detect backend availability and recommend best option.\n *\n * The detection logic follows this priority:\n * 1. If preferPowerSync is true and PowerSync is available, use PowerSync\n * 2. If PowerSync is initializing and online with Supabase available, use Supabase temporarily\n * 3. If online with Supabase available, use Supabase\n * 4. If offline but PowerSync available, use PowerSync (offline mode)\n * 5. If offline and PowerSync exists (even if initializing), use PowerSync local data\n * 6. Default to Supabase as fallback\n *\n * @returns Detection result with recommendation and reasoning\n */\n detect(): AutoDetectionResult {\n const result = this.performDetection();\n\n // Store last result and notify listeners if changed\n if (this.hasResultChanged(result)) {\n this.lastResult = result;\n this.notifyListeners(result);\n }\n return result;\n }\n\n /**\n * Detect backend availability WITHOUT notifying listeners.\n *\n * This method is safe to call during React's render phase because it does not\n * trigger state updates in other components. Use this method when you need to\n * check backend status synchronously during render (e.g., in getAdapter()).\n *\n * The regular detect() method with listener notifications should only be called\n * from useEffect or event handlers to avoid the React warning:\n * \"Cannot update a component while rendering a different component\"\n *\n * @returns Detection result with recommendation and reasoning\n */\n detectSilent(): AutoDetectionResult {\n const result = this.performDetection();\n // Update lastResult to keep hasResultChanged() accurate, but do NOT notify listeners\n this.lastResult = result;\n return result;\n }\n\n /**\n * Internal detection logic shared by detect() and detectSilent().\n * @private\n */\n private performDetection(): AutoDetectionResult {\n const powerSyncStatus = this.detectPowerSyncStatus();\n const supabaseStatus = this.detectSupabaseStatus();\n const isOnline = this.checkOnlineStatus();\n let recommendedBackend: \"powersync\" | \"supabase\";\n let reason: string;\n\n // Decision logic\n if (this.options.preferPowerSync && powerSyncStatus === BackendStatus.AVAILABLE) {\n recommendedBackend = \"powersync\";\n reason = \"PowerSync is available and preferred for offline-first experience\";\n } else if (powerSyncStatus === BackendStatus.INITIALIZING && isOnline && supabaseStatus === BackendStatus.AVAILABLE) {\n recommendedBackend = \"supabase\";\n reason = \"PowerSync initial sync in progress; using Supabase for fresh data\";\n } else if (supabaseStatus === BackendStatus.AVAILABLE && isOnline) {\n recommendedBackend = \"supabase\";\n reason = \"Using Supabase direct connection\";\n } else if (powerSyncStatus === BackendStatus.AVAILABLE) {\n // Offline but PowerSync available\n recommendedBackend = \"powersync\";\n reason = \"Offline mode using PowerSync local data\";\n } else if (!isOnline && this.powerSyncDb) {\n // Offline with PowerSync database available (even if initial sync incomplete)\n // Use local data - some data is better than no data\n recommendedBackend = \"powersync\";\n reason = \"Offline mode - using PowerSync local data (initial sync may be incomplete)\";\n } else {\n // Fallback - try Supabase even if not confirmed available\n recommendedBackend = \"supabase\";\n reason = \"No confirmed available backend; defaulting to Supabase\";\n }\n return {\n powerSyncStatus,\n supabaseStatus,\n recommendedBackend,\n isOnline,\n reason\n };\n }\n\n /**\n * Check if PowerSync is available.\n *\n * PowerSync status depends on:\n * 1. Database instance exists\n * 2. If useOnlineUntilSynced is true, also checks if initial sync completed\n *\n * @returns PowerSync backend status\n */\n detectPowerSyncStatus(): BackendStatus {\n if (!this.powerSyncDb) {\n return BackendStatus.UNAVAILABLE;\n }\n try {\n // Check if db instance has required methods\n if (typeof this.powerSyncDb.getAll !== \"function\") {\n return BackendStatus.INITIALIZING;\n }\n\n // If useOnlineUntilSynced is enabled, treat as INITIALIZING until\n // we have sync status AND hasSynced is true.\n // IMPORTANT: If syncStatus is null, we haven't received status yet,\n // so assume NOT synced (INITIALIZING) to trigger Supabase fallback.\n if (this.options.useOnlineUntilSynced) {\n if (!this.syncStatus || !this.syncStatus.hasSynced) {\n return BackendStatus.INITIALIZING;\n }\n }\n return BackendStatus.AVAILABLE;\n } catch {\n return BackendStatus.INITIALIZING;\n }\n }\n\n /**\n * Check if Supabase is available.\n *\n * Supabase is considered available if we have a client instance.\n * The actual network connectivity is checked separately via checkOnlineStatus().\n *\n * @returns Supabase backend status\n */\n detectSupabaseStatus(): BackendStatus {\n if (!this.supabase) {\n return BackendStatus.UNAVAILABLE;\n }\n\n // Supabase client exists, assume available (actual network check is async)\n // The from() method is a good indicator that the client is properly initialized\n try {\n if (typeof this.supabase.from === \"function\") {\n return BackendStatus.AVAILABLE;\n }\n return BackendStatus.UNAVAILABLE;\n } catch {\n return BackendStatus.UNAVAILABLE;\n }\n }\n\n /**\n * Check if device is online.\n *\n * Prefers the sync status's isOnline property if available (from React Native NetInfo).\n * Falls back to navigator.onLine in browser environments.\n * Returns false by default for non-browser environments (React Native, Node.js, etc.)\n * to ensure offline-first behavior works correctly.\n *\n * @returns Whether the device has network connectivity\n */\n checkOnlineStatus(): boolean {\n // Use sync status isOnline if available (from React Native NetInfo via platform adapter)\n if (this.syncStatus?.isOnline !== undefined) {\n return this.syncStatus.isOnline;\n }\n\n // Browser environment fallback\n if (typeof window !== \"undefined\" && typeof navigator !== \"undefined\") {\n return navigator.onLine;\n }\n\n // For React Native and other non-browser environments, default to offline-safe behavior.\n // This ensures mutations route to PowerSync local storage instead of hanging on Supabase.\n return false;\n }\n\n // ===========================================================================\n // Instance Management Methods\n // ===========================================================================\n\n /**\n * Update PowerSync instance (e.g., when it becomes available).\n *\n * @param db - New PowerSync database instance or null\n */\n setPowerSync(db: PowerSyncDatabase | null): void {\n this.powerSyncDb = db;\n }\n\n /**\n * Update Supabase instance.\n *\n * @param supabase - New Supabase client instance or null\n */\n setSupabase(supabase: SupabaseClient | null): void {\n this.supabase = supabase;\n }\n\n /**\n * Get current PowerSync instance.\n *\n * @returns Current PowerSync database instance or null\n */\n getPowerSync(): PowerSyncDatabase | null {\n return this.powerSyncDb;\n }\n\n /**\n * Get current Supabase instance.\n *\n * @returns Current Supabase client instance or null\n */\n getSupabase(): SupabaseClient | null {\n return this.supabase;\n }\n\n // ===========================================================================\n // Options Management\n // ===========================================================================\n\n /**\n * Update detector options.\n *\n * @param options - New options to merge with existing\n */\n setOptions(options: Partial<AutoDetectorOptions>): void {\n this.options = {\n ...this.options,\n ...options\n };\n }\n\n /**\n * Get current detector options.\n *\n * @returns Current detector options\n */\n getOptions(): Required<AutoDetectorOptions> {\n return {\n ...this.options\n };\n }\n\n // ===========================================================================\n // Listener Management\n // ===========================================================================\n\n /**\n * Add a listener for backend change events.\n *\n * @param listener - Callback to invoke when detection result changes\n * @returns Function to remove the listener\n */\n addListener(listener: BackendChangeListener): () => void {\n this.listeners.add(listener);\n return () => this.listeners.delete(listener);\n }\n\n /**\n * Remove a listener for backend change events.\n *\n * @param listener - Listener to remove\n */\n removeListener(listener: BackendChangeListener): void {\n this.listeners.delete(listener);\n }\n\n /**\n * Get the last detection result.\n *\n * @returns Last detection result or null if never detected\n */\n getLastResult(): AutoDetectionResult | null {\n return this.lastResult;\n }\n\n // ===========================================================================\n // Private Helper Methods\n // ===========================================================================\n\n /**\n * Check if the detection result has changed from the last result.\n */\n private hasResultChanged(result: AutoDetectionResult): boolean {\n if (!this.lastResult) {\n return true;\n }\n return this.lastResult.powerSyncStatus !== result.powerSyncStatus || this.lastResult.supabaseStatus !== result.supabaseStatus || this.lastResult.recommendedBackend !== result.recommendedBackend || this.lastResult.isOnline !== result.isOnline;\n }\n\n /**\n * Notify all listeners of a detection result change.\n */\n private notifyListeners(result: AutoDetectionResult): void {\n // Log backend switches in dev mode (React Native __DEV__ or NODE_ENV)\n const isDev = typeof __DEV__ !== \"undefined\" ? __DEV__ : process.env.NODE_ENV !== \"production\";\n if (isDev) {\n const prevBackend = this.lastResult?.recommendedBackend;\n if (prevBackend && prevBackend !== result.recommendedBackend) {\n console.log(`[DataLayer] Backend switched: ${prevBackend} → ${result.recommendedBackend}`, `| Reason: ${result.reason}`);\n }\n // Log when using Supabase fallback (not PowerSync)\n if (result.recommendedBackend === \"supabase\" && this.options.preferPowerSync) {\n console.log(`[DataLayer] Using online fallback (Supabase)`, `| PowerSync: ${result.powerSyncStatus}`, `| Online: ${result.isOnline}`, `| Reason: ${result.reason}`);\n }\n }\n\n // Convert to array to avoid Set iteration issues with older targets\n Array.from(this.listeners).forEach(listener => {\n try {\n listener(result);\n } catch (error) {\n console.error(\"Error in backend change listener:\", error);\n }\n });\n }\n}\n\n// =============================================================================\n// Factory Function\n// =============================================================================\n\n/**\n * Create an AdapterAutoDetector instance.\n *\n * @param powerSyncDb - PowerSync database instance or null\n * @param supabase - Supabase client instance or null\n * @param options - Detection options\n * @returns New AdapterAutoDetector instance\n *\n * @example\n * ```typescript\n * const detector = createAdapterAutoDetector(powerSyncDb, supabaseClient, {\n * preferPowerSync: true,\n * statusCheckTimeout: 2000,\n * });\n *\n * const { recommendedBackend, reason } = detector.detect();\n * ```\n */\nexport function createAdapterAutoDetector(powerSyncDb: PowerSyncDatabase | null, supabase: SupabaseClient | null, options?: AutoDetectorOptions): AdapterAutoDetector {\n return new AdapterAutoDetector(powerSyncDb, supabase, options);\n}","/**\n * Supabase Query Utilities\n *\n * Shared utilities for Supabase query operations used by both\n * SupabaseQueryExecutor and SupabaseAdapter.\n */\n\nimport type { SupabaseClient } from \"@supabase/supabase-js\";\nimport type { WhereClause, WhereOperators } from \"../core/types\";\n\n// =============================================================================\n// Constants\n// =============================================================================\n\n/**\n * Default PostgreSQL schema name when not specified\n */\nexport const DEFAULT_SCHEMA = \"public\";\n\n/**\n * Default primary key column name\n */\nexport const DEFAULT_PK_COLUMN = \"id\";\n\n// =============================================================================\n// Type Definitions\n// =============================================================================\n\n/**\n * Supabase filter builder type - uses any to avoid complex generics\n * that would require knowledge of the full database schema type.\n *\n * This type represents the return type of a Supabase select() call,\n * which provides filter methods like .eq(), .in(), .gt(), etc.\n */\nexport type PostgrestFilterBuilder = ReturnType<ReturnType<SupabaseClient[\"from\"]>[\"select\"]>;\n\n// =============================================================================\n// Utility Functions\n// =============================================================================\n\n/**\n * Parse a table identifier to extract schema and table name.\n *\n * Handles schema-qualified names like \"core.Profile\" and returns the\n * schema and table name as separate values. If no schema is specified,\n * defaults to \"public\".\n *\n * @param table - The table name, optionally schema-qualified (e.g., \"users\" or \"core.Profile\")\n * @returns Object with schema (defaults to \"public\") and tableName\n *\n * @example\n * ```typescript\n * parseTableIdentifier(\"core.Profile\")\n * // => { schema: \"core\", tableName: \"Profile\" }\n *\n * parseTableIdentifier(\"users\")\n * // => { schema: \"public\", tableName: \"users\" }\n *\n * parseTableIdentifier(\"my_schema.nested.table\")\n * // => { schema: \"my_schema\", tableName: \"nested.table\" }\n * ```\n */\nexport function parseTableIdentifier(table: string): {\n schema: string;\n tableName: string;\n} {\n if (table.includes(\".\")) {\n const [schema, ...rest] = table.split(\".\");\n return {\n schema,\n tableName: rest.join(\".\")\n };\n }\n return {\n schema: DEFAULT_SCHEMA,\n tableName: table\n };\n}\n\n/**\n * Apply where clause filters to a Supabase query.\n *\n * Converts WhereClause to Supabase filter methods:\n * - Direct value (string/number/boolean): `.eq(field, value)`\n * - `null`: `.is(field, null)`\n * - `{ in: [...] }`: `.in(field, values)`\n * - `{ gt: n }`: `.gt(field, n)`\n * - `{ gte: n }`: `.gte(field, n)`\n * - `{ lt: n }`: `.lt(field, n)`\n * - `{ lte: n }`: `.lte(field, n)`\n * - `{ like: s }`: `.ilike(field, s)` (case-insensitive)\n * - `{ is: null }`: `.is(field, null)`\n * - `{ neq: v }`: `.neq(field, v)` or `.not(field, \"is\", null)` for null\n * - `{ notIn: [...] }`: `.not(field, \"in\", \"(values)\")`\n *\n * @param query - The Supabase query builder (PostgrestFilterBuilder)\n * @param where - The where clause to apply\n * @returns The query with filters applied\n *\n * @example\n * ```typescript\n * const query = supabase.from(\"users\").select(\"*\");\n * const filtered = applyWhereClause(query, {\n * status: \"active\",\n * age: { gte: 18 },\n * role: { in: [\"admin\", \"moderator\"] }\n * });\n * ```\n */\nexport function applyWhereClause(query: PostgrestFilterBuilder, where: WhereClause): PostgrestFilterBuilder {\n for (const [field, condition] of Object.entries(where)) {\n if (condition === null) {\n // Direct null value\n query = query.is(field, null);\n } else if (typeof condition === \"string\" || typeof condition === \"number\" || typeof condition === \"boolean\") {\n // Direct value comparison\n query = query.eq(field, condition);\n } else if (typeof condition === \"object\") {\n // WhereOperators object\n const operators = condition as WhereOperators;\n if (operators.in !== undefined) {\n query = query.in(field, operators.in);\n }\n if (operators.gt !== undefined) {\n query = query.gt(field, operators.gt);\n }\n if (operators.gte !== undefined) {\n query = query.gte(field, operators.gte);\n }\n if (operators.lt !== undefined) {\n query = query.lt(field, operators.lt);\n }\n if (operators.lte !== undefined) {\n query = query.lte(field, operators.lte);\n }\n if (operators.like !== undefined) {\n // Use ilike for case-insensitive matching (more common use case)\n query = query.ilike(field, operators.like);\n }\n if (operators.is !== undefined) {\n // operators.is should be null\n query = query.is(field, null);\n }\n if (operators.neq !== undefined) {\n if (operators.neq === null) {\n // NOT NULL\n query = query.not(field, \"is\", null);\n } else {\n query = query.neq(field, operators.neq);\n }\n }\n if (operators.notIn !== undefined) {\n // Use not filter with in\n query = query.not(field, \"in\", `(${operators.notIn.join(\",\")})`);\n }\n }\n }\n return query;\n}","/**\n * Supabase Query Executor\n *\n * Orchestrates query execution for Supabase when explicit FK syntax is used.\n * This is the Supabase equivalent of QueryExecutor for PowerSync.\n *\n * When explicit FK syntax (e.g., `Sender!senderId:core.Profile(*)`) is detected:\n * 1. Parse the select string\n * 2. Query parent table via Supabase\n * 3. Extract IDs from parent records\n * 4. Query related tables via Supabase (in parallel for sibling relations)\n * 5. Merge results using ResultJoiner\n * 6. Return combined data\n */\n\nimport type { SupabaseClient } from \"@supabase/supabase-js\";\nimport type { DatabaseSchema, QueryOptions, ResolvedRelationship, SelectRelation } from \"../core/types\";\nimport { parseSelect } from \"./select-parser\";\nimport { ResultJoiner } from \"./result-joiner\";\nimport { type PostgrestFilterBuilder, parseTableIdentifier, applyWhereClause } from \"./supabase-utils\";\n\n/**\n * Query executor for Supabase that handles explicit FK relations.\n *\n * This class provides QueryExecutor-like functionality for Supabase,\n * enabling support for explicit FK syntax which PostgREST doesn't natively support.\n *\n * @example\n * const executor = new SupabaseQueryExecutor(supabase, schema);\n *\n * // Query with explicit FK relation\n * const messages = await executor.execute<Message>(\"chat.Message\", {\n * select: \"*, Sender!senderId:core.Profile(*)\",\n * where: { conversationId: \"123\" }\n * });\n */\nexport class SupabaseQueryExecutor {\n private joiner: ResultJoiner;\n constructor(private supabase: SupabaseClient, private schema: DatabaseSchema) {\n this.joiner = new ResultJoiner();\n }\n\n /**\n * Execute a query and return results.\n *\n * @param table - The table to query (optionally schema-qualified, e.g., \"chat.Message\")\n * @param options - Query options including select, where, orderBy, limit, offset\n * @returns Object with data array and optional count\n */\n async execute<T>(table: string, options: QueryOptions = {}): Promise<{\n data: T[];\n count?: number;\n }> {\n // Parse the select string\n const parsed = parseSelect(options.select ?? \"*\");\n\n // Build columns for parent query (exclude relations with explicit FK)\n const parentSelect = this.buildParentSelect(parsed.columns, parsed.relations);\n\n // Execute parent query\n const {\n schema: schemaName,\n tableName\n } = parseTableIdentifier(table);\n const parentResult = await this.queryTable<Record<string, unknown>>(schemaName, tableName, parentSelect, options);\n const parentRecords = parentResult.data;\n\n // If no records or no relations, return early\n if (parentRecords.length === 0 || parsed.relations.length === 0) {\n return {\n data: parentRecords as T[],\n count: parentResult.count\n };\n }\n\n // Query and join relations\n const result = await this.queryAndJoinRelations(table, parentRecords, parsed.relations);\n return {\n data: result as T[],\n count: parentResult.count\n };\n }\n\n /**\n * Execute a query for a single record by ID.\n *\n * @param table - The table to query (optionally schema-qualified)\n * @param id - The record ID\n * @param options - Query options (only select is used)\n * @returns Single record or null\n */\n async executeById<T>(table: string, id: string, options: Pick<QueryOptions, \"select\"> = {}): Promise<T | null> {\n const result = await this.execute<T>(table, {\n ...options,\n where: {\n id\n },\n limit: 1\n });\n return result.data[0] ?? null;\n }\n\n /**\n * Build the select string for the parent query.\n * For relations with explicit FK, we only need the FK column from the parent.\n * Standard relations are passed through to Supabase's PostgREST.\n */\n private buildParentSelect(columns: \"*\" | {\n name: string;\n alias?: string;\n }[], relations: SelectRelation[]): string {\n const parts: string[] = [];\n\n // Add columns\n if (columns === \"*\") {\n parts.push(\"*\");\n } else {\n for (const col of columns) {\n if (col.alias) {\n parts.push(`${col.alias}:${col.name}`);\n } else {\n parts.push(col.name);\n }\n }\n }\n\n // For relations without explicit FK, pass them to PostgREST\n // For relations with explicit FK, we don't include them here (handled separately)\n for (const rel of relations) {\n if (!rel.explicitFk) {\n // Standard relation - let PostgREST handle it\n const innerSelect = this.buildNestedSelect(rel);\n if (rel.alias) {\n parts.push(`${rel.alias}:${rel.name}(${innerSelect})`);\n } else {\n parts.push(`${rel.name}(${innerSelect})`);\n }\n }\n }\n return parts.join(\", \");\n }\n\n /**\n * Build the select string for a nested relation (recursive).\n */\n private buildNestedSelect(rel: SelectRelation): string {\n const parts: string[] = [];\n\n // Add columns\n if (rel.columns === \"*\") {\n parts.push(\"*\");\n } else {\n for (const col of rel.columns) {\n if (col.alias) {\n parts.push(`${col.alias}:${col.name}`);\n } else {\n parts.push(col.name);\n }\n }\n }\n\n // Add nested relations (non-explicit FK only)\n for (const nested of rel.relations) {\n if (!nested.explicitFk) {\n const innerSelect = this.buildNestedSelect(nested);\n if (nested.alias) {\n parts.push(`${nested.alias}:${nested.name}(${innerSelect})`);\n } else {\n parts.push(`${nested.name}(${innerSelect})`);\n }\n }\n }\n return parts.join(\", \");\n }\n\n /**\n * Query a table via Supabase.\n */\n private async queryTable<T>(schemaName: string, tableName: string, select: string, options: QueryOptions): Promise<{\n data: T[];\n count?: number;\n }> {\n let query = this.supabase.schema(schemaName).from(tableName).select(select, {\n count: \"exact\"\n }) as unknown as PostgrestFilterBuilder;\n\n // Apply where clause\n if (options.where) {\n query = applyWhereClause(query as any, options.where) as any;\n }\n\n // Apply ordering\n if (options.orderBy && options.orderBy.length > 0) {\n for (const order of options.orderBy) {\n query = query.order(order.field, {\n ascending: order.direction === \"asc\"\n });\n }\n }\n\n // Apply pagination\n if (options.limit !== undefined && options.offset !== undefined) {\n query = query.range(options.offset, options.offset + options.limit - 1);\n } else if (options.limit !== undefined) {\n query = query.limit(options.limit);\n }\n const {\n data,\n error,\n count\n } = await query;\n if (error) {\n throw new Error(`Supabase query error on ${schemaName}.${tableName}: ${error.message}`);\n }\n return {\n data: data as T[] ?? [],\n count: count ?? undefined\n };\n }\n\n /**\n * Query related records using an IN filter.\n */\n private async queryRelatedRecords<T>(schemaName: string, tableName: string, select: string, filterColumn: string, filterValues: (string | number)[]): Promise<T[]> {\n if (filterValues.length === 0) {\n return [];\n }\n const {\n data,\n error\n } = await this.supabase.schema(schemaName).from(tableName).select(select).in(filterColumn, filterValues);\n if (error) {\n throw new Error(`Supabase relation query error on ${schemaName}.${tableName}: ${error.message}`);\n }\n return data as T[] ?? [];\n }\n\n /**\n * Query and join relations onto parent records.\n *\n * @param parentTable - The parent table name\n * @param parentRecords - Parent records to add relations to\n * @param relations - Relations to query and join\n * @returns Parent records with relations attached\n */\n private async queryAndJoinRelations(parentTable: string, parentRecords: Record<string, unknown>[], relations: SelectRelation[]): Promise<Record<string, unknown>[]> {\n // Filter to only explicit FK relations (standard relations already handled by PostgREST)\n const explicitFkRelations = relations.filter(r => r.explicitFk);\n if (explicitFkRelations.length === 0) {\n return parentRecords;\n }\n\n // Pre-extract unique IDs for each column to avoid duplicate iteration\n const idCache = new Map<string, (string | number)[]>();\n const getIdsForColumn = (column: string): (string | number)[] => {\n if (!idCache.has(column)) {\n idCache.set(column, this.joiner.extractUniqueValues(parentRecords, column));\n }\n return idCache.get(column)!;\n };\n\n // Execute all sibling relation queries in parallel\n const relationResults = await Promise.all(explicitFkRelations.map(async relation => {\n const resolved = this.buildExplicitFkRelationship(parentTable, relation);\n const idColumn = resolved.type === \"one-to-many\" ? resolved.referencedColumn : resolved.foreignKey;\n const parentIds = getIdsForColumn(idColumn);\n if (parentIds.length === 0) {\n return {\n relation,\n resolved,\n records: []\n };\n }\n\n // Determine filter column and target\n const filterColumn = resolved.type === \"one-to-many\" ? resolved.foreignKey : resolved.referencedColumn;\n\n // Build select for related table\n const relSelect = this.buildRelatedSelect(relation);\n\n // Parse target table identifier\n const {\n schema: targetSchema,\n tableName: targetTable\n } = parseTableIdentifier(relation.explicitFk!.targetTable);\n\n // Query related records\n let records = await this.queryRelatedRecords<Record<string, unknown>>(targetSchema, targetTable, relSelect, filterColumn, parentIds);\n\n // Recursively handle nested explicit FK relations\n if (relation.relations.length > 0 && records.length > 0) {\n const nestedExplicitFk = relation.relations.filter(r => r.explicitFk);\n if (nestedExplicitFk.length > 0) {\n records = await this.queryAndJoinRelations(relation.explicitFk!.targetTable, records, relation.relations);\n }\n }\n return {\n relation,\n resolved,\n records\n };\n }));\n\n // Join all results onto parent records\n let result = [...parentRecords];\n for (const {\n relation,\n resolved,\n records\n } of relationResults) {\n const relationName = relation.alias ?? relation.name;\n if (records.length === 0) {\n result = result.map(r => ({\n ...r,\n [relationName]: resolved.type === \"one-to-many\" ? [] : null\n }));\n continue;\n }\n result = this.joiner.join(result, records, resolved, relationName);\n }\n return result;\n }\n\n /**\n * Build the select string for a related table.\n */\n private buildRelatedSelect(relation: SelectRelation): string {\n const parts: string[] = [];\n\n // Add columns\n if (relation.columns === \"*\") {\n parts.push(\"*\");\n } else {\n for (const col of relation.columns) {\n if (col.alias) {\n parts.push(`${col.alias}:${col.name}`);\n } else {\n parts.push(col.name);\n }\n }\n }\n\n // Add nested relations that PostgREST can handle\n for (const nested of relation.relations) {\n if (!nested.explicitFk) {\n const innerSelect = this.buildNestedSelect(nested);\n if (nested.alias) {\n parts.push(`${nested.alias}:${nested.name}(${innerSelect})`);\n } else {\n parts.push(`${nested.name}(${innerSelect})`);\n }\n }\n }\n return parts.join(\", \");\n }\n\n /**\n * Build a ResolvedRelationship from an explicit FK specification.\n * This bypasses schema lookup and constructs the relationship directly.\n */\n private buildExplicitFkRelationship(parentTable: string, relation: SelectRelation): ResolvedRelationship {\n const explicitFk = relation.explicitFk!;\n const {\n tableName: targetTable\n } = parseTableIdentifier(explicitFk.targetTable);\n\n // Explicit FK relations are always many-to-one:\n // The parent table has a FK column pointing to the target table\n return {\n type: \"many-to-one\",\n fromTable: parentTable,\n toTable: targetTable,\n foreignKey: explicitFk.sourceField,\n referencedColumn: explicitFk.targetColumn ?? \"id\"\n };\n }\n}\n\n/**\n * Create a Supabase query executor instance.\n *\n * @param supabase - Supabase client instance\n * @param schema - Database schema\n * @returns SupabaseQueryExecutor instance\n */\nexport function createSupabaseQueryExecutor(supabase: SupabaseClient, schema: DatabaseSchema): SupabaseQueryExecutor {\n return new SupabaseQueryExecutor(supabase, schema);\n}","/**\n * V3 Data Layer - Supabase Adapter\n *\n * Implements the TableDataAdapter interface for direct Supabase/PostgREST queries.\n * This adapter is used for online-only data access without local caching.\n *\n * Supports explicit FK syntax (e.g., `Sender!senderId:core.Profile(*)`) by routing\n * those queries through SupabaseQueryExecutor for client-side join merging.\n */\n\nimport { SupabaseClient } from \"@supabase/supabase-js\";\nimport type { TableDataAdapter, AdapterQueryResult, CapableDataAdapter, AdapterCapabilities } from \"./types\";\nimport type { QueryOptions, WhereClause, DatabaseSchema } from \"../core/types\";\nimport { selectHasExplicitFkSyntax } from \"../query/select-parser\";\nimport { SupabaseQueryExecutor } from \"../query/supabase-executor\";\nimport { parseTableIdentifier, applyWhereClause } from \"../query/supabase-utils\";\n\n// =============================================================================\n// Supabase Adapter Implementation\n// =============================================================================\n\n/**\n * Adapter for querying Supabase directly via PostgREST API.\n *\n * This adapter:\n * - Queries Supabase directly (no local caching)\n * - Supports real-time subscriptions via Supabase Realtime\n * - Works only when online\n * - Uses Supabase's native select embedding for relations\n *\n * @example\n * ```typescript\n * const adapter = createSupabaseAdapter(supabaseClient, schema);\n *\n * // Query with relations\n * const result = await adapter.query<Project>(\"projects\", {\n * select: \"*, client:clients(*), tasks(*)\",\n * where: { status: \"active\" },\n * orderBy: [{ field: \"created_at\", direction: \"desc\" }],\n * limit: 10\n * });\n * ```\n */\nexport class SupabaseAdapter implements TableDataAdapter, CapableDataAdapter {\n readonly name = \"supabase\";\n readonly capabilities: AdapterCapabilities = {\n supportsSubscribe: true,\n supportsOffline: false,\n supportsCache: false,\n supportsSync: false\n };\n\n /**\n * Query executor for handling explicit FK syntax.\n * Lazily initialized when needed.\n */\n private queryExecutor: SupabaseQueryExecutor | null = null;\n constructor(private supabase: SupabaseClient, private schema: DatabaseSchema) {}\n\n /**\n * Get or create the SupabaseQueryExecutor for explicit FK queries.\n */\n private getQueryExecutor(): SupabaseQueryExecutor {\n if (!this.queryExecutor) {\n this.queryExecutor = new SupabaseQueryExecutor(this.supabase, this.schema);\n }\n return this.queryExecutor;\n }\n\n // ===========================================================================\n // Query Operations\n // ===========================================================================\n\n /**\n * Check if a where clause contains invalid UUID values (empty strings for id fields).\n * Returns true if any id field has an empty string value.\n */\n private hasInvalidUuidFilter(where?: WhereClause): boolean {\n if (!where) return false;\n for (const [field, condition] of Object.entries(where)) {\n // Check fields that end with \"id\" or \"Id\" (common UUID columns)\n if (field.toLowerCase().endsWith(\"id\") && typeof condition === \"string\" && condition === \"\") {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Execute a query and return results with optional count\n *\n * @param table - The table name to query\n * @param options - Query options (select, where, orderBy, limit, offset)\n * @returns Promise resolving to query results with optional count\n */\n async query<T>(table: string, options: QueryOptions): Promise<AdapterQueryResult<T>> {\n const {\n select = \"*\",\n where,\n orderBy,\n limit,\n offset\n } = options;\n\n // Check for explicit FK syntax - route through SupabaseQueryExecutor\n // Explicit FK syntax (e.g., Sender!senderId:core.Profile(*)) requires\n // client-side query execution with JS join merging.\n if (select && selectHasExplicitFkSyntax(select)) {\n const executor = this.getQueryExecutor();\n const result = await executor.execute<T>(table, options);\n return {\n data: result.data,\n count: result.count\n };\n }\n\n // Early return for invalid UUID filters (empty string for id fields)\n // This prevents \"invalid input syntax for type uuid\" errors\n if (this.hasInvalidUuidFilter(where)) {\n console.warn(`[SupabaseAdapter] Query on ${table} has invalid UUID filter (empty string), returning empty results`);\n return {\n data: [],\n count: 0\n };\n }\n const {\n schema,\n tableName\n } = parseTableIdentifier(table);\n\n // Start building the query with count option for pagination\n let query = this.supabase.schema(schema).from(tableName).select(select, {\n count: \"exact\"\n });\n\n // Apply where clauses\n if (where) {\n query = applyWhereClause(query as any, where) as any;\n }\n\n // Apply ordering\n if (orderBy && orderBy.length > 0) {\n for (const order of orderBy) {\n query = query.order(order.field, {\n ascending: order.direction === \"asc\"\n });\n }\n }\n\n // Apply pagination\n if (limit !== undefined && offset !== undefined) {\n // Use range for offset + limit (range is inclusive, so end = offset + limit - 1)\n query = query.range(offset, offset + limit - 1);\n } else if (limit !== undefined) {\n query = query.limit(limit);\n }\n const {\n data,\n error,\n count\n } = await query;\n if (error) {\n throw new Error(`Supabase query error on ${table}: ${error.message}`);\n }\n return {\n data: data as T[] ?? [],\n count: count ?? undefined\n };\n }\n\n /**\n * Query a single record by ID\n *\n * @param table - The table name to query\n * @param id - The record ID\n * @param options - Optional query options (mainly for select)\n * @returns Promise resolving to the record or null if not found\n */\n async queryById<T>(table: string, id: string, options?: Pick<QueryOptions, \"select\">): Promise<T | null> {\n const select = options?.select ?? \"*\";\n\n // Check for explicit FK syntax - route through SupabaseQueryExecutor\n if (select && selectHasExplicitFkSyntax(select)) {\n const executor = this.getQueryExecutor();\n return executor.executeById<T>(table, id, options);\n }\n const {\n schema,\n tableName\n } = parseTableIdentifier(table);\n const {\n data,\n error\n } = await this.supabase.schema(schema).from(tableName).select(select).eq(\"id\", id).single();\n if (error) {\n // PGRST116 = no rows returned (not an error, just no data)\n if (error.code === \"PGRST116\") {\n return null;\n }\n throw new Error(`Supabase queryById error on ${table}: ${error.message}`);\n }\n return data as T;\n }\n\n // ===========================================================================\n // Mutation Operations\n // ===========================================================================\n\n /**\n * Insert a new record\n *\n * @param table - The table name\n * @param data - The data to insert\n * @returns Promise resolving to the inserted record\n */\n async insert<T>(table: string, data: Partial<T>): Promise<T> {\n const {\n schema,\n tableName\n } = parseTableIdentifier(table);\n const {\n data: insertedData,\n error\n } = await this.supabase.schema(schema).from(tableName).insert(data as any).select().single();\n if (error) {\n throw new Error(`Supabase insert error on ${table}: ${error.message}`);\n }\n return insertedData as T;\n }\n\n /**\n * Update an existing record by ID\n *\n * @param table - The table name\n * @param id - The record ID to update\n * @param data - The data to update\n * @returns Promise resolving to the updated record\n */\n async update<T>(table: string, id: string, data: Partial<T>): Promise<T> {\n const {\n schema,\n tableName\n } = parseTableIdentifier(table);\n const {\n data: updatedData,\n error\n } = await this.supabase.schema(schema).from(tableName).update(data as any).eq(\"id\", id).select().single();\n if (error) {\n throw new Error(`Supabase update error on ${table}: ${error.message}`);\n }\n return updatedData as T;\n }\n\n /**\n * Upsert (insert or update) a record\n *\n * When the data has an ID, tries UPDATE first to support partial updates\n * (which may not include all NOT NULL columns). Falls back to INSERT\n * if no rows were updated.\n *\n * @param table - The table name\n * @param data - The data to upsert\n * @returns Promise resolving to the upserted record\n */\n async upsert<T>(table: string, data: Partial<T>): Promise<T> {\n const {\n schema,\n tableName\n } = parseTableIdentifier(table);\n const hasId = \"id\" in data && (data as Record<string, unknown>).id != null;\n\n // If data has an ID, try UPDATE first to support partial updates\n // (partial data may not include all NOT NULL columns required for INSERT)\n if (hasId) {\n const id = (data as Record<string, unknown>).id as string;\n const {\n data: updatedData,\n error: updateError\n } = await this.supabase.schema(schema).from(tableName).update(data as any).eq(\"id\", id).select().single();\n if (updatedData && !updateError) {\n return updatedData as T;\n }\n\n // If update failed due to no rows (record doesn't exist), fall through to insert\n // Other errors should be thrown\n if (updateError && updateError.code !== \"PGRST116\") {\n throw new Error(`Supabase update error on ${table}: ${updateError.message}`);\n }\n }\n\n // Insert new record (either no ID provided, or UPDATE found no existing record)\n const {\n data: insertedData,\n error: insertError\n } = await this.supabase.schema(schema).from(tableName).insert(data as any).select().single();\n if (insertError) {\n throw new Error(`Supabase insert error on ${table}: ${insertError.message}`);\n }\n return insertedData as T;\n }\n\n /**\n * Delete a record by ID\n *\n * @param table - The table name\n * @param id - The record ID to delete\n * @returns Promise that resolves when deletion is complete\n */\n async delete(table: string, id: string): Promise<void> {\n const {\n schema,\n tableName\n } = parseTableIdentifier(table);\n const {\n error\n } = await this.supabase.schema(schema).from(tableName).delete().eq(\"id\", id);\n if (error) {\n throw new Error(`Supabase delete error on ${table}: ${error.message}`);\n }\n }\n\n // ===========================================================================\n // Subscription (Real-time)\n // ===========================================================================\n\n /**\n * Subscribe to real-time changes on a query\n *\n * @param table - The table name to watch\n * @param options - Query options to filter what to watch\n * @param callback - Function called with updated data\n * @returns Unsubscribe function\n */\n subscribe<T>(table: string, options: QueryOptions, callback: (data: T[]) => void): () => void {\n const {\n schema,\n tableName\n } = parseTableIdentifier(table);\n\n // Create a unique channel name for this subscription\n const channelName = `v3:${table}:${Date.now()}`;\n const channel = this.supabase.channel(channelName).on(\"postgres_changes\", {\n event: \"*\",\n schema: schema,\n table: tableName\n }, async () => {\n // Re-fetch data when changes occur and call the callback\n try {\n const {\n data\n } = await this.query<T>(table, options);\n callback(data);\n } catch (error) {\n console.error(`Supabase subscription refetch error on ${table}:`, error);\n }\n }).subscribe();\n\n // Return unsubscribe function\n return () => {\n this.supabase.removeChannel(channel);\n };\n }\n}\n\n// =============================================================================\n// Factory Function\n// =============================================================================\n\n/**\n * Create a new SupabaseAdapter instance\n *\n * @param supabase - The Supabase client instance\n * @param schema - The database schema definition\n * @returns A new SupabaseAdapter instance\n *\n * @example\n * ```typescript\n * const adapter = createSupabaseAdapter(supabaseClient, databaseSchema);\n * const projects = await adapter.query<Project>(\"projects\", {\n * where: { status: \"active\" }\n * });\n * ```\n */\nexport function createSupabaseAdapter(supabase: SupabaseClient, schema: DatabaseSchema): SupabaseAdapter {\n return new SupabaseAdapter(supabase, schema);\n}","import { FunctionsResponse } from \"@supabase/functions-js\";\nexport async function getErrorBody(response: FunctionsResponse<any>) {\n const stream = response.error.context.body as ReadableStream<Uint8Array>;\n const reader = stream.getReader();\n const {\n value\n } = await reader.read();\n const text = new TextDecoder().decode(value);\n let parsed;\n try {\n parsed = JSON.parse(text);\n } catch {\n parsed = text;\n }\n return parsed;\n}","import { c as _c } from \"react/compiler-runtime\";\nimport useSupabase from \"./useSupabase\";\nexport interface AIOptions {\n maxTokens?: number;\n temperature?: number;\n}\nexport interface AIResponse {\n success: boolean;\n data?: {\n response: string;\n };\n error?: string;\n}\nexport function useAI() {\n const $ = _c(2);\n const supabase = useSupabase();\n let t0;\n if ($[0] !== supabase) {\n const generate = async (prompt, context, options) => {\n const response = await supabase.functions.invoke(\"ai\", {\n body: {\n prompt,\n context,\n options\n }\n });\n if (response.error) {\n throw new Error(`Failed to invoke AI function: ${response.error.message}`);\n }\n if (response.data?.error) {\n throw new Error(response.data.error);\n }\n if (!response.data?.success) {\n throw new Error(response.data?.error || \"Unknown error occurred\");\n }\n if (!response.data?.data?.response) {\n throw new Error(\"No response from AI\");\n }\n return response.data.data.response;\n };\n t0 = {\n generate\n };\n $[0] = supabase;\n $[1] = t0;\n } else {\n t0 = $[1];\n }\n return t0;\n}","import { useState, useEffect, useCallback } from \"react\";\nimport { getSupabaseUrl } from \"./config\";\nexport interface ServerAvailabilityState {\n isAvailable: boolean | null; // null = checking, true = available, false = unavailable\n isChecking: boolean;\n lastChecked: Date | null;\n error: Error | null;\n}\nconst CHECK_TIMEOUT = 10000; // 10 seconds timeout\nconst CHECK_INTERVAL = 30000; // Check every 30 seconds when unavailable\n\n/**\n * Hook to check if the Supabase server is available.\n * Performs periodic health checks and provides availability state.\n * Works without requiring Supabase context, making it safe to use at app initialization.\n */\nexport function useServerAvailability(options?: {\n enabled?: boolean;\n checkInterval?: number;\n timeout?: number;\n}): ServerAvailabilityState & {\n checkAvailability: () => Promise<void>;\n} {\n const {\n enabled = true,\n checkInterval = CHECK_INTERVAL,\n timeout = CHECK_TIMEOUT\n } = options || {};\n const [isAvailable, setIsAvailable] = useState<boolean | null>(null);\n const [isChecking, setIsChecking] = useState(false);\n const [lastChecked, setLastChecked] = useState<Date | null>(null);\n const [error, setError] = useState<Error | null>(null);\n const checkAvailability = useCallback(async () => {\n if (!enabled) return;\n setIsChecking(true);\n setError(null);\n try {\n const supabaseUrl = getSupabaseUrl();\n const supabaseAnonKey = process.env.SUPABASE_ANON_KEY || process.env.EXPO_PUBLIC_SUPABASE_ANON_KEY;\n if (!supabaseUrl) {\n throw new Error(\"Supabase URL is not configured\");\n }\n if (!supabaseAnonKey) {\n throw new Error(\"Supabase anon key is not configured\");\n }\n\n // Create an abort controller for timeout\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), timeout);\n\n // Health check: Try to reach the Supabase REST API\n // This is a lightweight check that doesn't require authentication\n const healthCheckPromise = fetch(`${supabaseUrl}/rest/v1/`, {\n method: \"HEAD\",\n headers: {\n apikey: supabaseAnonKey\n },\n signal: controller.signal\n }).then(response => {\n clearTimeout(timeoutId);\n // Consider server available if we get any response (even 401/403 means server is reachable)\n return response.status < 500;\n }).catch(err_0 => {\n clearTimeout(timeoutId);\n // If aborted, it's a timeout\n if (err_0.name === \"AbortError\") {\n return false;\n }\n return false;\n });\n const available = await healthCheckPromise;\n setIsAvailable(available);\n setLastChecked(new Date());\n setError(null);\n } catch (err) {\n const error_0 = err instanceof Error ? err : new Error(\"Unknown error checking server availability\");\n setIsAvailable(false);\n setError(error_0);\n setLastChecked(new Date());\n } finally {\n setIsChecking(false);\n }\n }, [enabled, timeout]);\n\n // Initial check on mount\n useEffect(() => {\n if (enabled) {\n checkAvailability();\n }\n }, [enabled, checkAvailability]);\n\n // Periodic check when server is unavailable\n useEffect(() => {\n if (!enabled || isAvailable !== false) return;\n const intervalId = setInterval(() => {\n checkAvailability();\n }, checkInterval);\n return () => clearInterval(intervalId);\n }, [enabled, isAvailable, checkInterval, checkAvailability]);\n return {\n isAvailable,\n isChecking,\n lastChecked,\n error,\n checkAvailability\n };\n}","import { useMemo, useRef } from \"react\";\nimport type { PostgrestSingleResponse } from \"@supabase/postgrest-js\";\nimport React from \"react\";\ninterface SearchOptions {\n isOptional: boolean;\n additionCondition: string[];\n}\ntype Snapshot = {\n url: URL;\n method: string;\n headers: Record<string, string>;\n body: any;\n signal: AbortSignal | null;\n};\nexport function useSearchQuery<Result>(baseQuery: PromiseLike<PostgrestSingleResponse<Result>>, searchText: string, columns: ((string & keyof Result) | string)[], options: {\n isOptional: boolean;\n additionCondition: (string | undefined)[];\n} = {\n isOptional: true,\n additionCondition: []\n}) {\n const original = React.useRef<{\n lastQuery: PromiseLike<PostgrestSingleResponse<Result>>;\n original: Snapshot;\n }>(null!);\n\n // if we get a brand-new baseQuery, re-capture the snapshot\n if (original.current?.lastQuery !== baseQuery) {\n const b = baseQuery as any;\n\n // Safely access properties - query builder properties should exist but handle edge cases\n // The url might be a string or URL object\n const urlValue = b.url;\n const url = urlValue ? typeof urlValue === 'string' ? new URL(urlValue) : new URL(urlValue.toString()) : new URL(\"http://localhost\"); // Fallback - should not happen in practice\n\n const method = b.method ?? \"GET\";\n // Preserve the original headers object - don't convert to plain object as it needs to be a Headers instance\n const headers = b.headers ?? {};\n // Only snapshot body for methods that support it - GET/HEAD cannot have body\n const body = method !== \"GET\" && method !== \"HEAD\" ? b.body ?? null : null;\n const signal = b.signal ?? null;\n original.current = {\n lastQuery: baseQuery,\n original: {\n url,\n method,\n headers,\n body,\n signal\n }\n };\n }\n return useMemo(() => {\n const qb = baseQuery as any;\n const {\n url: url_0,\n method: method_0,\n body: body_0,\n signal: signal_0\n } = original.current!.original;\n\n // 1) restore clean state\n qb.url = new URL(url_0.toString());\n qb.method = method_0;\n // Don't restore headers - they should remain unchanged and are a Headers object with .set() method\n // Mutating headers breaks the Headers object type\n // Only restore body for methods that support it (POST, PATCH, DELETE) - GET/HEAD cannot have body\n if (method_0 !== \"GET\" && method_0 !== \"HEAD\") {\n qb.body = body_0;\n } else {\n // For GET/HEAD, delete the body property entirely - setting to null still sets a body\n delete qb.body;\n }\n qb.signal = signal_0;\n\n // 3) Re-apply your logic exactly once\n const term = searchText.trim();\n if (term) {\n const clauses = columns.map(col => {\n const [tbl, colName] = col.split(\".\");\n return `${colName ?? tbl}.ilike.%${escapeLikePattern(term)}%`;\n });\n clauses.push(...(options.additionCondition.filter(Boolean) as string[]));\n qb.or(clauses.join(\",\"), {\n referencedTable: columns.find(c => c.includes(\".\"))?.split(\".\")[0]\n });\n } else if (!options.isOptional) {\n const conds = options.additionCondition.filter(Boolean);\n conds?.length ? qb.or(conds.join(\",\")) : qb.limit(0);\n }\n return qb as PromiseLike<PostgrestSingleResponse<Result>>;\n }, [baseQuery, searchText, columns.join(\",\"), options.isOptional, options.additionCondition.join(\",\")]);\n}\nfunction escapeLikePattern(text: string): string {\n return text?.replace(/[%_]/g, \"\\\\$&\");\n}","import { c as _c } from \"react/compiler-runtime\";\nimport { isUsable } from \"@pol-studios/utils\";\nimport { useEffect, useState } from \"react\";\nimport { GetResult } from \"./parser/select-query-parser\";\nimport { GenericTable } from \"./parser/types\";\nimport useSupabase, { UserSessionId, Database } from \"./useSupabase\";\nimport moment from \"moment\";\nimport { getObjectChanges } from \"@pol-studios/utils\";\nimport { DbChangeLog } from \"./types\";\n\n/** Type for the OperationLog record data */\ninterface OperationLogData {\n sessionId: string | null;\n changeBy: string | null;\n changeAt: string | null;\n}\ntype PublicSchema = Database[Extract<keyof Database, \"public\">];\ntype TableRow<T> = T extends {\n Row: infer R extends Record<string, unknown>;\n} ? R : Record<string, unknown>;\nexport default function useLiveChangeTracking(tableName, item, action) {\n const $ = _c(12);\n const [changeLog, setChangeLog] = useState(null as DbChangeLog);\n const [oldItem, setOldItem] = useState(null as TItem);\n const supabase = useSupabase();\n let t0;\n if ($[0] !== item || $[1] !== oldItem || $[2] !== supabase || $[3] !== tableName) {\n t0 = () => {\n let isMounted = true;\n setChangeLog(null);\n if (isUsable(item) === false) {\n return;\n }\n if (isUsable(oldItem) === false) {\n setOldItem(item);\n return;\n }\n const itemId = (item as any).id;\n if (isUsable(itemId) === false) {\n return;\n }\n const changes = getObjectChanges(oldItem, item);\n if (Object.keys(changes).length === 0) {\n return;\n }\n supabase.schema(\"core\").from(\"OperationLog\").select().filter(\"tableName\", \"eq\", tableName).filter(\"recordId\", \"eq\", itemId).order(\"changeAt\", {\n ascending: false\n }).limit(1).single().then(x => {\n if (!isMounted) {\n return;\n }\n if (isUsable(x.data) === false) {\n return;\n }\n const data = x.data as OperationLogData;\n if (data.sessionId === UserSessionId) {\n return;\n }\n const changeLog_0 = {\n modifiedByUserId: data.changeBy,\n changedOn: moment.utc(data.changeAt),\n changes: changes as Partial<TItem>\n };\n setChangeLog(changeLog_0);\n });\n setOldItem(item);\n return () => {\n isMounted = false;\n };\n };\n $[0] = item;\n $[1] = oldItem;\n $[2] = supabase;\n $[3] = tableName;\n $[4] = t0;\n } else {\n t0 = $[4];\n }\n let t1;\n if ($[5] !== item) {\n t1 = [item];\n $[5] = item;\n $[6] = t1;\n } else {\n t1 = $[6];\n }\n useEffect(t0, t1);\n let t2;\n if ($[7] !== action || $[8] !== changeLog) {\n t2 = () => {\n if (isUsable(changeLog) && action) {\n action(changeLog.changes as Partial<TItem>, changeLog);\n }\n };\n $[7] = action;\n $[8] = changeLog;\n $[9] = t2;\n } else {\n t2 = $[9];\n }\n let t3;\n if ($[10] !== changeLog) {\n t3 = [changeLog];\n $[10] = changeLog;\n $[11] = t3;\n } else {\n t3 = $[11];\n }\n useEffect(t2, t3);\n return changeLog;\n}","import { c as _c } from \"react/compiler-runtime\";\nimport useSupabase from \"./useSupabase\";\nimport { isUsable } from \"@pol-studios/utils\";\nimport { useDbQuery } from \"./useDbQuery\";\nimport { OperationLog } from \"./gen/public/OperationLog/query\";\nexport default function useLatestOperationLog(tableName, recordId) {\n const $ = _c(8);\n const supabase = useSupabase();\n const t0 = supabase as any;\n let t1;\n if ($[0] !== recordId || $[1] !== t0 || $[2] !== tableName) {\n t1 = t0.schema(\"core\").from(\"OperationLog\").select(OperationLog.defaultQuery).eq(\"recordId\", String(recordId)).eq(\"tableName\", tableName).order(\"changeAt\", {\n ascending: false\n }).limit(1).maybeSingle();\n $[0] = recordId;\n $[1] = t0;\n $[2] = tableName;\n $[3] = t1;\n } else {\n t1 = $[3];\n }\n let t2;\n if ($[4] !== recordId) {\n t2 = isUsable(recordId);\n $[4] = recordId;\n $[5] = t2;\n } else {\n t2 = $[5];\n }\n let t3;\n if ($[6] !== t2) {\n t3 = {\n refetchOnMount: true,\n refetchOnWindowFocus: true,\n staleTime: 0,\n enabled: t2\n };\n $[6] = t2;\n $[7] = t3;\n } else {\n t3 = $[7];\n }\n return useDbQuery(t1, t3);\n}","import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { UseMutationOptions } from \"@tanstack/react-query\";\nimport { GetResult } from \"./parser/select-query-parser\";\nimport { diff } from \"@pol-studios/utils\";\nimport { useDbUpsert, UseDbUpsertResult } from \"./hooks/useDbUpsert\";\nimport moment, { Moment } from \"moment\";\nimport { Database } from \"./useSupabase\";\ntype PublicSchema = Database[Extract<keyof Database, \"public\">];\ntype TimeActivity = any;\nexport function newTimeActivity(date: Moment): TimeActivity {\n return {\n activityDate: date.clone().startOf(\"day\").toISOString(true),\n description: \"\",\n hasRequestBillableChange: false,\n hasRequestVerification: false,\n hours: 0,\n userNotes: \"\",\n adminNotes: \"\",\n userId: null,\n clientId: null,\n projectId: null,\n workingPhaseId: null,\n roleId: null,\n taskId: null,\n subtaskId: null,\n weeklyTimesheetId: null,\n id: null,\n BillingDetails: {\n status: \"Unknown\",\n id: null,\n orderHint: \"\",\n chargeTableId: null,\n cosmosId: null,\n amount: 0,\n rate: 0,\n type: \"TimeActivity\"\n }\n };\n}\ntype NotArray<T> = T extends any[] ? never : T;\ntype PendingChange<T> = {\n baseValue: T;\n currentValue: T;\n timeoutId: ReturnType<typeof setTimeout> | null;\n needsResave?: boolean; // Track if changes occurred during in-flight save\n};\ntype AutosaveOptions<T> = UpdateOptions<T> & {\n delay: number;\n primaryKeys?: string[];\n transformBeforeMutation?: (item: T) => Partial<T>;\n};\nfunction getNewValue<T>(action: React.SetStateAction<T>, prevState: T): T {\n return typeof action === \"function\" ? (action as (prevState: T) => T)(prevState) : action;\n}\nexport type UpdateOptions<T> = Partial<UseMutationOptions<T, Error, T, unknown>> & {\n updateCache?: boolean;\n};\n\n/**\n * Hook for managing autosave state with proper entity switching support.\n *\n * This hook provides three main functions:\n * 1. `updateValue` - For making changes to the current entity (with autosave)\n * 2. `setNewEntity` - For switching to a completely different entity (saves previous entity first)\n * 3. `setValue` - For setting a value without triggering autosave or change tracking\n *\n * @example\n * ```tsx\n * const [value, updateValue, mutation, setValue, setNewEntity] = useAutosaveState(\n * 'time_activities',\n * defaultTimeActivity,\n * {\n * delay: 500,\n * transformBeforeMutation: (item) => omitFields(item, ['computedField', 'uiOnlyField'])\n * }\n * );\n *\n * // For making changes to current entity (autosaves after delay)\n * updateValue(prev => ({ ...prev, description: 'New description' }));\n *\n * // For switching to a different entity (saves current entity first)\n * setNewEntity(differentTimeActivity);\n * ```\n */\nexport default function useAutosaveState<T extends TItem & {\n id: string;\n}, TableName extends string & keyof PublicSchema[\"Tables\"] = any, Table extends PublicSchema[\"Tables\"][TableName] = any, Query extends string = \"*\", RelationName = unknown, Relationships = (Table extends {\n Relationships: infer R;\n} ? R : unknown), TItem = Omit<GetResult<PublicSchema, Table extends {\n Row: infer R;\n} ? R extends Record<string, unknown> ? R : any : any, RelationName, Relationships, Query>, \"id\"> & {\n id: string;\n}>(relation: TableName, defaultValue: T, options?: AutosaveOptions<T>): [T, React.Dispatch<React.SetStateAction<T>>, UseDbUpsertResult<T>, React.Dispatch<React.SetStateAction<T>>, (newEntity: T) => void, () => Promise<void>, T, (newBase: T) => void] {\n const [value, setValue] = useState<T>(() => defaultValue);\n const [baseValue, setBaseValue] = useState<T>(() => defaultValue);\n // Use a ref to track baseValue synchronously to avoid stale closure issues\n // When setNewEntity is called, React batches state updates. If updateValue\n // is called before the re-render completes, the closure-captured baseValue\n // would be stale. The ref ensures we always have the latest baseValue.\n const baseValueRef = useRef<T>(defaultValue);\n const pendingChangesRef = useRef<Map<string, PendingChange<T>>>(new Map());\n const currentId = useRef<string | null>(null);\n const savingInProgressRef = useRef<Set<string>>(new Set());\n const newOptions = useMemo(() => options ? {\n ...options,\n primaryKeys: options.primaryKeys ?? [\"id\"]\n } : {\n delay: 200,\n primaryKeys: [\"id\"]\n }, [options]);\n const upsertMutation = useDbUpsert<T>(relation, {\n invalidateTables: [relation]\n });\n const saveEntityChanges = useCallback(async (entityId: string, isUnmountFlush = false) => {\n // If save already in progress, mark for re-save instead of dropping\n if (savingInProgressRef.current.has(entityId)) {\n const pending = pendingChangesRef.current.get(entityId);\n if (pending) {\n pending.needsResave = true;\n }\n return;\n }\n savingInProgressRef.current.add(entityId);\n try {\n if (__DEV__) {\n console.log('[Autosave] saveEntityChanges called:', {\n entityId,\n relation,\n hasPendingEntry: pendingChangesRef.current.has(entityId),\n isUnmountFlush\n });\n }\n const pending_0 = pendingChangesRef.current.get(entityId);\n if (!pending_0) {\n if (__DEV__) {\n console.log('[Autosave] No pending changes found for entity:', entityId);\n }\n return;\n }\n\n // Snapshot currentValue at save time to detect concurrent changes\n const valueAtSaveStart = pending_0.currentValue;\n const changes = diff(pending_0.baseValue, pending_0.currentValue);\n if (__DEV__) {\n console.log('[Autosave] Computed diff:', {\n entityId,\n relation,\n changeKeys: Object.keys(changes)\n });\n }\n const changedKeys = Object.keys(changes);\n if (changedKeys.length === 0) {\n if (__DEV__) {\n console.log('[Autosave] No changes detected, skipping save for:', entityId);\n }\n pendingChangesRef.current.delete(entityId);\n return;\n }\n\n // CRITICAL: Use full current values for changed keys, NOT partial diffs\n // diff() returns partial patches for nested objects/arrays which would\n // corrupt JSON columns when sent directly to SQL UPDATE\n // Only send changed fields (with their full values) to avoid overwriting\n // concurrent changes by other users/processes\n const patch: Record<string, unknown> = {\n id: entityId\n };\n for (const key of changedKeys) {\n patch[key] = pending_0.currentValue[key as keyof typeof pending_0.currentValue];\n }\n\n // Apply transform function if provided\n const finalPatch = newOptions.transformBeforeMutation ? newOptions.transformBeforeMutation(patch as T) : patch;\n if (__DEV__) {\n console.log('[Autosave] Calling mutateAsync:', {\n entityId,\n relation,\n changedKeys,\n hasTransform: !!newOptions.transformBeforeMutation\n });\n }\n const result = await upsertMutation.mutateAsync(finalPatch as any);\n if (__DEV__) {\n console.log('[Autosave] mutateAsync SUCCESS:', {\n entityId,\n relation,\n result\n });\n }\n\n // Check if value changed during save - if so, don't delete pending entry\n const currentPending = pendingChangesRef.current.get(entityId);\n if (currentPending && currentPending.currentValue !== valueAtSaveStart) {\n // Value changed during save - update base to what we saved, keep pending for new changes\n currentPending.baseValue = valueAtSaveStart;\n currentPending.needsResave = true;\n if (__DEV__) {\n console.log('[Autosave] Value changed during save, keeping pending entry:', entityId);\n }\n } else {\n // CRITICAL: Do NOT update baseValue here!\n // The React Query cache may still have OLD data (invalidation is debounced by 100ms).\n // If we update baseValue now, mergedUnit will compute diff(NEW, NEW) = {} and\n // return currentUnit (which is still OLD), causing a flicker.\n //\n // Instead, keep the pending entry alive with the OLD base. The useEffect in\n // EquipmentAutosaveContext will call updateBaseValue() when currentUnit catches up,\n // which properly reconciles pending changes and cleans up.\n if (currentPending && currentId.current === entityId) {\n // Don't update baseValue or baseValueRef - let updateBaseValue handle it\n // Don't delete pending - let updateBaseValue clean it up when currentUnit catches up\n if (__DEV__) {\n console.log('[Autosave] Save complete, keeping pending entry with OLD base for overlay:', entityId);\n }\n }\n }\n } catch (error) {\n if (__DEV__) {\n console.error('[Autosave] mutateAsync FAILED:', {\n entityId,\n relation,\n error,\n errorMessage: error instanceof Error ? error.message : String(error)\n });\n }\n // Don't re-throw during unmount flush to prevent unhandled rejections\n if (!isUnmountFlush) {\n throw error;\n }\n } finally {\n savingInProgressRef.current.delete(entityId);\n\n // Check if re-save was requested while we were saving\n const pending = pendingChangesRef.current.get(entityId);\n if (pending?.needsResave) {\n pending.needsResave = false;\n // Schedule re-save with debounce delay to prevent rapid-fire requests\n pending.timeoutId = setTimeout(() => {\n saveEntityChangesRef.current(entityId);\n }, newOptions.delay);\n }\n }\n }, [relation, upsertMutation, newOptions.transformBeforeMutation, newOptions.delay]);\n\n // Ref to always have latest saveEntityChanges for cleanup\n const saveEntityChangesRef = useRef(saveEntityChanges);\n useEffect(() => {\n saveEntityChangesRef.current = saveEntityChanges;\n }, [saveEntityChanges]);\n\n // Function to update the current entity (with autosave)\n const updateValue = useCallback((update: React.SetStateAction<T>) => {\n setValue(prev => {\n const newValue = getNewValue(update, prev);\n const entityId_0 = newValue.id;\n if (!entityId_0) return newValue;\n\n // Ensure currentId is set for saveCurrentValue to work\n currentId.current = entityId_0;\n\n // Get or create pending entry for this entity\n let pending_1 = pendingChangesRef.current.get(entityId_0);\n if (!pending_1) {\n // Use baseValueRef.current instead of closure-captured baseValue\n // This ensures we always have the latest baseValue even if React\n // hasn't re-rendered yet after setNewEntity was called\n const base = baseValueRef.current;\n\n // Defensive check: warn if entity ID mismatch (caller forgot setNewEntity)\n if (__DEV__ && base && base.id !== entityId_0) {\n console.warn('[Autosave] updateValue called for entity', entityId_0, 'but baseValue is for entity', base.id, '- did you forget to call setNewEntity?');\n }\n pending_1 = {\n baseValue: base,\n currentValue: newValue,\n timeoutId: null\n };\n pendingChangesRef.current.set(entityId_0, pending_1);\n if (__DEV__) {\n console.log('[Autosave] Created new pending entry:', {\n entityId: entityId_0,\n baseValueId: base?.id\n });\n }\n } else {\n pending_1.currentValue = newValue;\n }\n\n // Clear existing timeout for this entity\n if (pending_1.timeoutId) {\n clearTimeout(pending_1.timeoutId);\n }\n\n // Set new timeout for autosave\n // Use ref to avoid stale closure capturing old saveEntityChanges\n pending_1.timeoutId = setTimeout(() => {\n saveEntityChangesRef.current(entityId_0);\n }, newOptions.delay);\n return newValue;\n });\n }, [saveEntityChanges, newOptions.delay]);\n\n // Function to set a completely new entity (non-blocking)\n // Previous entity's changes will save via their own timer\n const setNewEntity = useCallback((newEntity: T) => {\n // Update ref synchronously BEFORE React state updates\n // This ensures updateValue always has the correct baseValue even if\n // called before the React re-render completes (avoids stale closure)\n baseValueRef.current = newEntity;\n if (__DEV__) {\n console.log('[Autosave] setNewEntity - baseValueRef updated synchronously:', {\n entityId: newEntity.id,\n relation\n });\n }\n setValue(newEntity);\n setBaseValue(newEntity);\n currentId.current = newEntity.id;\n }, [relation]);\n\n // Function to update the base value WITHOUT resetting pending changes\n // This is used when synced data comes back from the server for the SAME entity\n // We update the base so future diffs are computed against the latest synced state,\n // but we preserve any pending local changes the user has made\n const updateBaseValue = useCallback((newBase: T) => {\n // Guard: Ignore stale base updates for entities we're no longer editing\n if (currentId.current && newBase.id !== currentId.current) {\n if (__DEV__) {\n console.log('[Autosave] updateBaseValue ignored - entity mismatch:', {\n newBaseId: newBase.id,\n currentId: currentId.current\n });\n }\n return;\n }\n baseValueRef.current = newBase;\n setBaseValue(newBase);\n\n // Reconcile any pending entry to prevent stale diffs\n const pending_2 = pendingChangesRef.current.get(newBase.id);\n if (pending_2) {\n // Compute the user's intentional changes against the OLD base\n const userChanges = diff(pending_2.baseValue, pending_2.currentValue);\n\n // Update the base to the new synced state\n pending_2.baseValue = newBase;\n\n // Replay user's intentional changes onto the new base\n // This ensures we don't revert server-side changes the user didn't touch\n if (userChanges && Object.keys(userChanges).length > 0) {\n const userChangeKeys = Object.keys(userChanges);\n const overlay: Partial<T> = {};\n for (const key_0 of userChangeKeys) {\n overlay[key_0 as keyof T] = pending_2.currentValue[key_0 as keyof T];\n }\n pending_2.currentValue = {\n ...newBase,\n ...overlay\n } as T;\n } else {\n pending_2.currentValue = newBase;\n }\n if (__DEV__) {\n console.log('[Autosave] updateBaseValue - Reconciled pending entry:', {\n entityId: newBase.id,\n userChangeKeys: userChanges ? Object.keys(userChanges) : []\n });\n }\n\n // Clean up pending entry if no remaining changes\n const remainingDiff = diff(pending_2.baseValue, pending_2.currentValue);\n if (!remainingDiff || Object.keys(remainingDiff).length === 0) {\n pendingChangesRef.current.delete(newBase.id);\n if (__DEV__) {\n console.log('[Autosave] updateBaseValue - Cleaned up pending entry (no remaining changes):', newBase.id);\n }\n }\n }\n }, []);\n\n // Flush pending changes on unmount\n // Note: saveEntityChanges is async but we can't await in cleanup.\n // The PowerSync adapter writes synchronously to local SQLite, so data is safe.\n // Errors are suppressed (isUnmountFlush=true) to avoid unhandled rejections.\n useEffect(() => {\n return () => {\n pendingChangesRef.current.forEach((pending_3, entityId_1) => {\n if (pending_3.timeoutId) clearTimeout(pending_3.timeoutId);\n saveEntityChangesRef.current(entityId_1, true /* isUnmountFlush */);\n });\n };\n }, []);\n\n // Function to manually save the current value\n const saveCurrentValue = useCallback(async () => {\n if (currentId.current) {\n await saveEntityChanges(currentId.current);\n }\n }, [saveEntityChanges]);\n return [value, updateValue, upsertMutation, setValue, setNewEntity, saveCurrentValue, baseValue, updateBaseValue];\n}","/**\n * useAutosave Hook v2.0\n *\n * A simple, robust autosave hook for PowerSync offline-first apps.\n *\n * Key design principles:\n * 1. PowerSync SQLite is the single source of truth\n * 2. Dirty buffer (ref) accumulates field-level patches - no complex state\n * 3. Reconciliation: when watched value matches dirty value, clear entry\n * 4. Entity switching: flush old entity immediately, new entity starts fresh\n * 5. No baseValue tracking - watchedData IS the base\n *\n * @example\n * ```tsx\n * const { data } = useDbQuery(\"Task\", { where: { id: taskId }, realtime: true });\n *\n * const { value, patch, isSaving } = useAutosave(\n * \"Task\",\n * taskId,\n * data?.[0] ?? null,\n * { delay: 2000 }\n * );\n *\n * <TextInput value={value?.title} onChangeText={t => patch({ title: t })} />\n * ```\n */\n\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { useDataLayerCoreOptional } from \"./hooks/useDataLayer\";\nimport { useDbUpsert } from \"./hooks/useDbUpsert\";\n\n/** Check if dirty buffer has no entries (avoids repeated Object.keys allocations) */\nfunction isDirtyEmpty<T>(dirty: Partial<T>): boolean {\n for (const _ in dirty) return false;\n return true;\n}\nexport interface UseAutosaveOptions {\n /** Debounce delay in ms before saving (default: 2000) */\n delay?: number;\n}\nexport interface UseAutosaveResult<T> {\n /** The merged value: dirty fields overlaid on watchedData */\n value: T | null;\n /** Update one or more fields. Starts the debounce timer. */\n patch: (updates: Partial<T>) => void;\n /** Force-flush any pending changes immediately */\n flush: () => Promise<void>;\n /** Re-trigger save after error, no user edit required */\n retry: () => void;\n /** True while save is in-flight for current entity */\n isSaving: boolean;\n /** Last error from save attempt */\n saveError: Error | null;\n /** Clear the error without triggering save */\n clearError: () => void;\n}\n\n/**\n * Autosave hook that manages optimistic local edits with debounced persistence.\n *\n * @param table - The table name to save to\n * @param entityId - The entity ID (null = hook is inert)\n * @param watchedData - Live data from useDbQuery with realtime:true\n * @param options - Configuration options\n */\nexport function useAutosave<T extends {\n id: string;\n}>(table: string, entityId: string | null, watchedData: T | null, options: UseAutosaveOptions = {}): UseAutosaveResult<T> {\n const {\n delay = 2000\n } = options;\n\n // ============================================================================\n // Core Infrastructure\n // ============================================================================\n\n const dataLayerCore = useDataLayerCoreOptional();\n\n // Render trigger - bumped by patch() to force one re-render\n const [tick, setTick] = useState(0);\n\n // Save state - managed via React state for UI reactivity\n const [isSaving, setIsSaving] = useState(false);\n const [saveError, setSaveError] = useState<Error | null>(null);\n\n // Refs for synchronous access (no render triggers)\n const dirtyRef = useRef<Partial<T>>({});\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const entityIdRef = useRef<string | null>(null);\n const savingRef = useRef(false);\n const saveErrorRef = useRef<Error | null>(null);\n const executeSaveRef = useRef<() => Promise<void>>(() => Promise.resolve());\n\n // Keep saveErrorRef in sync with state\n saveErrorRef.current = saveError;\n\n // Use useDbUpsert for debounced saves (provides React Query integration)\n const {\n mutateAsync,\n isPending\n } = useDbUpsert<T>(table, {\n invalidateTables: [table]\n });\n\n // ============================================================================\n // Internal Save Execution\n // ============================================================================\n\n const executeSave = useCallback(async () => {\n const eid = entityIdRef.current;\n const dirty = dirtyRef.current;\n\n // Guard: nothing to save\n if (!eid || isDirtyEmpty(dirty)) {\n return;\n }\n\n // Guard: already saving - reschedule instead of dropping\n if (savingRef.current) {\n if (timerRef.current) clearTimeout(timerRef.current);\n timerRef.current = setTimeout(() => executeSaveRef.current(), delay);\n return;\n }\n savingRef.current = true;\n setIsSaving(true);\n try {\n // Build payload with entity ID + dirty fields\n const payload = {\n id: eid,\n ...dirty\n } as Partial<T> & {\n id: string;\n };\n if (__DEV__) {\n console.log('[useAutosave] Saving:', {\n table,\n entityId: eid,\n fields: Object.keys(dirty)\n });\n }\n await mutateAsync(payload);\n if (__DEV__) {\n console.log('[useAutosave] Save success:', eid);\n }\n\n // Clear error on success\n setSaveError(null);\n\n // Note: dirty buffer is NOT cleared here.\n // It will be cleared by reconciliation when watchedData catches up.\n } catch (error) {\n const err = error instanceof Error ? error : new Error(String(error));\n setSaveError(err);\n if (__DEV__) {\n console.error('[useAutosave] Save failed:', err.message);\n }\n\n // Stop timer on error - don't auto-retry\n if (timerRef.current) {\n clearTimeout(timerRef.current);\n timerRef.current = null;\n }\n } finally {\n // Only reset saving state if we're still on the same entity.\n // If entity switched during the async save, the synchronous entity\n // switch detection already reset savingRef - don't corrupt it.\n if (entityIdRef.current === eid) {\n savingRef.current = false;\n setIsSaving(false);\n }\n }\n }, [table, mutateAsync, delay]);\n\n // Keep executeSaveRef in sync with latest callback\n executeSaveRef.current = executeSave;\n\n // ============================================================================\n // Fire-and-Forget Flush (for entity switch & unmount)\n // ============================================================================\n\n // Ref to allow unmount effect to access latest flush without re-subscribing\n const fireAndForgetFlushRef = useRef<(eid: string, dirty: Partial<T>) => void>(() => {});\n const fireAndForgetFlush = useCallback((eid_0: string, dirty_0: Partial<T>) => {\n if (isDirtyEmpty(dirty_0)) return;\n const registry = dataLayerCore?.registry;\n if (!registry) {\n if (__DEV__) {\n console.warn('[useAutosave] No registry for fire-and-forget flush');\n }\n return;\n }\n try {\n const adapter = registry.getAdapter(table, 'write');\n const payload_0 = {\n id: eid_0,\n ...dirty_0\n };\n if (__DEV__) {\n console.log('[useAutosave] Fire-and-forget flush:', {\n entityId: eid_0,\n fields: Object.keys(dirty_0)\n });\n }\n\n // Direct adapter call - bypasses React Query\n // PowerSync SQLite write is synchronous under the hood\n adapter.upsert(table, payload_0);\n } catch (error_0) {\n // Swallow - entity is departed, no UI to show error\n if (__DEV__) {\n console.error('[useAutosave] Fire-and-forget flush failed:', error_0);\n }\n }\n }, [dataLayerCore?.registry, table]);\n\n // Keep ref in sync with latest callback\n fireAndForgetFlushRef.current = fireAndForgetFlush;\n\n // ============================================================================\n // SYNCHRONOUS Entity Switch Detection (CRITICAL: must run before useMemo)\n // ============================================================================\n // This runs during render, BEFORE the useMemo that computes `value`.\n // This is essential because useEffect runs AFTER render, which would cause\n // a one-render window where Unit A's dirty fields appear on Unit B's data.\n\n if (entityId !== entityIdRef.current) {\n const prevId = entityIdRef.current;\n const newId = entityId;\n\n // Clear any pending timer\n if (timerRef.current) {\n clearTimeout(timerRef.current);\n timerRef.current = null;\n }\n\n // Flush old entity's dirty buffer (fire-and-forget) BEFORE clearing refs\n if (prevId && !isDirtyEmpty(dirtyRef.current)) {\n fireAndForgetFlushRef.current(prevId, dirtyRef.current);\n }\n\n // Reset state for new entity SYNCHRONOUSLY (before useMemo reads these refs)\n dirtyRef.current = {};\n entityIdRef.current = newId;\n savingRef.current = false;\n if (__DEV__) {\n console.log('[useAutosave] Entity switched (sync):', {\n from: prevId,\n to: newId\n });\n }\n }\n\n // ============================================================================\n // Reconciliation: Clear dirty entries when watchedData catches up\n // ============================================================================\n\n useEffect(() => {\n if (!watchedData || !entityId) return;\n if (entityIdRef.current !== entityId) return; // Stale effect\n\n const dirty_1 = dirtyRef.current;\n const keysToRemove: string[] = [];\n\n // Check each dirty field against watched data\n for (const key of Object.keys(dirty_1)) {\n const dirtyValue = dirty_1[key as keyof typeof dirty_1];\n const watchedValue = watchedData[key as keyof T];\n\n // Deep equality check for objects/arrays, strict equality for primitives\n const areEqual = typeof dirtyValue === 'object' && dirtyValue !== null ? JSON.stringify(dirtyValue) === JSON.stringify(watchedValue) : dirtyValue === watchedValue;\n\n // If values match, the server has caught up - clear the dirty entry\n if (areEqual) {\n keysToRemove.push(key);\n }\n }\n\n // Remove reconciled fields\n if (keysToRemove.length > 0) {\n for (const key_0 of keysToRemove) {\n delete dirtyRef.current[key_0 as keyof typeof dirty_1];\n }\n if (__DEV__) {\n console.log('[useAutosave] Reconciled fields:', keysToRemove);\n }\n\n // Trigger re-render to update merged value\n setTick(t => t + 1);\n }\n }, [watchedData, entityId]);\n\n // ============================================================================\n // Unmount Cleanup\n // ============================================================================\n\n useEffect(() => {\n return () => {\n // Clear timer\n if (timerRef.current) {\n clearTimeout(timerRef.current);\n }\n\n // Flush any remaining dirty data via ref (DRY - reuses fireAndForgetFlush)\n const eid_1 = entityIdRef.current;\n const dirty_2 = dirtyRef.current;\n if (eid_1 && !isDirtyEmpty(dirty_2)) {\n fireAndForgetFlushRef.current(eid_1, dirty_2);\n }\n };\n }, []);\n\n // ============================================================================\n // Public API: patch\n // ============================================================================\n\n const patch = useCallback((updates: Partial<T>) => {\n // Guard: entityId must be set\n if (entityIdRef.current === null) {\n if (__DEV__) {\n console.error('[useAutosave] patch() called while entityId is null');\n }\n return;\n }\n\n // Accumulate into dirty buffer\n Object.assign(dirtyRef.current, updates);\n\n // Clear error on new edit (use ref to avoid stale closure)\n if (saveErrorRef.current) {\n setSaveError(null);\n }\n\n // Reset debounce timer\n if (timerRef.current) {\n clearTimeout(timerRef.current);\n }\n timerRef.current = setTimeout(() => executeSaveRef.current(), delay);\n\n // Trigger exactly one re-render\n setTick(t_0 => t_0 + 1);\n }, [delay]);\n\n // ============================================================================\n // Public API: flush\n // ============================================================================\n\n const flush = useCallback(async () => {\n if (timerRef.current) {\n clearTimeout(timerRef.current);\n timerRef.current = null;\n }\n await executeSave();\n }, [executeSave]);\n\n // ============================================================================\n // Public API: retry\n // ============================================================================\n\n const retry = useCallback(() => {\n if (!entityIdRef.current || isDirtyEmpty(dirtyRef.current)) {\n return;\n }\n setSaveError(null);\n executeSave();\n }, [executeSave]);\n\n // ============================================================================\n // Public API: clearError\n // ============================================================================\n\n const clearError = useCallback(() => {\n setSaveError(null);\n }, []);\n\n // ============================================================================\n // Compute Merged Value\n // ============================================================================\n\n const value = useMemo((): T | null => {\n // Access tick to create dependency (forces recompute on patch)\n void tick;\n if (!watchedData) return null;\n if (!entityId) return watchedData;\n const dirty_3 = dirtyRef.current;\n if (isDirtyEmpty(dirty_3)) return watchedData;\n\n // Overlay dirty fields on top of watched data\n return {\n ...watchedData,\n ...dirty_3\n };\n }, [watchedData, entityId, tick]);\n\n // ============================================================================\n // Return\n // ============================================================================\n\n return {\n value,\n patch,\n flush,\n retry,\n isSaving: isSaving || isPending,\n saveError,\n clearError\n };\n}\nexport default useAutosave;","import { c as _c } from \"react/compiler-runtime\";\nimport { isUsable } from \"@pol-studios/utils\";\nimport { useEffect } from \"react\";\nimport { UseMutationResult } from \"@tanstack/react-query\";\nimport { useToast } from \"@pol-studios/hooks/toast\";\nimport { UseDbUpsertResult } from \"./hooks\";\nexport default function useToastError(mutation) {\n const $ = _c(5);\n const toast = useToast();\n let t0;\n if ($[0] !== mutation.error || $[1] !== toast) {\n t0 = () => {\n if (isUsable(mutation.error) === false) {\n return;\n }\n toast.toast({\n title: \"Error\",\n description: mutation.error.message\n });\n };\n $[0] = mutation.error;\n $[1] = toast;\n $[2] = t0;\n } else {\n t0 = $[2];\n }\n let t1;\n if ($[3] !== mutation.error) {\n t1 = [mutation.error];\n $[3] = mutation.error;\n $[4] = t1;\n } else {\n t1 = $[4];\n }\n useEffect(t0, t1);\n return mutation;\n}","import { PostgrestParser } from \"./parser/PostgrestParser\";\nimport { PostgrestResponseSuccess } from \"./parser/types\";\nimport { Filter, FilterOperator, FilterGroup, QueryState, normalizeFilter } from \"./useDbAdvanceQuery\";\nimport { PostgrestSingleResponse } from \"@supabase/supabase-js\";\nexport async function executeAdvanceQuery<Result>(supabase: any, query: PromiseLike<PostgrestSingleResponse<Result>>, filterLayer: QueryState): Promise<{\n data: any;\n count: number | null;\n error: any;\n}> {\n const parser = new PostgrestParser<Result>(query as any);\n\n // Separate filters from pagination/sort/isReady\n const filterGroup: FilterGroup = {\n id: filterLayer.id,\n op: filterLayer.op,\n not: filterLayer.not,\n filters: filterLayer.filters.map(normalizeFilter).filter((f): f is Filter | FilterGroup => f !== null)\n };\n const pagination: {\n offset: number | undefined;\n limit: number | undefined;\n } = {\n offset: undefined,\n limit: undefined\n };\n const sort = [...(filterLayer.sort || [])];\n const searchParams = Array.from(parser.searchParams.entries());\n searchParams.forEach(([k, v]) => {\n if (k.includes(\"offset\")) {\n pagination.offset = Number(v);\n return;\n }\n if (k.includes(\"limit\")) {\n pagination.limit = Number(v);\n return;\n }\n if (k.includes(\"order\")) {\n const orderColumns = v.split(\",\");\n orderColumns.forEach(x => {\n const values = x.split(\".\");\n sort.push({\n field: values[0],\n direction: values[1] === \"asc\" ? \"asc\" : \"desc\"\n });\n });\n return;\n }\n if (v.includes(\".\") === false) return;\n const values = v.split(\".\");\n const column = k;\n const rawCondition = values[0];\n let condition = \"\";\n const value = values[1];\n if (column == \"select\") return;\n switch (rawCondition) {\n case \"eq\":\n condition = \"=\";\n break;\n case \"in\":\n condition = \"in\";\n break;\n case \"lt\":\n condition = \"<\";\n break;\n case \"gt\":\n condition = \">\";\n break;\n case \"lte\":\n condition = \"<=\";\n break;\n case \"gte\":\n condition = \">=\";\n break;\n case \"is\":\n condition = \"is\";\n break;\n case \"ilike\":\n condition = \"ilike\";\n break;\n case \"neq\":\n condition = \"=\"; /* will set not:true later */\n break;\n case \"like\":\n condition = \"contains\";\n break;\n }\n filterGroup.filters.push({\n id: `filter_${column}_${Date.now()}`,\n field: column,\n op: condition as any,\n value: value,\n display: `${column} ${condition} ${value}`\n });\n });\n const stripUIProperties = (obj: any): any => {\n return JSON.parse(JSON.stringify(obj, (key, value) => {\n if (key === \"display\" || key === \"info\" || key === \"options\") {\n return undefined;\n }\n return value;\n }));\n };\n const cleanedBody = stripUIProperties({\n table: parser.table,\n schema: parser.schema,\n select: parser.select,\n filters: filterGroup,\n pagination: pagination,\n sort: sort,\n count: \"exact\"\n });\n const response = await supabase.functions.invoke(\"query\", {\n body: cleanedBody,\n method: \"POST\"\n });\n if (response.error) {\n return {\n data: null,\n count: null,\n error: response.error\n };\n }\n return {\n data: response.data?.data ?? null,\n count: response.data?.count ?? null,\n error: null\n };\n}","/**\n * Storage bucket names for Supabase storage.\n * Use these constants when calling storage APIs.\n */\nexport const BUCKETS = {\n AVATARS: \"avatars\",\n FIXTURE_CATALOG_COVER: \"fixture-catalog-cover\",\n FIXTURE_ATTACHMENTS: \"fixture-attachments\",\n UNIT_DOCUMENTATION: \"unit-documentation-attachments\",\n DATASHEETS: \"datasheets\",\n PATTERNS: \"patterns\",\n LOGOS: \"logos\",\n RECEIPTS: \"receipts\",\n TICKET_ATTACHMENTS: \"ticket-attachment\",\n PROCESS_RESULTS: \"process-results\",\n DATA_EXCHANGE_IMPORTS: \"data-exchange-imports\",\n EMAIL_TEMPLATES: \"email-templates\",\n EMAIL_TEMPLATES_ASSETS: \"email-templates-assets\"\n} as const;\nexport type BucketName = (typeof BUCKETS)[keyof typeof BUCKETS];","import { createContext, useContext } from \"react\";\nimport type { AttachmentQueueProvider } from \"./useStorageSource\";\nexport interface StorageQueueContextValue {\n /** The attachment queue provider, or null if not available */\n attachmentQueue: AttachmentQueueProvider | null;\n /** Whether the queue has finished initializing (cold start guard) */\n isReady: boolean;\n}\nexport const StorageQueueContext = createContext<StorageQueueContextValue | null>(null);\nStorageQueueContext.displayName = \"StorageQueueContext\";\n\n/**\n * Internal hook used by useStorageSource to auto-detect the queue.\n * Returns null if no StorageQueueProvider is present (web, tests, etc.)\n */\nexport function useStorageQueueContext() {\n return useContext(StorageQueueContext);\n}","/**\n * Utilities for detecting storage authentication errors.\n *\n * These utilities help identify when a storage operation failed due to\n * authentication issues (expired tokens, invalid sessions, etc.) that\n * can often be resolved by refreshing the user's session.\n */\n\n/**\n * Patterns that indicate an error is authentication-related.\n * These are checked against error messages when the status code alone\n * isn't sufficient to determine if it's an auth error.\n */\nconst AUTH_ERROR_PATTERNS = [/\\btoken\\b/i, /\\bauthoriz/i, /\\bauthenticat/i, /\\bsession\\b/i, /\\bexpired?\\b/i, /\\binvalid.*credential/i, /\\bno.*session\\b/i, /\\bJWT\\b/i] as const;\n\n/**\n * Patterns that indicate an error is due to being offline/network unavailable.\n * These errors are expected in offline-first apps and shouldn't be logged as errors.\n */\nconst OFFLINE_ERROR_PATTERNS = [/\\boffline\\b/i, /\\bnetwork.*unavailable\\b/i, /\\bno.*internet\\b/i, /\\binternet.*connection.*offline\\b/i, /\\bfetch failed.*offline\\b/i, /\\bnetwork request failed\\b/i, /\\bnetwork error\\b/i, /\\bconnection.*refused\\b/i, /\\bECONNREFUSED\\b/i, /\\bENOTFOUND\\b/i, /\\bETIMEDOUT\\b/i] as const;\n\n/**\n * Check if a storage error is an authentication error.\n *\n * These errors can often be fixed by refreshing the session.\n *\n * @param error - The error to check (typically from Supabase Storage operations)\n * @returns true if the error appears to be authentication-related\n *\n * @example\n * ```typescript\n * const { data, error } = await storage.createSignedUrl(path, 3600);\n * if (error && isStorageAuthError(error)) {\n * await supabase.auth.refreshSession();\n * // Retry the request...\n * }\n * ```\n */\nexport function isStorageAuthError(error: unknown): boolean {\n if (!error) return false;\n const errorObj = error as {\n status?: number;\n statusCode?: number;\n message?: string;\n };\n const status = errorObj.status ?? errorObj.statusCode;\n\n // 401 (Unauthorized) and 403 (Forbidden) are always auth errors\n if (status === 401 || status === 403) {\n return true;\n }\n\n // 400 (Bad Request) is only an auth error when the message contains auth-related keywords\n // This is because custom gateways may return 400 with messages like\n // \"querystring must have required property 'token'\" for auth failures,\n // but 400 can also mean malformed parameters unrelated to auth\n if (status === 400) {\n const msg = errorObj.message ?? String(error);\n return /\\btoken\\b/i.test(msg) || /\\bauthoriz/i.test(msg) || /\\bauthenticat/i.test(msg);\n }\n\n // For other status codes (or no status), check the error message for auth-related keywords\n const message = errorObj.message ?? String(error);\n return AUTH_ERROR_PATTERNS.some(pattern => pattern.test(message));\n}\n\n/**\n * Check if a storage error is due to the device being offline.\n *\n * These errors are expected in offline-first apps where local cache\n * is available and shouldn't be logged as errors.\n *\n * @param error - The error to check\n * @returns true if the error indicates the device is offline\n *\n * @example\n * ```typescript\n * const { data, error } = await storage.createSignedUrl(path, 3600);\n * if (error && isOfflineError(error)) {\n * // Don't log as error - expected when offline with local cache\n * console.debug('Offline, using local cache');\n * }\n * ```\n */\nexport function isOfflineError(error: unknown): boolean {\n if (!error) return false;\n const errorObj = error as {\n message?: string;\n cause?: unknown;\n };\n const message = errorObj.message ?? String(error);\n\n // Check main error message\n if (OFFLINE_ERROR_PATTERNS.some(pattern => pattern.test(message))) {\n return true;\n }\n\n // Also check cause if present (fetch errors often wrap the real error)\n if (errorObj.cause) {\n const causeMessage = typeof errorObj.cause === 'string' ? errorObj.cause : (errorObj.cause as {\n message?: string;\n }).message ?? String(errorObj.cause);\n return OFFLINE_ERROR_PATTERNS.some(pattern => pattern.test(causeMessage));\n }\n return false;\n}\n\n/**\n * Extract a meaningful error message from a storage error.\n *\n * Supabase Storage errors may have different structures:\n * - Standard Error with `.message` property\n * - StorageError with `.message` and optional `.error` property\n * - Response-like object with `status`, `statusText`, `url` properties\n * - Plain string\n *\n * This function handles all these cases and returns a human-readable message.\n *\n * @param error - The error to extract a message from\n * @returns A human-readable error message\n *\n * @example\n * ```typescript\n * const { data, error } = await storage.createSignedUrl(path, 3600);\n * if (error) {\n * console.error(getStorageErrorMessage(error));\n * // \"Invalid path format\" or \"Object not found\" etc.\n * }\n * ```\n */\nexport function getStorageErrorMessage(error: unknown): string {\n if (!error) return 'Unknown error';\n\n // Handle plain strings\n if (typeof error === 'string') {\n return error;\n }\n\n // Handle Error objects and Supabase StorageError\n const errorObj = error as {\n message?: string;\n error?: string;\n status?: number;\n statusCode?: number;\n statusText?: string;\n name?: string;\n cause?: unknown;\n };\n\n // Prefer .message if it exists and is a non-empty string\n if (typeof errorObj.message === 'string' && errorObj.message.length > 0) {\n return errorObj.message;\n }\n\n // Check for .error property (some Supabase errors use this)\n if (typeof errorObj.error === 'string' && errorObj.error.length > 0) {\n return errorObj.error;\n }\n\n // Construct message from status code if available\n const status = errorObj.status ?? errorObj.statusCode;\n if (status) {\n const statusText = errorObj.statusText || getStatusText(status);\n return `HTTP ${status}: ${statusText}`;\n }\n\n // Fall back to JSON stringification, but handle circular references\n try {\n return JSON.stringify(error);\n } catch {\n return String(error);\n }\n}\n\n/**\n * Get a human-readable status text for common HTTP status codes.\n */\nfunction getStatusText(status: number): string {\n switch (status) {\n case 400:\n return 'Bad Request';\n case 401:\n return 'Unauthorized';\n case 403:\n return 'Forbidden';\n case 404:\n return 'Not Found';\n case 409:\n return 'Conflict';\n case 413:\n return 'Payload Too Large';\n case 422:\n return 'Unprocessable Entity';\n case 429:\n return 'Too Many Requests';\n case 500:\n return 'Internal Server Error';\n case 502:\n return 'Bad Gateway';\n case 503:\n return 'Service Unavailable';\n case 504:\n return 'Gateway Timeout';\n default:\n return 'Error';\n }\n}\n\n/**\n * Normalize a storage path by removing leading slashes.\n *\n * Supabase Storage expects paths without leading slashes.\n * This function ensures the path is properly formatted.\n *\n * @param path - The storage path to normalize\n * @returns The normalized path without leading slashes\n *\n * @example\n * ```typescript\n * normalizeStoragePath('/foo/bar.jpg'); // 'foo/bar.jpg'\n * normalizeStoragePath('foo/bar.jpg'); // 'foo/bar.jpg'\n * normalizeStoragePath('//foo/bar.jpg'); // 'foo/bar.jpg'\n * ```\n */\nexport function normalizeStoragePath(path: string): string {\n // Remove leading slashes\n let normalized = path;\n while (normalized.startsWith('/')) {\n normalized = normalized.slice(1);\n }\n return normalized;\n}","import { useState, useEffect, useCallback, useMemo } from \"react\";\nimport useSupabase from \"../useSupabase\";\nimport { BUCKETS } from \"./bucketConfig\";\nimport type { TransformOptions } from \"@supabase/storage-js\";\nimport type { SupabaseClient } from \"@supabase/supabase-js\";\nimport { useStorageQueueContext } from \"./StorageQueueContext\";\nimport { isStorageAuthError, isOfflineError, getStorageErrorMessage, normalizeStoragePath } from \"./auth-error-utils\";\n\n/**\n * Async attachment queue provider for PowerSync integration.\n * Used for async-first local lookups.\n */\nexport interface AttachmentQueueProvider {\n /** Get local file URI for a storage path asynchronously, or null if not cached */\n getLocalUriForStoragePath: (storagePath: string) => Promise<string | null>;\n /**\n * Subscribe to cache/download progress updates. Returns cleanup function.\n *\n * Note: Callback uses `...args: unknown[]` for structural compatibility with\n * PolAttachmentQueue.onProgress which passes stats. This package doesn't need\n * the stats, so we accept any args to avoid importing PowerSync types.\n */\n onProgress?: (callback: (...args: unknown[]) => void) => () => void;\n}\nexport interface UseStorageSourceOptions {\n /** Storage bucket ID (defaults to UNIT_DOCUMENTATION) */\n bucketId?: string;\n /** Whether to enable the hook (defaults to true) */\n enabled?: boolean;\n /** Image transform options for Supabase */\n transform?: TransformOptions;\n /**\n * PowerSync attachment queue for async local-first caching.\n */\n attachmentQueue?: AttachmentQueueProvider | null;\n /** Use public URL instead of signed URL (defaults to false) */\n usePublicUrl?: boolean;\n}\nexport interface UseStorageSourceResult {\n /** Resolved URI (local file:// or remote signed URL) */\n uri: string | null;\n /** Whether the URI is currently being fetched */\n isLoading: boolean;\n /** Whether the URI is from local cache */\n isLocal: boolean;\n /** Error if fetching failed */\n error: Error | null;\n /** Force refresh the URI */\n refresh: () => void;\n /** Imperatively fetch a signed URL for any path (checks local cache first) */\n getSignedUrl: (path: string, options?: {\n transform?: TransformOptions;\n }) => Promise<string | null>;\n /** Clear local state and trigger a refresh */\n invalidate: () => void;\n}\n\n/**\n * Standalone utility for fetching storage URLs outside React components.\n * Does not check local cache - use for server-side or non-React contexts.\n * Includes session refresh retry logic for auth errors.\n */\nexport async function getStorageUrl(supabase: SupabaseClient, storagePath: string, options?: {\n bucketId?: string;\n transform?: TransformOptions;\n usePublicUrl?: boolean;\n}): Promise<string | null> {\n // Normalize the path to remove any leading slashes\n const normalizedPath = normalizeStoragePath(storagePath);\n const bucket = options?.bucketId ?? BUCKETS.UNIT_DOCUMENTATION;\n const storage = supabase.storage.from(bucket);\n if (options?.usePublicUrl) {\n const {\n data\n } = storage.getPublicUrl(normalizedPath, {\n transform: options?.transform\n });\n return data?.publicUrl ?? null;\n }\n const {\n data,\n error\n } = await storage.createSignedUrl(normalizedPath, 3600, {\n transform: options?.transform\n });\n if (error) {\n const errorMessage = getStorageErrorMessage(error);\n\n // Check if this is an auth error that might be fixed by refreshing the session\n if (isStorageAuthError(error)) {\n if (__DEV__) {\n console.warn(`[getStorageUrl] Auth error creating signed URL, refreshing session and retrying:`, {\n path: normalizedPath,\n bucket,\n error: errorMessage\n });\n }\n\n // Refresh the session and retry\n await supabase.auth.refreshSession();\n const {\n data: retryData,\n error: retryError\n } = await storage.createSignedUrl(normalizedPath, 3600, {\n transform: options?.transform\n });\n if (retryError) {\n const retryErrorMessage = getStorageErrorMessage(retryError);\n throw new Error(`Failed to create signed URL after session refresh: ${retryErrorMessage}`);\n }\n return retryData?.signedUrl ?? null;\n }\n throw new Error(`Failed to create signed URL for '${normalizedPath}' in bucket '${bucket}': ${errorMessage}`);\n }\n return data?.signedUrl ?? null;\n}\n\n/**\n * Unified hook for resolving storage URLs with optional local-first caching.\n *\n * Works on both web and React Native:\n * - On web (no attachmentQueue): Fetches Supabase signed URLs directly\n * - On RN with PowerSync: Checks local attachment cache first, falls back to signed URLs\n *\n * @example\n * // Basic usage (web or RN without local cache)\n * const { uri, isLoading } = useStorageSource(photo.storage_path);\n *\n * @example\n * // With PowerSync attachment queue (RN)\n * const attachmentQueue = useAttachmentQueue();\n * const { uri, isLocal } = useStorageSource(photo.storage_path, {\n * attachmentQueue,\n * });\n *\n * @example\n * // With transform options\n * const { uri } = useStorageSource(photo.storage_path, {\n * transform: { width: 200, height: 200, resize: 'contain' },\n * });\n */\nexport function useStorageSource(storagePath: string | null | undefined, options?: UseStorageSourceOptions): UseStorageSourceResult {\n const {\n bucketId = BUCKETS.UNIT_DOCUMENTATION,\n enabled = true,\n transform,\n attachmentQueue: explicitQueue,\n usePublicUrl = false\n } = options ?? {};\n\n // AUTO-DETECT: If no explicit queue passed, try context\n const storageQueueCtx = useStorageQueueContext();\n const attachmentQueue = explicitQueue !== undefined ? explicitQueue // explicit opt-in/opt-out wins\n : storageQueueCtx?.isReady ? storageQueueCtx.attachmentQueue : null;\n const supabase = useSupabase();\n\n // Check if we have a valid attachment queue (async)\n const hasLocalCache = attachmentQueue?.getLocalUriForStoragePath != null;\n\n // Local URI starts null; async queue resolves in useEffect\n const [localUri, setLocalUri] = useState<string | null>(null);\n const [remoteUri, setRemoteUri] = useState<string | null>(null);\n const [isLoading, setIsLoading] = useState(() => {\n // If using async queue, always start loading (will resolve in useEffect)\n if (hasLocalCache && storagePath && enabled) return true;\n return !!storagePath && enabled;\n });\n const [error, setError] = useState<Error | null>(null);\n const [refreshKey, setRefreshKey] = useState(0);\n\n // Unified effect: check local first, then fetch remote only if needed\n useEffect(() => {\n if (!storagePath || !enabled) {\n setLocalUri(null);\n setRemoteUri(null);\n setIsLoading(false);\n return;\n }\n let cancelled = false;\n setIsLoading(true);\n setError(null);\n const resolve = async () => {\n // Step 1: Check local cache first (if available)\n if (hasLocalCache) {\n try {\n const cachedUri = await attachmentQueue!.getLocalUriForStoragePath(storagePath);\n if (!cancelled && cachedUri) {\n if (__DEV__) {\n console.log(`[useStorageSource] Local cache HIT for \"${storagePath}\"`);\n }\n setLocalUri(cachedUri);\n setRemoteUri(null);\n setIsLoading(false);\n return; // Done - no need to fetch remote\n }\n if (__DEV__ && !cancelled) {\n console.log(`[useStorageSource] Local cache MISS for \"${storagePath}\", fetching remote...`);\n }\n } catch (e) {\n if (__DEV__ && !cancelled) {\n console.warn(`[useStorageSource] Local lookup failed for \"${storagePath}\", falling back to remote:`, e);\n }\n }\n }\n if (cancelled) return;\n\n // Step 2: Fetch remote URL (local cache miss or unavailable)\n setLocalUri(null);\n try {\n const normalizedPath = normalizeStoragePath(storagePath);\n const storage = supabase.storage.from(bucketId);\n let url: string | null = null;\n if (usePublicUrl) {\n const {\n data\n } = storage.getPublicUrl(normalizedPath, {\n transform\n });\n url = data?.publicUrl ?? null;\n } else {\n const {\n data: data_0,\n error: err\n } = await storage.createSignedUrl(normalizedPath, 3600, {\n transform\n });\n if (err) {\n const errorMessage = getStorageErrorMessage(err);\n const isAuthError = isStorageAuthError(err);\n if (isAuthError) {\n if (__DEV__) {\n console.warn(`[useStorageSource] Auth error, refreshing session and retrying:`, {\n path: normalizedPath,\n bucket: bucketId,\n error: errorMessage\n });\n }\n await supabase.auth.refreshSession();\n const {\n data: retryData,\n error: retryError\n } = await storage.createSignedUrl(normalizedPath, 3600, {\n transform\n });\n if (retryError) {\n const retryErrorMessage = getStorageErrorMessage(retryError);\n throw new Error(`Failed after session refresh: ${retryErrorMessage}`);\n }\n url = retryData?.signedUrl ?? null;\n if (__DEV__) {\n console.log(`[useStorageSource] Successfully created signed URL after session refresh`);\n }\n } else {\n if (isOfflineError(err) && hasLocalCache) {\n if (__DEV__) {\n console.warn(`[useStorageSource] Offline, skipping remote URL for \"${normalizedPath}\"`);\n }\n } else {\n console.error(`[useStorageSource] createSignedUrl error for \"${normalizedPath}\" in bucket \"${bucketId}\":`, errorMessage);\n }\n throw new Error(`Failed to create signed URL: ${errorMessage}`);\n }\n } else {\n url = data_0?.signedUrl ?? null;\n }\n }\n if (!cancelled) {\n if (__DEV__) {\n console.log(`[useStorageSource] Got remote URL for \"${storagePath}\"`);\n }\n setRemoteUri(url);\n }\n } catch (e_0) {\n if (!cancelled) {\n if (isOfflineError(e_0) && hasLocalCache) {\n if (__DEV__) {\n console.warn(`[useStorageSource] Offline, cannot fetch remote URL for \"${storagePath}\"`);\n }\n } else {\n console.error(`[useStorageSource] Failed for \"${storagePath}\":`, e_0);\n }\n setError(e_0 instanceof Error ? e_0 : new Error(String(e_0)));\n }\n } finally {\n if (!cancelled) setIsLoading(false);\n }\n };\n resolve();\n\n // Subscribe to progress updates to re-check cache when downloads complete\n let unsubscribe: (() => void) | undefined;\n if (hasLocalCache && attachmentQueue?.onProgress) {\n unsubscribe = attachmentQueue.onProgress(() => {\n resolve(); // Re-run when progress updates (e.g., download completes)\n });\n }\n return () => {\n cancelled = true;\n unsubscribe?.();\n };\n }, [storagePath, bucketId, transform, enabled, hasLocalCache, attachmentQueue, supabase, refreshKey, usePublicUrl]);\n const refresh = useCallback(() => setRefreshKey(k => k + 1), []);\n const invalidate = useCallback(() => {\n setLocalUri(null);\n setRemoteUri(null);\n setRefreshKey(k_0 => k_0 + 1);\n }, []);\n const getSignedUrl = useCallback(async (path: string, opts?: {\n transform?: TransformOptions;\n }): Promise<string | null> => {\n // Check async queue first if available\n if (hasLocalCache) {\n const cached = await attachmentQueue!.getLocalUriForStoragePath(path);\n if (cached) return cached;\n }\n // Fall back to remote signed URL\n return getStorageUrl(supabase, path, {\n bucketId,\n transform: opts?.transform,\n usePublicUrl\n });\n }, [hasLocalCache, attachmentQueue, supabase, bucketId, usePublicUrl]);\n\n // Memoize disabled state result\n const disabledResult = useMemo<UseStorageSourceResult>(() => ({\n uri: null,\n isLoading: false,\n isLocal: false,\n error: null,\n refresh,\n getSignedUrl,\n invalidate\n }), [refresh, getSignedUrl, invalidate]);\n if (!enabled) {\n return disabledResult;\n }\n return {\n uri: localUri || remoteUri,\n isLoading: !localUri && isLoading,\n isLocal: !!localUri,\n error: localUri ? null : error,\n refresh,\n getSignedUrl,\n invalidate\n };\n}\nexport default useStorageSource;","import { c as _c } from \"react/compiler-runtime\";\nimport React, { useMemo, ReactNode } from \"react\";\nimport { StorageQueueContext, StorageQueueContextValue } from \"./StorageQueueContext\";\nimport type { AttachmentQueueProvider } from \"./useStorageSource\";\nexport interface StorageQueueProviderProps {\n children: ReactNode;\n /** The attachment queue instance (from @pol/powersync or any conforming implementation) */\n attachmentQueue: AttachmentQueueProvider | null;\n /** Whether the queue has finished its async init */\n isReady: boolean;\n}\nexport function StorageQueueProvider(t0) {\n const $ = _c(6);\n const {\n children,\n attachmentQueue,\n isReady\n } = t0;\n let t1;\n if ($[0] !== attachmentQueue || $[1] !== isReady) {\n t1 = {\n attachmentQueue,\n isReady\n };\n $[0] = attachmentQueue;\n $[1] = isReady;\n $[2] = t1;\n } else {\n t1 = $[2];\n }\n const value = t1;\n let t2;\n if ($[3] !== children || $[4] !== value) {\n t2 = <StorageQueueContext.Provider value={value}>{children}</StorageQueueContext.Provider>;\n $[3] = children;\n $[4] = value;\n $[5] = t2;\n } else {\n t2 = $[5];\n }\n return t2;\n}","import { chunkArray } from \"@pol-studios/utils\";\nexport function createInCondition(column: string, values: (string | number)[]) {\n let condition = \"\";\n if (values.length > 2000) {\n throw new Error(\"Too many values to create in condition\");\n }\n chunkArray(values, 99).forEach((x, index) => {\n if (index == 0) {\n condition = `${column}.in.(${x.join(\",\")})`;\n return;\n }\n condition += `,${column}.in.(${x.join(\",\")})`;\n });\n return condition;\n}","import { c as _c } from \"react/compiler-runtime\";\nimport { useDeleteItem, useQueriesForTableLoader, useUpsertItem } from \"@supabase-cache-helpers/postgrest-react-query\";\nimport { useEffect, useState, useRef } from \"react\";\nimport useSupabase, { UserSessionId } from \"./useSupabase\";\nimport { newUuid } from \"@pol-studios/utils\";\nimport { buildNormalizedQuery, normalizeResponse } from \"@supabase-cache-helpers/postgrest-core\";\nimport { REALTIME_POSTGRES_CHANGES_LISTEN_EVENT, type RealtimePostgresChangesPayload } from \"@supabase/supabase-js\";\nimport { useDelayedValue } from \"@pol-studios/hooks/state\";\nexport default function useDbRealtime(key, query, table, primaryKeys, options) {\n const $ = _c(37);\n const supabase = useSupabase();\n const tableNameValue = typeof table === \"string\" ? table : table.table;\n const schemaValue = typeof table === \"string\" ? \"public\" : table.schema;\n const queriesForTable = useQueriesForTableLoader(tableNameValue);\n let t0;\n if ($[0] !== primaryKeys || $[1] !== schemaValue || $[2] !== tableNameValue) {\n t0 = {\n primaryKeys,\n table: tableNameValue,\n schema: schemaValue\n };\n $[0] = primaryKeys;\n $[1] = schemaValue;\n $[2] = tableNameValue;\n $[3] = t0;\n } else {\n t0 = $[3];\n }\n const deleteItem = useDeleteItem(t0);\n let t1;\n if ($[4] !== primaryKeys || $[5] !== schemaValue || $[6] !== tableNameValue) {\n t1 = {\n primaryKeys,\n table: tableNameValue,\n schema: schemaValue\n };\n $[4] = primaryKeys;\n $[5] = schemaValue;\n $[6] = tableNameValue;\n $[7] = t1;\n } else {\n t1 = $[7];\n }\n const upsertItem = useUpsertItem(t1);\n const [realtimeState, setRealtimeState] = useState(\"CLOSED\");\n const [retryTick, setRetryTick] = useState(0);\n const channelRef = useRef(null);\n const lastRetryTimeRef = useRef(0);\n const retryCountRef = useRef(0);\n const enabled = options?.enabled ?? true;\n const filter = options?.filter;\n const onChange = options?.onChange;\n const debouncedKey = useDelayedValue(key, 50);\n let t2;\n if ($[8] !== deleteItem || $[9] !== enabled || $[10] !== filter || $[11] !== onChange || $[12] !== primaryKeys || $[13] !== queriesForTable || $[14] !== query || $[15] !== retryTick || $[16] !== schemaValue || $[17] !== supabase || $[18] !== tableNameValue || $[19] !== upsertItem) {\n t2 = () => {\n if (!enabled) {\n if (channelRef.current) {\n channelRef.current.unsubscribe();\n supabase.removeChannel(channelRef.current);\n channelRef.current = null;\n }\n setRealtimeState(\"CLOSED\");\n return;\n }\n const now = Date.now();\n const timeSinceLastRetry = now - lastRetryTimeRef.current;\n if (timeSinceLastRetry < 2000 && retryTick > 0) {\n return;\n }\n if (channelRef.current) {\n channelRef.current.unsubscribe();\n supabase.removeChannel(channelRef.current);\n channelRef.current = null;\n }\n lastRetryTimeRef.current = now;\n retryCountRef.current = retryCountRef.current + 1;\n const channel = supabase.channel(newUuid()).on(\"postgres_changes\", {\n event: \"*\",\n schema: schemaValue,\n table: tableNameValue,\n filter\n }, async payload => {\n let data = payload.new ?? payload.old;\n if (payload.new && Object.keys(payload.new).length > 0) {\n const selectQuery = buildNormalizedQuery({\n queriesForTable,\n query\n });\n if (payload.eventType !== REALTIME_POSTGRES_CHANGES_LISTEN_EVENT.DELETE && selectQuery) {\n if (selectQuery.groupedUserQueryPaths?.every(x => x.path in data) === false) {\n const qb = supabase.schema(payload.schema as any).from(payload.table as any).select(selectQuery.selectQuery);\n for (const pk of primaryKeys) {\n qb.eq(pk.toString(), data[pk]);\n }\n const res = await qb.single();\n if (res.data) {\n data = normalizeResponse(selectQuery.groupedPaths, res.data);\n }\n }\n }\n if (\"changedBySessionId\" in data) {\n const sessionId = data.changedBySessionId;\n if (sessionId !== UserSessionId) {\n await upsertItem(data);\n }\n } else {\n await upsertItem(data);\n }\n }\n if (payload.eventType === REALTIME_POSTGRES_CHANGES_LISTEN_EVENT.DELETE) {\n await deleteItem(payload.old);\n }\n if (payload.errors?.length > 0) {\n setRealtimeState(\"CHANNEL_ERROR\");\n }\n if (onChange) {\n onChange(payload);\n }\n }).subscribe(status => {\n setRealtimeState(status);\n if (status === \"SUBSCRIBED\") {\n retryCountRef.current = 0;\n }\n });\n channelRef.current = channel;\n return () => {\n if (channelRef.current) {\n channelRef.current.unsubscribe();\n supabase.removeChannel(channelRef.current);\n channelRef.current = null;\n }\n };\n };\n $[8] = deleteItem;\n $[9] = enabled;\n $[10] = filter;\n $[11] = onChange;\n $[12] = primaryKeys;\n $[13] = queriesForTable;\n $[14] = query;\n $[15] = retryTick;\n $[16] = schemaValue;\n $[17] = supabase;\n $[18] = tableNameValue;\n $[19] = upsertItem;\n $[20] = t2;\n } else {\n t2 = $[20];\n }\n let t3;\n if ($[21] !== primaryKeys) {\n t3 = primaryKeys.join(\",\");\n $[21] = primaryKeys;\n $[22] = t3;\n } else {\n t3 = $[22];\n }\n let t4;\n if ($[23] !== debouncedKey || $[24] !== enabled || $[25] !== filter || $[26] !== query || $[27] !== retryTick || $[28] !== schemaValue || $[29] !== supabase || $[30] !== t3 || $[31] !== tableNameValue) {\n t4 = [supabase, tableNameValue, schemaValue, enabled, filter, query, t3, retryTick, debouncedKey];\n $[23] = debouncedKey;\n $[24] = enabled;\n $[25] = filter;\n $[26] = query;\n $[27] = retryTick;\n $[28] = schemaValue;\n $[29] = supabase;\n $[30] = t3;\n $[31] = tableNameValue;\n $[32] = t4;\n } else {\n t4 = $[32];\n }\n useEffect(t2, t4);\n let t5;\n let t6;\n if ($[33] !== enabled || $[34] !== realtimeState) {\n t5 = () => {\n if (!enabled || realtimeState === \"SUBSCRIBED\") {\n retryCountRef.current = 0;\n return;\n }\n const delay = Math.min(5000 * Math.pow(2, retryCountRef.current), 60000);\n const id = setTimeout(() => {\n setRetryTick(_temp);\n }, delay);\n return () => clearTimeout(id);\n };\n t6 = [realtimeState, enabled];\n $[33] = enabled;\n $[34] = realtimeState;\n $[35] = t5;\n $[36] = t6;\n } else {\n t5 = $[35];\n t6 = $[36];\n }\n useEffect(t5, t6);\n return realtimeState;\n}\nfunction _temp(t) {\n return t + 1;\n}","import { c as _c } from \"react/compiler-runtime\";\nimport { PostgrestSingleResponse } from \"@supabase/supabase-js\";\nimport { useEffect, useMemo } from \"react\";\nimport { ItemType } from \"@pol-studios/utils\";\nimport { encode, useQuery } from \"@supabase-cache-helpers/postgrest-react-query\";\nimport { UseQueryOptions } from \"@tanstack/react-query\";\nimport useDbRealtime from \"./useDbRealtime\";\nimport { isNullOrWhitespace } from \"@pol-studios/utils\";\nimport { UseDbQuerySingleReturn } from \"./useDbQuery\";\nimport { PostgrestParser } from \"./parser/PostgrestParser\";\ntype ConfigurationOptions<T> = {\n crossOrganization?: boolean;\n};\ntype FilterOperator = \"or\" | \"eq\" | \"neq\" | \"gt\" | \"gte\" | \"lt\" | \"lte\" | \"like\" | \"ilike\" | \"is\" | \"in\" | \"cs\" | \"cd\" | \"fts\" | \"plfts\";\ntype ValueType = number | string | boolean | null | Date | object;\ntype FilterDefinition = {\n path: string;\n alias?: string;\n operator: FilterOperator;\n negate: boolean;\n value: ValueType;\n};\ntype FilterDefinitions = (FilterComposite | FilterDefinition)[];\ntype FilterComposite = {\n or?: FilterDefinitions;\n and?: FilterDefinitions;\n};\nexport type UseDbRealtimeQueryResult<T> = UseDbQuerySingleReturn<T> & {\n realtimeStatus: \"SUBSCRIBED\" | \"TIMED_OUT\" | \"CLOSED\" | \"CHANNEL_ERROR\" | \"Loading...\";\n isRealtimeConnected: boolean;\n isRealtimeLoading: boolean;\n};\ntype DataType = Record<string, any>;\nexport function convertFilterToRealtimeQuery(filters: FilterDefinitions): string {\n function convert(filter: FilterComposite | FilterDefinition): string {\n //TODO: I just added this line to make it work\n if (!filter) return \"\";\n if (\"path\" in filter) {\n if (filter.path.includes(\".\")) return \"\";\n let valueString = filter.value?.toString() ?? \"null\";\n if (filter.operator === \"in\") {\n valueString = '(\"' + valueString.slice(2, valueString.length - 2).split(\",\").join('\",\"') + '\")';\n }\n return `${filter.path}=${filter.negate ? \"not.\" : \"\"}${filter.operator}.${valueString}`;\n } else {\n if (filter.or) {\n return `(${filter.or.map(f => convert(f)).join(\"|\")})`;\n } else if (filter.and) {\n return `(${filter.and.map(f => convert(f)).join(\"&\")})`;\n }\n }\n return \"\";\n }\n\n //todo: review later when multiple filters are available\n return convert(filters[0]);\n}\nexport function useDbRealtimeQuery(query, config, t0) {\n const $ = _c(27);\n let t1;\n if ($[0] !== t0) {\n t1 = t0 === undefined ? [\"id\" as any] : t0;\n $[0] = t0;\n $[1] = t1;\n } else {\n t1 = $[1];\n }\n const primaryKeys = t1;\n const t2 = query as any;\n let t3;\n if ($[2] !== t2) {\n t3 = new PostgrestParser(t2);\n $[2] = t2;\n $[3] = t3;\n } else {\n t3 = $[3];\n }\n const parser = t3;\n const request = useQuery(query, config as any);\n let filter;\n let selectStatement;\n let t4;\n let t5;\n if ($[4] !== parser.filters || $[5] !== parser.select || $[6] !== query || $[7] !== request.data) {\n const queryKey = encode(query, false);\n let t6;\n if ($[12] !== parser.filters || $[13] !== request.data) {\n const filterString = convertFilterToRealtimeQuery(parser.filters);\n filter = request.data && typeof request.data === \"object\" && \"id\" in request.data ? \"id=eq.\" + request.data.id : filterString;\n if (filter.includes(\"in.(\\\\\\\"\\\\\\\")\")) {\n filter = undefined;\n }\n t6 = isNullOrWhitespace(filter);\n $[12] = parser.filters;\n $[13] = request.data;\n $[14] = filter;\n $[15] = t6;\n } else {\n filter = $[14];\n t6 = $[15];\n }\n if (t6) {\n filter = undefined;\n }\n selectStatement = parser.select;\n t4 = useDbRealtime;\n t5 = queryKey.join(\"-\");\n $[4] = parser.filters;\n $[5] = parser.select;\n $[6] = query;\n $[7] = request.data;\n $[8] = filter;\n $[9] = selectStatement;\n $[10] = t4;\n $[11] = t5;\n } else {\n filter = $[8];\n selectStatement = $[9];\n t4 = $[10];\n t5 = $[11];\n }\n let t6;\n if ($[16] !== parser.schema || $[17] !== parser.table) {\n t6 = {\n schema: parser.schema,\n table: parser.table\n };\n $[16] = parser.schema;\n $[17] = parser.table;\n $[18] = t6;\n } else {\n t6 = $[18];\n }\n const t7 = typeof config?.enabled === \"boolean\" ? config.enabled : true;\n let t8;\n if ($[19] !== filter || $[20] !== t7) {\n t8 = {\n filter,\n enabled: t7\n };\n $[19] = filter;\n $[20] = t7;\n $[21] = t8;\n } else {\n t8 = $[21];\n }\n const realtimeStatus = t4(t5, selectStatement, t6, primaryKeys, t8);\n const outputRealtimeStatus = request.isFetching ? \"Loading...\" : realtimeStatus;\n const t9 = request.data as Result | null | undefined;\n const t10 = realtimeStatus == \"SUBSCRIBED\";\n let t11;\n if ($[22] !== outputRealtimeStatus || $[23] !== request || $[24] !== t10 || $[25] !== t9) {\n t11 = {\n ...request,\n data: t9,\n realtimeStatus: outputRealtimeStatus,\n isRealtimeConnected: t10,\n isRealtimeLoading: request.isFetching\n };\n $[22] = outputRealtimeStatus;\n $[23] = request;\n $[24] = t10;\n $[25] = t9;\n $[26] = t11;\n } else {\n t11 = $[26];\n }\n return t11 as UseDbRealtimeQueryResult<Result>;\n}","import { c as _c } from \"react/compiler-runtime\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport useSupabase, { Database } from \"./useSupabase\";\nimport { PostgrestSingleResponse } from \"@supabase/supabase-js\";\nimport { GetResult } from \"./parser/select-query-parser\";\nimport { GenericSchema } from \"./parser/types\";\nimport { useDeleteItem } from \"@supabase-cache-helpers/postgrest-react-query\";\nimport { isUsable } from \"@pol-studios/utils\";\ntype ItemType<T> = T extends Array<infer U> ? U : T;\nexport function useDbDelete(relation, t0) {\n const $ = _c(14);\n let t1;\n if ($[0] !== t0) {\n t1 = t0 === undefined ? [\"id\" as any] : t0;\n $[0] = t0;\n $[1] = t1;\n } else {\n t1 = $[1];\n }\n const primaryKeys = t1;\n const tableName = typeof relation === \"object\" ? relation.table : relation;\n const schemaName = typeof relation === \"object\" ? relation.schema as string : \"public\";\n const supabase = useSupabase();\n let t2;\n if ($[2] !== primaryKeys) {\n t2 = primaryKeys.map(_temp);\n $[2] = primaryKeys;\n $[3] = t2;\n } else {\n t2 = $[3];\n }\n const t3 = t2 as string[];\n let t4;\n if ($[4] !== schemaName || $[5] !== t3 || $[6] !== tableName) {\n t4 = {\n primaryKeys: t3,\n table: tableName,\n schema: schemaName\n };\n $[4] = schemaName;\n $[5] = t3;\n $[6] = tableName;\n $[7] = t4;\n } else {\n t4 = $[7];\n }\n const deleteItem = useDeleteItem(t4);\n let t5;\n if ($[8] !== deleteItem || $[9] !== primaryKeys || $[10] !== schemaName || $[11] !== supabase || $[12] !== tableName) {\n t5 = {\n mutationFn: async item => {\n if (Array.isArray(item)) {\n throw new Error(\"Item cannot be an array.\");\n }\n const deleteQuery = (supabase as any).schema(schemaName as \"public\" | \"core\").from(tableName).delete();\n primaryKeys.forEach(key => {\n const keyStr = String(key);\n const value = (item as any)[keyStr];\n if (isUsable(value)) {\n deleteQuery.eq(keyStr, value);\n }\n });\n const response = await deleteQuery.select().single();\n if (response.error) {\n throw response.error;\n }\n if (response.data) {\n deleteItem(response.data as any);\n } else {\n deleteItem(item as any);\n }\n return response.data as any;\n }\n };\n $[8] = deleteItem;\n $[9] = primaryKeys;\n $[10] = schemaName;\n $[11] = supabase;\n $[12] = tableName;\n $[13] = t5;\n } else {\n t5 = $[13];\n }\n const deleteMutation = useMutation(t5);\n return deleteMutation;\n}\nfunction _temp(k) {\n return String(k);\n}","import { c as _c } from \"react/compiler-runtime\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport useSupabase, { Database } from \"./useSupabase\";\nimport { useUpsertItem } from \"@supabase-cache-helpers/postgrest-react-query\";\nimport { GetResult } from \"./parser/select-query-parser\";\nimport { GenericSchema } from \"./parser/types\";\nimport { isUsable } from \"@pol-studios/utils\";\nimport { omit } from \"@pol-studios/utils\";\ntype ItemType<T> = T extends Array<infer U> ? U : T;\nexport function useDbMultiUpsert(relation, t0, t1) {\n const $ = _c(17);\n let t2;\n if ($[0] !== t0) {\n t2 = t0 === undefined ? [\"id\"] : t0;\n $[0] = t0;\n $[1] = t2;\n } else {\n t2 = $[1];\n }\n const primaryKeys = t2;\n const query = t1 === undefined ? \"*\" : t1;\n const supabase = useSupabase();\n const tableName = typeof relation === \"object\" ? relation.table : relation;\n const schemaName = typeof relation === \"object\" ? String(relation.schema) : \"public\";\n const t3 = relation as any;\n let t4;\n if ($[2] !== primaryKeys || $[3] !== t3) {\n t4 = {\n primaryKeys,\n table: t3,\n schema: \"public\"\n };\n $[2] = primaryKeys;\n $[3] = t3;\n $[4] = t4;\n } else {\n t4 = $[4];\n }\n const upsertItem = useUpsertItem(t4);\n let t5;\n if ($[5] !== primaryKeys) {\n t5 = primaryKeys.map(_temp);\n $[5] = primaryKeys;\n $[6] = t5;\n } else {\n t5 = $[6];\n }\n const primaryKeysAsStrings = t5 as string[];\n let t6;\n if ($[7] !== primaryKeys || $[8] !== primaryKeysAsStrings || $[9] !== query || $[10] !== schemaName || $[11] !== supabase || $[12] !== tableName) {\n t6 = async function upsertItemAction(item) {\n let task;\n if (Object.keys(item).length !== primaryKeys.length && primaryKeys.every(key_0 => key_0 in item && isUsable(item[key_0]))) {\n const updateObject = omit(item as any, primaryKeysAsStrings as any) as any;\n task = (supabase as any).schema(schemaName as \"public\" | \"core\").from(tableName).update(updateObject);\n primaryKeys.forEach(key => {\n task = task.eq(String(key), item[key]);\n });\n } else {\n task = (supabase as any).schema(schemaName as \"public\" | \"core\").from(tableName).insert(omit(item as any, primaryKeysAsStrings as any) as any);\n }\n const response = await task.select(query);\n if (response.error) {\n throw response.error;\n }\n return response.data[0];\n };\n $[7] = primaryKeys;\n $[8] = primaryKeysAsStrings;\n $[9] = query;\n $[10] = schemaName;\n $[11] = supabase;\n $[12] = tableName;\n $[13] = t6;\n } else {\n t6 = $[13];\n }\n const upsertItemAction = t6;\n let t7;\n if ($[14] !== upsertItem || $[15] !== upsertItemAction) {\n t7 = {\n mutationFn: async item_0 => {\n if (Array.isArray(item_0)) {\n const data = await Promise.all(item_0.map(x => upsertItemAction(x)));\n data.filter(_temp2).forEach(x_1 => upsertItem(x_1 as any));\n return data as RowResult[];\n }\n throw new Error(\"Item must be an array.\");\n }\n };\n $[14] = upsertItem;\n $[15] = upsertItemAction;\n $[16] = t7;\n } else {\n t7 = $[16];\n }\n const updateMutation = useMutation(t7);\n return updateMutation;\n}\nfunction _temp2(x_0) {\n return isUsable(x_0);\n}\nfunction _temp(k) {\n return String(k);\n}","import { c as _c } from \"react/compiler-runtime\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport useSupabase, { Database } from \"./useSupabase\";\nimport { PostgrestSingleResponse } from \"@supabase/supabase-js\";\nimport { GetResult } from \"./parser/select-query-parser\";\nimport { GenericSchema } from \"./parser/types\";\nimport { useDeleteManyMutation, useDeleteMutation } from \"@supabase-cache-helpers/postgrest-react-query\";\ntype ItemType<T> = T extends Array<infer U> ? U : T;\nexport function useDbMultiDelete(relation, t0) {\n const $ = _c(10);\n let t1;\n if ($[0] !== t0) {\n t1 = t0 === undefined ? [\"id\" as any] : t0;\n $[0] = t0;\n $[1] = t1;\n } else {\n t1 = $[1];\n }\n const primaryKeys = t1;\n const tableName = typeof relation === \"object\" ? relation.table : relation;\n const schemaName = typeof relation === \"object\" ? String(relation.schema) : \"public\";\n const supabase = useSupabase();\n let t2;\n if ($[2] !== primaryKeys) {\n t2 = primaryKeys.map(_temp);\n $[2] = primaryKeys;\n $[3] = t2;\n } else {\n t2 = $[3];\n }\n const primaryKeysAsStrings = t2 as string[];\n const t3 = supabase as any;\n let t4;\n if ($[4] !== schemaName || $[5] !== t3 || $[6] !== tableName) {\n t4 = t3.schema(schemaName as \"public\" | \"core\").from(tableName);\n $[4] = schemaName;\n $[5] = t3;\n $[6] = tableName;\n $[7] = t4;\n } else {\n t4 = $[7];\n }\n const deleteManyMutation = useDeleteManyMutation(t4 as any, primaryKeysAsStrings as any);\n let t5;\n if ($[8] !== deleteManyMutation) {\n t5 = {\n mutationFn: async item => {\n if (Array.isArray(item)) {\n const response = await deleteManyMutation.mutateAsync(item);\n return response as any;\n } else {\n throw new Error(\"Item must be an array.\");\n }\n }\n };\n $[8] = deleteManyMutation;\n $[9] = t5;\n } else {\n t5 = $[9];\n }\n const deleteMutation = useMutation(t5);\n return deleteMutation;\n}\nfunction _temp(k) {\n return String(k);\n}","import { c as _c } from \"react/compiler-runtime\";\nimport { useDbUpsert } from \"../hooks\";\nimport { useDbDelete } from \"../useDbDelete\";\nimport { useDbMultiUpsert } from \"../useDbMultiUpsert\";\nimport { useDbMultiDelete } from \"../useDbMultiDelete\";\n\n/**\n * Upsert a changelog (create or update)\n */\nexport const useUpsertChangelog = () => {\n const $ = _c(1);\n let t0;\n if ($[0] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t0 = {\n invalidateTables: [\"Changelog\", \"ChangelogEntry\", \"ChangelogMedia\"]\n };\n $[0] = t0;\n } else {\n t0 = $[0];\n }\n return useDbUpsert(\"Changelog\", t0);\n};\n\n/**\n * Delete a changelog\n * Note: Cascade delete will remove all associated entries and media\n */\nexport const useDeleteChangelog = () => {\n return useDbDelete(\"Changelog\" as any);\n};\n\n/**\n * Upsert a changelog entry (create or update)\n */\nexport const useUpsertChangelogEntry = () => {\n const $ = _c(1);\n let t0;\n if ($[0] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t0 = {\n invalidateTables: [\"ChangelogEntry\", \"ChangelogMedia\"]\n };\n $[0] = t0;\n } else {\n t0 = $[0];\n }\n return useDbUpsert(\"ChangelogEntry\", t0);\n};\n\n/**\n * Upsert multiple changelog entries at once\n */\nexport const useMultiUpsertChangelogEntries = () => {\n const $ = _c(1);\n let t0;\n if ($[0] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t0 = [\"id\"];\n $[0] = t0;\n } else {\n t0 = $[0];\n }\n return useDbMultiUpsert(\"ChangelogEntry\" as any, t0, \"*, ChangelogMedia (*)\");\n};\n\n/**\n * Delete a changelog entry\n * Note: Cascade delete will remove all associated media\n */\nexport const useDeleteChangelogEntry = () => {\n return useDbDelete(\"ChangelogEntry\" as any);\n};\n\n/**\n * Delete multiple changelog entries at once\n */\nexport const useMultiDeleteChangelogEntries = () => {\n return useDbMultiDelete(\"ChangelogEntry\" as any);\n};\n\n/**\n * Upsert changelog media (create or update)\n */\nexport const useUpsertChangelogMedia = () => {\n const $ = _c(1);\n let t0;\n if ($[0] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t0 = {\n invalidateTables: [\"ChangelogMedia\"]\n };\n $[0] = t0;\n } else {\n t0 = $[0];\n }\n return useDbUpsert(\"ChangelogMedia\", t0);\n};\n\n/**\n * Delete changelog media\n */\nexport const useDeleteChangelogMedia = () => {\n return useDbDelete(\"ChangelogMedia\" as any);\n};\n\n/**\n * Upload media file for changelog entry\n * Just returns a simple upload function - caller handles creating ChangelogMedia records\n */\nexport const useUploadChangelogMedia = () => {\n // Simplified: return null for now since upload logic needs to be implemented properly\n // Caller should use supabase.storage.from(\"changelog-media\").upload()\n return {\n mutateAsync: async () => ({\n path: \"\",\n publicUrl: \"\"\n })\n };\n};","import { c as _c } from \"react/compiler-runtime\";\nimport useSupabase from \"../useSupabase\";\nimport { useDbQuery } from \"../useDbQuery\";\nimport { useDbRealtimeQuery } from \"../useDbRealtimeQuery\";\n\n/**\n * Fetch all changelogs with their entries and media\n * Ordered by release date (newest first)\n */\nexport const useChangelogs = (options?: {\n realtime?: boolean;\n}) => {\n const supabase = useSupabase();\n const query = supabase.from(\"Changelog\").select(`\n *,\n ChangelogEntry (\n *,\n ChangelogMedia (*)\n )\n `).order(\"releaseDate\", {\n ascending: false\n }).order(\"order\", {\n foreignTable: \"ChangelogEntry\",\n ascending: true\n }).order(\"order\", {\n foreignTable: \"ChangelogEntry.ChangelogMedia\",\n ascending: true\n });\n if (options?.realtime) {\n return useDbRealtimeQuery(query, {\n crossOrganization: true\n });\n }\n return useDbQuery(query, {\n crossOrganization: true\n });\n};\n\n/**\n * Fetch published changelogs only\n */\nexport const usePublishedChangelogs = (options?: {\n realtime?: boolean;\n}) => {\n const supabase = useSupabase();\n const query = supabase.from(\"Changelog\").select(`\n *,\n ChangelogEntry (\n *,\n ChangelogMedia (*)\n )\n `).eq(\"isPublished\", true).order(\"releaseDate\", {\n ascending: false\n }).order(\"order\", {\n foreignTable: \"ChangelogEntry\",\n ascending: true\n }).order(\"order\", {\n foreignTable: \"ChangelogEntry.ChangelogMedia\",\n ascending: true\n });\n if (options?.realtime) {\n return useDbRealtimeQuery(query, {\n crossOrganization: true\n });\n }\n return useDbQuery(query, {\n crossOrganization: true\n });\n};\n\n/**\n * Fetch a single changelog by ID\n */\nexport const useChangelogById = id => {\n const $ = _c(5);\n const supabase = useSupabase();\n let t0;\n if ($[0] !== id || $[1] !== supabase) {\n t0 = supabase.from(\"Changelog\").select(\"\\n *,\\n ChangelogEntry (\\n *,\\n ChangelogMedia (*)\\n )\\n \").eq(\"id\", id).order(\"order\", {\n foreignTable: \"ChangelogEntry\",\n ascending: true\n }).order(\"order\", {\n foreignTable: \"ChangelogEntry.ChangelogMedia\",\n ascending: true\n }).single();\n $[0] = id;\n $[1] = supabase;\n $[2] = t0;\n } else {\n t0 = $[2];\n }\n const t1 = !!id;\n let t2;\n if ($[3] !== t1) {\n t2 = {\n enabled: t1,\n crossOrganization: true\n };\n $[3] = t1;\n $[4] = t2;\n } else {\n t2 = $[4];\n }\n return useDbQuery(t0, t2);\n};\n\n/**\n * Fetch a single changelog by slug\n */\nexport const useChangelogBySlug = slug => {\n const $ = _c(5);\n const supabase = useSupabase();\n let t0;\n if ($[0] !== slug || $[1] !== supabase) {\n t0 = supabase.from(\"Changelog\").select(\"\\n *,\\n ChangelogEntry (\\n *,\\n ChangelogMedia (*)\\n )\\n \").eq(\"slug\", slug).order(\"order\", {\n foreignTable: \"ChangelogEntry\",\n ascending: true\n }).order(\"order\", {\n foreignTable: \"ChangelogEntry.ChangelogMedia\",\n ascending: true\n }).single();\n $[0] = slug;\n $[1] = supabase;\n $[2] = t0;\n } else {\n t0 = $[2];\n }\n const t1 = !!slug;\n let t2;\n if ($[3] !== t1) {\n t2 = {\n enabled: t1,\n crossOrganization: true\n };\n $[3] = t1;\n $[4] = t2;\n } else {\n t2 = $[4];\n }\n return useDbQuery(t0, t2);\n};\n\n/**\n * Fetch changelog entries for a specific changelog\n */\nexport const useChangelogEntries = changelogId => {\n const $ = _c(5);\n const supabase = useSupabase();\n let t0;\n if ($[0] !== changelogId || $[1] !== supabase) {\n t0 = supabase.from(\"ChangelogEntry\").select(\"*, ChangelogMedia (*)\").eq(\"changelogId\", changelogId).order(\"order\", {\n ascending: true\n }).order(\"order\", {\n foreignTable: \"ChangelogMedia\",\n ascending: true\n });\n $[0] = changelogId;\n $[1] = supabase;\n $[2] = t0;\n } else {\n t0 = $[2];\n }\n const t1 = !!changelogId;\n let t2;\n if ($[3] !== t1) {\n t2 = {\n enabled: t1,\n crossOrganization: true\n };\n $[3] = t1;\n $[4] = t2;\n } else {\n t2 = $[4];\n }\n return useDbQuery(t0, t2);\n};\n\n/**\n * Fetch media for a specific changelog entry\n */\nexport const useChangelogMedia = entryId => {\n const $ = _c(5);\n const supabase = useSupabase();\n let t0;\n if ($[0] !== entryId || $[1] !== supabase) {\n t0 = supabase.from(\"ChangelogMedia\").select(\"*\").eq(\"changelogEntryId\", entryId).order(\"order\", {\n ascending: true\n });\n $[0] = entryId;\n $[1] = supabase;\n $[2] = t0;\n } else {\n t0 = $[2];\n }\n const t1 = !!entryId;\n let t2;\n if ($[3] !== t1) {\n t2 = {\n enabled: t1,\n crossOrganization: true\n };\n $[3] = t1;\n $[4] = t2;\n } else {\n t2 = $[4];\n }\n return useDbQuery(t0, t2);\n};","import { c as _c } from \"react/compiler-runtime\";\nimport { useQuery } from \"@tanstack/react-query\";\nimport useSupabase from \"../useSupabase\";\nexport interface FeedbackListItem {\n id: number;\n userId: string | null;\n table: string | null;\n schema: string;\n memoryType: string;\n resolved: boolean;\n resolvedAt: string | null;\n resolvedBy: string | null;\n createdAt: string;\n updatedAt: string;\n data: {\n query: string;\n queryHash?: string;\n status?: \"success\" | \"failure\" | \"needs_review\" | \"cache_hit\";\n statusMessage?: string;\n confidence?: number;\n filters?: any;\n sql?: string;\n sqlError?: string;\n agentDecisions?: any;\n context?: any;\n trace?: any;\n corrections?: {\n domainTerm?: string;\n domainFieldPath?: string;\n fieldPath?: string;\n filters?: any;\n };\n feedback?: string;\n modelUsed?: string;\n reasoningEffort?: \"minimal\" | \"medium\" | \"high\";\n performance?: any;\n resultCount?: number;\n };\n}\nexport interface FeedbackListParams {\n resolved?: boolean;\n status?: string;\n limit?: number;\n offset?: number;\n userId?: string;\n startDate?: string;\n endDate?: string;\n}\nexport function useFeedbackList(t0) {\n const $ = _c(10);\n let t1;\n if ($[0] !== t0) {\n t1 = t0 === undefined ? {} : t0;\n $[0] = t0;\n $[1] = t1;\n } else {\n t1 = $[1];\n }\n const params = t1;\n const supabase = useSupabase();\n let t2;\n if ($[2] !== params) {\n t2 = [\"feedback-list\", params];\n $[2] = params;\n $[3] = t2;\n } else {\n t2 = $[3];\n }\n let t3;\n if ($[4] !== params || $[5] !== supabase) {\n t3 = async () => {\n const searchParams = new URLSearchParams();\n if (params.resolved !== undefined) {\n searchParams.append(\"resolved\", String(params.resolved));\n }\n if (params.status) {\n searchParams.append(\"status\", params.status);\n }\n if (params.limit) {\n searchParams.append(\"limit\", String(params.limit));\n }\n if (params.offset) {\n searchParams.append(\"offset\", String(params.offset));\n }\n if (params.userId) {\n searchParams.append(\"userId\", params.userId);\n }\n if (params.startDate) {\n searchParams.append(\"startDate\", params.startDate);\n }\n if (params.endDate) {\n searchParams.append(\"endDate\", params.endDate);\n }\n const {\n data,\n error\n } = await supabase.functions.invoke(\"query\", {\n body: {},\n method: \"GET\",\n headers: {\n \"X-Path\": `/query/feedback?${searchParams.toString()}`\n }\n });\n if (error) {\n throw error;\n }\n return data as {\n success: boolean;\n data: FeedbackListItem[];\n pagination: {\n limit: number;\n offset: number;\n total: number;\n };\n };\n };\n $[4] = params;\n $[5] = supabase;\n $[6] = t3;\n } else {\n t3 = $[6];\n }\n let t4;\n if ($[7] !== t2 || $[8] !== t3) {\n t4 = {\n queryKey: t2,\n queryFn: t3\n };\n $[7] = t2;\n $[8] = t3;\n $[9] = t4;\n } else {\n t4 = $[9];\n }\n return useQuery(t4);\n}","import { c as _c } from \"react/compiler-runtime\";\nimport { useMutation, useQueryClient } from \"@tanstack/react-query\";\nimport useSupabase from \"../useSupabase\";\nexport interface SubmitFeedbackParams {\n memoryId?: number;\n query: string;\n table: string;\n schema?: string;\n status?: \"success\" | \"failure\" | \"needs_review\";\n corrections?: {\n domainTerm?: string;\n domainFieldPath?: string;\n fieldPath?: string;\n filters?: any;\n };\n feedback?: string;\n}\nexport function useSubmitFeedback() {\n const $ = _c(7);\n const supabase = useSupabase();\n const queryClient = useQueryClient();\n let t0;\n if ($[0] !== supabase) {\n t0 = async params => {\n const {\n data,\n error\n } = await supabase.functions.invoke(\"query\", {\n body: params,\n method: \"POST\",\n headers: {\n \"X-Path\": \"/query/feedback\"\n }\n });\n if (error) {\n throw error;\n }\n return data as {\n success: boolean;\n data: any;\n };\n };\n $[0] = supabase;\n $[1] = t0;\n } else {\n t0 = $[1];\n }\n let t1;\n if ($[2] !== queryClient) {\n t1 = () => {\n queryClient.invalidateQueries({\n queryKey: [\"feedback-list\"]\n });\n };\n $[2] = queryClient;\n $[3] = t1;\n } else {\n t1 = $[3];\n }\n let t2;\n if ($[4] !== t0 || $[5] !== t1) {\n t2 = {\n mutationFn: t0,\n onSuccess: t1\n };\n $[4] = t0;\n $[5] = t1;\n $[6] = t2;\n } else {\n t2 = $[6];\n }\n return useMutation(t2);\n}","import { c as _c } from \"react/compiler-runtime\";\nimport { useMutation, useQueryClient } from \"@tanstack/react-query\";\nimport useSupabase from \"../useSupabase\";\nexport function useApplyFeedback() {\n const $ = _c(7);\n const supabase = useSupabase();\n const queryClient = useQueryClient();\n let t0;\n if ($[0] !== supabase) {\n t0 = async memoryId => {\n const {\n data,\n error\n } = await supabase.functions.invoke(\"query\", {\n body: {},\n method: \"POST\",\n headers: {\n \"X-Path\": `/query/feedback/${memoryId}/apply`\n }\n });\n if (error) {\n throw error;\n }\n return data as {\n success: boolean;\n data: any;\n learningResults: Array<{\n type: string;\n id: number;\n action: string;\n }>;\n };\n };\n $[0] = supabase;\n $[1] = t0;\n } else {\n t0 = $[1];\n }\n let t1;\n if ($[2] !== queryClient) {\n t1 = () => {\n queryClient.invalidateQueries({\n queryKey: [\"feedback-list\"]\n });\n };\n $[2] = queryClient;\n $[3] = t1;\n } else {\n t1 = $[3];\n }\n let t2;\n if ($[4] !== t0 || $[5] !== t1) {\n t2 = {\n mutationFn: t0,\n onSuccess: t1\n };\n $[4] = t0;\n $[5] = t1;\n $[6] = t2;\n } else {\n t2 = $[6];\n }\n return useMutation(t2);\n}","import { c as _c } from \"react/compiler-runtime\";\nimport { useMutation, useQueryClient } from \"@tanstack/react-query\";\nimport useSupabase from \"../useSupabase\";\nexport function useResolveFeedback() {\n const $ = _c(7);\n const supabase = useSupabase();\n const queryClient = useQueryClient();\n let t0;\n if ($[0] !== supabase) {\n t0 = async memoryId => {\n const {\n data,\n error\n } = await supabase.functions.invoke(\"query\", {\n body: {},\n method: \"POST\",\n headers: {\n \"X-Path\": `/query/feedback/${memoryId}/resolve`\n }\n });\n if (error) {\n throw error;\n }\n return data as {\n success: boolean;\n data: any;\n learningResults: Array<{\n type: string;\n id: number;\n }>;\n };\n };\n $[0] = supabase;\n $[1] = t0;\n } else {\n t0 = $[1];\n }\n let t1;\n if ($[2] !== queryClient) {\n t1 = () => {\n queryClient.invalidateQueries({\n queryKey: [\"feedback-list\"]\n });\n };\n $[2] = queryClient;\n $[3] = t1;\n } else {\n t1 = $[3];\n }\n let t2;\n if ($[4] !== t0 || $[5] !== t1) {\n t2 = {\n mutationFn: t0,\n onSuccess: t1\n };\n $[4] = t0;\n $[5] = t1;\n $[6] = t2;\n } else {\n t2 = $[6];\n }\n return useMutation(t2);\n}"],"mappings":"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","names":["format","locale","to","from","now","sign","token","ordinal","i","diff","localeData","hours","minutes","tokens","meridiem","years","months","weeks","days","seconds","milliseconds","offset","thresholds","BackendStatus","_c","_c","useEffect","useEffect","_c","useEffect","useState","_c","useState","moment","useEffect","_c","isUsable","_c","isUsable","useCallback","useEffect","useMemo","useRef","useState","useState","useRef","useMemo","useCallback","useEffect","useCallback","useEffect","useMemo","useRef","useState","useState","useRef","useCallback","useEffect","useMemo","_c","isUsable","useEffect","values","useState","useEffect","useCallback","useMemo","data","useState","useEffect","useCallback","useMemo","_c","_c","_c","useEffect","useState","useRef","_c","useState","useRef","useEffect","_c","_c","t6","_c","isUsable","_c","_temp","_c","useMutation","isUsable","_c","_temp","upsertItemAction","_temp2","useMutation","_c","useMutation","_c","_temp","useMutation","_c","_c","_c","_c","_c","useQuery","_c","useQuery","_c","useMutation","_c","useMutation","_c","useMutation","useQueryClient","_c","useQueryClient","useMutation","_c","useMutation","useQueryClient","_c","useQueryClient","useMutation"]}