@fern-api/generator-cli 0.0.30 → 0.0.32

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/dist/cli.cjs +361 -243
  2. package/package.json +2 -1
package/dist/cli.cjs CHANGED
@@ -34,7 +34,7 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
34
34
  var require_build = __commonJS({
35
35
  "../../node_modules/.pnpm/y18n@5.0.8/node_modules/y18n/build/index.cjs"(exports2, module2) {
36
36
  "use strict";
37
- var fs2 = require("fs");
37
+ var fs3 = require("fs");
38
38
  var util = require("util");
39
39
  var path4 = require("path");
40
40
  var shim2;
@@ -198,14 +198,14 @@ var require_build = __commonJS({
198
198
  }
199
199
  var nodePlatformShim = {
200
200
  fs: {
201
- readFileSync: fs2.readFileSync,
202
- writeFile: fs2.writeFile
201
+ readFileSync: fs3.readFileSync,
202
+ writeFile: fs3.writeFile
203
203
  },
204
204
  format: util.format,
205
205
  resolve: path4.resolve,
206
206
  exists: (file) => {
207
207
  try {
208
- return fs2.statSync(file).isFile();
208
+ return fs3.statSync(file).isFile();
209
209
  } catch (err) {
210
210
  return false;
211
211
  }
@@ -224,7 +224,7 @@ var require_build2 = __commonJS({
224
224
  "use strict";
225
225
  var util = require("util");
226
226
  var path4 = require("path");
227
- var fs2 = require("fs");
227
+ var fs3 = require("fs");
228
228
  function camelCase3(str) {
229
229
  const isCamelCase = str !== str.toLowerCase() && str !== str.toUpperCase();
230
230
  if (!isCamelCase) {
@@ -1173,7 +1173,7 @@ var require_build2 = __commonJS({
1173
1173
  if (typeof require !== "undefined") {
1174
1174
  return require(path5);
1175
1175
  } else if (path5.match(/\.json$/)) {
1176
- return JSON.parse(fs2.readFileSync(path5, "utf8"));
1176
+ return JSON.parse(fs3.readFileSync(path5, "utf8"));
1177
1177
  } else {
1178
1178
  throw Error("only .json config files are supported in ESM");
1179
1179
  }
@@ -2881,7 +2881,7 @@ var require_get_caller_file = __commonJS({
2881
2881
  var require_require_directory = __commonJS({
2882
2882
  "../../node_modules/.pnpm/require-directory@2.1.1/node_modules/require-directory/index.js"(exports2, module2) {
2883
2883
  "use strict";
2884
- var fs2 = require("fs");
2884
+ var fs3 = require("fs");
2885
2885
  var join = require("path").join;
2886
2886
  var resolve7 = require("path").resolve;
2887
2887
  var dirname3 = require("path").dirname;
@@ -2918,9 +2918,9 @@ var require_require_directory = __commonJS({
2918
2918
  }
2919
2919
  }
2920
2920
  path4 = !path4 ? dirname3(m.filename) : resolve7(dirname3(m.filename), path4);
2921
- fs2.readdirSync(path4).forEach(function(filename) {
2921
+ fs3.readdirSync(path4).forEach(function(filename) {
2922
2922
  var joined = join(path4, filename), files, key, obj;
2923
- if (fs2.statSync(joined).isDirectory() && options.recurse) {
2923
+ if (fs3.statSync(joined).isDirectory() && options.recurse) {
2924
2924
  files = requireDirectory(m, joined, options);
2925
2925
  if (Object.keys(files).length) {
2926
2926
  retval[options.rename(filename, joined, filename)] = files;
@@ -4562,11 +4562,11 @@ ${t5.join("\n")}` : "";
4562
4562
  var require_tmp = __commonJS({
4563
4563
  "../../node_modules/.pnpm/tmp@0.2.3/node_modules/tmp/lib/tmp.js"(exports2, module2) {
4564
4564
  "use strict";
4565
- var fs2 = require("fs");
4565
+ var fs3 = require("fs");
4566
4566
  var os = require("os");
4567
4567
  var path4 = require("path");
4568
4568
  var crypto = require("crypto");
4569
- var _c2 = { fs: fs2.constants, os: os.constants };
4569
+ var _c2 = { fs: fs3.constants, os: os.constants };
4570
4570
  var RANDOM_CHARS = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
4571
4571
  var TEMPLATE_PATTERN = /XXXXXX/;
4572
4572
  var DEFAULT_TRIES = 3;
@@ -4578,13 +4578,13 @@ var require_tmp = __commonJS({
4578
4578
  var FILE_MODE = 384;
4579
4579
  var EXIT = "exit";
4580
4580
  var _removeObjects = [];
4581
- var FN_RMDIR_SYNC = fs2.rmdirSync.bind(fs2);
4581
+ var FN_RMDIR_SYNC = fs3.rmdirSync.bind(fs3);
4582
4582
  var _gracefulCleanup = false;
4583
4583
  function rimraf(dirPath, callback) {
4584
- return fs2.rm(dirPath, { recursive: true }, callback);
4584
+ return fs3.rm(dirPath, { recursive: true }, callback);
4585
4585
  }
4586
4586
  function FN_RIMRAF_SYNC(dirPath) {
4587
- return fs2.rmSync(dirPath, { recursive: true });
4587
+ return fs3.rmSync(dirPath, { recursive: true });
4588
4588
  }
4589
4589
  function tmpName(options, callback) {
4590
4590
  const args = _parseArguments(options, callback), opts = args[0], cb = args[1];
@@ -4597,7 +4597,7 @@ var require_tmp = __commonJS({
4597
4597
  (function _getUniqueName() {
4598
4598
  try {
4599
4599
  const name = _generateTmpName(opts);
4600
- fs2.stat(name, function(err) {
4600
+ fs3.stat(name, function(err) {
4601
4601
  if (!err) {
4602
4602
  if (tries-- > 0) return _getUniqueName();
4603
4603
  return cb(new Error("Could not get a unique tmp filename, max tries reached " + name));
@@ -4616,7 +4616,7 @@ var require_tmp = __commonJS({
4616
4616
  do {
4617
4617
  const name = _generateTmpName(opts);
4618
4618
  try {
4619
- fs2.statSync(name);
4619
+ fs3.statSync(name);
4620
4620
  } catch (e) {
4621
4621
  return name;
4622
4622
  }
@@ -4627,10 +4627,10 @@ var require_tmp = __commonJS({
4627
4627
  const args = _parseArguments(options, callback), opts = args[0], cb = args[1];
4628
4628
  tmpName(opts, function _tmpNameCreated(err, name) {
4629
4629
  if (err) return cb(err);
4630
- fs2.open(name, CREATE_FLAGS, opts.mode || FILE_MODE, function _fileCreated(err2, fd) {
4630
+ fs3.open(name, CREATE_FLAGS, opts.mode || FILE_MODE, function _fileCreated(err2, fd) {
4631
4631
  if (err2) return cb(err2);
4632
4632
  if (opts.discardDescriptor) {
4633
- return fs2.close(fd, function _discardCallback(possibleErr) {
4633
+ return fs3.close(fd, function _discardCallback(possibleErr) {
4634
4634
  return cb(possibleErr, name, void 0, _prepareTmpFileRemoveCallback(name, -1, opts, false));
4635
4635
  });
4636
4636
  } else {
@@ -4644,9 +4644,9 @@ var require_tmp = __commonJS({
4644
4644
  const args = _parseArguments(options), opts = args[0];
4645
4645
  const discardOrDetachDescriptor = opts.discardDescriptor || opts.detachDescriptor;
4646
4646
  const name = tmpNameSync(opts);
4647
- var fd = fs2.openSync(name, CREATE_FLAGS, opts.mode || FILE_MODE);
4647
+ var fd = fs3.openSync(name, CREATE_FLAGS, opts.mode || FILE_MODE);
4648
4648
  if (opts.discardDescriptor) {
4649
- fs2.closeSync(fd);
4649
+ fs3.closeSync(fd);
4650
4650
  fd = void 0;
4651
4651
  }
4652
4652
  return {
@@ -4659,7 +4659,7 @@ var require_tmp = __commonJS({
4659
4659
  const args = _parseArguments(options, callback), opts = args[0], cb = args[1];
4660
4660
  tmpName(opts, function _tmpNameCreated(err, name) {
4661
4661
  if (err) return cb(err);
4662
- fs2.mkdir(name, opts.mode || DIR_MODE, function _dirCreated(err2) {
4662
+ fs3.mkdir(name, opts.mode || DIR_MODE, function _dirCreated(err2) {
4663
4663
  if (err2) return cb(err2);
4664
4664
  cb(null, name, _prepareTmpDirRemoveCallback(name, opts, false));
4665
4665
  });
@@ -4668,7 +4668,7 @@ var require_tmp = __commonJS({
4668
4668
  function dirSync(options) {
4669
4669
  const args = _parseArguments(options), opts = args[0];
4670
4670
  const name = tmpNameSync(opts);
4671
- fs2.mkdirSync(name, opts.mode || DIR_MODE);
4671
+ fs3.mkdirSync(name, opts.mode || DIR_MODE);
4672
4672
  return {
4673
4673
  name,
4674
4674
  removeCallback: _prepareTmpDirRemoveCallback(name, opts, true)
@@ -4682,20 +4682,20 @@ var require_tmp = __commonJS({
4682
4682
  next();
4683
4683
  };
4684
4684
  if (0 <= fdPath[0])
4685
- fs2.close(fdPath[0], function() {
4686
- fs2.unlink(fdPath[1], _handler);
4685
+ fs3.close(fdPath[0], function() {
4686
+ fs3.unlink(fdPath[1], _handler);
4687
4687
  });
4688
- else fs2.unlink(fdPath[1], _handler);
4688
+ else fs3.unlink(fdPath[1], _handler);
4689
4689
  }
4690
4690
  function _removeFileSync(fdPath) {
4691
4691
  let rethrownException = null;
4692
4692
  try {
4693
- if (0 <= fdPath[0]) fs2.closeSync(fdPath[0]);
4693
+ if (0 <= fdPath[0]) fs3.closeSync(fdPath[0]);
4694
4694
  } catch (e) {
4695
4695
  if (!_isEBADF(e) && !_isENOENT(e)) throw e;
4696
4696
  } finally {
4697
4697
  try {
4698
- fs2.unlinkSync(fdPath[1]);
4698
+ fs3.unlinkSync(fdPath[1]);
4699
4699
  } catch (e) {
4700
4700
  if (!_isENOENT(e)) rethrownException = e;
4701
4701
  }
@@ -4711,7 +4711,7 @@ var require_tmp = __commonJS({
4711
4711
  return sync ? removeCallbackSync : removeCallback;
4712
4712
  }
4713
4713
  function _prepareTmpDirRemoveCallback(name, opts, sync) {
4714
- const removeFunction = opts.unsafeCleanup ? rimraf : fs2.rmdir.bind(fs2);
4714
+ const removeFunction = opts.unsafeCleanup ? rimraf : fs3.rmdir.bind(fs3);
4715
4715
  const removeFunctionSync = opts.unsafeCleanup ? FN_RIMRAF_SYNC : FN_RMDIR_SYNC;
4716
4716
  const removeCallbackSync = _prepareRemoveCallback(removeFunctionSync, name, sync);
4717
4717
  const removeCallback = _prepareRemoveCallback(removeFunction, name, sync, removeCallbackSync);
@@ -6417,7 +6417,7 @@ var require_dist2 = __commonJS({
6417
6417
  });
6418
6418
 
6419
6419
  // src/cli.ts
6420
- var import_fs5 = __toESM(require("fs"), 1);
6420
+ var import_fs6 = __toESM(require("fs"), 1);
6421
6421
  var import_promises6 = require("fs/promises");
6422
6422
  var import_path7 = __toESM(require("path"), 1);
6423
6423
 
@@ -8056,6 +8056,9 @@ async function loadReferenceConfig({
8056
8056
  return JSON.parse(rawContents);
8057
8057
  }
8058
8058
 
8059
+ // src/github/GitHub.ts
8060
+ var import_rest = require("@octokit/rest");
8061
+
8059
8062
  // ../../node_modules/.pnpm/simple-git@3.24.0/node_modules/simple-git/dist/esm/index.js
8060
8063
  var import_file_exists = __toESM(require_dist(), 1);
8061
8064
  var import_debug = __toESM(require_src3(), 1);
@@ -12755,7 +12758,55 @@ var GitHub = class {
12755
12758
  }
12756
12759
  }
12757
12760
  async pr() {
12758
- console.log("TODO: Implement PR");
12761
+ try {
12762
+ const wd = cwd();
12763
+ const sourceDirectory = resolve5(wd, this.githubConfig.sourceDirectory);
12764
+ const repository = await cloneRepository({
12765
+ githubRepository: this.githubConfig.uri,
12766
+ installationToken: this.githubConfig.token
12767
+ });
12768
+ const baseBranch = this.githubConfig.branch ?? await repository.getDefaultBranch();
12769
+ const now = /* @__PURE__ */ new Date();
12770
+ const formattedDate = now.toISOString().replace("T", "_").replace(/:/g, "-").replace(/\..+/, "");
12771
+ const prBranch = `fern-bot/${formattedDate}`;
12772
+ await repository.checkout(baseBranch);
12773
+ await repository.pull(baseBranch);
12774
+ await repository.checkout(prBranch);
12775
+ const fernIgnore = await repository.getFernignore();
12776
+ await repository.overwriteLocalContents(sourceDirectory);
12777
+ await repository.add(".");
12778
+ await this.restoreFernignoreFiles(repository, fernIgnore);
12779
+ await repository.commit("SDK Generation");
12780
+ await repository.push();
12781
+ const octokit = new import_rest.Octokit({
12782
+ auth: this.githubConfig.token
12783
+ });
12784
+ const [owner, repo] = this.githubConfig.uri.split("/");
12785
+ if (!owner || !repo) {
12786
+ throw new Error(`Invalid repository URI: ${this.githubConfig.uri}`);
12787
+ }
12788
+ const head = `${owner}:${prBranch}`;
12789
+ try {
12790
+ await octokit.pulls.create({
12791
+ owner,
12792
+ repo,
12793
+ title: "SDK Generation",
12794
+ body: "Automated SDK generation by Fern",
12795
+ head,
12796
+ base: baseBranch,
12797
+ draft: false
12798
+ });
12799
+ } catch (e) {
12800
+ if (typeof e?.message === "string" && e.message.includes("A pull request already exists for")) {
12801
+ console.error(`A pull request already exists for ${head}`);
12802
+ } else {
12803
+ throw e;
12804
+ }
12805
+ }
12806
+ } catch (error) {
12807
+ console.error("Error during GitHub PR flow:", error);
12808
+ throw error;
12809
+ }
12759
12810
  }
12760
12811
  async release() {
12761
12812
  console.log("TODO: Implement release");
@@ -12996,17 +13047,18 @@ var Language = {
12996
13047
  };
12997
13048
 
12998
13049
  // src/utils/Writer.ts
13050
+ var import_fs5 = __toESM(require("fs"), 1);
12999
13051
  var Writer = class {
13000
- writeCodeBlock(language, content) {
13001
- this.writeLine("```" + language);
13002
- this.write(content);
13003
- this.writeLine("```");
13052
+ async writeCodeBlock(language, content) {
13053
+ await this.writeLine(`\`\`\`${language}`);
13054
+ await this.write(content);
13055
+ await this.writeLine("```");
13004
13056
  }
13005
- writeLine(content) {
13057
+ async writeLine(content) {
13006
13058
  if (content === void 0) {
13007
- this.write("\n");
13059
+ await this.write("\n");
13008
13060
  } else {
13009
- this.write(`${content}
13061
+ await this.write(`${content}
13010
13062
  `);
13011
13063
  }
13012
13064
  }
@@ -13017,11 +13069,57 @@ var StreamWriter = class extends Writer {
13017
13069
  this.stream = stream;
13018
13070
  this.stream = stream;
13019
13071
  }
13020
- write(content) {
13021
- this.stream.write(content);
13072
+ async write(content) {
13073
+ return new Promise((resolve7, reject) => {
13074
+ const handleError = (err) => {
13075
+ this.stream.removeListener("error", handleError);
13076
+ reject(err);
13077
+ };
13078
+ if (this.stream instanceof import_fs5.default.WriteStream) {
13079
+ const canWrite = this.stream.write(
13080
+ content,
13081
+ (error) => {
13082
+ this.stream.removeListener("error", handleError);
13083
+ if (error) {
13084
+ reject(error);
13085
+ } else {
13086
+ resolve7();
13087
+ }
13088
+ }
13089
+ );
13090
+ this.stream.once("error", handleError);
13091
+ if (!canWrite) {
13092
+ this.stream.once("drain", resolve7);
13093
+ }
13094
+ } else {
13095
+ const canWrite = this.stream.write(content);
13096
+ this.stream.once("error", handleError);
13097
+ if (!canWrite) {
13098
+ this.stream.once("drain", () => {
13099
+ this.stream.removeListener("error", handleError);
13100
+ resolve7();
13101
+ });
13102
+ } else {
13103
+ this.stream.removeListener("error", handleError);
13104
+ resolve7();
13105
+ }
13106
+ }
13107
+ });
13022
13108
  }
13023
13109
  end() {
13024
- this.stream.end();
13110
+ return new Promise((resolve7, reject) => {
13111
+ if (this.stream instanceof import_fs5.default.WriteStream) {
13112
+ this.stream.end(() => {
13113
+ resolve7();
13114
+ });
13115
+ this.stream.once("error", reject);
13116
+ this.stream.once("finish", resolve7);
13117
+ } else {
13118
+ this.stream.write("", () => {
13119
+ resolve7();
13120
+ });
13121
+ }
13122
+ });
13025
13123
  }
13026
13124
  };
13027
13125
  var StringWriter = class extends Writer {
@@ -13030,10 +13128,10 @@ var StringWriter = class extends Writer {
13030
13128
  super();
13031
13129
  this.content = "";
13032
13130
  }
13033
- write(content) {
13131
+ async write(content) {
13034
13132
  this.content += content;
13035
13133
  }
13036
- end() {
13134
+ async end() {
13037
13135
  return;
13038
13136
  }
13039
13137
  toString() {
@@ -13049,10 +13147,10 @@ var Block = class {
13049
13147
  this.id = id;
13050
13148
  this.content = content;
13051
13149
  }
13052
- write(writer) {
13053
- writer.write(this.content);
13150
+ async write(writer) {
13151
+ await writer.write(this.content);
13054
13152
  if (!this.content.endsWith("\n")) {
13055
- writer.writeLine();
13153
+ await writer.writeLine();
13056
13154
  }
13057
13155
  }
13058
13156
  };
@@ -13147,42 +13245,41 @@ var ReadmeGenerator = class {
13147
13245
  async generateReadme({
13148
13246
  output
13149
13247
  }) {
13150
- const blocks = this.generateBlocks();
13248
+ const blocks = await this.generateBlocks();
13151
13249
  const writer = new StreamWriter(output);
13152
- this.writeHeader({ writer });
13153
- this.writeBlocks({
13250
+ await this.writeHeader({ writer });
13251
+ await this.writeBlocks({
13154
13252
  writer,
13155
13253
  blocks: await this.mergeBlocks({ blocks })
13156
13254
  });
13157
- writer.end();
13158
- return;
13255
+ await writer.end();
13159
13256
  }
13160
- generateBlocks() {
13257
+ async generateBlocks() {
13161
13258
  const blocks = [];
13162
13259
  if (this.readmeConfig.apiReferenceLink != null) {
13163
13260
  blocks.push(
13164
- this.generateDocumentation({
13261
+ await this.generateDocumentation({
13165
13262
  docsLink: this.readmeConfig.apiReferenceLink
13166
13263
  })
13167
13264
  );
13168
13265
  }
13169
13266
  if (this.readmeConfig.requirements != null) {
13170
13267
  blocks.push(
13171
- this.generateRequirements({
13268
+ await this.generateRequirements({
13172
13269
  requirements: this.readmeConfig.requirements
13173
13270
  })
13174
13271
  );
13175
13272
  }
13176
13273
  if (this.readmeConfig.language?.publishInfo != null) {
13177
13274
  blocks.push(
13178
- this.generateInstallation({
13275
+ await this.generateInstallation({
13179
13276
  language: this.readmeConfig.language
13180
13277
  })
13181
13278
  );
13182
13279
  }
13183
13280
  if (this.readmeConfig.referenceMarkdownPath != null) {
13184
13281
  blocks.push(
13185
- this.generateReference({
13282
+ await this.generateReference({
13186
13283
  referenceFile: this.readmeConfig.referenceMarkdownPath
13187
13284
  })
13188
13285
  );
@@ -13194,12 +13291,12 @@ var ReadmeGenerator = class {
13194
13291
  continue;
13195
13292
  }
13196
13293
  blocks.push(
13197
- this.generateFeatureBlock({
13294
+ await this.generateFeatureBlock({
13198
13295
  feature
13199
13296
  })
13200
13297
  );
13201
13298
  }
13202
- const advancedFeatureBlock = this.generateNestedFeatureBlock({
13299
+ const advancedFeatureBlock = await this.generateNestedFeatureBlock({
13203
13300
  featureId: this.ADVANCED_FEATURE_ID,
13204
13301
  features: advancedFeatures
13205
13302
  });
@@ -13215,7 +13312,7 @@ var ReadmeGenerator = class {
13215
13312
  }
13216
13313
  return feat.advanced ?? false;
13217
13314
  }
13218
- generateNestedFeatureBlock({
13315
+ async generateNestedFeatureBlock({
13219
13316
  featureId,
13220
13317
  features
13221
13318
  }) {
@@ -13223,13 +13320,13 @@ var ReadmeGenerator = class {
13223
13320
  return void 0;
13224
13321
  }
13225
13322
  const writer = new StringWriter();
13226
- writer.writeLine(`## ${featureIDToTitle(featureId)}`);
13227
- writer.writeLine();
13323
+ await writer.writeLine(`## ${featureIDToTitle(featureId)}`);
13324
+ await writer.writeLine();
13228
13325
  for (const feature of features) {
13229
13326
  if (this.shouldSkipFeature({ feature })) {
13230
13327
  continue;
13231
13328
  }
13232
- this.generateFeatureBlock({
13329
+ await this.generateFeatureBlock({
13233
13330
  feature,
13234
13331
  heading: "###",
13235
13332
  maybeWriter: writer
@@ -13240,27 +13337,27 @@ var ReadmeGenerator = class {
13240
13337
  content: writer.toString()
13241
13338
  });
13242
13339
  }
13243
- generateFeatureBlock({
13340
+ async generateFeatureBlock({
13244
13341
  feature,
13245
13342
  heading = "##",
13246
13343
  maybeWriter
13247
13344
  }) {
13248
13345
  const writer = maybeWriter ?? new StringWriter();
13249
- writer.writeLine(`${heading} ${featureIDToTitle(feature.id)}`);
13250
- writer.writeLine();
13346
+ await writer.writeLine(`${heading} ${featureIDToTitle(feature.id)}`);
13347
+ await writer.writeLine();
13251
13348
  if (feature.description != null) {
13252
- writer.writeLine(feature.description);
13349
+ await writer.writeLine(feature.description);
13253
13350
  }
13254
- feature.snippets?.forEach((snippet, index) => {
13351
+ for (const [index, snippet] of feature.snippets?.entries() ?? []) {
13255
13352
  if (index > 0) {
13256
- writer.writeLine();
13353
+ await writer.writeLine();
13257
13354
  }
13258
- writer.writeCodeBlock(this.readmeConfig.language.type, snippet);
13259
- });
13355
+ await writer.writeCodeBlock(this.readmeConfig.language.type, snippet);
13356
+ }
13260
13357
  if (feature.addendum != null) {
13261
- writer.writeLine(feature.addendum);
13358
+ await writer.writeLine(feature.addendum);
13262
13359
  }
13263
- writer.writeLine();
13360
+ await writer.writeLine();
13264
13361
  return new Block({
13265
13362
  id: feature.id,
13266
13363
  content: writer.toString()
@@ -13293,150 +13390,152 @@ var ReadmeGenerator = class {
13293
13390
  }
13294
13391
  return void 0;
13295
13392
  }
13296
- writeBlocks({
13393
+ async writeBlocks({
13297
13394
  writer,
13298
13395
  blocks
13299
13396
  }) {
13300
13397
  for (const block of blocks) {
13301
- block.write(writer);
13398
+ await block.write(writer);
13302
13399
  }
13303
13400
  }
13304
- writeHeader({ writer }) {
13305
- writer.writeLine(
13401
+ async writeHeader({ writer }) {
13402
+ await writer.writeLine(
13306
13403
  `# ${this.organizationPascalCase} ${this.languageTitle} Library`
13307
13404
  );
13308
- writer.writeLine();
13405
+ await writer.writeLine();
13309
13406
  if (this.readmeConfig.bannerLink != null) {
13310
- this.writeBanner({
13407
+ await this.writeBanner({
13311
13408
  writer,
13312
13409
  bannerLink: this.readmeConfig.bannerLink
13313
13410
  });
13314
13411
  }
13315
- this.writeFernShield({ writer });
13412
+ await this.writeFernShield({ writer });
13316
13413
  if (this.readmeConfig.language != null) {
13317
- this.writeShield({
13414
+ await this.writeShield({
13318
13415
  writer,
13319
13416
  language: this.readmeConfig.language
13320
13417
  });
13321
13418
  }
13322
- writer.writeLine();
13323
- this.writeIntroudction({ writer });
13419
+ await writer.writeLine();
13420
+ await this.writeIntro({ writer });
13324
13421
  }
13325
- writeBanner({
13422
+ async writeBanner({
13326
13423
  writer,
13327
13424
  bannerLink
13328
13425
  }) {
13329
- writer.writeLine(`![](${bannerLink})`);
13330
- writer.writeLine();
13426
+ await writer.writeLine(`![](${bannerLink})`);
13427
+ await writer.writeLine();
13331
13428
  }
13332
- writeFernShield({ writer }) {
13429
+ async writeFernShield({ writer }) {
13333
13430
  const repoSource = this.readmeConfig.remote?.repoUrl ?? `${this.organizationPascalCase}/${this.languageTitle}`;
13334
- writer.writeLine(
13431
+ await writer.writeLine(
13335
13432
  `[![fern shield](https://img.shields.io/badge/%F0%9F%8C%BF-Built%20with%20Fern-brightgreen)](https://buildwithfern.com?utm_source=github&utm_medium=github&utm_campaign=readme&utm_source=${encodeURIComponent(repoSource)})`
13336
13433
  );
13337
13434
  }
13338
- writeIntroudction({ writer }) {
13339
- writer.writeLine(
13435
+ async writeIntro({ writer }) {
13436
+ await writer.writeLine(
13340
13437
  this.readmeConfig.introduction != null ? this.readmeConfig.introduction : `The ${this.organizationPascalCase} ${this.languageTitle} library provides convenient access to the ${this.organizationPascalCase} API from ${this.languageTitle}.`
13341
13438
  );
13342
- writer.writeLine();
13439
+ await writer.writeLine();
13343
13440
  }
13344
- generateDocumentation({ docsLink }) {
13441
+ async generateDocumentation({
13442
+ docsLink
13443
+ }) {
13345
13444
  const writer = new StringWriter();
13346
- writer.writeLine("## Documentation");
13347
- writer.writeLine();
13348
- writer.writeLine(
13445
+ await writer.writeLine("## Documentation");
13446
+ await writer.writeLine();
13447
+ await writer.writeLine(
13349
13448
  `API reference documentation is available [here](${docsLink}).`
13350
13449
  );
13351
- writer.writeLine();
13450
+ await writer.writeLine();
13352
13451
  return new Block({
13353
13452
  id: "DOCUMENTATION",
13354
13453
  content: writer.toString()
13355
13454
  });
13356
13455
  }
13357
- generateReference({
13456
+ async generateReference({
13358
13457
  referenceFile
13359
13458
  }) {
13360
13459
  const writer = new StringWriter();
13361
- writer.writeLine("## Reference");
13362
- writer.writeLine();
13363
- writer.writeLine(
13460
+ await writer.writeLine("## Reference");
13461
+ await writer.writeLine();
13462
+ await writer.writeLine(
13364
13463
  `A full reference for this library is available [here](${this.readmeConfig.remote?.repoUrl != null ? `${this.readmeConfig.remote.repoUrl}/blob/HEAD/${referenceFile}` : referenceFile}).`
13365
13464
  );
13366
- writer.writeLine();
13465
+ await writer.writeLine();
13367
13466
  return new Block({
13368
13467
  id: "REFERENCE",
13369
13468
  content: writer.toString()
13370
13469
  });
13371
13470
  }
13372
- generateRequirements({
13471
+ async generateRequirements({
13373
13472
  requirements
13374
13473
  }) {
13375
13474
  const writer = new StringWriter();
13376
- writer.writeLine("## Requirements");
13377
- writer.writeLine();
13475
+ await writer.writeLine("## Requirements");
13476
+ await writer.writeLine();
13378
13477
  if (requirements.length === 1) {
13379
- writer.writeLine(`This SDK requires ${requirements[0]}.`);
13478
+ await writer.writeLine(`This SDK requires ${requirements[0]}.`);
13380
13479
  } else {
13381
- writer.writeLine("This SDK requires:");
13480
+ await writer.writeLine("This SDK requires:");
13382
13481
  for (const requirement of requirements) {
13383
- writer.writeLine(`- ${requirement}`);
13482
+ await writer.writeLine(`- ${requirement}`);
13384
13483
  }
13385
13484
  }
13386
- writer.writeLine();
13485
+ await writer.writeLine();
13387
13486
  return new Block({
13388
13487
  id: "REQUIREMENTS",
13389
13488
  content: writer.toString()
13390
13489
  });
13391
13490
  }
13392
- generateInstallation({
13491
+ async generateInstallation({
13393
13492
  language
13394
13493
  }) {
13395
13494
  if (language.publishInfo == null) {
13396
13495
  throw new Error("publish information is required for installation block");
13397
13496
  }
13398
13497
  const writer = new StringWriter();
13399
- writer.writeLine("## Installation");
13400
- writer.writeLine();
13498
+ await writer.writeLine("## Installation");
13499
+ await writer.writeLine();
13401
13500
  switch (language.type) {
13402
13501
  case "typescript":
13403
- this.writeInstallationForNPM({
13502
+ await this.writeInstallationForNPM({
13404
13503
  writer,
13405
13504
  npm: language.publishInfo
13406
13505
  });
13407
13506
  break;
13408
13507
  case "python":
13409
- this.writeInstallationForPyPi({
13508
+ await this.writeInstallationForPyPi({
13410
13509
  writer,
13411
13510
  pypi: language.publishInfo
13412
13511
  });
13413
13512
  break;
13414
13513
  case "java":
13415
- this.writeInstallationForMaven({
13514
+ await this.writeInstallationForMaven({
13416
13515
  writer,
13417
13516
  maven: language.publishInfo
13418
13517
  });
13419
13518
  break;
13420
13519
  case "go":
13421
- this.writeInstallationForGo({
13520
+ await this.writeInstallationForGo({
13422
13521
  writer,
13423
13522
  go: language.publishInfo
13424
13523
  });
13425
13524
  break;
13426
13525
  case "ruby":
13427
- this.writeInstallationForRubyGems({
13526
+ await this.writeInstallationForRubyGems({
13428
13527
  writer,
13429
13528
  rubyGems: language.publishInfo
13430
13529
  });
13431
13530
  break;
13432
13531
  case "csharp":
13433
- this.writeInstallationForNuget({
13532
+ await this.writeInstallationForNuget({
13434
13533
  writer,
13435
13534
  nuget: language.publishInfo
13436
13535
  });
13437
13536
  break;
13438
13537
  case "php":
13439
- this.writeInstallationForComposer({
13538
+ await this.writeInstallationForComposer({
13440
13539
  writer,
13441
13540
  composer: language.publishInfo
13442
13541
  });
@@ -13449,93 +13548,95 @@ var ReadmeGenerator = class {
13449
13548
  content: writer.toString()
13450
13549
  });
13451
13550
  }
13452
- writeInstallationForNPM({
13551
+ async writeInstallationForNPM({
13453
13552
  writer,
13454
13553
  npm
13455
13554
  }) {
13456
- writer.writeLine("```sh");
13457
- writer.writeLine(`npm i -s ${npm.packageName}`);
13458
- writer.writeLine("```");
13459
- writer.writeLine();
13555
+ await writer.writeLine("```sh");
13556
+ await writer.writeLine(`npm i -s ${npm.packageName}`);
13557
+ await writer.writeLine("```");
13558
+ await writer.writeLine();
13460
13559
  }
13461
- writeInstallationForPyPi({
13560
+ async writeInstallationForPyPi({
13462
13561
  writer,
13463
13562
  pypi
13464
13563
  }) {
13465
- writer.writeLine("```sh");
13466
- writer.writeLine(`pip install ${pypi.packageName}`);
13467
- writer.writeLine("```");
13468
- writer.writeLine();
13564
+ await writer.writeLine("```sh");
13565
+ await writer.writeLine(`pip install ${pypi.packageName}`);
13566
+ await writer.writeLine("```");
13567
+ await writer.writeLine();
13469
13568
  }
13470
- writeInstallationForMaven({
13569
+ async writeInstallationForMaven({
13471
13570
  writer,
13472
13571
  maven
13473
13572
  }) {
13474
- writer.writeLine("### Gradle");
13475
- writer.writeLine();
13476
- writer.writeLine("Add the dependency in your `build.gradle` file:");
13477
- writer.writeLine();
13478
- writer.writeLine("```groovy");
13479
- writer.writeLine("dependencies {");
13480
- writer.writeLine(` implementation '${maven.group}:${maven.artifact}'`);
13481
- writer.writeLine("}");
13482
- writer.writeLine("```");
13483
- writer.writeLine();
13484
- writer.writeLine("### Maven");
13485
- writer.writeLine();
13486
- writer.writeLine("Add the dependency in your `pom.xml` file:");
13487
- writer.writeLine();
13488
- writer.writeLine("```xml");
13489
- writer.writeLine("<dependency>");
13490
- writer.writeLine(` <groupId>${maven.group}</groupId>`);
13491
- writer.writeLine(` <artifactId>${maven.artifact}</artifactId>`);
13492
- writer.writeLine(` <version>${maven.version}</version>`);
13493
- writer.writeLine("</dependency>");
13494
- writer.writeLine("```");
13495
- writer.writeLine();
13496
- }
13497
- writeInstallationForGo({
13573
+ await writer.writeLine("### Gradle");
13574
+ await writer.writeLine();
13575
+ await writer.writeLine("Add the dependency in your `build.gradle` file:");
13576
+ await writer.writeLine();
13577
+ await writer.writeLine("```groovy");
13578
+ await writer.writeLine("dependencies {");
13579
+ await writer.writeLine(
13580
+ ` implementation '${maven.group}:${maven.artifact}'`
13581
+ );
13582
+ await writer.writeLine("}");
13583
+ await writer.writeLine("```");
13584
+ await writer.writeLine();
13585
+ await writer.writeLine("### Maven");
13586
+ await writer.writeLine();
13587
+ await writer.writeLine("Add the dependency in your `pom.xml` file:");
13588
+ await writer.writeLine();
13589
+ await writer.writeLine("```xml");
13590
+ await writer.writeLine("<dependency>");
13591
+ await writer.writeLine(` <groupId>${maven.group}</groupId>`);
13592
+ await writer.writeLine(` <artifactId>${maven.artifact}</artifactId>`);
13593
+ await writer.writeLine(` <version>${maven.version}</version>`);
13594
+ await writer.writeLine("</dependency>");
13595
+ await writer.writeLine("```");
13596
+ await writer.writeLine();
13597
+ }
13598
+ async writeInstallationForGo({
13498
13599
  writer,
13499
13600
  go
13500
13601
  }) {
13501
- writer.writeLine("```sh");
13502
- writer.write(`go get github.com/${go.owner}/${go.repo}`);
13602
+ await writer.writeLine("```sh");
13603
+ await writer.write(`go get github.com/${go.owner}/${go.repo}`);
13503
13604
  const majorVersion = getMajorVersion(go.version);
13504
13605
  if (!majorVersion.startsWith("0") && !majorVersion.startsWith("1")) {
13505
- writer.write(`/v${majorVersion}`);
13606
+ await writer.write(`/v${majorVersion}`);
13506
13607
  }
13507
- writer.writeLine();
13508
- writer.writeLine("```");
13509
- writer.writeLine();
13608
+ await writer.writeLine();
13609
+ await writer.writeLine("```");
13610
+ await writer.writeLine();
13510
13611
  }
13511
- writeInstallationForRubyGems({
13612
+ async writeInstallationForRubyGems({
13512
13613
  writer,
13513
13614
  rubyGems
13514
13615
  }) {
13515
- writer.writeLine("```sh");
13516
- writer.writeLine(`gem install ${rubyGems.packageName}`);
13517
- writer.writeLine("```");
13518
- writer.writeLine();
13616
+ await writer.writeLine("```sh");
13617
+ await writer.writeLine(`gem install ${rubyGems.packageName}`);
13618
+ await writer.writeLine("```");
13619
+ await writer.writeLine();
13519
13620
  }
13520
- writeInstallationForNuget({
13621
+ async writeInstallationForNuget({
13521
13622
  writer,
13522
13623
  nuget
13523
13624
  }) {
13524
- writer.writeLine("```sh");
13525
- writer.writeLine(`dotnet add package ${nuget.packageName}`);
13526
- writer.writeLine("```");
13527
- writer.writeLine();
13625
+ await writer.writeLine("```sh");
13626
+ await writer.writeLine(`dotnet add package ${nuget.packageName}`);
13627
+ await writer.writeLine("```");
13628
+ await writer.writeLine();
13528
13629
  }
13529
- writeInstallationForComposer({
13630
+ async writeInstallationForComposer({
13530
13631
  writer,
13531
13632
  composer
13532
13633
  }) {
13533
- writer.writeLine("```sh");
13534
- writer.writeLine(`composer require ${composer.packageName}`);
13535
- writer.writeLine("```");
13536
- writer.writeLine();
13634
+ await writer.writeLine("```sh");
13635
+ await writer.writeLine(`composer require ${composer.packageName}`);
13636
+ await writer.writeLine("```");
13637
+ await writer.writeLine();
13537
13638
  }
13538
- writeShield({
13639
+ async writeShield({
13539
13640
  writer,
13540
13641
  language
13541
13642
  }) {
@@ -13545,7 +13646,7 @@ var ReadmeGenerator = class {
13545
13646
  if (npm == null) {
13546
13647
  return;
13547
13648
  }
13548
- this.writeShieldForNPM({
13649
+ await this.writeShieldForNPM({
13549
13650
  writer,
13550
13651
  npm
13551
13652
  });
@@ -13556,7 +13657,7 @@ var ReadmeGenerator = class {
13556
13657
  if (pypi == null) {
13557
13658
  return;
13558
13659
  }
13559
- this.writeShieldForPyPi({
13660
+ await this.writeShieldForPyPi({
13560
13661
  writer,
13561
13662
  pypi
13562
13663
  });
@@ -13567,7 +13668,7 @@ var ReadmeGenerator = class {
13567
13668
  if (maven == null) {
13568
13669
  return;
13569
13670
  }
13570
- this.writeShieldForMaven({
13671
+ await this.writeShieldForMaven({
13571
13672
  writer,
13572
13673
  maven
13573
13674
  });
@@ -13578,7 +13679,7 @@ var ReadmeGenerator = class {
13578
13679
  if (go == null) {
13579
13680
  return;
13580
13681
  }
13581
- this.writeShieldForGo({
13682
+ await this.writeShieldForGo({
13582
13683
  writer,
13583
13684
  go
13584
13685
  });
@@ -13589,7 +13690,7 @@ var ReadmeGenerator = class {
13589
13690
  if (rubyGems == null) {
13590
13691
  return;
13591
13692
  }
13592
- this.writeShieldForRubyGems({
13693
+ await this.writeShieldForRubyGems({
13593
13694
  writer,
13594
13695
  rubyGems
13595
13696
  });
@@ -13600,7 +13701,7 @@ var ReadmeGenerator = class {
13600
13701
  if (nuget == null) {
13601
13702
  return;
13602
13703
  }
13603
- this.writeShieldForNuget({
13704
+ await this.writeShieldForNuget({
13604
13705
  writer,
13605
13706
  nuget
13606
13707
  });
@@ -13611,7 +13712,7 @@ var ReadmeGenerator = class {
13611
13712
  if (composer == null) {
13612
13713
  return;
13613
13714
  }
13614
- this.writeShieldForComposer({
13715
+ await this.writeShieldForComposer({
13615
13716
  writer,
13616
13717
  composer
13617
13718
  });
@@ -13621,65 +13722,77 @@ var ReadmeGenerator = class {
13621
13722
  assertNever(language);
13622
13723
  }
13623
13724
  }
13624
- writeShieldForNPM({
13725
+ async writeShieldForNPM({
13625
13726
  writer,
13626
13727
  npm
13627
13728
  }) {
13628
- writer.write("[![npm shield]");
13629
- writer.write(`(https://img.shields.io/npm/v/${npm.packageName})]`);
13630
- writer.writeLine(`(https://www.npmjs.com/package/${npm.packageName})`);
13729
+ await writer.write("[![npm shield]");
13730
+ await writer.write(`(https://img.shields.io/npm/v/${npm.packageName})]`);
13731
+ await writer.writeLine(
13732
+ `(https://www.npmjs.com/package/${npm.packageName})`
13733
+ );
13631
13734
  }
13632
- writeShieldForPyPi({
13735
+ async writeShieldForPyPi({
13633
13736
  writer,
13634
13737
  pypi
13635
13738
  }) {
13636
- writer.write("[![pypi]");
13637
- writer.write(`(https://img.shields.io/pypi/v/${pypi.packageName})]`);
13638
- writer.writeLine(`(https://pypi.python.org/pypi/${pypi.packageName})`);
13739
+ await writer.write("[![pypi]");
13740
+ await writer.write(`(https://img.shields.io/pypi/v/${pypi.packageName})]`);
13741
+ await writer.writeLine(
13742
+ `(https://pypi.python.org/pypi/${pypi.packageName})`
13743
+ );
13639
13744
  }
13640
- writeShieldForMaven({
13745
+ async writeShieldForMaven({
13641
13746
  writer,
13642
13747
  maven
13643
13748
  }) {
13644
- writer.write("[![Maven Central]");
13645
- writer.write(
13749
+ await writer.write("[![Maven Central]");
13750
+ await writer.write(
13646
13751
  `(https://img.shields.io/maven-central/v/${maven.group}/${maven.artifact})]`
13647
13752
  );
13648
- writer.writeLine(
13753
+ await writer.writeLine(
13649
13754
  `(https://central.sonatype.com/artifact/${maven.group}/${maven.artifact})`
13650
13755
  );
13651
13756
  }
13652
- writeShieldForGo({
13757
+ async writeShieldForGo({
13653
13758
  writer,
13654
13759
  go
13655
13760
  }) {
13656
- writer.write("[![go shield]");
13657
- writer.write("(https://img.shields.io/badge/go-docs-blue)]");
13658
- writer.writeLine(`(https://pkg.go.dev/github.com/${go.owner}/${go.repo})`);
13761
+ await writer.write("[![go shield]");
13762
+ await writer.write("(https://img.shields.io/badge/go-docs-blue)]");
13763
+ await writer.writeLine(
13764
+ `(https://pkg.go.dev/github.com/${go.owner}/${go.repo})`
13765
+ );
13659
13766
  }
13660
- writeShieldForRubyGems({
13767
+ async writeShieldForRubyGems({
13661
13768
  writer,
13662
13769
  rubyGems
13663
13770
  }) {
13664
- writer.write("[![gems shield]");
13665
- writer.write(`(https://img.shields.io/gem/v/${rubyGems.packageName})]`);
13666
- writer.writeLine(`(https://rubygems.org/gems/${rubyGems.packageName})`);
13771
+ await writer.write("[![gems shield]");
13772
+ await writer.write(
13773
+ `(https://img.shields.io/gem/v/${rubyGems.packageName})]`
13774
+ );
13775
+ await writer.writeLine(
13776
+ `(https://rubygems.org/gems/${rubyGems.packageName})`
13777
+ );
13667
13778
  }
13668
- writeShieldForNuget({
13779
+ async writeShieldForNuget({
13669
13780
  writer,
13670
13781
  nuget
13671
13782
  }) {
13672
- writer.write("[![nuget shield]");
13673
- writer.write(`(https://img.shields.io/nuget/v/${nuget.packageName})]`);
13674
- writer.writeLine(`(https://nuget.org/packages/${nuget.packageName})`);
13783
+ await writer.write("[![nuget shield]");
13784
+ await writer.write(
13785
+ `(https://img.shields.io/nuget/v/${nuget.packageName})]`
13786
+ );
13787
+ await writer.writeLine(`(https://nuget.org/packages/${nuget.packageName})`);
13675
13788
  }
13676
- writeShieldForComposer({
13789
+ async writeShieldForComposer({
13677
13790
  writer,
13678
13791
  composer
13679
13792
  }) {
13680
- writer.write("[![php shield]");
13681
- writer.write("(https://img.shields.io/badge/php-packagist-pink)]");
13682
- writer.writeLine(
13793
+ await writer.write("[![php shield]");
13794
+ await writer.write("(https://img.shields.io/badge/php-packagist-pink)]");
13795
+ await writer.writeLine(
13683
13796
  `(https://packagist.org/packages/${composer.packageName})`
13684
13797
  );
13685
13798
  }
@@ -13739,7 +13852,7 @@ function getMajorVersion(version) {
13739
13852
  return version.split(".")[0] ?? "0";
13740
13853
  }
13741
13854
  function assertNever(x) {
13742
- throw new Error("unexpected value: " + JSON.stringify(x));
13855
+ throw new Error(`unexpected value: ${JSON.stringify(x)}`);
13743
13856
  }
13744
13857
 
13745
13858
  // src/readme/ReadmeParser.ts
@@ -13765,7 +13878,8 @@ var ReadmeParser = class {
13765
13878
  header += line;
13766
13879
  continue;
13767
13880
  }
13768
- currentBlock.content += line + "\n";
13881
+ currentBlock.content += `${line}
13882
+ `;
13769
13883
  }
13770
13884
  if (currentBlock) {
13771
13885
  blocks.push(currentBlock);
@@ -13795,73 +13909,77 @@ var ReferenceGenerator = class {
13795
13909
  }) {
13796
13910
  this.referenceConfig = referenceConfig;
13797
13911
  }
13798
- async generate({ output }) {
13912
+ async generate({
13913
+ output
13914
+ }) {
13799
13915
  const writer = new StreamWriter(output);
13800
- writer.writeLine("# Reference");
13916
+ await writer.writeLine("# Reference");
13801
13917
  if (this.referenceConfig.rootSection != null) {
13802
- this.writeRootSection({
13918
+ await this.writeRootSection({
13803
13919
  section: this.referenceConfig.rootSection,
13804
13920
  writer
13805
13921
  });
13806
13922
  }
13807
13923
  for (const section of this.referenceConfig.sections) {
13808
- this.writeSection({ section, writer });
13924
+ await this.writeSection({ section, writer });
13809
13925
  }
13810
- writer.end();
13926
+ await writer.end();
13811
13927
  }
13812
- writeRootSection({
13928
+ async writeRootSection({
13813
13929
  section,
13814
13930
  writer
13815
13931
  }) {
13816
13932
  if (section.description != null) {
13817
- writer.writeLine(section.description);
13933
+ await writer.writeLine(section.description);
13818
13934
  }
13819
13935
  for (const endpoint of section.endpoints) {
13820
- this.writeEndpoint({ endpoint, writer });
13936
+ await this.writeEndpoint({ endpoint, writer });
13821
13937
  }
13822
13938
  }
13823
- writeSection({
13939
+ async writeSection({
13824
13940
  section,
13825
13941
  writer
13826
13942
  }) {
13827
- writer.writeLine(`## ${section.title}`);
13943
+ await writer.writeLine(`## ${section.title}`);
13828
13944
  if (section.description != null) {
13829
- writer.writeLine(section.description);
13945
+ await writer.writeLine(section.description);
13830
13946
  }
13831
13947
  for (const endpoint of section.endpoints) {
13832
- this.writeEndpoint({ endpoint, writer });
13948
+ await this.writeEndpoint({ endpoint, writer });
13833
13949
  }
13834
13950
  }
13835
- writeEndpoint({
13951
+ async writeEndpoint({
13836
13952
  endpoint,
13837
13953
  writer
13838
13954
  }) {
13839
13955
  const stringWriter = new StringWriter();
13840
13956
  if (endpoint.description != null) {
13841
- stringWriter.writeLine(
13957
+ await stringWriter.writeLine(
13842
13958
  `#### \u{1F4DD} Description
13843
13959
 
13844
- ${this.writeIndentedBlock(this.writeIndentedBlock(endpoint.description))}
13960
+ ${this.generateIndentedBlock(this.generateIndentedBlock(endpoint.description))}
13845
13961
  `
13846
13962
  );
13847
13963
  }
13848
- stringWriter.writeLine(
13964
+ await stringWriter.writeLine(
13849
13965
  `#### \u{1F50C} Usage
13850
13966
 
13851
- ${this.writeIndentedBlock(
13852
- this.writeIndentedBlock(
13853
- "```" + this.referenceConfig.language.toLowerCase() + "\n" + endpoint.snippet + "\n```"
13967
+ ${this.generateIndentedBlock(
13968
+ this.generateIndentedBlock(
13969
+ `\`\`\`${this.referenceConfig.language.toLowerCase()}
13970
+ ${endpoint.snippet}
13971
+ \`\`\``
13854
13972
  )
13855
13973
  )}
13856
13974
  `
13857
13975
  );
13858
13976
  if (endpoint.parameters.length > 0) {
13859
- stringWriter.writeLine(
13977
+ await stringWriter.writeLine(
13860
13978
  `#### \u2699\uFE0F Parameters
13861
13979
 
13862
- ${this.writeIndentedBlock(
13980
+ ${this.generateIndentedBlock(
13863
13981
  endpoint.parameters.map(
13864
- (parameter) => this.writeIndentedBlock(this.writeParameter(parameter))
13982
+ (parameter) => this.generateIndentedBlock(this.generateParameter(parameter))
13865
13983
  ).join("\n\n")
13866
13984
  )}
13867
13985
  `
@@ -13871,19 +13989,19 @@ ${this.writeIndentedBlock(
13871
13989
  if (endpoint.title.returnValue != null) {
13872
13990
  linkedSnippet += ` -> ${this.wrapInLink(endpoint.title.returnValue.text, endpoint.title.returnValue.location)}`;
13873
13991
  }
13874
- writer.writeLine(
13992
+ await writer.writeLine(
13875
13993
  `<details><summary><code>${linkedSnippet}</code></summary>`
13876
13994
  );
13877
- writer.writeLine(this.writeIndentedBlock(stringWriter.toString()));
13878
- writer.writeLine("</details>\n");
13995
+ await writer.writeLine(this.generateIndentedBlock(stringWriter.toString()));
13996
+ await writer.writeLine("</details>\n");
13879
13997
  }
13880
- writeParameter(parameter) {
13998
+ generateParameter(parameter) {
13881
13999
  const desc = parameter.description?.match(/[^\r\n]+/g)?.length;
13882
14000
  const containsLineBreak = desc != null && desc > 1;
13883
14001
  return `**${parameter.name}:** \`${this.wrapInLink(parameter.type, parameter.location)}\` ${parameter.description != null ? (containsLineBreak ? "\n\n" : "\u2014 ") + parameter.description : ""}
13884
14002
  `;
13885
14003
  }
13886
- writeIndentedBlock(content) {
14004
+ generateIndentedBlock(content) {
13887
14005
  return `<dl>
13888
14006
  <dd>
13889
14007
 
@@ -13905,13 +14023,13 @@ void yargs_default(hideBin(process.argv)).scriptName(process.env.CLI_NAME ?? "ge
13905
14023
  "Generate a README.md using the provided configuration file.",
13906
14024
  (argv) => argv.option("config", {
13907
14025
  string: true,
13908
- requred: true
14026
+ required: true
13909
14027
  }).option("original-readme", {
13910
14028
  string: true,
13911
- requred: false
14029
+ required: false
13912
14030
  }).option("output", {
13913
14031
  string: true,
13914
- requred: false
14032
+ required: false
13915
14033
  }),
13916
14034
  async (argv) => {
13917
14035
  if (argv.config == null) {
@@ -13939,10 +14057,10 @@ void yargs_default(hideBin(process.argv)).scriptName(process.env.CLI_NAME ?? "ge
13939
14057
  "Generate an SDK reference (`reference.md`) using the provided configuration file.",
13940
14058
  (argv) => argv.option("config", {
13941
14059
  string: true,
13942
- requred: true
14060
+ required: true
13943
14061
  }).option("output", {
13944
14062
  string: true,
13945
- requred: false
14063
+ required: false
13946
14064
  }),
13947
14065
  async (argv) => {
13948
14066
  if (argv.config == null) {
@@ -14063,7 +14181,7 @@ async function createWriteStreamFromFile(filepath) {
14063
14181
  if (!await doesPathExist(filepath)) {
14064
14182
  await (0, import_promises6.mkdir)(import_path7.default.dirname(filepath), { recursive: true });
14065
14183
  }
14066
- return import_fs5.default.createWriteStream(filepath);
14184
+ return import_fs6.default.createWriteStream(filepath);
14067
14185
  }
14068
14186
  /*! Bundled license information:
14069
14187
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fern-api/generator-cli",
3
- "version": "0.0.30",
3
+ "version": "0.0.32",
4
4
  "type": "module",
5
5
  "main": "dist/cli.cjs",
6
6
  "source": "src/index.ts",
@@ -24,6 +24,7 @@
24
24
  "test:update": "vitest -u --run --passWithNoTests --globals --disable-console-intercept"
25
25
  },
26
26
  "dependencies": {
27
+ "@octokit/rest": "^17.8.0",
27
28
  "es-toolkit": "^1.32.0"
28
29
  },
29
30
  "devDependencies": {