{"version":3,"file":"converters-DnG1fX23.mjs","names":[],"sources":["../src/lib/converters.ts"],"sourcesContent":["export type URLParseOptions = {\n  /**\n   * Ignore any scheme in the input string and force this scheme instead.\n   */\n  scheme?: \"http\" | \"https\"\n  /**\n   * If the input string does not include a scheme, use this as the default\n   * scheme.\n   */\n  defaultScheme?: \"http\" | \"https\"\n}\n\n/**\n * Parse a string as a URL, with options to enforce or default the scheme.\n */\nexport function parseUrl(url: string, options: URLParseOptions = {}): URL {\n  const { scheme, defaultScheme } = options\n\n  const schemeRegex = /^[a-zA-Z]+:\\/\\//\n\n  if (scheme) {\n    // Force the scheme by removing any existing scheme and prepending the desired one\n    url = url.replace(schemeRegex, \"\")\n    url = `${scheme}://${url}`\n  } else if (defaultScheme && !schemeRegex.test(url)) {\n    // No scheme is present, add the default one\n    url = `${defaultScheme}://${url}`\n  }\n\n  return new URL(url)\n}\n\n/**\n * Attempt to parse a string as a URL; return undefined if we can't\n */\nexport function tryParseUrl(\n  url: string,\n  options: URLParseOptions = {},\n): URL | undefined {\n  try {\n    return parseUrl(url, options)\n  } catch {\n    return undefined\n  }\n}\n\n/**\n * Permissively parse a NOVA instance URL from a config variable.\n * If scheme is not specified, defaults to https for *.wandelbots.io hosts,\n * and http otherwise.\n * Throws an error if a valid URL could not be determined.\n */\nexport function parseNovaInstanceUrl(url: string): URL {\n  const testUrl = tryParseUrl(url, { defaultScheme: \"http\" })\n  if (testUrl?.host.endsWith(\".wandelbots.io\")) {\n    return parseUrl(url, { defaultScheme: \"https\" })\n  } else {\n    return parseUrl(url, { defaultScheme: \"http\" })\n  }\n}\n\n/** Try to parse something as JSON; return undefined if we can't */\n// biome-ignore lint/suspicious/noExplicitAny: it's json\nexport function tryParseJson(json: unknown): any {\n  try {\n    return JSON.parse(json as string)\n  } catch {\n    return undefined\n  }\n}\n\n/** Try to turn something into JSON; return undefined if we can't */\nexport function tryStringifyJson(json: unknown): string | undefined {\n  try {\n    return JSON.stringify(json)\n  } catch {\n    return undefined\n  }\n}\n\n/**\n * Converts object parameters to query string.\n * e.g. { a: \"1\", b: \"2\" } => \"?a=1&b=2\"\n *      {} => \"\"\n */\nexport function makeUrlQueryString(obj: Record<string, string>): string {\n  const str = new URLSearchParams(obj).toString()\n  return str ? `?${str}` : \"\"\n}\n\n/** Convert radians to degrees */\nexport function radiansToDegrees(radians: number): number {\n  return radians * (180 / Math.PI)\n}\n\n/** Convert degrees to radians */\nexport function degreesToRadians(degrees: number): number {\n  return degrees * (Math.PI / 180)\n}\n\n/**\n * Check for coordinate system id equivalence, accounting for the \"world\" default\n * on empty/undefined values.\n */\nexport function isSameCoordinateSystem(\n  firstCoordSystem: string | undefined,\n  secondCoordSystem: string | undefined,\n) {\n  if (!firstCoordSystem) firstCoordSystem = \"world\"\n  if (!secondCoordSystem) secondCoordSystem = \"world\"\n\n  return firstCoordSystem === secondCoordSystem\n}\n\n/**\n * Helpful const for converting {x, y, z} to [x, y, z] and vice versa\n */\nexport const XYZ_TO_VECTOR = { x: 0, y: 1, z: 2 }\n"],"mappings":";;;;AAeA,SAAgB,SAAS,KAAa,UAA2B,CAAC,GAAQ;CACxE,MAAM,EAAE,QAAQ,kBAAkB;CAElC,MAAM,cAAc;CAEpB,IAAI,QAAQ;EAEV,MAAM,IAAI,QAAQ,aAAa,EAAE;EACjC,MAAM,GAAG,OAAO,KAAK;CACvB,OAAO,IAAI,iBAAiB,CAAC,YAAY,KAAK,GAAG,GAE/C,MAAM,GAAG,cAAc,KAAK;CAG9B,OAAO,IAAI,IAAI,GAAG;AACpB;;;;AAKA,SAAgB,YACd,KACA,UAA2B,CAAC,GACX;CACjB,IAAI;EACF,OAAO,SAAS,KAAK,OAAO;CAC9B,QAAQ;EACN;CACF;AACF;;;;;;;AAQA,SAAgB,qBAAqB,KAAkB;CAErD,IADgB,YAAY,KAAK,EAAE,eAAe,OAAO,CAC/C,GAAG,KAAK,SAAS,gBAAgB,GACzC,OAAO,SAAS,KAAK,EAAE,eAAe,QAAQ,CAAC;MAE/C,OAAO,SAAS,KAAK,EAAE,eAAe,OAAO,CAAC;AAElD;;AAIA,SAAgB,aAAa,MAAoB;CAC/C,IAAI;EACF,OAAO,KAAK,MAAM,IAAc;CAClC,QAAQ;EACN;CACF;AACF;;AAGA,SAAgB,iBAAiB,MAAmC;CAClE,IAAI;EACF,OAAO,KAAK,UAAU,IAAI;CAC5B,QAAQ;EACN;CACF;AACF;;;;;;AAOA,SAAgB,mBAAmB,KAAqC;CACtE,MAAM,MAAM,IAAI,gBAAgB,GAAG,EAAE,SAAS;CAC9C,OAAO,MAAM,IAAI,QAAQ;AAC3B;;AAGA,SAAgB,iBAAiB,SAAyB;CACxD,OAAO,WAAW,MAAM,KAAK;AAC/B;;AAGA,SAAgB,iBAAiB,SAAyB;CACxD,OAAO,WAAW,KAAK,KAAK;AAC9B;;;;;AAMA,SAAgB,uBACd,kBACA,mBACA;CACA,IAAI,CAAC,kBAAkB,mBAAmB;CAC1C,IAAI,CAAC,mBAAmB,oBAAoB;CAE5C,OAAO,qBAAqB;AAC9B;;;;AAKA,MAAa,gBAAgB;CAAE,GAAG;CAAG,GAAG;CAAG,GAAG;AAAE"}