@fern-api/fern-api-dev 5.119.1 → 5.120.0

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/cli.cjs +268 -279
  2. package/package.json +1 -1
package/cli.cjs CHANGED
@@ -37607,6 +37607,23 @@ var init_titleCase = __esm({
37607
37607
  }
37608
37608
  });
37609
37609
 
37610
+ // ../../commons/core-utils/lib/tokenizeOperationId.js
37611
+ function tokenizeOperationId(input3, respectWordBoundaries = false) {
37612
+ if (respectWordBoundaries) {
37613
+ return words_default(input3).map((token) => token.toLowerCase());
37614
+ }
37615
+ const tokens = CAMEL_OR_PASCAL_CASE_REGEX.test(input3) ? input3.split(/(?=[A-Z])/) : input3.split(/[^a-zA-Z0-9]+/);
37616
+ return compact_default(tokens.map((token) => token.toLowerCase()));
37617
+ }
37618
+ var CAMEL_OR_PASCAL_CASE_REGEX;
37619
+ var init_tokenizeOperationId = __esm({
37620
+ "../../commons/core-utils/lib/tokenizeOperationId.js"() {
37621
+ "use strict";
37622
+ init_lodash();
37623
+ CAMEL_OR_PASCAL_CASE_REGEX = /^[a-z]+(?:[A-Z][a-z]+)*$/;
37624
+ }
37625
+ });
37626
+
37610
37627
  // ../../../node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/codegen/code.js
37611
37628
  var require_code = __commonJS({
37612
37629
  "../../../node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/codegen/code.js"(exports2) {
@@ -44838,6 +44855,7 @@ __export(lib_exports, {
44838
44855
  sanitizeNullValues: () => sanitizeNullValues,
44839
44856
  stripLeadingSlash: () => stripLeadingSlash,
44840
44857
  titleCase: () => titleCase,
44858
+ tokenizeOperationId: () => tokenizeOperationId,
44841
44859
  undefinedIfNullish: () => undefinedIfNullish,
44842
44860
  undefinedIfSomeNullish: () => undefinedIfSomeNullish,
44843
44861
  validateAgainstJsonSchema: () => validateAgainstJsonSchema,
@@ -44885,6 +44903,7 @@ var init_lib4 = __esm({
44885
44903
  init_semverUtils();
44886
44904
  init_stripLeadingSlash();
44887
44905
  init_titleCase();
44906
+ init_tokenizeOperationId();
44888
44907
  init_validateAgainstJsonSchema();
44889
44908
  init_visitDiscriminatedUnion();
44890
44909
  }
@@ -131280,6 +131299,7 @@ var init_OpenApiSettingsSchema2 = __esm({
131280
131299
  "ignore-tags": schemas_exports8.boolean().optional(),
131281
131300
  "respect-parameter-content": schemas_exports8.boolean().optional(),
131282
131301
  "respect-per-spec-base-path": schemas_exports8.boolean().optional(),
131302
+ "respect-operation-id-word-boundaries": schemas_exports8.boolean().optional(),
131283
131303
  "namespaced-errors": schemas_exports8.boolean().optional()
131284
131304
  }).extend(BaseApiSettingsSchema);
131285
131305
  }
@@ -147918,8 +147938,8 @@ function getUnresolvedEndpointLocation(endpoint3) {
147918
147938
  endpointId: sanitizeEndpointId(operationId)
147919
147939
  };
147920
147940
  }
147921
- const tagTokens = tokenizeString(tag2);
147922
- const operationIdTokens = tokenizeString(operationId);
147941
+ const tagTokens = tokenizeOperationId(tag2);
147942
+ const operationIdTokens = tokenizeOperationId(operationId);
147923
147943
  if (isEqual_default(tagTokens, operationIdTokens)) {
147924
147944
  return {
147925
147945
  file: RelativeFilePath.of("__package__.yml"),
@@ -147982,17 +148002,6 @@ function getEndpointLocation(endpoint3) {
147982
148002
  location: getUnresolvedEndpointLocation(endpoint3)
147983
148003
  });
147984
148004
  }
147985
- function tokenizeString(input3) {
147986
- let tokens;
147987
- if (/^[a-z]+(?:[A-Z][a-z]+)*$/.test(input3)) {
147988
- tokens = input3.split(/(?=[A-Z])/);
147989
- } else {
147990
- tokens = input3.split(/[^a-zA-Z0-9]+/);
147991
- }
147992
- tokens = tokens.map((token) => token.toLowerCase());
147993
- tokens = compact_default(tokens);
147994
- return tokens;
147995
- }
147996
148005
  function maybeGetFastApiEndpointLocation({ operationId, tag: tag2, path: path124, method: method8 }) {
147997
148006
  const pathSegment = path124.split(NON_ALPHANUMERIC_EXCEPT_BRACES_REGEX).join("_").replaceAll(BRACE_REGEX, "_");
147998
148007
  const operationIdSuffix = `${pathSegment}_${method8.toLowerCase()}`;
@@ -148010,6 +148019,7 @@ var init_getEndpointLocation = __esm({
148010
148019
  "../api-importers/openapi/openapi-ir-to-fern/lib/utils/getEndpointLocation.js"() {
148011
148020
  "use strict";
148012
148021
  init_lib12();
148022
+ init_lib4();
148013
148023
  init_lib7();
148014
148024
  init_lib6();
148015
148025
  init_lodash();
@@ -148261,8 +148271,8 @@ function getUnresolvedWebhookLocation({ webhook, context: context3 }) {
148261
148271
  endpointId: operationId
148262
148272
  };
148263
148273
  }
148264
- const tagTokens = tokenizeString(tag2);
148265
- const operationIdTokens = tokenizeString(operationId);
148274
+ const tagTokens = tokenizeOperationId(tag2);
148275
+ const operationIdTokens = tokenizeOperationId(operationId);
148266
148276
  if (isEqual_default(tagTokens, operationIdTokens)) {
148267
148277
  return {
148268
148278
  file: RelativeFilePath.of("__package__.yml"),
@@ -148501,7 +148511,6 @@ var init_buildWebhooks = __esm({
148501
148511
  init_buildTypeReference();
148502
148512
  init_convertFullExample();
148503
148513
  init_convertSdkGroupName();
148504
- init_getEndpointLocation();
148505
148514
  init_getNamespaceFromGroup();
148506
148515
  init_getTypeFromTypeReference();
148507
148516
  }
@@ -152221,6 +152230,7 @@ var init_BaseOpenAPIWorkspace = __esm({
152221
152230
  defaultIntegerFormat;
152222
152231
  pathParameterOrder;
152223
152232
  coerceConstsTo;
152233
+ respectOperationIdWordBoundaries;
152224
152234
  converter;
152225
152235
  constructor(args) {
152226
152236
  super(args);
@@ -152246,6 +152256,7 @@ var init_BaseOpenAPIWorkspace = __esm({
152246
152256
  this.defaultIntegerFormat = args.defaultIntegerFormat;
152247
152257
  this.pathParameterOrder = args.pathParameterOrder;
152248
152258
  this.coerceConstsTo = args.coerceConstsTo;
152259
+ this.respectOperationIdWordBoundaries = args.respectOperationIdWordBoundaries;
152249
152260
  this.converter = new FernDefinitionConverter(args);
152250
152261
  }
152251
152262
  async getDefinition({ context: context3, absoluteFilePath, relativePathToDependency }, settings) {
@@ -153167,6 +153178,7 @@ var init_options2 = __esm({
153167
153178
  ignoreTags: false,
153168
153179
  respectParameterContent: false,
153169
153180
  respectPerSpecBasePath: false,
153181
+ respectOperationIdWordBoundaries: false,
153170
153182
  namespacedErrors: false
153171
153183
  };
153172
153184
  }
@@ -200400,6 +200412,7 @@ var init_getAPIDefinitionSettings = __esm({
200400
200412
  ignoreTags: "ignoreTags",
200401
200413
  respectParameterContent: "respectParameterContent",
200402
200414
  respectPerSpecBasePath: "respectPerSpecBasePath",
200415
+ respectOperationIdWordBoundaries: "respectOperationIdWordBoundaries",
200403
200416
  namespacedErrors: "namespacedErrors"
200404
200417
  };
200405
200418
  }
@@ -265615,6 +265628,7 @@ function parseOpenApiDefinitionSettingsSchema(settings) {
265615
265628
  ignoreTags: settings?.["ignore-tags"],
265616
265629
  respectParameterContent: settings?.["respect-parameter-content"],
265617
265630
  respectPerSpecBasePath: settings?.["respect-per-spec-base-path"],
265631
+ respectOperationIdWordBoundaries: settings?.["respect-operation-id-word-boundaries"],
265618
265632
  namespacedErrors: settings?.["namespaced-errors"]
265619
265633
  };
265620
265634
  }
@@ -266490,6 +266504,7 @@ var init_convertGeneratorsConfiguration = __esm({
266490
266504
  ignoreTags: void 0,
266491
266505
  respectParameterContent: void 0,
266492
266506
  respectPerSpecBasePath: void 0,
266507
+ respectOperationIdWordBoundaries: void 0,
266493
266508
  namespacedErrors: void 0
266494
266509
  };
266495
266510
  }
@@ -354134,6 +354149,171 @@ var init_abstract = __esm({
354134
354149
  }
354135
354150
  });
354136
354151
 
354152
+ // ../api-importers/v3-importer-commons/lib/converters/ResponseHeaderConverter.js
354153
+ function convertResponseHeaders({ context: context3, breadcrumbs, headers: responseHeaders }) {
354154
+ const headers2 = [];
354155
+ const inlinedTypes = {};
354156
+ const headerBreadcrumbs = breadcrumbs ?? [];
354157
+ if (responseHeaders == null) {
354158
+ return { headers: headers2, inlinedTypes };
354159
+ }
354160
+ for (const [headerName, headerOrRef] of Object.entries(responseHeaders)) {
354161
+ const resolvedHeader = context3.resolveMaybeReference({
354162
+ schemaOrReference: headerOrRef,
354163
+ breadcrumbs: [...headerBreadcrumbs, "headers", headerName]
354164
+ });
354165
+ if (resolvedHeader == null) {
354166
+ continue;
354167
+ }
354168
+ const headerSchema2 = getHeaderSchema({ context: context3, header: resolvedHeader });
354169
+ let valueType = AbstractConverter.OPTIONAL_STRING;
354170
+ let resolvedSchema;
354171
+ const availability = context3.getAvailability({
354172
+ node: resolvedHeader,
354173
+ breadcrumbs: [...headerBreadcrumbs, "headers", headerName]
354174
+ });
354175
+ if (headerSchema2 != null) {
354176
+ resolvedSchema = context3.resolveMaybeReference({
354177
+ schemaOrReference: headerSchema2,
354178
+ breadcrumbs: [...headerBreadcrumbs, "headers", headerName, "schema"]
354179
+ });
354180
+ if (resolvedSchema?.type === "number" || resolvedSchema?.type === "integer") {
354181
+ valueType = TypeReference2.primitive({
354182
+ v1: resolvedSchema.type === "integer" ? "INTEGER" : "DOUBLE",
354183
+ v2: resolvedSchema.type === "integer" ? PrimitiveTypeV2.integer({ default: void 0, validation: void 0 }) : PrimitiveTypeV2.double({ default: void 0, validation: void 0 })
354184
+ });
354185
+ } else if (resolvedSchema?.type === "boolean") {
354186
+ valueType = TypeReference2.primitive({
354187
+ v1: "BOOLEAN",
354188
+ v2: PrimitiveTypeV2.boolean({ default: void 0 })
354189
+ });
354190
+ } else {
354191
+ const convertedHeaderSchema = new SchemaOrReferenceConverter({
354192
+ context: context3,
354193
+ breadcrumbs: [...headerBreadcrumbs, "headers", headerName, "schema"],
354194
+ schemaOrReference: headerSchema2,
354195
+ wrapAsOptional: true,
354196
+ schemaIdOverride: context3.convertBreadcrumbsToName([...headerBreadcrumbs, "headers", headerName])
354197
+ }).convert();
354198
+ if (convertedHeaderSchema != null) {
354199
+ valueType = convertedHeaderSchema.type;
354200
+ for (const [typeId, inlinedType] of Object.entries(convertedHeaderSchema.inlinedTypes)) {
354201
+ inlinedTypes[typeId] = inlinedType;
354202
+ }
354203
+ }
354204
+ }
354205
+ }
354206
+ const v2Examples = convertHeaderExamples3({
354207
+ context: context3,
354208
+ breadcrumbs: headerBreadcrumbs,
354209
+ header: resolvedHeader,
354210
+ headerName,
354211
+ schema: headerSchema2
354212
+ });
354213
+ headers2.push({
354214
+ name: context3.casingsGenerator.generateNameAndWireValue({
354215
+ name: headerName,
354216
+ wireValue: headerName
354217
+ }),
354218
+ docs: resolvedHeader.description,
354219
+ valueType,
354220
+ env: void 0,
354221
+ v2Examples,
354222
+ availability,
354223
+ clientDefault: void 0,
354224
+ defaultValue: resolvedSchema?.default
354225
+ });
354226
+ }
354227
+ return { headers: headers2, inlinedTypes };
354228
+ }
354229
+ function getHeaderSchema({ context: context3, header }) {
354230
+ if (header.schema != null) {
354231
+ return header.schema;
354232
+ }
354233
+ if (!context3.settings.respectParameterContent || header.content == null) {
354234
+ return void 0;
354235
+ }
354236
+ for (const [contentType, mediaTypeObject] of Object.entries(header.content)) {
354237
+ if (mediaTypeObject.schema != null && MediaType.parse(contentType)?.isJSON()) {
354238
+ return mediaTypeObject.schema;
354239
+ }
354240
+ }
354241
+ return void 0;
354242
+ }
354243
+ function convertHeaderExamples3({ context: context3, breadcrumbs, header, headerName, schema }) {
354244
+ const v2Examples = {
354245
+ userSpecifiedExamples: {},
354246
+ autogeneratedExamples: {}
354247
+ };
354248
+ const headerExample = header.example;
354249
+ const headerExamples = header.examples;
354250
+ for (const [key2, example] of Object.entries(headerExamples ?? {})) {
354251
+ const resolvedExample = context3.resolveExampleWithValue(example);
354252
+ if (resolvedExample != null) {
354253
+ v2Examples.userSpecifiedExamples[key2] = generateHeaderExample({
354254
+ context: context3,
354255
+ breadcrumbs,
354256
+ schema,
354257
+ example: resolvedExample
354258
+ });
354259
+ }
354260
+ }
354261
+ if (headerExample != null) {
354262
+ const exampleName = context3.generateUniqueName({
354263
+ prefix: `${headerName}_example`,
354264
+ existingNames: Object.keys(v2Examples.userSpecifiedExamples)
354265
+ });
354266
+ v2Examples.userSpecifiedExamples[exampleName] = generateHeaderExample({
354267
+ context: context3,
354268
+ breadcrumbs,
354269
+ schema,
354270
+ example: headerExample
354271
+ });
354272
+ }
354273
+ if (Object.keys(v2Examples.userSpecifiedExamples).length === 0 && schema != null) {
354274
+ const exampleName = `${headerName}_example`;
354275
+ v2Examples.autogeneratedExamples[exampleName] = generateHeaderExample({
354276
+ context: context3,
354277
+ breadcrumbs,
354278
+ schema,
354279
+ example: void 0,
354280
+ ignoreErrors: true
354281
+ });
354282
+ }
354283
+ return v2Examples;
354284
+ }
354285
+ function generateHeaderExample({ context: context3, breadcrumbs, schema, example, ignoreErrors }) {
354286
+ if (schema == null) {
354287
+ return example;
354288
+ }
354289
+ const exampleConverter = new ExampleConverter({
354290
+ breadcrumbs,
354291
+ context: context3,
354292
+ schema,
354293
+ example
354294
+ });
354295
+ const { validExample: convertedExample, errors: errors4 } = exampleConverter.convert();
354296
+ if (!ignoreErrors) {
354297
+ errors4.forEach((error50) => {
354298
+ context3.errorCollector.collect({
354299
+ message: error50.message,
354300
+ path: error50.path
354301
+ });
354302
+ });
354303
+ }
354304
+ return convertedExample;
354305
+ }
354306
+ var init_ResponseHeaderConverter = __esm({
354307
+ "../api-importers/v3-importer-commons/lib/converters/ResponseHeaderConverter.js"() {
354308
+ "use strict";
354309
+ init_lib4();
354310
+ init_lib9();
354311
+ init_AbstractConverter();
354312
+ init_ExampleConverter();
354313
+ init_SchemaOrReferenceConverter();
354314
+ }
354315
+ });
354316
+
354137
354317
  // ../api-importers/v3-importer-commons/lib/extensions/x-fern-server-name.js
354138
354318
  var ServerNameExtension;
354139
354319
  var init_x_fern_server_name = __esm({
@@ -354404,13 +354584,15 @@ __export(converters_exports, {
354404
354584
  AbstractConverters: () => abstract_exports,
354405
354585
  ExampleConverter: () => ExampleConverter,
354406
354586
  SchemaConverters: () => schema_exports,
354407
- ServersConverter: () => ServersConverter
354587
+ ServersConverter: () => ServersConverter,
354588
+ convertResponseHeaders: () => convertResponseHeaders
354408
354589
  });
354409
354590
  var init_converters = __esm({
354410
354591
  "../api-importers/v3-importer-commons/lib/converters/index.js"() {
354411
354592
  "use strict";
354412
354593
  init_abstract();
354413
354594
  init_ExampleConverter();
354595
+ init_ResponseHeaderConverter();
354414
354596
  init_schema();
354415
354597
  init_ServersConverter();
354416
354598
  }
@@ -357639,21 +357821,6 @@ var init_RequestBodyConverter = __esm({
357639
357821
  });
357640
357822
 
357641
357823
  // ../api-importers/openapi-to-ir/lib/3.1/paths/operations/AbstractOperationConverter.js
357642
- function tokenizeString2(input3) {
357643
- let tokens = isCamelOrPascalCase(input3) ? splitOnCapitalLetters(input3) : splitOnNonAlphanumericCharacters(input3);
357644
- tokens = tokens.map((token) => token.toLowerCase());
357645
- tokens = compact_default(tokens);
357646
- return tokens;
357647
- }
357648
- function isCamelOrPascalCase(input3) {
357649
- return /^[a-z]+(?:[A-Z][a-z]+)*$/.test(input3);
357650
- }
357651
- function splitOnCapitalLetters(input3) {
357652
- return input3.split(/(?=[A-Z])/);
357653
- }
357654
- function splitOnNonAlphanumericCharacters(input3) {
357655
- return input3.split(/[^a-zA-Z0-9]+/);
357656
- }
357657
357824
  function isHeaderAuthScheme3(scheme) {
357658
357825
  return scheme?.header != null;
357659
357826
  }
@@ -357661,6 +357828,7 @@ var PATH_PARAM_REGEX, HEADERS_TO_SKIP2, AbstractOperationConverter;
357661
357828
  var init_AbstractOperationConverter = __esm({
357662
357829
  "../api-importers/openapi-to-ir/lib/3.1/paths/operations/AbstractOperationConverter.js"() {
357663
357830
  "use strict";
357831
+ init_lib4();
357664
357832
  init_lib9();
357665
357833
  init_lib22();
357666
357834
  init_lib30();
@@ -357910,8 +358078,9 @@ var init_AbstractOperationConverter = __esm({
357910
358078
  if (tag2 == null) {
357911
358079
  return { method: this.sanitizeMethodName(methodName) };
357912
358080
  }
357913
- const tagTokens = tokenizeString2(tag2);
357914
- const methodNameTokens = tokenizeString2(methodName);
358081
+ const respectWordBoundaries = this.context.settings.respectOperationIdWordBoundaries;
358082
+ const tagTokens = tokenizeOperationId(tag2, respectWordBoundaries);
358083
+ const methodNameTokens = tokenizeOperationId(methodName, respectWordBoundaries);
357915
358084
  if (isEqual_default(tagTokens, methodNameTokens)) {
357916
358085
  return {
357917
358086
  method: tag2
@@ -357933,6 +358102,12 @@ var init_AbstractOperationConverter = __esm({
357933
358102
  };
357934
358103
  }
357935
358104
  const methodTokens = methodNameTokens.slice(tagTokens.length);
358105
+ if (methodTokens[0] != null && /^\d/.test(methodTokens[0])) {
358106
+ return {
358107
+ group: [tag2],
358108
+ method: this.sanitizeMethodName(methodName)
358109
+ };
358110
+ }
357936
358111
  return {
357937
358112
  group: [tag2],
357938
358113
  method: camelCase_default(methodTokens.join("_"))
@@ -358707,6 +358882,7 @@ var init_ResponseBodyConverter = __esm({
358707
358882
  responseBody;
358708
358883
  statusCode;
358709
358884
  streamingExtension;
358885
+ convertedResponseHeaders;
358710
358886
  constructor({ context: context3, breadcrumbs, responseBody, group, method: method8, statusCode, streamingExtension }) {
358711
358887
  super({ context: context3, breadcrumbs, group, method: method8 });
358712
358888
  this.responseBody = responseBody;
@@ -358878,9 +359054,10 @@ var init_ResponseBodyConverter = __esm({
358878
359054
  })),
358879
359055
  inlinedTypes: {
358880
359056
  ...convertedStreamingSchema.inlinedTypes,
358881
- ...convertedNonStreamingSchema.inlinedTypes
359057
+ ...convertedNonStreamingSchema.inlinedTypes,
359058
+ ...this.convertResponseHeaders().inlinedTypes
358882
359059
  },
358883
- headers: this.convertResponseHeaders()
359060
+ headers: this.convertResponseHeaders().headers
358884
359061
  };
358885
359062
  }
358886
359063
  convertStreamingResponse({ mediaTypeObject, convertedSchema }) {
@@ -358902,9 +359079,12 @@ var init_ResponseBodyConverter = __esm({
358902
359079
  })
358903
359080
  })),
358904
359081
  streamResponseBody: void 0,
358905
- inlinedTypes: convertedSchema.inlinedTypes,
359082
+ inlinedTypes: {
359083
+ ...convertedSchema.inlinedTypes,
359084
+ ...this.convertResponseHeaders().inlinedTypes
359085
+ },
358906
359086
  examples: convertedSchema.examples,
358907
- headers: this.convertResponseHeaders()
359087
+ headers: this.convertResponseHeaders().headers
358908
359088
  };
358909
359089
  }
358910
359090
  case "sse": {
@@ -358921,9 +359101,12 @@ var init_ResponseBodyConverter = __esm({
358921
359101
  })
358922
359102
  })),
358923
359103
  streamResponseBody: void 0,
358924
- inlinedTypes: convertedSchema.inlinedTypes,
359104
+ inlinedTypes: {
359105
+ ...convertedSchema.inlinedTypes,
359106
+ ...this.convertResponseHeaders().inlinedTypes
359107
+ },
358925
359108
  examples: convertedSchema.examples,
358926
- headers: this.convertResponseHeaders()
359109
+ headers: this.convertResponseHeaders().headers
358927
359110
  };
358928
359111
  }
358929
359112
  default: {
@@ -358943,9 +359126,12 @@ var init_ResponseBodyConverter = __esm({
358943
359126
  })
358944
359127
  })),
358945
359128
  streamResponseBody: void 0,
358946
- inlinedTypes: convertedSchema.inlinedTypes,
359129
+ inlinedTypes: {
359130
+ ...convertedSchema.inlinedTypes,
359131
+ ...this.convertResponseHeaders().inlinedTypes
359132
+ },
358947
359133
  examples: convertedSchema.examples,
358948
- headers: this.convertResponseHeaders()
359134
+ headers: this.convertResponseHeaders().headers
358949
359135
  };
358950
359136
  }
358951
359137
  returnBytesResponse({ mediaTypeObject }) {
@@ -358959,8 +359145,8 @@ var init_ResponseBodyConverter = __esm({
358959
359145
  })
358960
359146
  }),
358961
359147
  streamResponseBody: void 0,
358962
- inlinedTypes: {},
358963
- headers: this.convertResponseHeaders()
359148
+ inlinedTypes: this.convertResponseHeaders().inlinedTypes,
359149
+ headers: this.convertResponseHeaders().headers
358964
359150
  };
358965
359151
  }
358966
359152
  returnFileDownloadResponse({ mediaTypeObject }) {
@@ -358974,8 +359160,8 @@ var init_ResponseBodyConverter = __esm({
358974
359160
  })
358975
359161
  }),
358976
359162
  streamResponseBody: void 0,
358977
- inlinedTypes: {},
358978
- headers: this.convertResponseHeaders()
359163
+ inlinedTypes: this.convertResponseHeaders().inlinedTypes,
359164
+ headers: this.convertResponseHeaders().headers
358979
359165
  };
358980
359166
  }
358981
359167
  returnTextResponse({ mediaTypeObject, contentType }) {
@@ -358990,8 +359176,8 @@ var init_ResponseBodyConverter = __esm({
358990
359176
  contentType: MediaType.parse(contentType)?.isPlainText() ? void 0 : contentType
358991
359177
  }),
358992
359178
  streamResponseBody: void 0,
358993
- inlinedTypes: {},
358994
- headers: this.convertResponseHeaders()
359179
+ inlinedTypes: this.convertResponseHeaders().inlinedTypes,
359180
+ headers: this.convertResponseHeaders().headers
358995
359181
  };
358996
359182
  }
358997
359183
  isBinarySchema(convertedSchema) {
@@ -359023,118 +359209,12 @@ var init_ResponseBodyConverter = __esm({
359023
359209
  return MediaType.parse(contentType)?.isText() ?? false;
359024
359210
  }
359025
359211
  convertResponseHeaders() {
359026
- const headers2 = [];
359027
- const responseHeaders = this.responseBody.headers;
359028
- if (responseHeaders == null) {
359029
- return headers2;
359030
- }
359031
- for (const [headerName, headerOrRef] of Object.entries(responseHeaders)) {
359032
- const resolvedHeader = this.context.resolveMaybeReference({
359033
- schemaOrReference: headerOrRef,
359034
- breadcrumbs: [...this.breadcrumbs, "headers", headerName]
359035
- });
359036
- if (resolvedHeader == null) {
359037
- continue;
359038
- }
359039
- const headerSchema2 = resolvedHeader.schema;
359040
- let valueType = AbstractConverter.OPTIONAL_STRING;
359041
- let resolvedSchema;
359042
- if (headerSchema2 != null) {
359043
- resolvedSchema = this.context.resolveMaybeReference({
359044
- schemaOrReference: headerSchema2,
359045
- breadcrumbs: [...this.breadcrumbs, "headers", headerName, "schema"]
359046
- });
359047
- if (resolvedSchema != null) {
359048
- if (resolvedSchema.type === "number" || resolvedSchema.type === "integer") {
359049
- valueType = TypeReference2.primitive({
359050
- v1: resolvedSchema.type === "integer" ? "INTEGER" : "DOUBLE",
359051
- v2: resolvedSchema.type === "integer" ? PrimitiveTypeV2.integer({ default: void 0, validation: void 0 }) : PrimitiveTypeV2.double({ default: void 0, validation: void 0 })
359052
- });
359053
- } else if (resolvedSchema.type === "boolean") {
359054
- valueType = TypeReference2.primitive({
359055
- v1: "BOOLEAN",
359056
- v2: PrimitiveTypeV2.boolean({ default: void 0 })
359057
- });
359058
- }
359059
- }
359060
- }
359061
- const v2Examples = this.convertHeaderExamples({
359062
- header: resolvedHeader,
359063
- headerName,
359064
- schema: headerSchema2
359065
- });
359066
- headers2.push({
359067
- name: this.context.casingsGenerator.generateNameAndWireValue({
359068
- name: headerName,
359069
- wireValue: headerName
359070
- }),
359071
- docs: resolvedHeader.description,
359072
- valueType,
359073
- env: void 0,
359074
- v2Examples,
359075
- availability: void 0,
359076
- clientDefault: void 0,
359077
- defaultValue: resolvedSchema?.default
359078
- });
359079
- }
359080
- return headers2;
359081
- }
359082
- convertHeaderExamples({ header, headerName, schema }) {
359083
- const v2Examples = {
359084
- userSpecifiedExamples: {},
359085
- autogeneratedExamples: {}
359086
- };
359087
- const headerExample = header.example;
359088
- const headerExamples = header.examples;
359089
- for (const [key2, example] of Object.entries(headerExamples ?? {})) {
359090
- const resolvedExample = this.context.resolveExampleWithValue(example);
359091
- if (resolvedExample != null) {
359092
- v2Examples.userSpecifiedExamples[key2] = this.generateHeaderExample({
359093
- schema,
359094
- example: resolvedExample
359095
- });
359096
- }
359097
- }
359098
- if (headerExample != null) {
359099
- const exampleName = this.context.generateUniqueName({
359100
- prefix: `${headerName}_example`,
359101
- existingNames: Object.keys(v2Examples.userSpecifiedExamples)
359102
- });
359103
- v2Examples.userSpecifiedExamples[exampleName] = this.generateHeaderExample({
359104
- schema,
359105
- example: headerExample
359106
- });
359107
- }
359108
- if (Object.keys(v2Examples.userSpecifiedExamples).length === 0 && schema != null) {
359109
- const exampleName = `${headerName}_example`;
359110
- v2Examples.autogeneratedExamples[exampleName] = this.generateHeaderExample({
359111
- schema,
359112
- example: void 0,
359113
- ignoreErrors: true
359114
- });
359115
- }
359116
- return v2Examples;
359117
- }
359118
- generateHeaderExample({ schema, example, ignoreErrors }) {
359119
- if (schema == null) {
359120
- return example;
359121
- }
359122
- const exampleConverter = new ExampleConverter({
359123
- breadcrumbs: this.breadcrumbs,
359212
+ this.convertedResponseHeaders ??= convertResponseHeaders({
359124
359213
  context: this.context,
359125
- schema,
359126
- example
359214
+ breadcrumbs: this.breadcrumbs,
359215
+ headers: this.responseBody.headers
359127
359216
  });
359128
- const { validExample: convertedExample, errors: errors4 } = exampleConverter.convert();
359129
- if (!ignoreErrors) {
359130
- errors4.forEach((error50) => {
359131
- this.context.errorCollector.collect({
359132
- message: error50.message,
359133
- path: error50.path
359134
- });
359135
- });
359136
- }
359137
- return convertedExample;
359217
+ return this.convertedResponseHeaders;
359138
359218
  }
359139
359219
  };
359140
359220
  }
@@ -359158,6 +359238,7 @@ var init_ResponseErrorConverter = __esm({
359158
359238
  statusCode;
359159
359239
  methodName;
359160
359240
  isWildcardStatusCode;
359241
+ convertedResponseHeaders;
359161
359242
  constructor({ context: context3, breadcrumbs, responseError, group, method: method8, methodName, statusCode, isWildcardStatusCode }) {
359162
359243
  super({ context: context3, breadcrumbs, group, method: method8 });
359163
359244
  this.responseError = responseError;
@@ -359191,9 +359272,9 @@ var init_ResponseErrorConverter = __esm({
359191
359272
  displayName: errorName2,
359192
359273
  statusCode: this.statusCode,
359193
359274
  isWildcardStatusCode: this.isWildcardStatusCode,
359194
- inlinedTypes: {},
359275
+ inlinedTypes: this.convertResponseHeaders().inlinedTypes,
359195
359276
  examples: {},
359196
- headers: this.convertResponseHeaders()
359277
+ headers: this.convertResponseHeaders().headers
359197
359278
  };
359198
359279
  }
359199
359280
  const jsonContentTypes = Object.keys(this.responseError.content).filter((type7) => type7.includes("json"));
@@ -359250,9 +359331,12 @@ var init_ResponseErrorConverter = __esm({
359250
359331
  displayName: errorName,
359251
359332
  statusCode: this.statusCode,
359252
359333
  isWildcardStatusCode: this.isWildcardStatusCode,
359253
- inlinedTypes: convertedSchema.inlinedTypes,
359334
+ inlinedTypes: {
359335
+ ...convertedSchema.inlinedTypes,
359336
+ ...this.convertResponseHeaders().inlinedTypes
359337
+ },
359254
359338
  examples: this.convertErrorExamples({ mediaTypeObject }),
359255
- headers: this.convertResponseHeaders()
359339
+ headers: this.convertResponseHeaders().headers
359256
359340
  };
359257
359341
  }
359258
359342
  /**
@@ -359314,118 +359398,12 @@ var init_ResponseErrorConverter = __esm({
359314
359398
  return this.context.enableUniqueErrorsPerEndpoint ? uppercaseFirstChar(`${this.methodName}Request${errorName}`) : errorName;
359315
359399
  }
359316
359400
  convertResponseHeaders() {
359317
- const headers2 = [];
359318
- const responseHeaders = this.responseError.headers;
359319
- if (responseHeaders == null) {
359320
- return headers2;
359321
- }
359322
- for (const [headerName, headerOrRef] of Object.entries(responseHeaders)) {
359323
- const resolvedHeader = this.context.resolveMaybeReference({
359324
- schemaOrReference: headerOrRef,
359325
- breadcrumbs: [...this.breadcrumbs, "headers", headerName]
359326
- });
359327
- if (resolvedHeader == null) {
359328
- continue;
359329
- }
359330
- const headerSchema2 = resolvedHeader.schema;
359331
- let valueType = AbstractConverter.OPTIONAL_STRING;
359332
- let resolvedSchema;
359333
- if (headerSchema2 != null) {
359334
- resolvedSchema = this.context.resolveMaybeReference({
359335
- schemaOrReference: headerSchema2,
359336
- breadcrumbs: [...this.breadcrumbs, "headers", headerName, "schema"]
359337
- });
359338
- if (resolvedSchema != null) {
359339
- if (resolvedSchema.type === "number" || resolvedSchema.type === "integer") {
359340
- valueType = TypeReference2.primitive({
359341
- v1: resolvedSchema.type === "integer" ? "INTEGER" : "DOUBLE",
359342
- v2: resolvedSchema.type === "integer" ? PrimitiveTypeV2.integer({ default: void 0, validation: void 0 }) : PrimitiveTypeV2.double({ default: void 0, validation: void 0 })
359343
- });
359344
- } else if (resolvedSchema.type === "boolean") {
359345
- valueType = TypeReference2.primitive({
359346
- v1: "BOOLEAN",
359347
- v2: PrimitiveTypeV2.boolean({ default: void 0 })
359348
- });
359349
- }
359350
- }
359351
- }
359352
- const v2Examples = this.convertHeaderExamples({
359353
- header: resolvedHeader,
359354
- headerName,
359355
- schema: headerSchema2
359356
- });
359357
- headers2.push({
359358
- name: this.context.casingsGenerator.generateNameAndWireValue({
359359
- name: headerName,
359360
- wireValue: headerName
359361
- }),
359362
- docs: resolvedHeader.description,
359363
- valueType,
359364
- env: void 0,
359365
- v2Examples,
359366
- availability: void 0,
359367
- clientDefault: void 0,
359368
- defaultValue: resolvedSchema?.default
359369
- });
359370
- }
359371
- return headers2;
359372
- }
359373
- convertHeaderExamples({ header, headerName, schema }) {
359374
- const v2Examples = {
359375
- userSpecifiedExamples: {},
359376
- autogeneratedExamples: {}
359377
- };
359378
- const headerExample = header.example;
359379
- const headerExamples = header.examples;
359380
- for (const [key2, example] of Object.entries(headerExamples ?? {})) {
359381
- const resolvedExample = this.context.resolveExampleWithValue(example);
359382
- if (resolvedExample != null) {
359383
- v2Examples.userSpecifiedExamples[key2] = this.generateHeaderExample({
359384
- schema,
359385
- example: resolvedExample
359386
- });
359387
- }
359388
- }
359389
- if (headerExample != null) {
359390
- const exampleName = this.context.generateUniqueName({
359391
- prefix: `${headerName}_example`,
359392
- existingNames: Object.keys(v2Examples.userSpecifiedExamples)
359393
- });
359394
- v2Examples.userSpecifiedExamples[exampleName] = this.generateHeaderExample({
359395
- schema,
359396
- example: headerExample
359397
- });
359398
- }
359399
- if (Object.keys(v2Examples.userSpecifiedExamples).length === 0 && schema != null) {
359400
- const exampleName = `${headerName}_example`;
359401
- v2Examples.autogeneratedExamples[exampleName] = this.generateHeaderExample({
359402
- schema,
359403
- example: void 0,
359404
- ignoreErrors: true
359405
- });
359406
- }
359407
- return v2Examples;
359408
- }
359409
- generateHeaderExample({ schema, example, ignoreErrors }) {
359410
- if (schema == null) {
359411
- return example;
359412
- }
359413
- const exampleConverter = new ExampleConverter({
359414
- breadcrumbs: this.breadcrumbs,
359401
+ this.convertedResponseHeaders ??= convertResponseHeaders({
359415
359402
  context: this.context,
359416
- schema,
359417
- example
359403
+ breadcrumbs: this.breadcrumbs,
359404
+ headers: this.responseError.headers
359418
359405
  });
359419
- const { validExample: convertedExample, errors: errors4 } = exampleConverter.convert();
359420
- if (!ignoreErrors) {
359421
- errors4.forEach((error50) => {
359422
- this.context.errorCollector.collect({
359423
- message: error50.message,
359424
- path: error50.path
359425
- });
359426
- });
359427
- }
359428
- return convertedExample;
359406
+ return this.convertedResponseHeaders;
359429
359407
  }
359430
359408
  };
359431
359409
  }
@@ -375141,7 +375119,8 @@ var init_OSSWorkspace = __esm({
375141
375119
  inferDefaultEnvironment: collapseSpecBooleanSetting(specs, (s5) => s5?.inferDefaultEnvironment),
375142
375120
  defaultIntegerFormat: specs[0]?.settings?.defaultIntegerFormat,
375143
375121
  pathParameterOrder: specs[0]?.settings?.pathParameterOrder,
375144
- coerceConstsTo: specs[0]?.settings?.coerceConstsTo
375122
+ coerceConstsTo: specs[0]?.settings?.coerceConstsTo,
375123
+ respectOperationIdWordBoundaries: collapseSpecBooleanSetting(specs, (s5) => s5?.respectOperationIdWordBoundaries)
375145
375124
  });
375146
375125
  this.specs = specs;
375147
375126
  this.allSpecs = allSpecs;
@@ -698154,6 +698133,15 @@ var OpenApiSettingsSchema2 = BaseApiSettingsSchema2.extend({
698154
698133
  * Defaults to false.
698155
698134
  */
698156
698135
  "respect-per-spec-base-path": external_exports.boolean().optional(),
698136
+ /**
698137
+ * If true, operation ids are split on every word boundary (camelCase transitions and digits)
698138
+ * when deriving endpoint names, so a redundant tag prefix is stripped and the remaining words
698139
+ * are preserved (e.g. tag `sharing` + operation id `Sharing_ListFolderMembers` yields
698140
+ * `listFolderMembers` rather than `listfoldermembers`).
698141
+ * This changes endpoint names, and therefore SDK method names and docs URLs.
698142
+ * Defaults to false.
698143
+ */
698144
+ "respect-operation-id-word-boundaries": external_exports.boolean().optional(),
698157
698145
  /**
698158
698146
  * If true, an error whose body schema carries `x-fern-sdk-namespace` is declared in, and shared
698159
698147
  * within, that namespace instead of the endpoint's namespace.
@@ -706750,7 +706738,7 @@ var AccessTokenPosthogManager = class {
706750
706738
  properties: {
706751
706739
  ...event,
706752
706740
  ...event.properties,
706753
- version: "5.119.1",
706741
+ version: "5.120.0",
706754
706742
  usingAccessToken: true,
706755
706743
  ...getRunIdProperties()
706756
706744
  }
@@ -706816,7 +706804,7 @@ var UserPosthogManager = class {
706816
706804
  distinctId: this.userId ?? await this.getPersistedDistinctId(),
706817
706805
  event: "CLI",
706818
706806
  properties: {
706819
- version: "5.119.1",
706807
+ version: "5.120.0",
706820
706808
  ...event,
706821
706809
  ...event.properties,
706822
706810
  usingAccessToken: false,
@@ -713636,6 +713624,7 @@ var LegacyApiSpecAdapter = class {
713636
713624
  ignoreTags: settings["ignore-tags"],
713637
713625
  respectParameterContent: settings["respect-parameter-content"],
713638
713626
  respectPerSpecBasePath: settings["respect-per-spec-base-path"],
713627
+ respectOperationIdWordBoundaries: settings["respect-operation-id-word-boundaries"],
713639
713628
  namespacedErrors: settings["namespaced-errors"]
713640
713629
  };
713641
713630
  const hasSettings = Object.values(result).some((v3) => v3 != null);
@@ -888494,7 +888483,7 @@ var LOCAL_STORAGE_FOLDER4 = ".fern-dev";
888494
888483
  var LOGS_FOLDER_NAME = "logs";
888495
888484
  var MAX_LOGS_DIR_SIZE_BYTES = 100 * 1024 * 1024;
888496
888485
  function getCliSource() {
888497
- const version7 = "5.119.1";
888486
+ const version7 = "5.120.0";
888498
888487
  return `cli@${version7}`;
888499
888488
  }
888500
888489
  var DebugLogger = class {
@@ -915841,7 +915830,7 @@ var LegacyDocsPublisher = class {
915841
915830
  previewId,
915842
915831
  disableTemplates: void 0,
915843
915832
  skipUpload,
915844
- cliVersion: "5.119.1",
915833
+ cliVersion: "5.120.0",
915845
915834
  loginCommand: "fern auth login"
915846
915835
  });
915847
915836
  if (taskContext.getResult() === TaskResult.Failure) {
@@ -983259,7 +983248,7 @@ function getAutomationContextFromEnv() {
983259
983248
  config_branch: process.env.FERN_CONFIG_BRANCH,
983260
983249
  config_pr_number: process.env.FERN_CONFIG_PR_NUMBER,
983261
983250
  trigger: process.env.GITHUB_EVENT_NAME,
983262
- cli_version: "5.119.1"
983251
+ cli_version: "5.120.0"
983263
983252
  };
983264
983253
  }
983265
983254
  function isAutomationMode() {
@@ -984091,7 +984080,7 @@ var CliContext = class _CliContext {
984091
984080
  if (false) {
984092
984081
  this.logger.error("CLI_VERSION is not defined");
984093
984082
  }
984094
- return "5.119.1";
984083
+ return "5.120.0";
984095
984084
  }
984096
984085
  getCliName() {
984097
984086
  if (false) {
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "5.119.1",
2
+ "version": "5.120.0",
3
3
  "repository": {
4
4
  "type": "git",
5
5
  "url": "git+https://github.com/fern-api/fern.git",