@fern-api/fern-api-dev 5.0.0-11-g03ccf8c3d82 → 5.0.0-14-g2a2542cc004

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 +178 -33
  2. package/package.json +1 -1
package/cli.cjs CHANGED
@@ -621990,7 +621990,7 @@ var AccessTokenPosthogManager = class {
621990
621990
  properties: {
621991
621991
  ...event,
621992
621992
  ...event.properties,
621993
- version: "5.0.0-11-g03ccf8c3d82",
621993
+ version: "5.0.0-14-g2a2542cc004",
621994
621994
  usingAccessToken: true
621995
621995
  }
621996
621996
  });
@@ -622044,7 +622044,7 @@ var UserPosthogManager = class {
622044
622044
  distinctId: this.userId ?? await this.getPersistedDistinctId(),
622045
622045
  event: "CLI",
622046
622046
  properties: {
622047
- version: "5.0.0-11-g03ccf8c3d82",
622047
+ version: "5.0.0-14-g2a2542cc004",
622048
622048
  ...event,
622049
622049
  ...event.properties,
622050
622050
  usingAccessToken: false,
@@ -625704,6 +625704,133 @@ var TelemetryClient = class _TelemetryClient {
625704
625704
  }
625705
625705
  };
625706
625706
 
625707
+ // ../cli-v2/lib/ui/TtyAwareLogger.js
625708
+ var import_is_ci3 = __toESM(require_is_ci(), 1);
625709
+ var SPINNER_FRAMES = ["\u280B", "\u2819", "\u2839", "\u2838", "\u283C", "\u2834", "\u2826", "\u2827", "\u2807", "\u280F"];
625710
+ var SPINNER_INTERVAL_MS = 100;
625711
+ var TtyAwareLogger2 = class {
625712
+ isTTY;
625713
+ stdout;
625714
+ stderr;
625715
+ paintables = [];
625716
+ lastPaint = "";
625717
+ frameIndex = 0;
625718
+ interval;
625719
+ suspended = false;
625720
+ suspendBuffer = [];
625721
+ finished = false;
625722
+ constructor(stdout, stderr) {
625723
+ this.stdout = stdout;
625724
+ this.stderr = stderr;
625725
+ this.isTTY = stdout.isTTY === true && !import_is_ci3.default;
625726
+ }
625727
+ /**
625728
+ * Register a paintable. The first registration starts the repaint loop.
625729
+ */
625730
+ register(paintable) {
625731
+ this.paintables.push(paintable);
625732
+ if (this.isTTY && this.interval == null) {
625733
+ this.stdout.write(ansi_escapes_default.cursorHide);
625734
+ this.repaint();
625735
+ this.interval = setInterval(() => this.repaint(), SPINNER_INTERVAL_MS);
625736
+ }
625737
+ }
625738
+ /**
625739
+ * Write content above the paint region.
625740
+ *
625741
+ * On non-TTY streams the content is written verbatim. On TTY streams the
625742
+ * paint region is cleared, the content is written, and the paint region
625743
+ * is redrawn in place.
625744
+ */
625745
+ write(content5, { stderr = false } = {}) {
625746
+ const stream5 = stderr ? this.stderr : this.stdout;
625747
+ if (!this.isTTY) {
625748
+ stream5.write(content5);
625749
+ return;
625750
+ }
625751
+ if (this.suspended) {
625752
+ this.suspendBuffer.push({ content: content5, stderr });
625753
+ return;
625754
+ }
625755
+ this.stdout.write(this.clear());
625756
+ stream5.write(content5);
625757
+ this.stdout.write(this.paint());
625758
+ }
625759
+ /**
625760
+ * Pause the paint loop while `run` executes, buffering any `write()` calls,
625761
+ * then flush the buffer and resume. Useful for writing content that must
625762
+ * not be clobbered by a repaint (e.g. an inquirer prompt).
625763
+ */
625764
+ async takeOverTerminal(run) {
625765
+ if (!this.isTTY) {
625766
+ await run();
625767
+ return;
625768
+ }
625769
+ this.stopLoop();
625770
+ this.stdout.write(this.clear());
625771
+ this.suspended = true;
625772
+ try {
625773
+ await run();
625774
+ } finally {
625775
+ this.suspended = false;
625776
+ for (const { content: content5, stderr: isStderr } of this.suspendBuffer) {
625777
+ const stream5 = isStderr ? this.stderr : this.stdout;
625778
+ stream5.write(content5);
625779
+ }
625780
+ this.suspendBuffer = [];
625781
+ if (this.paintables.length > 0) {
625782
+ this.stdout.write(ansi_escapes_default.cursorHide);
625783
+ this.repaint();
625784
+ this.interval = setInterval(() => this.repaint(), SPINNER_INTERVAL_MS);
625785
+ }
625786
+ }
625787
+ }
625788
+ /**
625789
+ * Stop the paint loop, perform one final repaint, and restore the cursor.
625790
+ * Idempotent.
625791
+ */
625792
+ finish() {
625793
+ if (!this.isTTY || this.finished) {
625794
+ return;
625795
+ }
625796
+ this.finished = true;
625797
+ this.stopLoop();
625798
+ this.stdout.write(this.clear() + this.paint());
625799
+ this.stdout.write(ansi_escapes_default.cursorShow);
625800
+ }
625801
+ stopLoop() {
625802
+ if (this.interval != null) {
625803
+ clearInterval(this.interval);
625804
+ this.interval = void 0;
625805
+ }
625806
+ }
625807
+ repaint() {
625808
+ this.frameIndex = (this.frameIndex + 1) % SPINNER_FRAMES.length;
625809
+ this.stdout.write(this.clear() + this.paint());
625810
+ }
625811
+ clear() {
625812
+ if (this.lastPaint.length === 0) {
625813
+ return "";
625814
+ }
625815
+ return ansi_escapes_default.eraseLines(this.lastPaint.split("\n").length);
625816
+ }
625817
+ paint() {
625818
+ if (this.paintables.length === 0) {
625819
+ this.lastPaint = "";
625820
+ return "";
625821
+ }
625822
+ const spinnerFrame = SPINNER_FRAMES[this.frameIndex] ?? SPINNER_FRAMES[0];
625823
+ const bodies = this.paintables.map((p14) => p14.paint(spinnerFrame)).filter((body) => body.length > 0);
625824
+ if (bodies.length === 0) {
625825
+ this.lastPaint = "";
625826
+ return "";
625827
+ }
625828
+ const paint = bodies.join("\n") + "\n";
625829
+ this.lastPaint = paint;
625830
+ return paint;
625831
+ }
625832
+ };
625833
+
625707
625834
  // ../cli-v2/lib/api/config/converter/ApiDefinitionConverter.js
625708
625835
  init_lib6();
625709
625836
  var DEFAULT_API_NAME = "api";
@@ -626606,7 +626733,7 @@ var Context = class _Context {
626606
626733
  tokenService;
626607
626734
  ttyAwareLogger;
626608
626735
  static async create({ stdout, stderr, cwd: cwd2, logLevel }) {
626609
- const ttyAwareLogger = new TtyAwareLogger(stdout, stderr);
626736
+ const ttyAwareLogger = new TtyAwareLogger2(stdout, stderr);
626610
626737
  const telemetry = await TelemetryClient.create({ isTTY: ttyAwareLogger.isTTY });
626611
626738
  return new _Context({ stdout, stderr, cwd: cwd2, logLevel, ttyAwareLogger, telemetry });
626612
626739
  }
@@ -626849,31 +626976,44 @@ ${source_default.dim(`Logs written to: ${this.logs.absoluteFilePath}`)}
626849
626976
  this.ttyAwareLogger.finish();
626850
626977
  }
626851
626978
  log(level, ...parts) {
626852
- this.logImmediately([
626853
- {
626854
- parts,
626855
- level,
626856
- time: /* @__PURE__ */ new Date()
626857
- }
626858
- ]);
626979
+ this.writeLog(level, parts, { stderr: false });
626859
626980
  }
626860
626981
  logStderr(level, ...parts) {
626861
- this.logImmediately([
626862
- {
626863
- parts,
626864
- level,
626865
- time: /* @__PURE__ */ new Date()
626866
- }
626867
- ], { stderr: true });
626982
+ this.writeLog(level, parts, { stderr: true });
626868
626983
  }
626869
- logImmediately(logs4, { stderr = false } = {}) {
626870
- const filtered = logs4.filter((log4) => LOG_LEVELS.indexOf(log4.level) >= LOG_LEVELS.indexOf(this.logLevel));
626871
- this.ttyAwareLogger.log(filtered, {
626872
- includeDebugInfo: this.logLevel === LogLevel.Debug,
626873
- stderr
626984
+ writeLog(level, parts, { stderr }) {
626985
+ if (LOG_LEVELS.indexOf(level) < LOG_LEVELS.indexOf(this.logLevel)) {
626986
+ return;
626987
+ }
626988
+ const content5 = formatLogContent({
626989
+ level,
626990
+ parts,
626991
+ includeDebugInfo: this.logLevel === LogLevel.Debug
626874
626992
  });
626993
+ this.ttyAwareLogger.write(content5, { stderr });
626875
626994
  }
626876
626995
  };
626996
+ function formatLogContent({ level, parts, includeDebugInfo }) {
626997
+ let content5 = parts.join(" ");
626998
+ if (includeDebugInfo) {
626999
+ content5 = `${source_default.dim(`${getLogLevelPrefix(level)} ${(/* @__PURE__ */ new Date()).toISOString()} `)}${content5}`;
627000
+ }
627001
+ content5 += "\n";
627002
+ switch (level) {
627003
+ case LogLevel.Error:
627004
+ return source_default.red(content5);
627005
+ case LogLevel.Warn:
627006
+ return source_default.hex("FFA500")(content5);
627007
+ case LogLevel.Trace:
627008
+ case LogLevel.Debug:
627009
+ case LogLevel.Info:
627010
+ return content5;
627011
+ }
627012
+ }
627013
+ var LOG_LEVEL_PREFIX_WIDTH = Math.max(...LOG_LEVELS.map((l9) => l9.length));
627014
+ function getLogLevelPrefix(level) {
627015
+ return level.toUpperCase().padEnd(LOG_LEVEL_PREFIX_WIDTH);
627016
+ }
626877
627017
 
626878
627018
  // ../cli-v2/lib/context/loadDotenvFile.js
626879
627019
  var import_dotenv = __toESM(require_main2(), 1);
@@ -833779,7 +833919,7 @@ var LOCAL_STORAGE_FOLDER4 = ".fern-dev";
833779
833919
  var LOGS_FOLDER_NAME = "logs";
833780
833920
  var MAX_LOGS_DIR_SIZE_BYTES = 100 * 1024 * 1024;
833781
833921
  function getCliSource() {
833782
- const version7 = "5.0.0-11-g03ccf8c3d82";
833922
+ const version7 = "5.0.0-14-g2a2542cc004";
833783
833923
  return `cli@${version7}`;
833784
833924
  }
833785
833925
  var DebugLogger = class {
@@ -846197,7 +846337,7 @@ var LegacyDocsPublisher = class {
846197
846337
  previewId,
846198
846338
  disableTemplates: void 0,
846199
846339
  skipUpload,
846200
- cliVersion: "5.0.0-11-g03ccf8c3d82",
846340
+ cliVersion: "5.0.0-14-g2a2542cc004",
846201
846341
  loginCommand: "fern auth login"
846202
846342
  });
846203
846343
  if (taskContext.getResult() === TaskResult.Failure) {
@@ -846337,15 +846477,19 @@ var TaskGroup = class _TaskGroup {
846337
846477
  /**
846338
846478
  * Called by TtyAwareLogger to get the current display.
846339
846479
  * This is the integration point with TtyAwareLogger.
846480
+ *
846481
+ * Renders the task list wrapped in a bordered frame so multiple concurrent
846482
+ * TaskGroups (e.g. one per API in a fan-out) read as separate boxes rather
846483
+ * than a single megaframe.
846340
846484
  */
846341
- printInteractiveTasks({ spinner }) {
846485
+ paint(spinnerFrame) {
846342
846486
  const lines = [];
846343
846487
  for (const id2 of this.taskOrder) {
846344
846488
  const task = this.tasks[id2];
846345
846489
  if (task == null) {
846346
846490
  continue;
846347
846491
  }
846348
- const line = this.formatTaskLine(task, spinner);
846492
+ const line = this.formatTaskLine(task, spinnerFrame);
846349
846493
  if (line != null) {
846350
846494
  lines.push(line);
846351
846495
  }
@@ -846353,7 +846497,8 @@ var TaskGroup = class _TaskGroup {
846353
846497
  if (lines.length === 0) {
846354
846498
  return "";
846355
846499
  }
846356
- return lines.join("\n");
846500
+ const body = lines.join("\n");
846501
+ return ["\u250C\u2500", addPrefixToString({ content: body, prefix: "\u2502 ", includePrefixOnAllLines: true }), "\u2514\u2500"].join("\n");
846357
846502
  }
846358
846503
  /**
846359
846504
  * Complete the task group and show summary.
@@ -846446,7 +846591,7 @@ var TaskGroup = class _TaskGroup {
846446
846591
  }
846447
846592
  const lines = [];
846448
846593
  for (const stage of stages) {
846449
- const icon = this.getStageIcon(stage.status, spinnerFrame);
846594
+ const icon = this.getStageIcon(stage.status);
846450
846595
  let line = `
846451
846596
  ${icon} ${this.getStageLabel(stage)}`;
846452
846597
  if (stage.detail != null) {
@@ -846477,7 +846622,7 @@ var TaskGroup = class _TaskGroup {
846477
846622
  * Uses a static arrow (▸) for running stages to avoid visual noise
846478
846623
  * from having multiple spinners (the parent task already has a spinner).
846479
846624
  */
846480
- getStageIcon(status, _spinnerFrame) {
846625
+ getStageIcon(status) {
846481
846626
  switch (status) {
846482
846627
  case "pending":
846483
846628
  return source_default.dim("\u25CB");
@@ -846606,7 +846751,7 @@ ${indentStr}${source_default.dim(`... ${hiddenCount} earlier logs hidden ...`)}$
846606
846751
  return;
846607
846752
  }
846608
846753
  this.isRegistered = true;
846609
- this.context.ttyAwareLogger.registerTask(this);
846754
+ this.context.ttyAwareLogger.register(this);
846610
846755
  }
846611
846756
  };
846612
846757
 
@@ -920519,7 +920664,7 @@ var CliContext = class _CliContext {
920519
920664
  if (false) {
920520
920665
  this.logger.error("CLI_VERSION is not defined");
920521
920666
  }
920522
- return "5.0.0-11-g03ccf8c3d82";
920667
+ return "5.0.0-14-g2a2542cc004";
920523
920668
  }
920524
920669
  getCliName() {
920525
920670
  if (false) {
@@ -939350,7 +939495,7 @@ init_lib6();
939350
939495
  var import_cli_progress2 = __toESM(require_cli_progress(), 1);
939351
939496
  var import_fs42 = require("fs");
939352
939497
  var import_promises191 = require("fs/promises");
939353
- var import_is_ci3 = __toESM(require_is_ci(), 1);
939498
+ var import_is_ci4 = __toESM(require_is_ci(), 1);
939354
939499
  var import_path105 = __toESM(require("path"), 1);
939355
939500
 
939356
939501
  // src/commands/write-translation/translation-service.ts
@@ -940207,7 +940352,7 @@ async function writeTranslationForProject({
940207
940352
  }
940208
940353
  const totalFilesToProcess = filesToProcess.length + (docsConfigHasChanged ? 1 : 0);
940209
940354
  const totalProgressItems = totalFilesToProcess * targetLanguages.length;
940210
- const useProgressBar = process.stdout.isTTY && !import_is_ci3.default && totalProgressItems > 0;
940355
+ const useProgressBar = process.stdout.isTTY && !import_is_ci4.default && totalProgressItems > 0;
940211
940356
  let progressBar;
940212
940357
  if (useProgressBar) {
940213
940358
  progressBar = new import_cli_progress2.default.SingleBar({
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "5.0.0-11-g03ccf8c3d82",
2
+ "version": "5.0.0-14-g2a2542cc004",
3
3
  "repository": {
4
4
  "type": "git",
5
5
  "url": "git+https://github.com/fern-api/fern.git",