@ecosy/core 0.4.0 → 0.5.0

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 (132) hide show
  1. package/CHANGELOG.md +163 -0
  2. package/dist/cache/disk.d.ts +32 -0
  3. package/dist/cache/disk.js +1 -0
  4. package/dist/cache/disk.mjs +1 -0
  5. package/dist/cache/index.d.ts +17 -0
  6. package/dist/cache/index.js +1 -0
  7. package/dist/cache/index.mjs +1 -0
  8. package/dist/cache/memory.d.ts +19 -0
  9. package/dist/cache/memory.js +1 -0
  10. package/dist/cache/memory.mjs +1 -0
  11. package/dist/cache/redis.d.ts +63 -0
  12. package/dist/cache/redis.js +1 -0
  13. package/dist/cache/redis.mjs +1 -0
  14. package/dist/cache/types.d.ts +35 -0
  15. package/dist/cache/types.js +1 -0
  16. package/dist/cache/types.mjs +1 -0
  17. package/dist/ecosy-core.umd.js +1 -1
  18. package/dist/ecosy-core.umd.js.map +1 -1
  19. package/dist/index.d.ts +0 -9
  20. package/dist/index.js +1 -1
  21. package/dist/index.mjs +1 -1
  22. package/dist/serialize/index.d.ts +62 -0
  23. package/dist/serialize/index.js +1 -0
  24. package/dist/serialize/index.mjs +1 -0
  25. package/dist/serialize/interpolate.d.ts +10 -0
  26. package/dist/serialize/interpolate.js +1 -0
  27. package/dist/serialize/interpolate.mjs +1 -0
  28. package/dist/serialize/json.d.ts +3 -0
  29. package/dist/serialize/json.js +1 -0
  30. package/dist/serialize/json.mjs +1 -0
  31. package/dist/serialize/primitive.d.ts +3 -0
  32. package/dist/serialize/primitive.js +1 -0
  33. package/dist/serialize/primitive.mjs +1 -0
  34. package/dist/serialize/query-string.d.ts +3 -0
  35. package/dist/serialize/query-string.js +1 -0
  36. package/dist/serialize/query-string.mjs +1 -0
  37. package/dist/serialize/types.d.ts +42 -0
  38. package/dist/serialize/url.d.ts +3 -0
  39. package/dist/serialize/url.js +1 -0
  40. package/dist/serialize/url.mjs +1 -0
  41. package/dist/syhemo/collectors.d.ts +25 -0
  42. package/dist/syhemo/collectors.js +1 -0
  43. package/dist/syhemo/collectors.mjs +1 -0
  44. package/dist/syhemo/exposition.d.ts +15 -0
  45. package/dist/syhemo/exposition.js +1 -0
  46. package/dist/syhemo/exposition.mjs +1 -0
  47. package/dist/syhemo/index.d.ts +50 -0
  48. package/dist/syhemo/index.js +1 -0
  49. package/dist/syhemo/index.mjs +1 -0
  50. package/dist/{logger.d.ts → syhemo/logger.d.ts} +23 -11
  51. package/dist/syhemo/logger.js +1 -0
  52. package/dist/{logger.mjs → syhemo/logger.mjs} +1 -1
  53. package/dist/syhemo/types.d.ts +114 -0
  54. package/dist/utilities/index.d.ts +2 -0
  55. package/dist/utilities/index.js +1 -1
  56. package/dist/utilities/index.mjs +1 -1
  57. package/dist/{searchify.d.ts → utilities/searchify.d.ts} +1 -1
  58. package/dist/utilities/searchify.js +1 -0
  59. package/dist/utilities/searchify.mjs +1 -0
  60. package/package.json +35 -37
  61. package/agents/skills/ecosy-core-fetcher/SKILL.md +0 -93
  62. package/dist/env.d.ts +0 -26
  63. package/dist/env.js +0 -1
  64. package/dist/env.mjs +0 -1
  65. package/dist/http/array.d.ts +0 -2
  66. package/dist/http/array.js +0 -1
  67. package/dist/http/array.mjs +0 -1
  68. package/dist/http/client.d.ts +0 -38
  69. package/dist/http/client.js +0 -1
  70. package/dist/http/client.mjs +0 -1
  71. package/dist/http/endpoint.d.ts +0 -8
  72. package/dist/http/endpoint.js +0 -1
  73. package/dist/http/endpoint.mjs +0 -1
  74. package/dist/http/fetcher.d.ts +0 -84
  75. package/dist/http/fetcher.js +0 -1
  76. package/dist/http/fetcher.mjs +0 -1
  77. package/dist/http/http-core.d.ts +0 -5
  78. package/dist/http/http-core.js +0 -1
  79. package/dist/http/http-core.mjs +0 -1
  80. package/dist/http/http-static.d.ts +0 -20
  81. package/dist/http/http-static.js +0 -1
  82. package/dist/http/http-static.mjs +0 -1
  83. package/dist/http/http.d.ts +0 -56
  84. package/dist/http/http.js +0 -1
  85. package/dist/http/http.mjs +0 -1
  86. package/dist/http/index.d.ts +0 -14
  87. package/dist/http/index.js +0 -1
  88. package/dist/http/index.mjs +0 -1
  89. package/dist/http/init.d.ts +0 -83
  90. package/dist/http/init.js +0 -1
  91. package/dist/http/init.mjs +0 -1
  92. package/dist/http/method.d.ts +0 -15
  93. package/dist/http/method.js +0 -1
  94. package/dist/http/method.mjs +0 -1
  95. package/dist/http/plugins/cache.d.ts +0 -13
  96. package/dist/http/plugins/cache.js +0 -1
  97. package/dist/http/plugins/cache.mjs +0 -1
  98. package/dist/http/plugins/dedupe.d.ts +0 -7
  99. package/dist/http/plugins/dedupe.js +0 -1
  100. package/dist/http/plugins/dedupe.mjs +0 -1
  101. package/dist/http/plugins/index.d.ts +0 -3
  102. package/dist/http/plugins/index.js +0 -1
  103. package/dist/http/plugins/index.mjs +0 -1
  104. package/dist/http/plugins/logger.d.ts +0 -24
  105. package/dist/http/plugins/logger.js +0 -1
  106. package/dist/http/plugins/logger.mjs +0 -1
  107. package/dist/http/request.d.ts +0 -26
  108. package/dist/http/response.d.ts +0 -9
  109. package/dist/http/utils.d.ts +0 -21
  110. package/dist/http/utils.js +0 -1
  111. package/dist/http/utils.mjs +0 -1
  112. package/dist/http/xml.d.ts +0 -24
  113. package/dist/http/xml.js +0 -1
  114. package/dist/http/xml.mjs +0 -1
  115. package/dist/logger.js +0 -1
  116. package/dist/node_modules/tslib/tslib.es6.js +0 -1
  117. package/dist/node_modules/tslib/tslib.es6.mjs +0 -1
  118. package/dist/searchify.js +0 -1
  119. package/dist/searchify.mjs +0 -1
  120. package/dist/serialize.d.ts +0 -80
  121. package/dist/serialize.js +0 -1
  122. package/dist/serialize.mjs +0 -1
  123. package/dist/syhemo.d.ts +0 -102
  124. package/dist/syhemo.js +0 -1
  125. package/dist/syhemo.mjs +0 -1
  126. /package/dist/{http/request.js → serialize/types.js} +0 -0
  127. /package/dist/{http/request.mjs → serialize/types.mjs} +0 -0
  128. /package/dist/{http/response.js → syhemo/types.js} +0 -0
  129. /package/dist/{http/response.mjs → syhemo/types.mjs} +0 -0
  130. /package/dist/{slugify.d.ts → utilities/slugify.d.ts} +0 -0
  131. /package/dist/{slugify.js → utilities/slugify.js} +0 -0
  132. /package/dist/{slugify.mjs → utilities/slugify.mjs} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"ecosy-core.umd.js","sources":["../src/utilities/string.ts","../src/utilities/is-function.ts","../src/utilities/object.ts","../src/env.ts","../src/http/array.ts","../src/utilities/flatten.ts","../src/http/method.ts","../node_modules/tslib/tslib.es6.js","../src/utilities/filelist.ts","../src/utilities/formdata.ts","../src/utilities/sanitize-mime.ts","../src/http/init.ts","../src/utilities/clone.ts","../src/utilities/freeze.ts","../src/utilities/get.ts","../src/serialize.ts","../src/http/utils.ts","../src/http/http-core.ts","../src/http/xml.ts","../src/http/http-static.ts","../src/http/endpoint.ts","../src/http/http.ts","../src/http/client.ts","../src/logger.ts","../src/slugify.ts","../src/utilities/is-equal.ts","../src/searchify.ts","../src/utilities/merge.ts","../src/subscriber.ts","../src/utilities/defer.ts","../src/http/fetcher.ts","../src/http/plugins/cache.ts","../src/http/plugins/dedupe.ts","../src/http/plugins/logger.ts"],"sourcesContent":["/**\n * Returns the internal `[[Class]]` tag of a value using `Object.prototype.toString`.\n *\n * @example\n * ```ts\n * toString([]); // \"[object Array]\"\n * toString(null); // \"[object Null]\"\n * ```\n */\nexport function toString(value) {\n return Object.prototype.toString.call(value);\n}\n/**\n * Capitalizes the first character of a string.\n *\n * @example\n * ```ts\n * ucfirst(\"hello\"); // \"Hello\"\n * ```\n */\nexport function ucfirst(str) {\n return (str.charAt(0).toUpperCase() + str.slice(1));\n}\n/**\n * Converts a PascalCase or camelCase string to kebab-case.\n * Handles consecutive uppercase characters (e.g. acronyms) gracefully.\n *\n * @example\n * ```ts\n * pascalToKebab(\"MyComponent\"); // \"my-component\"\n * pascalToKebab(\"HTMLParser\"); // \"html-parser\"\n * pascalToKebab(\"camelCase\"); // \"camel-case\"\n * ```\n */\nexport function pascalToKebab(str) {\n if (!str)\n return str;\n return str\n .replace(/([a-z0-9])([A-Z])/g, \"$1-$2\")\n .replace(/([A-Z])([A-Z][a-z])/g, \"$1-$2\")\n .toLowerCase();\n}\n","import { toString } from \"./string\";\n/**\n * Checks whether a value is a function (including async and generator functions).\n *\n * @param value - The value to check.\n * @returns `true` if the value is a function.\n *\n * @example\n * ```ts\n * isFunction(() => {}); // true\n * isFunction(async () => {}); // true\n * isFunction(42); // false\n * ```\n */\nexport function isFunction(value) {\n return (typeof value === \"function\" ||\n [\"[object Function]\", \"[object AsyncFunction]\", \"[object GeneratorFunction]\"].includes(toString(value)));\n}\n","import { isFunction } from \"./is-function\";\n/**\n * Checks whether a value is a non-null object.\n *\n * @param value - The value to check.\n * @returns `true` if the value is of type `object` and is not `null`.\n */\nexport function isObject(value) {\n return typeof value === \"object\" && value !== null;\n}\n/**\n * Checks whether a value is a plain object (created by `{}` or `Object.create(null)`).\n *\n * @param value - The value to check.\n * @returns `true` if the value is a plain literal object.\n */\nexport function isLiteralObject(value) {\n if (!isObject(value) || Array.isArray(value)) {\n return false;\n }\n const proto = Object.getPrototypeOf(value);\n return proto === null || proto === Object.prototype;\n}\n/**\n * Checks whether a value is a complex (non-array) object, such as a class instance.\n *\n * @param value - The value to check.\n * @returns `true` if the value is a non-array object.\n */\nexport function isComplexObject(value) {\n return isObject(value) && !Array.isArray(value);\n}\n/**\n * Checks whether a value is an object, array, or function.\n *\n * @param value - The value to check.\n * @returns `true` if the value is \"objectable\" (object, array, or function).\n */\nexport function isObjectable(value) {\n return isObject(value) || isFunction(value);\n}\n/**\n * Type-safe check for own property existence on an object.\n *\n * @param obj - The object to check.\n * @param key - The property key to look for.\n * @returns `true` if the object has the specified own property.\n *\n * @example\n * ```ts\n * hasOwnProperty({ a: 1 }, \"a\"); // true\n * hasOwnProperty({ a: 1 }, \"b\"); // false\n * ```\n */\nexport function hasOwnProperty(obj, key) {\n if (!obj) {\n return false;\n }\n if (!isObjectable(obj)) {\n return Object.prototype.hasOwnProperty.call(obj, key);\n }\n return (Object.prototype.hasOwnProperty.call(obj, key) || key in obj);\n}\n","import { isLiteralObject } from \"./utilities/object\";\n/** Default getter: process.env → import.meta.env → {} */\nfunction defaultGetter() {\n if (typeof globalThis !== \"undefined\" && \"process\" in globalThis) {\n const proc = globalThis.process;\n if ((proc === null || proc === void 0 ? void 0 : proc.env) && isLiteralObject(proc.env)) {\n return proc.env;\n }\n }\n try {\n const meta = new Function(\"return import.meta\")();\n if ((meta === null || meta === void 0 ? void 0 : meta.env) && isLiteralObject(meta.env)) {\n return meta.env;\n }\n }\n catch (_a) {\n // import.meta may not be available in all environments (e.g. Hermes)\n }\n return {};\n}\n/**\n * Read an environment variable across runtimes.\n *\n * @example\n * ```ts\n * // Basic — uses getter (default: process.env → import.meta.env)\n * getEnv(\"API_URL\", \"/api\")\n *\n * // Per-call source (e.g. Hono ctx.env)\n * getEnv(\"API_URL\", \"/api\", ctx.env)\n *\n * // Custom getter for a specific runtime\n * getEnv.getter(() => Deno.env.toObject());\n * ```\n */\nexport function getEnv(key, defaultValue, ...sources) {\n // 1. Per-call sources (most specific)\n for (const source of sources) {\n if (source && key in source && source[key] !== undefined) {\n return source[key];\n }\n }\n // 2. Global source from getter\n const env = getEnv._getter();\n if (key in env && env[key] !== undefined) {\n return env[key];\n }\n return defaultValue;\n}\ngetEnv._getter = defaultGetter;\n/** Register a custom getter that returns the env source object. */\ngetEnv.getter = (fn) => {\n getEnv._getter = fn;\n};\n","export function asArray(data) {\n return Array.isArray(data) ? data : [data];\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n/**\n * Recursively flattens a nested object or array into a single-level object\n * with dot-separated keys.\n *\n * Array indices use dot notation (`users.0.name` instead of `users[0].name`).\n *\n * @param data - The value to flatten.\n * @param prefix - Internal prefix for recursive key building.\n * @param acc - Internal accumulator for the result.\n * @returns A flat `Record<string, unknown>` with dot-separated keys.\n *\n * @example\n * ```ts\n * flatten({ users: [{ name: \"Alice\" }] });\n * // { \"users.0.name\": \"Alice\" }\n *\n * flatten({ a: { b: { c: 1 } } });\n * // { \"a.b.c\": 1 }\n * ```\n */\nexport function flatten(data, prefix = \"\", acc = {}) {\n if (typeof data !== \"object\" || data === null) {\n if (prefix)\n acc[prefix] = data;\n return acc;\n }\n if (Array.isArray(data)) {\n for (let i = 0; i < data.length; i++) {\n const newPrefix = prefix ? `${prefix}.${i}` : `${i}`;\n flatten(data[i], newPrefix, acc);\n }\n }\n else {\n for (const [key, value] of Object.entries(data)) {\n const newPrefix = prefix ? `${prefix}.${key}` : key;\n flatten(value, newPrefix, acc);\n }\n }\n return acc;\n}\n/**\n * Extracts entries from a flattened object under a given path and reconstructs\n * them as an array of objects (if the keys are numeric indices) or a list of\n * `{ key, value }` pairs (if the keys are non-numeric).\n *\n * @param data - A flattened `Record<string, unknown>` (output of {@link flatten}).\n * @param path - The dot-separated path prefix to extract.\n * @returns An array of reconstructed objects, primitive values, or `{ key, value }` pairs.\n *\n * @example\n * ```ts\n * const flat = flatten({ users: [{ name: \"Alice\" }, { name: \"Bob\" }] });\n * flattenToArray(flat, \"users\");\n * // [{ name: \"Alice\" }, { name: \"Bob\" }]\n *\n * const flat2 = flatten({ config: { host: \"localhost\", port: 3000 } });\n * flattenToArray(flat2, \"config\");\n * // [{ key: \"host\", value: \"localhost\" }, { key: \"port\", value: 3000 }]\n * ```\n */\nexport function flattenToArray(data, path) {\n const prefix = `${path}.`;\n const dataOfPath = Object.entries(data).filter(([key]) => key.startsWith(prefix));\n if (!dataOfPath.length)\n return [];\n // Get the first key, strip the prefix. e.g. \"0.name\"\n const firstKeyRemain = dataOfPath[0][0].replace(prefix, \"\");\n // Determine if it's an array by checking whether the first node is a numeric index\n const firstNode = firstKeyRemain.split(\".\")[0];\n const isArrayType = !isNaN(Number(firstNode));\n // Return as { key, value } list if not an array\n if (!isArrayType) {\n return dataOfPath.map(([key, value]) => ({\n key: key.replace(prefix, \"\"),\n value,\n }));\n }\n // Reconstruct array from \"0.name\" format\n const resultObj = dataOfPath.reduce((acc, [key, value]) => {\n const cleanedKey = key.replace(prefix, \"\"); // \"0.contact.email\"\n const parts = cleanedKey.split(\".\");\n const index = parts[0]; // \"0\"\n const remain = parts.slice(1).join(\".\"); // \"contact.email\"\n if (!acc[index])\n acc[index] = {};\n if (remain) {\n acc[index][remain] = value;\n }\n else {\n acc[index] = value; // Handle primitive arrays\n }\n return acc;\n }, {});\n return Object.values(resultObj);\n}\n/**\n * Escapes special regex characters in a key string so it can be safely\n * used inside a `RegExp` constructor.\n *\n * @param key - The string to escape.\n * @returns The escaped string with special characters prefixed by `\\\\`.\n *\n * @example\n * ```ts\n * escapeRegexKey(\"users[0].name\"); // \"users\\\\[0\\\\]\\\\.name\"\n * ```\n */\nexport function escapeRegexKey(key) {\n return key.replace(/([.[\\]{}])/g, \"\\\\$1\");\n}\n","export const Methods = {\n GET: \"GET\",\n POST: \"POST\",\n PUT: \"PUT\",\n DELETE: \"DELETE\",\n PATCH: \"PATCH\",\n HEAD: \"HEAD\",\n OPTIONS: \"OPTIONS\",\n};\nexport const Uploads = {\n UPLOAD: \"UPLOAD\",\n RELATED: \"RELATED\",\n};\n","/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nvar ownKeys = function(o) {\r\n ownKeys = Object.getOwnPropertyNames || function (o) {\r\n var ar = [];\r\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n return ar;\r\n };\r\n return ownKeys(o);\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n });\r\n }\r\n return path;\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __esDecorate: __esDecorate,\r\n __runInitializers: __runInitializers,\r\n __propKey: __propKey,\r\n __setFunctionName: __setFunctionName,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n","import { isFunction } from \"./is-function\";\nimport { toString } from \"./string\";\n/**\n * Checks whether a value is a `FileList` or a `FileList`-like object.\n * Uses `instanceof FileList` in browser environments and falls back to\n * `Object.prototype.toString` tag detection for isomorphic compatibility.\n *\n * @param data - The value to check.\n * @returns `true` if the value is a `FileList` or has the `[object FileList]` tag.\n *\n * @example\n * ```ts\n * const input = document.querySelector(\"input[type=file]\");\n * isFileList(input.files); // true\n * isFileList([]); // false\n * ```\n */\nexport function isFileList(data) {\n return ((typeof FileList !== \"undefined\" && data instanceof FileList) ||\n (typeof data === \"object\" &&\n data !== null &&\n toString(data) === \"[object FileList]\" &&\n \"length\" in data &&\n \"item\" in data &&\n isFunction(data.item)));\n}\n","import { isFileList } from \"./filelist\";\n/** Type guard that checks whether a value is a `FormData` instance. */\nexport function isFormData(body) {\n return body instanceof FormData;\n}\n/**\n * Recursively converts a value into a `FormData` instance.\n * Handles Date, File, Blob, FileList, arrays, nested objects, and primitives.\n *\n * @param data - The value to convert.\n * @param formData - The `FormData` instance to append to (created automatically if omitted).\n * @param parentKey - Internal key prefix for recursive nesting.\n * @returns The populated `FormData` instance.\n *\n * @example\n * ```ts\n * const fd = objectToFormData({\n * name: \"Alice\",\n * avatar: someFile,\n * tags: [\"a\", \"b\"],\n * meta: { role: \"admin\" },\n * });\n * // FormData entries:\n * // name → \"Alice\"\n * // avatar → File\n * // tags[0] → \"a\"\n * // tags[1] → \"b\"\n * // meta[role] → \"admin\"\n * ```\n */\nexport function objectToFormData(data, formData = new FormData(), parentKey = \"\") {\n // Skip null or undefined values\n if (data === null || data === undefined) {\n return formData;\n }\n // 1. Handle Date\n if (data instanceof Date) {\n formData.append(parentKey, data.toISOString());\n }\n // 2. Handle single File or Blob\n else if (data instanceof File || data instanceof Blob) {\n formData.append(parentKey, data);\n }\n // 3. Handle FileList (isomorphic-safe for Node.js)\n else if (isFileList(data)) {\n Array.from(data).forEach((file, index) => {\n // Backend typically expects array files as: files[0], files[1]\n const arrayKey = parentKey ? `${parentKey}[${index}]` : String(index);\n formData.append(arrayKey, file, file.name);\n });\n }\n // 4. Handle regular arrays\n else if (Array.isArray(data)) {\n data.forEach((item, index) => {\n const arrayKey = parentKey ? `${parentKey}[${index}]` : String(index);\n objectToFormData(item, formData, arrayKey);\n });\n }\n // 5. Handle nested objects\n else if (typeof data === \"object\") {\n Object.entries(data).forEach(([key, value]) => {\n const propKey = parentKey ? `${parentKey}[${key}]` : key;\n objectToFormData(value, formData, propKey);\n });\n }\n // 6. Handle primitives (string, number, boolean)\n else {\n formData.append(parentKey, String(data));\n }\n return formData;\n}\n","/** RFC 2045 MIME type pattern: `type/subtype` with optional `;parameter=value`. */\nexport const MIME_REGEX = /^[a-zA-Z0-9][a-zA-Z0-9!#$&\\-^_.+]*\\/[a-zA-Z0-9][a-zA-Z0-9!#$&\\-^_.+]*(;\\s*[\\w.-]+=[\\w.-]+)*$/;\n/**\n * Validate and sanitize a MIME type string.\n *\n * Returns the input unchanged if valid, empty string if malformed.\n * This prevents attackers from smuggling values like `application/php/jpeg`\n * through to the upstream API — the empty Content-Type lets the API\n * server reject the payload on its own terms instead of crashing ours.\n */\nexport function sanitizeMime(value) {\n return MIME_REGEX.test(value) ? value : \"\";\n}\n","const initKeys = {\n interceptors: [\n \"request\",\n \"response\",\n \"transform\",\n \"error\",\n ],\n next: [\"revalidate\", \"tags\"],\n cf: [\n \"cacheEverything\",\n \"cacheTtl\",\n \"cacheKey\",\n \"cacheTtlByStatus\",\n \"cacheTags\",\n \"resolveOverride\",\n \"image\",\n \"apps\",\n \"scrapeShield\",\n \"polish\",\n \"minify\",\n \"colo\",\n ]\n};\nexport function getHttpInitSlice(init) {\n const configs = {};\n const next = {};\n const cf = {};\n const interceptors = {};\n Object.entries(init).forEach(([k, v]) => {\n if (initKeys.next.includes(k)) {\n next[k] = v;\n }\n else if (initKeys.interceptors.includes(k)) {\n interceptors[k] = v;\n }\n else if (initKeys.cf.includes(k)) {\n cf[k] = v;\n }\n else {\n configs[k] = v;\n }\n });\n if (Object.keys(next).length) {\n configs.next = next;\n }\n if (Object.keys(cf).length) {\n configs.cf = cf;\n }\n if (Object.keys(interceptors)) {\n configs.interceptors = interceptors;\n }\n return configs;\n}\n","import { isFunction } from \"./is-function\";\nimport { hasOwnProperty, isObjectable } from \"./object\";\nconst cloneStrateries = {\n [Date.toString()]: (data) => new Date(data.getTime()),\n [RegExp.toString()]: (data) => new RegExp(data.source, data.flags),\n [Map.toString()]: (data, cache) => {\n const result = new Map();\n cache.set(data, result);\n data.forEach((val, key) => {\n result.set(clone(key, cache), clone(val, cache));\n });\n return result;\n },\n [Set.toString()]: (data, cache) => {\n const result = new Set();\n cache.set(data, result);\n data.forEach((val) => {\n result.add(clone(val, cache));\n });\n return result;\n },\n [ArrayBuffer.toString()]: (data) => {\n return data.slice(0);\n },\n};\nconst Strateries = [Date, RegExp, Map, Set, ArrayBuffer];\nconst NumberTypedArray = [\n Int8Array,\n Uint8Array,\n Uint8ClampedArray,\n Int16Array,\n Uint16Array,\n Int32Array,\n Uint32Array,\n Float32Array,\n Float64Array,\n BigInt64Array,\n BigUint64Array,\n DataView,\n];\nconst DoNotClone = (() => {\n return Array.from(new Set([\n // Built-in\n Error,\n Promise,\n Blob,\n // Split by environment\n typeof WeakMap !== \"undefined\" && WeakMap,\n typeof WeakSet !== \"undefined\" && WeakSet,\n typeof Symbol !== \"undefined\" && Symbol,\n typeof Window !== \"undefined\" && Window,\n typeof File !== \"undefined\" && File,\n typeof FormData !== \"undefined\" && FormData,\n typeof Headers !== \"undefined\" && Headers,\n typeof Request !== \"undefined\" && Request,\n typeof Response !== \"undefined\" && Response,\n typeof Worker !== \"undefined\" && Worker,\n typeof AbortController !== \"undefined\" && AbortController,\n typeof Node !== \"undefined\" && Node,\n typeof FileList !== \"undefined\" && FileList,\n ]));\n})();\nfunction isConstructor(constructor, targets) {\n return targets.includes(constructor);\n}\n/**\n * Deep clones a value, handling circular references, built-in types (Date, RegExp, Map, Set,\n * ArrayBuffer, TypedArrays), arrays, and plain objects. Skips non-cloneable types like\n * Error, Promise, WeakMap, DOM nodes, etc.\n *\n * @param data - The value to clone.\n * @param cache - Internal WeakMap used to track circular references.\n * @returns A deep copy of the input value.\n *\n * @example\n * ```ts\n * const original = { a: 1, b: { c: 2 } };\n * const cloned = clone(original);\n * cloned.b.c = 3;\n * original.b.c; // still 2\n * ```\n */\nexport function clone(data, cache = new WeakMap()) {\n var _a;\n if (!isObjectable(data) ||\n isFunction(data) ||\n hasOwnProperty(data, \"$$typeof\") ||\n (data.constructor && isConstructor(data.constructor, DoNotClone))) {\n return data;\n }\n // Prevent circular references\n if (cache.has(data)) {\n return cache.get(data);\n }\n if (data.constructor && isConstructor(data.constructor, NumberTypedArray)) {\n const itemData = data;\n const ItemClass = data.constructor;\n const result = new ItemClass(itemData.buffer.slice(0), itemData.byteOffset, itemData.byteLength);\n cache.set(data, result);\n return result;\n }\n const ItemConstructor = data.constructor;\n if (Strateries.includes(ItemConstructor)) {\n const handleName = ItemConstructor.toString();\n const handler = cloneStrateries[handleName];\n const result = handler(data, cache);\n cache.set(data, result);\n return result;\n }\n // Is Object | Array | Class | Instance | Function\n const result = Array.isArray(data)\n ? new (((_a = Object.getPrototypeOf(data)) === null || _a === void 0 ? void 0 : _a.constructor) || Array)()\n : Object.create(Object.getPrototypeOf(data));\n cache.set(data, result);\n const keys = Reflect.ownKeys(data);\n for (const key of keys) {\n const descriptor = Object.getOwnPropertyDescriptor(data, key);\n if (descriptor) {\n if (\"value\" in descriptor) {\n descriptor.value = clone(descriptor.value, cache);\n }\n Object.defineProperty(result, key, descriptor);\n }\n }\n return result;\n}\n","import { clone } from \"./clone\";\nimport { isObject } from \"./object\";\nfunction deepFreezeInternal(obj) {\n const propNames = Reflect.ownKeys(obj);\n for (const name of propNames) {\n const value = obj[name];\n if (isObject(value)) {\n deepFreezeInternal(value);\n }\n }\n return Object.freeze(obj);\n}\n/**\n * Deep freezes a value by first cloning it, then recursively calling `Object.freeze`.\n * Primitives are returned as-is.\n *\n * @param data - The value to freeze.\n * @param cloneDeep - Custom clone function (defaults to `clone`).\n * @returns A deeply frozen copy of the input.\n *\n * @example\n * ```ts\n * const frozen = freeze({ a: { b: 1 } });\n * frozen.a.b = 2; // throws in strict mode\n * ```\n */\nexport function freeze(data, cloneDeep = clone) {\n if (!isObject(data)) {\n return data;\n }\n const cloned = cloneDeep(data);\n return deepFreezeInternal(cloned);\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n/**\n * Safely retrieves a nested value from an object using a dot/bracket path.\n * Returns `defaultValue` only when the resolved value is `undefined` —\n * falsy values like `null`, `0`, `false`, and `\"\"` are returned as-is.\n *\n * @param data - The source object to traverse.\n * @param path - Dot-notation string (`\"a.b.c\"`), bracket-notation (`\"a[0].b\"`), or an array of keys.\n * @param defaultValue - Value returned when the path resolves to `undefined`.\n * @returns The resolved value, or `defaultValue` if not found.\n *\n * @example\n * ```ts\n * const obj = { users: [{ name: \"Alice\" }] };\n *\n * get(obj, \"users[0].name\"); // \"Alice\"\n * get(obj, \"users.0.name\"); // \"Alice\"\n * get(obj, \"users[1].name\", \"N/A\"); // \"N/A\"\n * get(obj, \"count\", 0); // 0\n * ```\n */\nexport function get(data, path, defaultValue) {\n // 1. Short-circuit if data is nullish\n if (data === null || data === undefined) {\n return defaultValue;\n }\n // 2. Normalize path into an array of keys\n // Handles both dot notation (\"a.b\") and bracket notation (\"a[0]\")\n const keys = Array.isArray(path)\n ? path\n : path\n .replace(/\\[(\\d+)]/g, \".$1\") // Convert \"users[0]\" to \"users.0\"\n .split(\".\")\n .filter(Boolean); // Remove empty segments from leading/trailing dots\n if (keys.length === 0) {\n return data;\n }\n // 3. Traverse the object tree\n let result = data;\n for (const key of keys) {\n // Stop early if we hit null/undefined mid-path\n if (result === null || result === undefined) {\n return defaultValue;\n }\n result = result[key];\n }\n // 4. Return defaultValue only for undefined; null, 0, false, \"\" are valid results\n return result === undefined ? defaultValue : result;\n}\n","import { freeze } from \"./utilities/freeze\";\nimport { get } from \"./utilities/get\";\nimport { hasOwnProperty, isLiteralObject, isObjectable } from \"./utilities/object\";\nimport { isFunction } from \"./utilities/is-function\";\n/**\n * Centralized serialization engine and type-guard toolkit.\n * Addresses common pitfalls of `JSON.stringify`/`JSON.parse` — BigInt safety,\n * Date preservation, undefined stripping, and safe URL encoding/decoding.\n *\n * All methods are organized into frozen static getters:\n * - `Serialize.Primitive` — type guards and deep normalization\n * - `Serialize.JSON` — safe stringify/parse that never throws\n * - `Serialize.URL` — encode/decode/build with malformed-char recovery\n * - `Serialize.queryString` — parse and stringify query strings\n *\n * @example\n * ```ts\n * Serialize.JSON.stringify({ date: new Date(), big: 123n });\n * Serialize.JSON.parse<User>(jsonText);\n * Serialize.URL.encode(\"hello world\");\n * Serialize.queryString.stringify({ page: 1, tags: [\"a\", \"b\"] });\n * ```\n */\nexport class Serialize {\n /**\n * Interpolates `{key}` placeholders in a string using deep path resolution via {@link get}.\n * Objects are silently replaced with empty strings to avoid `[object Object]`.\n *\n * @param pattern - Template string with `{key}` or `{path.to.key}` placeholders.\n * @param params - Data object or array to resolve values from.\n * @returns The interpolated string.\n */\n static interpolate(pattern, params = {}) {\n // Fast-path: skip processing if no placeholders\n if (!pattern ||\n typeof pattern !== \"string\" ||\n !pattern.trim().length ||\n !pattern.includes(\"{\") ||\n !pattern.includes(\"}\")) {\n return pattern;\n }\n // Scan for placeholders and resolve lazily via `get`\n return pattern.replace(/\\{([a-zA-Z0-9_.-]+)\\}/g, (match, variable) => {\n const value = get(params, variable);\n // Unresolved placeholders become empty strings\n if (value === null || value === undefined) {\n return \"\";\n }\n // Prevent \"[object Object]\" — only render primitives\n if (typeof value === \"object\") {\n return \"\";\n }\n return String(value);\n });\n }\n static get Primitive() {\n var _a;\n return ((_a = Serialize._primitive) !== null && _a !== void 0 ? _a : (Serialize._primitive = freeze({\n isString: (value) => {\n return typeof value === \"string\";\n },\n isNumber(value) {\n return typeof value === \"number\" && Number.isFinite(value);\n },\n isBoolean(value) {\n return typeof value === \"boolean\";\n },\n isPrimitive(value) {\n return !isObjectable(value);\n },\n isDate(value) {\n return value instanceof Date && !Number.isNaN(value.getTime());\n },\n isPlainObject: isLiteralObject,\n normalize(data) {\n const prim = Serialize.Primitive;\n if (prim.isPrimitive(data)) {\n if (typeof data === \"bigint\")\n return data.toString();\n return data;\n }\n if (prim.isDate(data)) {\n return data.toISOString();\n }\n if (Array.isArray(data)) {\n return data.map((item) => prim.normalize(item));\n }\n // Use isLiteralObject for consistent plain-object detection\n if (isLiteralObject(data)) {\n const result = {};\n for (const key in data) {\n if (hasOwnProperty(data, key)) {\n const val = data[key];\n if (val !== undefined) {\n result[key] = prim.normalize(val);\n }\n }\n }\n return result;\n }\n if (data && hasOwnProperty(data, \"toJSON\") && isFunction(data.toJSON)) {\n return data.toJSON();\n }\n return {};\n },\n })));\n }\n static get JSON() {\n var _a;\n return ((_a = Serialize._JSON) !== null && _a !== void 0 ? _a : (Serialize._JSON = freeze({\n stringify: (value, space) => {\n var _a;\n try {\n const normalized = Serialize.Primitive.normalize(value);\n return (_a = JSON.stringify(normalized, null, space)) !== null && _a !== void 0 ? _a : \"\";\n }\n catch (_b) {\n // Catch edge cases (e.g. circular references not handled by normalize)\n return \"\";\n }\n },\n parse: (text, reviver) => {\n if (!text) {\n return null;\n }\n try {\n return JSON.parse(text, reviver);\n }\n catch (_a) {\n return null; // Return null instead of throwing to keep the flow alive\n }\n },\n })));\n }\n static get URL() {\n var _a;\n return ((_a = Serialize._URL) !== null && _a !== void 0 ? _a : (Serialize._URL = freeze({\n encode(value, component = true) {\n if (!value)\n return \"\";\n if (typeof component === \"function\")\n return component(value);\n try {\n return component ? encodeURIComponent(value) : encodeURI(value);\n }\n catch (_a) {\n // Strip broken surrogate chars and retry instead of crashing\n const sanitized = value.replace(/[\\uD800-\\uDFFF]/g, \"\");\n return component ? encodeURIComponent(sanitized) : encodeURI(sanitized);\n }\n },\n decode: (value, component = true) => {\n if (!value)\n return \"\";\n if (typeof component === \"function\")\n return component(value);\n const decoder = component ? decodeURIComponent : decodeURI;\n const normalized = component ? value.replace(/\\+/g, \"%20\") : value;\n return normalized.replace(/(%[0-9A-F]{2})+/gi, (match) => {\n try {\n return decoder(match);\n }\n catch (_a) {\n console.warn(`[Serialize.URL] Cannot decode part: ${match}`);\n return match; // Keep broken parts intact, recover what we can\n }\n });\n },\n build: (uri, params) => {\n if (!uri)\n return \"\";\n if (!params || typeof params !== \"object\")\n return uri;\n // Single-pass regex replace for maximum speed\n return uri.replace(/:([a-zA-Z\\d_]+)/g, (fullMatch, key) => {\n const value = params[key];\n // If param is not provided, keep the \":key\" placeholder\n if (value === null || value === undefined) {\n return fullMatch;\n }\n // Auto-encode the value using the same URL encoder\n return Serialize.URL.encode(String(value), true);\n });\n },\n })));\n }\n static get queryString() {\n var _a;\n return ((_a = Serialize._queryString) !== null && _a !== void 0 ? _a : (Serialize._queryString = freeze({\n parse(query) {\n if (!query)\n return {};\n const cleanQuery = query.startsWith(\"?\") ? query.slice(1) : query;\n const result = {};\n cleanQuery.split(\"&\").forEach((part) => {\n if (!part)\n return;\n const [key, value] = part.split(\"=\");\n if (key) {\n result[Serialize.URL.decode(key)] = value ? Serialize.URL.decode(value) : \"\";\n }\n });\n return result;\n },\n stringify(params, options = {}) {\n if (params === null || typeof params !== \"object\")\n return \"\";\n const { arrayFormat = \"none\", arrayFormatSeparator = \",\", skipNull = false, skipEmptyString = false, encode = true, strict = true, sort = false, } = options;\n const isValidKey = (k) => k.length > 0 && /^[a-zA-Z0-9_\\-.[\\]]+$/.test(k);\n // Internal encode wrapper\n const encoder = (val) => {\n if (!encode)\n return val;\n return Serialize.URL.encode(val, encode);\n };\n const resultPairs = [];\n // Flat recursion — traverse arrays and nested objects\n const traverse = (prefix, obj) => {\n if (Array.isArray(obj)) {\n if (arrayFormat === \"comma\" || arrayFormat === \"separator\") {\n const validVals = obj.filter((v) => v !== null && v !== undefined && v !== \"\");\n if (validVals.length > 0) {\n resultPairs.push(`${encoder(prefix)}=${encoder(validVals.map(String).join(arrayFormatSeparator))}`);\n }\n return;\n }\n obj.forEach((val, idx) => {\n let arrayKey = prefix;\n if (arrayFormat === \"bracket\")\n arrayKey = `${prefix}[]`;\n else if (arrayFormat === \"index\")\n arrayKey = `${prefix}[${idx}]`;\n traverse(arrayKey, val);\n });\n return;\n }\n if (Serialize.Primitive.isPlainObject(obj)) {\n for (const subKey in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, subKey)) {\n traverse(`${prefix}[${subKey}]`, obj[subKey]);\n }\n }\n return;\n }\n // Primitive formatting\n if (obj === null || obj === undefined) {\n if (!skipNull)\n resultPairs.push(`${encoder(prefix)}=`);\n return;\n }\n if (obj === \"\") {\n if (!skipEmptyString)\n resultPairs.push(`${encoder(prefix)}=`);\n return;\n }\n if (typeof obj === \"boolean\") {\n resultPairs.push(`${encoder(prefix)}=${obj ? \"true\" : \"false\"}`);\n return;\n }\n if (Serialize.Primitive.isDate(obj)) {\n resultPairs.push(`${encoder(prefix)}=${encoder(obj.toISOString())}`);\n return;\n }\n resultPairs.push(`${encoder(prefix)}=${encoder(String(obj))}`);\n };\n // Run the top-level iteration\n let keys = Object.keys(params);\n if (sort)\n keys = typeof sort === \"function\" ? keys.sort(sort) : keys.sort();\n for (const key of keys) {\n if (strict && !isValidKey(key))\n continue;\n traverse(key, params[key]);\n }\n return resultPairs.join(\"&\");\n },\n })));\n }\n}\n","import { Serialize } from \"../serialize\";\nimport { get } from \"../utilities/get\";\nimport { Methods } from \"./method\";\nimport { isFormData } from \"../utilities/formdata\";\n/** Reserved keys that must never be honored in user-supplied query / param objects. */\nconst UNSAFE_KEYS = new Set([\"__proto__\", \"constructor\", \"prototype\"]);\n/**\n * Keys allowed on {@link HttpRequest.fetch}. Lib-level fields\n * (`method`, `headers`, `body`, `signal`) are handled separately and\n * must not appear here — they would let a caller override what the\n * library has already decided.\n *\n * Framework-specific extensions (`next` for Next.js App Router,\n * `cf` for Cloudflare Workers, `dispatcher` for undici) are allowed\n * so apps can pass them through without the lib depending on any of\n * those runtimes.\n */\nconst ALLOWED_FETCH_KEYS = new Set([\n \"credentials\",\n \"cache\",\n \"mode\",\n \"redirect\",\n \"referrer\",\n \"referrerPolicy\",\n \"integrity\",\n \"keepalive\",\n \"priority\",\n \"duplex\",\n \"window\",\n \"next\",\n \"cf\",\n \"dispatcher\",\n]);\nexport class HttpUtils {\n static isAllowedOrigin(origin) {\n return this.AllowedOrigins.size === 0 || this.AllowedOrigins.has(origin);\n }\n static isValidQuery(query) {\n if (typeof query === \"string\" || query instanceof URLSearchParams) {\n return true;\n }\n if (Array.isArray(query)) {\n return query.every((item) => Array.isArray(item) &&\n item.length === 2 &&\n typeof item[0] === \"string\" &&\n Serialize.Primitive.isPrimitive(item[1]));\n }\n if (typeof query === \"object\" && query !== null) {\n return Object.values(query).every((value) => Serialize.Primitive.isPrimitive(value));\n }\n return false;\n }\n /** Strip prototype-pollution vectors from a plain object shallowly. */\n static stripUnsafeKeys(source) {\n const out = Object.create(null);\n for (const key of Object.keys(source)) {\n if (UNSAFE_KEYS.has(key))\n continue;\n out[key] = source[key];\n }\n return out;\n }\n static normalizeQuery(options) {\n const { method, body, query } = options;\n const source = method === Methods.GET && HttpUtils.isValidQuery(body) ? body : query;\n if (!source || typeof source !== \"object\") {\n return typeof source === \"string\" ? source : \"\";\n }\n if (source instanceof URLSearchParams) {\n return source.toString();\n }\n const safe = HttpUtils.stripUnsafeKeys(source);\n return Serialize.queryString.stringify(safe, {\n skipNull: true,\n skipEmptyString: true,\n });\n }\n static normalizeURL(options) {\n const { url = \"\", params = {} } = options;\n const queryString = HttpUtils.normalizeQuery(options);\n let finalURL;\n if (!url) {\n finalURL = options.url || \"/\";\n }\n else if (url.startsWith(\"//\")) {\n throw new Error(`Http: protocol-relative URLs are not allowed: ${url}`);\n }\n else if (/^[a-z][a-z0-9+.-]*:/i.test(url)) {\n // Has a scheme — must be http/https and origin-allowed\n let parsed;\n try {\n parsed = new URL(url);\n }\n catch (_a) {\n throw new Error(`Http: invalid absolute URL: ${url}`);\n }\n if (parsed.protocol !== \"http:\" && parsed.protocol !== \"https:\") {\n throw new Error(`Http: unsupported URL scheme: ${parsed.protocol}`);\n }\n if (!HttpUtils.isAllowedOrigin(parsed.origin)) {\n throw new Error(`Http: URL origin '${parsed.origin}' is not in allowedOrigins`);\n }\n finalURL = parsed.toString();\n }\n else {\n const base = (options.url || \"/\").replace(/\\/+$/, \"\");\n const cleanURL = url.replace(/^\\/+/, \"\");\n finalURL = base ? `${base}/${cleanURL}` : `/${cleanURL}`;\n }\n if (queryString) {\n const separator = finalURL.includes(\"?\") ? \"&\" : \"?\";\n finalURL += `${separator}${queryString}`;\n }\n if (!finalURL.includes(\"{\") || !finalURL.includes(\"}\"))\n return finalURL;\n const safeParams = Array.isArray(params)\n ? params\n : HttpUtils.stripUnsafeKeys(params);\n return finalURL.replace(/\\{([a-zA-Z0-9_.-]+)\\}/g, (_m, variable) => {\n const value = get(safeParams, variable);\n if (value === null || value === undefined)\n return \"\";\n if (typeof value === \"object\")\n return \"\";\n return Serialize.URL.encode(String(value));\n });\n }\n static normalizeHeaders(headers = {}, isFormData) {\n if (isFormData && \"Content-Type\" in headers) {\n delete headers[\"Content-Type\"];\n }\n else {\n headers[\"Content-Type\"] =\n headers[\"Content-Type\"] || \"application/json\";\n }\n return Object.assign(Object.assign({}, this.defaultHeaders), headers);\n }\n static removeURL(options) {\n return Object.entries(options).reduce((acc, [key, value]) => {\n if (key !== \"url\") {\n acc[key] = value;\n }\n return acc;\n }, {});\n }\n static extractFetchOptions(options) {\n const out = {};\n for (const key of Object.keys(options)) {\n if (ALLOWED_FETCH_KEYS.has(key)) {\n out[key] = options[key];\n }\n }\n return out;\n }\n static normalizeBody(options) {\n const { method, body } = options;\n if (method === Methods.GET ||\n method === Methods.HEAD ||\n method === Methods.OPTIONS) {\n return undefined;\n }\n if ((method === Methods.POST || method === Methods.PUT || method === Methods.PATCH || method === Methods.DELETE) &&\n isFormData(body)) {\n return body;\n }\n if (body instanceof URLSearchParams) {\n return body;\n }\n // Allow raw binary payloads (e.g. multipart/related body)\n if (body instanceof Uint8Array || body instanceof ArrayBuffer) {\n return body;\n }\n return body !== undefined ? JSON.stringify(body) : undefined;\n }\n /** Parse a URL string into its origin, returning `null` if the input is relative or invalid. */\n static safeOrigin(url) {\n try {\n return new URL(url).origin;\n }\n catch (_a) {\n return null;\n }\n }\n static assertSameOriginResponse(requestURL, response, sentHeaders) {\n const hasAuthHeader = Object.keys(sentHeaders).some((k) => k.toLowerCase() === \"authorization\" && !!sentHeaders[k]);\n const hasCookieHeader = Object.keys(sentHeaders).some((k) => k.toLowerCase() === \"cookie\" && !!sentHeaders[k]);\n if (!hasAuthHeader && !hasCookieHeader)\n return;\n const reqOrigin = HttpUtils.safeOrigin(requestURL);\n if (!reqOrigin)\n return; // relative URL — same-origin by definition\n const resOrigin = response.url ? HttpUtils.safeOrigin(response.url) : null;\n if (!resOrigin || resOrigin === reqOrigin)\n return;\n if (this.isAllowedOrigin(resOrigin))\n return;\n throw new Error(`Http: credentialed request was redirected from ${reqOrigin} to untrusted origin ${resOrigin}`);\n }\n}\nHttpUtils.AllowedOrigins = new Set();\nHttpUtils.defaultHeaders = {\n \"Content-Type\": \"application/json\",\n};\n","import { __rest } from \"tslib\";\nimport { isFormData } from \"../utilities/formdata\";\nimport { asArray } from \"./array\";\nimport { getHttpInitSlice } from \"./init\";\nimport { Methods } from \"./method\";\nimport { HttpUtils } from \"./utils\";\nexport class HttpCore {\n static async request(init) {\n var _a, _b, _c, _d, _e;\n const _f = getHttpInitSlice(init), { interceptors } = _f, rest = __rest(_f, [\"interceptors\"]);\n try {\n let modifiedOptions = Object.assign({}, rest);\n const requestInterceptors = asArray((_a = interceptors === null || interceptors === void 0 ? void 0 : interceptors.request) !== null && _a !== void 0 ? _a : []);\n for (const interceptor of requestInterceptors) {\n modifiedOptions = await interceptor(modifiedOptions);\n }\n const fullURL = HttpUtils.normalizeURL(modifiedOptions);\n const requestHeaders = HttpUtils.normalizeHeaders(modifiedOptions.headers || {}, isFormData(modifiedOptions.body));\n const response = await fetch(fullURL, Object.assign(Object.assign({}, HttpUtils.extractFetchOptions(modifiedOptions)), { method: modifiedOptions.method || Methods.GET, headers: requestHeaders, body: HttpUtils.normalizeBody(modifiedOptions), signal: modifiedOptions.signal }));\n HttpUtils.assertSameOriginResponse(fullURL, response, requestHeaders);\n const headers = response.headers;\n const contentType = headers.get(\"Content-Type\") || \"\";\n let originalData = null;\n if (contentType.includes(\"application/json\")) {\n originalData = (await response.json());\n }\n else {\n originalData = (await response.text());\n }\n const transformInterceptors = asArray((_b = interceptors === null || interceptors === void 0 ? void 0 : interceptors.transform) !== null && _b !== void 0 ? _b : []);\n let data = originalData;\n for (const transform of transformInterceptors) {\n data = await transform(data);\n }\n const responseInterceptors = asArray((_c = interceptors === null || interceptors === void 0 ? void 0 : interceptors.response) !== null && _c !== void 0 ? _c : []);\n let modifiedResponse = response;\n for (const interceptor of responseInterceptors) {\n modifiedResponse = await interceptor(modifiedResponse);\n }\n const resultHeaders = {};\n modifiedResponse.headers.forEach((value, key) => {\n resultHeaders[key] = value;\n });\n const success = modifiedResponse.ok;\n let error = null;\n if (!success) {\n error = originalData.error || originalData;\n const errorInterceptors = asArray((_d = interceptors === null || interceptors === void 0 ? void 0 : interceptors.error) !== null && _d !== void 0 ? _d : []);\n for (const errorHandler of errorInterceptors) {\n error = await errorHandler(error);\n }\n }\n return {\n data,\n success,\n error: success ? null : error,\n status: modifiedResponse.status,\n statusText: modifiedResponse.statusText,\n headers: resultHeaders,\n };\n }\n catch (error) {\n let finalError = error instanceof Error ? error : new Error(String(error));\n const errorInterceptors = asArray((_e = interceptors === null || interceptors === void 0 ? void 0 : interceptors.error) !== null && _e !== void 0 ? _e : []);\n for (const errorHandler of errorInterceptors) {\n finalError = await errorHandler(finalError);\n }\n return {\n data: null,\n status: 0,\n statusText: \"Error\",\n headers: {},\n error: finalError,\n success: false,\n };\n }\n }\n}\n","import { __rest } from \"tslib\";\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { objectToFormData } from \"../utilities/formdata\";\nimport { flatten } from \"../utilities/flatten\";\nimport { isFileList } from \"../utilities/filelist\";\nimport { sanitizeMime } from \"../utilities/sanitize-mime\";\nimport { asArray } from \"./array\";\nimport { getHttpInitSlice } from \"./init\";\nimport { Methods } from \"./method\";\nimport { HttpUtils } from \"./utils\";\nimport { HttpCore } from \"./http-core\";\nexport class HttpXML extends HttpCore {\n static upload(url, file, options) {\n const formData = (options === null || options === void 0 ? void 0 : options.body) ? objectToFormData(options.body) : new FormData();\n let fileName = (options === null || options === void 0 ? void 0 : options.name) || \"file\";\n if (Array.isArray(file)) {\n if (fileName.endsWith(\"[]\")) {\n fileName = fileName.slice(0, -2);\n }\n file.forEach((f, index) => {\n formData.append(`${fileName}[${index}]`, f, f.name);\n });\n }\n else if (isFileList(file)) {\n if (fileName.endsWith(\"[]\"))\n fileName = fileName.slice(0, -2);\n Array.from(file).forEach((f, index) => {\n formData.append(`${fileName}[${index}]`, f, f.name);\n });\n }\n else {\n formData.append(fileName, file, file.name);\n }\n if (options === null || options === void 0 ? void 0 : options.body) {\n const flattenedBody = flatten(options.body);\n Object.entries(flattenedBody).forEach(([key, value]) => {\n if (value !== undefined && value !== null) {\n formData.append(key, String(value));\n }\n });\n }\n if ((options === null || options === void 0 ? void 0 : options.onProgress) && typeof XMLHttpRequest !== \"undefined\") {\n return new Promise(async (resolve) => {\n var _a;\n try {\n const initRequest = Object.assign(Object.assign({}, options), { method: Methods.POST, url, body: formData });\n const _b = getHttpInitSlice(initRequest), { interceptors } = _b, rest = __rest(_b, [\"interceptors\"]);\n let modifiedOptions = Object.assign({}, rest);\n const requestInterceptors = asArray((_a = interceptors === null || interceptors === void 0 ? void 0 : interceptors.request) !== null && _a !== void 0 ? _a : []);\n for (const interceptor of requestInterceptors) {\n modifiedOptions = await interceptor(modifiedOptions);\n }\n const fullURL = HttpUtils.normalizeURL(modifiedOptions);\n const requestHeaders = HttpUtils.normalizeHeaders(modifiedOptions.headers || {}, true);\n const xhr = new XMLHttpRequest();\n xhr.upload.addEventListener(\"progress\", (event) => {\n var _a;\n if (event.lengthComputable) {\n const percentage = Math.round((event.loaded / event.total) * 100);\n (_a = options.onProgress) === null || _a === void 0 ? void 0 : _a.call(options, {\n loaded: event.loaded,\n total: event.total,\n percentage,\n });\n }\n });\n xhr.addEventListener(\"load\", async () => {\n var _a, _b, _c;\n try {\n const contentType = xhr.getResponseHeader(\"Content-Type\") || \"\";\n let originalData = null;\n if (contentType.includes(\"application/json\")) {\n originalData = JSON.parse(xhr.responseText);\n }\n else {\n originalData = xhr.responseText;\n }\n const transformInterceptors = asArray((_a = interceptors === null || interceptors === void 0 ? void 0 : interceptors.transform) !== null && _a !== void 0 ? _a : []);\n let data = originalData;\n for (const transform of transformInterceptors) {\n data = await transform(data);\n }\n const responseInterceptors = asArray((_b = interceptors === null || interceptors === void 0 ? void 0 : interceptors.response) !== null && _b !== void 0 ? _b : []);\n let modifiedResponse = new Response(xhr.responseText, {\n status: xhr.status,\n statusText: xhr.statusText,\n });\n for (const interceptor of responseInterceptors) {\n modifiedResponse = await interceptor(modifiedResponse);\n }\n const resultHeaders = {};\n modifiedResponse.headers.forEach((value, key) => {\n resultHeaders[key] = value;\n });\n const success = modifiedResponse.ok || (xhr.status >= 200 && xhr.status < 300);\n let error = null;\n if (!success) {\n error = originalData.error || originalData;\n const errorInterceptors = asArray((_c = interceptors === null || interceptors === void 0 ? void 0 : interceptors.error) !== null && _c !== void 0 ? _c : []);\n for (const errorHandler of errorInterceptors) {\n error = await errorHandler(error);\n }\n }\n resolve({\n data,\n success,\n error: success ? null : error,\n status: modifiedResponse.status,\n statusText: modifiedResponse.statusText,\n headers: resultHeaders,\n });\n }\n catch (err) {\n resolve({\n data: null,\n success: false,\n status: xhr.status,\n statusText: xhr.statusText,\n headers: {},\n error: err,\n });\n }\n });\n xhr.addEventListener(\"error\", () => {\n resolve({\n data: null,\n success: false,\n status: xhr.status,\n statusText: xhr.statusText || \"Network Error\",\n headers: {},\n error: new Error(\"Network Error\"),\n });\n });\n xhr.open(modifiedOptions.method || Methods.POST, fullURL, true);\n Object.entries(requestHeaders).forEach(([key, value]) => {\n xhr.setRequestHeader(key, value);\n });\n xhr.send(formData);\n }\n catch (err) {\n resolve({\n data: null,\n success: false,\n status: 0,\n statusText: \"Error\",\n headers: {},\n error: err,\n });\n }\n });\n }\n return this.request(Object.assign(Object.assign({}, options), { method: Methods.POST, url, body: formData }));\n }\n static related(url, fileData, options) {\n const contentType = sanitizeMime(options.contentType);\n const metadataMimeType = sanitizeMime(options.metadataMimeType || \"application/json\");\n const boundary = `----related-boundary-${Date.now()}-${Math.random().toString(36).slice(2)}`;\n const metadataJson = JSON.stringify(options.metadata);\n const encoder = new TextEncoder();\n const metadataPart = encoder.encode(`--${boundary}\\r\\n` +\n `Content-Type: ${metadataMimeType}; charset=UTF-8\\r\\n\\r\\n` +\n metadataJson +\n \"\\r\\n\");\n const filePart = encoder.encode(`--${boundary}\\r\\n` +\n `Content-Type: ${contentType}\\r\\n` +\n \"Content-Transfer-Encoding: binary\\r\\n\\r\\n\");\n const closing = encoder.encode(`\\r\\n--${boundary}--`);\n const fileBytes = fileData instanceof Uint8Array ? fileData : new Uint8Array(fileData);\n const body = new Uint8Array(metadataPart.length + filePart.length + fileBytes.length + closing.length);\n [metadataPart, filePart, fileBytes, closing].reduce((offset, part) => {\n body.set(part, offset);\n return offset + part.length;\n }, 0);\n return this.request(Object.assign(Object.assign({}, options), { method: Methods.POST, url, body: body, headers: Object.assign(Object.assign({}, (options.headers || {})), { \"Content-Type\": `multipart/related; boundary=${boundary}` }) }));\n }\n}\n","import { Methods } from \"./method\";\nimport { HttpXML } from \"./xml\";\nexport class HttpStatic extends HttpXML {\n static get(url, init) {\n return this.request(Object.assign(Object.assign({}, init), { url, method: Methods.GET }));\n }\n static post(url, body, init) {\n return this.request(Object.assign(Object.assign({}, init), { url, method: Methods.POST, body }));\n }\n static put(url, body, init) {\n return this.request(Object.assign(Object.assign({}, init), { url, method: Methods.PUT, body }));\n }\n static patch(url, body, init) {\n return this.request(Object.assign(Object.assign({}, init), { url, method: Methods.PATCH, body }));\n }\n static delete(url, body, init) {\n return this.request(Object.assign(Object.assign({}, init), { url, method: Methods.DELETE, body }));\n }\n static head(url, init) {\n return this.request(Object.assign(Object.assign({}, init), { url, method: Methods.HEAD }));\n }\n static options(url, init) {\n return this.request(Object.assign(Object.assign({}, init), { url, method: Methods.OPTIONS }));\n }\n}\nHttpStatic.method = Methods;\n","/** Central registry for grouping endpoint URLs by service name. */\nexport class Endpoint {\n static register(service, endpoints) {\n this.registered[service] = Object.assign({}, endpoints);\n return this;\n }\n static all() {\n return Object.assign({}, this.registered);\n }\n}\nEndpoint.registered = {};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Methods } from \"./method\";\nimport { HttpStatic } from \"./http-static\";\nimport { HttpXML } from \"./xml\";\nimport { Endpoint } from \"./endpoint\";\nimport { HttpUtils } from \"./utils\";\nconst DEFAULT_BASE_URL = \"/\";\nexport class Http extends HttpStatic {\n constructor(init) {\n var _a, _b, _c;\n super();\n this.method = Http.method;\n this.defaultHeaders = {};\n this.interceptors = {\n request: [],\n response: [],\n transform: [],\n error: [],\n };\n const resolved = typeof init === \"string\" || init === undefined\n ? { baseURL: init !== null && init !== void 0 ? init : DEFAULT_BASE_URL }\n : init;\n this.baseURL = (_b = (_a = resolved.baseURL) !== null && _a !== void 0 ? _a : DEFAULT_BASE_URL) !== null && _b !== void 0 ? _b : \"/\";\n const origins = new Set();\n for (const o of (_c = resolved.allowedOrigins) !== null && _c !== void 0 ? _c : []) {\n const origin = HttpUtils.safeOrigin(o);\n if (!origin)\n throw new Error(`Http: invalid allowedOrigins entry: ${o}`);\n origins.add(origin);\n }\n const baseOrigin = HttpUtils.safeOrigin(this.baseURL);\n if (baseOrigin)\n origins.add(baseOrigin);\n this.allowedOrigins = origins;\n this.defaultConfigs = resolved.configs || {};\n // Register allowed origins globally for safe redirects\n origins.forEach(origin => HttpUtils.AllowedOrigins.add(origin));\n }\n static on(...params) {\n const [type, handler] = params;\n const registered = Http.interceptors[type];\n registered.includes(handler) || registered.push(handler);\n Http.interceptors[type] = registered;\n }\n static off(...params) {\n const [type, handler] = params;\n const registered = Http.interceptors[type];\n Http.interceptors[type] = registered.filter((h) => h !== handler);\n }\n on(...params) {\n const [type, handler] = params;\n const registered = this.interceptors[type];\n registered.includes(handler) || registered.push(handler);\n this.interceptors[type] = registered;\n return this;\n }\n off(...params) {\n const [type, handler] = params;\n const registered = this.interceptors[type];\n this.interceptors[type] = registered.filter((h) => h !== handler);\n return this;\n }\n addHeaders(headers) {\n this.defaultHeaders = Object.assign(Object.assign({}, this.defaultHeaders), headers);\n }\n mergeConfig(init) {\n const mergedRequest = [\n ...Http.interceptors.request,\n ...this.interceptors.request,\n ...(init.request ? (Array.isArray(init.request) ? init.request : [init.request]) : []),\n ];\n const mergedTransform = [\n ...Http.interceptors.transform,\n ...this.interceptors.transform,\n ...(init.transform ? (Array.isArray(init.transform) ? init.transform : [init.transform]) : []),\n ];\n const mergedResponse = [\n ...Http.interceptors.response,\n ...this.interceptors.response,\n ...(init.response ? (Array.isArray(init.response) ? init.response : [init.response]) : []),\n ];\n const mergedError = [\n ...Http.interceptors.error,\n ...this.interceptors.error,\n ...(init.error ? (Array.isArray(init.error) ? init.error : [init.error]) : []),\n ];\n let finalUrl = init.url;\n if (finalUrl.startsWith(\"//\")) {\n throw new Error(`Http: protocol-relative URLs are not allowed: ${finalUrl}`);\n }\n if (!/^[a-z][a-z0-9+.-]*:/i.test(finalUrl)) {\n const base = this.baseURL.replace(/\\/+$/, \"\");\n const cleanURL = finalUrl.replace(/^\\/+/, \"\");\n finalUrl = base ? `${base}/${cleanURL}` : `/${cleanURL}`;\n }\n const mergedHeaders = Object.assign(Object.assign({}, this.defaultHeaders), init.headers);\n return Object.assign(Object.assign(Object.assign({}, this.defaultConfigs), init), { url: finalUrl, headers: mergedHeaders, request: mergedRequest, transform: mergedTransform, response: mergedResponse, error: mergedError, method: init.method || Methods.GET });\n }\n request(init) {\n return HttpStatic.request(this.mergeConfig(init));\n }\n get(url, init) {\n return this.request(Object.assign(Object.assign({}, init), { url, method: Methods.GET }));\n }\n post(url, body, init) {\n return this.request(Object.assign(Object.assign({}, init), { url, method: Methods.POST, body }));\n }\n put(url, body, init) {\n return this.request(Object.assign(Object.assign({}, init), { url, method: Methods.PUT, body }));\n }\n patch(url, body, init) {\n return this.request(Object.assign(Object.assign({}, init), { url, method: Methods.PATCH, body }));\n }\n delete(url, body, init) {\n return this.request(Object.assign(Object.assign({}, init), { url, method: Methods.DELETE, body }));\n }\n head(url, init) {\n return this.request(Object.assign(Object.assign({}, init), { url, method: Methods.HEAD }));\n }\n options(url, init) {\n return this.request(Object.assign(Object.assign({}, init), { url, method: Methods.OPTIONS }));\n }\n upload(url, file, options) {\n return HttpXML.upload(url, file, this.mergeConfig(Object.assign(Object.assign({}, options), { url, method: Methods.POST })));\n }\n related(url, fileData, options) {\n return HttpXML.related(url, fileData, this.mergeConfig(Object.assign(Object.assign({}, options), { url, method: Methods.POST })));\n }\n}\nHttp.method = Methods;\nHttp.Endpoint = Endpoint;\nHttp.interceptors = {\n request: [],\n response: [],\n transform: [],\n error: [],\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { flatten } from \"../utilities/flatten\";\nimport { Http } from \"./http\";\nimport { Methods } from \"./method\";\n/**\n * Creates a client that generates typed endpoint actions.\n * Each action has a `key` (useful for caching keys like React Query) and an async `fn`.\n *\n * @example\n * ```ts\n * const api = createClient({\n * baseURL: \"https://api.example.com\",\n * endpoint: { users: { list: \"/users\", create: \"/users\" } },\n * });\n *\n * const getUsers = api<User[]>(\"users.list\");\n * const { data } = await getUsers.fn();\n * ```\n */\nexport function createClient(options = {}) {\n const instance = options.http || new Http(options.baseURL);\n const getEndpoints = () => {\n if (typeof options.endpoint === \"function\") {\n return options.endpoint();\n }\n else {\n return options.endpoint || {};\n }\n };\n return function client(key, method) {\n const urls = flatten(getEndpoints());\n const url = urls[key];\n return {\n key,\n fn: async (...args) => {\n switch (method) {\n case Methods.POST:\n return await instance.post(url, ...args);\n case Methods.PUT:\n return await instance.put(url, ...args);\n case Methods.PATCH:\n return await instance.patch(url, ...args);\n case Methods.DELETE:\n return await instance.delete(url, ...args);\n case Methods.HEAD:\n return await instance.head(url, ...args);\n case Methods.OPTIONS:\n return await instance.options(url, ...args);\n case \"upload\":\n return await instance.upload(url, ...args);\n case \"related\":\n return await instance.related(url, ...args);\n default:\n return await instance.get(url, ...args);\n }\n },\n };\n };\n}\n","const isServer = () => typeof window === \"undefined\";\n// ─── ANSI colors (server / Node.js) ───────────────────────\nconst ansi = {\n reset: \"\\x1b[0m\",\n bold: \"\\x1b[1m\",\n red: \"\\x1b[31m\",\n green: \"\\x1b[32m\",\n yellow: \"\\x1b[33m\",\n magenta: \"\\x1b[35m\",\n cyan: \"\\x1b[36m\",\n white: \"\\x1b[37m\",\n};\n// ─── CSS styles (browser / DevTools) ──────────────────────\nconst css = {\n LOG: \"color:#22c55e;font-weight:bold\",\n WARN: \"color:#eab308;font-weight:bold\",\n ERROR: \"color:#ef4444;font-weight:bold\",\n DEBUG: \"color:#a855f7;font-weight:bold\",\n VERBOSE: \"color:#06b6d4;font-weight:bold\",\n};\nconst cssReset = \"color:inherit;font-weight:normal\";\nconst cssContext = \"color:#eab308;font-weight:normal\";\nconst cssTimestamp = \"color:#9ca3af;font-weight:normal\";\nconst cssMessage = {\n LOG: \"color:#22c55e\",\n WARN: \"color:#eab308\",\n ERROR: \"color:#ef4444\",\n DEBUG: \"color:#a855f7\",\n VERBOSE: \"color:#06b6d4\",\n};\nfunction timestamp() {\n const now = new Date();\n return now.toLocaleString(\"en-US\", {\n month: \"2-digit\",\n day: \"2-digit\",\n year: \"numeric\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n hour12: true,\n });\n}\nfunction pid() {\n if (isServer() && typeof process !== \"undefined\")\n return process.pid;\n return 0;\n}\nconst levelAnsi = {\n LOG: ansi.green,\n WARN: ansi.yellow,\n ERROR: ansi.red,\n DEBUG: ansi.magenta,\n VERBOSE: ansi.cyan,\n};\nconst MAX_LOG_BUFFER = 200;\n// Use globalThis to share log buffer across all module bundles\nconst LOG_KEY = Symbol.for(\"@ecosy:logger\");\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst g = globalThis;\nif (!g[LOG_KEY]) {\n g[LOG_KEY] = { buffer: [], errors: 0, warns: 0, total: 0 };\n}\nconst shared = g[LOG_KEY];\n/**\n * Isomorphic logger with color-coded output.\n *\n * - **Server (Node.js)**: Uses ANSI escape codes for terminal coloring.\n * - **Browser**: Uses `%c` CSS formatting for DevTools console.\n *\n * All log entries are buffered in a shared `globalThis` store so that\n * {@link Syhemo} can collect them for monitoring.\n *\n * @example\n * ```ts\n * const logger = new Logger(\"MyModule\");\n * logger.log(\"Server started on port 3000\");\n * logger.warn(\"Deprecated API used\");\n * logger.error(\"Connection failed\", error);\n * logger.debug(\"Payload:\", data);\n * ```\n */\nexport class Logger {\n /**\n * @param context - Label shown in log output, e.g. `[MyModule]`.\n * Defaults to `\"@ecosy\"`.\n */\n constructor(context = \"@ecosy\") {\n this.context = context;\n }\n format(level, message, ...args) {\n const fn = level === \"ERROR\" ? console.error : level === \"WARN\" ? console.warn : console.log;\n // Buffer log entry for Syhemo monitor (globalThis-backed)\n shared.buffer.push({\n timestamp: Date.now(),\n level,\n context: this.context,\n message,\n });\n if (shared.buffer.length > MAX_LOG_BUFFER) {\n shared.buffer.shift();\n }\n // Track counts\n shared.total++;\n if (level === \"ERROR\")\n shared.errors++;\n if (level === \"WARN\")\n shared.warns++;\n if (isServer()) {\n this.formatServer(fn, level, message, ...args);\n }\n else {\n this.formatBrowser(fn, level, message, ...args);\n }\n }\n formatServer(fn, level, message, ...args) {\n const color = levelAnsi[level];\n const ts = `${ansi.white}${timestamp()}${ansi.reset}`;\n const lv = `${color}${ansi.bold}${level.padEnd(7)}${ansi.reset}`;\n const pidStr = `${ansi.yellow}${pid()}${ansi.reset}`;\n const ctx = `${ansi.yellow}[${this.context}]${ansi.reset}`;\n const msg = `${color}${message}${ansi.reset}`;\n fn(`${lv} ${pidStr} - ${ts} ${ctx} ${msg}`, ...args);\n }\n formatBrowser(fn, level, message, ...args) {\n const template = `%c${level.padEnd(7)}%c - %c${timestamp()}%c %c[${this.context}]%c %c${message}`;\n fn(template, css[level], cssReset, cssTimestamp, cssReset, cssContext, cssReset, cssMessage[level], ...args);\n }\n /** Log a message at the `LOG` level (green). */\n log(message, ...args) {\n this.format(\"LOG\", message, ...args);\n }\n /** Log a message at the `WARN` level (yellow). */\n warn(message, ...args) {\n this.format(\"WARN\", message, ...args);\n }\n /** Log a message at the `ERROR` level (red). */\n error(message, ...args) {\n this.format(\"ERROR\", message, ...args);\n }\n /** Log a message at the `DEBUG` level (magenta). */\n debug(message, ...args) {\n this.format(\"DEBUG\", message, ...args);\n }\n /** Log a message at the `VERBOSE` level (cyan). */\n verbose(message, ...args) {\n this.format(\"VERBOSE\", message, ...args);\n }\n // ─── Static methods for Syhemo ───────────────────────────\n /**\n * Returns a shallow copy of all buffered log entries (non-destructive).\n * Used by {@link Syhemo} to collect logs for monitoring snapshots.\n */\n static getLogs() {\n return [...shared.buffer];\n }\n /**\n * Returns the current error, warn, and total log counts, then resets\n * the counters to zero. Used by {@link Syhemo} for per-interval log rate tracking.\n */\n static drainCounts() {\n const result = {\n errors: shared.errors,\n warns: shared.warns,\n total: shared.total,\n };\n shared.errors = 0;\n shared.warns = 0;\n shared.total = 0;\n return result;\n }\n}\n","/**\n * Default character transformer map for common non-ASCII characters.\n * Can be extended or overridden via {@link SlugifyOptions.transformer}.\n */\nexport const DEFAULT_TRANSFORMER = {\n đ: \"d\",\n æ: \"ae\",\n ø: \"o\",\n å: \"a\",\n œ: \"oe\",\n ß: \"ss\",\n þ: \"th\",\n ð: \"d\",\n};\n/**\n * Converts a string into a URL-friendly slug.\n * Handles Unicode normalization, custom character transformations,\n * and separator deduplication.\n *\n * @param str - The input string to slugify.\n * @param options - Configuration options.\n * @returns A lowercase, URL-safe slug string.\n *\n * @example\n * ```ts\n * slugify(\"Hello World\"); // \"hello-world\"\n * slugify(\"Xin Chào Đất Nước\"); // \"xin-chao-dat-nuoc\" (Vietnamese)\n * slugify(\"Straße nach München\"); // \"strasse-nach-munchen\" (German)\n * slugify(\"Ærlig talt, det er sjovt\"); // \"aerlig-talt-det-er-sjovt\" (Danish)\n * slugify(\"C'est la crème brûlée\"); // \"cest-la-creme-brulee\" (French)\n * slugify(\"Foo Bar\", { separator: \"_\" }); // \"foo_bar\"\n * ```\n */\nexport function slugify(str, options = {}) {\n const { separator = \"-\", silent = false } = options;\n if (!str) {\n return \"\";\n }\n str = str.toLowerCase();\n // 1. Merge default transformer with user overrides (user takes precedence)\n const transformer = Object.assign(Object.assign({}, DEFAULT_TRANSFORMER), options.transformer);\n const keys = Object.keys(transformer);\n if (keys.length > 0) {\n // Sort keys by length (descending) so longer matches take priority\n keys.sort((a, b) => b.length - a.length);\n const escapedKeys = keys.map((k) => k.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\"));\n const regex = new RegExp(escapedKeys.join(\"|\"), \"g\");\n str = str.replace(regex, (match) => {\n const replaceValue = transformer[match];\n // Silent mode: discard replacements longer than 1 character\n if (silent && replaceValue.length > 1) {\n return \"\";\n }\n return replaceValue;\n });\n }\n // 2. Decompose Unicode (NFD) and strip diacritics + special characters\n str = str\n .normalize(\"NFD\")\n .replace(/[\\u0300-\\u036f]/g, \"\")\n .replace(/[^\\w]|_|-/g, separator);\n // 3. Clean up separator duplicates and trim edges\n if (!separator) {\n return str.trim();\n }\n const escapedSeparator = separator.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n return str\n .replace(new RegExp(`${escapedSeparator}+`, \"g\"), separator)\n .replace(new RegExp(`^${escapedSeparator}|${escapedSeparator}$`, \"g\"), \"\")\n .trim();\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { hasOwnProperty, isLiteralObject, isObject } from \"./object\";\nfunction isEqualArrayBuffer(value1, value2) {\n if (value1.byteLength !== value2.byteLength) {\n return false;\n }\n const buffer1 = ArrayBuffer.isView(value1) ? value1.buffer : value1;\n const offset1 = ArrayBuffer.isView(value1) ? value1.byteOffset : 0;\n const buffer2 = ArrayBuffer.isView(value2) ? value2.buffer : value2;\n const offset2 = ArrayBuffer.isView(value2) ? value2.byteOffset : 0;\n const view1 = new Uint8Array(buffer1, offset1, value1.byteLength);\n const view2 = new Uint8Array(buffer2, offset2, value2.byteLength);\n for (let i = 0; i < view1.length; i++) {\n if (view1[i] !== view2[i]) {\n return false;\n }\n }\n return true;\n}\nconst isEqualStrategies = new Map([\n [Date, (value1, value2) => Object.is(value1.getTime(), value2.getTime())],\n [\n RegExp,\n (value1, value2) => Object.is(value1.source, value2.source) && Object.is(value1.flags, value2.flags),\n ],\n [ArrayBuffer, isEqualArrayBuffer],\n [\n Map,\n (value1, value2) => {\n if (value1.size !== value2.size) {\n return false;\n }\n for (const [key, val] of value1) {\n if (!value2.has(key) || !isEqual(val, value2.get(key))) {\n return false;\n }\n }\n return true;\n },\n ],\n [\n Set,\n (value1, value2) => {\n if (value1.size !== value2.size) {\n return false;\n }\n for (const item1 of value1) {\n let hasMatch = false;\n for (const item2 of value2) {\n if (isEqual(item1, item2)) {\n hasMatch = true;\n break;\n }\n }\n if (!hasMatch) {\n return false;\n }\n }\n return true;\n },\n ],\n]);\n/**\n * Performs a deep structural equality check between two values.\n * Supports primitives, arrays, plain objects, Date, RegExp, Map, Set,\n * ArrayBuffer, and TypedArrays.\n *\n * @param value1 - The first value to compare.\n * @param value2 - The second value to compare.\n * @returns `true` if both values are deeply equal.\n *\n * @example\n * ```ts\n * isEqual({ a: 1 }, { a: 1 }); // true\n * isEqual([1, 2], [1, 3]); // false\n * isEqual(new Date(0), new Date(0)); // true\n * ```\n */\nexport function isEqual(value1, value2) {\n // primitive, null, function, avoid NaN === NaN is false\n if (!isObject(value1) || !isObject(value2)) {\n return Object.is(value1, value2);\n }\n // If complex object, check constructor\n if (value1.constructor !== value2.constructor) {\n return false;\n }\n if (Array.isArray(value1)) {\n if (!Array.isArray(value2) || value1.length !== value2.length) {\n return false;\n }\n for (let i = 0; i < value1.length; i++) {\n if (!isEqual(value1[i], value2[i])) {\n return false;\n }\n }\n return true;\n }\n // TypedArray, same logic array because constructor match above\n if (ArrayBuffer.isView(value1) && ArrayBuffer.isView(value2)) {\n return isEqualArrayBuffer(value1, value2);\n }\n if (value1.constructor && isEqualStrategies.has(value1.constructor)) {\n return isEqualStrategies.get(value1.constructor)(value1, value2);\n }\n if (!isLiteralObject(value1) || !isLiteralObject(value2)) {\n return value1 === value2;\n }\n const keys1 = Object.keys(value1);\n const keys2 = Object.keys(value2);\n if (keys1.length !== keys2.length) {\n return false;\n }\n for (const key of keys1) {\n if (!hasOwnProperty(value2, key) ||\n !isEqual(value1[key], value2[key])) {\n return false;\n }\n }\n return true;\n}\n","import { DEFAULT_TRANSFORMER, slugify } from \"./slugify\";\n/** Slugify options tuned for search: no separator, silent multi-char replacements. */\nconst HIGHLIGHT_SEARCH_OPTIONS = {\n separator: \"\",\n silent: true,\n transformer: Object.assign({}, DEFAULT_TRANSFORMER),\n};\n/**\n * Performs a diacritic-insensitive fuzzy search by comparing slugified characters.\n * Returns all matching substrings and their positions in the original string.\n *\n * Uses a **sliding window** algorithm with per-character slugification cache\n * for optimal performance on repeated characters.\n *\n * @param original - The original string to search within.\n * @param searchStr - The search term (will be slugified for comparison).\n * @returns A {@link SearchResult} with matched substrings and their positions.\n *\n * @example\n * ```ts\n * searchify(\"Xin Chào Việt Nam\", \"viet\");\n * // { matches: [\"Việt\"], positions: [{ start: 9, length: 4 }] }\n *\n * searchify(\"Crème Brûlée\", \"brulee\");\n * // { matches: [\"Brûlée\"], positions: [{ start: 6, length: 6 }] }\n * ```\n */\nexport default function searchify(original, searchStr) {\n const slugified = slugify(searchStr, HIGHLIGHT_SEARCH_OPTIONS);\n const searchLength = slugified.length;\n const result = { matches: [], positions: [] };\n if (!searchLength) {\n return result;\n }\n const charCache = new Map();\n // Pre-process: map each original character to its slugified form (cached)\n const originalChars = [...original.split(\"\")].map((char, index) => {\n let slug = charCache.get(char);\n if (slug === undefined) {\n slug = slugify(char, HIGHLIGHT_SEARCH_OPTIONS);\n charCache.set(char, slug);\n }\n return {\n originIndex: index,\n slugified: slug,\n char,\n };\n });\n // Filter consecutive whitespace for performance\n const originalFiltered = originalChars.filter((obj, index, chars) => {\n if (index === 0)\n return true;\n if (obj.char === \" \" && chars[index - 1].char === \" \")\n return false;\n return true;\n });\n if (originalFiltered.length < searchLength) {\n return result;\n }\n // Core algorithm: sliding window match\n for (let i = 0; i < originalFiltered.length;) {\n const firstChar = originalFiltered[i];\n if (firstChar.slugified === \"\") {\n i++;\n continue;\n }\n let currentSlugified = \"\";\n let endPosition = i;\n let isMatch = true;\n while (currentSlugified.length < searchLength && endPosition < originalFiltered.length) {\n const currentChar = originalFiltered[endPosition];\n if (currentChar.slugified !== \"\") {\n currentSlugified += currentChar.slugified;\n if (!slugified.startsWith(currentSlugified)) {\n isMatch = false;\n break;\n }\n }\n endPosition++;\n }\n if (isMatch && currentSlugified === slugified) {\n const lastChar = originalFiltered[endPosition - 1];\n const matchText = original.substring(firstChar.originIndex, lastChar.originIndex + 1);\n result.matches.push(matchText);\n result.positions.push({\n start: firstChar.originIndex,\n length: matchText.length,\n });\n i = endPosition;\n }\n else {\n i++;\n }\n }\n return result;\n}\n","import { clone } from \"./clone\";\nimport { isLiteralObject } from \"./object\";\nfunction isValidKey(key) {\n return key !== \"__proto__\" && key !== \"constructor\" && key !== \"prototype\";\n}\n/**\n * Deep merges `target` into `source`. If both are plain objects, properties are merged\n * recursively. Otherwise, `target` replaces `source`. Prototype-polluting keys\n * (`__proto__`, `constructor`, `prototype`) are rejected.\n *\n * @param source - The base object.\n * @param target - The object whose values are merged into `source`.\n * @param cloneDeep - Custom deep clone function (defaults to `clone`).\n * @returns The merged result.\n *\n * @example\n * ```ts\n * merge({ a: 1, b: { c: 2 } }, { b: { d: 3 } });\n * // { a: 1, b: { c: 2, d: 3 } }\n * ```\n */\nexport function merge(source, target, cloneDeep = clone) {\n if (target === undefined) {\n return cloneDeep(source);\n }\n if (isLiteralObject(source) && isLiteralObject(target)) {\n const result = Object.assign({}, source);\n Object.keys(target).forEach((key) => {\n if (!isValidKey(key)) {\n return;\n }\n const sourceValue = result[key];\n const targetValue = target[key];\n if (isLiteralObject(sourceValue) && isLiteralObject(targetValue)) {\n result[key] = merge(sourceValue, targetValue, cloneDeep);\n }\n else {\n result[key] = cloneDeep(targetValue);\n }\n });\n return result;\n }\n return cloneDeep(target);\n}\n","import { clone } from \"./utilities/clone\";\nimport { freeze } from \"./utilities/freeze\";\nimport { isEqual } from \"./utilities/is-equal\";\nimport { isLiteralObject } from \"./utilities/object\";\nimport { merge } from \"./utilities/merge\";\nimport { ucfirst } from \"./utilities/string\";\nclass SubscribeListener extends Set {\n}\nclass SubscribeListeners extends Map {\n}\nconst defaultEvents = freeze({\n state: {\n change: \"$state:change\",\n },\n});\n/**\n * Generic pub/sub event emitter with built-in state management.\n * Provides subscribe/dispatch for arbitrary channels and state change notifications.\n *\n * @typeParam State - The shape of the internal state object.\n * @typeParam Events - Extended event definitions to wire onto the instance.\n */\nexport class Subscriber {\n get shallow() {\n return freeze({\n merge: this._shallow.merge,\n clone: this._shallow.clone,\n isEqual: this._shallow.isEqual,\n });\n }\n set shallow(shallow) {\n this._shallow = this._shallow.merge(this._shallow, shallow);\n }\n constructor(initialState, events) {\n this._state = {};\n this.listeners = new SubscribeListeners();\n this._shallow = {\n merge,\n clone,\n isEqual,\n };\n this._events = freeze(defaultEvents);\n this._state = (initialState !== null && initialState !== void 0 ? initialState : {});\n this._events = freeze(Object.assign(Object.assign({}, this._events), events));\n }\n /**\n * Subscribes a handler to a named channel.\n *\n * @param channel - The event channel name.\n * @param handler - Callback invoked when the channel is dispatched.\n * @returns An unsubscribe function.\n */\n subscribe(channel, handler) {\n if (!this.listeners.has(channel)) {\n this.listeners.set(channel, new SubscribeListener());\n }\n this.listeners.get(channel).add(handler);\n return () => {\n var _a;\n (_a = this.listeners.get(channel)) === null || _a === void 0 ? void 0 : _a.delete(handler);\n };\n }\n /**\n * Dispatches a payload to all handlers subscribed to the given channel.\n *\n * @param channel - The event channel name.\n * @param payload - Optional data to pass to each handler.\n */\n dispatch(channel, payload) {\n if (!this.listeners.has(channel)) {\n return;\n }\n this.listeners.get(channel).forEach((handler) => {\n const params = payload === undefined ? [] : [payload];\n handler(...params);\n });\n }\n /** Returns the current state. */\n getState() {\n return this._state;\n }\n /**\n * Merges new state and dispatches a state change event if the state has changed.\n *\n * @param state - Full or partial state to merge.\n */\n setState(state) {\n const nextState = this._shallow.merge(this._state, state);\n if (!this._shallow.isEqual(this._state, nextState)) {\n this._state = nextState;\n this.dispatch(this._events.state.change, this._shallow.clone(nextState));\n }\n }\n /**\n * Shorthand to subscribe to state change events.\n *\n * @param handler - Callback receiving the new state.\n * @returns An unsubscribe function.\n */\n onStateChange(handler) {\n return this.subscribe(this._events.state.change, handler);\n }\n /**\n * Subscribes to a channel, resolving a Promise with the first dispatched payload.\n * Supports cancellation via an `AbortSignal`.\n *\n * @warning If the channel is never dispatched and no `AbortSignal` is provided,\n * the returned Promise will never resolve, causing a memory leak. Always pass an\n * `AbortSignal` or ensure the channel will eventually be dispatched.\n *\n * @param channel - The event channel name.\n * @param handler - Optional callback invoked on payload.\n * @param signal - Optional AbortSignal to cancel the subscription.\n * @returns A promise that resolves with the first payload dispatched to the channel.\n */\n async subscribeAsyncOnce(channel, handler, signal) {\n let unsub;\n let onAbort;\n try {\n return await new Promise((resolve, reject) => {\n if (signal === null || signal === void 0 ? void 0 : signal.aborted) {\n return reject(new Error(\"Operation cancelled\"));\n }\n const handle = ((payload) => {\n handler === null || handler === void 0 ? void 0 : handler(payload);\n resolve(payload);\n });\n unsub = this.subscribe(channel, handle);\n if (signal) {\n onAbort = () => reject(new Error(\"Operation cancelled\"));\n signal.addEventListener(\"abort\", onAbort, { once: true });\n }\n });\n }\n finally {\n unsub === null || unsub === void 0 ? void 0 : unsub();\n if (signal && onAbort) {\n signal.removeEventListener(\"abort\", onAbort);\n }\n }\n }\n /**\n * Wires event domains onto a `Subscriber` instance, creating typed dispatch and\n * listener methods (e.g. `instance.domainName.eventName()` and\n * `instance.domainName.onEventName()`).\n *\n * @param $instance - The subscriber instance to extend.\n * @param events - Event definitions mapping domain → channel names.\n * @returns The instance with wired event methods.\n */\n static wire($instance, events) {\n for (const channel in events) {\n if (channel in $instance) {\n throw new Error(`[Subscriber.wire] \"${channel}\" is invalid.`);\n }\n const domains = events[channel];\n if (!isLiteralObject(domains)) {\n continue;\n }\n const methods = Object.keys(domains).reduce((acc, domain) => {\n const channelName = domains[domain];\n acc[domain] = (payload) => {\n $instance.dispatch(channelName, payload);\n };\n acc[`on${ucfirst(domain)}`] = (listener) => $instance.subscribe(channelName, listener);\n return acc;\n }, {});\n Object.defineProperty($instance, channel, {\n value: freeze(methods),\n writable: false,\n enumerable: true,\n configurable: false,\n });\n }\n return $instance;\n }\n}\n","/**\n * Schedules a callback using `requestAnimationFrame` + `setTimeout` for optimal\n * browser execution timing. Falls back to plain `setTimeout` in non-browser environments.\n *\n * @param callback - Function to execute after the defer.\n * @param delay - Additional delay in milliseconds after the animation frame. Defaults to `0`.\n * @returns An object with `ids` (internal timer IDs) and a `cancel` function.\n *\n * @example\n * ```ts\n * const { cancel } = defer(() => console.log(\"done\"), 100);\n * // Later:\n * cancel(); // Cancels if not yet executed\n * ```\n */\nexport function defer(callback, delay) {\n const ids = { r: null, s: null };\n const timeout = Math.max(0, delay || 0);\n function cancel() {\n ids.r && typeof cancelAnimationFrame === \"function\" && cancelAnimationFrame(ids.r);\n ids.s && clearTimeout(ids.s);\n ids.r = null;\n ids.s = null;\n }\n if (typeof requestAnimationFrame === \"function\") {\n ids.r = requestAnimationFrame(() => {\n ids.s = setTimeout(() => {\n callback();\n cancel();\n }, timeout);\n });\n }\n else {\n ids.s = setTimeout(() => {\n callback();\n cancel();\n }, timeout);\n }\n return { ids, cancel };\n}\n/**\n * Promise-based wrapper around {@link defer}.\n * Resolves after the specified delay, and can be cancelled before resolution.\n *\n * @param delay - Delay in milliseconds. Defaults to `0`.\n * @returns A {@link CancelablePromise} that resolves when the defer completes.\n *\n * @example\n * ```ts\n * const wait = deferAsync(500);\n * await wait; // Resolves after ~500ms\n *\n * // Or cancel early:\n * const wait2 = deferAsync(5000);\n * wait2.cancel();\n * ```\n */\nexport function deferAsync(delay) {\n let cancelRef;\n const promise = new Promise((resolve) => {\n // Leverage the core defer function above\n const { cancel } = defer(() => resolve(), delay);\n cancelRef = cancel;\n });\n // Attach the cancel method directly onto the Promise object\n promise.cancel = () => {\n cancelRef();\n };\n return promise;\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { createClient } from \"./client\";\nimport { Http } from \"./http\";\n/**\n * Initializes a new Fetcher Builder.\n *\n * @example\n * ```ts\n * const api = Fetcher({ baseURL: \"https://api.example.com\" })\n * .use(loggerPlugin())\n * .retry(async (res, key) => await handleAuth(res));\n *\n * const userAction = api(\"users.me\");\n * const res = await api.execute(userAction, []);\n * ```\n */\nexport function Fetcher(initialOptions = {}) {\n const options = Object.assign({}, initialOptions);\n options.middlewares = [...(options.middlewares || [])];\n const httpInstance = options.http || new Http(options.baseURL);\n const addArray = (arr, cb) => {\n if (!arr)\n return;\n const items = Array.isArray(arr) ? arr : [arr];\n items.forEach(cb);\n };\n addArray(options.request, fn => httpInstance.on(\"request\", fn));\n addArray(options.response, fn => httpInstance.on(\"response\", fn));\n addArray(options.transform, fn => httpInstance.on(\"transform\", fn));\n addArray(options.error, fn => httpInstance.on(\"error\", fn));\n // Mutable Builder: Khi gọi trực tiếp sẽ trả về raw action (tương đương factory cũ)\n const builder = function (key, method) {\n const rawClientFactory = createClient({\n http: httpInstance,\n baseURL: options.baseURL,\n endpoint: options.endpoint,\n });\n return rawClientFactory(key, method);\n };\n // Cài đặt execute (chạy pipeline)\n builder.execute = async function (action, args, overrideConfig = {}) {\n var _a;\n const runConfig = Object.assign(Object.assign({}, options), overrideConfig);\n let index = -1;\n const middlewares = runConfig.middlewares || [];\n const dispatch = async (i) => {\n if (i <= index)\n throw new Error(\"next() called multiple times\");\n index = i;\n let mw = middlewares[i];\n if (i === middlewares.length) {\n mw = async (act, a) => await act.fn(...a);\n }\n if (!mw)\n return undefined;\n return await mw(action, args, () => dispatch(i + 1));\n };\n let res = await dispatch(0);\n let retries = 0;\n const retryLimit = (_a = runConfig.retryLimit) !== null && _a !== void 0 ? _a : 1;\n while (retries < retryLimit &&\n runConfig.shouldRetry &&\n await runConfig.shouldRetry(res, action.key)) {\n const willRetry = runConfig.onRetry ? await runConfig.onRetry(res, action.key) : true;\n if (!willRetry)\n break;\n retries++;\n res = await action.fn(...args);\n }\n const result = Object.assign(Object.assign({}, res), { args, key: action.key });\n if (runConfig.onResult) {\n await runConfig.onResult(result, runConfig);\n }\n return result;\n };\n // Cài đặt fetcher (bọc execute)\n builder.fetcher = async function (action, ...args) {\n return builder.execute(action, args);\n };\n // Gắn các chain methods lên function object\n builder.use = (...middlewares) => {\n options.middlewares.push(...middlewares);\n return builder;\n };\n builder.request = (fn) => { httpInstance.on(\"request\", fn); return builder; };\n builder.response = (fn) => { httpInstance.on(\"response\", fn); return builder; };\n builder.transform = (fn) => { httpInstance.on(\"transform\", fn); return builder; };\n builder.error = (fn) => { httpInstance.on(\"error\", fn); return builder; };\n builder.shouldRetry = (fn) => { options.shouldRetry = fn; return builder; };\n builder.retry = (fn) => { options.onRetry = fn; return builder; };\n builder.onResult = (fn) => { options.onResult = fn; return builder; };\n builder.config = (opts) => { Object.assign(options, opts); return builder; };\n Object.defineProperty(builder, 'http', {\n get: () => httpInstance\n });\n return builder;\n}\n","/**\n * Middleware plugin that provides lightweight in-memory caching.\n * Responses are cached based on the action key and arguments.\n */\nexport function cachePlugin(options = {}) {\n var _a;\n const ttl = (_a = options.ttl) !== null && _a !== void 0 ? _a : 60000; // Mặc định 60s\n const cache = new Map();\n return async (action, args, next) => {\n const hashKey = `${action.key}_${JSON.stringify(args)}`;\n const cachedItem = cache.get(hashKey);\n // Trả về cache nếu vẫn còn hạn\n if (cachedItem && cachedItem.expiresAt > Date.now()) {\n return cachedItem.data;\n }\n // Gọi hàm tiếp theo\n const res = await next();\n // Lưu vào cache\n cache.set(hashKey, {\n data: res,\n expiresAt: Date.now() + ttl,\n });\n return res;\n };\n}\n","/**\n * Middleware plugin that prevents the \"Thundering Herd\" problem.\n * It deduplicates identical concurrent requests and shares the same Promise\n * among all callers, ensuring only one network request is made.\n */\nexport function dedupePlugin() {\n const pendingRequests = new Map();\n return async (action, args, next) => {\n // Tạo khóa duy nhất dựa trên endpoint key và tham số truyền vào\n const hashKey = `${action.key}_${JSON.stringify(args)}`;\n // Nếu đã có request đang bay, trả về luôn Promise đó để chờ chung\n if (pendingRequests.has(hashKey)) {\n return pendingRequests.get(hashKey);\n }\n // Nếu chưa có, tiến hành gọi API và lưu Promise lại\n const promise = next().finally(() => {\n pendingRequests.delete(hashKey); // Xóa khỏi bộ chờ khi xong\n });\n pendingRequests.set(hashKey, promise);\n return promise;\n };\n}\n","/**\n * Middleware plugin that logs the lifecycle and execution time of requests.\n * Uses Dependency Inversion Principle (DIP) to allow passing any custom logger.\n * Supports custom log levels mapping and custom formatting.\n */\nexport function loggerPlugin(options = {}) {\n var _a, _b, _c;\n // Support legacy direct logger instance passing (if options is the logger itself)\n const isOptionsObject = options && !options.info && !options.log && Object.getPrototypeOf(options) === Object.prototype;\n const config = isOptionsObject ? options : { logger: options };\n const fallbackLogger = typeof console !== \"undefined\" ? console : undefined;\n const targetLogger = config.logger || fallbackLogger;\n const successMethod = config.successLevel || \"info\";\n const errorMethod = config.errorLevel || \"error\";\n const logInfo = ((_a = targetLogger === null || targetLogger === void 0 ? void 0 : targetLogger[successMethod]) === null || _a === void 0 ? void 0 : _a.bind(targetLogger)) || ((_b = targetLogger === null || targetLogger === void 0 ? void 0 : targetLogger.log) === null || _b === void 0 ? void 0 : _b.bind(targetLogger)) || (() => { });\n const logError = ((_c = targetLogger === null || targetLogger === void 0 ? void 0 : targetLogger[errorMethod]) === null || _c === void 0 ? void 0 : _c.bind(targetLogger)) || (() => { });\n const defaultFormatStart = (key, args) => [`[Fetcher] 🚀 Start: ${key}`, args];\n const defaultFormatSuccess = (key, res, time) => [`[Fetcher] ✅ Success: ${key} (${time}ms)`, res];\n const defaultFormatError = (key, err, time) => [`[Fetcher] ❌ Error: ${key} (${time}ms)`, err];\n const formatStart = config.formatStart || defaultFormatStart;\n const formatSuccess = config.formatSuccess || defaultFormatSuccess;\n const formatError = config.formatError || defaultFormatError;\n return async (action, args, next) => {\n const start = Date.now();\n logInfo(...formatStart(action.key, args));\n try {\n const res = await next();\n logInfo(...formatSuccess(action.key, res, Date.now() - start));\n return res;\n }\n catch (err) {\n logError(...formatError(action.key, err, Date.now() - start));\n throw err;\n }\n };\n}\n"],"names":["toString","value","Object","prototype","call","ucfirst","str","charAt","toUpperCase","slice","isFunction","includes","isObject","isLiteralObject","Array","isArray","proto","getPrototypeOf","isObjectable","hasOwnProperty","obj","key","getEnv","defaultValue","sources","source","undefined","env","_getter","asArray","data","flatten","prefix","acc","i","length","newPrefix","entries","globalThis","proc","process","meta","Function","_a","getter","fn","Methods","GET","POST","PUT","DELETE","PATCH","HEAD","OPTIONS","__rest","s","e","t","p","indexOf","getOwnPropertySymbols","propertyIsEnumerable","isFileList","FileList","item","isFormData","body","FormData","objectToFormData","formData","parentKey","Date","append","toISOString","File","Blob","from","forEach","file","index","arrayKey","String","name","SuppressedError","MIME_REGEX","sanitizeMime","test","initKeys","interceptors","next","cf","getHttpInitSlice","init","configs","k","v","keys","cloneStrateries","getTime","RegExp","flags","Map","cache","result","set","val","clone","Set","add","ArrayBuffer","Strateries","NumberTypedArray","Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Uint16Array","Int32Array","Uint32Array","Float32Array","Float64Array","BigInt64Array","BigUint64Array","DataView","DoNotClone","Error","Promise","WeakMap","WeakSet","Symbol","Window","Headers","Request","Response","Worker","AbortController","Node","isConstructor","constructor","targets","has","get","itemData","ItemClass","buffer","byteOffset","byteLength","ItemConstructor","handleName","handler","create","Reflect","ownKeys","descriptor","getOwnPropertyDescriptor","defineProperty","deepFreezeInternal","propNames","freeze","cloneDeep","path","replace","split","filter","Boolean","Serialize","interpolate","pattern","params","trim","match","variable","Primitive","_primitive","isString","isNumber","Number","isFinite","isBoolean","isPrimitive","isDate","isNaN","isPlainObject","normalize","prim","map","toJSON","JSON","_JSON","stringify","space","normalized","_b","parse","text","reviver","URL","_URL","encode","component","encodeURIComponent","encodeURI","sanitized","decode","decoder","decodeURIComponent","decodeURI","build","uri","fullMatch","queryString","_queryString","query","cleanQuery","startsWith","part","options","arrayFormat","arrayFormatSeparator","skipNull","skipEmptyString","strict","sort","isValidKey","encoder","resultPairs","traverse","validVals","push","join","idx","subKey","UNSAFE_KEYS","ALLOWED_FETCH_KEYS","HttpUtils","isAllowedOrigin","origin","this","AllowedOrigins","size","isValidQuery","URLSearchParams","every","values","stripUnsafeKeys","out","normalizeQuery","method","safe","normalizeURL","url","finalURL","parsed","protocol","base","cleanURL","separator","safeParams","_m","normalizeHeaders","headers","assign","defaultHeaders","removeURL","reduce","extractFetchOptions","normalizeBody","safeOrigin","assertSameOriginResponse","requestURL","response","sentHeaders","hasAuthHeader","some","toLowerCase","hasCookieHeader","reqOrigin","resOrigin","HttpCore","request","_c","_d","_e","_f","rest","modifiedOptions","requestInterceptors","interceptor","fullURL","requestHeaders","fetch","signal","contentType","originalData","json","transformInterceptors","transform","responseInterceptors","modifiedResponse","resultHeaders","success","ok","error","errorInterceptors","errorHandler","status","statusText","finalError","HttpXML","upload","fileName","endsWith","f","flattenedBody","onProgress","XMLHttpRequest","async","resolve","xhr","addEventListener","event","lengthComputable","percentage","Math","round","loaded","total","getResponseHeader","responseText","err","open","setRequestHeader","send","related","fileData","metadataMimeType","boundary","now","random","metadataJson","metadata","TextEncoder","metadataPart","filePart","closing","fileBytes","offset","HttpStatic","post","put","patch","head","Endpoint","register","service","endpoints","registered","all","Http","super","resolved","baseURL","origins","o","allowedOrigins","baseOrigin","defaultConfigs","on","type","off","h","addHeaders","mergeConfig","mergedRequest","mergedTransform","mergedResponse","mergedError","finalUrl","mergedHeaders","createClient","instance","http","endpoint","args","delete","isServer","window","ansi","css","LOG","WARN","ERROR","DEBUG","VERBOSE","cssReset","cssMessage","timestamp","toLocaleString","month","day","year","hour","minute","second","hour12","levelAnsi","LOG_KEY","for","g","errors","warns","shared","DEFAULT_TRANSFORMER","isEqualArrayBuffer","value1","value2","buffer1","isView","offset1","buffer2","offset2","view1","view2","isEqualStrategies","is","isEqual","item1","hasMatch","item2","keys1","keys2","merge","target","sourceValue","targetValue","SubscribeListener","SubscribeListeners","defaultEvents","state","change","defer","callback","delay","ids","r","timeout","max","cancel","cancelAnimationFrame","clearTimeout","requestAnimationFrame","setTimeout","initialOptions","middlewares","httpInstance","addArray","arr","cb","builder","rawClientFactory","execute","action","overrideConfig","runConfig","dispatch","mw","act","a","res","retries","retryLimit","shouldRetry","onRetry","onResult","fetcher","use","retry","config","opts","context","format","level","message","console","warn","log","shift","formatServer","formatBrowser","color","ts","padEnd","pid","debug","verbose","getLogs","drainCounts","shallow","_shallow","initialState","events","_state","listeners","_events","subscribe","channel","payload","getState","setState","nextState","onStateChange","subscribeAsyncOnce","unsub","onAbort","reject","aborted","once","removeEventListener","wire","$instance","domains","methods","domain","channelName","listener","writable","enumerable","configurable","UPLOAD","RELATED","ttl","hashKey","cachedItem","expiresAt","pendingRequests","promise","finally","cancelRef","dataOfPath","firstNode","resultObj","parts","remain","info","logger","fallbackLogger","targetLogger","successMethod","successLevel","errorMethod","errorLevel","logInfo","bind","logError","formatStart","formatSuccess","time","formatError","start","silent","transformer","b","escapedKeys","regex","replaceValue","escapedSeparator"],"mappings":"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","x_google_ignoreList":[7]}
1
+ {"version":3,"file":"ecosy-core.umd.js","sources":["../src/utilities/get.ts","../src/serialize/interpolate.ts","../src/utilities/string.ts","../src/utilities/is-function.ts","../src/utilities/object.ts","../src/utilities/clone.ts","../src/utilities/freeze.ts","../src/serialize/primitive.ts","../src/serialize/json.ts","../src/serialize/url.ts","../src/serialize/query-string.ts","../src/serialize/index.ts","../src/utilities/is-equal.ts","../src/utilities/merge.ts","../src/subscriber.ts","../src/utilities/defer.ts","../src/utilities/filelist.ts","../src/utilities/sanitize-mime.ts","../src/utilities/slugify.ts","../src/utilities/searchify.ts","../src/utilities/flatten.ts","../src/utilities/formdata.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\n/**\n * Safely retrieves a nested value from an object using a dot/bracket path.\n * Returns `defaultValue` only when the resolved value is `undefined` —\n * falsy values like `null`, `0`, `false`, and `\"\"` are returned as-is.\n *\n * @param data - The source object to traverse.\n * @param path - Dot-notation string (`\"a.b.c\"`), bracket-notation (`\"a[0].b\"`), or an array of keys.\n * @param defaultValue - Value returned when the path resolves to `undefined`.\n * @returns The resolved value, or `defaultValue` if not found.\n *\n * @example\n * ```ts\n * const obj = { users: [{ name: \"Alice\" }] };\n *\n * get(obj, \"users[0].name\"); // \"Alice\"\n * get(obj, \"users.0.name\"); // \"Alice\"\n * get(obj, \"users[1].name\", \"N/A\"); // \"N/A\"\n * get(obj, \"count\", 0); // 0\n * ```\n */\nexport function get(data, path, defaultValue) {\n // 1. Short-circuit if data is nullish\n if (data === null || data === undefined) {\n return defaultValue;\n }\n // 2. Normalize path into an array of keys\n // Handles both dot notation (\"a.b\") and bracket notation (\"a[0]\")\n const keys = Array.isArray(path)\n ? path\n : path\n .replace(/\\[(\\d+)]/g, \".$1\") // Convert \"users[0]\" to \"users.0\"\n .split(\".\")\n .filter(Boolean); // Remove empty segments from leading/trailing dots\n if (keys.length === 0) {\n return data;\n }\n // 3. Traverse the object tree\n let result = data;\n for (const key of keys) {\n // Stop early if we hit null/undefined mid-path\n if (result === null || result === undefined) {\n return defaultValue;\n }\n result = result[key];\n }\n // 4. Return defaultValue only for undefined; null, 0, false, \"\" are valid results\n return result === undefined ? defaultValue : result;\n}\n","import { get } from \"../utilities/get\";\n/**\n * Interpolates `{key}` placeholders in a string using deep path resolution via {@link get}.\n * Objects are silently replaced with empty strings to avoid `[object Object]`.\n *\n * @param pattern - Template string with `{key}` or `{path.to.key}` placeholders.\n * @param params - Data object or array to resolve values from.\n * @returns The interpolated string.\n */\nexport function interpolate(pattern, params = {}) {\n // Fast-path: skip processing if no placeholders\n if (!pattern ||\n typeof pattern !== \"string\" ||\n !pattern.trim().length ||\n !pattern.includes(\"{\") ||\n !pattern.includes(\"}\")) {\n return pattern;\n }\n // Scan for placeholders and resolve lazily via `get`\n return pattern.replace(/\\{([a-zA-Z0-9_.-]+)\\}/g, (match, variable) => {\n const value = get(params, variable);\n // Unresolved placeholders become empty strings\n if (value === null || value === undefined) {\n return \"\";\n }\n // Prevent \"[object Object]\" — only render primitives\n if (typeof value === \"object\") {\n return \"\";\n }\n return String(value);\n });\n}\n/** Type guards and deep normalization utilities. */\n","/**\n * Returns the internal `[[Class]]` tag of a value using `Object.prototype.toString`.\n *\n * @example\n * ```ts\n * toString([]); // \"[object Array]\"\n * toString(null); // \"[object Null]\"\n * ```\n */\nexport function toString(value) {\n return Object.prototype.toString.call(value);\n}\n/**\n * Capitalizes the first character of a string.\n *\n * @example\n * ```ts\n * ucfirst(\"hello\"); // \"Hello\"\n * ```\n */\nexport function ucfirst(str) {\n return (str.charAt(0).toUpperCase() + str.slice(1));\n}\n/**\n * Converts a PascalCase or camelCase string to kebab-case.\n * Handles consecutive uppercase characters (e.g. acronyms) gracefully.\n *\n * @example\n * ```ts\n * pascalToKebab(\"MyComponent\"); // \"my-component\"\n * pascalToKebab(\"HTMLParser\"); // \"html-parser\"\n * pascalToKebab(\"camelCase\"); // \"camel-case\"\n * ```\n */\nexport function pascalToKebab(str) {\n if (!str)\n return str;\n return str\n .replace(/([a-z0-9])([A-Z])/g, \"$1-$2\")\n .replace(/([A-Z])([A-Z][a-z])/g, \"$1-$2\")\n .toLowerCase();\n}\n","import { toString } from \"./string\";\n/**\n * Checks whether a value is a function (including async and generator functions).\n *\n * @param value - The value to check.\n * @returns `true` if the value is a function.\n *\n * @example\n * ```ts\n * isFunction(() => {}); // true\n * isFunction(async () => {}); // true\n * isFunction(42); // false\n * ```\n */\nexport function isFunction(value) {\n return (typeof value === \"function\" ||\n [\"[object Function]\", \"[object AsyncFunction]\", \"[object GeneratorFunction]\"].includes(toString(value)));\n}\n","import { isFunction } from \"./is-function\";\n/**\n * Checks whether a value is a non-null object.\n *\n * @param value - The value to check.\n * @returns `true` if the value is of type `object` and is not `null`.\n */\nexport function isObject(value) {\n return typeof value === \"object\" && value !== null;\n}\n/**\n * Checks whether a value is a plain object (created by `{}` or `Object.create(null)`).\n *\n * @param value - The value to check.\n * @returns `true` if the value is a plain literal object.\n */\nexport function isLiteralObject(value) {\n if (!isObject(value) || Array.isArray(value)) {\n return false;\n }\n const proto = Object.getPrototypeOf(value);\n return proto === null || proto === Object.prototype;\n}\n/**\n * Checks whether a value is a complex (non-array) object, such as a class instance.\n *\n * @param value - The value to check.\n * @returns `true` if the value is a non-array object.\n */\nexport function isComplexObject(value) {\n return isObject(value) && !Array.isArray(value);\n}\n/**\n * Checks whether a value is an object, array, or function.\n *\n * @param value - The value to check.\n * @returns `true` if the value is \"objectable\" (object, array, or function).\n */\nexport function isObjectable(value) {\n return isObject(value) || isFunction(value);\n}\n/**\n * Type-safe check for own property existence on an object.\n *\n * @param obj - The object to check.\n * @param key - The property key to look for.\n * @returns `true` if the object has the specified own property.\n *\n * @example\n * ```ts\n * hasOwnProperty({ a: 1 }, \"a\"); // true\n * hasOwnProperty({ a: 1 }, \"b\"); // false\n * ```\n */\nexport function hasOwnProperty(obj, key) {\n if (!obj) {\n return false;\n }\n if (!isObjectable(obj)) {\n return Object.prototype.hasOwnProperty.call(obj, key);\n }\n return (Object.prototype.hasOwnProperty.call(obj, key) || key in obj);\n}\n","import { isFunction } from \"./is-function\";\nimport { hasOwnProperty, isObjectable } from \"./object\";\nconst cloneStrateries = {\n [Date.toString()]: (data) => new Date(data.getTime()),\n [RegExp.toString()]: (data) => new RegExp(data.source, data.flags),\n [Map.toString()]: (data, cache) => {\n const result = new Map();\n cache.set(data, result);\n data.forEach((val, key) => {\n result.set(clone(key, cache), clone(val, cache));\n });\n return result;\n },\n [Set.toString()]: (data, cache) => {\n const result = new Set();\n cache.set(data, result);\n data.forEach((val) => {\n result.add(clone(val, cache));\n });\n return result;\n },\n [ArrayBuffer.toString()]: (data) => {\n return data.slice(0);\n },\n};\nconst Strateries = [Date, RegExp, Map, Set, ArrayBuffer];\nconst NumberTypedArray = [\n Int8Array,\n Uint8Array,\n Uint8ClampedArray,\n Int16Array,\n Uint16Array,\n Int32Array,\n Uint32Array,\n Float32Array,\n Float64Array,\n BigInt64Array,\n BigUint64Array,\n DataView,\n];\nconst DoNotClone = (() => {\n return Array.from(new Set([\n // Built-in\n Error,\n Promise,\n Blob,\n // Split by environment\n typeof WeakMap !== \"undefined\" && WeakMap,\n typeof WeakSet !== \"undefined\" && WeakSet,\n typeof Symbol !== \"undefined\" && Symbol,\n typeof Window !== \"undefined\" && Window,\n typeof File !== \"undefined\" && File,\n typeof FormData !== \"undefined\" && FormData,\n typeof Headers !== \"undefined\" && Headers,\n typeof Request !== \"undefined\" && Request,\n typeof Response !== \"undefined\" && Response,\n typeof Worker !== \"undefined\" && Worker,\n typeof AbortController !== \"undefined\" && AbortController,\n typeof Node !== \"undefined\" && Node,\n typeof FileList !== \"undefined\" && FileList,\n ]));\n})();\nfunction isConstructor(constructor, targets) {\n return targets.includes(constructor);\n}\n/**\n * Deep clones a value, handling circular references, built-in types (Date, RegExp, Map, Set,\n * ArrayBuffer, TypedArrays), arrays, and plain objects. Skips non-cloneable types like\n * Error, Promise, WeakMap, DOM nodes, etc.\n *\n * @param data - The value to clone.\n * @param cache - Internal WeakMap used to track circular references.\n * @returns A deep copy of the input value.\n *\n * @example\n * ```ts\n * const original = { a: 1, b: { c: 2 } };\n * const cloned = clone(original);\n * cloned.b.c = 3;\n * original.b.c; // still 2\n * ```\n */\nexport function clone(data, cache = new WeakMap()) {\n var _a;\n if (!isObjectable(data) ||\n isFunction(data) ||\n hasOwnProperty(data, \"$$typeof\") ||\n (data.constructor && isConstructor(data.constructor, DoNotClone))) {\n return data;\n }\n // Prevent circular references\n if (cache.has(data)) {\n return cache.get(data);\n }\n if (data.constructor && isConstructor(data.constructor, NumberTypedArray)) {\n const itemData = data;\n const ItemClass = data.constructor;\n const result = new ItemClass(itemData.buffer.slice(0), itemData.byteOffset, itemData.byteLength);\n cache.set(data, result);\n return result;\n }\n const ItemConstructor = data.constructor;\n if (Strateries.includes(ItemConstructor)) {\n const handleName = ItemConstructor.toString();\n const handler = cloneStrateries[handleName];\n const result = handler(data, cache);\n cache.set(data, result);\n return result;\n }\n // Is Object | Array | Class | Instance | Function\n const result = Array.isArray(data)\n ? new (((_a = Object.getPrototypeOf(data)) === null || _a === void 0 ? void 0 : _a.constructor) || Array)()\n : Object.create(Object.getPrototypeOf(data));\n cache.set(data, result);\n const keys = Reflect.ownKeys(data);\n for (const key of keys) {\n const descriptor = Object.getOwnPropertyDescriptor(data, key);\n if (descriptor) {\n if (\"value\" in descriptor) {\n descriptor.value = clone(descriptor.value, cache);\n }\n Object.defineProperty(result, key, descriptor);\n }\n }\n return result;\n}\n","import { clone } from \"./clone\";\nimport { isObject } from \"./object\";\nfunction deepFreezeInternal(obj) {\n const propNames = Reflect.ownKeys(obj);\n for (const name of propNames) {\n const value = obj[name];\n if (isObject(value)) {\n deepFreezeInternal(value);\n }\n }\n return Object.freeze(obj);\n}\n/**\n * Deep freezes a value by first cloning it, then recursively calling `Object.freeze`.\n * Primitives are returned as-is.\n *\n * @param data - The value to freeze.\n * @param cloneDeep - Custom clone function (defaults to `clone`).\n * @returns A deeply frozen copy of the input.\n *\n * @example\n * ```ts\n * const frozen = freeze({ a: { b: 1 } });\n * frozen.a.b = 2; // throws in strict mode\n * ```\n */\nexport function freeze(data, cloneDeep = clone) {\n if (!isObject(data)) {\n return data;\n }\n const cloned = cloneDeep(data);\n return deepFreezeInternal(cloned);\n}\n","import { freeze } from \"../utilities/freeze\";\nimport { hasOwnProperty, isLiteralObject, isObjectable } from \"../utilities/object\";\nimport { isFunction } from \"../utilities/is-function\";\n/** Type guards and deep normalization utilities. */\nexport const Primitive = freeze({\n isString: (value) => {\n return typeof value === \"string\";\n },\n isNumber(value) {\n return typeof value === \"number\" && Number.isFinite(value);\n },\n isBoolean(value) {\n return typeof value === \"boolean\";\n },\n isPrimitive(value) {\n return !isObjectable(value);\n },\n isDate(value) {\n return value instanceof Date && !Number.isNaN(value.getTime());\n },\n isPlainObject: isLiteralObject,\n normalize(data) {\n const prim = Primitive;\n if (prim.isPrimitive(data)) {\n if (typeof data === \"bigint\")\n return data.toString();\n return data;\n }\n if (prim.isDate(data)) {\n return data.toISOString();\n }\n if (Array.isArray(data)) {\n return data.map((item) => prim.normalize(item));\n }\n // Use isLiteralObject for consistent plain-object detection\n if (isLiteralObject(data)) {\n const result = {};\n for (const key in data) {\n if (hasOwnProperty(data, key)) {\n const val = data[key];\n if (val !== undefined) {\n result[key] = prim.normalize(val);\n }\n }\n }\n return result;\n }\n if (data && hasOwnProperty(data, \"toJSON\") && isFunction(data.toJSON)) {\n return data.toJSON();\n }\n return {};\n },\n});\n","import { freeze } from \"../utilities/freeze\";\nimport { Primitive } from \"./primitive\";\n/** Safe JSON stringify/parse that never throws. */\nexport const Json = freeze({\n stringify: (value, space) => {\n var _a;\n try {\n const normalized = Primitive.normalize(value);\n return (_a = JSON.stringify(normalized, null, space)) !== null && _a !== void 0 ? _a : \"\";\n }\n catch (_b) {\n // Catch edge cases (e.g. circular references not handled by normalize)\n return \"\";\n }\n },\n parse: (text, reviver) => {\n if (!text) {\n return null;\n }\n try {\n return JSON.parse(text, reviver);\n }\n catch (_a) {\n return null; // Return null instead of throwing to keep the flow alive\n }\n },\n});\n","import { freeze } from \"../utilities/freeze\";\n/** URL encoding/decoding with malformed-character recovery. */\nexport const Url = freeze({\n encode(value, component = true) {\n if (!value)\n return \"\";\n if (typeof component === \"function\")\n return component(value);\n try {\n return component ? encodeURIComponent(value) : encodeURI(value);\n }\n catch (_a) {\n // Strip broken surrogate chars and retry instead of crashing\n const sanitized = value.replace(/[\\uD800-\\uDFFF]/g, \"\");\n return component ? encodeURIComponent(sanitized) : encodeURI(sanitized);\n }\n },\n decode: (value, component = true) => {\n if (!value)\n return \"\";\n if (typeof component === \"function\")\n return component(value);\n const decoder = component ? decodeURIComponent : decodeURI;\n const normalized = component ? value.replace(/\\+/g, \"%20\") : value;\n return normalized.replace(/(%[0-9A-F]{2})+/gi, (match) => {\n try {\n return decoder(match);\n }\n catch (_a) {\n console.warn(`[Serialize.URL] Cannot decode part: ${match}`);\n return match; // Keep broken parts intact, recover what we can\n }\n });\n },\n build: (uri, params) => {\n if (!uri)\n return \"\";\n if (!params || typeof params !== \"object\")\n return uri;\n // Single-pass regex replace for maximum speed\n return uri.replace(/:([a-zA-Z\\d_]+)/g, (fullMatch, key) => {\n const value = params[key];\n // If param is not provided, keep the \":key\" placeholder\n if (value === null || value === undefined) {\n return fullMatch;\n }\n // Auto-encode the value using the same URL encoder\n return Url.encode(String(value), true);\n });\n },\n});\n","import { freeze } from \"../utilities/freeze\";\nimport { Primitive } from \"./primitive\";\nimport { Url } from \"./url\";\n/** Query string parse/stringify with configurable array formats. */\nexport const queryString = freeze({\n parse(query) {\n if (!query)\n return {};\n const cleanQuery = query.startsWith(\"?\") ? query.slice(1) : query;\n const result = {};\n cleanQuery.split(\"&\").forEach((part) => {\n if (!part)\n return;\n const [key, value] = part.split(\"=\");\n if (key) {\n result[Url.decode(key)] = value ? Url.decode(value) : \"\";\n }\n });\n return result;\n },\n stringify(params, options = {}) {\n if (params === null || typeof params !== \"object\")\n return \"\";\n const { arrayFormat = \"none\", arrayFormatSeparator = \",\", skipNull = false, skipEmptyString = false, encode = true, strict = true, sort = false, } = options;\n const isValidKey = (k) => k.length > 0 && /^[a-zA-Z0-9_\\-.[\\]]+$/.test(k);\n // Internal encode wrapper\n const encoder = (val) => {\n if (!encode)\n return val;\n return Url.encode(val, encode);\n };\n const resultPairs = [];\n // Flat recursion — traverse arrays and nested objects\n const traverse = (prefix, obj) => {\n if (Array.isArray(obj)) {\n if (arrayFormat === \"comma\" || arrayFormat === \"separator\") {\n const validVals = obj.filter((v) => v !== null && v !== undefined && v !== \"\");\n if (validVals.length > 0) {\n resultPairs.push(`${encoder(prefix)}=${encoder(validVals.map(String).join(arrayFormatSeparator))}`);\n }\n return;\n }\n obj.forEach((val, idx) => {\n let arrayKey = prefix;\n if (arrayFormat === \"bracket\")\n arrayKey = `${prefix}[]`;\n else if (arrayFormat === \"index\")\n arrayKey = `${prefix}[${idx}]`;\n traverse(arrayKey, val);\n });\n return;\n }\n if (Primitive.isPlainObject(obj)) {\n for (const subKey in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, subKey)) {\n traverse(`${prefix}[${subKey}]`, obj[subKey]);\n }\n }\n return;\n }\n // Primitive formatting\n if (obj === null || obj === undefined) {\n if (!skipNull)\n resultPairs.push(`${encoder(prefix)}=`);\n return;\n }\n if (obj === \"\") {\n if (!skipEmptyString)\n resultPairs.push(`${encoder(prefix)}=`);\n return;\n }\n if (typeof obj === \"boolean\") {\n resultPairs.push(`${encoder(prefix)}=${obj ? \"true\" : \"false\"}`);\n return;\n }\n if (Primitive.isDate(obj)) {\n resultPairs.push(`${encoder(prefix)}=${encoder(obj.toISOString())}`);\n return;\n }\n resultPairs.push(`${encoder(prefix)}=${encoder(String(obj))}`);\n };\n // Run the top-level iteration\n let keys = Object.keys(params);\n if (sort)\n keys = typeof sort === \"function\" ? keys.sort(sort) : keys.sort();\n for (const key of keys) {\n if (strict && !isValidKey(key))\n continue;\n traverse(key, params[key]);\n }\n return resultPairs.join(\"&\");\n },\n});\n","import { interpolate } from \"./interpolate\";\nimport { Json } from \"./json\";\nimport { Primitive } from \"./primitive\";\nimport { queryString } from \"./query-string\";\nimport { Url } from \"./url\";\nexport * from \"./types\";\nexport { interpolate } from \"./interpolate\";\nexport { Json } from \"./json\";\nexport { Primitive } from \"./primitive\";\nexport { queryString } from \"./query-string\";\nexport { Url } from \"./url\";\n/**\n * Centralized serialization engine and type-guard toolkit.\n * Addresses common pitfalls of `JSON.stringify`/`JSON.parse` — BigInt safety,\n * Date preservation, undefined stripping, and safe URL encoding/decoding.\n *\n * This is the convenience surface: it gathers every part under one name.\n * Referencing it keeps all of them, because a class is a single binding and a\n * bundler cannot drop half of one. Code that cares about what it ships should\n * import the part it uses instead — each lives in its own module, so nothing\n * else comes with it:\n *\n * ```ts\n * import { Primitive } from \"@ecosy/core/serialize/primitive\";\n * import { queryString } from \"@ecosy/core/serialize/query-string\";\n * ```\n *\n * The two are the same objects, so mixing them is free.\n *\n * @example\n * ```ts\n * Serialize.JSON.stringify({ date: new Date(), big: 123n });\n * Serialize.JSON.parse<User>(jsonText);\n * Serialize.URL.encode(\"hello world\");\n * Serialize.queryString.stringify({ page: 1, tags: [\"a\", \"b\"] });\n * ```\n */\nexport class Serialize {\n}\nSerialize.interpolate = interpolate;\n/** Type guards and deep normalization utilities. */\nSerialize.Primitive = Primitive;\n/** Safe JSON stringify/parse that never throws. */\nSerialize.JSON = Json;\n/** URL encoding/decoding with malformed-character recovery. */\nSerialize.URL = Url;\n/** Query string parse/stringify with configurable array formats. */\nSerialize.queryString = queryString;\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { hasOwnProperty, isLiteralObject, isObject } from \"./object\";\nfunction isEqualArrayBuffer(value1, value2) {\n if (value1.byteLength !== value2.byteLength) {\n return false;\n }\n const buffer1 = ArrayBuffer.isView(value1) ? value1.buffer : value1;\n const offset1 = ArrayBuffer.isView(value1) ? value1.byteOffset : 0;\n const buffer2 = ArrayBuffer.isView(value2) ? value2.buffer : value2;\n const offset2 = ArrayBuffer.isView(value2) ? value2.byteOffset : 0;\n const view1 = new Uint8Array(buffer1, offset1, value1.byteLength);\n const view2 = new Uint8Array(buffer2, offset2, value2.byteLength);\n for (let i = 0; i < view1.length; i++) {\n if (view1[i] !== view2[i]) {\n return false;\n }\n }\n return true;\n}\nconst isEqualStrategies = new Map([\n [Date, (value1, value2) => Object.is(value1.getTime(), value2.getTime())],\n [\n RegExp,\n (value1, value2) => Object.is(value1.source, value2.source) && Object.is(value1.flags, value2.flags),\n ],\n [ArrayBuffer, isEqualArrayBuffer],\n [\n Map,\n (value1, value2) => {\n if (value1.size !== value2.size) {\n return false;\n }\n for (const [key, val] of value1) {\n if (!value2.has(key) || !isEqual(val, value2.get(key))) {\n return false;\n }\n }\n return true;\n },\n ],\n [\n Set,\n (value1, value2) => {\n if (value1.size !== value2.size) {\n return false;\n }\n for (const item1 of value1) {\n let hasMatch = false;\n for (const item2 of value2) {\n if (isEqual(item1, item2)) {\n hasMatch = true;\n break;\n }\n }\n if (!hasMatch) {\n return false;\n }\n }\n return true;\n },\n ],\n]);\n/**\n * Performs a deep structural equality check between two values.\n * Supports primitives, arrays, plain objects, Date, RegExp, Map, Set,\n * ArrayBuffer, and TypedArrays.\n *\n * @param value1 - The first value to compare.\n * @param value2 - The second value to compare.\n * @returns `true` if both values are deeply equal.\n *\n * @example\n * ```ts\n * isEqual({ a: 1 }, { a: 1 }); // true\n * isEqual([1, 2], [1, 3]); // false\n * isEqual(new Date(0), new Date(0)); // true\n * ```\n */\nexport function isEqual(value1, value2) {\n // primitive, null, function, avoid NaN === NaN is false\n if (!isObject(value1) || !isObject(value2)) {\n return Object.is(value1, value2);\n }\n // If complex object, check constructor\n if (value1.constructor !== value2.constructor) {\n return false;\n }\n if (Array.isArray(value1)) {\n if (!Array.isArray(value2) || value1.length !== value2.length) {\n return false;\n }\n for (let i = 0; i < value1.length; i++) {\n if (!isEqual(value1[i], value2[i])) {\n return false;\n }\n }\n return true;\n }\n // TypedArray, same logic array because constructor match above\n if (ArrayBuffer.isView(value1) && ArrayBuffer.isView(value2)) {\n return isEqualArrayBuffer(value1, value2);\n }\n if (value1.constructor && isEqualStrategies.has(value1.constructor)) {\n return isEqualStrategies.get(value1.constructor)(value1, value2);\n }\n if (!isLiteralObject(value1) || !isLiteralObject(value2)) {\n return value1 === value2;\n }\n const keys1 = Object.keys(value1);\n const keys2 = Object.keys(value2);\n if (keys1.length !== keys2.length) {\n return false;\n }\n for (const key of keys1) {\n if (!hasOwnProperty(value2, key) ||\n !isEqual(value1[key], value2[key])) {\n return false;\n }\n }\n return true;\n}\n","import { clone } from \"./clone\";\nimport { isLiteralObject } from \"./object\";\nfunction isValidKey(key) {\n return key !== \"__proto__\" && key !== \"constructor\" && key !== \"prototype\";\n}\n/**\n * Deep merges `target` into `source`. If both are plain objects, properties are merged\n * recursively. Otherwise, `target` replaces `source`. Prototype-polluting keys\n * (`__proto__`, `constructor`, `prototype`) are rejected.\n *\n * @param source - The base object.\n * @param target - The object whose values are merged into `source`.\n * @param cloneDeep - Custom deep clone function (defaults to `clone`).\n * @returns The merged result.\n *\n * @example\n * ```ts\n * merge({ a: 1, b: { c: 2 } }, { b: { d: 3 } });\n * // { a: 1, b: { c: 2, d: 3 } }\n * ```\n */\nexport function merge(source, target, cloneDeep = clone) {\n if (target === undefined) {\n return cloneDeep(source);\n }\n if (isLiteralObject(source) && isLiteralObject(target)) {\n const result = Object.assign({}, source);\n Object.keys(target).forEach((key) => {\n if (!isValidKey(key)) {\n return;\n }\n const sourceValue = result[key];\n const targetValue = target[key];\n if (isLiteralObject(sourceValue) && isLiteralObject(targetValue)) {\n result[key] = merge(sourceValue, targetValue, cloneDeep);\n }\n else {\n result[key] = cloneDeep(targetValue);\n }\n });\n return result;\n }\n return cloneDeep(target);\n}\n","import { clone } from \"./utilities/clone\";\nimport { freeze } from \"./utilities/freeze\";\nimport { isEqual } from \"./utilities/is-equal\";\nimport { isLiteralObject } from \"./utilities/object\";\nimport { merge } from \"./utilities/merge\";\nimport { ucfirst } from \"./utilities/string\";\nclass SubscribeListener extends Set {\n}\nclass SubscribeListeners extends Map {\n}\nconst defaultEvents = freeze({\n state: {\n change: \"$state:change\",\n },\n});\n/**\n * Generic pub/sub event emitter with built-in state management.\n * Provides subscribe/dispatch for arbitrary channels and state change notifications.\n *\n * @typeParam State - The shape of the internal state object.\n * @typeParam Events - Extended event definitions to wire onto the instance.\n */\nexport class Subscriber {\n get shallow() {\n return freeze({\n merge: this._shallow.merge,\n clone: this._shallow.clone,\n isEqual: this._shallow.isEqual,\n });\n }\n set shallow(shallow) {\n this._shallow = this._shallow.merge(this._shallow, shallow);\n }\n constructor(initialState, events) {\n this._state = {};\n this.listeners = new SubscribeListeners();\n this._shallow = {\n merge,\n clone,\n isEqual,\n };\n this._events = freeze(defaultEvents);\n this._state = (initialState !== null && initialState !== void 0 ? initialState : {});\n this._events = freeze(Object.assign(Object.assign({}, this._events), events));\n }\n /**\n * Subscribes a handler to a named channel.\n *\n * @param channel - The event channel name.\n * @param handler - Callback invoked when the channel is dispatched.\n * @returns An unsubscribe function.\n */\n subscribe(channel, handler) {\n if (!this.listeners.has(channel)) {\n this.listeners.set(channel, new SubscribeListener());\n }\n this.listeners.get(channel).add(handler);\n return () => {\n var _a;\n (_a = this.listeners.get(channel)) === null || _a === void 0 ? void 0 : _a.delete(handler);\n };\n }\n /**\n * Dispatches a payload to all handlers subscribed to the given channel.\n *\n * @param channel - The event channel name.\n * @param payload - Optional data to pass to each handler.\n */\n dispatch(channel, payload) {\n if (!this.listeners.has(channel)) {\n return;\n }\n this.listeners.get(channel).forEach((handler) => {\n const params = payload === undefined ? [] : [payload];\n handler(...params);\n });\n }\n /** Returns the current state. */\n getState() {\n return this._state;\n }\n /**\n * Merges new state and dispatches a state change event if the state has changed.\n *\n * @param state - Full or partial state to merge.\n */\n setState(state) {\n const nextState = this._shallow.merge(this._state, state);\n if (!this._shallow.isEqual(this._state, nextState)) {\n this._state = nextState;\n this.dispatch(this._events.state.change, this._shallow.clone(nextState));\n }\n }\n /**\n * Shorthand to subscribe to state change events.\n *\n * @param handler - Callback receiving the new state.\n * @returns An unsubscribe function.\n */\n onStateChange(handler) {\n return this.subscribe(this._events.state.change, handler);\n }\n /**\n * Subscribes to a channel, resolving a Promise with the first dispatched payload.\n * Supports cancellation via an `AbortSignal`.\n *\n * @warning If the channel is never dispatched and no `AbortSignal` is provided,\n * the returned Promise will never resolve, causing a memory leak. Always pass an\n * `AbortSignal` or ensure the channel will eventually be dispatched.\n *\n * @param channel - The event channel name.\n * @param handler - Optional callback invoked on payload.\n * @param signal - Optional AbortSignal to cancel the subscription.\n * @returns A promise that resolves with the first payload dispatched to the channel.\n */\n async subscribeAsyncOnce(channel, handler, signal) {\n let unsub;\n let onAbort;\n try {\n return await new Promise((resolve, reject) => {\n if (signal === null || signal === void 0 ? void 0 : signal.aborted) {\n return reject(new Error(\"Operation cancelled\"));\n }\n const handle = ((payload) => {\n handler === null || handler === void 0 ? void 0 : handler(payload);\n resolve(payload);\n });\n unsub = this.subscribe(channel, handle);\n if (signal) {\n onAbort = () => reject(new Error(\"Operation cancelled\"));\n signal.addEventListener(\"abort\", onAbort, { once: true });\n }\n });\n }\n finally {\n unsub === null || unsub === void 0 ? void 0 : unsub();\n if (signal && onAbort) {\n signal.removeEventListener(\"abort\", onAbort);\n }\n }\n }\n /**\n * Wires event domains onto a `Subscriber` instance, creating typed dispatch and\n * listener methods (e.g. `instance.domainName.eventName()` and\n * `instance.domainName.onEventName()`).\n *\n * @param $instance - The subscriber instance to extend.\n * @param events - Event definitions mapping domain → channel names.\n * @returns The instance with wired event methods.\n */\n static wire($instance, events) {\n for (const channel in events) {\n if (channel in $instance) {\n throw new Error(`[Subscriber.wire] \"${channel}\" is invalid.`);\n }\n const domains = events[channel];\n if (!isLiteralObject(domains)) {\n continue;\n }\n const methods = Object.keys(domains).reduce((acc, domain) => {\n const channelName = domains[domain];\n acc[domain] = (payload) => {\n $instance.dispatch(channelName, payload);\n };\n acc[`on${ucfirst(domain)}`] = (listener) => $instance.subscribe(channelName, listener);\n return acc;\n }, {});\n Object.defineProperty($instance, channel, {\n value: freeze(methods),\n writable: false,\n enumerable: true,\n configurable: false,\n });\n }\n return $instance;\n }\n}\n","/**\n * Schedules a callback using `requestAnimationFrame` + `setTimeout` for optimal\n * browser execution timing. Falls back to plain `setTimeout` in non-browser environments.\n *\n * @param callback - Function to execute after the defer.\n * @param delay - Additional delay in milliseconds after the animation frame. Defaults to `0`.\n * @returns An object with `ids` (internal timer IDs) and a `cancel` function.\n *\n * @example\n * ```ts\n * const { cancel } = defer(() => console.log(\"done\"), 100);\n * // Later:\n * cancel(); // Cancels if not yet executed\n * ```\n */\nexport function defer(callback, delay) {\n const ids = { r: null, s: null };\n const timeout = Math.max(0, delay || 0);\n function cancel() {\n ids.r && typeof cancelAnimationFrame === \"function\" && cancelAnimationFrame(ids.r);\n ids.s && clearTimeout(ids.s);\n ids.r = null;\n ids.s = null;\n }\n if (typeof requestAnimationFrame === \"function\") {\n ids.r = requestAnimationFrame(() => {\n ids.s = setTimeout(() => {\n callback();\n cancel();\n }, timeout);\n });\n }\n else {\n ids.s = setTimeout(() => {\n callback();\n cancel();\n }, timeout);\n }\n return { ids, cancel };\n}\n/**\n * Promise-based wrapper around {@link defer}.\n * Resolves after the specified delay, and can be cancelled before resolution.\n *\n * @param delay - Delay in milliseconds. Defaults to `0`.\n * @returns A {@link CancelablePromise} that resolves when the defer completes.\n *\n * @example\n * ```ts\n * const wait = deferAsync(500);\n * await wait; // Resolves after ~500ms\n *\n * // Or cancel early:\n * const wait2 = deferAsync(5000);\n * wait2.cancel();\n * ```\n */\nexport function deferAsync(delay) {\n let cancelRef;\n const promise = new Promise((resolve) => {\n // Leverage the core defer function above\n const { cancel } = defer(() => resolve(), delay);\n cancelRef = cancel;\n });\n // Attach the cancel method directly onto the Promise object\n promise.cancel = () => {\n cancelRef();\n };\n return promise;\n}\n","import { isFunction } from \"./is-function\";\nimport { toString } from \"./string\";\n/**\n * Checks whether a value is a `FileList` or a `FileList`-like object.\n * Uses `instanceof FileList` in browser environments and falls back to\n * `Object.prototype.toString` tag detection for isomorphic compatibility.\n *\n * @param data - The value to check.\n * @returns `true` if the value is a `FileList` or has the `[object FileList]` tag.\n *\n * @example\n * ```ts\n * const input = document.querySelector(\"input[type=file]\");\n * isFileList(input.files); // true\n * isFileList([]); // false\n * ```\n */\nexport function isFileList(data) {\n return ((typeof FileList !== \"undefined\" && data instanceof FileList) ||\n (typeof data === \"object\" &&\n data !== null &&\n toString(data) === \"[object FileList]\" &&\n \"length\" in data &&\n \"item\" in data &&\n isFunction(data.item)));\n}\n","/** RFC 2045 MIME type pattern: `type/subtype` with optional `;parameter=value`. */\nexport const MIME_REGEX = /^[a-zA-Z0-9][a-zA-Z0-9!#$&\\-^_.+]*\\/[a-zA-Z0-9][a-zA-Z0-9!#$&\\-^_.+]*(;\\s*[\\w.-]+=[\\w.-]+)*$/;\n/**\n * Validate and sanitize a MIME type string.\n *\n * Returns the input unchanged if valid, empty string if malformed.\n * This prevents attackers from smuggling values like `application/php/jpeg`\n * through to the upstream API — the empty Content-Type lets the API\n * server reject the payload on its own terms instead of crashing ours.\n */\nexport function sanitizeMime(value) {\n return MIME_REGEX.test(value) ? value : \"\";\n}\n","/**\n * Default character transformer map for common non-ASCII characters.\n * Can be extended or overridden via {@link SlugifyOptions.transformer}.\n */\nexport const DEFAULT_TRANSFORMER = {\n đ: \"d\",\n æ: \"ae\",\n ø: \"o\",\n å: \"a\",\n œ: \"oe\",\n ß: \"ss\",\n þ: \"th\",\n ð: \"d\",\n};\n/**\n * Converts a string into a URL-friendly slug.\n * Handles Unicode normalization, custom character transformations,\n * and separator deduplication.\n *\n * @param str - The input string to slugify.\n * @param options - Configuration options.\n * @returns A lowercase, URL-safe slug string.\n *\n * @example\n * ```ts\n * slugify(\"Hello World\"); // \"hello-world\"\n * slugify(\"Xin Chào Đất Nước\"); // \"xin-chao-dat-nuoc\" (Vietnamese)\n * slugify(\"Straße nach München\"); // \"strasse-nach-munchen\" (German)\n * slugify(\"Ærlig talt, det er sjovt\"); // \"aerlig-talt-det-er-sjovt\" (Danish)\n * slugify(\"C'est la crème brûlée\"); // \"cest-la-creme-brulee\" (French)\n * slugify(\"Foo Bar\", { separator: \"_\" }); // \"foo_bar\"\n * ```\n */\nexport function slugify(str, options = {}) {\n const { separator = \"-\", silent = false } = options;\n if (!str) {\n return \"\";\n }\n str = str.toLowerCase();\n // 1. Merge default transformer with user overrides (user takes precedence)\n const transformer = Object.assign(Object.assign({}, DEFAULT_TRANSFORMER), options.transformer);\n const keys = Object.keys(transformer);\n if (keys.length > 0) {\n // Sort keys by length (descending) so longer matches take priority\n keys.sort((a, b) => b.length - a.length);\n const escapedKeys = keys.map((k) => k.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\"));\n const regex = new RegExp(escapedKeys.join(\"|\"), \"g\");\n str = str.replace(regex, (match) => {\n const replaceValue = transformer[match];\n // Silent mode: discard replacements longer than 1 character\n if (silent && replaceValue.length > 1) {\n return \"\";\n }\n return replaceValue;\n });\n }\n // 2. Decompose Unicode (NFD) and strip diacritics + special characters\n str = str\n .normalize(\"NFD\")\n .replace(/[\\u0300-\\u036f]/g, \"\")\n .replace(/[^\\w]|_|-/g, separator);\n // 3. Clean up separator duplicates and trim edges\n if (!separator) {\n return str.trim();\n }\n const escapedSeparator = separator.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n return str\n .replace(new RegExp(`${escapedSeparator}+`, \"g\"), separator)\n .replace(new RegExp(`^${escapedSeparator}|${escapedSeparator}$`, \"g\"), \"\")\n .trim();\n}\n","import { DEFAULT_TRANSFORMER, slugify } from \"./slugify\";\n/** Slugify options tuned for search: no separator, silent multi-char replacements. */\nconst HIGHLIGHT_SEARCH_OPTIONS = {\n separator: \"\",\n silent: true,\n transformer: Object.assign({}, DEFAULT_TRANSFORMER),\n};\n/**\n * Performs a diacritic-insensitive fuzzy search by comparing slugified characters.\n * Returns all matching substrings and their positions in the original string.\n *\n * Uses a **sliding window** algorithm with per-character slugification cache\n * for optimal performance on repeated characters.\n *\n * @param original - The original string to search within.\n * @param searchStr - The search term (will be slugified for comparison).\n * @returns A {@link SearchResult} with matched substrings and their positions.\n *\n * @example\n * ```ts\n * searchify(\"Xin Chào Việt Nam\", \"viet\");\n * // { matches: [\"Việt\"], positions: [{ start: 9, length: 4 }] }\n *\n * searchify(\"Crème Brûlée\", \"brulee\");\n * // { matches: [\"Brûlée\"], positions: [{ start: 6, length: 6 }] }\n * ```\n */\nexport function searchify(original, searchStr) {\n const slugified = slugify(searchStr, HIGHLIGHT_SEARCH_OPTIONS);\n const searchLength = slugified.length;\n const result = { matches: [], positions: [] };\n if (!searchLength) {\n return result;\n }\n const charCache = new Map();\n // Pre-process: map each original character to its slugified form (cached)\n const originalChars = [...original.split(\"\")].map((char, index) => {\n let slug = charCache.get(char);\n if (slug === undefined) {\n slug = slugify(char, HIGHLIGHT_SEARCH_OPTIONS);\n charCache.set(char, slug);\n }\n return {\n originIndex: index,\n slugified: slug,\n char,\n };\n });\n // Filter consecutive whitespace for performance\n const originalFiltered = originalChars.filter((obj, index, chars) => {\n if (index === 0)\n return true;\n if (obj.char === \" \" && chars[index - 1].char === \" \")\n return false;\n return true;\n });\n if (originalFiltered.length < searchLength) {\n return result;\n }\n // Core algorithm: sliding window match\n for (let i = 0; i < originalFiltered.length;) {\n const firstChar = originalFiltered[i];\n if (firstChar.slugified === \"\") {\n i++;\n continue;\n }\n let currentSlugified = \"\";\n let endPosition = i;\n let isMatch = true;\n while (currentSlugified.length < searchLength && endPosition < originalFiltered.length) {\n const currentChar = originalFiltered[endPosition];\n if (currentChar.slugified !== \"\") {\n currentSlugified += currentChar.slugified;\n if (!slugified.startsWith(currentSlugified)) {\n isMatch = false;\n break;\n }\n }\n endPosition++;\n }\n if (isMatch && currentSlugified === slugified) {\n const lastChar = originalFiltered[endPosition - 1];\n const matchText = original.substring(firstChar.originIndex, lastChar.originIndex + 1);\n result.matches.push(matchText);\n result.positions.push({\n start: firstChar.originIndex,\n length: matchText.length,\n });\n i = endPosition;\n }\n else {\n i++;\n }\n }\n return result;\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n/**\n * Recursively flattens a nested object or array into a single-level object\n * with dot-separated keys.\n *\n * Array indices use dot notation (`users.0.name` instead of `users[0].name`).\n *\n * @param data - The value to flatten.\n * @param prefix - Internal prefix for recursive key building.\n * @param acc - Internal accumulator for the result.\n * @returns A flat `Record<string, unknown>` with dot-separated keys.\n *\n * @example\n * ```ts\n * flatten({ users: [{ name: \"Alice\" }] });\n * // { \"users.0.name\": \"Alice\" }\n *\n * flatten({ a: { b: { c: 1 } } });\n * // { \"a.b.c\": 1 }\n * ```\n */\nexport function flatten(data, prefix = \"\", acc = {}) {\n if (typeof data !== \"object\" || data === null) {\n if (prefix)\n acc[prefix] = data;\n return acc;\n }\n if (Array.isArray(data)) {\n for (let i = 0; i < data.length; i++) {\n const newPrefix = prefix ? `${prefix}.${i}` : `${i}`;\n flatten(data[i], newPrefix, acc);\n }\n }\n else {\n for (const [key, value] of Object.entries(data)) {\n const newPrefix = prefix ? `${prefix}.${key}` : key;\n flatten(value, newPrefix, acc);\n }\n }\n return acc;\n}\n/**\n * Extracts entries from a flattened object under a given path and reconstructs\n * them as an array of objects (if the keys are numeric indices) or a list of\n * `{ key, value }` pairs (if the keys are non-numeric).\n *\n * @param data - A flattened `Record<string, unknown>` (output of {@link flatten}).\n * @param path - The dot-separated path prefix to extract.\n * @returns An array of reconstructed objects, primitive values, or `{ key, value }` pairs.\n *\n * @example\n * ```ts\n * const flat = flatten({ users: [{ name: \"Alice\" }, { name: \"Bob\" }] });\n * flattenToArray(flat, \"users\");\n * // [{ name: \"Alice\" }, { name: \"Bob\" }]\n *\n * const flat2 = flatten({ config: { host: \"localhost\", port: 3000 } });\n * flattenToArray(flat2, \"config\");\n * // [{ key: \"host\", value: \"localhost\" }, { key: \"port\", value: 3000 }]\n * ```\n */\nexport function flattenToArray(data, path) {\n const prefix = `${path}.`;\n const dataOfPath = Object.entries(data).filter(([key]) => key.startsWith(prefix));\n if (!dataOfPath.length)\n return [];\n // Get the first key, strip the prefix. e.g. \"0.name\"\n const firstKeyRemain = dataOfPath[0][0].replace(prefix, \"\");\n // Determine if it's an array by checking whether the first node is a numeric index\n const firstNode = firstKeyRemain.split(\".\")[0];\n const isArrayType = !isNaN(Number(firstNode));\n // Return as { key, value } list if not an array\n if (!isArrayType) {\n return dataOfPath.map(([key, value]) => ({\n key: key.replace(prefix, \"\"),\n value,\n }));\n }\n // Reconstruct array from \"0.name\" format\n const resultObj = dataOfPath.reduce((acc, [key, value]) => {\n const cleanedKey = key.replace(prefix, \"\"); // \"0.contact.email\"\n const parts = cleanedKey.split(\".\");\n const index = parts[0]; // \"0\"\n const remain = parts.slice(1).join(\".\"); // \"contact.email\"\n if (!acc[index])\n acc[index] = {};\n if (remain) {\n acc[index][remain] = value;\n }\n else {\n acc[index] = value; // Handle primitive arrays\n }\n return acc;\n }, {});\n return Object.values(resultObj);\n}\n/**\n * Escapes special regex characters in a key string so it can be safely\n * used inside a `RegExp` constructor.\n *\n * @param key - The string to escape.\n * @returns The escaped string with special characters prefixed by `\\\\`.\n *\n * @example\n * ```ts\n * escapeRegexKey(\"users[0].name\"); // \"users\\\\[0\\\\]\\\\.name\"\n * ```\n */\nexport function escapeRegexKey(key) {\n return key.replace(/([.[\\]{}])/g, \"\\\\$1\");\n}\n","import { isFileList } from \"./filelist\";\n/** Type guard that checks whether a value is a `FormData` instance. */\nexport function isFormData(body) {\n return body instanceof FormData;\n}\n/**\n * Recursively converts a value into a `FormData` instance.\n * Handles Date, File, Blob, FileList, arrays, nested objects, and primitives.\n *\n * @param data - The value to convert.\n * @param formData - The `FormData` instance to append to (created automatically if omitted).\n * @param parentKey - Internal key prefix for recursive nesting.\n * @returns The populated `FormData` instance.\n *\n * @example\n * ```ts\n * const fd = objectToFormData({\n * name: \"Alice\",\n * avatar: someFile,\n * tags: [\"a\", \"b\"],\n * meta: { role: \"admin\" },\n * });\n * // FormData entries:\n * // name → \"Alice\"\n * // avatar → File\n * // tags[0] → \"a\"\n * // tags[1] → \"b\"\n * // meta[role] → \"admin\"\n * ```\n */\nexport function objectToFormData(data, formData = new FormData(), parentKey = \"\") {\n // Skip null or undefined values\n if (data === null || data === undefined) {\n return formData;\n }\n // 1. Handle Date\n if (data instanceof Date) {\n formData.append(parentKey, data.toISOString());\n }\n // 2. Handle single File or Blob\n else if (data instanceof File || data instanceof Blob) {\n formData.append(parentKey, data);\n }\n // 3. Handle FileList (isomorphic-safe for Node.js)\n else if (isFileList(data)) {\n Array.from(data).forEach((file, index) => {\n // Backend typically expects array files as: files[0], files[1]\n const arrayKey = parentKey ? `${parentKey}[${index}]` : String(index);\n formData.append(arrayKey, file, file.name);\n });\n }\n // 4. Handle regular arrays\n else if (Array.isArray(data)) {\n data.forEach((item, index) => {\n const arrayKey = parentKey ? `${parentKey}[${index}]` : String(index);\n objectToFormData(item, formData, arrayKey);\n });\n }\n // 5. Handle nested objects\n else if (typeof data === \"object\") {\n Object.entries(data).forEach(([key, value]) => {\n const propKey = parentKey ? `${parentKey}[${key}]` : key;\n objectToFormData(value, formData, propKey);\n });\n }\n // 6. Handle primitives (string, number, boolean)\n else {\n formData.append(parentKey, String(data));\n }\n return formData;\n}\n"],"names":["get","data","path","defaultValue","keys","Array","isArray","replace","split","filter","Boolean","length","result","key","undefined","interpolate","pattern","params","trim","includes","match","variable","value","String","toString","Object","prototype","call","ucfirst","str","charAt","toUpperCase","slice","isFunction","isObject","isLiteralObject","proto","getPrototypeOf","isObjectable","hasOwnProperty","obj","cloneStrateries","Date","getTime","RegExp","source","flags","Map","cache","set","forEach","val","clone","Set","add","ArrayBuffer","Strateries","NumberTypedArray","Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Uint16Array","Int32Array","Uint32Array","Float32Array","Float64Array","BigInt64Array","BigUint64Array","DataView","DoNotClone","from","Error","Promise","Blob","WeakMap","WeakSet","Symbol","Window","File","FormData","Headers","Request","Response","Worker","AbortController","Node","FileList","isConstructor","constructor","targets","_a","has","itemData","ItemClass","buffer","byteOffset","byteLength","ItemConstructor","handleName","handler","create","Reflect","ownKeys","descriptor","getOwnPropertyDescriptor","defineProperty","deepFreezeInternal","propNames","name","freeze","cloneDeep","Primitive","isString","isNumber","Number","isFinite","isBoolean","isPrimitive","isDate","isNaN","isPlainObject","normalize","prim","toISOString","map","item","toJSON","Json","stringify","space","normalized","JSON","_b","parse","text","reviver","Url","encode","component","encodeURIComponent","encodeURI","sanitized","decode","decoder","decodeURIComponent","decodeURI","build","uri","fullMatch","queryString","query","cleanQuery","startsWith","part","options","arrayFormat","arrayFormatSeparator","skipNull","skipEmptyString","strict","sort","isValidKey","k","test","encoder","resultPairs","traverse","prefix","validVals","v","push","join","idx","arrayKey","subKey","Serialize","isEqualArrayBuffer","value1","value2","buffer1","isView","offset1","buffer2","offset2","view1","view2","i","URL","isEqualStrategies","is","size","isEqual","item1","hasMatch","item2","keys1","keys2","merge","target","assign","sourceValue","targetValue","SubscribeListener","SubscribeListeners","defaultEvents","state","change","defer","callback","delay","ids","r","s","timeout","Math","max","cancel","cancelAnimationFrame","clearTimeout","requestAnimationFrame","setTimeout","isFileList","MIME_REGEX","DEFAULT_TRANSFORMER","slugify","separator","silent","toLowerCase","transformer","a","b","escapedKeys","regex","replaceValue","escapedSeparator","HIGHLIGHT_SEARCH_OPTIONS","shallow","this","_shallow","initialState","events","_state","listeners","_events","subscribe","channel","delete","dispatch","payload","getState","setState","nextState","onStateChange","subscribeAsyncOnce","signal","unsub","onAbort","resolve","reject","aborted","addEventListener","once","removeEventListener","wire","$instance","domains","methods","reduce","acc","domain","channelName","listener","writable","enumerable","configurable","cancelRef","promise","flatten","newPrefix","entries","dataOfPath","firstNode","resultObj","parts","index","remain","values","body","objectToFormData","formData","parentKey","append","file","original","searchStr","slugified","searchLength","matches","positions","charCache","originalFiltered","char","slug","originIndex","chars","firstChar","currentSlugified","endPosition","isMatch","currentChar","lastChar","matchText","substring","start"],"mappings":"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"}