fern-api 0.19.28 → 0.19.29

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 (2) hide show
  1. package/bundle.cjs +861 -113
  2. package/package.json +1 -1
package/bundle.cjs CHANGED
@@ -823712,27 +823712,38 @@ async function convertGenerator({ absolutePathToGeneratorsConfiguration, generat
823712
823712
  absolutePathToLocalOutput: ((_a4 = generator.output) == null ? void 0 : _a4.location) === "local-file-system" ? resolve(dirname(absolutePathToGeneratorsConfiguration), generator.output.path) : void 0,
823713
823713
  language: getLanguageFromGeneratorName(generator.name),
823714
823714
  irVersionOverride: generator["ir-version"] ?? void 0,
823715
- publishMetadata: generator["publish-metadata"] != null ? convertPublishMetadata({ publishMetadata: generator["publish-metadata"] }) : void 0
823715
+ publishMetadata: getPublishMetadata({ generatorInvocation: generator })
823716
823716
  };
823717
823717
  }
823718
- function convertPublishMetadata({ publishMetadata }) {
823719
- return {
823720
- packageDescription: publishMetadata["package-description"],
823721
- publisherEmail: publishMetadata.email,
823722
- publisherName: publishMetadata.author,
823723
- referenceUrl: publishMetadata["reference-url"]
823724
- };
823718
+ function getPublishMetadata({ generatorInvocation }) {
823719
+ const publishMetadata = generatorInvocation["publish-metadata"];
823720
+ if (publishMetadata != null) {
823721
+ return {
823722
+ packageDescription: publishMetadata["package-description"],
823723
+ publisherEmail: publishMetadata.email,
823724
+ publisherName: publishMetadata.author,
823725
+ referenceUrl: publishMetadata["reference-url"]
823726
+ };
823727
+ } else if (generatorInvocation.metadata != null) {
823728
+ return {
823729
+ packageDescription: generatorInvocation.metadata["package-description"],
823730
+ publisherEmail: generatorInvocation.metadata.email,
823731
+ publisherName: generatorInvocation.metadata.author,
823732
+ referenceUrl: generatorInvocation.metadata["reference-url"]
823733
+ };
823734
+ }
823735
+ return void 0;
823725
823736
  }
823726
823737
  async function convertOutputMode({ absolutePathToGeneratorsConfiguration, generator }) {
823727
- var _a4;
823728
823738
  if (generator.github != null) {
823729
823739
  const indexOfFirstSlash = generator.github.repository.indexOf("/");
823730
823740
  const owner = generator.github.repository.slice(0, indexOfFirstSlash);
823731
823741
  const repo = generator.github.repository.slice(indexOfFirstSlash + 1);
823732
823742
  const publishInfo = generator.output != null ? getGithubPublishInfo(generator.output) : void 0;
823733
- const license = generator.github.license != null ? await getGithubLicense({
823743
+ const licenseSchema = getGithubLicenseSchema(generator);
823744
+ const license = licenseSchema != null ? await getGithubLicense({
823734
823745
  absolutePathToGeneratorsConfiguration,
823735
- githubLicense: ((_a4 = generator["publish-metadata"]) == null ? void 0 : _a4.license) ?? generator.github.license
823746
+ githubLicense: licenseSchema
823736
823747
  }) : void 0;
823737
823748
  const mode = generator.github.mode ?? "release";
823738
823749
  switch (mode) {
@@ -823776,9 +823787,8 @@ async function convertOutputMode({ absolutePathToGeneratorsConfiguration, genera
823776
823787
  token: generator.output.token ?? ""
823777
823788
  }));
823778
823789
  case "maven": {
823779
- const hasSignature = generator.output.signature != null;
823780
823790
  return import_fiddle_sdk.FernFiddle.OutputMode.publishV2(import_fiddle_sdk.FernFiddle.remoteGen.PublishOutputModeV2.mavenOverride({
823781
- registryUrl: generator.output.url ?? hasSignature ? "https://oss.sonatype.org/service/local/staging/deploy/maven2/" : "https://s01.oss.sonatype.org/content/repositories/releases/",
823791
+ registryUrl: getMavenRegistryUrl(generator.output),
823782
823792
  username: generator.output.username ?? "",
823783
823793
  password: generator.output.password ?? "",
823784
823794
  coordinate: generator.output.coordinate,
@@ -823845,7 +823855,7 @@ function getGithubPublishInfo(output) {
823845
823855
  });
823846
823856
  case "maven":
823847
823857
  return import_fiddle_sdk.FernFiddle.GithubPublishInfo.maven({
823848
- registryUrl: output.url ?? output.signature != null ? "https://oss.sonatype.org/service/local/staging/deploy/maven2/" : "https://s01.oss.sonatype.org/content/repositories/releases/",
823858
+ registryUrl: getMavenRegistryUrl(output),
823849
823859
  coordinate: output.coordinate,
823850
823860
  credentials: output.username != null && output.password != null ? {
823851
823861
  username: output.username,
@@ -823903,6 +823913,21 @@ function getLanguageFromGeneratorName(generatorName) {
823903
823913
  }
823904
823914
  return void 0;
823905
823915
  }
823916
+ function getMavenRegistryUrl(maven) {
823917
+ if (maven.url != null) {
823918
+ return maven.url;
823919
+ }
823920
+ return maven.signature != null ? "https://oss.sonatype.org/service/local/staging/deploy/maven2/" : "https://s01.oss.sonatype.org/content/repositories/releases/";
823921
+ }
823922
+ function getGithubLicenseSchema(generator) {
823923
+ var _a4, _b3, _c3;
823924
+ if (((_a4 = generator["publish-metadata"]) == null ? void 0 : _a4.license) != null) {
823925
+ return generator["publish-metadata"].license;
823926
+ } else if (((_b3 = generator.metadata) == null ? void 0 : _b3.license) != null) {
823927
+ return generator.metadata.license;
823928
+ }
823929
+ return (_c3 = generator.github) == null ? void 0 : _c3.license;
823930
+ }
823906
823931
 
823907
823932
  // pnp:/home/circleci/project/packages/cli/configuration/lib/generators-yml/loadGeneratorsConfiguration.js
823908
823933
  async function loadRawGeneratorsConfiguration({ absolutePathToWorkspace, context }) {
@@ -827127,7 +827152,7 @@ var AccessTokenPosthogManager = class {
827127
827152
  properties: {
827128
827153
  ...event,
827129
827154
  ...event.properties,
827130
- version: "0.19.28",
827155
+ version: "0.19.29",
827131
827156
  usingAccessToken: true
827132
827157
  }
827133
827158
  });
@@ -827189,7 +827214,7 @@ var UserPosthogManager = class {
827189
827214
  distinctId: this.userId ?? await this.getPersistedDistinctId(),
827190
827215
  event: "CLI",
827191
827216
  properties: {
827192
- version: "0.19.28",
827217
+ version: "0.19.29",
827193
827218
  ...event,
827194
827219
  ...event.properties
827195
827220
  }
@@ -838178,6 +838203,7 @@ __export(schemas_exports3, {
838178
838203
  BasicAuthSchemeSchema: () => BasicAuthSchemeSchema,
838179
838204
  BearerAuthSchemeSchema: () => BearerAuthSchemeSchema,
838180
838205
  CasingOverridesSchema: () => CasingOverridesSchema,
838206
+ CursorPaginationSchema: () => CursorPaginationSchema,
838181
838207
  DeclarationSchema: () => DeclarationSchema,
838182
838208
  DeclarationWithoutDocsSchema: () => DeclarationWithoutDocsSchema,
838183
838209
  DefinitionFileSchema: () => DefinitionFileSchema,
@@ -838212,6 +838238,7 @@ __export(schemas_exports3, {
838212
838238
  MultipleBaseUrlsEnvironmentSchema: () => MultipleBaseUrlsEnvironmentSchema,
838213
838239
  ObjectPropertySchema: () => ObjectPropertySchema,
838214
838240
  ObjectSchema: () => ObjectSchema,
838241
+ OffsetPaginationSchema: () => OffsetPaginationSchema,
838215
838242
  PackageMarkerFileSchema: () => PackageMarkerFileSchema,
838216
838243
  PaginationSchema: () => PaginationSchema,
838217
838244
  PropertyErrorDiscriminationSchema: () => PropertyErrorDiscriminationSchema,
@@ -838341,6 +838368,13 @@ var CasingOverridesSchema = z.object({
838341
838368
  "screaming-snake": z.optional(z.string())
838342
838369
  });
838343
838370
 
838371
+ // pnp:/home/circleci/project/packages/cli/yaml/yaml-schema/lib/schemas/CursorPaginationSchema.js
838372
+ var CursorPaginationSchema = z.object({
838373
+ cursor: z.string().describe("The path to the request property for the cursor."),
838374
+ next_cursor: z.string().describe("The path to the response property for the next cursor."),
838375
+ results: z.string().describe("The path to the response property for the page elements.")
838376
+ });
838377
+
838344
838378
  // pnp:/home/circleci/project/packages/cli/yaml/yaml-schema/lib/schemas/ObjectExtendsSchema.js
838345
838379
  var ObjectExtendsSchema = z.union([z.string(), z.array(z.string())]);
838346
838380
 
@@ -838584,19 +838618,10 @@ var HttpResponseStreamSchema = WithDocsSchema.extend({
838584
838618
  terminator: z.optional(z.string())
838585
838619
  });
838586
838620
 
838587
- // pnp:/home/circleci/project/packages/cli/yaml/yaml-schema/lib/schemas/CursorPaginationSchema.js
838588
- var CursorPaginationSchema = z.object({
838589
- type: z.literal("cursor").describe("Configures cursor auto-pagination."),
838590
- page: z.string().describe("The request property name that represents the page cursor."),
838591
- next: z.string().describe("The response property name that represents the next page cursor to retrieve."),
838592
- results: z.string().describe("The response property name that represents the page elements.")
838593
- });
838594
-
838595
838621
  // pnp:/home/circleci/project/packages/cli/yaml/yaml-schema/lib/schemas/OffsetPaginationSchema.js
838596
838622
  var OffsetPaginationSchema = z.object({
838597
- type: z.literal("offset").describe("Configures offset auto-pagination."),
838598
- page: z.string().describe("The request property name that represents the page offset."),
838599
- results: z.string().describe("The response property name that represents the page elements.")
838623
+ offset: z.string().describe("The path to the request property for the page offset."),
838624
+ results: z.string().describe("The path to the response property for the page elements.")
838600
838625
  });
838601
838626
 
838602
838627
  // pnp:/home/circleci/project/packages/cli/yaml/yaml-schema/lib/schemas/PaginationSchema.js
@@ -851222,10 +851247,10 @@ var CliContext = class {
851222
851247
  return "fern-api";
851223
851248
  }
851224
851249
  getPackageVersion() {
851225
- if ("0.19.28" == null) {
851250
+ if ("0.19.29" == null) {
851226
851251
  this.logger.error("CLI_VERSION is not defined");
851227
851252
  }
851228
- return "0.19.28";
851253
+ return "0.19.29";
851229
851254
  }
851230
851255
  getCliName() {
851231
851256
  if ("fern" == null) {
@@ -854656,6 +854681,29 @@ function convertSingleUnionType({ rawValueType, rawSingleUnionType, fileContaini
854656
854681
  }
854657
854682
  }
854658
854683
 
854684
+ // pnp:/home/circleci/project/packages/cli/generation/ir-generator/lib/converters/services/convertQueryParameter.js
854685
+ async function convertQueryParameter({ file, queryParameterKey, queryParameter }) {
854686
+ const { name: name2 } = getQueryParameterName({ queryParameterKey, queryParameter });
854687
+ const valueType = file.parseTypeReference(queryParameter);
854688
+ return {
854689
+ ...await convertDeclaration(queryParameter),
854690
+ name: file.casingsGenerator.generateNameAndWireValue({
854691
+ wireValue: queryParameterKey,
854692
+ name: name2
854693
+ }),
854694
+ valueType,
854695
+ allowMultiple: typeof queryParameter !== "string" && queryParameter["allow-multiple"] != null ? queryParameter["allow-multiple"] : false
854696
+ };
854697
+ }
854698
+ function getQueryParameterName({ queryParameterKey, queryParameter }) {
854699
+ if (typeof queryParameter !== "string") {
854700
+ if (queryParameter.name != null) {
854701
+ return { name: queryParameter.name, wasExplicitlySet: true };
854702
+ }
854703
+ }
854704
+ return { name: queryParameterKey, wasExplicitlySet: false };
854705
+ }
854706
+
854659
854707
  // pnp:/home/circleci/project/packages/cli/generation/ir-generator/lib/converters/services/convertExampleEndpointCall.js
854660
854708
  function convertExampleEndpointCall2({ service, endpoint, example, typeResolver, errorResolver, exampleResolver, variableResolver, file, workspace }) {
854661
854709
  var _a4;
@@ -854999,6 +855047,76 @@ function buildUrl({ service, endpoint, example, pathParams }) {
854999
855047
  return url;
855000
855048
  }
855001
855049
 
855050
+ // pnp:/home/circleci/project/packages/cli/generation/ir-generator/lib/converters/services/getObjectPropertyFromResolvedType.js
855051
+ async function getObjectPropertyFromResolvedType({ typeResolver, file, resolvedType, property: property5 }) {
855052
+ switch (resolvedType._type) {
855053
+ case "container":
855054
+ if (resolvedType.container._type === "optional") {
855055
+ return await getObjectPropertyFromResolvedType({
855056
+ typeResolver,
855057
+ file,
855058
+ resolvedType: resolvedType.container.itemType,
855059
+ property: property5
855060
+ });
855061
+ }
855062
+ break;
855063
+ case "named":
855064
+ if (isRawObjectDefinition(resolvedType.declaration)) {
855065
+ return await getObjectPropertyFromObjectSchema({
855066
+ typeResolver,
855067
+ file: resolvedType.file,
855068
+ objectSchema: resolvedType.declaration,
855069
+ property: property5
855070
+ });
855071
+ }
855072
+ break;
855073
+ case "primitive":
855074
+ case "unknown":
855075
+ break;
855076
+ default:
855077
+ assertNever(resolvedType);
855078
+ }
855079
+ throw new Error("Internal error; response must be an object in order to return a property as a response");
855080
+ }
855081
+ async function getObjectPropertyFromObjectSchema({ typeResolver, file, objectSchema, property: property5 }) {
855082
+ const properties = await getAllPropertiesForRawObjectSchema(objectSchema, file, typeResolver);
855083
+ const objectProperty = properties[property5];
855084
+ if (objectProperty == null) {
855085
+ throw new Error(`Response does not have a property named ${property5}.`);
855086
+ }
855087
+ return objectProperty;
855088
+ }
855089
+ async function getAllPropertiesForRawObjectSchema(objectSchema, file, typeResolver) {
855090
+ let extendedTypes = [];
855091
+ if (typeof objectSchema.extends === "string") {
855092
+ extendedTypes = [objectSchema.extends];
855093
+ } else if (Array.isArray(objectSchema.extends)) {
855094
+ extendedTypes = objectSchema.extends;
855095
+ }
855096
+ const properties = {};
855097
+ for (const extendedType of extendedTypes) {
855098
+ const extendedProperties = await getAllPropertiesForExtendedType(extendedType, file, typeResolver);
855099
+ Object.entries(extendedProperties).map(([propertyKey, objectProperty]) => {
855100
+ properties[propertyKey] = objectProperty;
855101
+ });
855102
+ }
855103
+ const objectProperties = await getObjectPropertiesFromRawObjectSchema(objectSchema, file);
855104
+ objectProperties.forEach((objectProperty) => {
855105
+ properties[objectProperty.name.name.originalName] = objectProperty;
855106
+ });
855107
+ return properties;
855108
+ }
855109
+ async function getAllPropertiesForExtendedType(extendedType, file, typeResolver) {
855110
+ const resolvedType = typeResolver.resolveNamedTypeOrThrow({
855111
+ referenceToNamedType: extendedType,
855112
+ file
855113
+ });
855114
+ if (resolvedType._type === "named" && isRawObjectDefinition(resolvedType.declaration)) {
855115
+ return await getAllPropertiesForRawObjectSchema(resolvedType.declaration, file, typeResolver);
855116
+ }
855117
+ throw new Error(`Extended type ${extendedType} must be another named type`);
855118
+ }
855119
+
855002
855120
  // pnp:/home/circleci/project/packages/cli/generation/ir-generator/lib/converters/services/convertHttpResponse.js
855003
855121
  async function convertHttpResponse({ endpoint, file, typeResolver }) {
855004
855122
  const { response, ["response-stream"]: responseStream } = endpoint;
@@ -855045,7 +855163,12 @@ async function convertJsonResponse(response, docs, file, typeResolver) {
855045
855163
  return HttpResponse.json(JsonResponse.nestedPropertyAsResponse({
855046
855164
  docs,
855047
855165
  responseBodyType,
855048
- responseProperty: await getObjectPropertyFromResolvedType(resolvedType, responseProperty, file, typeResolver)
855166
+ responseProperty: await getObjectPropertyFromResolvedType({
855167
+ typeResolver,
855168
+ file,
855169
+ resolvedType,
855170
+ property: responseProperty
855171
+ })
855049
855172
  }));
855050
855173
  }
855051
855174
  return HttpResponse.json(JsonResponse.response({
@@ -855053,35 +855176,88 @@ async function convertJsonResponse(response, docs, file, typeResolver) {
855053
855176
  responseBodyType
855054
855177
  }));
855055
855178
  }
855056
- async function getObjectPropertyFromResolvedType(resolvedType, property5, file, typeResolver) {
855057
- switch (resolvedType._type) {
855058
- case "container":
855059
- if (resolvedType.container._type === "optional") {
855060
- return await getObjectPropertyFromResolvedType(resolvedType.container.itemType, property5, file, typeResolver);
855061
- }
855062
- break;
855063
- case "named":
855064
- if (isRawObjectDefinition2(resolvedType.declaration)) {
855065
- return await getObjectPropertyFromObjectSchema(resolvedType.declaration, property5, resolvedType.file, typeResolver);
855066
- }
855067
- break;
855068
- case "primitive":
855069
- case "unknown":
855070
- break;
855071
- default:
855072
- assertNever(resolvedType);
855179
+
855180
+ // pnp:/home/circleci/project/packages/cli/generation/ir-generator/lib/converters/services/convertPaginationUtils.js
855181
+ function getPaginationPropertyComponents(endpointPagination) {
855182
+ if (isRawOffsetPaginationSchema(endpointPagination)) {
855183
+ return {
855184
+ type: "offset",
855185
+ offset: getRequestProperty(endpointPagination.offset),
855186
+ results: getResponsePropertyComponents(endpointPagination.results)
855187
+ };
855073
855188
  }
855074
- throw new Error("Internal error; response must be an object in order to return a property as a response");
855189
+ return {
855190
+ type: "cursor",
855191
+ cursor: getRequestProperty(endpointPagination.cursor),
855192
+ next_cursor: getResponsePropertyComponents(endpointPagination.next_cursor),
855193
+ results: getResponsePropertyComponents(endpointPagination.results)
855194
+ };
855075
855195
  }
855076
- async function getObjectPropertyFromObjectSchema(objectSchema, property5, file, typeResolver) {
855077
- const properties = await getAllPropertiesForRawObjectSchema(objectSchema, file, typeResolver);
855078
- const objectProperty = properties[property5];
855079
- if (objectProperty == null) {
855196
+ async function getNestedObjectPropertyFromResolvedType({ typeResolver, file, resolvedType, propertyComponents }) {
855197
+ if (propertyComponents.length === 0) {
855198
+ return void 0;
855199
+ }
855200
+ if (propertyComponents.length === 1) {
855201
+ return await getObjectPropertyFromResolvedType({
855202
+ typeResolver,
855203
+ file,
855204
+ resolvedType,
855205
+ property: propertyComponents[0] ?? ""
855206
+ });
855207
+ }
855208
+ const objectSchema = maybeObjectSchema(resolvedType);
855209
+ if (objectSchema == null) {
855210
+ return void 0;
855211
+ }
855212
+ const propertyType = await getPropertyTypeFromObjectSchema({
855213
+ typeResolver,
855214
+ file,
855215
+ objectSchema,
855216
+ property: propertyComponents[0] ?? ""
855217
+ });
855218
+ const resolvedTypeProperty = typeResolver.resolveTypeOrThrow({
855219
+ type: propertyType,
855220
+ file
855221
+ });
855222
+ return getNestedObjectPropertyFromResolvedType({
855223
+ typeResolver,
855224
+ file: maybeFileFromResolvedType(resolvedTypeProperty) ?? file,
855225
+ resolvedType: resolvedTypeProperty,
855226
+ propertyComponents: propertyComponents.slice(1)
855227
+ });
855228
+ }
855229
+ function resolveResponseType({ endpoint, typeResolver, file }) {
855230
+ var _a4;
855231
+ return typeResolver.resolveTypeOrThrow({
855232
+ type: (typeof endpoint.response !== "string" ? (_a4 = endpoint.response) == null ? void 0 : _a4.type : endpoint.response) ?? "",
855233
+ file
855234
+ });
855235
+ }
855236
+ function maybeFileFromResolvedType(resolvedType) {
855237
+ if (resolvedType == null) {
855238
+ return void 0;
855239
+ }
855240
+ if (resolvedType._type === "named") {
855241
+ return resolvedType.file;
855242
+ }
855243
+ if (resolvedType._type === "container" && resolvedType.container._type === "optional") {
855244
+ return maybeFileFromResolvedType(resolvedType.container.itemType);
855245
+ }
855246
+ return void 0;
855247
+ }
855248
+ async function getPropertyTypeFromObjectSchema({ typeResolver, file, objectSchema, property: property5 }) {
855249
+ const properties = await getAllPropertiesForRawObjectSchema2({
855250
+ typeResolver,
855251
+ file,
855252
+ objectSchema
855253
+ });
855254
+ const propertyType = properties[property5];
855255
+ if (propertyType == null) {
855080
855256
  throw new Error(`Response does not have a property named ${property5}.`);
855081
855257
  }
855082
- return objectProperty;
855258
+ return propertyType;
855083
855259
  }
855084
- async function getAllPropertiesForRawObjectSchema(objectSchema, file, typeResolver) {
855260
+ async function getAllPropertiesForRawObjectSchema2({ typeResolver, file, objectSchema }) {
855085
855261
  let extendedTypes = [];
855086
855262
  if (typeof objectSchema.extends === "string") {
855087
855263
  extendedTypes = [objectSchema.extends];
@@ -855090,29 +855266,165 @@ async function getAllPropertiesForRawObjectSchema(objectSchema, file, typeResolv
855090
855266
  }
855091
855267
  const properties = {};
855092
855268
  for (const extendedType of extendedTypes) {
855093
- const extendedProperties = await getAllPropertiesForExtendedType(extendedType, file, typeResolver);
855094
- Object.entries(extendedProperties).map(([propertyKey, objectProperty]) => {
855095
- properties[propertyKey] = objectProperty;
855269
+ const extendedProperties = await getAllPropertiesForExtendedType2({
855270
+ typeResolver,
855271
+ file,
855272
+ extendedType
855273
+ });
855274
+ Object.entries(extendedProperties).map(([propertyKey, propertyType]) => {
855275
+ properties[propertyKey] = propertyType;
855276
+ });
855277
+ }
855278
+ if (objectSchema.properties != null) {
855279
+ Object.entries(objectSchema.properties).map(([propertyKey, propertyType]) => {
855280
+ properties[propertyKey] = typeof propertyType === "string" ? propertyType : propertyType.type;
855096
855281
  });
855097
855282
  }
855098
- const objectProperties = await getObjectPropertiesFromRawObjectSchema(objectSchema, file);
855099
- objectProperties.forEach((objectProperty) => {
855100
- properties[objectProperty.name.name.originalName] = objectProperty;
855101
- });
855102
855283
  return properties;
855103
855284
  }
855104
- async function getAllPropertiesForExtendedType(extendedType, file, typeResolver) {
855285
+ async function getAllPropertiesForExtendedType2({ typeResolver, file, extendedType }) {
855105
855286
  const resolvedType = typeResolver.resolveNamedTypeOrThrow({
855106
855287
  referenceToNamedType: extendedType,
855107
855288
  file
855108
855289
  });
855109
- if (resolvedType._type === "named" && isRawObjectDefinition2(resolvedType.declaration)) {
855110
- return await getAllPropertiesForRawObjectSchema(resolvedType.declaration, file, typeResolver);
855290
+ if (resolvedType._type === "named" && isRawObjectDefinition(resolvedType.declaration)) {
855291
+ return await getAllPropertiesForRawObjectSchema2({
855292
+ typeResolver,
855293
+ file: maybeFileFromResolvedType(resolvedType) ?? file,
855294
+ objectSchema: resolvedType.declaration
855295
+ });
855111
855296
  }
855112
- throw new Error(`Extended type ${extendedType} must be another named type`);
855297
+ throw new Error(`Extended type ${extendedType} must be another named type.`);
855113
855298
  }
855114
- function isRawObjectDefinition2(namedDeclaration) {
855115
- return namedDeclaration.extends != null || namedDeclaration.properties != null;
855299
+ function maybeObjectSchema(resolvedType) {
855300
+ if (resolvedType == null) {
855301
+ return void 0;
855302
+ }
855303
+ if (resolvedType._type === "named" && isRawObjectDefinition(resolvedType.declaration)) {
855304
+ return resolvedType.declaration;
855305
+ }
855306
+ if (resolvedType._type === "container" && resolvedType.container._type === "optional") {
855307
+ return maybeObjectSchema(resolvedType.container.itemType);
855308
+ }
855309
+ return void 0;
855310
+ }
855311
+ function getRequestProperty(value) {
855312
+ return value.substring("$request.".length);
855313
+ }
855314
+ function getResponsePropertyComponents(value) {
855315
+ const trimmed = value.substring("$response.".length);
855316
+ return (trimmed == null ? void 0 : trimmed.split(".")) ?? [];
855317
+ }
855318
+ function isRawOffsetPaginationSchema(rawPaginationSchema) {
855319
+ return rawPaginationSchema.offset != null && rawPaginationSchema.results != null;
855320
+ }
855321
+
855322
+ // pnp:/home/circleci/project/packages/cli/generation/ir-generator/lib/converters/services/convertCursorPagination.js
855323
+ async function convertCursorPagination({ typeResolver, file, endpointSchema, paginationPropertyComponents }) {
855324
+ var _a4, _b3, _c3;
855325
+ const queryParameterSchema = typeof endpointSchema.request !== "string" && ((_a4 = endpointSchema.request) == null ? void 0 : _a4["query-parameters"]) != null ? (_c3 = (_b3 = endpointSchema == null ? void 0 : endpointSchema.request) == null ? void 0 : _b3["query-parameters"]) == null ? void 0 : _c3[paginationPropertyComponents.cursor] : void 0;
855326
+ if (queryParameterSchema == null) {
855327
+ return void 0;
855328
+ }
855329
+ const resolvedResponseType = resolveResponseType({
855330
+ typeResolver,
855331
+ file,
855332
+ endpoint: endpointSchema
855333
+ });
855334
+ const nextCursorObjectProperty = await getNestedObjectPropertyFromResolvedType({
855335
+ typeResolver,
855336
+ file: maybeFileFromResolvedType(resolvedResponseType) ?? file,
855337
+ resolvedType: resolvedResponseType,
855338
+ propertyComponents: paginationPropertyComponents.next_cursor
855339
+ });
855340
+ if (nextCursorObjectProperty == null) {
855341
+ return void 0;
855342
+ }
855343
+ const resultsObjectProperty = await getNestedObjectPropertyFromResolvedType({
855344
+ typeResolver,
855345
+ file: maybeFileFromResolvedType(resolvedResponseType) ?? file,
855346
+ resolvedType: resolvedResponseType,
855347
+ propertyComponents: paginationPropertyComponents.results
855348
+ });
855349
+ if (resultsObjectProperty == null) {
855350
+ return void 0;
855351
+ }
855352
+ return Pagination.cursor({
855353
+ page: await convertQueryParameter({
855354
+ file,
855355
+ queryParameterKey: paginationPropertyComponents.cursor,
855356
+ queryParameter: queryParameterSchema
855357
+ }),
855358
+ next: {
855359
+ propertyPath: paginationPropertyComponents.next_cursor.map((property5) => file.casingsGenerator.generateName(property5)),
855360
+ property: nextCursorObjectProperty
855361
+ },
855362
+ results: {
855363
+ propertyPath: paginationPropertyComponents.results.map((property5) => file.casingsGenerator.generateName(property5)),
855364
+ property: resultsObjectProperty
855365
+ }
855366
+ });
855367
+ }
855368
+
855369
+ // pnp:/home/circleci/project/packages/cli/generation/ir-generator/lib/converters/services/convertOffsetPagination.js
855370
+ async function convertOffsetPagination({ typeResolver, file, endpointSchema, paginationPropertyComponents }) {
855371
+ var _a4, _b3, _c3;
855372
+ const queryParameterSchema = typeof endpointSchema.request !== "string" && ((_a4 = endpointSchema.request) == null ? void 0 : _a4["query-parameters"]) != null ? (_c3 = (_b3 = endpointSchema == null ? void 0 : endpointSchema.request) == null ? void 0 : _b3["query-parameters"]) == null ? void 0 : _c3[paginationPropertyComponents.offset] : void 0;
855373
+ if (queryParameterSchema == null) {
855374
+ return void 0;
855375
+ }
855376
+ const resolvedResponseType = resolveResponseType({
855377
+ typeResolver,
855378
+ file,
855379
+ endpoint: endpointSchema
855380
+ });
855381
+ const resultsObjectProperty = await getNestedObjectPropertyFromResolvedType({
855382
+ typeResolver,
855383
+ file: maybeFileFromResolvedType(resolvedResponseType) ?? file,
855384
+ resolvedType: resolvedResponseType,
855385
+ propertyComponents: paginationPropertyComponents.results
855386
+ });
855387
+ if (resultsObjectProperty == null) {
855388
+ return void 0;
855389
+ }
855390
+ return Pagination.offset({
855391
+ page: await convertQueryParameter({
855392
+ file,
855393
+ queryParameterKey: paginationPropertyComponents.offset,
855394
+ queryParameter: queryParameterSchema
855395
+ }),
855396
+ results: {
855397
+ propertyPath: paginationPropertyComponents.results.map((property5) => file.casingsGenerator.generateName(property5)),
855398
+ property: resultsObjectProperty
855399
+ }
855400
+ });
855401
+ }
855402
+
855403
+ // pnp:/home/circleci/project/packages/cli/generation/ir-generator/lib/converters/services/convertPagination.js
855404
+ async function convertPagination({ typeResolver, file, endpointSchema }) {
855405
+ const endpointPagination = typeof endpointSchema.pagination === "boolean" ? file.rootApiFile.pagination : endpointSchema.pagination;
855406
+ if (!endpointPagination) {
855407
+ return void 0;
855408
+ }
855409
+ const paginationPropertyComponents = getPaginationPropertyComponents(endpointPagination);
855410
+ switch (paginationPropertyComponents.type) {
855411
+ case "cursor":
855412
+ return await convertCursorPagination({
855413
+ typeResolver,
855414
+ file,
855415
+ endpointSchema,
855416
+ paginationPropertyComponents
855417
+ });
855418
+ case "offset":
855419
+ return convertOffsetPagination({
855420
+ typeResolver,
855421
+ file,
855422
+ endpointSchema,
855423
+ paginationPropertyComponents
855424
+ });
855425
+ default:
855426
+ assertNever(paginationPropertyComponents);
855427
+ }
855116
855428
  }
855117
855429
 
855118
855430
  // pnp:/home/circleci/project/packages/cli/generation/ir-generator/lib/converters/services/convertResponseErrors.js
@@ -855139,7 +855451,7 @@ async function convertHttpService({ rootPathParameters, serviceDefinition, file,
855139
855451
  variableResolver
855140
855452
  });
855141
855453
  const serviceName = { fernFilepath: file.fernFilepath };
855142
- return {
855454
+ const service = {
855143
855455
  availability: convertAvailability(serviceDefinition.availability),
855144
855456
  name: serviceName,
855145
855457
  displayName: serviceDefinition["display-name"] ?? void 0,
@@ -855168,17 +855480,11 @@ async function convertHttpService({ rootPathParameters, serviceDefinition, file,
855168
855480
  pathParameters: endpointPathParameters,
855169
855481
  allPathParameters: [...rootPathParameters, ...servicePathParameters, ...endpointPathParameters],
855170
855482
  queryParameters: typeof endpoint.request !== "string" && ((_a4 = endpoint.request) == null ? void 0 : _a4["query-parameters"]) != null ? await Promise.all(Object.entries(endpoint.request["query-parameters"]).map(async ([queryParameterKey, queryParameter]) => {
855171
- const { name: name2 } = getQueryParameterName({ queryParameterKey, queryParameter });
855172
- const valueType = file.parseTypeReference(queryParameter);
855173
- return {
855174
- ...await convertDeclaration(queryParameter),
855175
- name: file.casingsGenerator.generateNameAndWireValue({
855176
- wireValue: queryParameterKey,
855177
- name: name2
855178
- }),
855179
- valueType,
855180
- allowMultiple: typeof queryParameter !== "string" && queryParameter["allow-multiple"] != null ? queryParameter["allow-multiple"] : false
855181
- };
855483
+ return await convertQueryParameter({
855484
+ file,
855485
+ queryParameterKey,
855486
+ queryParameter
855487
+ });
855182
855488
  })) : [],
855183
855489
  headers: typeof endpoint.request !== "string" && ((_b3 = endpoint.request) == null ? void 0 : _b3.headers) != null ? await Promise.all(Object.entries(endpoint.request.headers).map(([headerKey, header]) => convertHttpHeader({ headerKey, header, file }))) : [],
855184
855490
  requestBody: convertHttpRequestBody({ request: endpoint.request, file }),
@@ -855201,12 +855507,17 @@ async function convertHttpService({ rootPathParameters, serviceDefinition, file,
855201
855507
  file,
855202
855508
  workspace
855203
855509
  })) : [],
855204
- pagination: void 0
855510
+ pagination: await convertPagination({
855511
+ typeResolver,
855512
+ file,
855513
+ endpointSchema: endpoint
855514
+ })
855205
855515
  };
855206
855516
  httpEndpoint.id = IdGenerator.generateEndpointId(serviceName, httpEndpoint);
855207
855517
  return httpEndpoint;
855208
855518
  }))
855209
855519
  };
855520
+ return service;
855210
855521
  }
855211
855522
  async function convertPathParameters2({ pathParameters, location: location2, file, variableResolver }) {
855212
855523
  if (pathParameters == null) {
@@ -855267,14 +855578,6 @@ function resolvePathParameter({ parameter, variableResolver, file }) {
855267
855578
  };
855268
855579
  }
855269
855580
  }
855270
- function getQueryParameterName({ queryParameterKey, queryParameter }) {
855271
- if (typeof queryParameter !== "string") {
855272
- if (queryParameter.name != null) {
855273
- return { name: queryParameter.name, wasExplicitlySet: true };
855274
- }
855275
- }
855276
- return { name: queryParameterKey, wasExplicitlySet: false };
855277
- }
855278
855581
  function convertHttpMethod2(method2) {
855279
855582
  switch (method2) {
855280
855583
  case "GET":
@@ -859596,7 +859899,7 @@ function resolvedTypeHasProperty(resolvedType, property5, file, typeResolver) {
859596
859899
  }
859597
859900
  return resolvedTypeHasProperty(resolvedType.container.itemType, property5, file, typeResolver);
859598
859901
  case "named":
859599
- if (!isRawObjectDefinition3(resolvedType.declaration)) {
859902
+ if (!isRawObjectDefinition2(resolvedType.declaration)) {
859600
859903
  return Result.IsNotObject;
859601
859904
  }
859602
859905
  if (rawObjectSchemaHasProperty(resolvedType.declaration, property5, file, typeResolver)) {
@@ -859611,10 +859914,10 @@ function resolvedTypeHasProperty(resolvedType, property5, file, typeResolver) {
859611
859914
  }
859612
859915
  }
859613
859916
  function rawObjectSchemaHasProperty(objectSchema, property5, file, typeResolver) {
859614
- const properties = getAllPropertiesForRawObjectSchema2(objectSchema, file, typeResolver);
859917
+ const properties = getAllPropertiesForRawObjectSchema3(objectSchema, file, typeResolver);
859615
859918
  return properties.has(property5);
859616
859919
  }
859617
- function getAllPropertiesForRawObjectSchema2(objectSchema, file, typeResolver) {
859920
+ function getAllPropertiesForRawObjectSchema3(objectSchema, file, typeResolver) {
859618
859921
  let extendedTypes = [];
859619
859922
  if (typeof objectSchema.extends === "string") {
859620
859923
  extendedTypes = [objectSchema.extends];
@@ -859623,7 +859926,7 @@ function getAllPropertiesForRawObjectSchema2(objectSchema, file, typeResolver) {
859623
859926
  }
859624
859927
  const properties = /* @__PURE__ */ new Set();
859625
859928
  for (const extendedType of extendedTypes) {
859626
- for (const extendedProperty of getAllPropertiesForExtendedType2(extendedType, file, typeResolver)) {
859929
+ for (const extendedProperty of getAllPropertiesForExtendedType3(extendedType, file, typeResolver)) {
859627
859930
  properties.add(extendedProperty);
859628
859931
  }
859629
859932
  }
@@ -859632,17 +859935,17 @@ function getAllPropertiesForRawObjectSchema2(objectSchema, file, typeResolver) {
859632
859935
  }
859633
859936
  return properties;
859634
859937
  }
859635
- function getAllPropertiesForExtendedType2(extendedType, file, typeResolver) {
859938
+ function getAllPropertiesForExtendedType3(extendedType, file, typeResolver) {
859636
859939
  const resolvedType = typeResolver.resolveNamedTypeOrThrow({
859637
859940
  referenceToNamedType: extendedType,
859638
859941
  file
859639
859942
  });
859640
- if (resolvedType._type === "named" && isRawObjectDefinition3(resolvedType.declaration)) {
859641
- return getAllPropertiesForRawObjectSchema2(resolvedType.declaration, file, typeResolver);
859943
+ if (resolvedType._type === "named" && isRawObjectDefinition2(resolvedType.declaration)) {
859944
+ return getAllPropertiesForRawObjectSchema3(resolvedType.declaration, file, typeResolver);
859642
859945
  }
859643
859946
  return /* @__PURE__ */ new Set();
859644
859947
  }
859645
- function isRawObjectDefinition3(namedDeclaration) {
859948
+ function isRawObjectDefinition2(namedDeclaration) {
859646
859949
  return namedDeclaration.extends != null || namedDeclaration.properties != null;
859647
859950
  }
859648
859951
 
@@ -860582,6 +860885,422 @@ var ValidNavigationRule = {
860582
860885
  }
860583
860886
  };
860584
860887
 
860888
+ // pnp:/home/circleci/project/packages/cli/yaml/validator/lib/rules/valid-pagination/validateUtils.js
860889
+ var REQUEST_PREFIX2 = "$request.";
860890
+ var RESPONSE_PREFIX = "$response.";
860891
+ function validateResultsProperty({ endpointId, typeResolver, file, resolvedResponseType, resultsProperty }) {
860892
+ return validateResponseProperty({
860893
+ endpointId,
860894
+ typeResolver,
860895
+ file,
860896
+ resolvedResponseType,
860897
+ responseProperty: resultsProperty,
860898
+ propertyValidator: {
860899
+ propertyID: "results",
860900
+ validate: isValidResultsProperty
860901
+ }
860902
+ });
860903
+ }
860904
+ function validateQueryParameterProperty({ endpointId, endpoint, typeResolver, file, queryParameterProperty, propertyValidator }) {
860905
+ var _a4;
860906
+ const violations = [];
860907
+ const queryPropertyComponents = getRequestPropertyComponents(queryParameterProperty);
860908
+ if (queryPropertyComponents == null) {
860909
+ violations.push({
860910
+ severity: "error",
860911
+ message: `Pagination configuration for endpoint ${source_default.bold(endpointId)} must define a dot-delimited '${propertyValidator.propertyID}' property starting with $request (e.g. $request.${propertyValidator.propertyID}).`
860912
+ });
860913
+ return violations;
860914
+ }
860915
+ const queryPropertyName = queryPropertyComponents == null ? void 0 : queryPropertyComponents[0];
860916
+ if (queryPropertyName == null || queryPropertyComponents.length !== 1) {
860917
+ violations.push({
860918
+ severity: "error",
860919
+ message: `Pagination configuration for endpoint ${source_default.bold(endpointId)} is only compatible with '${propertyValidator.propertyID}' properties that are defined as query parameters (e.g. $request.${propertyValidator.propertyID}).`
860920
+ });
860921
+ return violations;
860922
+ }
860923
+ const queryParameters = typeof endpoint.request !== "string" ? (_a4 = endpoint.request) == null ? void 0 : _a4["query-parameters"] : null;
860924
+ if (queryParameters == null) {
860925
+ violations.push({
860926
+ severity: "error",
860927
+ message: `Pagination configuration for endpoint ${source_default.bold(endpointId)} specifies '${propertyValidator.propertyID}' ${queryParameterProperty}, but that query parameter does not exist.`
860928
+ });
860929
+ return violations;
860930
+ }
860931
+ const queryParameter = queryParameters[queryPropertyName];
860932
+ if (queryParameter == null) {
860933
+ violations.push({
860934
+ severity: "error",
860935
+ message: `Pagination configuration for endpoint ${source_default.bold(endpointId)} specifies '${propertyValidator.propertyID}' ${queryParameterProperty}, but that query parameter does not exist.`
860936
+ });
860937
+ return violations;
860938
+ }
860939
+ const queryParameterType = typeof queryParameter !== "string" ? queryParameter.type : queryParameter;
860940
+ const resolvedQueryParameterType = typeResolver.resolveType({
860941
+ type: queryParameterType,
860942
+ file
860943
+ });
860944
+ if (!propertyValidator.validate({
860945
+ typeResolver,
860946
+ file: maybeFileFromResolvedType2(resolvedQueryParameterType) ?? file,
860947
+ resolvedType: resolvedQueryParameterType,
860948
+ propertyComponents: queryPropertyComponents.slice(1)
860949
+ })) {
860950
+ violations.push({
860951
+ severity: "error",
860952
+ message: `Pagination configuration for endpoint ${source_default.bold(endpointId)} specifies '${propertyValidator.propertyID}' ${queryParameterProperty}, which is not a valid '${propertyValidator.propertyID}' type.`
860953
+ });
860954
+ }
860955
+ return violations;
860956
+ }
860957
+ function validateResponseProperty({ endpointId, typeResolver, file, resolvedResponseType, responseProperty, propertyValidator }) {
860958
+ const violations = [];
860959
+ const responsePropertyComponents = getResponsePropertyComponents2(responseProperty);
860960
+ if (responsePropertyComponents == null) {
860961
+ violations.push({
860962
+ severity: "error",
860963
+ message: `Pagination configuration for endpoint ${source_default.bold(endpointId)} must define a dot-delimited '${propertyValidator.propertyID}' property starting with $response (e.g. $response.${propertyValidator.propertyID}).`
860964
+ });
860965
+ }
860966
+ if (responsePropertyComponents != null && !propertyValidator.validate({
860967
+ typeResolver,
860968
+ file,
860969
+ resolvedType: resolvedResponseType,
860970
+ propertyComponents: responsePropertyComponents
860971
+ })) {
860972
+ violations.push({
860973
+ severity: "error",
860974
+ message: `Pagination configuration for endpoint ${source_default.bold(endpointId)} specifies '${propertyValidator.propertyID}' ${responseProperty}, which is not a valid '${propertyValidator.propertyID}' type.`
860975
+ });
860976
+ }
860977
+ return violations;
860978
+ }
860979
+ function resolvedTypeHasProperty2({ typeResolver, file, resolvedType, propertyComponents, validate: validate3 }) {
860980
+ if (propertyComponents.length === 0) {
860981
+ return validate3(resolvedType);
860982
+ }
860983
+ const objectSchema = maybeObjectSchema2(resolvedType);
860984
+ if (objectSchema == null) {
860985
+ return false;
860986
+ }
860987
+ const property5 = getPropertyTypeFromObjectSchema2({
860988
+ typeResolver,
860989
+ file,
860990
+ objectSchema,
860991
+ property: propertyComponents[0] ?? ""
860992
+ });
860993
+ if (property5 == null) {
860994
+ return false;
860995
+ }
860996
+ const resolvedTypeProperty = typeResolver.resolveType({
860997
+ type: property5,
860998
+ file
860999
+ });
861000
+ return resolvedTypeHasProperty2({
861001
+ typeResolver,
861002
+ file: maybeFileFromResolvedType2(resolvedTypeProperty) ?? file,
861003
+ resolvedType: resolvedTypeProperty,
861004
+ propertyComponents: propertyComponents.slice(1),
861005
+ validate: validate3
861006
+ });
861007
+ }
861008
+ function resolveResponseType2({ endpoint, typeResolver, file }) {
861009
+ var _a4;
861010
+ const responseType = typeof endpoint.response !== "string" ? (_a4 = endpoint.response) == null ? void 0 : _a4.type : endpoint.response;
861011
+ if (responseType == null) {
861012
+ return void 0;
861013
+ }
861014
+ return typeResolver.resolveType({
861015
+ type: responseType,
861016
+ file
861017
+ });
861018
+ }
861019
+ function maybePrimitiveType(resolvedType) {
861020
+ if ((resolvedType == null ? void 0 : resolvedType._type) === "primitive") {
861021
+ return resolvedType.primitive;
861022
+ }
861023
+ if ((resolvedType == null ? void 0 : resolvedType._type) === "container" && resolvedType.container._type === "optional") {
861024
+ return maybePrimitiveType(resolvedType.container.itemType);
861025
+ }
861026
+ return void 0;
861027
+ }
861028
+ function maybeFileFromResolvedType2(resolvedType) {
861029
+ if (resolvedType == null) {
861030
+ return void 0;
861031
+ }
861032
+ if (resolvedType._type === "named") {
861033
+ return resolvedType.file;
861034
+ }
861035
+ if (resolvedType._type === "container" && resolvedType.container._type === "optional") {
861036
+ return maybeFileFromResolvedType2(resolvedType.container.itemType);
861037
+ }
861038
+ return void 0;
861039
+ }
861040
+ function getPropertyTypeFromObjectSchema2({ typeResolver, file, objectSchema, property: property5 }) {
861041
+ const properties = getAllPropertiesForRawObjectSchema4({
861042
+ typeResolver,
861043
+ file,
861044
+ objectSchema
861045
+ });
861046
+ return properties[property5];
861047
+ }
861048
+ function getAllPropertiesForRawObjectSchema4({ typeResolver, file, objectSchema }) {
861049
+ let extendedTypes = [];
861050
+ if (typeof objectSchema.extends === "string") {
861051
+ extendedTypes = [objectSchema.extends];
861052
+ } else if (Array.isArray(objectSchema.extends)) {
861053
+ extendedTypes = objectSchema.extends;
861054
+ }
861055
+ const properties = {};
861056
+ for (const extendedType of extendedTypes) {
861057
+ const extendedProperties = getAllPropertiesForExtendedType4({
861058
+ typeResolver,
861059
+ file,
861060
+ extendedType
861061
+ });
861062
+ Object.entries(extendedProperties).map(([propertyKey, propertyType]) => {
861063
+ properties[propertyKey] = propertyType;
861064
+ });
861065
+ }
861066
+ if (objectSchema.properties != null) {
861067
+ Object.entries(objectSchema.properties).map(([propertyKey, propertyType]) => {
861068
+ properties[propertyKey] = typeof propertyType === "string" ? propertyType : propertyType.type;
861069
+ });
861070
+ }
861071
+ return properties;
861072
+ }
861073
+ function getAllPropertiesForExtendedType4({ typeResolver, file, extendedType }) {
861074
+ const resolvedType = typeResolver.resolveNamedTypeOrThrow({
861075
+ referenceToNamedType: extendedType,
861076
+ file
861077
+ });
861078
+ if (resolvedType._type === "named" && isRawObjectDefinition(resolvedType.declaration)) {
861079
+ return getAllPropertiesForRawObjectSchema4({
861080
+ typeResolver,
861081
+ file: maybeFileFromResolvedType2(resolvedType) ?? file,
861082
+ objectSchema: resolvedType.declaration
861083
+ });
861084
+ }
861085
+ return {};
861086
+ }
861087
+ function isValidResultsProperty({ typeResolver, file, resolvedType, propertyComponents }) {
861088
+ return resolvedTypeHasProperty2({
861089
+ typeResolver,
861090
+ file,
861091
+ resolvedType,
861092
+ propertyComponents,
861093
+ validate: isValidResultsType
861094
+ });
861095
+ }
861096
+ function isValidResultsType(resolvedType) {
861097
+ return true;
861098
+ }
861099
+ function maybeObjectSchema2(resolvedType) {
861100
+ if (resolvedType == null) {
861101
+ return void 0;
861102
+ }
861103
+ if (resolvedType._type === "named" && isRawObjectDefinition(resolvedType.declaration)) {
861104
+ return resolvedType.declaration;
861105
+ }
861106
+ if (resolvedType._type === "container" && resolvedType.container._type === "optional") {
861107
+ return maybeObjectSchema2(resolvedType.container.itemType);
861108
+ }
861109
+ return void 0;
861110
+ }
861111
+ function getRequestPropertyComponents(value) {
861112
+ const trimmed = trimPrefix(value, REQUEST_PREFIX2);
861113
+ return trimmed == null ? void 0 : trimmed.split(".");
861114
+ }
861115
+ function getResponsePropertyComponents2(value) {
861116
+ const trimmed = trimPrefix(value, RESPONSE_PREFIX);
861117
+ return trimmed == null ? void 0 : trimmed.split(".");
861118
+ }
861119
+ function trimPrefix(value, prefix) {
861120
+ if (value.startsWith(prefix)) {
861121
+ return value.substring(prefix.length);
861122
+ }
861123
+ return null;
861124
+ }
861125
+
861126
+ // pnp:/home/circleci/project/packages/cli/yaml/validator/lib/rules/valid-pagination/validateCursorPagination.js
861127
+ function validateCursorPagination({ endpointId, endpoint, typeResolver, file, cursorPagination }) {
861128
+ const violations = [];
861129
+ violations.push(...validateCursorProperty({
861130
+ endpointId,
861131
+ endpoint,
861132
+ typeResolver,
861133
+ file,
861134
+ cursorPagination
861135
+ }));
861136
+ const resolvedResponseType = resolveResponseType2({ endpoint, typeResolver, file });
861137
+ if (resolvedResponseType == null) {
861138
+ violations.push({
861139
+ severity: "error",
861140
+ message: `Pagination configuration for endpoint ${source_default.bold(endpointId)} must define a response type.`
861141
+ });
861142
+ return violations;
861143
+ }
861144
+ violations.push(...validateNextCursorProperty({
861145
+ endpointId,
861146
+ typeResolver,
861147
+ file: maybeFileFromResolvedType2(resolvedResponseType) ?? file,
861148
+ resolvedResponseType,
861149
+ nextProperty: cursorPagination.next_cursor
861150
+ }));
861151
+ violations.push(...validateResultsProperty({
861152
+ endpointId,
861153
+ typeResolver,
861154
+ file: maybeFileFromResolvedType2(resolvedResponseType) ?? file,
861155
+ resolvedResponseType,
861156
+ resultsProperty: cursorPagination.results
861157
+ }));
861158
+ return violations;
861159
+ }
861160
+ function validateCursorProperty({ endpointId, endpoint, typeResolver, file, cursorPagination }) {
861161
+ return validateQueryParameterProperty({
861162
+ endpointId,
861163
+ endpoint,
861164
+ typeResolver,
861165
+ file,
861166
+ queryParameterProperty: cursorPagination.cursor,
861167
+ propertyValidator: {
861168
+ propertyID: "cursor",
861169
+ validate: isValidCursorProperty
861170
+ }
861171
+ });
861172
+ }
861173
+ function validateNextCursorProperty({ endpointId, typeResolver, file, resolvedResponseType, nextProperty }) {
861174
+ return validateResponseProperty({
861175
+ endpointId,
861176
+ typeResolver,
861177
+ file,
861178
+ resolvedResponseType,
861179
+ responseProperty: nextProperty,
861180
+ propertyValidator: {
861181
+ propertyID: "next_cursor",
861182
+ validate: isValidCursorProperty
861183
+ }
861184
+ });
861185
+ }
861186
+ function isValidCursorProperty({ typeResolver, file, resolvedType, propertyComponents }) {
861187
+ return resolvedTypeHasProperty2({
861188
+ typeResolver,
861189
+ file,
861190
+ resolvedType,
861191
+ propertyComponents,
861192
+ validate: isValidCursorType
861193
+ });
861194
+ }
861195
+ function isValidCursorType(resolvedType) {
861196
+ const primitiveType = maybePrimitiveType(resolvedType);
861197
+ if (primitiveType == null) {
861198
+ return false;
861199
+ }
861200
+ return primitiveType !== "BOOLEAN";
861201
+ }
861202
+
861203
+ // pnp:/home/circleci/project/packages/cli/yaml/validator/lib/rules/valid-pagination/validateOffsetPagination.js
861204
+ function validateOffsetPagination({ endpointId, endpoint, typeResolver, file, offsetPagination }) {
861205
+ const violations = [];
861206
+ violations.push(...validateOffsetProperty({
861207
+ endpointId,
861208
+ endpoint,
861209
+ typeResolver,
861210
+ file,
861211
+ offsetPagination
861212
+ }));
861213
+ const resolvedResponseType = resolveResponseType2({ endpoint, typeResolver, file });
861214
+ if (resolvedResponseType == null) {
861215
+ violations.push({
861216
+ severity: "error",
861217
+ message: `Pagination configuration for endpoint ${source_default.bold(endpointId)} must define a response type.`
861218
+ });
861219
+ return violations;
861220
+ }
861221
+ violations.push(...validateResultsProperty({
861222
+ endpointId,
861223
+ typeResolver,
861224
+ file: maybeFileFromResolvedType2(resolvedResponseType) ?? file,
861225
+ resolvedResponseType,
861226
+ resultsProperty: offsetPagination.results
861227
+ }));
861228
+ return violations;
861229
+ }
861230
+ function validateOffsetProperty({ endpointId, endpoint, typeResolver, file, offsetPagination }) {
861231
+ return validateQueryParameterProperty({
861232
+ endpointId,
861233
+ endpoint,
861234
+ typeResolver,
861235
+ file,
861236
+ queryParameterProperty: offsetPagination.offset,
861237
+ propertyValidator: {
861238
+ propertyID: "offset",
861239
+ validate: isValidOffsetProperty
861240
+ }
861241
+ });
861242
+ }
861243
+ function isValidOffsetProperty({ typeResolver, file, resolvedType, propertyComponents }) {
861244
+ return resolvedTypeHasProperty2({
861245
+ typeResolver,
861246
+ file,
861247
+ resolvedType,
861248
+ propertyComponents,
861249
+ validate: isValidOffsetType
861250
+ });
861251
+ }
861252
+ function isValidOffsetType(resolvedType) {
861253
+ const primitiveType = maybePrimitiveType(resolvedType);
861254
+ if (primitiveType == null) {
861255
+ return false;
861256
+ }
861257
+ return primitiveType === "INTEGER" || primitiveType === "LONG" || primitiveType === "DOUBLE";
861258
+ }
861259
+
861260
+ // pnp:/home/circleci/project/packages/cli/yaml/validator/lib/rules/valid-pagination/valid-pagination.js
861261
+ var ValidPaginationRule = {
861262
+ name: "valid-pagination",
861263
+ create: ({ workspace }) => {
861264
+ const typeResolver = new TypeResolverImpl(workspace);
861265
+ const defaultPagination = workspace.definition.rootApiFile.contents.pagination;
861266
+ return {
861267
+ definitionFile: {
861268
+ httpEndpoint: ({ endpointId, endpoint }, { relativeFilepath, contents: definitionFile }) => {
861269
+ const endpointPagination = typeof endpoint.pagination === "boolean" ? defaultPagination : endpoint.pagination;
861270
+ if (!endpointPagination) {
861271
+ return [];
861272
+ }
861273
+ const file = constructFernFileContext({
861274
+ relativeFilepath,
861275
+ definitionFile,
861276
+ casingsGenerator: CASINGS_GENERATOR2,
861277
+ rootApiFile: workspace.definition.rootApiFile.contents
861278
+ });
861279
+ if (isRawCursorPaginationSchema(endpointPagination)) {
861280
+ return validateCursorPagination({
861281
+ endpointId,
861282
+ endpoint,
861283
+ typeResolver,
861284
+ file,
861285
+ cursorPagination: endpointPagination
861286
+ });
861287
+ }
861288
+ return validateOffsetPagination({
861289
+ endpointId,
861290
+ endpoint,
861291
+ typeResolver,
861292
+ file,
861293
+ offsetPagination: endpointPagination
861294
+ });
861295
+ }
861296
+ }
861297
+ };
861298
+ }
861299
+ };
861300
+ function isRawCursorPaginationSchema(rawPaginationSchema) {
861301
+ return rawPaginationSchema.cursor != null && rawPaginationSchema.next_cursor != null && rawPaginationSchema.results != null;
861302
+ }
861303
+
860585
861304
  // pnp:/home/circleci/project/packages/cli/yaml/validator/lib/rules/valid-service-urls/valid-service-url.js
860586
861305
  var ValidServiceUrlsRule = {
860587
861306
  name: "valid-service-urls",
@@ -860707,7 +861426,8 @@ function getAllRules() {
860707
861426
  NoUndefinedVariableReferenceRule,
860708
861427
  OnlyObjectExtensionsRule,
860709
861428
  NoMaybeStreamingRule,
860710
- NoResponsePropertyRule
861429
+ NoResponsePropertyRule,
861430
+ ValidPaginationRule
860711
861431
  ];
860712
861432
  }
860713
861433
  function getAllEnabledRules() {
@@ -861549,13 +862269,13 @@ function convertEndpoint2(endpoint) {
861549
862269
  requestBody: endpoint.requestBody != null ? convertRequestBody2(endpoint.requestBody) : void 0,
861550
862270
  response: endpoint.response != null ? convertHttpResponse2(endpoint.response) : void 0,
861551
862271
  headers: endpoint.headers.map((header) => convertHttpHeader2(header)),
861552
- queryParameters: endpoint.queryParameters.map((queryParameter) => convertQueryParameter(queryParameter)),
862272
+ queryParameters: endpoint.queryParameters.map((queryParameter) => convertQueryParameter2(queryParameter)),
861553
862273
  examples: endpoint.examples,
861554
862274
  streamingResponse: endpoint.streamingResponse != null ? convertStreamingResponse(endpoint.streamingResponse) : void 0,
861555
862275
  sdkResponse: endpoint.sdkResponse != null ? convertSdkResponse(endpoint.sdkResponse) : void 0
861556
862276
  };
861557
862277
  }
861558
- function convertQueryParameter(queryParameter) {
862278
+ function convertQueryParameter2(queryParameter) {
861559
862279
  return {
861560
862280
  availability: queryParameter.availability,
861561
862281
  docs: queryParameter.docs,
@@ -861874,13 +862594,13 @@ function convertEndpoint3(endpoint) {
861874
862594
  requestBody: endpoint.requestBody != null ? convertRequestBody3(endpoint.requestBody) : void 0,
861875
862595
  response: endpoint.response != null ? convertHttpResponse3(endpoint.response) : void 0,
861876
862596
  headers: endpoint.headers.map((header) => convertHttpHeader3(header)),
861877
- queryParameters: endpoint.queryParameters.map((queryParameter) => convertQueryParameter2(queryParameter)),
862597
+ queryParameters: endpoint.queryParameters.map((queryParameter) => convertQueryParameter3(queryParameter)),
861878
862598
  examples: endpoint.examples,
861879
862599
  streamingResponse: endpoint.streamingResponse != null ? convertStreamingResponse2(endpoint.streamingResponse) : void 0,
861880
862600
  sdkResponse: endpoint.sdkResponse != null ? convertSdkResponse2(endpoint.sdkResponse) : void 0
861881
862601
  };
861882
862602
  }
861883
- function convertQueryParameter2(queryParameter) {
862603
+ function convertQueryParameter3(queryParameter) {
861884
862604
  return {
861885
862605
  availability: queryParameter.availability,
861886
862606
  docs: queryParameter.docs,
@@ -862732,7 +863452,7 @@ function convertEndpoint8(endpoint) {
862732
863452
  headers: endpoint.headers.map((header) => convertHeader3(header)),
862733
863453
  pathParameters: endpoint.pathParameters.map((pathParameter) => convertPathParameter5(pathParameter)),
862734
863454
  allPathParameters: endpoint.allPathParameters.map((pathParameter) => convertPathParameter5(pathParameter)),
862735
- queryParameters: endpoint.queryParameters.map((queryParameter) => convertQueryParameter3(queryParameter)),
863455
+ queryParameters: endpoint.queryParameters.map((queryParameter) => convertQueryParameter4(queryParameter)),
862736
863456
  requestBody: convertedRequestBody,
862737
863457
  sdkRequest: endpoint.sdkRequest != null ? {
862738
863458
  requestParameterName: endpoint.sdkRequest.requestParameterName,
@@ -862985,7 +863705,7 @@ function convertPathParameter5(pathParameter) {
862985
863705
  valueType: convertTypeReference4(pathParameter.valueType)
862986
863706
  };
862987
863707
  }
862988
- function convertQueryParameter3(queryParameter) {
863708
+ function convertQueryParameter4(queryParameter) {
862989
863709
  return {
862990
863710
  ...queryParameter,
862991
863711
  valueType: convertTypeReference4(queryParameter.valueType)
@@ -863374,7 +864094,7 @@ function convertEndpoint9(val) {
863374
864094
  return {
863375
864095
  ...val,
863376
864096
  headers: val.headers.map((header) => convertHeader4(header)),
863377
- queryParameters: val.queryParameters.map((query) => convertQueryParameter4(query)),
864097
+ queryParameters: val.queryParameters.map((query) => convertQueryParameter5(query)),
863378
864098
  availability: val.availability == null ? {
863379
864099
  status: IrVersions_exports.V25.AvailabilityStatus.GeneralAvailability,
863380
864100
  message: void 0
@@ -863390,7 +864110,7 @@ function convertHeader4(val) {
863390
864110
  } : val.availability
863391
864111
  };
863392
864112
  }
863393
- function convertQueryParameter4(val) {
864113
+ function convertQueryParameter5(val) {
863394
864114
  return {
863395
864115
  ...val,
863396
864116
  availability: val.availability == null ? {
@@ -863793,10 +864513,10 @@ function convertPathParameter6(val) {
863793
864513
  }
863794
864514
  function convertQueryParameters(val) {
863795
864515
  return val.map((pathParameter) => {
863796
- return convertQueryParameter5(pathParameter);
864516
+ return convertQueryParameter6(pathParameter);
863797
864517
  });
863798
864518
  }
863799
- function convertQueryParameter5(val) {
864519
+ function convertQueryParameter6(val) {
863800
864520
  return {
863801
864521
  ...val,
863802
864522
  valueType: maybeConvertBooleanLiteralForTypeReference(val.valueType)
@@ -865364,9 +866084,37 @@ var V35_TO_V34_MIGRATION = {
865364
866084
  unrecognizedObjectKeys: "strip",
865365
866085
  skipValidation: true
865366
866086
  }),
865367
- migrateBackwards: (V352, _context) => {
866087
+ migrateBackwards: (V352) => {
865368
866088
  return {
865369
- ...V352
866089
+ ...V352,
866090
+ services: Object.fromEntries(Object.entries(V352.services).map(([id, service]) => [
866091
+ id,
866092
+ {
866093
+ ...service,
866094
+ endpoints: service.endpoints.map((endpoint) => ({
866095
+ docs: endpoint.docs,
866096
+ availability: endpoint.availability,
866097
+ id: endpoint.id,
866098
+ name: endpoint.name,
866099
+ displayName: endpoint.displayName,
866100
+ method: endpoint.method,
866101
+ headers: endpoint.headers,
866102
+ baseUrl: endpoint.baseUrl,
866103
+ path: endpoint.path,
866104
+ fullPath: endpoint.fullPath,
866105
+ pathParameters: endpoint.pathParameters,
866106
+ allPathParameters: endpoint.allPathParameters,
866107
+ queryParameters: endpoint.queryParameters,
866108
+ requestBody: endpoint.requestBody,
866109
+ sdkRequest: endpoint.sdkRequest,
866110
+ response: endpoint.response,
866111
+ errors: endpoint.errors,
866112
+ auth: endpoint.auth,
866113
+ idempotent: endpoint.idempotent,
866114
+ examples: endpoint.examples
866115
+ }))
866116
+ }
866117
+ ]))
865370
866118
  };
865371
866119
  }
865372
866120
  };
@@ -865940,7 +866688,7 @@ function convertEndpoint11({ endpoint, errorResolver }) {
865940
866688
  headers: endpoint.headers.map((header) => convertHeader5(header)),
865941
866689
  path: endpoint.path,
865942
866690
  pathParameters: endpoint.pathParameters.map((pathParameter) => convertPathParameter7(pathParameter)),
865943
- queryParameters: endpoint.queryParameters.map((queryParameter) => convertQueryParameter6(queryParameter)),
866691
+ queryParameters: endpoint.queryParameters.map((queryParameter) => convertQueryParameter7(queryParameter)),
865944
866692
  requestBody: endpoint.requestBody != null ? convertRequestBody5(endpoint.requestBody) : void 0,
865945
866693
  sdkRequest: endpoint.sdkRequest != null ? convertSdkRequest4(endpoint.sdkRequest) : void 0,
865946
866694
  response: convertResponse5(endpoint.response),
@@ -865959,7 +866707,7 @@ function convertPathParameter7(pathParameter) {
865959
866707
  valueType: convertTypeReference5(pathParameter.valueType)
865960
866708
  };
865961
866709
  }
865962
- function convertQueryParameter6(queryParameter) {
866710
+ function convertQueryParameter7(queryParameter) {
865963
866711
  return {
865964
866712
  docs: queryParameter.docs,
865965
866713
  availability: queryParameter.availability,
@@ -866862,7 +867610,7 @@ function convertEndpoint12(endpoint) {
866862
867610
  requestBody: endpoint.requestBody != null ? convertRequestBody6(endpoint.requestBody) : void 0,
866863
867611
  response: convertHttpResponse6(endpoint.response),
866864
867612
  headers: endpoint.headers.map((header) => convertHeader6(header)),
866865
- queryParameters: endpoint.queryParameters.map((queryParameter) => convertQueryParameter7(queryParameter)),
867613
+ queryParameters: endpoint.queryParameters.map((queryParameter) => convertQueryParameter8(queryParameter)),
866866
867614
  examples: endpoint.examples.map((example) => convertExampleEndpointCall9(example))
866867
867615
  };
866868
867616
  }
@@ -866872,7 +867620,7 @@ function convertResponseError2(error) {
866872
867620
  error: convertDeclaredErrorName2(error.error)
866873
867621
  };
866874
867622
  }
866875
- function convertQueryParameter7(queryParameter) {
867623
+ function convertQueryParameter8(queryParameter) {
866876
867624
  return {
866877
867625
  availability: queryParameter.availability,
866878
867626
  docs: queryParameter.docs,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fern-api",
3
- "version": "0.19.28",
3
+ "version": "0.19.29",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://github.com/fern-api/fern.git",