@inpageedit/core 0.14.5 → 0.16.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 (104) hide show
  1. package/dist/{ActionButton-CRjo_l3y.js → ActionButton-B6OUgtHx.js} +2 -2
  2. package/dist/{ActionButton-CRjo_l3y.js.map → ActionButton-B6OUgtHx.js.map} +1 -1
  3. package/dist/CheckBox-Dx3r3LQz.js +13 -0
  4. package/dist/CheckBox-Dx3r3LQz.js.map +1 -0
  5. package/dist/IconQuickDiff-BkbxyY-d.js +29 -0
  6. package/dist/IconQuickDiff-BkbxyY-d.js.map +1 -0
  7. package/dist/IconQuickEdit-BiRYADU_.js +68 -0
  8. package/dist/IconQuickEdit-BiRYADU_.js.map +1 -0
  9. package/dist/IconUpload-Bz4BW_nc.js +27 -0
  10. package/dist/IconUpload-Bz4BW_nc.js.map +1 -0
  11. package/dist/InPageEdit.js +20 -0
  12. package/dist/InPageEdit.js.map +1 -0
  13. package/dist/InputBox-D2ZRTMFP.js +42 -0
  14. package/dist/InputBox-D2ZRTMFP.js.map +1 -0
  15. package/dist/PluginImagesUsed-BVyvFA1_.js +90 -0
  16. package/dist/PluginImagesUsed-BVyvFA1_.js.map +1 -0
  17. package/dist/{PluginPrefSync-CbFuuC19.js → PluginPrefSync-CUKkx4Qk.js} +11 -11
  18. package/dist/{PluginPrefSync-CbFuuC19.js.map → PluginPrefSync-CUKkx4Qk.js.map} +1 -1
  19. package/dist/{PluginStoreApp-MbC3G9tu.js → PluginStoreApp-CoOAw1fr.js} +4 -4
  20. package/dist/{PluginStoreApp-MbC3G9tu.js.map → PluginStoreApp-CoOAw1fr.js.map} +1 -1
  21. package/dist/PluginTemplatesUsed-CdjT1wR4.js +76 -0
  22. package/dist/PluginTemplatesUsed-CdjT1wR4.js.map +1 -0
  23. package/dist/{index-CM_6yF2v.js → Promise.withResolvers-C4chhLB1.js} +17 -11
  24. package/dist/Promise.withResolvers-C4chhLB1.js.map +1 -0
  25. package/dist/{RadioBox-0UuxlcWZ.js → RadioBox-B0z9YHQg.js} +2 -2
  26. package/dist/{RadioBox-0UuxlcWZ.js.map → RadioBox-B0z9YHQg.js.map} +1 -1
  27. package/dist/components/index.js +75 -46
  28. package/dist/components/index.js.map +1 -1
  29. package/dist/{BasePlugin-DD7l-5Xw.js → core.js} +28 -10
  30. package/dist/core.js.map +1 -0
  31. package/dist/{index-De25v1_Q.js → index-1tsXE6ax.js} +11 -10
  32. package/dist/index-1tsXE6ax.js.map +1 -0
  33. package/dist/{index-WfXtYVMt.js → index-B32tFyLB.js} +132 -100
  34. package/dist/index-B32tFyLB.js.map +1 -0
  35. package/dist/index-BPTMltVf.js +170 -0
  36. package/dist/index-BPTMltVf.js.map +1 -0
  37. package/dist/{index-DKCZDN-Q.js → index-BYlcHc-O.js} +23 -25
  38. package/dist/index-BYlcHc-O.js.map +1 -0
  39. package/dist/{index-CnR6CqkM.js → index-C4qm_X_A.js} +11 -11
  40. package/dist/{index-CnR6CqkM.js.map → index-C4qm_X_A.js.map} +1 -1
  41. package/dist/index-CAtPo7xJ.js +793 -0
  42. package/dist/index-CAtPo7xJ.js.map +1 -0
  43. package/dist/{index-DensW9qt.js → index-CVCy0wPP.js} +9 -8
  44. package/dist/index-CVCy0wPP.js.map +1 -0
  45. package/dist/index-CYfkwXRf.js +1631 -0
  46. package/dist/index-CYfkwXRf.js.map +1 -0
  47. package/dist/index-DZa9mxN4.js +168 -0
  48. package/dist/index-DZa9mxN4.js.map +1 -0
  49. package/dist/{index-BpQ6VGMz.js → index-Dm2vgYkZ.js} +89 -67
  50. package/dist/index-Dm2vgYkZ.js.map +1 -0
  51. package/dist/{index-BanevHQ2.js → index-NWWeW3tX.js} +87 -84
  52. package/dist/index-NWWeW3tX.js.map +1 -0
  53. package/dist/index-QnWieXQc.js +4932 -0
  54. package/dist/index-QnWieXQc.js.map +1 -0
  55. package/dist/{index-B3jld2sl.js → index-bQ0CVu3l.js} +13 -17
  56. package/dist/{index-B3jld2sl.js.map → index-bQ0CVu3l.js.map} +1 -1
  57. package/dist/index-ygc4AMy4.js +44 -0
  58. package/dist/index-ygc4AMy4.js.map +1 -0
  59. package/dist/{index-DD5CVCfD.js → index-z_qDGCMT.js} +2 -2
  60. package/dist/{index-DD5CVCfD.js.map → index-z_qDGCMT.js.map} +1 -1
  61. package/dist/index.d.ts +411 -163
  62. package/dist/index.js +24 -26
  63. package/dist/index.js.map +1 -1
  64. package/dist/{makeCallable-LDU0xZMJ.js → makeCallable-Cg4zUG4c.js} +2 -2
  65. package/dist/{makeCallable-LDU0xZMJ.js.map → makeCallable-Cg4zUG4c.js.map} +1 -1
  66. package/dist/models/index.js +7 -7
  67. package/dist/models/index.js.map +1 -1
  68. package/dist/plugins/index.js +18 -14
  69. package/dist/plugins/index.js.map +1 -1
  70. package/dist/services/index.js +11 -9
  71. package/dist/style.css +1 -1
  72. package/dist/{vueHooks-l04s8cIl.js → vueHooks-Bs93iP61.js} +1519 -1492
  73. package/dist/vueHooks-Bs93iP61.js.map +1 -0
  74. package/lib/index.umd.js +19 -13
  75. package/lib/index.umd.js.map +1 -1
  76. package/lib/style.css +1 -1
  77. package/package.json +38 -27
  78. package/dist/BasePlugin-DD7l-5Xw.js.map +0 -1
  79. package/dist/IconQuickEdit-CMCQncyj.js +0 -27
  80. package/dist/IconQuickEdit-CMCQncyj.js.map +0 -1
  81. package/dist/InputBox-nQKtiWtZ.js +0 -30
  82. package/dist/InputBox-nQKtiWtZ.js.map +0 -1
  83. package/dist/Preferences-C10tZMl1.js +0 -2701
  84. package/dist/Preferences-C10tZMl1.js.map +0 -1
  85. package/dist/WatchlistAction-BbNAyryN.js +0 -5
  86. package/dist/WatchlistAction-BbNAyryN.js.map +0 -1
  87. package/dist/index-7R2LfhNn.js +0 -220
  88. package/dist/index-7R2LfhNn.js.map +0 -1
  89. package/dist/index-BXNyXvre.js +0 -116
  90. package/dist/index-BXNyXvre.js.map +0 -1
  91. package/dist/index-BanevHQ2.js.map +0 -1
  92. package/dist/index-BjDTD66_.js +0 -491
  93. package/dist/index-BjDTD66_.js.map +0 -1
  94. package/dist/index-BpQ6VGMz.js.map +0 -1
  95. package/dist/index-CG38LlAh.js +0 -46
  96. package/dist/index-CG38LlAh.js.map +0 -1
  97. package/dist/index-CM_6yF2v.js.map +0 -1
  98. package/dist/index-DKCZDN-Q.js.map +0 -1
  99. package/dist/index-De25v1_Q.js.map +0 -1
  100. package/dist/index-DensW9qt.js.map +0 -1
  101. package/dist/index-DxaqNWv4.js +0 -3090
  102. package/dist/index-DxaqNWv4.js.map +0 -1
  103. package/dist/index-WfXtYVMt.js.map +0 -1
  104. package/dist/vueHooks-l04s8cIl.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-CYfkwXRf.js","sources":["../../../node_modules/.pnpm/fexios@5.2.0/node_modules/fexios/dist/shared/fexios.DtQgiOCE.mjs","../../../node_modules/.pnpm/fexios@5.2.0/node_modules/fexios/dist/utils/index.mjs","../../../node_modules/.pnpm/fexios@5.2.0/node_modules/fexios/dist/models/index.mjs","../../../node_modules/.pnpm/fexios@5.2.0/node_modules/fexios/dist/fexios.mjs","../../../node_modules/.pnpm/fexios@5.2.0/node_modules/fexios/dist/index.mjs","../../../node_modules/.pnpm/wiki-saikou@7.4.1/node_modules/wiki-saikou/dist/shared/wiki-saikou.CdApFkBG.mjs","../src/models/MemoryStorage.ts","../src/models/WikiPage/index.ts","../src/models/WikiTitle/index.ts"],"sourcesContent":["function clone(value) {\n if (typeof globalThis.structuredClone === \"function\") {\n try {\n return globalThis.structuredClone(value);\n } catch {\n }\n }\n return _structuredClone(value, /* @__PURE__ */ new WeakMap());\n}\nfunction _structuredClone(value, seen) {\n if (typeof value !== \"object\" || value === null) return value;\n const cached = seen.get(value);\n if (cached) return cached;\n if (value instanceof Date) return new Date(value.getTime());\n if (value instanceof RegExp)\n return new RegExp(value.source, value.flags);\n if (value instanceof URL) return new URL(value.toString());\n if (value instanceof URLSearchParams)\n return new URLSearchParams(value.toString());\n if (value instanceof ArrayBuffer) return value.slice(0);\n if (ArrayBuffer.isView(value)) {\n if (value instanceof DataView) {\n return new DataView(\n value.buffer.slice(0),\n value.byteOffset,\n value.byteLength\n );\n }\n const ta = value;\n const Ctor = ta.constructor;\n return new Ctor(ta.buffer.slice(0), ta.byteOffset, ta.length);\n }\n if (value instanceof Map) {\n const out2 = /* @__PURE__ */ new Map();\n seen.set(value, out2);\n value.forEach((v, k) => {\n out2.set(_structuredClone(k, seen), _structuredClone(v, seen));\n });\n return out2;\n }\n if (value instanceof Set) {\n const out2 = /* @__PURE__ */ new Set();\n seen.set(value, out2);\n value.forEach((v) => out2.add(_structuredClone(v, seen)));\n return out2;\n }\n if (Array.isArray(value)) {\n const arr = new Array(value.length);\n seen.set(value, arr);\n for (let i = 0; i < arr.length; i++) {\n arr[i] = _structuredClone(value[i], seen);\n }\n return arr;\n }\n const proto = Object.getPrototypeOf(value);\n const out = Object.create(proto);\n seen.set(value, out);\n const descriptors = Object.getOwnPropertyDescriptors(value);\n for (const key of Reflect.ownKeys(descriptors)) {\n const d = descriptors[key];\n if (\"value\" in d) {\n d.value = _structuredClone(d.value, seen);\n }\n Object.defineProperty(out, key, d);\n }\n return out;\n}\n\nfunction isPlainObject(payload) {\n if (typeof payload !== \"object\" || payload === null) {\n return false;\n }\n const proto = Object.getPrototypeOf(payload);\n return proto === Object.prototype || proto === null;\n}\n\nexport { clone as c, isPlainObject as i };\n//# sourceMappingURL=fexios.DtQgiOCE.mjs.map\n","import { c as clone, i as isPlainObject } from '../shared/fexios.DtQgiOCE.mjs';\n\nconst CallableInstanceImpl = function(property) {\n const proto = this.constructor.prototype;\n const func = Reflect.get(proto, property, proto);\n function apply(...args) {\n return Reflect.apply(func, apply, args);\n }\n Reflect.setPrototypeOf(apply, proto);\n for (const key of Reflect.ownKeys(func)) {\n const desc = Reflect.getOwnPropertyDescriptor(func, key);\n if (desc) Reflect.defineProperty(apply, key, desc);\n }\n return apply;\n};\nCallableInstanceImpl.prototype = Object.create(Function.prototype);\nconst CallableInstance = CallableInstanceImpl;\n\nfunction deepMerge(obj, ...incomes) {\n const result = clone(obj || {});\n for (const inc of incomes) {\n if (inc == null) continue;\n for (const key of Reflect.ownKeys(inc)) {\n const nextVal = inc[key];\n if (typeof nextVal === \"undefined\") continue;\n if (nextVal === null) {\n delete result[key];\n continue;\n }\n const prevVal = result[key];\n if (isPlainObject(prevVal) && isPlainObject(nextVal)) {\n result[key] = deepMerge(prevVal, nextVal);\n } else {\n result[key] = clone(nextVal);\n }\n }\n }\n return result;\n}\n\nexport { CallableInstance, isPlainObject as checkIsPlainObject, clone, deepMerge, isPlainObject };\n//# sourceMappingURL=index.mjs.map\n","import { i as isPlainObject, c as clone } from '../shared/fexios.DtQgiOCE.mjs';\n\nvar FexiosErrorCodes = /* @__PURE__ */ ((FexiosErrorCodes2) => {\n FexiosErrorCodes2[\"BODY_USED\"] = \"BODY_USED\";\n FexiosErrorCodes2[\"NO_BODY_READER\"] = \"NO_BODY_READER\";\n FexiosErrorCodes2[\"TIMEOUT\"] = \"TIMEOUT\";\n FexiosErrorCodes2[\"NETWORK_ERROR\"] = \"NETWORK_ERROR\";\n FexiosErrorCodes2[\"BODY_NOT_ALLOWED\"] = \"BODY_NOT_ALLOWED\";\n FexiosErrorCodes2[\"HOOK_CONTEXT_CHANGED\"] = \"HOOK_CONTEXT_CHANGED\";\n FexiosErrorCodes2[\"ABORTED_BY_HOOK\"] = \"ABORTED_BY_HOOK\";\n FexiosErrorCodes2[\"INVALID_HOOK_CALLBACK\"] = \"INVALID_HOOK_CALLBACK\";\n FexiosErrorCodes2[\"UNEXPECTED_HOOK_RETURN\"] = \"UNEXPECTED_HOOK_RETURN\";\n FexiosErrorCodes2[\"UNSUPPORTED_RESPONSE_TYPE\"] = \"UNSUPPORTED_RESPONSE_TYPE\";\n FexiosErrorCodes2[\"BODY_TRANSFORM_ERROR\"] = \"BODY_TRANSFORM_ERROR\";\n return FexiosErrorCodes2;\n})(FexiosErrorCodes || {});\nclass FexiosError extends Error {\n constructor(code, message, context, options) {\n super(message, options);\n this.code = code;\n this.context = context;\n }\n name = \"FexiosError\";\n static is(e, code) {\n if (!(e instanceof FexiosError) || e instanceof FexiosResponseError) {\n return false;\n }\n return code ? e.code === code : true;\n }\n}\nclass FexiosResponseError extends FexiosError {\n constructor(message, response, options) {\n super(response.statusText, message, void 0, options);\n this.response = response;\n }\n name = \"FexiosResponseError\";\n static is(e) {\n return e instanceof FexiosResponseError;\n }\n}\nconst isFexiosError = (e) => {\n return FexiosError.is(e);\n};\n\nvar FexiosHeaderBuilder;\n((FexiosHeaderBuilder2) => {\n FexiosHeaderBuilder2.makeHeaders = (input) => {\n if (!input) return new Headers();\n if (input instanceof Headers) return new Headers(input);\n const h = new Headers();\n if (input instanceof Map) {\n for (const [k, v] of input.entries()) {\n if (v == null) continue;\n if (Array.isArray(v)) {\n for (const item of v) {\n if (item == null) continue;\n h.append(k, String(item));\n }\n } else {\n h.append(k, String(v));\n }\n }\n return h;\n }\n if (isPlainObject(input)) {\n for (const [k, v] of Object.entries(input)) {\n if (v == null) continue;\n if (Array.isArray(v)) {\n for (const item of v) {\n if (item == null) continue;\n h.append(k, String(item));\n }\n } else {\n h.append(k, String(v));\n }\n }\n return h;\n }\n throw new TypeError(\n \"only plain object, Map/ReadonlyMap, or Headers is supported\"\n );\n };\n FexiosHeaderBuilder2.toHeaderRecord = (input) => {\n if (input instanceof Headers) {\n const out = {};\n input.forEach((value, key) => {\n out[key] = out[key] ? [...out[key], value] : [value];\n });\n return out;\n }\n if (input instanceof Map) {\n const output = {};\n for (const [key, raw] of input.entries()) {\n if (raw == null) continue;\n if (Array.isArray(raw)) {\n const arr = raw.filter((v) => v != null).map((v) => String(v));\n if (arr.length) output[key] = (output[key] ?? []).concat(arr);\n } else {\n const v = String(raw);\n output[key] = output[key] ? [...output[key], v] : [v];\n }\n }\n return output;\n }\n throw new TypeError(\n `unsupported type transformation, got: ${Object.prototype.toString.call(\n input\n )}`\n );\n };\n FexiosHeaderBuilder2.mergeHeaders = (...incomes) => {\n const output = new Headers();\n const mergeOneFromObject = (patch) => {\n for (const [k, v] of Object.entries(patch)) {\n if (v === void 0) continue;\n if (v === null) {\n output.delete(k);\n continue;\n }\n if (Array.isArray(v)) {\n output.delete(k);\n for (const item of v) {\n if (item == null) continue;\n output.append(k, String(item));\n }\n } else {\n output.set(k, String(v));\n }\n }\n };\n for (const input of incomes) {\n if (input == null) continue;\n if (input instanceof Headers) {\n input.forEach((value, key) => {\n output.set(key, value);\n });\n continue;\n }\n if (isPlainObject(input)) {\n mergeOneFromObject(input);\n continue;\n }\n const rec = (0, FexiosHeaderBuilder2.toHeaderRecord)(input);\n for (const [key, arr] of Object.entries(rec)) {\n output.delete(key);\n for (const v of arr) output.append(key, v);\n }\n }\n return output;\n };\n})(FexiosHeaderBuilder || (FexiosHeaderBuilder = {}));\n\nvar FexiosQueryBuilder;\n((FexiosQueryBuilder2) => {\n FexiosQueryBuilder2.makeSearchParams = (params) => {\n if (!params) {\n return new URLSearchParams();\n }\n if (params instanceof URLSearchParams) {\n return params;\n }\n if (typeof params !== \"object\" || params?.constructor !== Object) {\n throw new TypeError(\"only plain object is supported\");\n }\n const sp = new URLSearchParams();\n const appendValue = (k, v) => {\n if (v === void 0 || v === null) return;\n sp.append(k, v);\n };\n const setValue = (k, v) => {\n if (v === void 0 || v === null) return;\n sp.set(k, v);\n };\n const handleNested = (prefix, val) => {\n if (val === void 0 || val === null) return;\n if (Array.isArray(val)) {\n for (const item of val) appendValue(prefix, item?.toString());\n return;\n }\n if (typeof val === \"object\" && val.constructor === Object) {\n for (const [k, v] of Object.entries(val)) {\n if (v === void 0 || v === null) continue;\n const isBracketArrayKey = k.endsWith(\"[]\");\n const cleanKey = isBracketArrayKey ? k.slice(0, -2) : k;\n const nextPrefix = `${prefix}[${cleanKey}]`;\n if (isBracketArrayKey) {\n const arrayKey = `${nextPrefix}[]`;\n if (Array.isArray(v)) {\n for (const item of v) appendValue(arrayKey, item?.toString());\n } else if (typeof v === \"object\" && v !== null && v.constructor === Object) {\n handleNested(`${nextPrefix}[]`, v);\n } else {\n appendValue(arrayKey, v?.toString());\n }\n } else {\n if (Array.isArray(v)) {\n for (const item of v) appendValue(nextPrefix, item?.toString());\n } else if (typeof v === \"object\" && v !== null && v.constructor === Object) {\n handleNested(nextPrefix, v);\n } else {\n setValue(nextPrefix, v?.toString());\n }\n }\n }\n return;\n }\n setValue(prefix, val?.toString());\n };\n for (const [key, value] of Object.entries(params)) {\n handleNested(key, value);\n }\n return sp;\n };\n FexiosQueryBuilder2.makeQueryString = (query) => {\n return (0, FexiosQueryBuilder2.makeSearchParams)(query).toString();\n };\n FexiosQueryBuilder2.makeURL = (url, params, hash, base) => {\n const fallbackBase = typeof window !== \"undefined\" && window.location?.origin || \"http://localhost\";\n const u = typeof url === \"string\" ? new URL(url, base ?? fallbackBase) : new URL(url);\n const existingParams = (0, FexiosQueryBuilder2.toQueryRecord)(u.searchParams);\n const mergedRecord = (0, FexiosQueryBuilder2.mergeQueries)(existingParams, params || {});\n const mergedParams = (0, FexiosQueryBuilder2.makeSearchParams)(mergedRecord);\n u.search = mergedParams.toString();\n if (typeof hash !== \"undefined\") u.hash = hash;\n return u;\n };\n FexiosQueryBuilder2.toQueryRecord = (input) => {\n if (typeof input === \"string\") {\n input = (0, FexiosQueryBuilder2.fromString)(input);\n }\n const output = {};\n const parseKey = (key) => {\n if (!key.includes(\"[\")) return { path: [key], forceArray: false };\n const base = key.slice(0, key.indexOf(\"[\"));\n const parts = [base];\n const re = /\\[([^\\]]*)\\]/g;\n let m;\n let forceArray = false;\n let lastWasEmpty = false;\n while (m = re.exec(key)) {\n if (m[1] === \"\") {\n forceArray = true;\n lastWasEmpty = true;\n } else {\n parts.push(m[1]);\n lastWasEmpty = false;\n }\n }\n if (forceArray && lastWasEmpty) {\n parts[parts.length - 1] = parts[parts.length - 1] + \"[]\";\n }\n return { path: parts, forceArray };\n };\n const setDeep = (obj, path, value, forceArray) => {\n let cur = obj;\n for (let i = 0; i < path.length; i++) {\n const k = path[i];\n const last = i === path.length - 1;\n if (last) {\n if (forceArray) {\n if (cur[k] === void 0) cur[k] = [value];\n else if (Array.isArray(cur[k])) cur[k].push(value);\n else cur[k] = [cur[k], value];\n } else {\n if (cur[k] === void 0) cur[k] = value;\n else if (Array.isArray(cur[k])) cur[k].push(value);\n else cur[k] = [cur[k], value];\n }\n } else {\n if (cur[k] === void 0 || typeof cur[k] !== \"object\" || Array.isArray(cur[k])) {\n cur[k] = {};\n }\n cur = cur[k];\n }\n }\n };\n for (const [rawKey, val] of input.entries()) {\n const { path, forceArray } = parseKey(String(rawKey));\n setDeep(output, path, val?.toString(), forceArray);\n }\n return output;\n };\n FexiosQueryBuilder2.fromString = (s) => {\n const t = s.trim();\n if (!t) return new URLSearchParams();\n if (t.startsWith(\"?\")) return new URLSearchParams(t.slice(1));\n const qIndex = t.indexOf(\"?\");\n if (qIndex >= 0) {\n const hashIndex = t.indexOf(\"#\", qIndex + 1);\n const query = t.slice(qIndex + 1, hashIndex >= 0 ? hashIndex : void 0);\n return new URLSearchParams(query);\n }\n return new URLSearchParams(t);\n };\n FexiosQueryBuilder2.mergeQueries = (...incomes) => {\n const output = {};\n for (const input of incomes) {\n if (input == null) continue;\n mergeOne(output, toPlain(input));\n }\n return output;\n };\n function toPlain(src) {\n if (!src) return {};\n if (src instanceof URLSearchParams || src instanceof FormData || src instanceof Map)\n return (0, FexiosQueryBuilder2.toQueryRecord)(src);\n if (typeof src === \"string\") return (0, FexiosQueryBuilder2.toQueryRecord)((0, FexiosQueryBuilder2.fromString)(src));\n if (isPlainObject(src)) return src;\n throw new TypeError(\n `unsupported type transformation, got: ${Object.prototype.toString.call(\n src\n )}`\n );\n }\n function mergeOne(target, patch) {\n for (const [k, v] of Object.entries(patch)) {\n if (v === void 0) continue;\n if (v === null) {\n delete target[k];\n continue;\n }\n const cur = target[k];\n if (isPlainObject(cur) && isPlainObject(v)) {\n mergeOne(cur, v);\n } else {\n target[k] = clone(v);\n }\n }\n }\n})(FexiosQueryBuilder || (FexiosQueryBuilder = {}));\n\nclass FexiosResponse {\n constructor(rawResponse, data, responseType) {\n this.rawResponse = rawResponse;\n this.data = data;\n this.responseType = responseType;\n [\"ok\", \"status\", \"statusText\", \"headers\", \"url\", \"redirected\"].forEach(\n (key) => {\n Reflect.defineProperty(this, key, {\n get: () => rawResponse[key]\n });\n }\n );\n }\n ok;\n status;\n statusText;\n headers;\n url;\n redirected;\n}\nconst concatUint8Arrays = (parts) => {\n const total = parts.reduce((n, p) => n + p.length, 0);\n const out = new Uint8Array(total);\n let off = 0;\n for (const p of parts) {\n out.set(p, off);\n off += p.length;\n }\n return out;\n};\nasync function readBody(stream, contentLength, onProgress) {\n const reader = stream.getReader();\n if (!reader) {\n throw new FexiosError(\n FexiosErrorCodes.NO_BODY_READER,\n \"Failed to get ReadableStream from response body\"\n );\n }\n const chunks = [];\n let received = 0;\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n chunks.push(value);\n received += value.length;\n if (onProgress && contentLength > 0)\n onProgress(received / contentLength, concatUint8Arrays(chunks));\n }\n } finally {\n reader.releaseLock?.();\n }\n const data = concatUint8Arrays(chunks);\n onProgress?.(1, data);\n return data;\n}\nconst guessFexiosResponseType = (contentType) => {\n if (!contentType) return void 0;\n if (contentType.includes(\"application/json\") || contentType.endsWith(\"+json\"))\n return \"json\";\n if (contentType.startsWith(\"text/\")) return \"text\";\n if (contentType.includes(\"multipart/form-data\") || contentType.includes(\"application/x-www-form-urlencoded\"))\n return \"form\";\n if (/^image\\//.test(contentType) || /^video\\//.test(contentType) || /^audio\\//.test(contentType) || contentType.includes(\"application/pdf\"))\n return \"blob\";\n if (contentType.includes(\"application/octet-stream\") || contentType.includes(\"application/zip\") || contentType.includes(\"application/x-tar\") || contentType.includes(\"application/x-7z-compressed\") || contentType.includes(\"application/x-gzip\"))\n return \"arrayBuffer\";\n return void 0;\n};\nasync function createFexiosResponse(rawResponse, expectedType, onProgress, shouldThrow, timeout) {\n const contentType = rawResponse.headers.get(\"content-type\")?.toLowerCase() ?? \"\";\n const lenHeader = rawResponse.headers.get(\"content-length\");\n const total = lenHeader ? Number(lenHeader) : 0;\n const upgrade = rawResponse.headers.get(\"upgrade\")?.toLowerCase();\n const connection = rawResponse.headers.get(\"connection\")?.toLowerCase();\n let resolvedType = expectedType ?? guessFexiosResponseType(contentType) ?? \"text\";\n if (!expectedType) {\n if (upgrade === \"websocket\" && connection === \"upgrade\") {\n resolvedType = \"ws\";\n } else if (contentType.includes(\"text/event-stream\")) {\n resolvedType = \"stream\";\n }\n }\n if (resolvedType === \"stream\") {\n const url = rawResponse.url || rawResponse.url || \"\";\n const response2 = await createFexiosEventSourceResponse(\n url,\n rawResponse,\n timeout\n );\n const decide = shouldThrow?.(response2);\n if (typeof decide === \"boolean\" ? decide : !response2.ok) {\n throw new FexiosResponseError(response2.statusText, response2);\n }\n return response2;\n }\n if (resolvedType === \"ws\") {\n const url = rawResponse.url || rawResponse.url || \"\";\n const response2 = await createFexiosWebSocketResponse(\n url,\n rawResponse,\n timeout\n );\n const decide = shouldThrow?.(response2);\n if (typeof decide === \"boolean\" ? decide : !response2.ok) {\n throw new FexiosResponseError(response2.statusText, response2);\n }\n return response2;\n }\n const charset = /\\bcharset=([^;]+)/i.exec(contentType)?.[1]?.trim() || \"utf-8\";\n const decoder = new TextDecoder(charset);\n let data;\n try {\n if (resolvedType === \"form\") {\n data = await rawResponse.formData();\n } else {\n const bytes = await readBody(rawResponse.body, total, onProgress);\n if (resolvedType === \"arrayBuffer\") {\n data = bytes.buffer.slice(\n bytes.byteOffset,\n bytes.byteOffset + bytes.byteLength\n );\n } else if (resolvedType === \"blob\") {\n data = new Blob([bytes], {\n type: contentType || \"application/octet-stream\"\n });\n } else if (resolvedType === \"text\") {\n const text = decoder.decode(bytes);\n if (!expectedType) {\n const trimmed = text.trim();\n if (trimmed.startsWith(\"{\") && trimmed.endsWith(\"}\") || trimmed.startsWith(\"[\") && trimmed.endsWith(\"]\")) {\n try {\n data = JSON.parse(trimmed);\n resolvedType = \"json\";\n } catch {\n data = text;\n }\n } else {\n data = text;\n }\n } else {\n data = text;\n }\n } else if (resolvedType === \"json\") {\n const text = decoder.decode(bytes);\n data = text.length ? JSON.parse(text) : null;\n } else {\n data = bytes;\n }\n }\n } catch (e) {\n if (!(e instanceof Error)) throw e;\n try {\n const t = await rawResponse.text();\n data = t;\n resolvedType = \"text\";\n } catch {\n throw new FexiosError(\n FexiosErrorCodes.BODY_TRANSFORM_ERROR,\n `Failed to transform response body to ${resolvedType}`,\n void 0,\n { cause: e }\n );\n }\n }\n const response = new FexiosResponse(\n rawResponse,\n data,\n resolvedType\n );\n const decision = shouldThrow?.(response);\n if (typeof decision === \"boolean\" ? decision : !response.ok) {\n throw new FexiosResponseError(response.statusText, response);\n }\n return response;\n}\nasync function createFexiosWebSocketResponse(url, response, timeout) {\n const ws = new WebSocket(url.toString());\n const delay = timeout ?? 6e4;\n await new Promise((resolve, reject) => {\n const timer = delay > 0 ? setTimeout(() => {\n ws.close();\n reject(\n new FexiosError(\n FexiosErrorCodes.TIMEOUT,\n `WebSocket connection timed out after ${delay}ms`\n )\n );\n }, delay) : void 0;\n let settled = false;\n const cleanup = () => {\n clearTimeout(timer);\n ws.removeEventListener(\"open\", onOpen);\n ws.removeEventListener(\"error\", onError);\n ws.removeEventListener(\"close\", onClose);\n };\n const onOpen = () => {\n if (!settled) {\n settled = true;\n cleanup();\n resolve();\n }\n };\n const onError = (event) => {\n if (!settled) {\n settled = true;\n cleanup();\n reject(\n new FexiosError(\n FexiosErrorCodes.NETWORK_ERROR,\n `WebSocket connection failed`,\n void 0,\n { cause: event }\n )\n );\n }\n };\n const onClose = (event) => {\n if (!settled) {\n settled = true;\n cleanup();\n reject(\n new FexiosError(\n FexiosErrorCodes.NETWORK_ERROR,\n `WebSocket connection closed unexpectedly (code: ${event.code}, reason: ${event.reason})`,\n void 0,\n { cause: event }\n )\n );\n }\n };\n ws.addEventListener(\"open\", onOpen);\n ws.addEventListener(\"error\", onError);\n ws.addEventListener(\"close\", onClose);\n });\n return new FexiosResponse(response || new Response(null), ws, \"ws\");\n}\nasync function createFexiosEventSourceResponse(url, response, timeout) {\n const es = new EventSource(url.toString());\n const delay = timeout ?? 6e4;\n await new Promise((resolve, reject) => {\n const timer = delay > 0 ? setTimeout(() => {\n es.close();\n reject(\n new FexiosError(\n FexiosErrorCodes.TIMEOUT,\n `EventSource connection timed out after ${delay}ms`\n )\n );\n }, delay) : void 0;\n let settled = false;\n const cleanup = () => {\n clearTimeout(timer);\n es.removeEventListener(\"open\", onOpen);\n es.removeEventListener(\"error\", onError);\n };\n const onOpen = () => {\n if (!settled) {\n settled = true;\n cleanup();\n resolve();\n }\n };\n const onError = (event) => {\n if (!settled) {\n settled = true;\n cleanup();\n reject(\n new FexiosError(\n FexiosErrorCodes.NETWORK_ERROR,\n `EventSource connection failed`,\n void 0,\n { cause: event }\n )\n );\n }\n };\n es.addEventListener(\"open\", onOpen);\n es.addEventListener(\"error\", onError);\n });\n return new FexiosResponse(\n response || new Response(null),\n es,\n \"stream\"\n );\n}\n\nexport { FexiosError, FexiosErrorCodes, FexiosHeaderBuilder, FexiosQueryBuilder, FexiosResponse, FexiosResponseError, createFexiosEventSourceResponse, createFexiosResponse, createFexiosWebSocketResponse, isFexiosError };\n//# sourceMappingURL=index.mjs.map\n","import { CallableInstance, deepMerge } from './utils/index.mjs';\nimport { FexiosError, FexiosErrorCodes, FexiosHeaderBuilder, FexiosQueryBuilder, createFexiosWebSocketResponse, createFexiosResponse } from './models/index.mjs';\nimport { i as isPlainObject } from './shared/fexios.DtQgiOCE.mjs';\n\nclass Fexios extends CallableInstance {\n static version = \"5.2.0\";\n static FINAL_SYMBOL = Symbol(\"FEXIOS_FINAL_CONTEXT\");\n baseConfigs;\n // for axios compatibility\n get defaults() {\n return this.baseConfigs;\n }\n set defaults(configs) {\n this.baseConfigs = configs;\n }\n static DEFAULT_CONFIGS = {\n baseURL: \"\",\n timeout: 0,\n credentials: void 0,\n headers: {},\n query: {},\n responseType: void 0,\n shouldThrow(response) {\n return !response.ok;\n },\n fetch: globalThis.fetch\n };\n hooks = [];\n static ALL_METHODS = [\n \"get\",\n \"post\",\n \"put\",\n \"patch\",\n \"delete\",\n \"head\",\n \"options\",\n \"trace\"\n ];\n static METHODS_WITHOUT_BODY = [\n \"get\",\n \"head\",\n \"options\",\n \"trace\"\n ];\n constructor(baseConfigs = {}) {\n super(\"request\");\n this.baseConfigs = deepMerge(Fexios.DEFAULT_CONFIGS, baseConfigs);\n Fexios.ALL_METHODS.forEach(\n (m) => this.createMethodShortcut(m.toLowerCase())\n );\n }\n async request(urlOrOptions, options) {\n let ctx = options || {};\n if (typeof urlOrOptions === \"string\" || urlOrOptions instanceof URL) {\n ctx.url = urlOrOptions.toString();\n } else if (typeof urlOrOptions === \"object\") {\n ctx = urlOrOptions;\n }\n ctx = await this.emit(\"beforeInit\", ctx);\n if (ctx[Fexios.FINAL_SYMBOL]) return ctx;\n ctx = this.applyDefaults(ctx);\n if (Fexios.METHODS_WITHOUT_BODY.includes(\n ctx.method?.toLocaleLowerCase()\n ) && ctx.body) {\n throw new FexiosError(\n FexiosErrorCodes.BODY_NOT_ALLOWED,\n `Request method \"${ctx.method}\" does not allow body`\n );\n }\n ctx = await this.emit(\"beforeRequest\", ctx);\n if (ctx[Fexios.FINAL_SYMBOL]) return ctx;\n let body;\n const headerAutoPatch = {};\n if (typeof ctx.body !== \"undefined\" && ctx.body !== null) {\n if (ctx.body instanceof Blob || ctx.body instanceof FormData || ctx.body instanceof URLSearchParams) {\n body = ctx.body;\n } else if (typeof ctx.body === \"object\" && ctx.body !== null) {\n body = JSON.stringify(ctx.body);\n ctx.headers = this.mergeHeaders(ctx.headers, {\n \"Content-Type\": \"application/json\"\n });\n } else {\n body = ctx.body;\n }\n }\n const optionsHeaders = FexiosHeaderBuilder.makeHeaders(ctx.headers || {});\n if (!optionsHeaders.get(\"content-type\") && body) {\n if (body instanceof FormData || body instanceof URLSearchParams) {\n headerAutoPatch[\"content-type\"] = null;\n } else if (typeof body === \"string\" && typeof ctx.body === \"object\") {\n headerAutoPatch[\"content-type\"] = \"application/json\";\n } else if (body instanceof Blob) {\n headerAutoPatch[\"content-type\"] = body.type || \"application/octet-stream\";\n }\n }\n ctx.body = body;\n ctx = await this.emit(\"afterBodyTransformed\", ctx);\n if (ctx[Fexios.FINAL_SYMBOL]) return ctx;\n const abortController = ctx.abortController ?? (globalThis.AbortController ? new AbortController() : void 0);\n const fallback = globalThis.location?.href || \"http://localhost\";\n const baseForRequest = new URL(\n ctx.baseURL || this.baseConfigs.baseURL || fallback,\n fallback\n );\n const urlObjForRequest = new URL(ctx.url, baseForRequest);\n const finalURLForRequest = FexiosQueryBuilder.makeURL(\n urlObjForRequest,\n ctx.query,\n urlObjForRequest.hash\n // 保留 hash\n ).toString();\n const rawRequest = new Request(finalURLForRequest, {\n method: ctx.method || \"GET\",\n credentials: ctx.credentials,\n cache: ctx.cache,\n mode: ctx.mode,\n headers: FexiosHeaderBuilder.mergeHeaders(\n this.baseConfigs.headers,\n ctx.headers || {},\n headerAutoPatch\n ),\n body: ctx.body,\n signal: abortController?.signal\n });\n ctx.rawRequest = rawRequest;\n ctx = await this.emit(\"beforeActualFetch\", ctx);\n if (ctx[Fexios.FINAL_SYMBOL]) return ctx;\n const timeout = ctx.timeout ?? this.baseConfigs.timeout ?? 60 * 1e3;\n const shouldThrow = ctx.shouldThrow ?? this.baseConfigs.shouldThrow;\n if (ctx.url.startsWith(\"ws\") || ctx.responseType === \"ws\") {\n const response = await createFexiosWebSocketResponse(\n ctx.url,\n void 0,\n timeout\n );\n const finalCtx = {\n ...ctx,\n response,\n rawResponse: void 0,\n data: response.data,\n headers: response.headers\n };\n return this.emit(\"afterResponse\", finalCtx);\n }\n let timer;\n try {\n if (abortController) {\n timer = timeout > 0 ? setTimeout(() => {\n abortController.abort();\n }, timeout) : void 0;\n }\n const fetch = ctx.fetch || this.baseConfigs.fetch || globalThis.fetch;\n const rawResponse = await fetch(ctx.rawRequest).catch((err) => {\n if (timer) clearTimeout(timer);\n if (abortController?.signal.aborted) {\n throw new FexiosError(\n FexiosErrorCodes.TIMEOUT,\n `Request timed out after ${timeout}ms`,\n ctx\n );\n }\n throw new FexiosError(FexiosErrorCodes.NETWORK_ERROR, err.message, ctx);\n });\n if (timer) clearTimeout(timer);\n ctx.rawResponse = rawResponse;\n ctx.response = await createFexiosResponse(\n rawResponse,\n ctx.responseType,\n (progress, buffer) => {\n options?.onProgress?.(progress, buffer);\n },\n shouldThrow,\n timeout\n );\n Object.defineProperties(ctx, {\n url: { get: () => rawResponse?.url || finalURLForRequest },\n data: { get: () => ctx.response.data },\n headers: { get: () => rawResponse.headers },\n responseType: { get: () => ctx.response.responseType }\n });\n return this.emit(\"afterResponse\", ctx);\n } catch (error) {\n if (timer) clearTimeout(timer);\n throw error;\n }\n }\n mergeQueries = FexiosQueryBuilder.mergeQueries;\n mergeHeaders = FexiosHeaderBuilder.mergeHeaders;\n applyDefaults(ctx) {\n const c = ctx;\n if (\"customEnv\" in this.baseConfigs) {\n c.customEnv = deepMerge(\n {},\n // ensure we don't mutate baseConfigs\n this.baseConfigs.customEnv,\n c.customEnv\n );\n }\n const fallback = globalThis.location?.href || \"http://localhost\";\n const effectiveBase = c.baseURL || this.baseConfigs.baseURL || fallback;\n const baseObj = new URL(effectiveBase, fallback);\n const reqURL = new URL(c.url.toString(), baseObj);\n const baseSearchParams = FexiosQueryBuilder.toQueryRecord(baseObj.searchParams);\n const reqSearchParams = FexiosQueryBuilder.toQueryRecord(reqURL.searchParams);\n const mergedSearchParams = FexiosQueryBuilder.mergeQueries(\n baseSearchParams,\n reqSearchParams\n );\n reqURL.search = FexiosQueryBuilder.makeSearchParams(mergedSearchParams).toString();\n c.url = reqURL.toString();\n const mergedQuery = FexiosQueryBuilder.mergeQueries(\n this.baseConfigs.query,\n c.query\n );\n if (c.query) {\n this.restoreNulls(mergedQuery, c.query);\n }\n c.query = mergedQuery;\n return c;\n }\n restoreNulls(target, source) {\n if (!source || typeof source !== \"object\") return;\n for (const [k, v] of Object.entries(source)) {\n if (v === null) {\n target[k] = null;\n } else if (isPlainObject(v)) {\n if (!target[k] || typeof target[k] !== \"object\") {\n target[k] = {};\n }\n this.restoreNulls(target[k], v);\n }\n }\n }\n async emit(event, ctx, opts = {\n shouldHandleShortCircuitResponse: true\n }) {\n const hooks = this.hooks.filter((h) => h.event === event);\n if (hooks.length === 0) return ctx;\n const shortCircuit = async (baseCtx, raw) => {\n const finalCtx = { ...baseCtx, rawResponse: raw };\n const response = await createFexiosResponse(\n raw,\n baseCtx.responseType,\n (progress, buffer) => baseCtx.onProgress?.(progress, buffer),\n baseCtx.shouldThrow ?? this.baseConfigs.shouldThrow,\n baseCtx.timeout ?? this.baseConfigs.timeout ?? 60 * 1e3\n );\n finalCtx.response = response;\n finalCtx.data = response.data;\n finalCtx.headers = response.headers;\n if (event !== \"afterResponse\") {\n const after = await this.emit(\"afterResponse\", finalCtx);\n after[Fexios.FINAL_SYMBOL] = true;\n return after;\n } else {\n finalCtx[Fexios.FINAL_SYMBOL] = true;\n return finalCtx;\n }\n };\n for (let i = 0; i < hooks.length; i++) {\n const hook = hooks[i];\n const hookName = `${String(event)}#${hook.action.name || `anonymous#${i}`}`;\n const marker = Symbol(\"FEXIOS_HOOK_CTX_MARK\");\n try {\n ;\n ctx[marker] = marker;\n } catch {\n }\n const result = await hook.action.call(this, ctx);\n try {\n delete ctx[marker];\n } catch {\n }\n if (result === false) {\n throw new FexiosError(\n FexiosErrorCodes.ABORTED_BY_HOOK,\n `Request aborted by hook \"${hookName}\"`,\n ctx\n );\n }\n if (result instanceof Response) {\n if (opts.shouldHandleShortCircuitResponse !== false) {\n return shortCircuit(ctx, result);\n }\n ctx.rawResponse = result;\n } else if (result && typeof result === \"object\" && result[marker] === marker) {\n ctx = result;\n } else ;\n }\n return ctx;\n }\n on(event, action, prepend = false) {\n if (typeof action !== \"function\") {\n throw new FexiosError(\n FexiosErrorCodes.INVALID_HOOK_CALLBACK,\n `Hook should be a function, but got \"${typeof action}\"`\n );\n }\n this.hooks[prepend ? \"unshift\" : \"push\"]({\n event,\n action\n });\n return this;\n }\n off(event, action) {\n if (event === \"*\" || !event) {\n this.hooks = this.hooks.filter((hook) => hook.action !== action);\n } else {\n this.hooks = this.hooks.filter(\n (hook) => hook.event !== event || hook.action !== action\n );\n }\n return this;\n }\n createInterceptor(event) {\n return {\n handlers: () => this.hooks.filter((hook) => hook.event === event).map((hook) => hook.action),\n use: (hook, prepend = false) => {\n return this.on(event, hook, prepend);\n },\n clear: () => {\n this.hooks = this.hooks.filter((hook) => hook.event !== event);\n }\n };\n }\n interceptors = {\n request: this.createInterceptor(\"beforeRequest\"),\n response: this.createInterceptor(\"afterResponse\")\n };\n createMethodShortcut(method) {\n Reflect.defineProperty(this, method, {\n get: () => {\n return (url, bodyOrQuery, options) => {\n if (Fexios.METHODS_WITHOUT_BODY.includes(\n method.toLocaleLowerCase()\n )) {\n options = bodyOrQuery;\n } else {\n options = options || {};\n options.body = bodyOrQuery;\n }\n return this.request(url, {\n ...options,\n method\n });\n };\n }\n });\n return this;\n }\n extends(configs) {\n const fexios = new Fexios(deepMerge(this.baseConfigs, configs));\n fexios.hooks = [...this.hooks];\n fexios._plugins = new Map(this._plugins);\n fexios._plugins.forEach(async (plugin) => {\n await fexios.plugin(plugin);\n });\n return fexios;\n }\n create = Fexios.create;\n static create(configs) {\n return new Fexios(configs);\n }\n _plugins = /* @__PURE__ */ new Map();\n async plugin(plugin) {\n if (typeof plugin?.name === \"string\" && typeof plugin?.install === \"function\") {\n if (this._plugins.has(plugin.name)) {\n return this;\n }\n const fx = await plugin.install(this);\n this._plugins.set(plugin.name, plugin);\n if (fx instanceof Fexios) {\n return fx;\n }\n }\n return this;\n }\n // 版本弃子们.jpg\n /** @deprecated Use `import { checkIsPlainObject } from 'fexios/utils'` instead */\n checkIsPlainObject = isPlainObject;\n /** @deprecated Use `mergeQueries` instead */\n mergeQuery = this.mergeQueries;\n}\n\nexport { Fexios };\n//# sourceMappingURL=fexios.mjs.map\n","import { Fexios } from './fexios.mjs';\nexport { FexiosError, FexiosErrorCodes, FexiosHeaderBuilder, FexiosQueryBuilder, FexiosResponse, FexiosResponseError, createFexiosEventSourceResponse, createFexiosResponse, createFexiosWebSocketResponse, isFexiosError } from './models/index.mjs';\nexport { CallableInstance, deepMerge } from './utils/index.mjs';\nexport { i as checkIsPlainObject, c as clone, i as isPlainObject } from './shared/fexios.DtQgiOCE.mjs';\n\n/**\n * Fexios\n * @desc Fetch based HTTP client with similar API to axios for browser and Node.js\n *\n * @license MIT\n * @author dragon-fish <dragon-fish@qq.com>\n */\nconst createFexios = Fexios.create;\nconst fexios = createFexios();\n\nexport { Fexios, createFexios, fexios as default, fexios };\n//# sourceMappingURL=index.mjs.map\n","import { isPlainObject, Fexios, FexiosQueryBuilder, deepMerge } from 'fexios';\n\nvar MwParamNormalizer;\n((MwParamNormalizer2) => {\n function normalizeParamValue(item) {\n if (Array.isArray(item)) {\n return item.join(\"|\");\n } else if (typeof item === \"boolean\" || item === null) {\n return item ? \"1\" : void 0;\n } else if (typeof item === \"number\") {\n return \"\" + item;\n } else {\n return item;\n }\n }\n MwParamNormalizer2.normalizeParamValue = normalizeParamValue;\n function normalizeBody(body) {\n const isFormLike = (body2) => body2 && (body2 instanceof URLSearchParams || body2 instanceof FormData);\n if (body === void 0 || body === null) {\n return void 0;\n }\n const formData = new FormData();\n if (isFormLike(body)) {\n body.forEach((value, key) => {\n const data = normalizeParamValue(value);\n if (data !== null && data !== void 0) {\n formData.append(key, data);\n }\n });\n return formData;\n }\n if (isPlainObject(body)) {\n Object.entries(body).forEach(([key, value]) => {\n const data = normalizeParamValue(value);\n if (data !== null && data !== void 0) {\n formData.append(key, data);\n }\n });\n return formData;\n }\n return void 0;\n }\n MwParamNormalizer2.normalizeBody = normalizeBody;\n})(MwParamNormalizer || (MwParamNormalizer = {}));\n\nvar WikiSaikouErrorCode = /* @__PURE__ */ ((WikiSaikouErrorCode2) => {\n WikiSaikouErrorCode2[\"HTTP_ERROR\"] = \"HTTP_ERROR\";\n WikiSaikouErrorCode2[\"LOGIN_FAILED\"] = \"LOGIN_FAILED\";\n WikiSaikouErrorCode2[\"LOGIN_RETRY_LIMIT_EXCEEDED\"] = \"LOGIN_RETRY_LIMIT_EXCEEDED\";\n WikiSaikouErrorCode2[\"TOKEN_RETRY_LIMIT_EXCEEDED\"] = \"TOKEN_RETRY_LIMIT_EXCEEDED\";\n return WikiSaikouErrorCode2;\n})(WikiSaikouErrorCode || {});\nclass WikiSaikouError extends Error {\n constructor(code, message = \"\", cause) {\n super();\n this.code = code;\n this.message = message;\n this.cause = cause;\n }\n name = \"WikiSaikouError\";\n static is(data, code) {\n return data instanceof this && (code === void 0 || data.code === code);\n }\n}\nclass MediaWikiApiError extends Error {\n constructor(errors, cause) {\n super();\n this.errors = errors;\n this.cause = cause;\n this.errors = MediaWikiApiError.normalizeErrors(errors);\n this.message = errors.map((error) => error.text).filter(Boolean).join(\"\\n\");\n this.code = this.isBadTokenError() ? \"badtoken\" : this.errors[0]?.code || \"Unknown Error\";\n }\n name = \"MediaWikiApiError\";\n code;\n get firstError() {\n return this.errors[0];\n }\n isBadTokenError() {\n return this.errors.some((error) => error.code === \"badtoken\") || [\"NeedToken\", \"WrongToken\"].includes(this.cause?.data?.login?.result);\n }\n toString() {\n return `[${this.name} ${this.code}]`;\n }\n static is(data) {\n return data instanceof this;\n }\n static normalizeErrors(errors) {\n if (Array.isArray(errors) === false) {\n return [];\n }\n return errors.filter((e) => typeof e === \"object\" && !!e?.code).map((error) => {\n if (!error.text) {\n if (error.info) {\n return { ...error, text: error.info };\n } else if (error[\"*\"]) {\n return { ...error, text: error[\"*\"] };\n } else {\n return { ...error, text: \"\" };\n }\n }\n return error;\n });\n }\n}\n((WikiSaikouError2) => {\n function extractResponseDataFromAny(data) {\n if (data == null) return void 0;\n if (data?.response?.data !== void 0) return data.response.data;\n if (data?.data !== void 0) return data.data;\n const cause = data instanceof Error ? data.cause : void 0;\n if (cause?.response?.data !== void 0) return cause.response.data;\n if (cause?.data !== void 0) return cause.data;\n return data || void 0;\n }\n function includesMediaWikiApiError(data) {\n return extractMediaWikiApiErrors(data).length > 0;\n }\n WikiSaikouError2.includesMediaWikiApiError = includesMediaWikiApiError;\n WikiSaikouError2.normalizeMwApiErrors = MediaWikiApiError.normalizeErrors;\n function extractMediaWikiApiErrors(data) {\n let r = extractResponseDataFromAny(data);\n if (typeof r !== \"object\" || r === null) {\n return [];\n }\n const error = r?.error;\n const errors = r?.errors;\n const result = [];\n if (error) {\n result.push(error);\n }\n if (Array.isArray(errors)) {\n result.push(...errors);\n }\n return (0, WikiSaikouError2.normalizeMwApiErrors)(result);\n }\n WikiSaikouError2.extractMediaWikiApiErrors = extractMediaWikiApiErrors;\n function isBadTokenError(data) {\n if (MediaWikiApiError.is(data)) {\n return data.isBadTokenError();\n } else {\n const errors = extractMediaWikiApiErrors(data);\n return new MediaWikiApiError(errors).isBadTokenError();\n }\n }\n WikiSaikouError2.isBadTokenError = isBadTokenError;\n})(WikiSaikouError || (WikiSaikouError = {}));\n\nconst FEXIOS_SAIKOU_MARKER = Symbol.for(\"__FEXIOS_SAIKOU__\");\n/**\n * FexiosSaikou\n *\n * A pre-configured Fexios instance with MediaWiki-friendly defaults:\n * - MediaWiki-specific request/response params normalization\n * - built-in token management\n * - error handling\n *\n * @author dragon-fish <dragon-fish@qq.com>\n * @license MIT\n *\n * @param {string|URL} payload create a new FexiosSaikou instance with the given baseURL\n * @param {Fexios} payload or make the given Fexios instance a FexiosSaikou instance\n */\nfunction createFexiosSaikou(payload) {\n const instance = payload instanceof Fexios ? payload : new Fexios({\n baseURL: payload instanceof URL ? payload.toString() : String(payload),\n responseType: \"json\"\n });\n if (instance[FEXIOS_SAIKOU_MARKER]) {\n return instance;\n } else {\n Reflect.defineProperty(instance, FEXIOS_SAIKOU_MARKER, {\n get: () => true,\n enumerable: false,\n configurable: false\n });\n }\n instance.on(\"beforeInit\", (ctx) => {\n if (ctx.method?.toLowerCase() !== \"post\") {\n return ctx;\n }\n if (ctx.body === void 0 || ctx.body === null) {\n ctx.body = void 0;\n return ctx;\n }\n const body = ctx.body = MwParamNormalizer.normalizeBody(ctx.body);\n const query = new URLSearchParams(ctx.query);\n if (body.has(\"format\")) {\n query.delete(\"format\");\n }\n if (body.has(\"formatversion\")) {\n query.delete(\"formatversion\");\n }\n if (body.has(\"action\")) {\n query.delete(\"action\");\n }\n if (body.has(\"origin\")) {\n query.set(\"origin\", \"\" + body.get(\"origin\"));\n body.delete(\"origin\");\n }\n ctx.query = Object.fromEntries(query.entries());\n return ctx;\n });\n instance.on(\"beforeInit\", (ctx) => {\n ctx.query = FexiosQueryBuilder.mergeQueries(\n {},\n MwParamNormalizer.normalizeBody(ctx.query)\n );\n return ctx;\n });\n instance.on(\"beforeRequest\", (ctx) => {\n const url = new URL(ctx.url);\n const query = FexiosQueryBuilder.mergeQueries(url.searchParams, ctx.query);\n if (globalThis.location) {\n if (!query.origin && location.origin !== url.origin) {\n query.origin = location.origin;\n instance.baseConfigs.credentials = \"include\";\n instance.baseConfigs.mode = \"cors\";\n } else if (location.origin === url.origin) {\n delete query.origin;\n instance.baseConfigs.credentials = void 0;\n instance.baseConfigs.mode = void 0;\n }\n }\n if (query.origin) {\n const origin = encodeURIComponent(query.origin).replace(/\\./g, \"%2E\");\n delete query.origin;\n ctx.query = query;\n ctx.url = `${url.origin}${url.pathname}?origin=${origin}`;\n } else {\n ctx.query = query;\n }\n return ctx;\n });\n instance._tokens = /* @__PURE__ */ new Map();\n instance.on(\"afterResponse\", (ctx) => {\n const { data } = ctx;\n const tokenName = ctx.customEnv?.mwTokenName;\n if (tokenName && WikiSaikouError.isBadTokenError(data)) {\n instance._tokens.delete(tokenName);\n }\n const tokens = data?.query?.tokens;\n if (tokens && typeof tokens === \"object\") {\n Object.entries(tokens).forEach(([type, token]) => {\n typeof token === \"string\" && instance._tokens.set(type.replace(/token$/i, \"\").toLowerCase(), token);\n });\n }\n const loginToken = data?.login?.token;\n if (typeof loginToken === \"string\") {\n instance._tokens.set(\"login\", loginToken);\n }\n return ctx;\n });\n return instance;\n}\n\nconst resolveLegacyCtor = (configOrBaseURL, defaultOptions, defaultParams) => {\n let config = { ...WikiSaikouCore.DEFAULT_CONFIGS };\n if (typeof configOrBaseURL === \"string\") {\n config = deepMerge(config, {\n baseURL: configOrBaseURL,\n fexiosConfigs: defaultOptions || {},\n defaultParams: defaultParams || {},\n throwOnApiError: false\n // Set a default value for throwOnApiError\n });\n } else if (typeof configOrBaseURL === \"object\" && configOrBaseURL !== null) {\n config = deepMerge(config, configOrBaseURL);\n }\n if (!config.baseURL && typeof window === \"object\" && window.mediaWiki) {\n const { wgServer, wgScriptPath } = window.mediaWiki?.config?.get([\"wgServer\", \"wgScriptPath\"]) || {};\n if (typeof wgServer === \"string\" && typeof wgScriptPath === \"string\") {\n config.baseURL = `${wgServer}${wgScriptPath}/api.php`;\n }\n }\n if (typeof config.baseURL !== \"string\") {\n throw new Error(\"baseURL is required\");\n }\n return config;\n};\n\nconst noop = () => {\n};\nconst useRetry = async (fn, options) => {\n let retryCount = 0;\n const { retry = 3, onRetry = noop, shouldRetry = () => true } = options;\n let lastError;\n do {\n try {\n return await fn();\n } catch (error) {\n lastError = error;\n if (shouldRetry(error, retryCount)) {\n onRetry(error, retryCount);\n retryCount++;\n } else {\n throw error;\n }\n }\n } while (retryCount < retry);\n throw lastError || new Error(\"Retry failed\");\n};\n\n/**\n * WikiSaikou Core class\n * @internal You **SHOULD NOT** use this class directly, instead, use the `MediaWikiApi` class.\n * @author dragon-fish <dragon-fish@qq.com>\n * @license MIT\n */\nclass WikiSaikouCore {\n config;\n version = \"7.4.1\";\n request;\n static INIT_DEFAULT_PARAMS = {\n action: \"query\",\n errorformat: \"plaintext\",\n format: \"json\",\n formatversion: 2\n };\n static DEFAULT_CONFIGS = {\n baseURL: void 0,\n fexiosConfigs: {\n responseType: \"json\"\n },\n defaultParams: this.INIT_DEFAULT_PARAMS,\n throwOnApiError: false\n };\n constructor(configOrBaseURL, defaultOptions, defaultParams) {\n const config = this.config = resolveLegacyCtor(\n configOrBaseURL,\n defaultOptions,\n defaultParams\n );\n this.request = createFexiosSaikou(config.baseURL);\n }\n setBaseURL(baseURL) {\n this.config.baseURL = baseURL;\n this.request.baseConfigs.baseURL = baseURL;\n return this;\n }\n /** Base methods encapsulation */\n async get(query, options) {\n const payload = deepMerge(\n {},\n this.config.fexiosConfigs,\n {\n query: FexiosQueryBuilder.mergeQueries(\n this.config.defaultParams,\n query\n )\n },\n options\n );\n return this.runRequestWithApiErrorMapping(\n () => this.request.get(\"\", payload)\n );\n }\n async post(data, options) {\n return this.runRequestWithApiErrorMapping(\n () => this.request.post(\n \"\",\n data,\n deepMerge(\n {},\n this.config.fexiosConfigs,\n {\n query: this.config.defaultParams\n },\n options\n )\n )\n );\n }\n /**\n * Wrap a request to map non-2xx responses containing MediaWiki API error bodies\n * into MediaWikiApiError when throwOnApiError=true, and then pass 2xx responses\n * through handleApiResponse for unified processing.\n */\n async runRequestWithApiErrorMapping(doRequest) {\n try {\n const res = await doRequest();\n return this.handleApiResponse(res);\n } catch (err) {\n if (this.config.throwOnApiError && WikiSaikouError.includesMediaWikiApiError(err)) {\n throw new MediaWikiApiError(\n WikiSaikouError.extractMediaWikiApiErrors(err),\n err\n );\n }\n throw err;\n }\n }\n throwIfApiError(data) {\n const errors = WikiSaikouError.extractMediaWikiApiErrors(data);\n if (errors.length > 0) {\n throw new MediaWikiApiError(errors, data);\n }\n }\n handleApiResponse(res) {\n if (this.config.throwOnApiError) {\n this.throwIfApiError(res.data);\n }\n return res;\n }\n /** Token Handler */\n get tokens() {\n return this.request._tokens;\n }\n async fetchTokens(types = [\"csrf\"]) {\n this.config.fexiosConfigs.credentials = \"include\";\n await this.get({\n action: \"query\",\n meta: \"tokens\",\n type: types\n });\n return this.tokens;\n }\n async getToken(type = \"csrf\", noCache = false) {\n if (!this.tokens.get(type) || noCache) {\n this.tokens.delete(type);\n await this.fetchTokens([type]);\n }\n return this.tokens.get(type);\n }\n badToken(type) {\n this.tokens.delete(type);\n return this.tokens;\n }\n async postWithToken(tokenType, body, options) {\n const {\n tokenName = \"token\",\n retry = 3,\n noCache = false,\n fexiosOptions\n } = options || {};\n if (retry < 1) {\n throw new WikiSaikouError(\n WikiSaikouErrorCode.TOKEN_RETRY_LIMIT_EXCEEDED,\n \"The limit of the number of times to automatically re-acquire the token has been exceeded\"\n );\n }\n let attemptIndex = 0;\n return useRetry(\n async () => {\n const token = await this.getToken(\n tokenType,\n noCache || attemptIndex > 0\n );\n try {\n const ctx = await this.post(\n {\n [tokenName]: token,\n ...body\n },\n deepMerge(fexiosOptions || {}, {\n customEnv: {\n mwTokenName: tokenType\n }\n })\n );\n if (WikiSaikouError.isBadTokenError(ctx.data)) {\n throw ctx;\n }\n return ctx;\n } catch (err) {\n if (WikiSaikouError.isBadTokenError(err) || err?.ok === false) {\n throw err;\n } else if (MediaWikiApiError.is(err)) {\n throw err;\n } else {\n throw new WikiSaikouError(\n WikiSaikouErrorCode.HTTP_ERROR,\n \"Network/transport or SDK-internal error (not a MediaWiki API error)\",\n err\n );\n }\n }\n },\n {\n retry,\n onRetry: (_error, count) => {\n attemptIndex = count + 1;\n },\n shouldRetry: (error) => WikiSaikouError.isBadTokenError(error) || error?.ok === false\n }\n ).catch((err) => {\n if (WikiSaikouError.isBadTokenError(err) || err?.ok === false) {\n throw new WikiSaikouError(\n WikiSaikouErrorCode.TOKEN_RETRY_LIMIT_EXCEEDED,\n \"Retry attempts for acquiring/using token exhausted\",\n err\n );\n }\n throw err;\n });\n }\n postWithEditToken(body) {\n return this.postWithToken(\"csrf\", body);\n }\n // for backward compatibility\n /** @deprecated Use `this.config.baseURL` instead */\n get baseURL() {\n return this.config.baseURL;\n }\n /** @deprecated Use `this.config.defaultParams` instead */\n get defaultParams() {\n return this.config.defaultParams;\n }\n /** @deprecated Use `this.config.fexiosConfigs` instead */\n get defaultOptions() {\n return this.config.fexiosConfigs;\n }\n /** @deprecated Use `createFexiosSaikou` instead */\n static createRequestHandler = createFexiosSaikou;\n /** @deprecated Use `this.getToken` instead */\n token = this.getToken;\n}\n\nexport { MediaWikiApiError as M, WikiSaikouCore as W, WikiSaikouError as a, WikiSaikouErrorCode as b, createFexiosSaikou as c, MwParamNormalizer as d, resolveLegacyCtor as r };\n//# sourceMappingURL=wiki-saikou.CdApFkBG.mjs.map\n","export class MemoryStorage implements Storage {\n private values: Record<string, string> = {}\n get length(): number {\n return Object.keys(this.values).length\n }\n clear(): void {\n this.values = {}\n }\n getItem(key: string): string | null {\n return this.values[key] ?? null\n }\n setItem(key: string, value: string): void {\n this.values[key] = typeof value === 'string' ? value : String(value)\n }\n removeItem(key: string): void {\n delete this.values[key]\n }\n key(index: number): string | null {\n const keys = Object.keys(this.values)\n return keys[index] ?? null\n }\n}\nexport const useMemoryStorage = () => {\n // handle storage.foo = 'bar' case\n return new Proxy(new MemoryStorage(), {\n set(target, prop, value) {\n if (typeof prop === 'string') {\n target.setItem(prop, value)\n }\n return true\n },\n get(target, prop) {\n if (typeof prop === 'string' && !(prop in target)) {\n return target.getItem(prop)\n }\n return Reflect.get(target, prop)\n },\n })\n}\n","import type { PageInfo } from './types/PageInfo'\nimport { PageParseData } from './types/PageParseData'\nimport {\n MediaWikiApi,\n MwApiParams,\n MwApiResponse,\n FexiosFinalContext,\n MediaWikiApiError,\n} from 'wiki-saikou/browser'\nimport { WikiPageActionEditRequest, WikiPageActionEditResult } from './types/WikiPageActionEdit.js'\n\nexport interface IWikiPage {\n pageInfo: PageInfo\n parse(params?: MwApiParams): Promise<FexiosFinalContext<MwApiResponse<{ parse: PageParseData }>>>\n preview(\n text: string,\n params?: MwApiParams\n ): Promise<FexiosFinalContext<MwApiResponse<{ parse: PageParseData }>>>\n edit(\n payload: WikiPageActionEditRequest & MwApiParams,\n /** @deprecated Append params in `payload` instead */\n params?: MwApiParams\n ): Promise<FexiosFinalContext<MwApiResponse<{ edit: WikiPageActionEditResult }>>>\n createOnly(\n payload: Pick<WikiPageActionEditRequest, 'summary' | 'watchlist'> & {\n text: string\n recreate?: boolean\n },\n params?: MwApiParams\n ): Promise<FexiosFinalContext<MwApiResponse<{ edit: WikiPageActionEditResult }>>>\n delete(\n reason?: string,\n params?: MwApiParams\n ): Promise<\n FexiosFinalContext<\n MwApiResponse<{\n delete: {\n title: string\n reason: string\n logid: boolean\n }\n }>\n >\n >\n moveTo(\n title: string,\n reason?: string,\n params?: Partial<\n MwApiParams & {\n movetalk: boolean\n movesubpages: boolean\n }\n >\n ): Promise<FexiosFinalContext<MwApiResponse<{ success: boolean }>>>\n userCan(action: keyof PageInfo['actions']): boolean\n userCanEdit(): boolean\n reloadSelfInfo(): Promise<this>\n // sugar getters (instance level)\n readonly pageid: PageInfo['pageid']\n readonly title: PageInfo['title']\n readonly ns: PageInfo['ns']\n readonly contentmodel: PageInfo['contentmodel']\n readonly fullurl: PageInfo['fullurl']\n readonly canonicalurl: PageInfo['canonicalurl']\n readonly editurl: PageInfo['editurl']\n readonly revisions: NonNullable<PageInfo['revisions']>\n readonly lastrevid: PageInfo['lastrevid']\n readonly templates: NonNullable<PageInfo['templates']>\n readonly images: NonNullable<PageInfo['images']>\n}\n\nexport interface WikiPageConstructor {\n // Constructor\n new (pageInfo: Partial<PageInfo>, loaded?: boolean): IWikiPage\n // Static members\n newFromApi(payload: MwApiParams): Promise<IWikiPage>\n newBlankPage(init?: Partial<PageInfo>): IWikiPage\n /**\n * Create a new WikiPage instance from any kind of identifier\n * priority: revid > pageid > title\n */\n newFromAnyKind(payload: {\n title?: string\n pageid?: number\n revid?: number\n }): Promise<IWikiPage | null>\n newBatchFromApi(\n params: MwApiParams & {\n titles?: string[]\n pageids?: number[]\n revids?: number[]\n }\n ): Promise<IWikiPage[]>\n}\n\nexport function createWikiPageModel(api: MediaWikiApi): WikiPageConstructor {\n class WikiPage implements IWikiPage {\n private static readonly api = api\n readonly api = api\n public pageInfo: PageInfo\n static readonly DEFAULT_QUERY_PARAMS: MwApiParams = {\n action: 'query',\n prop: 'info|templates|transcludedin|images|pageimages|revisions',\n inprop: 'protection|url|varianttitles',\n intestactions: 'edit|move|delete',\n tllimit: 'max',\n tilimit: 'max',\n imlimit: 'max',\n piprop: 'thumbnail|name|original',\n pithumbsize: '200',\n pilimit: 'max',\n rvprop: 'ids|timestamp|flags|comment|user|content',\n rvslots: 'main',\n }\n static readonly DEFAULT_PAGE_INFO: PageInfo = {\n pageid: 0,\n ns: 0,\n title: '',\n contentmodel: 'wikitext',\n pagelanguage: '',\n pagelanguagehtmlcode: '',\n pagelanguagedir: 'ltr',\n touched: new Date().toISOString(),\n lastrevid: 0,\n length: 0,\n protection: [],\n restrictiontypes: [],\n fullurl: '',\n canonicalurl: '',\n editurl: '',\n varianttitles: {},\n actions: {\n edit: true,\n move: false,\n delete: false,\n },\n revisions: [],\n templates: [],\n images: [],\n }\n\n constructor(\n pageInfo: Partial<PageInfo>,\n public _loaded = true\n ) {\n // Handle modern MW content model slots\n pageInfo.revisions?.forEach((rev) => {\n // @ts-ignore\n if (typeof rev?.slots?.main === 'object') {\n Object.assign(rev, (rev as any).slots.main)\n }\n })\n this.pageInfo = {\n ...WikiPage.DEFAULT_PAGE_INFO,\n ...pageInfo,\n }\n }\n\n // Utils\n static async newFromApi(payload: MwApiParams) {\n const { data } = await this.api.get<{\n query: {\n pages: PageInfo[]\n }\n }>({\n ...WikiPage.DEFAULT_QUERY_PARAMS,\n ...payload,\n })\n const info = data?.query?.pages?.[0]\n if (!info || !info.title) {\n throw new Error('Invalid page info', { cause: data })\n }\n return new WikiPage(info, true)\n }\n static newBlankPage(init: Partial<PageInfo> = {}) {\n return new WikiPage(init, false)\n }\n static async newFromAnyKind(payload: { title?: string; pageId?: number; revisionId?: number }) {\n const { title, pageId, revisionId } = payload || {}\n if (revisionId) {\n return this.newFromApi({ revids: parseInt(revisionId.toString(), 10) })\n } else if (pageId) {\n return this.newFromApi({ pageids: parseInt(pageId.toString(), 10) })\n } else if (title) {\n return this.newFromApi({ titles: title.toString() })\n }\n return null\n }\n static async newBatchFromApi(\n params: MwApiParams & {\n titles?: string[]\n pageids?: number[]\n revids?: number[]\n }\n ) {\n const { titles, pageids, revids, ...rest } = params || {}\n const { data } = await this.api.post<{\n query: {\n pages: PageInfo[]\n }\n }>({\n ...WikiPage.DEFAULT_QUERY_PARAMS,\n titles: titles?.join('|') ?? undefined,\n pageids: pageids?.join('|') ?? undefined,\n revids: revids?.join('|') ?? undefined,\n ...rest,\n })\n return data?.query?.pages?.map((page) => new WikiPage(page, true)) || []\n }\n\n // Page actions\n async parse(params?: MwApiParams) {\n return this.api.post({\n action: 'parse',\n page: this.pageInfo.title,\n prop: 'text|langlinks|categories|links|templates|images|externallinks|sections|revid|displaytitle|iwlinks|properties|parsewarnings',\n ...params,\n })\n }\n async preview(text: string, params?: MwApiParams) {\n return this.parse({\n action: 'parse',\n page: undefined,\n title: this.title,\n text,\n pst: 1,\n preview: 1,\n disableeditsection: 1,\n disablelimitreport: 1,\n ...params,\n })\n }\n async edit(payload: WikiPageActionEditRequest & MwApiParams, params?: MwApiParams) {\n const response = await this.api.postWithEditToken<{ edit: WikiPageActionEditResult }>({\n action: 'edit',\n title: this.title,\n starttimestamp: this.pageInfo.touched,\n basetimestamp: this.revisions[0]?.timestamp,\n ...payload,\n ...params,\n })\n if (response.data?.edit?.result === 'Success') {\n return response\n } else {\n /**\n * This situation is rare, but it may happen.\n * In most cases, failed edit will throw a MediaWikiApiError like `{ \"error\": { \"code\": \"editconflict\", \"info\": \"...\" } }`, but not `{ \"edit\": { \"result\": \"Failure\" } }`.\n * We need to build a MediaWikiApiError manually.\n * @see https://github.com/inpageedit/inpageedit-next/issues/13\n */\n throw new MediaWikiApiError(\n [\n {\n module: 'edit',\n code: 'editfailure',\n text: 'Unknown edit failure. Please try again.',\n docref: 'https://www.mediawiki.org/wiki/API:Edit',\n },\n ],\n response\n )\n }\n }\n async createOnly(\n payload: Pick<WikiPageActionEditRequest, 'summary' | 'watchlist'> & {\n text: string\n recreate?: boolean\n },\n params?: MwApiParams\n ) {\n return this.edit(payload, { createonly: 1, recreate: payload.recreate, ...params })\n }\n async delete(reason?: string, params?: MwApiParams & { deletetalk?: boolean }) {\n return this.api.postWithEditToken<{\n delete: {\n title: string\n reason: string\n logid: boolean\n }\n }>({\n action: 'delete',\n title: this.pageInfo.title || undefined,\n pageid: this.pageInfo.pageid || undefined,\n reason,\n deletetalk: params?.deletetalk,\n ...params,\n })\n }\n async moveTo(\n title: string,\n reason?: string,\n params?: Partial<\n MwApiParams & {\n movetalk: boolean\n movesubpages: boolean\n }\n >\n ) {\n return this.api.postWithEditToken({\n action: 'move',\n from: this.pageInfo.title,\n to: title,\n reason,\n movetalk: 1,\n movesubpages: 1,\n ...params,\n })\n }\n\n // === utilities ===\n\n userCan(action: keyof PageInfo['actions']) {\n const val = this.pageInfo?.actions?.[action]\n return !!val\n }\n userCanEdit() {\n return this.userCan('edit')\n }\n async reloadSelfInfo() {\n const page = await WikiPage.newFromApi({\n pageids: this.pageInfo.pageid,\n titles: this.pageInfo.title,\n })\n const revisions = (this.pageInfo.revisions || [])\n .concat(page.revisions || [])\n .sort((a, b) => a.revid - b.revid)\n .reduce(\n (acc, cur) => {\n if (!acc.find((rev) => rev.revid === cur.revid)) acc.push(cur)\n return acc\n },\n [] as Required<PageInfo>['revisions']\n )\n this.pageInfo = page.pageInfo\n this.pageInfo.revisions = revisions\n this._loaded = true\n return this\n }\n\n // === sugar getters ===\n get pageid() {\n return this.pageInfo.pageid\n }\n get title() {\n return this.pageInfo.title\n }\n get ns() {\n return this.pageInfo.ns\n }\n get contentmodel() {\n return this.pageInfo.contentmodel\n }\n get fullurl() {\n return this.pageInfo.fullurl\n }\n get canonicalurl() {\n return this.pageInfo.canonicalurl\n }\n get editurl() {\n return this.pageInfo.editurl\n }\n get revisions() {\n return this.pageInfo.revisions || []\n }\n get lastrevid() {\n return this.pageInfo.lastrevid\n }\n get templates() {\n return this.pageInfo.templates || []\n }\n get images() {\n return this.pageInfo.images || []\n }\n }\n\n return WikiPage as WikiPageConstructor\n}\n\n// re-export types\nexport * from './types/PageInfo'\nexport * from './types/PageParseData'\nexport * from './types/WatchlistAction'\n","import { WikiSiteInfo } from '@/types/WikiMetadata'\n\n// 使用 WeakMap 避免内存泄漏\nconst caches = new WeakMap<WikiSiteInfo, WikiTitleConstructor>()\n\n// 命名空间查找索引\ninterface NamespaceIndex {\n byName: Map<string, number>\n byCanonical: Map<string, number>\n byAlias: Map<string, number>\n byNormalized: Map<string, number> // 标准化索引:全小写+下划线格式\n}\n\n// 特殊页面别名索引\ninterface SpecialPageIndex {\n byRealName: Map<string, string> // realname -> realname\n byAlias: Map<string, string> // alias -> realname\n byNormalized: Map<string, string> // normalized -> realname\n}\n\nexport interface IWikiTitle {\n /**\n * Get db key without namespace prefix\n * e.g. \"template:hello world\" -> \"Hello_world\"\n */\n getMainDBKey(): string\n\n /**\n * Get page name without namespace prefix\n * e.g. \"template:hello world\" -> \"Hello world\"\n */\n getMainText(): string\n\n /**\n * Get db key with namespace prefix\n * e.g. \"template:hello world\" -> \"Template:Hello_world\"\n */\n getPrefixedDBKey(): string\n\n /**\n * Get page name with namespace prefix\n * e.g. \"template:hello world\" -> \"Template:Hello world\"\n */\n getPrefixedText(): string\n\n // Shortcuts\n toText: () => string\n toString: () => string\n\n /**\n * Get namespace ID\n * e.g. \"template:hello world\" -> 10\n */\n getNamespaceId(): number\n\n /**\n * Get namespace text\n * e.g. \"template:hello world\" -> \"Template\"\n */\n getNamespaceText(): string\n\n /**\n * Get namespace db key\n * e.g. \"template talk:hello world\" -> \"Template_talk\"\n */\n getNamespaceDBKey(): string\n\n /**\n * Get subject page\n * If current page is subject page, return itself\n * e.g. \"template talk:hello world\" -> new WikiTitle(\"Template:Hello world\")\n */\n getSubjectPage(): IWikiTitle\n\n /**\n * Get talk page\n * If current page is talk page, return itself\n * If current page cannot have talk page, return null\n * e.g. \"template:hello world\" -> new WikiTitle(\"Template talk:Hello world\")\n */\n getTalkPage(): IWikiTitle | null\n\n /**\n * Get URL of the page\n * e.g. \"template:hello world\" -> \"https://example.com/wiki/Template:Hello_world\"\n */\n getURL(params?: Record<string, string> | URLSearchParams): URL\n\n /**\n * Reset current title with given title string\n */\n setTitle(title: string): IWikiTitle\n\n /**\n * Set main title, keep current ns, update dbkey\n */\n setMainText(mainTitle: string): IWikiTitle\n\n /**\n * Set namespace by text\n */\n setNamespaceText(namespaceText: string): IWikiTitle\n\n /**\n * Set namespace by ID\n */\n setNamespaceId(namespaceId: number): IWikiTitle\n\n /**\n * Check if the title is equal to another title\n */\n equals(other: IWikiTitle | string): boolean\n\n /**\n * Check if the title is specific special page\n * e.g. \"Special:Diff\" is \"差异\" or \"diff\" -> true\n */\n isSpecial(alia: string): boolean\n\n newTitle(title: string, namespace?: number): IWikiTitle\n}\n\nexport interface WikiTitleConstructor {\n new (title: string, namespace?: number): IWikiTitle\n create(title: string, namespace?: number): IWikiTitle\n}\n\n// 工具函数\nconst titleUtils = {\n toDBKey: (text: string): string => text.replace(/ /g, '_'),\n toNormalText: (text: string): string => text.replace(/_/g, ' '),\n ensureCase: (text: string, caseType: string): string => {\n if (caseType === 'first-letter') {\n return text.charAt(0).toUpperCase() + text.slice(1)\n } else {\n return text\n }\n },\n}\n\n// 特殊页面工具函数\nconst specialPageUtils = {\n /**\n * 标准化特殊页面名称:转换为全小写\n */\n normalizeSpecialPageName: (name: string): string => {\n return name.toLowerCase()\n },\n\n /**\n * 构建特殊页面别名索引\n */\n buildSpecialPageIndex: (metadata: WikiSiteInfo): SpecialPageIndex => {\n const byRealName = new Map<string, string>()\n const byAlias = new Map<string, string>()\n const byNormalized = new Map<string, string>()\n\n for (const specialPage of metadata.specialpagealiases) {\n const realName = specialPage.realname\n byRealName.set(realName, realName)\n\n // 添加标准化索引\n const normalizedRealName = specialPageUtils.normalizeSpecialPageName(realName)\n byNormalized.set(normalizedRealName, realName)\n\n // 处理别名\n for (const alias of specialPage.aliases) {\n byAlias.set(alias, realName)\n\n // 添加标准化的别名索引\n const normalizedAlias = specialPageUtils.normalizeSpecialPageName(alias)\n byNormalized.set(normalizedAlias, realName)\n }\n }\n\n return { byRealName, byAlias, byNormalized }\n },\n\n /**\n * 查找特殊页面的真实名称\n */\n findSpecialPageRealName: (name: string, index: SpecialPageIndex): string | null => {\n // 提取主部分(忽略子页面)\n const mainPart = name.split('/')[0]\n\n // 首先尝试原始输入(精确匹配)\n let result = index.byRealName.get(mainPart) ?? index.byAlias.get(mainPart)\n if (result !== undefined) {\n return result\n }\n\n // 标准化输入并查找\n const normalized = specialPageUtils.normalizeSpecialPageName(mainPart)\n return index.byNormalized.get(normalized) ?? null\n },\n}\n\n// 命名空间工具函数\nconst namespaceUtils = {\n /**\n * 标准化命名空间文本:转换为全小写+下划线格式\n */\n normalizeNamespaceText: (text: string): string => {\n return text\n .replace(/[_\\s]+/g, '_') // 将空格和下划线统一为下划线\n .toLowerCase()\n .replace(/^_+|_+$/g, '') // 移除首尾下划线\n },\n\n buildIndex: (metadata: WikiSiteInfo): NamespaceIndex => {\n const byName = new Map<string, number>()\n const byCanonical = new Map<string, number>()\n const byAlias = new Map<string, number>()\n const byNormalized = new Map<string, number>()\n\n // 构建命名空间索引\n for (const [id, ns] of Object.entries(metadata.namespaces)) {\n const nsId = parseInt(id)\n byName.set(ns.name, nsId)\n byCanonical.set(ns.canonical ?? '', nsId)\n\n // 添加标准化索引\n const normalizedName = namespaceUtils.normalizeNamespaceText(ns.name)\n const normalizedCanonical = namespaceUtils.normalizeNamespaceText(ns.canonical ?? '')\n byNormalized.set(normalizedName, nsId)\n byNormalized.set(normalizedCanonical, nsId)\n }\n\n // 构建别名索引\n for (const alias of metadata.namespacealiases) {\n byAlias.set(alias.alias, alias.id)\n\n // 添加标准化的别名索引\n const normalizedAlias = namespaceUtils.normalizeNamespaceText(alias.alias)\n byNormalized.set(normalizedAlias, alias.id)\n }\n\n return { byName, byCanonical, byAlias, byNormalized }\n },\n\n findNamespaceId: (namespaceText: string, index: NamespaceIndex): number | null => {\n // 首先尝试原始输入(精确匹配)\n let result =\n index.byName.get(namespaceText) ??\n index.byCanonical.get(namespaceText) ??\n index.byAlias.get(namespaceText)\n if (result !== undefined) {\n return result\n }\n\n // 标准化输入并查找\n const normalized = namespaceUtils.normalizeNamespaceText(namespaceText)\n return index.byNormalized.get(normalized) ?? null\n },\n\n isTalkPage: (ns: number): boolean => ns % 2 === 1 && ns > 0,\n\n getDefaultNamespaceInfo: (ns: number) => ({\n id: ns,\n name: '',\n canonical: '',\n case: 'first-letter' as const,\n content: false,\n nonincludable: false,\n subpages: false,\n }),\n}\n\nexport function createWikiTitleModel(metadata: WikiSiteInfo): WikiTitleConstructor {\n const exists = caches.get(metadata)\n if (exists) {\n return exists\n }\n\n // 预建命名空间索引\n const namespaceIndex = namespaceUtils.buildIndex(metadata)\n // 预建特殊页面索引\n const specialPageIndex = specialPageUtils.buildSpecialPageIndex(metadata)\n\n class WikiTitle implements IWikiTitle {\n static readonly _meta = metadata\n static readonly _namespaceIndex = namespaceIndex\n static readonly _specialPageIndex = specialPageIndex\n\n /** 缓存的 main title,不包含命名空间前缀,大小写和空格状态不确定 */\n #title: string\n /** 缓存的 namespace ID */\n #ns: number\n\n constructor(title: string, namespace?: number) {\n this.#title = title || ''\n this.#ns = namespace ?? 0\n\n // 只有在没有显式命名空间参数时才解析标题中的命名空间前缀\n if (namespace === void 0) {\n this.fixNSByTitle()\n } else {\n // 显式传入命名空间时:仅当标题中的前缀与显式命名空间一致时才移除前缀\n const parsed = this.parseTitlePrefix(this.#title)\n if (parsed && parsed.namespaceId === this.#ns) {\n this.#title = parsed.mainTitle\n }\n }\n\n if (this.getMainText() === '') {\n throw new Error('Invalid title')\n }\n }\n\n static create(title: string, namespace?: number): WikiTitle {\n return new WikiTitle(title, namespace)\n }\n newTitle = WikiTitle.create.bind(WikiTitle)\n\n /**\n * 解析标题前缀,返回匹配到的命名空间 ID 与剥离后的主标题\n */\n private parseTitlePrefix(rawTitle: string): { namespaceId: number; mainTitle: string } | null {\n const colonIndex = rawTitle.indexOf(':')\n if (colonIndex <= 0) {\n return null\n }\n const potentialNamespace = rawTitle.substring(0, colonIndex)\n const mainTitle = rawTitle.substring(colonIndex + 1)\n const namespaceId = namespaceUtils.findNamespaceId(\n potentialNamespace,\n WikiTitle._namespaceIndex\n )\n if (namespaceId === null) return null\n return { namespaceId, mainTitle }\n }\n\n /**\n * 如果标题包含可识别命名空间,则采用该命名空间并剥离前缀\n */\n private adoptNamespaceFromTitle(): void {\n const parsed = this.parseTitlePrefix(this.#title)\n if (!parsed) return\n this.#title = parsed.mainTitle\n this.#ns = parsed.namespaceId\n }\n\n private fixNSByTitle(): void {\n const colonIndex = this.#title.indexOf(':')\n if (colonIndex === -1) {\n return // 没有命名空间前缀\n }\n\n if (colonIndex === 0) {\n // 只有冒号,将冒号后的部分作为标题\n this.#title = this.#title.substring(1)\n return\n }\n\n // 查找匹配的命名空间并采用\n this.adoptNamespaceFromTitle()\n }\n\n private getNamespaceInfo() {\n return (\n WikiTitle._meta.namespaces[this.#ns] ?? namespaceUtils.getDefaultNamespaceInfo(this.#ns)\n )\n }\n\n /**\n * 若为特殊页面,返回解析后的真实主名(含子页面);否则返回 null\n */\n private resolveSpecialFullTitle(): string | null {\n if (this.#ns !== -1) return null\n const realName = specialPageUtils.findSpecialPageRealName(\n this.#title,\n WikiTitle._specialPageIndex\n )\n if (!realName) return null\n const subPage = this.#title.includes('/')\n ? this.#title.substring(this.#title.indexOf('/'))\n : ''\n return realName + subPage\n }\n\n /**\n * 将主标题格式化为输出内容(文本或 DBKey),并做大小写规范化\n */\n private formatMainForOutput(mode: 'text' | 'db'): string {\n const nsInfo = this.getNamespaceInfo()\n const resolved = this.resolveSpecialFullTitle()\n const base = resolved ?? this.#title\n const converted = mode === 'db' ? titleUtils.toDBKey(base) : titleUtils.toNormalText(base)\n return titleUtils.ensureCase(converted, nsInfo.case)\n }\n\n getMainDBKey(): string {\n return this.formatMainForOutput('db')\n }\n\n getMainText(): string {\n return this.formatMainForOutput('text')\n }\n\n private getMainRootText(): string {\n return this.getMainText().split('/')[0]\n }\n\n getPrefixedDBKey(): string {\n if (this.#ns === 0) {\n return this.getMainDBKey()\n }\n return `${this.getNamespaceDBKey()}:${this.getMainDBKey()}`\n }\n\n getPrefixedText(): string {\n if (this.#ns === 0) {\n return this.getMainText()\n }\n return `${this.getNamespaceText()}:${this.getMainText()}`\n }\n\n // aliases\n toText = this.getPrefixedText.bind(this)\n toString = this.getPrefixedDBKey.bind(this)\n\n getNamespaceId(): number {\n return this.#ns\n }\n\n getNamespaceText(): string {\n return this.getNamespaceInfo().name ?? ''\n }\n getNamespaceDBKey(): string {\n const nsInfo = this.getNamespaceInfo()\n return titleUtils.ensureCase(titleUtils.toDBKey(this.getNamespaceText()), nsInfo.case)\n }\n\n getSubjectPage(): IWikiTitle {\n if (namespaceUtils.isTalkPage(this.#ns)) {\n const subjectNs = this.#ns - 1\n return new WikiTitle(this.#title, subjectNs)\n }\n return this\n }\n\n getTalkPage(): IWikiTitle | null {\n if (namespaceUtils.isTalkPage(this.#ns)) {\n return this\n }\n\n // 特殊页面和媒体页面没有讨论页\n if (this.#ns < 0) {\n return null\n }\n\n const talkNs = this.#ns + 1\n const talkNsInfo = WikiTitle._meta.namespaces[talkNs.toString()]\n if (!talkNsInfo) {\n return null\n }\n\n return new WikiTitle(this.#title, talkNs)\n }\n\n getURL(params?: Record<string, string> | URLSearchParams): URL {\n const prefixedDbKey = this.getPrefixedDBKey()\n return this.buildArticleURL(prefixedDbKey, params)\n }\n\n /**\n * 构建文章 URL 并附加查询参数\n */\n private buildArticleURL(\n prefixedDbKey: string,\n params?: Record<string, string> | URLSearchParams\n ): URL {\n const articlePath = WikiTitle._meta.general.articlepath\n const path = articlePath.replace('$1', prefixedDbKey)\n const url = new URL(path, location.origin)\n if (params) {\n const searchParams =\n params instanceof URLSearchParams ? params : new URLSearchParams(params)\n searchParams.forEach((value, key) => {\n url.searchParams.set(key, value)\n })\n }\n return url\n }\n\n /**\n * 设置标题,重置当前实例的 dbkey 和 ns\n * 行为:\n * - 如果标题包含可识别的命名空间前缀,则以该前缀为准更新 ns,并移除前缀\n * - 如果标题前缀与当前 ns 相同,则仅移除冗余前缀并保留当前 ns\n * - 否则(无前缀),重置为主命名空间\n */\n setTitle(title: string): this {\n this.#title = title\n const previousNs = this.#ns\n // 默认重置为主命名空间\n this.#ns = 0\n\n const parsed = this.parseTitlePrefix(this.#title)\n if (parsed) {\n // 如果与之前的 ns 一致,则视为冗余前缀,仅剥离前缀并保持 ns\n if (previousNs !== 0 && parsed.namespaceId === previousNs) {\n this.#title = parsed.mainTitle\n this.#ns = previousNs\n } else {\n // 使用标题中的命名空间\n this.#title = parsed.mainTitle\n this.#ns = parsed.namespaceId\n }\n return this\n }\n\n // 无可识别前缀,保持主命名空间\n return this\n }\n\n setMainText(text: string): this {\n this.#title = text\n return this\n }\n\n setNamespaceText(namespaceText: string): this {\n const namespaceId = namespaceUtils.findNamespaceId(namespaceText, WikiTitle._namespaceIndex)\n if (namespaceId !== null) {\n this.#ns = namespaceId\n }\n return this\n }\n\n setNamespaceId(namespaceId: number): this {\n this.#ns = namespaceId\n return this\n }\n\n equals(other: IWikiTitle | string): boolean {\n if (typeof other === 'string') {\n other = new WikiTitle(other)\n }\n return this.getPrefixedDBKey() === other.getPrefixedDBKey()\n }\n\n isSpecial(alia: string): boolean {\n // 如果不是特殊页面命名空间,直接返回 false\n if (this.#ns !== -1) {\n return false\n }\n const targetTitle = new WikiTitle(alia, -1)\n return this.getMainRootText() === targetTitle.getMainRootText()\n }\n\n toJSON(): Record<string, any> {\n return {\n ns: this.#ns,\n text: this.getMainText(),\n title: this.getPrefixedText(),\n url: this.getURL().toString(),\n isSpecial: this.#ns < 0,\n }\n }\n }\n\n caches.set(metadata, WikiTitle)\n return WikiTitle\n}\n"],"names":["clone","value","_structuredClone","seen","cached","ta","Ctor","out2","v","k","arr","i","proto","out","descriptors","key","d","isPlainObject","payload","CallableInstanceImpl","property","func","apply","args","desc","CallableInstance","deepMerge","obj","incomes","result","inc","nextVal","prevVal","FexiosErrorCodes","FexiosErrorCodes2","FexiosError","code","message","context","options","e","FexiosResponseError","response","FexiosHeaderBuilder","FexiosHeaderBuilder2","input","h","item","output","raw","mergeOneFromObject","patch","rec","FexiosQueryBuilder","FexiosQueryBuilder2","params","sp","appendValue","setValue","handleNested","prefix","val","isBracketArrayKey","cleanKey","nextPrefix","arrayKey","query","url","hash","base","fallbackBase","u","existingParams","mergedRecord","mergedParams","parseKey","parts","re","m","forceArray","lastWasEmpty","setDeep","path","cur","rawKey","s","t","qIndex","hashIndex","mergeOne","toPlain","src","target","FexiosResponse","rawResponse","data","responseType","concatUint8Arrays","total","n","p","off","readBody","stream","contentLength","onProgress","reader","chunks","received","done","guessFexiosResponseType","contentType","createFexiosResponse","expectedType","shouldThrow","timeout","lenHeader","upgrade","connection","resolvedType","response2","createFexiosEventSourceResponse","decide","createFexiosWebSocketResponse","charset","decoder","bytes","text","trimmed","decision","ws","delay","resolve","reject","timer","settled","cleanup","onOpen","onError","onClose","event","es","Fexios","configs","baseConfigs","urlOrOptions","ctx","body","headerAutoPatch","abortController","fallback","baseForRequest","urlObjForRequest","finalURLForRequest","rawRequest","finalCtx","err","progress","buffer","error","c","effectiveBase","baseObj","reqURL","baseSearchParams","reqSearchParams","mergedSearchParams","mergedQuery","source","opts","hooks","shortCircuit","baseCtx","after","hook","hookName","marker","action","prepend","method","bodyOrQuery","fexios","plugin","fx","createFexios","MwParamNormalizer","MwParamNormalizer2","normalizeParamValue","normalizeBody","isFormLike","body2","formData","WikiSaikouErrorCode","WikiSaikouErrorCode2","WikiSaikouError","cause","MediaWikiApiError","errors","WikiSaikouError2","extractResponseDataFromAny","includesMediaWikiApiError","extractMediaWikiApiErrors","r","isBadTokenError","FEXIOS_SAIKOU_MARKER","createFexiosSaikou","instance","origin","tokenName","tokens","type","token","loginToken","resolveLegacyCtor","configOrBaseURL","defaultOptions","defaultParams","config","WikiSaikouCore","wgServer","wgScriptPath","noop","useRetry","fn","retryCount","retry","onRetry","shouldRetry","lastError","baseURL","doRequest","res","types","noCache","tokenType","fexiosOptions","attemptIndex","_error","count","MemoryStorage","index","useMemoryStorage","prop","createWikiPageModel","api","WikiPage","pageInfo","_loaded","rev","info","init","title","pageId","revisionId","titles","pageids","revids","rest","page","reason","revisions","a","b","acc","caches","titleUtils","caseType","specialPageUtils","name","metadata","byRealName","byAlias","byNormalized","specialPage","realName","normalizedRealName","alias","normalizedAlias","mainPart","normalized","namespaceUtils","byName","byCanonical","id","ns","nsId","normalizedName","normalizedCanonical","namespaceText","createWikiTitleModel","exists","namespaceIndex","specialPageIndex","WikiTitle","namespace","#title","#ns","parsed","rawTitle","colonIndex","potentialNamespace","mainTitle","namespaceId","subPage","mode","nsInfo","converted","subjectNs","talkNs","prefixedDbKey","previousNs","other","alia","targetTitle"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5]}
@@ -0,0 +1,168 @@
1
+ import { j as o, F as j, P as T } from "./Promise.withResolvers-C4chhLB1.js";
2
+ import { a as C, R as q, S as f } from "./index-QnWieXQc.js";
3
+ import { BasePlugin as E } from "./core.js";
4
+ import { m as F } from "./makeCallable-Cg4zUG4c.js";
5
+ var S = Object.create, w = Object.defineProperty, W = Object.getOwnPropertyDescriptor, _ = (n, e) => (e = Symbol[n]) ? e : /* @__PURE__ */ Symbol.for("Symbol." + n), k = (n) => {
6
+ throw TypeError(n);
7
+ }, L = (n, e, i) => e in n ? w(n, e, { enumerable: !0, configurable: !0, writable: !0, value: i }) : n[e] = i, Q = (n, e) => w(n, "name", { value: e, configurable: !0 }), $ = (n) => [, , , S(n?.[_("metadata")] ?? null)], N = ["class", "method", "getter", "setter", "accessor", "field", "value", "get", "set"], y = (n) => n !== void 0 && typeof n != "function" ? k("Function expected") : n, z = (n, e, i, r, t) => ({ kind: N[n], name: e, metadata: r, addInitializer: (s) => i._ ? k("Already initialized") : t.push(y(s || null)) }), R = (n, e) => L(e, _("metadata"), n[3]), D = (n, e, i, r) => {
8
+ for (var t = 0, s = n[e >> 1], a = s && s.length; t < a; t++) s[t].call(i);
9
+ return r;
10
+ }, I = (n, e, i, r, t, s) => {
11
+ var a, c, p, u = e & 7, l = !1, g = 0, x = n[g] || (n[g] = []), d = u && (t = t.prototype, u < 5 && (u > 3 || !l) && W(t, i));
12
+ Q(t, i);
13
+ for (var h = r.length - 1; h >= 0; h--)
14
+ p = z(u, i, c = {}, n[3], x), a = (0, r[h])(t, p), c._ = 1, y(a) && (t = a);
15
+ return R(n, t), d && w(t, i, d), l ? u ^ 4 ? s : d : t;
16
+ }, b, m, P;
17
+ b = [C(["api", "wikiPage", "modal", "preferences", "$"]), q(
18
+ f.object({
19
+ "quickPreview.keyshortcut": f.string().default("ctrl-i").description("Key shortcut to open quick preview in quick edit modal")
20
+ }).extra("category", "editor").description("Quick preview options")
21
+ )];
22
+ class v extends (P = E) {
23
+ constructor(e) {
24
+ super(e, {}, "quickPreview"), this.ctx = e, this._contentTypeCache = /* @__PURE__ */ new Map(), this._objectUrls = /* @__PURE__ */ new WeakMap(), this.ctx.set("quickPreview", F(this, "previewWikitext"));
25
+ }
26
+ start() {
27
+ this.ctx.on("quick-edit/wiki-page", this.injectQuickEdit.bind(this));
28
+ }
29
+ stop() {
30
+ }
31
+ previewWikitext(e, i, r, t, s) {
32
+ const { $: a } = this.ctx;
33
+ return r ||= this.ctx.wikiPage.newBlankPage({
34
+ title: "API"
35
+ }), (!t || t.isDestroyed) && (t = this.ctx.modal.createObject({
36
+ className: "in-page-edit ipe-quickPreview",
37
+ sizeClass: "large",
38
+ center: !1,
39
+ ...s
40
+ }).init()), t.show(), t.setTitle(a`Preview - Loading...`), t.setContent(/* @__PURE__ */ o(T, {})), t.bringToFront(), this.ctx.emit("quick-preview/show-modal", {
41
+ ctx: this.ctx,
42
+ text: e,
43
+ modal: t,
44
+ wikiPage: r
45
+ }), r.preview(e, i).then((c) => {
46
+ const {
47
+ data: { parse: p }
48
+ } = c;
49
+ t.setTitle(a(p.title)`Preview - {{ $1 }}`);
50
+ let u = null;
51
+ t.setContent(
52
+ /* @__PURE__ */ o("section", { children: /* @__PURE__ */ o(
53
+ "div",
54
+ {
55
+ ref: (l) => u = l,
56
+ className: "mw-parser-output",
57
+ innerHTML: p.text
58
+ }
59
+ ) })
60
+ ), window.mw?.hook && typeof jQuery == "function" && window.mw.hook("wikipage.content").fire(jQuery(u)), this.ctx.emit("quick-preview/loaded", {
61
+ ctx: this.ctx,
62
+ modal: t,
63
+ wikiPage: r,
64
+ text: e,
65
+ parseData: p
66
+ });
67
+ }).catch((c) => {
68
+ t.setTitle(a`Preview - Failed`), t.setContent(
69
+ /* @__PURE__ */ o(j, { children: [
70
+ /* @__PURE__ */ o("p", { children: a`Failed to preview` }),
71
+ /* @__PURE__ */ o("p", { children: c instanceof Error ? c.message : String(c) })
72
+ ] })
73
+ );
74
+ }), t;
75
+ }
76
+ async injectQuickEdit({ options: e, modal: i, wikiPage: r }) {
77
+ const { $: t } = this.ctx;
78
+ let s;
79
+ i.addButton(
80
+ {
81
+ label: t`Preview`,
82
+ side: "left",
83
+ className: "btn btn-secondary",
84
+ keyPress: await this.ctx.preferences.get("quickPreview.keyshortcut.quickEdit") || void 0,
85
+ method: () => {
86
+ let a = i.get$content().querySelector('textarea[name="text"]')?.value || "";
87
+ if (e.section === "new") {
88
+ const c = i.get$content().querySelector('input[name="summary"]')?.value;
89
+ c && (a = `==${c}==
90
+ ${a}`);
91
+ }
92
+ s = this.previewWikitext(
93
+ a,
94
+ void 0,
95
+ r,
96
+ s,
97
+ {
98
+ backdrop: !1,
99
+ draggable: !0
100
+ }
101
+ );
102
+ }
103
+ },
104
+ 1
105
+ ), i.on(i.Event.Close, () => {
106
+ s?.destroy(), s = void 0;
107
+ });
108
+ }
109
+ fetchContentType(e) {
110
+ const i = this._contentTypeCache.get(e);
111
+ if (i) return i;
112
+ const r = fetch(e, { method: "HEAD" }).then((t) => t.headers.get("content-type") || "").catch(() => (this._contentTypeCache.delete(e), ""));
113
+ return this._contentTypeCache.set(e, r), r;
114
+ }
115
+ async getPreviewType(e) {
116
+ if (!e) return "unknown";
117
+ let i, r;
118
+ if (e instanceof File)
119
+ i = e.type, r = e.name.split(".").pop()?.toLowerCase() || "";
120
+ else {
121
+ const t = new URL(e, location.origin);
122
+ t.protocol === "data:" || t.protocol === "blob:" || t.protocol.startsWith("http") ? i = await this.fetchContentType(t.href) : i = "", r = t.pathname.split(".").pop()?.toLowerCase() || "";
123
+ }
124
+ return i.startsWith("image/") && /** Windows provide PDFs as image/pdf */
125
+ !i.includes("pdf") ? "image" : i.startsWith("video/") ? "video" : i.startsWith("audio/") ? "audio" : i.startsWith("text/html") ? "html" : r === "md" ? "markdown" : i.startsWith("text/") ? "text" : ["jpg", "jpeg", "png", "gif", "bmp", "tiff", "ico", "webp"].includes(r) ? "image" : ["mp4", "webm", "ogg", "flv", "avi", "mov", "wmv", "mkv"].includes(r) ? "video" : ["mp3", "wav", "ogg", "flac", "aac", "m4a", "wma"].includes(r) ? "audio" : ["html", "htm"].includes(r) ? "html" : ["json", "yml", "yaml", "toml", "py"].includes(r) ? "text" : ["pdf"].includes(r) ? "pdf" : "unknown";
126
+ }
127
+ async previewFile(e, i) {
128
+ const r = await this.getPreviewElement(e, i);
129
+ return r ? this.ctx.modal.dialog({
130
+ className: "in-page-edit ipe-quickPreview",
131
+ sizeClass: "mediumToLarge",
132
+ center: !0,
133
+ title: i ?? (e instanceof File ? e.name : e),
134
+ content: /* @__PURE__ */ o("section", { className: "ipe-quickPreview__content", children: r })
135
+ }) : void 0;
136
+ }
137
+ getObjectUrl(e) {
138
+ if (!this._objectUrls.has(e)) {
139
+ const i = URL.createObjectURL(e);
140
+ this._objectUrls.set(e, i);
141
+ }
142
+ return this._objectUrls.get(e);
143
+ }
144
+ async getPreviewElement(e, i) {
145
+ const r = await this.getPreviewType(e), t = e instanceof File ? this.getObjectUrl(e) : e;
146
+ switch (r) {
147
+ case "image":
148
+ return /* @__PURE__ */ o("img", { src: t, alt: i ?? (e instanceof File ? e.name : e) });
149
+ case "video":
150
+ return /* @__PURE__ */ o("video", { src: t, controls: !0, "aria-label": i });
151
+ case "audio":
152
+ return /* @__PURE__ */ o("audio", { src: t, controls: !0, "aria-label": i });
153
+ case "pdf":
154
+ return /* @__PURE__ */ o("embed", { type: "application/pdf", src: t, "aria-label": i });
155
+ }
156
+ return null;
157
+ }
158
+ previewWikiPage(e) {
159
+ throw new Error("Not implemented");
160
+ }
161
+ }
162
+ m = $(P);
163
+ v = I(m, 0, "PluginQuickPreview", b, v);
164
+ D(m, 1, v);
165
+ export {
166
+ v as PluginQuickPreview
167
+ };
168
+ //# sourceMappingURL=index-DZa9mxN4.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-DZa9mxN4.js","sources":["../src/plugins/quick-preview/index.tsx"],"sourcesContent":["import { Inject, InPageEdit, Schema } from '@/InPageEdit'\nimport { type QuickEditEventPayload } from '@/plugins/quick-edit'\nimport { IWikiPage } from '@/models/WikiPage'\nimport { MwApiParams } from 'wiki-saikou'\nimport { PageParseData } from '@/models/WikiPage/types/PageParseData'\nimport { IPEModal, IPEModalOptions } from '@inpageedit/modal'\n\nimport './style.scss'\n\ninterface QuickPreviewEventPayload {\n ctx: InPageEdit\n modal: IPEModal\n wikiPage: IWikiPage\n text: string\n parseData: PageParseData\n}\n\ndeclare module '@/InPageEdit' {\n interface InPageEdit {\n quickPreview: PluginQuickPreview & {\n // for backward compatibility\n (\n ...args: Parameters<PluginQuickPreview['previewWikitext']>\n ): ReturnType<PluginQuickPreview['previewWikitext']>\n }\n }\n interface Events {\n 'quick-preview/show-modal'(payload: Omit<QuickPreviewEventPayload, 'parseData'>): void\n 'quick-preview/loaded'(payload: QuickPreviewEventPayload): void\n }\n interface PreferencesMap {\n 'quickPreview.keyshortcut.quickEdit': string\n 'quickPreview.keyshortcut.quickDelete': string\n }\n}\n\n@Inject(['api', 'wikiPage', 'modal', 'preferences', '$'])\n@RegisterPreferences(\n Schema.object({\n 'quickPreview.keyshortcut': Schema.string()\n .default('ctrl-i')\n .description('Key shortcut to open quick preview in quick edit modal'),\n })\n .extra('category', 'editor')\n .description('Quick preview options')\n)\nexport class PluginQuickPreview extends BasePlugin {\n constructor(public ctx: InPageEdit) {\n super(ctx, {}, 'quickPreview')\n this.ctx.set('quickPreview', makeCallable(this, 'previewWikitext'))\n }\n\n protected start(): Promise<void> | void {\n this.ctx.on('quick-edit/wiki-page', this.injectQuickEdit.bind(this))\n }\n\n protected stop(): Promise<void> | void {}\n\n previewWikitext(\n text: string,\n params?: MwApiParams,\n wikiPage?: IWikiPage,\n modal?: IPEModal,\n modalOptions?: Partial<IPEModalOptions>\n ) {\n const { $ } = this.ctx\n\n wikiPage ||= this.ctx.wikiPage.newBlankPage({\n title: 'API',\n })\n\n if (!modal || modal.isDestroyed) {\n modal = this.ctx.modal\n .createObject({\n className: 'in-page-edit ipe-quickPreview',\n sizeClass: 'large',\n center: false,\n ...modalOptions,\n })\n .init()\n }\n\n modal.show()\n modal.setTitle($`Preview - Loading...`)\n modal.setContent(<ProgressBar />)\n modal.bringToFront()\n this.ctx.emit('quick-preview/show-modal', {\n ctx: this.ctx,\n text,\n modal,\n wikiPage,\n })\n\n wikiPage\n .preview(text, params)\n .then((ret) => {\n const {\n data: { parse },\n } = ret\n modal.setTitle($(parse.title)`Preview - {{ $1 }}`)\n let outputRef: HTMLElement | null = null\n modal.setContent(\n (\n <section>\n <div\n ref={(el) => (outputRef = el)}\n className=\"mw-parser-output\"\n innerHTML={parse.text}\n ></div>\n </section>\n ) as HTMLElement\n )\n if (window.mw?.hook && typeof jQuery === 'function') {\n window.mw.hook('wikipage.content').fire(jQuery(outputRef!))\n }\n this.ctx.emit('quick-preview/loaded', {\n ctx: this.ctx,\n modal,\n wikiPage,\n text,\n parseData: parse,\n })\n })\n .catch((error) => {\n modal.setTitle($`Preview - Failed`)\n modal.setContent(\n <>\n <p>{$`Failed to preview`}</p>\n <p>{error instanceof Error ? error.message : String(error)}</p>\n </>\n )\n })\n\n return modal\n }\n\n private async injectQuickEdit({ options, modal, wikiPage }: QuickEditEventPayload) {\n const { $ } = this.ctx\n let latestPreviewModal: IPEModal | undefined = undefined\n modal.addButton(\n {\n label: $`Preview`,\n side: 'left',\n className: 'btn btn-secondary',\n keyPress:\n (await this.ctx.preferences.get('quickPreview.keyshortcut.quickEdit')) || undefined,\n method: () => {\n let wikitext =\n (modal.get$content().querySelector<HTMLTextAreaElement>('textarea[name=\"text\"]')\n ?.value as string) || ''\n if (options.section === 'new') {\n const title = modal\n .get$content()\n .querySelector<HTMLInputElement>('input[name=\"summary\"]')?.value\n if (title) {\n wikitext = `==${title}==\\n${wikitext}`\n }\n }\n\n latestPreviewModal = this.previewWikitext(\n wikitext,\n undefined,\n wikiPage,\n latestPreviewModal,\n {\n backdrop: false,\n draggable: true,\n }\n )\n },\n },\n 1\n )\n modal.on(modal.Event.Close, () => {\n latestPreviewModal?.destroy()\n latestPreviewModal = undefined\n })\n }\n\n private _contentTypeCache = new Map<string, Promise<string>>()\n private fetchContentType(url: string) {\n const cached = this._contentTypeCache.get(url)\n if (cached) return cached\n const promise = fetch(url, { method: 'HEAD' })\n .then((res) => res.headers.get('content-type') || '')\n .catch(() => {\n this._contentTypeCache.delete(url)\n return ''\n })\n this._contentTypeCache.set(url, promise)\n return promise\n }\n async getPreviewType(fileOrUrl: File | string) {\n if (!fileOrUrl) return 'unknown'\n let contentType: string\n let ext: string\n if (fileOrUrl instanceof File) {\n contentType = fileOrUrl.type\n ext = fileOrUrl.name.split('.').pop()?.toLowerCase() || ''\n } else {\n const url = new URL(fileOrUrl, location.origin)\n if (url.protocol === 'data:' || url.protocol === 'blob:' || url.protocol.startsWith('http')) {\n contentType = await this.fetchContentType(url.href)\n } else {\n contentType = ''\n }\n ext = url.pathname.split('.').pop()?.toLowerCase() || ''\n }\n if (\n contentType.startsWith('image/') &&\n /** Windows provide PDFs as image/pdf */ !contentType.includes('pdf')\n ) {\n return 'image'\n }\n if (contentType.startsWith('video/')) return 'video'\n if (contentType.startsWith('audio/')) return 'audio'\n if (contentType.startsWith('text/html')) return 'html'\n if (ext === 'md') return 'markdown'\n if (contentType.startsWith('text/')) return 'text'\n // detect by file extension\n if (['jpg', 'jpeg', 'png', 'gif', 'bmp', 'tiff', 'ico', 'webp'].includes(ext)) return 'image'\n if (['mp4', 'webm', 'ogg', 'flv', 'avi', 'mov', 'wmv', 'mkv'].includes(ext)) return 'video'\n if (['mp3', 'wav', 'ogg', 'flac', 'aac', 'm4a', 'wma'].includes(ext)) return 'audio'\n if (['html', 'htm'].includes(ext)) return 'html'\n if (['json', 'yml', 'yaml', 'toml', 'py'].includes(ext)) return 'text'\n if (['pdf'].includes(ext)) return 'pdf'\n return 'unknown'\n }\n async previewFile(fileOrUrl: File | string, alt?: string) {\n const previewElement = await this.getPreviewElement(fileOrUrl, alt)\n if (!previewElement) return\n const modal = this.ctx.modal.dialog({\n className: 'in-page-edit ipe-quickPreview',\n sizeClass: 'mediumToLarge',\n center: true,\n title: alt ?? (fileOrUrl instanceof File ? fileOrUrl.name : fileOrUrl),\n content: <section className=\"ipe-quickPreview__content\">{previewElement}</section>,\n })\n return modal\n }\n private _objectUrls = new WeakMap<File, string>()\n private getObjectUrl(file: File) {\n if (!this._objectUrls.has(file)) {\n const objUrl = URL.createObjectURL(file)\n this._objectUrls.set(file, objUrl)\n }\n return this._objectUrls.get(file)!\n }\n async getPreviewElement(fileOrUrl: File | string, alt?: string) {\n const previewType = await this.getPreviewType(fileOrUrl)\n const url = fileOrUrl instanceof File ? this.getObjectUrl(fileOrUrl) : fileOrUrl\n switch (previewType) {\n case 'image':\n return (\n <img src={url} alt={alt ?? (fileOrUrl instanceof File ? fileOrUrl.name : fileOrUrl)} />\n )\n case 'video':\n return <video src={url} controls={true} aria-label={alt} />\n case 'audio':\n return <audio src={url} controls={true} aria-label={alt} />\n case 'pdf':\n return <embed type=\"application/pdf\" src={url} aria-label={alt} />\n }\n return null\n }\n\n previewWikiPage(title: string) {\n throw new Error('Not implemented')\n }\n}\n"],"names":["_PluginQuickPreview_decorators","_init","_a","Inject","RegisterPreferences","Schema","PluginQuickPreview","BasePlugin","ctx","makeCallable","text","params","wikiPage","modal","modalOptions","$","jsx","ProgressBar","ret","parse","outputRef","el","error","jsxs","Fragment","options","latestPreviewModal","wikitext","title","url","cached","promise","res","fileOrUrl","contentType","ext","alt","previewElement","file","objUrl","previewType","__decoratorStart","__decorateElement","__runInitializers"],"mappings":"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"}