@fern-api/fern-api-dev 4.106.3-6-ga791f2f555d → 4.107.0-5-g8e65b2fdec8

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 +190 -60
  2. package/package.json +1 -1
package/cli.cjs CHANGED
@@ -621265,7 +621265,7 @@ var AccessTokenPosthogManager = class {
621265
621265
  properties: {
621266
621266
  ...event,
621267
621267
  ...event.properties,
621268
- version: "4.106.3-6-ga791f2f555d",
621268
+ version: "4.107.0-5-g8e65b2fdec8",
621269
621269
  usingAccessToken: true
621270
621270
  }
621271
621271
  });
@@ -621319,7 +621319,7 @@ var UserPosthogManager = class {
621319
621319
  distinctId: this.userId ?? await this.getPersistedDistinctId(),
621320
621320
  event: "CLI",
621321
621321
  properties: {
621322
- version: "4.106.3-6-ga791f2f555d",
621322
+ version: "4.107.0-5-g8e65b2fdec8",
621323
621323
  ...event,
621324
621324
  ...event.properties,
621325
621325
  usingAccessToken: false,
@@ -832962,7 +832962,7 @@ var LOCAL_STORAGE_FOLDER4 = ".fern-dev";
832962
832962
  var LOGS_FOLDER_NAME = "logs";
832963
832963
  var MAX_LOGS_DIR_SIZE_BYTES = 100 * 1024 * 1024;
832964
832964
  function getCliSource() {
832965
- const version7 = "4.106.3-6-ga791f2f555d";
832965
+ const version7 = "4.107.0-5-g8e65b2fdec8";
832966
832966
  return `cli@${version7}`;
832967
832967
  }
832968
832968
  var DebugLogger = class {
@@ -845371,7 +845371,7 @@ var LegacyDocsPublisher = class {
845371
845371
  previewId,
845372
845372
  disableTemplates: void 0,
845373
845373
  skipUpload,
845374
- cliVersion: "4.106.3-6-ga791f2f555d",
845374
+ cliVersion: "4.107.0-5-g8e65b2fdec8",
845375
845375
  loginCommand: "fern auth login"
845376
845376
  });
845377
845377
  if (taskContext.getResult() === TaskResult.Failure) {
@@ -881444,52 +881444,6 @@ var Begin = class extends AstNode6 {
881444
881444
  }
881445
881445
  };
881446
881446
 
881447
- // ../../../generators/ruby-v2/ast/lib/ast/IfElse.js
881448
- var IfElse = class extends AstNode6 {
881449
- ifBranch;
881450
- elseIfs;
881451
- elseBody;
881452
- constructor({ if: ifBranch, elseIf, elseBody }) {
881453
- super();
881454
- this.ifBranch = ifBranch;
881455
- this.elseIfs = elseIf ?? [];
881456
- this.elseBody = elseBody ? Array.isArray(elseBody) ? elseBody : [elseBody] : void 0;
881457
- }
881458
- write(writer2) {
881459
- writer2.write("if ");
881460
- this.ifBranch.condition.write(writer2);
881461
- writer2.writeLine();
881462
- writer2.indent();
881463
- for (const stmt of this.ifBranch.thenBody) {
881464
- stmt.write(writer2);
881465
- writer2.writeNewLineIfLastLineNot();
881466
- }
881467
- writer2.dedent();
881468
- for (const elseIf of this.elseIfs) {
881469
- writer2.write("elsif ");
881470
- elseIf.condition.write(writer2);
881471
- writer2.writeLine();
881472
- writer2.indent();
881473
- for (const stmt of elseIf.thenBody) {
881474
- stmt.write(writer2);
881475
- writer2.writeNewLineIfLastLineNot();
881476
- }
881477
- writer2.dedent();
881478
- }
881479
- if (this.elseBody && this.elseBody.length > 0) {
881480
- writer2.writeLine("else");
881481
- writer2.indent();
881482
- for (const stmt of this.elseBody) {
881483
- stmt.write(writer2);
881484
- writer2.writeNewLineIfLastLineNot();
881485
- }
881486
- writer2.dedent();
881487
- }
881488
- writer2.write("end");
881489
- writer2.writeNewLineIfLastLineNot();
881490
- }
881491
- };
881492
-
881493
881447
  // ../../../generators/ruby-v2/ast/lib/ast/Comment.js
881494
881448
  var MAX_LINE_LENGTH2 = 120;
881495
881449
  var COMMENT_PREFIX_LENGTH = 2;
@@ -882136,19 +882090,20 @@ var Class_ = class extends Module_ {
882136
882090
  writer2.writeLine("; end");
882137
882091
  return;
882138
882092
  }
882139
- if (this.statements.length) {
882093
+ if (this.statements.length || this.methods.length) {
882140
882094
  writer2.newLine();
882141
882095
  writer2.indent();
882142
882096
  this.statements.forEach((statement, index3) => {
882143
882097
  statement.write(writer2);
882144
- writer2.newLine();
882098
+ writer2.writeNewLineIfLastLineNot();
882099
+ if (index3 < this.statements.length - 1) {
882100
+ writer2.newLine();
882101
+ }
882145
882102
  });
882146
- writer2.dedent();
882147
- }
882148
- if (this.methods.length) {
882149
- writer2.newLine();
882150
- writer2.indent();
882151
- this.methods.forEach((method8) => {
882103
+ this.methods.forEach((method8, index3) => {
882104
+ if (index3 > 0 || this.statements.length > 0) {
882105
+ writer2.newLine();
882106
+ }
882152
882107
  method8.write(writer2);
882153
882108
  });
882154
882109
  writer2.dedent();
@@ -882186,6 +882141,112 @@ var Class_ = class extends Module_ {
882186
882141
  }
882187
882142
  };
882188
882143
 
882144
+ // ../../../generators/ruby-v2/ast/lib/ast/IfElse.js
882145
+ var IfElse = class extends AstNode6 {
882146
+ ifBranch;
882147
+ elseIfs;
882148
+ elseBody;
882149
+ constructor({ if: ifBranch, elseIf, elseBody }) {
882150
+ super();
882151
+ this.ifBranch = ifBranch;
882152
+ this.elseIfs = elseIf ?? [];
882153
+ this.elseBody = elseBody ? Array.isArray(elseBody) ? elseBody : [elseBody] : void 0;
882154
+ }
882155
+ write(writer2) {
882156
+ const modifier = this.renderAsModifier(writer2);
882157
+ if (modifier != null) {
882158
+ writer2.write(modifier);
882159
+ writer2.writeNewLineIfLastLineNot();
882160
+ return;
882161
+ }
882162
+ writer2.write("if ");
882163
+ this.ifBranch.condition.write(writer2);
882164
+ writer2.writeLine();
882165
+ writer2.indent();
882166
+ for (const stmt of this.ifBranch.thenBody) {
882167
+ stmt.write(writer2);
882168
+ writer2.writeNewLineIfLastLineNot();
882169
+ }
882170
+ writer2.dedent();
882171
+ for (const elseIf of this.elseIfs) {
882172
+ writer2.write("elsif ");
882173
+ elseIf.condition.write(writer2);
882174
+ writer2.writeLine();
882175
+ writer2.indent();
882176
+ for (const stmt of elseIf.thenBody) {
882177
+ stmt.write(writer2);
882178
+ writer2.writeNewLineIfLastLineNot();
882179
+ }
882180
+ writer2.dedent();
882181
+ }
882182
+ if (this.elseBody && this.elseBody.length > 0) {
882183
+ writer2.writeLine("else");
882184
+ writer2.indent();
882185
+ for (const stmt of this.elseBody) {
882186
+ stmt.write(writer2);
882187
+ writer2.writeNewLineIfLastLineNot();
882188
+ }
882189
+ writer2.dedent();
882190
+ }
882191
+ writer2.write("end");
882192
+ writer2.writeNewLineIfLastLineNot();
882193
+ }
882194
+ /**
882195
+ * Returns the modifier-form rendering (`stmt if cond`) when this if is
882196
+ * eligible:
882197
+ * - exactly one statement in the then-body
882198
+ * - no elsif and no else
882199
+ * - the single statement is not an intrinsically multi-line AST node
882200
+ * (Class, Module, Method, Begin, IfElse)
882201
+ * - the rendered statement and condition each fit on a single line
882202
+ *
882203
+ * Returns undefined when the shape isn't eligible, in which case the caller
882204
+ * falls back to explicit if/end form.
882205
+ *
882206
+ * The generator's .rubocop.yml disables Layout/LineLength, so rubocop's
882207
+ * Style/IfUnlessModifier accepts modifier form at any line length. Shape
882208
+ * eligibility is therefore sufficient; we don't gate on a max-line-length
882209
+ * budget here.
882210
+ */
882211
+ renderAsModifier(writer2) {
882212
+ if (this.ifBranch.thenBody.length !== 1) {
882213
+ return void 0;
882214
+ }
882215
+ if (this.elseIfs.length > 0) {
882216
+ return void 0;
882217
+ }
882218
+ if (this.elseBody != null && this.elseBody.length > 0) {
882219
+ return void 0;
882220
+ }
882221
+ const stmt = this.ifBranch.thenBody[0];
882222
+ if (stmt == null) {
882223
+ return void 0;
882224
+ }
882225
+ if (isKnownMultiLineNode(stmt) || isKnownMultiLineNode(this.ifBranch.condition)) {
882226
+ return void 0;
882227
+ }
882228
+ const stmtRendered = renderNode(stmt, writer2);
882229
+ const conditionRendered = renderNode(this.ifBranch.condition, writer2);
882230
+ if (stmtRendered.length === 0 || conditionRendered.length === 0) {
882231
+ return void 0;
882232
+ }
882233
+ if (stmtRendered.includes("\n") || conditionRendered.includes("\n")) {
882234
+ return void 0;
882235
+ }
882236
+ return `${stmtRendered} if ${conditionRendered}`;
882237
+ }
882238
+ };
882239
+ function isKnownMultiLineNode(node4) {
882240
+ return node4 instanceof Class_ || node4 instanceof Module_ || node4 instanceof Method6 || node4 instanceof Begin || node4 instanceof IfElse;
882241
+ }
882242
+ function renderNode(node4, parentWriter) {
882243
+ const rendered = node4.toString({
882244
+ customConfig: parentWriter.customConfig,
882245
+ formatter: parentWriter.formatter
882246
+ });
882247
+ return rendered.replace(/\n+$/, "");
882248
+ }
882249
+
882189
882250
  // ../../../generators/ruby-v2/ast/lib/ast/ClassInstantiation.js
882190
882251
  var ClassInstantiation5 = class extends AstNode6 {
882191
882252
  classReference;
@@ -882446,9 +882507,36 @@ var TypeLiteral3 = class _TypeLiteral extends AstNode6 {
882446
882507
  super();
882447
882508
  this.internalType = internalType;
882448
882509
  }
882510
+ /**
882511
+ * Returns a stable string representation of this literal suitable for
882512
+ * deduplicating hash keys (see Lint/DuplicateHashKey). Returns undefined
882513
+ * for compound/dynamic shapes where value equality isn't decidable at
882514
+ * emit time.
882515
+ */
882516
+ getDedupKey() {
882517
+ switch (this.internalType.type) {
882518
+ case "str":
882519
+ return `str:${this.internalType.value}`;
882520
+ case "interpolatedStr":
882521
+ return `istr:${this.internalType.value}`;
882522
+ case "int":
882523
+ return `int:${this.internalType.value}`;
882524
+ case "float":
882525
+ return `float:${this.internalType.value}`;
882526
+ case "bool":
882527
+ return `bool:${this.internalType.value}`;
882528
+ case "nil":
882529
+ return "nil";
882530
+ default:
882531
+ return void 0;
882532
+ }
882533
+ }
882449
882534
  static string(value2) {
882450
882535
  return new this({ type: "str", value: value2 });
882451
882536
  }
882537
+ static interpolatedString(value2) {
882538
+ return new this({ type: "interpolatedStr", value: value2 });
882539
+ }
882452
882540
  static integer(value2) {
882453
882541
  return new this({ type: "int", value: value2 });
882454
882542
  }
@@ -882485,6 +882573,11 @@ var TypeLiteral3 = class _TypeLiteral extends AstNode6 {
882485
882573
  write(writer2) {
882486
882574
  switch (this.internalType.type) {
882487
882575
  case "str": {
882576
+ const value2 = this.internalType.value.replaceAll("\r\n", "\n");
882577
+ writer2.write(`"${value2.replaceAll("\\", "\\\\").replaceAll('"', '\\"').replace(/#(?=[{$@])/g, "\\#")}"`);
882578
+ break;
882579
+ }
882580
+ case "interpolatedStr": {
882488
882581
  const value2 = this.internalType.value.replaceAll("\r\n", "\n");
882489
882582
  writer2.write(`"${value2.replaceAll("\\", "\\\\").replaceAll('"', '\\"')}"`);
882490
882583
  break;
@@ -882502,7 +882595,21 @@ var TypeLiteral3 = class _TypeLiteral extends AstNode6 {
882502
882595
  break;
882503
882596
  }
882504
882597
  case "hash": {
882505
- const entries23 = this.internalType.entries.filter((entry) => !_TypeLiteral.isNop(entry.key) && !_TypeLiteral.isNop(entry.value));
882598
+ const filteredEntries = this.internalType.entries.filter((entry) => !_TypeLiteral.isNop(entry.key) && !_TypeLiteral.isNop(entry.value));
882599
+ const seenKeys = /* @__PURE__ */ new Map();
882600
+ filteredEntries.forEach((entry, index3) => {
882601
+ const rendered = renderKeyForDedup(entry.key);
882602
+ if (rendered != null) {
882603
+ seenKeys.set(rendered, index3);
882604
+ }
882605
+ });
882606
+ const entries23 = filteredEntries.filter((entry, index3) => {
882607
+ const rendered = renderKeyForDedup(entry.key);
882608
+ if (rendered == null) {
882609
+ return true;
882610
+ }
882611
+ return seenKeys.get(rendered) === index3;
882612
+ });
882506
882613
  if (entries23.length === 0) {
882507
882614
  writer2.write("{}");
882508
882615
  break;
@@ -882582,6 +882689,12 @@ var TypeLiteral3 = class _TypeLiteral extends AstNode6 {
882582
882689
  }
882583
882690
  }
882584
882691
  };
882692
+ function renderKeyForDedup(key2) {
882693
+ if (!(key2 instanceof TypeLiteral3)) {
882694
+ return void 0;
882695
+ }
882696
+ return key2.getDedupKey();
882697
+ }
882585
882698
 
882586
882699
  // ../../../generators/ruby-v2/ast/lib/ast/TypeParameter.js
882587
882700
  var Variance;
@@ -883544,6 +883657,7 @@ var EndpointSnippetGenerator7 = class {
883544
883657
  invokeMethodArgs.keywordArguments = invokeMethodArgs.keywordArguments ?? [];
883545
883658
  invokeMethodArgs.keywordArguments.push(requestOptions);
883546
883659
  }
883660
+ invokeMethodArgs.keywordArguments = dedupeKeywordArguments(invokeMethodArgs.keywordArguments);
883547
883661
  return ruby_exports.invokeMethod(invokeMethodArgs);
883548
883662
  }
883549
883663
  /**
@@ -883577,6 +883691,7 @@ var EndpointSnippetGenerator7 = class {
883577
883691
  invokeMethodArgs.keywordArguments = invokeMethodArgs.keywordArguments ?? [];
883578
883692
  invokeMethodArgs.keywordArguments.push(requestOptions);
883579
883693
  }
883694
+ invokeMethodArgs.keywordArguments = dedupeKeywordArguments(invokeMethodArgs.keywordArguments);
883580
883695
  return ruby_exports.invokeMethod(invokeMethodArgs);
883581
883696
  }
883582
883697
  /**
@@ -883913,6 +884028,21 @@ var EndpointSnippetGenerator7 = class {
883913
884028
  return this.context.getMethodName(endpoint3.declaration.name);
883914
884029
  }
883915
884030
  };
884031
+ function dedupeKeywordArguments(kwargs) {
884032
+ if (kwargs == null || kwargs.length <= 1) {
884033
+ return kwargs;
884034
+ }
884035
+ const lastIndexByName = /* @__PURE__ */ new Map();
884036
+ kwargs.forEach((arg, index3) => {
884037
+ lastIndexByName.set(arg.name, index3);
884038
+ });
884039
+ const deduped = kwargs.filter((arg, index3) => lastIndexByName.get(arg.name) === index3);
884040
+ if (deduped.length !== kwargs.length) {
884041
+ const droppedNames = Array.from(new Set(kwargs.map((arg) => arg.name).filter((name2, index3) => lastIndexByName.get(name2) !== index3)));
884042
+ console.warn(`[ruby-v2 dynamic-snippets] duplicate keyword argument name(s) [${droppedNames.join(", ")}] in a generated snippet; keeping last occurrence to match **params runtime behavior. This indicates a latent name collision in the Ruby SDK method signature that should be disambiguated at the generator level.`);
884043
+ }
884044
+ return deduped;
884045
+ }
883916
884046
 
883917
884047
  // ../../../generators/ruby-v2/dynamic-snippets/lib/DynamicSnippetsGenerator.js
883918
884048
  var DynamicSnippetsGenerator6 = class extends AbstractDynamicSnippetsGenerator {
@@ -919472,7 +919602,7 @@ var CliContext = class _CliContext {
919472
919602
  if (false) {
919473
919603
  this.logger.error("CLI_VERSION is not defined");
919474
919604
  }
919475
- return "4.106.3-6-ga791f2f555d";
919605
+ return "4.107.0-5-g8e65b2fdec8";
919476
919606
  }
919477
919607
  getCliName() {
919478
919608
  if (false) {
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "4.106.3-6-ga791f2f555d",
2
+ "version": "4.107.0-5-g8e65b2fdec8",
3
3
  "repository": {
4
4
  "type": "git",
5
5
  "url": "git+https://github.com/fern-api/fern.git",