{"version":3,"file":"shared.mjs","names":[],"sources":["../src/shared.ts"],"sourcesContent":["/* -------------------------------------------------------------------\n\n                       🗲 Storm Software - Stryke\n\n This code was released as part of the Stryke project. Stryke\n is maintained by Storm Software under the Apache-2.0 license, and is\n free for commercial and private use. For more information, please visit\n our licensing page at https://stormsoftware.com/licenses/projects/stryke.\n\n Website:                  https://stormsoftware.com\n Repository:               https://github.com/storm-software/stryke\n Documentation:            https://docs.stormsoftware.com/projects/stryke\n Contact:                  https://stormsoftware.com/contact\n\n SPDX-License-Identifier:  Apache-2.0\n\n ------------------------------------------------------------------- */\n\nimport { Temporal } from \"@js-temporal/polyfill\";\nimport { joinPaths } from \"@stryke/path/join-paths\";\nimport type { StormURLInterface } from \"@stryke/url/types\";\nimport type { QueryClientConfig } from \"@tanstack/react-query\";\nimport {\n  defaultShouldDehydrateQuery,\n  QueryClient\n} from \"@tanstack/react-query\";\nimport type { DataTransformer } from \"@trpc/server/unstable-core-do-not-import\";\nimport defu from \"defu\";\nimport superjson from \"superjson\";\n\nexport function getTRPCServerUrl(\n  baseUrl: string | StormURLInterface,\n  version: number | null = 1\n) {\n  return joinPaths(\n    typeof baseUrl === \"string\" ? baseUrl : baseUrl.host || \"\",\n    \"api\",\n    version ? `v${version}` : \"\",\n    \"trpc\"\n  );\n}\n\nsuperjson.registerCustom(\n  {\n    isApplicable: (v): v is Temporal.PlainDate =>\n      v instanceof Temporal.PlainDate,\n    serialize: v => v.toJSON(),\n    deserialize: v => Temporal.PlainDate.from(v)\n  },\n  \"Temporal.PlainDate\"\n);\n\nsuperjson.registerCustom(\n  {\n    isApplicable: (v): v is Temporal.PlainDateTime =>\n      v instanceof Temporal.PlainDateTime,\n    serialize: v => v.toJSON(),\n    deserialize: v => Temporal.PlainDateTime.from(v)\n  },\n  \"Temporal.PlainDateTime\"\n);\n\nexport const transformer = superjson as DataTransformer;\n\n/**\n * Create a TRPC Tanstack Query client.\n *\n * @param queryClientConfig - The query client config\n * @returns The TRPC Tanstack Query client\n */\nexport const createQueryClient = (\n  queryClientConfig: Partial<QueryClientConfig> = {}\n) =>\n  new QueryClient(\n    defu(queryClientConfig, {\n      defaultOptions: {\n        queries: {\n          // Since queries are prefetched on the server, we set a stale time so that\n          // queries aren't immediately re-fetched on the client\n          staleTime: 1000 * 30\n        },\n        dehydrate: {\n          // include pending queries in dehydration\n          // this allows us to prefetch in RSC and\n          // send promises over the RSC boundary\n          shouldDehydrateQuery: (query: any) =>\n            defaultShouldDehydrateQuery(query) ||\n            query.state.status === \"pending\",\n          // eslint-disable-next-line ts/unbound-method\n          serializeData: transformer.serialize\n        },\n        hydrate: {\n          // eslint-disable-next-line ts/unbound-method\n          deserializeData: transformer.deserialize\n        }\n      }\n    })\n  );\n"],"mappings":";;;;;;;AA8BA,SAAgB,iBACd,SACA,UAAyB,GACzB;CACA,OAAO,UACL,OAAO,YAAY,WAAW,UAAU,QAAQ,QAAQ,IACxD,OACA,UAAU,IAAI,YAAY,IAC1B,MACF;AACF;AAEA,UAAU,eACR;CACE,eAAe,MACb,aAAa,SAAS;CACxB,YAAW,MAAK,EAAE,OAAO;CACzB,cAAa,MAAK,SAAS,UAAU,KAAK,CAAC;AAC7C,GACA,oBACF;AAEA,UAAU,eACR;CACE,eAAe,MACb,aAAa,SAAS;CACxB,YAAW,MAAK,EAAE,OAAO;CACzB,cAAa,MAAK,SAAS,cAAc,KAAK,CAAC;AACjD,GACA,wBACF;AAEA,MAAa,cAAc;;;;;;;AAQ3B,MAAa,qBACX,oBAAgD,CAAC,MAEjD,IAAI,YACF,KAAK,mBAAmB,EACtB,gBAAgB;CACd,SAAS,EAGP,WAAW,IACb;CACA,WAAW;EAIT,uBAAuB,UACrB,4BAA4B,KAAK,KACjC,MAAM,MAAM,WAAW;EAEzB,eAAe,YAAY;CAC7B;CACA,SAAS,EAEP,iBAAiB,YAAY,YAC/B;AACF,EACF,CAAC,CACH"}