| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- // This file is auto-generated by @hey-api/openapi-ts
- /**
- * JSON-friendly union that mirrors what Pinia Colada can hash.
- */
- export type JsonValue = null | string | number | boolean | JsonValue[] | { [key: string]: JsonValue }
- /**
- * Replacer that converts non-JSON values (bigint, Date, etc.) to safe substitutes.
- */
- export const queryKeyJsonReplacer = (_key: string, value: unknown) => {
- if (value === undefined || typeof value === "function" || typeof value === "symbol") {
- return undefined
- }
- if (typeof value === "bigint") {
- return value.toString()
- }
- if (value instanceof Date) {
- return value.toISOString()
- }
- return value
- }
- /**
- * Safely stringifies a value and parses it back into a JsonValue.
- */
- export const stringifyToJsonValue = (input: unknown): JsonValue | undefined => {
- try {
- const json = JSON.stringify(input, queryKeyJsonReplacer)
- if (json === undefined) {
- return undefined
- }
- return JSON.parse(json) as JsonValue
- } catch {
- return undefined
- }
- }
- /**
- * Detects plain objects (including objects with a null prototype).
- */
- const isPlainObject = (value: unknown): value is Record<string, unknown> => {
- if (value === null || typeof value !== "object") {
- return false
- }
- const prototype = Object.getPrototypeOf(value as object)
- return prototype === Object.prototype || prototype === null
- }
- /**
- * Turns URLSearchParams into a sorted JSON object for deterministic keys.
- */
- const serializeSearchParams = (params: URLSearchParams): JsonValue => {
- const entries = Array.from(params.entries()).sort(([a], [b]) => a.localeCompare(b))
- const result: Record<string, JsonValue> = {}
- for (const [key, value] of entries) {
- const existing = result[key]
- if (existing === undefined) {
- result[key] = value
- continue
- }
- if (Array.isArray(existing)) {
- ;(existing as string[]).push(value)
- } else {
- result[key] = [existing, value]
- }
- }
- return result
- }
- /**
- * Normalizes any accepted value into a JSON-friendly shape for query keys.
- */
- export const serializeQueryKeyValue = (value: unknown): JsonValue | undefined => {
- if (value === null) {
- return null
- }
- if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") {
- return value
- }
- if (value === undefined || typeof value === "function" || typeof value === "symbol") {
- return undefined
- }
- if (typeof value === "bigint") {
- return value.toString()
- }
- if (value instanceof Date) {
- return value.toISOString()
- }
- if (Array.isArray(value)) {
- return stringifyToJsonValue(value)
- }
- if (typeof URLSearchParams !== "undefined" && value instanceof URLSearchParams) {
- return serializeSearchParams(value)
- }
- if (isPlainObject(value)) {
- return stringifyToJsonValue(value)
- }
- return undefined
- }
|