@fern-api/fdr-sdk 1.2.33-9d7e001fd0 → 1.2.33-e73a4c8a93

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (93) hide show
  1. package/dist/js/api-definition/index.js +170 -54
  2. package/dist/js/api-definition/index.js.map +1 -1
  3. package/dist/js/api-definition/index.mjs +169 -54
  4. package/dist/js/api-definition/index.mjs.map +1 -1
  5. package/dist/js/api-definition-lite/index.js.map +1 -1
  6. package/dist/js/client/FdrClient.js +17 -9
  7. package/dist/js/client/FdrClient.js.map +1 -1
  8. package/dist/js/client/FdrClient.mjs +17 -9
  9. package/dist/js/client/FdrClient.mjs.map +1 -1
  10. package/dist/js/client/types.js +22 -9
  11. package/dist/js/client/types.js.map +1 -1
  12. package/dist/js/client/types.mjs +22 -9
  13. package/dist/js/client/types.mjs.map +1 -1
  14. package/dist/js/converters/index.js +276 -71
  15. package/dist/js/converters/index.js.map +1 -1
  16. package/dist/js/converters/index.mjs +276 -71
  17. package/dist/js/converters/index.mjs.map +1 -1
  18. package/dist/js/index.js +276 -71
  19. package/dist/js/index.js.map +1 -1
  20. package/dist/js/index.mjs +276 -71
  21. package/dist/js/index.mjs.map +1 -1
  22. package/dist/js/navigation/index.js +273 -70
  23. package/dist/js/navigation/index.js.map +1 -1
  24. package/dist/js/navigation/index.mjs +273 -70
  25. package/dist/js/navigation/index.mjs.map +1 -1
  26. package/dist/js/navigation/ledger-root-builder.js +12 -8
  27. package/dist/js/navigation/ledger-root-builder.js.map +1 -1
  28. package/dist/js/navigation/ledger-root-builder.mjs +12 -8
  29. package/dist/js/navigation/ledger-root-builder.mjs.map +1 -1
  30. package/dist/js/navigation/types/latest.js.map +1 -1
  31. package/dist/js/navigation/types/latest.mjs.map +1 -1
  32. package/dist/js/navigation/types/v1.js.map +1 -1
  33. package/dist/js/navigation/types/v1.mjs.map +1 -1
  34. package/dist/js/orpc-client.js +20 -9
  35. package/dist/js/orpc-client.js.map +1 -1
  36. package/dist/js/orpc-client.mjs +19 -9
  37. package/dist/js/orpc-client.mjs.map +1 -1
  38. package/dist/tsconfig.tsbuildinfo +1 -1
  39. package/dist/types/api-definition/__test__/collect-type-tree.test.d.ts +2 -0
  40. package/dist/types/api-definition/__test__/collect-type-tree.test.d.ts.map +1 -0
  41. package/dist/types/api-definition/collect-referenced-types.d.ts.map +1 -1
  42. package/dist/types/api-definition/collect-type-tree.d.ts +4 -0
  43. package/dist/types/api-definition/collect-type-tree.d.ts.map +1 -1
  44. package/dist/types/api-definition/endpoint-context.d.ts +3 -0
  45. package/dist/types/api-definition/endpoint-context.d.ts.map +1 -1
  46. package/dist/types/api-definition/migrators/v1ToV2.d.ts +17 -7
  47. package/dist/types/api-definition/migrators/v1ToV2.d.ts.map +1 -1
  48. package/dist/types/api-definition/prune.d.ts +1 -0
  49. package/dist/types/api-definition/prune.d.ts.map +1 -1
  50. package/dist/types/api-definition/snippets/graphql-snippets.d.ts.map +1 -1
  51. package/dist/types/api-definition/typeid-visitor.d.ts.map +1 -1
  52. package/dist/types/api-definition-lite/index.d.ts +1 -1
  53. package/dist/types/api-definition-lite/index.d.ts.map +1 -1
  54. package/dist/types/converters/__test__/subtitle-round-trip.test.d.ts +2 -0
  55. package/dist/types/converters/__test__/subtitle-round-trip.test.d.ts.map +1 -0
  56. package/dist/types/converters/db/convertAPIDefinitionToDb.d.ts.map +1 -1
  57. package/dist/types/converters/read/convertDbAPIDefinitionToRead.d.ts +48 -14
  58. package/dist/types/converters/read/convertDbAPIDefinitionToRead.d.ts.map +1 -1
  59. package/dist/types/navigation/ApiDefinitionPruner.d.ts.map +1 -1
  60. package/dist/types/navigation/ApiTypeIdVisitor.d.ts.map +1 -1
  61. package/dist/types/navigation/ledger-root-builder.d.ts.map +1 -1
  62. package/dist/types/navigation/migrators/v1ToV2.d.ts.map +1 -1
  63. package/dist/types/navigation/types/latest.d.ts +18 -2
  64. package/dist/types/navigation/types/latest.d.ts.map +1 -1
  65. package/dist/types/navigation/types/v1.d.ts +2 -0
  66. package/dist/types/navigation/types/v1.d.ts.map +1 -1
  67. package/dist/types/navigation/utils/getApiReferenceId.d.ts.map +1 -1
  68. package/dist/types/navigation/utils/toApis.d.ts +3 -1
  69. package/dist/types/navigation/utils/toApis.d.ts.map +1 -1
  70. package/dist/types/navigation/versions/latest/NavigationNode.d.ts +1 -1
  71. package/dist/types/navigation/versions/latest/NavigationNode.d.ts.map +1 -1
  72. package/dist/types/navigation/versions/latest/NavigationNodeApiLeaf.d.ts +2 -2
  73. package/dist/types/navigation/versions/latest/NavigationNodeApiLeaf.d.ts.map +1 -1
  74. package/dist/types/navigation/versions/latest/__test__/GraphQlTypeNode.test.d.ts +2 -0
  75. package/dist/types/navigation/versions/latest/__test__/GraphQlTypeNode.test.d.ts.map +1 -0
  76. package/dist/types/navigation/versions/latest/getPageId.d.ts.map +1 -1
  77. package/dist/types/navigation/versions/v1/converters/ApiReferenceNavigationConverter.d.ts +1 -0
  78. package/dist/types/navigation/versions/v1/converters/ApiReferenceNavigationConverter.d.ts.map +1 -1
  79. package/dist/types/navigation/versions/v1/converters/__test__/ApiReferenceNavigationConverter.graphql.test.d.ts +2 -0
  80. package/dist/types/navigation/versions/v1/converters/__test__/ApiReferenceNavigationConverter.graphql.test.d.ts.map +1 -0
  81. package/dist/types/orpc-client/api/contract-db.d.ts +1880 -216
  82. package/dist/types/orpc-client/api/contract-db.d.ts.map +1 -1
  83. package/dist/types/orpc-client/api/contract-latest.d.ts +37 -10
  84. package/dist/types/orpc-client/api/contract-latest.d.ts.map +1 -1
  85. package/dist/types/orpc-client/api/contract-read.d.ts +1727 -216
  86. package/dist/types/orpc-client/api/contract-read.d.ts.map +1 -1
  87. package/dist/types/orpc-client/api/contract-register.d.ts +1905 -216
  88. package/dist/types/orpc-client/api/contract-register.d.ts.map +1 -1
  89. package/dist/types/orpc-client/api/shared.d.ts +99 -53
  90. package/dist/types/orpc-client/api/shared.d.ts.map +1 -1
  91. package/dist/types/orpc-client/files/contract.d.ts +5 -1
  92. package/dist/types/orpc-client/files/contract.d.ts.map +1 -1
  93. package/package.json +3 -3
@@ -74,6 +74,7 @@ __export(navigation_exports, {
74
74
  GraphQlOperationIdSchema: () => GraphQlOperationIdSchema,
75
75
  GraphQlOperationSchema: () => GraphQlOperationSchema,
76
76
  GraphQlOperationTypeSchema: () => GraphQlOperationTypeSchema,
77
+ GraphQlTypeCategorySchema: () => GraphQlTypeCategorySchema,
77
78
  GrpcId: () => GrpcId,
78
79
  GrpcIdSchema: () => GrpcIdSchema,
79
80
  GrpcMethod: () => GrpcMethod,
@@ -358,6 +359,7 @@ var GraphQlOperationIdSchema = z2.string();
358
359
  function GraphQlOperationId(value) {
359
360
  return value;
360
361
  }
362
+ var GraphQlTypeCategorySchema = z2.enum(["object", "input", "enum", "scalar", "interface", "union"]);
361
363
  var EnvironmentIdSchema = z2.string();
362
364
  function EnvironmentId(value) {
363
365
  return value;
@@ -592,12 +594,20 @@ var TypeReferenceSchema = z2.lazy(
592
594
  })
593
595
  ])
594
596
  );
597
+ var GraphQlArgumentSchema = z2.object({
598
+ description: z2.string().nullish(),
599
+ availability: AvailabilitySchema.nullish(),
600
+ name: z2.string(),
601
+ type: TypeReferenceSchema,
602
+ defaultValue: z2.unknown().nullish()
603
+ });
595
604
  var ObjectPropertySchema = z2.object({
596
605
  description: z2.string().nullish(),
597
606
  availability: AvailabilitySchema.nullish(),
598
607
  key: PropertyKeySchema,
599
608
  valueType: TypeReferenceSchema,
600
- propertyAccess: ObjectPropertyAccessSchema.nullish()
609
+ propertyAccess: ObjectPropertyAccessSchema.nullish(),
610
+ arguments: z2.array(GraphQlArgumentSchema).nullish()
601
611
  });
602
612
  var ObjectTypeSchema = z2.object({
603
613
  extends: z2.array(TypeIdSchema),
@@ -745,13 +755,6 @@ var ErrorExampleSchema = z2.object({
745
755
  responseBody: ExampleErrorResponseSchema
746
756
  });
747
757
  var GraphQlOperationTypeSchema = z2.enum(["QUERY", "MUTATION", "SUBSCRIPTION"]);
748
- var GraphQlArgumentSchema = z2.object({
749
- description: z2.string().nullish(),
750
- availability: AvailabilitySchema.nullish(),
751
- name: z2.string(),
752
- type: TypeReferenceSchema,
753
- defaultValue: z2.unknown().nullish()
754
- });
755
758
  var GraphQlExampleSchema = z2.object({
756
759
  description: z2.string().nullish(),
757
760
  name: z2.string().nullish(),
@@ -774,6 +777,7 @@ var GraphQlOperationSchema = z2.object({
774
777
  operationType: GraphQlOperationTypeSchema,
775
778
  name: z2.string(),
776
779
  displayName: z2.string().nullish(),
780
+ fieldPath: z2.array(z2.string()).nullish(),
777
781
  arguments: z2.array(GraphQlArgumentSchema).nullish(),
778
782
  returnType: TypeReferenceSchema,
779
783
  examples: z2.array(GraphQlExampleSchema).nullish(),
@@ -902,7 +906,7 @@ import { UnreachableCaseError } from "ts-essentials";
902
906
 
903
907
  // src/navigation/versions/latest/NavigationNodeApiLeaf.ts
904
908
  function isApiLeaf(node) {
905
- return node.type === "endpoint" || node.type === "webSocket" || node.type === "webhook" || node.type === "grpc" || node.type === "graphql";
909
+ return node.type === "endpoint" || node.type === "webSocket" || node.type === "webhook" || node.type === "grpc" || node.type === "graphql" || node.type === "graphqlType";
906
910
  }
907
911
 
908
912
  // src/navigation/versions/latest/NavigationNodePageLeaf.ts
@@ -996,7 +1000,8 @@ function getPageId(node) {
996
1000
  webSocket: RETURN_UNDEFINED,
997
1001
  webhook: RETURN_UNDEFINED,
998
1002
  grpc: RETURN_UNDEFINED,
999
- graphql: RETURN_UNDEFINED
1003
+ graphql: RETURN_UNDEFINED,
1004
+ graphqlType: RETURN_UNDEFINED
1000
1005
  // changelogYear: RETURN_UNDEFINED,
1001
1006
  // changelogMonth: RETURN_UNDEFINED,
1002
1007
  });
@@ -2027,6 +2032,9 @@ var ApiTypeIdVisitor = class _ApiTypeIdVisitor {
2027
2032
  typeShape.extends.forEach(visit);
2028
2033
  typeShape.properties.forEach((property) => {
2029
2034
  _ApiTypeIdVisitor.visitTypeReference(property.valueType, visit);
2035
+ property.arguments?.forEach((arg) => {
2036
+ _ApiTypeIdVisitor.visitTypeReference(arg.type, visit);
2037
+ });
2030
2038
  });
2031
2039
  }
2032
2040
  static visitTypeReference(typeReference, visit) {
@@ -2183,11 +2191,8 @@ var ApiDefinitionPruner = class {
2183
2191
  if (node.type !== "graphql" || graphqlOperations == null) {
2184
2192
  return [];
2185
2193
  }
2186
- const graphqlOperationId = node.graphqlOperationId;
2187
- const found = graphqlOperations.find(
2188
- (graphqlOperation) => ApiDefinitionHolder.createGraphQlOperationId(graphqlOperation) === graphqlOperationId
2189
- );
2190
- return found ? [found] : [];
2194
+ const idsToInclude = new Set(node.graphqlOperationIds ?? [node.graphqlOperationId]);
2195
+ return graphqlOperations.filter((op) => idsToInclude.has(ApiDefinitionHolder.createGraphQlOperationId(op)));
2191
2196
  }
2192
2197
  };
2193
2198
 
@@ -2263,6 +2268,7 @@ __export(api_definition_exports, {
2263
2268
  GraphQlOperationIdSchema: () => GraphQlOperationIdSchema,
2264
2269
  GraphQlOperationSchema: () => LatestGraphQlOperationSchema,
2265
2270
  GraphQlOperationTypeSchema: () => LatestGraphQlOperationTypeSchema,
2271
+ GraphQlTypeCategorySchema: () => GraphQlTypeCategorySchema,
2266
2272
  GrpcId: () => GrpcId,
2267
2273
  GrpcIdSchema: () => GrpcIdSchema,
2268
2274
  GrpcMethod: () => GrpcMethod,
@@ -2524,6 +2530,7 @@ var RegisterErrorDeclarationV2Schema = z3.object({
2524
2530
  });
2525
2531
  var RegisterEndpointDefinitionSchema = z3.object({
2526
2532
  description: z3.string().nullish(),
2533
+ subtitle: z3.string().nullish(),
2527
2534
  availability: AvailabilitySchema.nullish(),
2528
2535
  slug: z3.string().nullish(),
2529
2536
  auth: z3.boolean().nullish(),
@@ -2742,7 +2749,8 @@ var LatestObjectPropertySchema = z4.lazy(
2742
2749
  availability: AvailabilitySchema.nullish(),
2743
2750
  key: PropertyKeySchema,
2744
2751
  valueShape: LatestTypeShapeSchema,
2745
- propertyAccess: LatestObjectPropertyAccessSchema.nullish()
2752
+ propertyAccess: LatestObjectPropertyAccessSchema.nullish(),
2753
+ arguments: z4.array(LatestGraphQlArgumentSchema).nullish()
2746
2754
  })
2747
2755
  );
2748
2756
  var LatestParameterPropertySchema = z4.lazy(
@@ -3051,6 +3059,7 @@ var LatestExampleEndpointCallSchema = z4.object({
3051
3059
  });
3052
3060
  var LatestEndpointDefinitionSchema = z4.object({
3053
3061
  description: z4.string().nullish(),
3062
+ subtitle: z4.string().nullish(),
3054
3063
  availability: AvailabilitySchema.nullish(),
3055
3064
  namespace: z4.array(z4.string()).nullish(),
3056
3065
  id: EndpointIdSchema,
@@ -3093,6 +3102,7 @@ var LatestGraphQlOperationSchema = z4.object({
3093
3102
  description: z4.string().nullish(),
3094
3103
  availability: AvailabilitySchema.nullish(),
3095
3104
  namespace: z4.array(z4.string()).nullish(),
3105
+ fieldPath: z4.array(z4.string()).nullish(),
3096
3106
  id: GraphQlOperationIdSchema,
3097
3107
  operationType: LatestGraphQlOperationTypeSchema,
3098
3108
  name: z4.string(),
@@ -3509,6 +3519,15 @@ function collectReferencedTypeIds(type, types, { maxDepth = 10 } = {}) {
3509
3519
  visitedTypeIds,
3510
3520
  depth: depth + 1
3511
3521
  });
3522
+ if (property.arguments) {
3523
+ for (const arg of property.arguments) {
3524
+ stack.push({
3525
+ shape: arg.type,
3526
+ visitedTypeIds,
3527
+ depth: depth + 1
3528
+ });
3529
+ }
3530
+ }
3512
3531
  }
3513
3532
  if (obj.extraProperties) {
3514
3533
  stack.push({
@@ -3619,6 +3638,27 @@ function collectTypeDefinitionTree(type, types, { availability: rootAvailability
3619
3638
  visitedTypeIds,
3620
3639
  availability
3621
3640
  });
3641
+ property.arguments?.forEach((arg) => {
3642
+ stack.push({
3643
+ type: arg.type,
3644
+ path: [
3645
+ ...parentpath,
3646
+ {
3647
+ type: "objectProperty",
3648
+ key: property.key,
3649
+ optional: unwrapReference(property.valueShape, types).isOptional
3650
+ },
3651
+ {
3652
+ type: "graphqlArgument",
3653
+ name: arg.name,
3654
+ optional: unwrapReference(arg.type, types).isOptional
3655
+ }
3656
+ ],
3657
+ descriptions: arg.description ? [arg.description] : [],
3658
+ visitedTypeIds,
3659
+ availability: coalesceAvailability([availability, property.availability, arg.availability])
3660
+ });
3661
+ });
3622
3662
  });
3623
3663
  if (obj.extraProperties) {
3624
3664
  stack.push({
@@ -3726,7 +3766,43 @@ function collectTypeDefinitionTreeForObjectProperty(property, types, rootPath =
3726
3766
  optional: unwrapReference(property.valueShape, types).isOptional
3727
3767
  }
3728
3768
  ]
3729
- })
3769
+ }),
3770
+ ...(property.arguments ?? []).flatMap((arg) => [
3771
+ {
3772
+ path: [
3773
+ ...rootPath,
3774
+ {
3775
+ type: "objectProperty",
3776
+ key: property.key,
3777
+ optional: unwrapReference(property.valueShape, types).isOptional
3778
+ },
3779
+ {
3780
+ type: "graphqlArgument",
3781
+ name: arg.name,
3782
+ optional: unwrapReference(arg.type, types).isOptional
3783
+ }
3784
+ ],
3785
+ descriptions: arg.description ? [arg.description] : [],
3786
+ availability: coalesceAvailability([property.availability, arg.availability])
3787
+ },
3788
+ ...collectTypeDefinitionTree(arg.type, types, {
3789
+ maxDepth: maxDepth - 1,
3790
+ availability: coalesceAvailability([property.availability, arg.availability]),
3791
+ path: [
3792
+ ...rootPath,
3793
+ {
3794
+ type: "objectProperty",
3795
+ key: property.key,
3796
+ optional: unwrapReference(property.valueShape, types).isOptional
3797
+ },
3798
+ {
3799
+ type: "graphqlArgument",
3800
+ name: arg.name,
3801
+ optional: unwrapReference(arg.type, types).isOptional
3802
+ }
3803
+ ]
3804
+ })
3805
+ ])
3730
3806
  ];
3731
3807
  }
3732
3808
 
@@ -3845,6 +3921,9 @@ var ApiTypeIdVisitor2 = class _ApiTypeIdVisitor {
3845
3921
  typeShape.extends.forEach(visit);
3846
3922
  typeShape.properties.forEach((property) => {
3847
3923
  _ApiTypeIdVisitor.visitTypeShape(property.valueShape, visit);
3924
+ property.arguments?.forEach((arg) => {
3925
+ _ApiTypeIdVisitor.visitTypeShape(arg.type, visit);
3926
+ });
3848
3927
  });
3849
3928
  }
3850
3929
  static visitTypeReference(typeReference, visit) {
@@ -3925,10 +4004,13 @@ var ApiDefinitionPruner2 = class _ApiDefinitionPruner {
3925
4004
  found.namespace?.forEach((subpackageId) => namespaces.add(subpackageId));
3926
4005
  }
3927
4006
  } else if (node.type === "graphql") {
3928
- const found = this.api.graphqlOperations[node.graphqlOperationId];
3929
- if (found) {
3930
- toRet.graphqlOperations[node.graphqlOperationId] = found;
3931
- found.namespace?.forEach((subpackageId) => namespaces.add(subpackageId));
4007
+ const idsToInclude = node.graphqlOperationIds ?? [node.graphqlOperationId];
4008
+ for (const opId of idsToInclude) {
4009
+ const found = this.api.graphqlOperations[opId];
4010
+ if (found) {
4011
+ toRet.graphqlOperations[opId] = found;
4012
+ found.namespace?.forEach((subpackageId) => namespaces.add(subpackageId));
4013
+ }
3932
4014
  }
3933
4015
  }
3934
4016
  }
@@ -4230,9 +4312,21 @@ function createGraphqlContext(node, apiDefinition) {
4230
4312
  );
4231
4313
  return void 0;
4232
4314
  }
4315
+ const allIds = node.graphqlOperationIds ?? [node.graphqlOperationId];
4316
+ const operations = [];
4317
+ for (const id of allIds) {
4318
+ const op = api2.graphqlOperations[id];
4319
+ if (op) {
4320
+ operations.push(op);
4321
+ }
4322
+ }
4323
+ if (operations.length === 0) {
4324
+ operations.push(operation);
4325
+ }
4233
4326
  return {
4234
4327
  node,
4235
4328
  operation,
4329
+ operations,
4236
4330
  types: api2.types
4237
4331
  };
4238
4332
  }
@@ -5157,6 +5251,7 @@ var ApiDefinitionV1ToLatest = class _ApiDefinitionV1ToLatest {
5157
5251
  displayName: v1?.name,
5158
5252
  operationId: v1?.urlSlug?.split("/")?.pop(),
5159
5253
  description: v1?.description,
5254
+ subtitle: v1?.subtitle,
5160
5255
  availability: v1?.availability,
5161
5256
  method: v1?.method,
5162
5257
  path: v1?.path?.parts?.filter((part) => part?.value !== "") ?? [],
@@ -5398,7 +5493,8 @@ var ApiDefinitionV1ToLatest = class _ApiDefinitionV1ToLatest {
5398
5493
  },
5399
5494
  propertyAccess: value?.propertyAccess ?? void 0,
5400
5495
  description: value?.description ?? void 0,
5401
- availability: value?.availability ?? void 0
5496
+ availability: value?.availability ?? void 0,
5497
+ arguments: value?.arguments?.map((arg) => this.migrateGraphQlArgument(arg))
5402
5498
  }));
5403
5499
  },
5404
5500
  [],
@@ -5839,6 +5935,7 @@ var ApiDefinitionV1ToLatest = class _ApiDefinitionV1ToLatest {
5839
5935
  description: v1?.description,
5840
5936
  availability: v1?.availability,
5841
5937
  namespace,
5938
+ fieldPath: v1?.fieldPath,
5842
5939
  arguments: v1?.arguments?.map((arg) => this.migrateGraphQlArgument(arg)),
5843
5940
  returnType: {
5844
5941
  type: "alias",
@@ -6135,7 +6232,10 @@ function generateGraphQlSnippet(context) {
6135
6232
  return `$${arg.name}: ${graphqlType}`;
6136
6233
  });
6137
6234
  const argumentUsage = args.map((arg) => `${arg.name}: $${arg.name}`);
6138
- const selectionSet = generateSelectionSet(operation.returnType, types, 2);
6235
+ const fieldPath = operation.fieldPath;
6236
+ const hasFieldPath = fieldPath != null && fieldPath.length > 0;
6237
+ const selectionSetIndent = hasFieldPath ? 2 + fieldPath.length : 2;
6238
+ const selectionSet = generateSelectionSet(operation.returnType, types, 2, /* @__PURE__ */ new Set(), selectionSetIndent);
6139
6239
  let query = operationKeyword;
6140
6240
  if (operationName || variableDefinitions.length > 0) {
6141
6241
  query += ` ${operationName}`;
@@ -6144,15 +6244,32 @@ function generateGraphQlSnippet(context) {
6144
6244
  }
6145
6245
  }
6146
6246
  query += " {\n";
6147
- query += ` ${operation.name}`;
6247
+ const baseIndent = 2;
6248
+ if (hasFieldPath) {
6249
+ for (let i = 0; i < fieldPath.length; i++) {
6250
+ const indent = " ".repeat(baseIndent + i * 2);
6251
+ query += `${indent}${fieldPath[i]} {
6252
+ `;
6253
+ }
6254
+ }
6255
+ const operationIndent = hasFieldPath ? " ".repeat(baseIndent + fieldPath.length * 2) : " ";
6256
+ query += `${operationIndent}${operation.name}`;
6148
6257
  if (argumentUsage.length > 0) {
6149
6258
  query += `(${argumentUsage.join(", ")})`;
6150
6259
  }
6151
6260
  if (selectionSet) {
6152
6261
  query += ` ${selectionSet}`;
6153
6262
  }
6154
- query += "\n}";
6155
- const response = generateResponseExample(operation.name, operation.returnType, types);
6263
+ query += "\n";
6264
+ if (hasFieldPath) {
6265
+ for (let i = fieldPath.length - 1; i >= 0; i--) {
6266
+ const indent = " ".repeat(baseIndent + i * 2);
6267
+ query += `${indent}}
6268
+ `;
6269
+ }
6270
+ }
6271
+ query += "}";
6272
+ const response = generateResponseExample(operation.name, operation.returnType, types, fieldPath);
6156
6273
  const result = { query, variables, response };
6157
6274
  snippetCache.set(operation, result);
6158
6275
  return result;
@@ -6181,49 +6298,44 @@ function getExampleOperationName(operationType) {
6181
6298
  return "ExampleQuery";
6182
6299
  }
6183
6300
  }
6184
- function typeShapeToGraphQlType(shape, types) {
6301
+ function typeShapeToGraphQlType(shape, types, nonNull = true) {
6185
6302
  if (shape.type === "alias") {
6186
- return typeReferenceToGraphQlType(shape.value, types);
6187
- }
6188
- if (shape.type === "enum") {
6189
- return "String";
6303
+ return typeReferenceToGraphQlType(shape.value, types, nonNull);
6190
6304
  }
6191
- if (shape.type === "object") {
6192
- return "Object";
6193
- }
6194
- if (shape.type === "undiscriminatedUnion" || shape.type === "discriminatedUnion") {
6195
- return "Object";
6196
- }
6197
- return "String";
6305
+ const base = shape.type === "enum" ? "String" : shape.type === "object" || shape.type === "undiscriminatedUnion" || shape.type === "discriminatedUnion" ? "Object" : "String";
6306
+ return nonNull ? `${base}!` : base;
6198
6307
  }
6199
- function typeReferenceToGraphQlType(ref, types) {
6308
+ function typeReferenceToGraphQlType(ref, types, nonNull = true) {
6200
6309
  switch (ref.type) {
6201
- case "primitive":
6202
- return primitiveToGraphQlType(ref.value);
6310
+ case "primitive": {
6311
+ const base = primitiveToGraphQlType(ref.value);
6312
+ return nonNull ? `${base}!` : base;
6313
+ }
6203
6314
  case "id": {
6204
6315
  const typeDef = types[ref.id];
6205
- if (typeDef) {
6206
- return typeDef.displayName ?? unnamespacedName(typeDef.name) ?? "Object";
6207
- }
6208
- return "Object";
6316
+ const base = typeDef ? typeDef.displayName ?? unnamespacedName(typeDef.name) ?? "Object" : "Object";
6317
+ return nonNull ? `${base}!` : base;
6209
6318
  }
6210
6319
  case "optional":
6211
- return typeShapeToGraphQlType(ref.shape, types);
6320
+ return typeShapeToGraphQlType(ref.shape, types, false);
6212
6321
  case "nullable":
6213
- return typeShapeToGraphQlType(ref.shape, types);
6214
- case "list":
6215
- return `[${typeShapeToGraphQlType(ref.itemShape, types)}]`;
6216
- case "set":
6217
- return `[${typeShapeToGraphQlType(ref.itemShape, types)}]`;
6322
+ return typeShapeToGraphQlType(ref.shape, types, false);
6323
+ case "list": {
6324
+ const inner = typeShapeToGraphQlType(ref.itemShape, types);
6325
+ return nonNull ? `[${inner}]!` : `[${inner}]`;
6326
+ }
6327
+ case "set": {
6328
+ const inner = typeShapeToGraphQlType(ref.itemShape, types);
6329
+ return nonNull ? `[${inner}]!` : `[${inner}]`;
6330
+ }
6218
6331
  case "map":
6219
- return "Object";
6220
- // Maps don't have direct GraphQL equivalent
6332
+ return nonNull ? "Object!" : "Object";
6221
6333
  case "literal":
6222
- return "String";
6334
+ return nonNull ? "String!" : "String";
6223
6335
  case "unknown":
6224
- return "Object";
6336
+ return nonNull ? "Object!" : "Object";
6225
6337
  default:
6226
- return "String";
6338
+ return nonNull ? "String!" : "String";
6227
6339
  }
6228
6340
  }
6229
6341
  function unnamespacedName(name) {
@@ -6441,13 +6553,18 @@ function generateSelectionSetFromReference(ref, types, depth, visited, indentLev
6441
6553
  return "";
6442
6554
  }
6443
6555
  }
6444
- function generateResponseExample(operationName, returnType, types) {
6556
+ function generateResponseExample(operationName, returnType, types, fieldPath) {
6445
6557
  const data = generateResponseData(returnType, types, 3, /* @__PURE__ */ new Set());
6446
- return {
6447
- data: {
6448
- [operationName]: data
6558
+ let responseData = { [operationName]: data };
6559
+ if (fieldPath != null && fieldPath.length > 0) {
6560
+ for (let i = fieldPath.length - 1; i >= 0; i--) {
6561
+ const key = fieldPath[i];
6562
+ if (key != null) {
6563
+ responseData = { [key]: responseData };
6564
+ }
6449
6565
  }
6450
- };
6566
+ }
6567
+ return { data: responseData };
6451
6568
  }
6452
6569
  function generateResponseData(shape, types, depth, visited) {
6453
6570
  if (depth <= 0) {
@@ -7511,6 +7628,7 @@ var ReadErrorDeclarationV2Schema = z5.object({
7511
7628
  });
7512
7629
  var ReadEndpointDefinitionSchema = z5.object({
7513
7630
  description: z5.string().nullish(),
7631
+ subtitle: z5.string().nullish(),
7514
7632
  availability: AvailabilitySchema.nullish(),
7515
7633
  authed: z5.boolean(),
7516
7634
  authV2: z5.array(AuthSchemeIdSchema).nullish(),
@@ -9115,6 +9233,7 @@ __export(APIV1Db_exports, {
9115
9233
  GraphQlOperationIdSchema: () => GraphQlOperationIdSchema,
9116
9234
  GraphQlOperationSchema: () => GraphQlOperationSchema,
9117
9235
  GraphQlOperationTypeSchema: () => GraphQlOperationTypeSchema,
9236
+ GraphQlTypeCategorySchema: () => GraphQlTypeCategorySchema,
9118
9237
  GrpcMethodSchema: () => GrpcMethodSchema,
9119
9238
  GrpcProtocolSchema: () => GrpcProtocolSchema,
9120
9239
  HeaderAuthSchema: () => HeaderAuthSchema,
@@ -9225,6 +9344,7 @@ var DbHttpRequestsV2Schema = z15.object({
9225
9344
  });
9226
9345
  var DbEndpointDefinitionSchema = z15.object({
9227
9346
  description: z15.string().nullish(),
9347
+ subtitle: z15.string().nullish(),
9228
9348
  availability: AvailabilitySchema.nullish(),
9229
9349
  authed: z15.boolean().nullish(),
9230
9350
  authV2: z15.array(AuthSchemeIdSchema).nullish(),
@@ -9368,6 +9488,7 @@ __export(APIV1Read_exports, {
9368
9488
  GraphQlOperationIdSchema: () => GraphQlOperationIdSchema,
9369
9489
  GraphQlOperationSchema: () => GraphQlOperationSchema,
9370
9490
  GraphQlOperationTypeSchema: () => GraphQlOperationTypeSchema,
9491
+ GraphQlTypeCategorySchema: () => GraphQlTypeCategorySchema,
9371
9492
  GrpcMethod: () => GrpcMethod,
9372
9493
  GrpcMethodSchema: () => GrpcMethodSchema,
9373
9494
  GrpcProtocolSchema: () => GrpcProtocolSchema,
@@ -9595,6 +9716,7 @@ __export(APIV1Write_exports, {
9595
9716
  GraphQlOperationIdSchema: () => GraphQlOperationIdSchema,
9596
9717
  GraphQlOperationSchema: () => GraphQlOperationSchema,
9597
9718
  GraphQlOperationTypeSchema: () => GraphQlOperationTypeSchema,
9719
+ GraphQlTypeCategorySchema: () => GraphQlTypeCategorySchema,
9598
9720
  GrpcMethodSchema: () => GrpcMethodSchema,
9599
9721
  GrpcProtocolSchema: () => GrpcProtocolSchema,
9600
9722
  HeaderAuthSchema: () => HeaderAuthSchema,
@@ -10502,6 +10624,7 @@ __export(FdrAPI_exports, {
10502
10624
  GraphQlOperationIdSchema: () => GraphQlOperationIdSchema,
10503
10625
  GraphQlOperationSchema: () => GraphQlOperationSchema,
10504
10626
  GraphQlOperationTypeSchema: () => GraphQlOperationTypeSchema,
10627
+ GraphQlTypeCategorySchema: () => GraphQlTypeCategorySchema,
10505
10628
  GrpcId: () => GrpcId,
10506
10629
  GrpcIdSchema: () => GrpcIdSchema,
10507
10630
  GrpcMethod: () => GrpcMethod,
@@ -11239,6 +11362,7 @@ __export(v1_exports2, {
11239
11362
  GraphQlOperationIdSchema: () => GraphQlOperationIdSchema,
11240
11363
  GraphQlOperationSchema: () => GraphQlOperationSchema,
11241
11364
  GraphQlOperationTypeSchema: () => GraphQlOperationTypeSchema,
11365
+ GraphQlTypeCategorySchema: () => GraphQlTypeCategorySchema,
11242
11366
  GrpcId: () => GrpcId,
11243
11367
  GrpcIdSchema: () => GrpcIdSchema,
11244
11368
  GrpcMethod: () => GrpcMethod,
@@ -11857,12 +11981,15 @@ var ApiReferenceNavigationConverter = class _ApiReferenceNavigationConverter {
11857
11981
  }));
11858
11982
  }
11859
11983
  convertGraphQlNode(graphqlOperationId, graphqlOperation, parentSlug) {
11984
+ const fieldPath = graphqlOperation.fieldPath;
11985
+ const urlSlug = fieldPath != null && fieldPath.length > 0 ? [...fieldPath, graphqlOperation.name].join("-") : graphqlOperation.name;
11860
11986
  return this.#idgen.with(graphqlOperationId, (id) => ({
11861
11987
  id,
11862
11988
  type: "graphql",
11863
11989
  title: graphqlOperation.displayName ?? graphqlOperation.name,
11864
11990
  graphqlOperationId,
11865
- slug: parentSlug.apply({ urlSlug: graphqlOperation.name }).get(),
11991
+ graphqlOperationIds: void 0,
11992
+ slug: parentSlug.apply({ urlSlug }).get(),
11866
11993
  icon: void 0,
11867
11994
  hidden: void 0,
11868
11995
  operationType: graphqlOperation.operationType,
@@ -11876,6 +12003,86 @@ var ApiReferenceNavigationConverter = class _ApiReferenceNavigationConverter {
11876
12003
  featureFlags: void 0
11877
12004
  }));
11878
12005
  }
12006
+ convertGraphQlOperationsToChildren(graphqlOperations, parentSlug) {
12007
+ const groupedByParent = /* @__PURE__ */ new Map();
12008
+ const insertionOrder = [];
12009
+ for (const op of graphqlOperations) {
12010
+ const graphqlOperationId = ApiDefinitionHolder.createGraphQlOperationId(op);
12011
+ if (this.#visitedGraphqlOperations.has(graphqlOperationId)) {
12012
+ continue;
12013
+ }
12014
+ this.#visitedGraphqlOperations.add(graphqlOperationId);
12015
+ const parentField = op.fieldPath?.[0];
12016
+ if (parentField != null && op.operationType === "QUERY") {
12017
+ const group = groupedByParent.get(parentField);
12018
+ if (group != null) {
12019
+ group.push(op);
12020
+ } else {
12021
+ groupedByParent.set(parentField, [op]);
12022
+ insertionOrder.push({ type: "group", parentField });
12023
+ }
12024
+ } else {
12025
+ insertionOrder.push({ type: "flat", op });
12026
+ }
12027
+ }
12028
+ const children = [];
12029
+ const allSlugs = /* @__PURE__ */ new Set();
12030
+ for (const entry of insertionOrder) {
12031
+ if (entry.type === "flat") {
12032
+ const fp = entry.op.fieldPath;
12033
+ allSlugs.add(fp != null && fp.length > 0 ? [...fp, entry.op.name].join("-") : entry.op.name);
12034
+ } else {
12035
+ allSlugs.add(entry.parentField);
12036
+ }
12037
+ }
12038
+ for (const entry of insertionOrder) {
12039
+ if (entry.type === "flat") {
12040
+ const opId = ApiDefinitionHolder.createGraphQlOperationId(entry.op);
12041
+ children.push(this.convertGraphQlNode(opId, entry.op, parentSlug));
12042
+ } else {
12043
+ const operations = groupedByParent.get(entry.parentField);
12044
+ if (operations == null) {
12045
+ continue;
12046
+ }
12047
+ const firstOp = operations[0];
12048
+ const opId = ApiDefinitionHolder.createGraphQlOperationId(firstOp);
12049
+ const allOpIds = operations.map((op) => ApiDefinitionHolder.createGraphQlOperationId(op));
12050
+ let slugSegment = entry.parentField;
12051
+ const flatHasSameSlug = insertionOrder.some(
12052
+ (e) => e.type === "flat" && (() => {
12053
+ const fp = e.op.fieldPath;
12054
+ const s = fp != null && fp.length > 0 ? [...fp, e.op.name].join("-") : e.op.name;
12055
+ return s === slugSegment;
12056
+ })()
12057
+ );
12058
+ if (flatHasSameSlug) {
12059
+ slugSegment = `${entry.parentField}-fields`;
12060
+ }
12061
+ children.push(
12062
+ this.#idgen.with(opId, (id) => ({
12063
+ id,
12064
+ type: "graphql",
12065
+ title: entry.parentField,
12066
+ graphqlOperationId: opId,
12067
+ graphqlOperationIds: allOpIds.length > 1 ? allOpIds : void 0,
12068
+ slug: parentSlug.apply({ urlSlug: slugSegment }).get(),
12069
+ icon: void 0,
12070
+ hidden: void 0,
12071
+ operationType: firstOp.operationType,
12072
+ apiDefinitionId: this.apiDefinitionId,
12073
+ availability: navigation_exports.V1.convertAvailability(firstOp.availability),
12074
+ playground: void 0,
12075
+ authed: void 0,
12076
+ collapsed: void 0,
12077
+ viewers: void 0,
12078
+ orphaned: void 0,
12079
+ featureFlags: void 0
12080
+ }))
12081
+ );
12082
+ }
12083
+ }
12084
+ return children;
12085
+ }
11879
12086
  convertPackageToChildren(package_, parentSlug) {
11880
12087
  const children = [];
11881
12088
  let subpackageId = isSubpackage(package_) ? package_.subpackageId : "__package__";
@@ -11923,14 +12130,7 @@ var ApiReferenceNavigationConverter = class _ApiReferenceNavigationConverter {
11923
12130
  children.push(this.convertWebhookNode(webhookId, webhook, parentSlug));
11924
12131
  this.#visitedWebhooks.add(webhookId);
11925
12132
  });
11926
- (package_.graphqlOperations ?? []).forEach((graphqlOperation) => {
11927
- const graphqlOperationId = ApiDefinitionHolder.createGraphQlOperationId(graphqlOperation);
11928
- if (this.#visitedGraphqlOperations.has(graphqlOperationId)) {
11929
- return;
11930
- }
11931
- children.push(this.convertGraphQlNode(graphqlOperationId, graphqlOperation, parentSlug));
11932
- this.#visitedGraphqlOperations.add(graphqlOperationId);
11933
- });
12133
+ children.push(...this.convertGraphQlOperationsToChildren(package_.graphqlOperations ?? [], parentSlug));
11934
12134
  (package_.subpackages ?? []).forEach((subpackageId2) => {
11935
12135
  const subpackage = this.api.subpackages[subpackageId2];
11936
12136
  if (subpackage == null) {
@@ -13873,6 +14073,7 @@ var FernNavigationV1ToLatest = class _FernNavigationV1ToLatest {
13873
14073
  collapsed: node.collapsed,
13874
14074
  apiDefinitionId: node.apiDefinitionId,
13875
14075
  graphqlOperationId: node.graphqlOperationId,
14076
+ graphqlOperationIds: node.graphqlOperationIds,
13876
14077
  operationType: node.operationType,
13877
14078
  playground: node.playground,
13878
14079
  availability: this.#availability(node.availability),
@@ -14378,6 +14579,7 @@ function getApiReferenceId(node) {
14378
14579
  webhook: RETURN_API_DEFINITION_ID,
14379
14580
  grpc: RETURN_API_DEFINITION_ID,
14380
14581
  graphql: RETURN_API_DEFINITION_ID,
14582
+ graphqlType: RETURN_API_DEFINITION_ID,
14381
14583
  apiPackage: RETURN_API_DEFINITION_ID,
14382
14584
  unversioned: RETURN_UNDEFINED3,
14383
14585
  landingPage: RETURN_UNDEFINED3
@@ -14776,6 +14978,7 @@ export {
14776
14978
  GraphQlOperationIdSchema,
14777
14979
  GraphQlOperationSchema,
14778
14980
  GraphQlOperationTypeSchema,
14981
+ GraphQlTypeCategorySchema,
14779
14982
  GrpcId,
14780
14983
  GrpcIdSchema,
14781
14984
  GrpcMethod,