{"version":3,"file":"defaultResolver.cjs","names":[],"sources":["../src/defaultResolver.ts"],"sourcesContent":["import {\n  AND_OR_OPERATORS,\n  BASIC_GRAPHQL_TYPE_VALUES,\n  PAGE_ARG_DEFAULT,\n  PER_PAGE_ARG_DEFAULT,\n  QUERY_ORDER_VALUES,\n} from './constants'\nimport type { FieldLines, TypeDefLines } from './types'\nimport { createTypeDefLines, getDefaultFieldLinesObject, getReturnTypeName } from './utils'\n\nexport const VALID_RETURN_TYPES_FOR_WHERE = [\n  'String',\n  'Int',\n  'Float',\n  'Boolean',\n  'Date',\n  'DateTime',\n] as const\n\nexport function populateArgsDefForDefaultResolver(options: {\n  fieldLineConfig: FieldLines[string]\n  graphqlType: string\n  fieldKey: string\n  isList: boolean\n}) {\n  const whereOptionsInputName = getWhereOptionsInputName(options.graphqlType, options.fieldKey)\n  const orderEnumName = getQueryOrderEnumName(options.graphqlType, options.fieldKey)\n\n  const argsDef = {\n    ...(options.isList\n      ? {\n          page: 'Int',\n          perPage: 'Int',\n        }\n      : { id: 'String' }),\n    locale: 'String',\n    where: whereOptionsInputName,\n    order: `[${orderEnumName}!]`,\n  }\n  Object.entries(argsDef).forEach(([argKey, argDef]) => {\n    options.fieldLineConfig.argsDef[argKey] =\n      options.fieldLineConfig.argsDef[argKey] || new Set<string>([])\n\n    let def = argDef\n    // Set default values\n    if (argKey === 'page') def += ` = ${PAGE_ARG_DEFAULT}`\n    if (argKey === 'perPage') def += ` = ${PER_PAGE_ARG_DEFAULT}`\n\n    options.fieldLineConfig.argsDef[argKey].add(def)\n  })\n}\n\nexport function getWhereOptionsInputName<TType extends string, TField extends string>(\n  typeName: TType,\n  fieldName: TField\n) {\n  return generateGraphqlTypeName(typeName, fieldName, 'WhereOptions')\n}\n\nexport function getQueryOrderEnumName<TType extends string, TField extends string>(\n  typeName: TType,\n  fieldName: TField\n) {\n  return generateGraphqlTypeName(typeName, fieldName, 'SelectOrder')\n}\n\nexport function generateGraphqlTypeName<\n  TType extends string,\n  TField extends string,\n  TSuffix extends string,\n>(typeName: string, fieldName: string, suffix: TSuffix) {\n  const pascal = (name: string) => `${name[0].toUpperCase()}${name.substring(1)}`\n  return [typeName, suffix, fieldName]\n    .map(pascal)\n    .join('') as `${Capitalize<TType>}${Capitalize<TSuffix>}${Capitalize<TField>}`\n}\n\nexport function getOperatorInputName(\n  graphqlType: (typeof VALID_RETURN_TYPES_FOR_WHERE)[number]\n): `GeneOperator${string}Input` {\n  return `GeneOperator${graphqlType}Input`\n}\n\nexport function generateOperatorInputLines(\n  graphqlType: (typeof VALID_RETURN_TYPES_FOR_WHERE)[number]\n): FieldLines {\n  const fieldDefs = {\n    eq: graphqlType,\n    ne: graphqlType,\n    in: `[${graphqlType}]`,\n    notIn: `[${graphqlType}]`,\n    null: 'Boolean',\n\n    ...(graphqlType === 'String'\n      ? {\n          like: graphqlType,\n          notLike: graphqlType,\n        }\n      : ['Int', 'Float', 'Date', 'DateTime'].includes(graphqlType)\n        ? {\n            lt: graphqlType,\n            lte: graphqlType,\n            gt: graphqlType,\n            gte: graphqlType,\n          }\n        : {}),\n  }\n\n  const lines: FieldLines = {}\n  Object.entries(fieldDefs).forEach(([key, typeDef]) => {\n    lines[key] = { ...getDefaultFieldLinesObject(), ...lines[key], typeDef }\n  })\n  return lines\n}\n\nexport function generateDefaultQueryFilterTypeDefs(options: {\n  typeDefLines: TypeDefLines\n  graphqlType: string\n  fieldKey: string\n  fieldType: string\n}) {\n  const whereOptionsInputName = getWhereOptionsInputName(options.graphqlType, options.fieldKey)\n  const orderEnumName = getQueryOrderEnumName(options.graphqlType, options.fieldKey)\n\n  const hasWhereInputDefined = whereOptionsInputName in options.typeDefLines\n  const hasOrderEnumDefined = orderEnumName in options.typeDefLines\n\n  if (hasWhereInputDefined && hasOrderEnumDefined) return\n\n  if (!hasWhereInputDefined) {\n    createTypeDefLines(options.typeDefLines, 'input', whereOptionsInputName)\n\n    // Add \"and\" and \"or\" operators\n    AND_OR_OPERATORS.forEach(operator => {\n      options.typeDefLines[whereOptionsInputName].lines[operator] = {\n        ...getDefaultFieldLinesObject(),\n        ...options.typeDefLines[whereOptionsInputName].lines[operator],\n      }\n      options.typeDefLines[whereOptionsInputName].lines[operator].typeDef =\n        `[${whereOptionsInputName}!]`\n    })\n  }\n  if (!hasOrderEnumDefined) {\n    createTypeDefLines(options.typeDefLines, 'enum', orderEnumName)\n  }\n\n  if (options.fieldType && BASIC_GRAPHQL_TYPE_VALUES.includes(options.fieldType as 'ID')) return\n\n  if (!(options.fieldType in options.typeDefLines)) {\n    throw new Error(`Cannot find \"${options.fieldType}\" definition used as \"returnType\".`)\n  }\n\n  const findValidInputType = (type: string) => {\n    return VALID_RETURN_TYPES_FOR_WHERE.find(validType => validType === getReturnTypeName(type))\n  }\n  const operatorInputsToGenerate = new Set<\n    [string, NonNullable<ReturnType<typeof findValidInputType>>]\n  >([])\n\n  Object.entries(options.typeDefLines[options.fieldType].lines).forEach(\n    ([returnFieldKey, returnFieldConfig]) => {\n      // Where Options Input\n      options.typeDefLines[whereOptionsInputName].lines[returnFieldKey] = {\n        ...getDefaultFieldLinesObject(),\n        ...options.typeDefLines[whereOptionsInputName].lines[returnFieldKey],\n      }\n\n      const returnFieldType = { ...getDefaultFieldLinesObject(), ...returnFieldConfig }\n\n      const validInputType = findValidInputType(returnFieldType.typeDef)\n      let whereTypeDef = ''\n\n      if (validInputType) {\n        const operatorInputName = getOperatorInputName(validInputType)\n        operatorInputsToGenerate.add([operatorInputName, validInputType])\n        whereTypeDef = operatorInputName\n      }\n      // If the return type is another Graphql Type because the field is an association\n      else if (returnFieldType.typeDef in options.typeDefLines) {\n        for (const key in options.typeDefLines[returnFieldType.typeDef].lines) {\n          if (key === 'id') {\n            const validInputType = findValidInputType(\n              options.typeDefLines[returnFieldType.typeDef].lines[key].typeDef\n            )\n            if (validInputType) {\n              const operatorInputName = getOperatorInputName(validInputType)\n              operatorInputsToGenerate.add([operatorInputName, validInputType])\n              whereTypeDef = operatorInputName\n            }\n            break\n          }\n        }\n      }\n\n      operatorInputsToGenerate.forEach(([operatorInputName, validInputType]) => {\n        if (!(operatorInputName in options.typeDefLines)) {\n          createTypeDefLines(options.typeDefLines, 'input', operatorInputName)\n\n          options.typeDefLines[operatorInputName].lines = generateOperatorInputLines(validInputType)\n        }\n      })\n\n      if (!whereTypeDef) {\n        delete options.typeDefLines[whereOptionsInputName].lines[returnFieldKey]\n      } else {\n        options.typeDefLines[whereOptionsInputName].lines[returnFieldKey].typeDef = whereTypeDef\n      }\n\n      // Query Order Enum\n      QUERY_ORDER_VALUES.forEach(orderValue => {\n        const key = `${returnFieldKey}_${orderValue}`\n        options.typeDefLines[orderEnumName].lines[key] = getDefaultFieldLinesObject()\n      })\n    }\n  )\n}\n"],"mappings":"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"}