{"version":3,"file":"generate-Ch5LEiBr.cjs","names":["GraphQLObjectType","GraphQLScalarType","GraphQLEnumType","GraphQLInputObjectType","GraphQLList","GraphQLNonNull"],"sources":["../lib/client/generate/client.ts","../lib/client/generate/tsRepresentation.ts","../lib/client/generate/generate.ts"],"sourcesContent":["export const autoGenerationPreamble = `// This file is auto-generated. Do not edit manually.\n// @generated\n/* eslint-disable */\n// biome-ignore-all lint: This file is auto-generated\n// biome-ignore-all assist: This file is auto-generated\n// biome-ignore-all syntax: This file is auto-generated`;\n\nexport function generateClient({\n  apiUrl,\n  rumbleImportPath,\n  useExternalUrqlClient,\n  availableSubscriptions,\n  schemaPath,\n  forceReactivity,\n  autoIncludeId,\n}: {\n  rumbleImportPath: string;\n  useExternalUrqlClient: string | boolean;\n  apiUrl?: string;\n  availableSubscriptions: Set<string>;\n  schemaPath: string;\n  forceReactivity?: boolean;\n  autoIncludeId?: string | boolean;\n}) {\n  const imports: string[] = [];\n  let code: string = \"\";\n\n  const idInclude =\n    typeof autoIncludeId === \"string\"\n      ? `\\n    autoIncludeIdField: '${autoIncludeId}'`\n      : autoIncludeId === true\n        ? `\\n    autoIncludeIdField: 'id'`\n        : \"\";\n\n  if (typeof useExternalUrqlClient === \"string\") {\n    imports.push(`import { urqlClient } from \"${useExternalUrqlClient}\";`);\n  }\n\n  imports.push(`import { Client, fetchExchange } from '@urql/core';`);\n  imports.push(`import { cacheExchange } from '@urql/exchange-graphcache';`);\n  imports.push(`import { nativeDateExchange } from '${rumbleImportPath}';`);\n  imports.push(`import { schema } from '${schemaPath}';`);\n\n  imports.push(\n    `import { makeLiveQuery, makeMutation, makeSubscription, makeQuery } from '${rumbleImportPath}';`,\n  );\n\n  const forceReactivityFieldString =\n    typeof forceReactivity === \"boolean\" && forceReactivity\n      ? `\\n    forceReactivity: true`\n      : \"\";\n  const forceReactivityTypeString =\n    typeof forceReactivity === \"boolean\" && forceReactivity ? \", true\" : \"\";\n\n  code += `\nexport const defaultOptions: ConstructorParameters<Client>[0] = {\n  url: \"${apiUrl ?? \"PLEASE PROVIDE A URL WHEN GENERATING OR IMPORT AN EXTERNAL URQL CLIENT\"}\",\n  fetchSubscriptions: true,\n  exchanges: [cacheExchange({ schema }), nativeDateExchange, fetchExchange],\n  fetchOptions: {\n    credentials: \"include\",\n  },\n  requestPolicy: \"cache-and-network\",\n}\n`;\n\n  if (!useExternalUrqlClient) {\n    code += `\nconst urqlClient = new Client(defaultOptions);\n`;\n  }\n\n  code += `\nexport const client = {\n  /**\n   * A query and subscription combination. First queries and if exists, also subscribes to a subscription of the same name.\n   * Combines the results of both, so the result is first the query result and then live updates from the subscription.\n   * Assumes that the query and subscription return the same fields as per default when using the rumble query helpers.\n   * If no subscription with the same name exists, this will just be a query.\n   *\n   * Internally, this does some magic to make the data reactive with Svelte's reactivity system. But it can be used with other frameworks as well.\n   */\n  liveQuery: makeLiveQuery<Query${forceReactivityTypeString}>({\n\t  urqlClient,\n\t  availableSubscriptions: new Set([${availableSubscriptions\n      .values()\n      .toArray()\n      .map((value) => `\"${value}\"`)\n      .join(\", \")}]),\n\t\tschema,${forceReactivityFieldString}${idInclude}\n  }),\n  /**\n   * A mutation that can be used to e.g. create, update or delete data.\n   */\n  mutate: makeMutation<Mutation>({\n\t  urqlClient,\n\t\tschema,${idInclude}\n  }),\n  /**\n   * A continuous stream of results that updates when the server sends new data.\n   */\n  subscribe: makeSubscription<Subscription>({\n\t  urqlClient,\n\t\tschema,${idInclude}\n  }),\n  /**\n   * A one-time fetch of data.\n   */\n  query: makeQuery<Query${forceReactivityTypeString}>({\n\t  urqlClient,\n\t\tschema,${forceReactivityFieldString}${idInclude}\n  }),\n}`;\n\n  return {\n    imports,\n    code,\n  };\n}\n","import {\n  type GraphQLArgument,\n  GraphQLEnumType,\n  GraphQLInputObjectType,\n  type GraphQLInputType,\n  GraphQLList,\n  GraphQLNonNull,\n  GraphQLObjectType,\n  type GraphQLOutputType,\n  GraphQLScalarType,\n} from \"graphql\";\n\ntype GraphQLType =\n  | GraphQLObjectType<any, any>\n  | GraphQLEnumType\n  | GraphQLInputObjectType\n  | GraphQLScalarType;\n\nexport function makeTSRepresentation(model: GraphQLType) {\n  if (model instanceof GraphQLObjectType) {\n    return makeTSTypeFromObject(model);\n  } else if (model instanceof GraphQLScalarType) {\n    return mapGraphqlScalarToTSTypeString(model);\n  } else if (model instanceof GraphQLEnumType) {\n    return makeStringLiteralUnionFromEnum(model);\n  } else if (model instanceof GraphQLInputObjectType) {\n    return makeTSTypeFromInputObject(model);\n  }\n\n  throw new Error(`Unknown model type: ${model}`);\n}\n\nfunction makeTSTypeFromObject(model: GraphQLObjectType) {\n  const stringifiedFields = new Map<string, string>();\n  for (const [key, value] of Object.entries(model.getFields())) {\n    stringifiedFields.set(key, makeTSObjectTypeField(value.type, value.args));\n  }\n\n  return `{\n  ${stringifiedFields\n    .entries()\n    .map(([key, value]) => `${key}: ${value}`)\n    .toArray()\n    .join(\",\\n  \")}    \n}`;\n}\n\nfunction makeTSTypeFromInputObject(model: GraphQLInputObjectType) {\n  const stringifiedFields = new Map<string, string>();\n  for (const [key, value] of Object.entries(model.getFields())) {\n    stringifiedFields.set(key, makeTSInputObjectTypeField(value.type));\n  }\n\n  return `{\n  ${stringifiedFields\n    .entries()\n    .map(\n      ([key, value]) =>\n        `${key}${value.includes(\"| undefined\") ? \"?\" : \"\"}: ${value}`,\n    )\n    .toArray()\n    .join(\",\\n  \")}    \n}`;\n}\n\nfunction makeTSObjectTypeField(\n  returnType: GraphQLOutputType,\n  args?: readonly GraphQLArgument[],\n) {\n  let isNonNullReturnType = false;\n  let isList = false;\n\n  for (let index = 0; index < 3; index++) {\n    if (returnType instanceof GraphQLList) {\n      isList = true;\n      returnType = returnType.ofType;\n    }\n\n    if (returnType instanceof GraphQLNonNull) {\n      isNonNullReturnType = true;\n      returnType = returnType.ofType;\n    }\n  }\n\n  let returnTypeString = (returnType as any).name;\n\n  if (isList) {\n    returnTypeString += \"[]\";\n  }\n\n  if (!isNonNullReturnType) {\n    returnTypeString += \" | null\";\n  }\n\n  const isRelationType = returnType instanceof GraphQLObjectType;\n\n  const argsStringMap = new Map<string, string>();\n\n  for (const arg of args ?? []) {\n    argsStringMap.set(arg.name, stringifyTSObjectArg(arg.type));\n  }\n\n  if (isRelationType || argsStringMap.size > 0) {\n    const makePOptional = argsStringMap\n      .entries()\n      .every(([, value]) => value.includes(\"| undefined\"));\n    const argsString =\n      argsStringMap.size > 0\n        ? `p${makePOptional ? \"?\" : \"\"}: {\n  ${argsStringMap\n    .entries()\n    .map(\n      ([key, value]) =>\n        `  ${key}${value.includes(\"| undefined\") ? \"?\" : \"\"}: ${value}`,\n    )\n    .toArray()\n    .join(\",\\n  \")}\n  }`\n        : \"\";\n\n    return `(${argsString}) => ${returnTypeString}`;\n  } else {\n    return returnTypeString;\n  }\n}\n\nfunction makeTSInputObjectTypeField(returnType: GraphQLInputType) {\n  let isNonNullReturnType = false;\n  let isList = false;\n\n  for (let index = 0; index < 3; index++) {\n    if (returnType instanceof GraphQLList) {\n      isList = true;\n      returnType = returnType.ofType;\n    }\n\n    if (returnType instanceof GraphQLNonNull) {\n      isNonNullReturnType = true;\n      returnType = returnType.ofType;\n    }\n  }\n\n  let returnTypeString = (returnType as any).name;\n\n  if (isList) {\n    returnTypeString += \"[]\";\n  }\n\n  if (!isNonNullReturnType) {\n    returnTypeString += \" | null | undefined\";\n  } else if (isList) {\n    returnTypeString += \" | undefined\";\n  }\n\n  return returnTypeString;\n}\n\nfunction stringifyTSObjectArg(arg: any) {\n  let ret = \"unknown\";\n  let isNullable = true;\n\n  if (arg instanceof GraphQLNonNull) {\n    isNullable = false;\n    arg = arg.ofType;\n  }\n\n  if (\n    arg instanceof GraphQLInputObjectType ||\n    arg instanceof GraphQLScalarType\n  ) {\n    ret = arg.name;\n  }\n\n  if (isNullable) {\n    ret += \" | null | undefined\"; // we also want undefined in args\n  }\n\n  return ret;\n}\n\nfunction mapGraphqlScalarToTSTypeString(arg: any) {\n  switch (arg.name) {\n    case \"ID\":\n      return \"string\";\n    case \"String\":\n      return \"string\";\n    case \"Boolean\":\n      return \"boolean\";\n    case \"Int\":\n      return \"number\";\n    case \"Float\":\n      return \"number\";\n    case \"Date\":\n      return \"Date\";\n    case \"DateTime\":\n      return \"Date\";\n    case \"JSON\":\n      return \"any\";\n    default:\n      return \"unknown\";\n  }\n}\n\nfunction makeStringLiteralUnionFromEnum(enumType: GraphQLEnumType) {\n  return enumType\n    .getValues()\n    .map((value) => `\"${value.name}\"`)\n    .join(\" | \");\n}\n","import { access, mkdir, rm, writeFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport {\n  getIntrospectedSchema,\n  minifyIntrospectionQuery,\n} from \"@urql/introspection\";\nimport { uneval } from \"devalue\";\nimport type { GraphQLSchema } from \"graphql\";\nimport { autoGenerationPreamble, generateClient } from \"./client\";\nimport { makeTSRepresentation } from \"./tsRepresentation\";\n\nexport async function generateFromSchema({\n  outputPath,\n  schema,\n  rumbleImportPath = \"@m1212e/rumble/client\",\n  apiUrl,\n  useExternalUrqlClient = false,\n  removeExisting = true,\n  forceReactivity,\n  autoIncludeIdField,\n}: {\n  schema: GraphQLSchema;\n  outputPath: string;\n  rumbleImportPath?: string;\n  apiUrl?: string;\n  useExternalUrqlClient?: boolean | string;\n  removeExisting?: boolean;\n  forceReactivity?: boolean;\n  autoIncludeIdField?: string | boolean;\n}) {\n  if (removeExisting) {\n    try {\n      await access(outputPath);\n      await rm(outputPath, { recursive: true, force: true });\n    } catch (_error) {}\n  }\n\n  await mkdir(outputPath, { recursive: true });\n\n  if (!outputPath.endsWith(\"/\")) {\n    outputPath += \"/\";\n  }\n\n  const imports: string[] = [];\n  let code = \"\";\n\n  const typeMap = new Map<string, any>();\n  for (const [key, object] of Object.entries(schema.getTypeMap())) {\n    if (key.startsWith(\"__\")) continue;\n    typeMap.set(key, object);\n  }\n\n  for (const [key, object] of typeMap.entries()) {\n    const rep = makeTSRepresentation(object);\n\n    if (rep === key) {\n      continue;\n    }\n\n    code += `\nexport type ${key} = ${rep};\n\t\t`;\n  }\n\n  const schemaFileName = \"schema\";\n\n  const c = generateClient({\n    apiUrl,\n    schemaPath: `./${schemaFileName}`,\n    useExternalUrqlClient,\n    rumbleImportPath,\n    availableSubscriptions: new Set(\n      Object.keys(schema.getSubscriptionType()?.getFields() || {}),\n    ),\n    forceReactivity,\n    autoIncludeId: autoIncludeIdField,\n  });\n\n  imports.push(...c.imports);\n  code += c.code;\n\n  await Promise.all([\n    writeFile(\n      join(outputPath, \"client.ts\"),\n      `${autoGenerationPreamble}\\n${imports.join(\"\\n\")}\\n${code}`,\n    ),\n    writeFile(\n      join(outputPath, `${schemaFileName}.ts`),\n      `${autoGenerationPreamble}\nimport type { IntrospectionQuery } from \"graphql\";\nexport const schema = ${uneval(minifyIntrospectionQuery(getIntrospectedSchema(schema), { includeEnums: true, includeScalars: true, includeInputs: true }))} as IntrospectionQuery`,\n    ),\n  ]);\n}\n"],"mappings":";;;;;;AAAA,MAAa,yBAAyB;;;;;;AAOtC,SAAgB,eAAe,EAC7B,QACA,kBACA,uBACA,wBACA,YACA,iBACA,iBASC;CACD,MAAM,UAAoB,CAAC;CAC3B,IAAI,OAAe;CAEnB,MAAM,YACJ,OAAO,kBAAkB,WACrB,8BAA8B,cAAc,KAC5C,kBAAkB,OAChB,mCACA;CAER,IAAI,OAAO,0BAA0B,UACnC,QAAQ,KAAK,+BAA+B,sBAAsB,GAAG;CAGvE,QAAQ,KAAK,qDAAqD;CAClE,QAAQ,KAAK,4DAA4D;CACzE,QAAQ,KAAK,uCAAuC,iBAAiB,GAAG;CACxE,QAAQ,KAAK,2BAA2B,WAAW,GAAG;CAEtD,QAAQ,KACN,6EAA6E,iBAAiB,GAChG;CAEA,MAAM,6BACJ,OAAO,oBAAoB,aAAa,kBACpC,gCACA;CACN,MAAM,4BACJ,OAAO,oBAAoB,aAAa,kBAAkB,WAAW;CAEvE,QAAQ;;UAEA,UAAU,yEAAyE;;;;;;;;;CAU3F,IAAI,CAAC,uBACH,QAAQ;;;CAKV,QAAQ;;;;;;;;;;kCAUwB,0BAA0B;;sCAEtB,uBAC/B,OAAO,CAAC,CACR,QAAQ,CAAC,CACT,KAAK,UAAU,IAAI,MAAM,EAAE,CAAC,CAC5B,KAAK,IAAI,EAAE;WACP,6BAA6B,UAAU;;;;;;;WAOvC,UAAU;;;;;;;WAOV,UAAU;;;;;0BAKK,0BAA0B;;WAEzC,6BAA6B,UAAU;;;CAIhD,OAAO;EACL;EACA;CACF;AACF;;;ACpGA,SAAgB,qBAAqB,OAAoB;CACvD,IAAI,iBAAiBA,QAAAA,mBACnB,OAAO,qBAAqB,KAAK;MAC5B,IAAI,iBAAiBC,QAAAA,mBAC1B,OAAO,+BAA+B,KAAK;MACtC,IAAI,iBAAiBC,QAAAA,iBAC1B,OAAO,+BAA+B,KAAK;MACtC,IAAI,iBAAiBC,QAAAA,wBAC1B,OAAO,0BAA0B,KAAK;CAGxC,MAAM,IAAI,MAAM,uBAAuB,OAAO;AAChD;AAEA,SAAS,qBAAqB,OAA0B;CACtD,MAAM,oCAAoB,IAAI,IAAoB;CAClD,KAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,MAAM,UAAU,CAAC,GACzD,kBAAkB,IAAI,KAAK,sBAAsB,MAAM,MAAM,MAAM,IAAI,CAAC;CAG1E,OAAO;IACL,kBACC,QAAQ,CAAC,CACT,KAAK,CAAC,KAAK,WAAW,GAAG,IAAI,IAAI,OAAO,CAAC,CACzC,QAAQ,CAAC,CACT,KAAK,OAAO,EAAE;;AAEnB;AAEA,SAAS,0BAA0B,OAA+B;CAChE,MAAM,oCAAoB,IAAI,IAAoB;CAClD,KAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,MAAM,UAAU,CAAC,GACzD,kBAAkB,IAAI,KAAK,2BAA2B,MAAM,IAAI,CAAC;CAGnE,OAAO;IACL,kBACC,QAAQ,CAAC,CACT,KACE,CAAC,KAAK,WACL,GAAG,MAAM,MAAM,SAAS,aAAa,IAAI,MAAM,GAAG,IAAI,OAC1D,CAAC,CACA,QAAQ,CAAC,CACT,KAAK,OAAO,EAAE;;AAEnB;AAEA,SAAS,sBACP,YACA,MACA;CACA,IAAI,sBAAsB;CAC1B,IAAI,SAAS;CAEb,KAAK,IAAI,QAAQ,GAAG,QAAQ,GAAG,SAAS;EACtC,IAAI,sBAAsBC,QAAAA,aAAa;GACrC,SAAS;GACT,aAAa,WAAW;EAC1B;EAEA,IAAI,sBAAsBC,QAAAA,gBAAgB;GACxC,sBAAsB;GACtB,aAAa,WAAW;EAC1B;CACF;CAEA,IAAI,mBAAoB,WAAmB;CAE3C,IAAI,QACF,oBAAoB;CAGtB,IAAI,CAAC,qBACH,oBAAoB;CAGtB,MAAM,iBAAiB,sBAAsBL,QAAAA;CAE7C,MAAM,gCAAgB,IAAI,IAAoB;CAE9C,KAAK,MAAM,OAAO,QAAQ,CAAC,GACzB,cAAc,IAAI,IAAI,MAAM,qBAAqB,IAAI,IAAI,CAAC;CAG5D,IAAI,kBAAkB,cAAc,OAAO,GAAG;EAC5C,MAAM,gBAAgB,cACnB,QAAQ,CAAC,CACT,OAAO,GAAG,WAAW,MAAM,SAAS,aAAa,CAAC;EAerD,OAAO,IAbL,cAAc,OAAO,IACjB,IAAI,gBAAgB,MAAM,GAAG;IACnC,cACC,QAAQ,CAAC,CACT,KACE,CAAC,KAAK,WACL,KAAK,MAAM,MAAM,SAAS,aAAa,IAAI,MAAM,GAAG,IAAI,OAC5D,CAAC,CACA,QAAQ,CAAC,CACT,KAAK,OAAO,EAAE;OAET,GAEgB,OAAO;CAC/B,OACE,OAAO;AAEX;AAEA,SAAS,2BAA2B,YAA8B;CAChE,IAAI,sBAAsB;CAC1B,IAAI,SAAS;CAEb,KAAK,IAAI,QAAQ,GAAG,QAAQ,GAAG,SAAS;EACtC,IAAI,sBAAsBI,QAAAA,aAAa;GACrC,SAAS;GACT,aAAa,WAAW;EAC1B;EAEA,IAAI,sBAAsBC,QAAAA,gBAAgB;GACxC,sBAAsB;GACtB,aAAa,WAAW;EAC1B;CACF;CAEA,IAAI,mBAAoB,WAAmB;CAE3C,IAAI,QACF,oBAAoB;CAGtB,IAAI,CAAC,qBACH,oBAAoB;MACf,IAAI,QACT,oBAAoB;CAGtB,OAAO;AACT;AAEA,SAAS,qBAAqB,KAAU;CACtC,IAAI,MAAM;CACV,IAAI,aAAa;CAEjB,IAAI,eAAeA,QAAAA,gBAAgB;EACjC,aAAa;EACb,MAAM,IAAI;CACZ;CAEA,IACE,eAAeF,QAAAA,0BACf,eAAeF,QAAAA,mBAEf,MAAM,IAAI;CAGZ,IAAI,YACF,OAAO;CAGT,OAAO;AACT;AAEA,SAAS,+BAA+B,KAAU;CAChD,QAAQ,IAAI,MAAZ;EACE,KAAK,MACH,OAAO;EACT,KAAK,UACH,OAAO;EACT,KAAK,WACH,OAAO;EACT,KAAK,OACH,OAAO;EACT,KAAK,SACH,OAAO;EACT,KAAK,QACH,OAAO;EACT,KAAK,YACH,OAAO;EACT,KAAK,QACH,OAAO;EACT,SACE,OAAO;CACX;AACF;AAEA,SAAS,+BAA+B,UAA2B;CACjE,OAAO,SACJ,UAAU,CAAC,CACX,KAAK,UAAU,IAAI,MAAM,KAAK,EAAE,CAAC,CACjC,KAAK,KAAK;AACf;;;ACrMA,eAAsB,mBAAmB,EACvC,YACA,QACA,mBAAmB,yBACnB,QACA,wBAAwB,OACxB,iBAAiB,MACjB,iBACA,sBAUC;CACD,IAAI,gBACF,IAAI;EACF,OAAA,GAAA,iBAAA,OAAA,CAAa,UAAU;EACvB,OAAA,GAAA,iBAAA,GAAA,CAAS,YAAY;GAAE,WAAW;GAAM,OAAO;EAAK,CAAC;CACvD,SAAS,QAAQ,CAAC;CAGpB,OAAA,GAAA,iBAAA,MAAA,CAAY,YAAY,EAAE,WAAW,KAAK,CAAC;CAE3C,IAAI,CAAC,WAAW,SAAS,GAAG,GAC1B,cAAc;CAGhB,MAAM,UAAoB,CAAC;CAC3B,IAAI,OAAO;CAEX,MAAM,0BAAU,IAAI,IAAiB;CACrC,KAAK,MAAM,CAAC,KAAK,WAAW,OAAO,QAAQ,OAAO,WAAW,CAAC,GAAG;EAC/D,IAAI,IAAI,WAAW,IAAI,GAAG;EAC1B,QAAQ,IAAI,KAAK,MAAM;CACzB;CAEA,KAAK,MAAM,CAAC,KAAK,WAAW,QAAQ,QAAQ,GAAG;EAC7C,MAAM,MAAM,qBAAqB,MAAM;EAEvC,IAAI,QAAQ,KACV;EAGF,QAAQ;cACE,IAAI,KAAK,IAAI;;CAEzB;CAEA,MAAM,iBAAiB;CAEvB,MAAM,IAAI,eAAe;EACvB;EACA,YAAY,KAAK;EACjB;EACA;EACA,wBAAwB,IAAI,IAC1B,OAAO,KAAK,OAAO,oBAAoB,CAAC,EAAE,UAAU,KAAK,CAAC,CAAC,CAC7D;EACA;EACA,eAAe;CACjB,CAAC;CAED,QAAQ,KAAK,GAAG,EAAE,OAAO;CACzB,QAAQ,EAAE;CAEV,MAAM,QAAQ,IAAI,EAAA,GAAA,iBAAA,UAAA,EAAA,GAAA,UAAA,KAAA,CAET,YAAY,WAAW,GAC5B,GAAG,uBAAuB,IAAI,QAAQ,KAAK,IAAI,EAAE,IAAI,MACvD,IAAA,GAAA,iBAAA,UAAA,EAAA,GAAA,UAAA,KAAA,CAEO,YAAY,GAAG,eAAe,IAAI,GACvC,GAAG,uBAAuB;;6IAE8C,MAAM,GAAG;EAAE,cAAc;EAAM,gBAAgB;EAAM,eAAe;CAAK,CAAC,CAAC,EAAE,uBACvJ,CACF,CAAC;AACH"}