@fern-api/fern-api-dev 4.76.0 → 4.76.1

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 +114 -48
  2. package/package.json +1 -1
package/cli.cjs CHANGED
@@ -345167,6 +345167,7 @@ var require_GithubStep = __commonJS({
345167
345167
  exports2.GithubStep = void 0;
345168
345168
  exports2.enrichPrBodyForAutomation = enrichPrBodyForAutomation;
345169
345169
  exports2.shouldEnableAutomerge = shouldEnableAutomerge;
345170
+ exports2.shouldPushGenerationBaseTag = shouldPushGenerationBaseTag;
345170
345171
  exports2.resolveBranchAction = resolveBranchAction;
345171
345172
  var core_utils_1 = (init_lib4(), __toCommonJS(lib_exports));
345172
345173
  var github_1 = (init_lib7(), __toCommonJS(lib_exports3));
@@ -345246,7 +345247,11 @@ var require_GithubStep = __commonJS({
345246
345247
  });
345247
345248
  switch (branchAction) {
345248
345249
  case "replay-branch":
345249
- generationBaseSha = await (0, createReplayBranch_1.createReplayBranch)(repository, prBranch, this.config.commitMessage, replayConflictInfo, this.logger);
345250
+ if (shouldPushGenerationBaseTag(replayResult)) {
345251
+ generationBaseSha = await (0, createReplayBranch_1.createReplayBranch)(repository, prBranch, this.config.commitMessage, replayConflictInfo, this.logger);
345252
+ } else {
345253
+ await repository.createBranchFromHead(prBranch);
345254
+ }
345250
345255
  break;
345251
345256
  case "create-from-head":
345252
345257
  await repository.createBranchFromHead(prBranch);
@@ -345444,6 +345449,9 @@ _Fern Run ID: \`${config5.runId}\`_`;
345444
345449
  function shouldEnableAutomerge(config5) {
345445
345450
  return config5.automationMode === true && config5.autoMerge === true && config5.hasBreakingChanges !== true;
345446
345451
  }
345452
+ function shouldPushGenerationBaseTag(replayResult) {
345453
+ return (replayResult?.patchesWithConflicts ?? 0) > 0;
345454
+ }
345447
345455
  function resolveBranchAction({ automationMode, skipCommit, existingPR }) {
345448
345456
  if (skipCommit) {
345449
345457
  return "replay-branch";
@@ -354642,6 +354650,7 @@ var require_replay_run = __commonJS({
354642
354650
  "use strict";
354643
354651
  Object.defineProperty(exports2, "__esModule", { value: true });
354644
354652
  exports2.replayRun = replayRun;
354653
+ exports2.isTagMergedIntoHead = isTagMergedIntoHead;
354645
354654
  var replay_1 = require_dist14();
354646
354655
  var child_process_1 = require("child_process");
354647
354656
  var fs_1 = require("fs");
@@ -354686,18 +354695,22 @@ var require_replay_run = __commonJS({
354686
354695
  }
354687
354696
  }
354688
354697
  if (shouldSync && tagSha != null) {
354689
- const syncService = new replay_1.ReplayService(outputDir, { enabled: true });
354690
- await syncService.syncFromDivergentMerge(tagSha, {
354691
- cliVersion,
354692
- generatorVersions,
354693
- baseBranchHead: baseBranchHead ?? void 0
354694
- });
354695
- try {
354696
- const freshLockManager = new replay_1.LockfileManager(outputDir);
354697
- if (freshLockManager.exists()) {
354698
- previousGenerationSha = freshLockManager.read().current_generation;
354698
+ if (!isTagMergedIntoHead(outputDir, tagSha)) {
354699
+ logger4?.warn(`fern-generation-base tag ${tagSha} is not reachable from HEAD \u2014 skipping divergent-merge sync. The tag likely points at an unmerged generation (PR closed without merge).`);
354700
+ } else {
354701
+ const syncService = new replay_1.ReplayService(outputDir, { enabled: true });
354702
+ await syncService.syncFromDivergentMerge(tagSha, {
354703
+ cliVersion,
354704
+ generatorVersions,
354705
+ baseBranchHead: baseBranchHead ?? void 0
354706
+ });
354707
+ try {
354708
+ const freshLockManager = new replay_1.LockfileManager(outputDir);
354709
+ if (freshLockManager.exists()) {
354710
+ previousGenerationSha = freshLockManager.read().current_generation;
354711
+ }
354712
+ } catch {
354699
354713
  }
354700
- } catch {
354701
354714
  }
354702
354715
  }
354703
354716
  }
@@ -354747,6 +354760,30 @@ var require_replay_run = __commonJS({
354747
354760
  baseBranchHead: resolvedBaseBranchHead
354748
354761
  };
354749
354762
  }
354763
+ function isTagMergedIntoHead(cwd2, tagSha) {
354764
+ try {
354765
+ (0, child_process_1.execFileSync)("git", ["merge-base", "--is-ancestor", tagSha, "HEAD"], {
354766
+ cwd: cwd2,
354767
+ stdio: "pipe"
354768
+ });
354769
+ return true;
354770
+ } catch {
354771
+ }
354772
+ const tagTree = gitRevParse(cwd2, `${tagSha}^{tree}`);
354773
+ if (tagTree == null) {
354774
+ return false;
354775
+ }
354776
+ try {
354777
+ const trees = (0, child_process_1.execFileSync)("git", ["log", "HEAD", "--format=%T", "--max-count=500"], {
354778
+ cwd: cwd2,
354779
+ encoding: "utf-8",
354780
+ stdio: "pipe"
354781
+ });
354782
+ return trees.split("\n").some((t3) => t3.trim() === tagTree);
354783
+ } catch {
354784
+ return false;
354785
+ }
354786
+ }
354750
354787
  function gitRevParse(cwd2, rev) {
354751
354788
  try {
354752
354789
  return (0, child_process_1.execFileSync)("git", ["rev-parse", "--verify", rev], {
@@ -522266,9 +522303,7 @@ function convertQueryParameterExample2(namedFullExamples) {
522266
522303
  const result = {};
522267
522304
  namedFullExamples.forEach((namedFullExample) => {
522268
522305
  const convertedExample = convertFullExample2(namedFullExample.value);
522269
- if (Array.isArray(convertedExample)) {
522270
- result[namedFullExample.name] = convertedExample[0];
522271
- } else if (convertedExample != null) {
522306
+ if (convertedExample != null) {
522272
522307
  result[namedFullExample.name] = convertedExample;
522273
522308
  }
522274
522309
  });
@@ -533560,8 +533595,8 @@ var ExampleEndpointFactory = class {
533560
533595
  ignoreOptionals: true
533561
533596
  }
533562
533597
  });
533563
- if (example != null && !isExamplePrimitive(example)) {
533564
- this.logger.debug(`Expected a primitive example but got ${example.type} for query parameter ${queryParameter.name} for ${endpoint3.method.toUpperCase()} ${endpoint3.path}`);
533598
+ if (example != null && !isExamplePrimitive(example) && example.type !== "array") {
533599
+ this.logger.debug(`Expected a primitive or array example but got ${example.type} for query parameter ${queryParameter.name} for ${endpoint3.method.toUpperCase()} ${endpoint3.path}`);
533565
533600
  example = void 0;
533566
533601
  }
533567
533602
  if (required6 && example == null) {
@@ -540070,10 +540105,7 @@ function convertParameters({ path: path98, httpMethod, parameters: parameters2,
540070
540105
  const generatedName = getGeneratedTypeName(parameterBreadcrumbs, context3.options.preserveSchemaIds);
540071
540106
  const isHeader = resolvedParameter.in === "header";
540072
540107
  const [isOptional, isNullable] = context3.options.coerceOptionalSchemasToNullable && !isHeader ? [false, !isRequired2] : [!isRequired2, false];
540073
- let schema2 = resolvedParameter.schema != null ? convertSchema2(resolvedParameter.schema, isOptional, isNullable, context3, parameterBreadcrumbs, source2, context3.namespace, false, /* @__PURE__ */ new Set(), getExamplesString({
540074
- schema: resolvedParameter,
540075
- logger: context3.logger
540076
- })) : isRequired2 ? SchemaWithExample.primitive({
540108
+ let schema2 = resolvedParameter.schema != null ? convertSchema2(resolvedParameter.schema, isOptional, isNullable, context3, parameterBreadcrumbs, source2, context3.namespace, false, /* @__PURE__ */ new Set(), getParameterExample(resolvedParameter, context3)) : isRequired2 ? SchemaWithExample.primitive({
540077
540109
  nameOverride: void 0,
540078
540110
  generatedName,
540079
540111
  title: void 0,
@@ -540192,6 +540224,13 @@ function getExplodeForQueryParameter(parameter6) {
540192
540224
  }
540193
540225
  return explode === false ? void 0 : explode;
540194
540226
  }
540227
+ function getParameterExample(parameter6, context3) {
540228
+ const arrayExample = getExampleAsArray({ schema: parameter6, logger: context3.logger });
540229
+ if (arrayExample != null) {
540230
+ return arrayExample;
540231
+ }
540232
+ return getExamplesString({ schema: parameter6, logger: context3.logger });
540233
+ }
540195
540234
  function getExplodeForPathParameter(parameter6) {
540196
540235
  const explode = parameter6.explode;
540197
540236
  if (explode === void 0) {
@@ -562065,6 +562104,37 @@ function convertExampleEndpointCall2({ service, endpoint: endpoint3, example, ty
562065
562104
  if (queryParameterDeclaration == null) {
562066
562105
  throw new Error(`Query parameter ${wireKey} does not exist`);
562067
562106
  }
562107
+ const isAllowMultiple = typeof queryParameterDeclaration !== "string" && queryParameterDeclaration["allow-multiple"] === true;
562108
+ const rawType = typeof queryParameterDeclaration === "string" ? queryParameterDeclaration : queryParameterDeclaration.type;
562109
+ let convertedValue;
562110
+ if (isAllowMultiple && Array.isArray(value)) {
562111
+ const items = value.map((item) => convertTypeReferenceExample({
562112
+ example: item,
562113
+ rawTypeBeingExemplified: rawType,
562114
+ typeResolver,
562115
+ exampleResolver,
562116
+ fileContainingRawTypeReference: file4,
562117
+ fileContainingExample: file4,
562118
+ workspace
562119
+ }));
562120
+ convertedValue = {
562121
+ jsonExample: value,
562122
+ shape: ExampleTypeReferenceShape.container(ExampleContainer.list({
562123
+ list: items,
562124
+ itemType: file4.parseTypeReference(rawType)
562125
+ }))
562126
+ };
562127
+ } else {
562128
+ convertedValue = convertTypeReferenceExample({
562129
+ example: value,
562130
+ rawTypeBeingExemplified: rawType,
562131
+ typeResolver,
562132
+ exampleResolver,
562133
+ fileContainingRawTypeReference: file4,
562134
+ fileContainingExample: file4,
562135
+ workspace
562136
+ });
562137
+ }
562068
562138
  return {
562069
562139
  name: file4.casingsGenerator.generateNameAndWireValue({
562070
562140
  name: getQueryParameterName({
@@ -562073,15 +562143,7 @@ function convertExampleEndpointCall2({ service, endpoint: endpoint3, example, ty
562073
562143
  }).name,
562074
562144
  wireValue: wireKey
562075
562145
  }),
562076
- value: convertTypeReferenceExample({
562077
- example: value,
562078
- rawTypeBeingExemplified: typeof queryParameterDeclaration === "string" ? queryParameterDeclaration : queryParameterDeclaration.type,
562079
- typeResolver,
562080
- exampleResolver,
562081
- fileContainingRawTypeReference: file4,
562082
- fileContainingExample: file4,
562083
- workspace
562084
- }),
562146
+ value: convertedValue,
562085
562147
  shape: getQueryParamaterDeclationShape({ queryParameter: queryParameterDeclaration })
562086
562148
  };
562087
562149
  }) : [],
@@ -569530,7 +569592,7 @@ var ValidEndpointPathRule = {
569530
569592
  };
569531
569593
 
569532
569594
  // ../fern-definition/validator/lib/rules/valid-example-endpoint-call/validateExampleEndpointCallParameters.js
569533
- function validateExampleEndpointCallParameters({ allDeclarations = {}, examples, parameterDisplayName, typeResolver, exampleResolver, workspace, getRawType, breadcrumbs }) {
569595
+ function validateExampleEndpointCallParameters({ allDeclarations = {}, examples, parameterDisplayName, typeResolver, exampleResolver, workspace, getRawType, isAllowMultiple, breadcrumbs }) {
569534
569596
  const violations = [];
569535
569597
  const requiredParameters = Object.entries(allDeclarations).reduce((acc, [key2, parameter6]) => {
569536
569598
  const rawType = getRawType(parameter6);
@@ -569565,18 +569627,21 @@ function validateExampleEndpointCallParameters({ allDeclarations = {}, examples,
569565
569627
  } else {
569566
569628
  const rawType = getRawType(expectedType);
569567
569629
  if (rawType != null) {
569568
- violations.push(...examples_exports6.validateTypeReferenceExample({
569569
- rawTypeReference: rawType.rawType,
569570
- example: exampleParameter,
569571
- file: rawType.file,
569572
- workspace,
569573
- typeResolver,
569574
- exampleResolver,
569575
- breadcrumbs,
569576
- depth: 0
569577
- }).map((val) => {
569578
- return { severity: val.severity ?? "fatal", message: val.message };
569579
- }));
569630
+ const examplesToValidate = isAllowMultiple?.(expectedType) && Array.isArray(exampleParameter) ? exampleParameter : [exampleParameter];
569631
+ for (const singleExample of examplesToValidate) {
569632
+ violations.push(...examples_exports6.validateTypeReferenceExample({
569633
+ rawTypeReference: rawType.rawType,
569634
+ example: singleExample,
569635
+ file: rawType.file,
569636
+ workspace,
569637
+ typeResolver,
569638
+ exampleResolver,
569639
+ breadcrumbs,
569640
+ depth: 0
569641
+ }).map((val) => {
569642
+ return { severity: val.severity ?? "fatal", message: val.message };
569643
+ }));
569644
+ }
569580
569645
  }
569581
569646
  }
569582
569647
  }
@@ -569865,6 +569930,7 @@ var ValidExampleEndpointCallRule = {
569865
569930
  }),
569866
569931
  rawType: typeof queryParameter === "string" ? queryParameter : queryParameter.type
569867
569932
  }),
569933
+ isAllowMultiple: (queryParameter) => typeof queryParameter !== "string" && queryParameter["allow-multiple"] === true,
569868
569934
  breadcrumbs: ["query-parameters"]
569869
569935
  });
569870
569936
  },
@@ -621915,7 +621981,7 @@ var AccessTokenPosthogManager = class {
621915
621981
  properties: {
621916
621982
  ...event,
621917
621983
  ...event.properties,
621918
- version: "4.76.0",
621984
+ version: "4.76.1",
621919
621985
  usingAccessToken: true
621920
621986
  }
621921
621987
  });
@@ -621969,7 +622035,7 @@ var UserPosthogManager = class {
621969
622035
  distinctId: this.userId ?? await this.getPersistedDistinctId(),
621970
622036
  event: "CLI",
621971
622037
  properties: {
621972
- version: "4.76.0",
622038
+ version: "4.76.1",
621973
622039
  ...event,
621974
622040
  ...event.properties,
621975
622041
  usingAccessToken: false,
@@ -839179,7 +839245,7 @@ var LOCAL_STORAGE_FOLDER4 = ".fern-dev";
839179
839245
  var LOGS_FOLDER_NAME = "logs";
839180
839246
  var MAX_LOGS_DIR_SIZE_BYTES = 100 * 1024 * 1024;
839181
839247
  function getCliSource() {
839182
- const version7 = "4.76.0";
839248
+ const version7 = "4.76.1";
839183
839249
  return `cli@${version7}`;
839184
839250
  }
839185
839251
  var DebugLogger = class {
@@ -850494,7 +850560,7 @@ var LegacyDocsPublisher = class {
850494
850560
  previewId,
850495
850561
  disableTemplates: void 0,
850496
850562
  skipUpload,
850497
- cliVersion: "4.76.0"
850563
+ cliVersion: "4.76.1"
850498
850564
  });
850499
850565
  if (taskContext.getResult() === TaskResult.Failure) {
850500
850566
  return { success: false };
@@ -924952,7 +925018,7 @@ var CliContext = class _CliContext {
924952
925018
  if (false) {
924953
925019
  this.logger.error("CLI_VERSION is not defined");
924954
925020
  }
924955
- return "4.76.0";
925021
+ return "4.76.1";
924956
925022
  }
924957
925023
  getCliName() {
924958
925024
  if (false) {
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "4.76.0",
2
+ "version": "4.76.1",
3
3
  "repository": {
4
4
  "type": "git",
5
5
  "url": "git+https://github.com/fern-api/fern.git",