@fern-api/fern-api-dev 5.63.1 → 5.64.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 +132 -107
  2. package/package.json +1 -1
package/cli.cjs CHANGED
@@ -366386,39 +366386,6 @@ var init_GraphQLConverter = __esm({
366386
366386
  }
366387
366387
  return fields.every((f3) => f3.args.length > 0);
366388
366388
  }
366389
- // Returns the names of object types that will be consumed as namespace groupings by
366390
- // convertOperations — i.e. types that appear as the return type of a zero-arg root
366391
- // field whose own fields all accept arguments. These types must be excluded from the
366392
- // type registry in collectTypeDefinitions to prevent their fields from showing up
366393
- // both as object properties and as standalone operations.
366394
- collectNamespaceTypeNames() {
366395
- if (!this.schema) {
366396
- return /* @__PURE__ */ new Set();
366397
- }
366398
- const namespaceTypeNames = /* @__PURE__ */ new Set();
366399
- const rootTypes = [];
366400
- const queryType = this.schema.getQueryType();
366401
- if (queryType) {
366402
- rootTypes.push(queryType);
366403
- }
366404
- const mutationType = this.schema.getMutationType();
366405
- if (mutationType) {
366406
- rootTypes.push(mutationType);
366407
- }
366408
- const subscriptionType = this.schema.getSubscriptionType();
366409
- if (subscriptionType && this.isActualSubscriptionRootType(subscriptionType)) {
366410
- rootTypes.push(subscriptionType);
366411
- }
366412
- for (const rootType of rootTypes) {
366413
- for (const field5 of Object.values(rootType.getFields())) {
366414
- const returnRawType = this.unwrapNonNull(field5.type);
366415
- if (returnRawType instanceof GraphQLObjectType && field5.args.length === 0 && this.isNamespaceType(returnRawType)) {
366416
- namespaceTypeNames.add(returnRawType.name);
366417
- }
366418
- }
366419
- }
366420
- return namespaceTypeNames;
366421
- }
366422
366389
  async convert() {
366423
366390
  const sdlContent = await (0, import_promises38.readFile)(this.filePath, "utf-8");
366424
366391
  this.schema = buildSchema(sdlContent);
@@ -366460,7 +366427,6 @@ var init_GraphQLConverter = __esm({
366460
366427
  if (!this.schema) {
366461
366428
  return;
366462
366429
  }
366463
- const namespaceTypeNames = this.collectNamespaceTypeNames();
366464
366430
  const typeMap = this.schema.getTypeMap();
366465
366431
  for (const [typeName, type7] of Object.entries(typeMap)) {
366466
366432
  if (typeName.startsWith("__")) {
@@ -366472,9 +366438,6 @@ var init_GraphQLConverter = __esm({
366472
366438
  if (type7 === this.schema.getSubscriptionType() && type7 instanceof GraphQLObjectType && this.isActualSubscriptionRootType(type7)) {
366473
366439
  continue;
366474
366440
  }
366475
- if (type7 instanceof GraphQLObjectType && namespaceTypeNames.has(typeName)) {
366476
- continue;
366477
- }
366478
366441
  if (type7 instanceof GraphQLScalarType && this.isBuiltInScalar(typeName)) {
366479
366442
  continue;
366480
366443
  }
@@ -366560,14 +366523,30 @@ var init_GraphQLConverter = __esm({
366560
366523
  }
366561
366524
  }
366562
366525
  }
366526
+ // Builds an operation id of the form `<operationType>_<segments joined by ".">`.
366527
+ // Flat (top-level) ids use a single segment; namespaced ids include the full field
366528
+ // path so that fields sharing a leaf name across namespaces resolve to distinct ids.
366529
+ // resolveOperationIds falls back from the flat id to the namespaced id on collision,
366530
+ // so both must be produced with this same format for that fallback to line up.
366531
+ buildOperationId(operationType, segments) {
366532
+ return `${operationType.toLowerCase()}_${segments.join(".")}`;
366533
+ }
366563
366534
  convertOperations(type7, operationType, pending) {
366564
366535
  const fields = type7.getFields();
366565
366536
  for (const [fieldName, field5] of Object.entries(fields)) {
366566
366537
  const returnRawType = this.unwrapNonNull(field5.type);
366567
366538
  if (returnRawType instanceof GraphQLObjectType && field5.args.length === 0 && this.isNamespaceType(returnRawType)) {
366539
+ if (operationType === "QUERY") {
366540
+ const parentFlatId = this.buildOperationId(operationType, [fieldName]);
366541
+ pending.push({
366542
+ flatId: parentFlatId,
366543
+ namespacedId: parentFlatId,
366544
+ operation: this.convertField(field5, fieldName, operationType)
366545
+ });
366546
+ }
366568
366547
  this.convertNamespaceOperations(returnRawType, operationType, pending, [fieldName]);
366569
366548
  } else {
366570
- const flatId = `${operationType.toLowerCase()}_${fieldName}`;
366549
+ const flatId = this.buildOperationId(operationType, [fieldName]);
366571
366550
  pending.push({
366572
366551
  flatId,
366573
366552
  namespacedId: flatId,
@@ -366579,8 +366558,8 @@ var init_GraphQLConverter = __esm({
366579
366558
  convertNamespaceOperations(namespaceType, operationType, pending, fieldPath) {
366580
366559
  const fields = namespaceType.getFields();
366581
366560
  for (const [fieldName, field5] of Object.entries(fields)) {
366582
- const flatId = `${operationType.toLowerCase()}_${fieldName}`;
366583
- const namespacedId = `${operationType.toLowerCase()}_${[...fieldPath, fieldName].join(".")}`;
366561
+ const flatId = this.buildOperationId(operationType, [fieldName]);
366562
+ const namespacedId = this.buildOperationId(operationType, [...fieldPath, fieldName]);
366584
366563
  pending.push({
366585
366564
  flatId,
366586
366565
  namespacedId,
@@ -453327,6 +453306,9 @@ var init_toPageNode = __esm({
453327
453306
  function getFieldPath(operation) {
453328
453307
  return operation.fieldPath;
453329
453308
  }
453309
+ function getOperationName(operation) {
453310
+ return operation.name ?? operation.id;
453311
+ }
453330
453312
  var import_url_join21, ApiReferenceNodeConverter;
453331
453313
  var init_ApiReferenceNodeConverter = __esm({
453332
453314
  "../docs-resolver/lib/ApiReferenceNodeConverter.js"() {
@@ -453792,25 +453774,20 @@ ${tagInfo.description}`;
453792
453774
  }
453793
453775
  this.#visitedGraphqlOperations.add(operationId);
453794
453776
  const operationSlug = endpointItem.slug != null ? parentSlug.append(endpointItem.slug) : parentSlug.append(graphqlOperation.name ?? graphqlOperation.id);
453795
- return {
453777
+ return this.#buildGraphqlChildNode({
453796
453778
  id: this.#idgen.get(`${this.apiDefinitionId}:${operationId}`),
453797
- type: "graphql",
453798
- collapsed: void 0,
453799
453779
  operationType: graphqlOperation.operationType,
453800
453780
  graphqlOperationId: APIV1Read_exports.GraphQlOperationId(graphqlOperation.id),
453801
- graphqlOperationIds: void 0,
453802
- apiDefinitionId: this.apiDefinitionId,
453803
- availability: convertDocsAvailability(endpointItem.availability ?? parentAvailability),
453804
453781
  title: endpointItem.title ?? graphqlOperation.displayName ?? graphqlOperation.name ?? graphqlOperation.id,
453805
453782
  slug: operationSlug.get(),
453783
+ availability: endpointItem.availability ?? parentAvailability,
453806
453784
  icon: this.resolveIconFileId(endpointItem.icon),
453807
453785
  hidden: this.hideChildren || endpointItem.hidden,
453808
453786
  playground: this.#convertPlaygroundSettings(endpointItem.playground),
453809
- authed: void 0,
453810
453787
  viewers: endpointItem.viewers,
453811
453788
  orphaned: endpointItem.orphaned,
453812
453789
  featureFlags: endpointItem.featureFlags
453813
- };
453790
+ });
453814
453791
  }
453815
453792
  this.taskContext.logger.error("Unknown identifier in the API Reference layout: ", endpointItem.endpoint);
453816
453793
  return;
@@ -453879,25 +453856,18 @@ ${tagInfo.description}`;
453879
453856
  }
453880
453857
  this.#visitedGraphqlOperations.add(operationId);
453881
453858
  const operationSlug = operationItem.slug != null ? parentSlug.append(operationItem.slug) : parentSlug.append(graphqlOperation.name ?? graphqlOperation.id);
453882
- return {
453859
+ return this.#buildGraphqlChildNode({
453883
453860
  id: this.#idgen.get(`${this.apiDefinitionId}:${operationId}`),
453884
- type: "graphql",
453885
- collapsed: void 0,
453886
453861
  operationType: graphqlOperation.operationType,
453887
453862
  graphqlOperationId: APIV1Read_exports.GraphQlOperationId(graphqlOperation.id),
453888
- graphqlOperationIds: void 0,
453889
- apiDefinitionId: this.apiDefinitionId,
453890
- availability: convertDocsAvailability(operationItem.availability ?? parentAvailability),
453891
453863
  title: operationItem.title ?? graphqlOperation.displayName ?? graphqlOperation.name ?? graphqlOperation.id,
453892
453864
  slug: operationSlug.get(),
453893
- icon: void 0,
453865
+ availability: operationItem.availability ?? parentAvailability,
453894
453866
  hidden: this.hideChildren || operationItem.hidden,
453895
- playground: void 0,
453896
- authed: void 0,
453897
453867
  viewers: operationItem.viewers,
453898
453868
  orphaned: operationItem.orphaned,
453899
453869
  featureFlags: operationItem.featureFlags
453900
- };
453870
+ });
453901
453871
  }
453902
453872
  // Step 2
453903
453873
  #mergeAndFilterChildren(left3, right3) {
@@ -454215,6 +454185,32 @@ ${tagInfo.description}`;
454215
454185
  }
454216
454186
  return sections;
454217
454187
  }
454188
+ // Single source of truth for constructing a GraphQL navigation child node. Callers pass
454189
+ // the fields that vary; the fixed shape (type, apiDefinitionId, authed, ...) and the
454190
+ // availability conversion live here. Optional fields left unset serialize as `undefined`,
454191
+ // matching the previous inline literals exactly — `hidden` is passed explicitly by every
454192
+ // caller so its original value (which may be `undefined`) is preserved verbatim.
454193
+ #buildGraphqlChildNode({ id, operationType, graphqlOperationId, graphqlOperationIds, title: title2, slug, availability, hidden: hidden2, icon, playground, viewers, orphaned, featureFlags }) {
454194
+ return {
454195
+ id,
454196
+ type: "graphql",
454197
+ collapsed: void 0,
454198
+ operationType,
454199
+ graphqlOperationId,
454200
+ graphqlOperationIds,
454201
+ apiDefinitionId: this.apiDefinitionId,
454202
+ availability: convertDocsAvailability(availability),
454203
+ title: title2,
454204
+ slug,
454205
+ icon,
454206
+ hidden: hidden2,
454207
+ playground,
454208
+ authed: void 0,
454209
+ viewers,
454210
+ orphaned,
454211
+ featureFlags
454212
+ };
454213
+ }
454218
454214
  #buildFieldPathGroupedChildren(operations, parentSlug, parentAvailability, operationType) {
454219
454215
  const shouldGroup = operationType === "QUERY";
454220
454216
  const groupedByParent = /* @__PURE__ */ new Map();
@@ -454233,11 +454229,23 @@ ${tagInfo.description}`;
454233
454229
  insertionOrder.push({ type: "flat", operation });
454234
454230
  }
454235
454231
  }
454232
+ const parentOpsByGroup = /* @__PURE__ */ new Map();
454233
+ for (const entry of insertionOrder) {
454234
+ if (entry.type === "flat") {
454235
+ const name2 = getOperationName(entry.operation);
454236
+ if (groupedByParent.has(name2) && getFieldPath(entry.operation) == null) {
454237
+ parentOpsByGroup.set(name2, entry.operation);
454238
+ }
454239
+ }
454240
+ }
454236
454241
  const children2 = [];
454237
454242
  for (const entry of insertionOrder) {
454238
454243
  if (entry.type === "flat") {
454244
+ const leafName = getOperationName(entry.operation);
454245
+ if (parentOpsByGroup.has(leafName)) {
454246
+ continue;
454247
+ }
454239
454248
  const fieldPath = getFieldPath(entry.operation);
454240
- const leafName = entry.operation.name ?? entry.operation.id;
454241
454249
  let operationSlug = parentSlug;
454242
454250
  if (fieldPath != null && fieldPath.length > 0) {
454243
454251
  for (const segment of fieldPath) {
@@ -454245,51 +454253,33 @@ ${tagInfo.description}`;
454245
454253
  }
454246
454254
  }
454247
454255
  operationSlug = operationSlug.append(kebabCase_default(leafName));
454248
- children2.push({
454256
+ children2.push(this.#buildGraphqlChildNode({
454249
454257
  id: navigation_exports.V1.NodeId(`${this.apiDefinitionId}:${entry.operation.id}`),
454250
- type: "graphql",
454251
- collapsed: void 0,
454252
454258
  operationType: entry.operation.operationType,
454253
454259
  graphqlOperationId: APIV1Read_exports.GraphQlOperationId(entry.operation.id),
454254
- graphqlOperationIds: void 0,
454255
- apiDefinitionId: this.apiDefinitionId,
454256
- availability: convertDocsAvailability(parentAvailability),
454257
454260
  title: entry.operation.displayName ?? entry.operation.name ?? entry.operation.id,
454258
454261
  slug: operationSlug.get(),
454259
- icon: void 0,
454260
- hidden: this.hideChildren,
454261
- playground: void 0,
454262
- authed: void 0,
454263
- viewers: void 0,
454264
- orphaned: void 0,
454265
- featureFlags: void 0
454266
- });
454262
+ availability: parentAvailability,
454263
+ hidden: this.hideChildren
454264
+ }));
454267
454265
  } else {
454268
454266
  const groupOps = groupedByParent.get(entry.parentField) ?? [];
454269
- const firstOp = groupOps[0];
454270
- if (firstOp == null) {
454267
+ const parentOp = parentOpsByGroup.get(entry.parentField);
454268
+ const representativeOp = parentOp ?? groupOps[0];
454269
+ if (representativeOp == null) {
454271
454270
  continue;
454272
454271
  }
454273
454272
  const fieldSlug = parentSlug.append(kebabCase_default(entry.parentField));
454274
- children2.push({
454275
- id: navigation_exports.V1.NodeId(`${this.apiDefinitionId}:${firstOp.id}`),
454276
- type: "graphql",
454277
- collapsed: void 0,
454278
- operationType: firstOp.operationType,
454279
- graphqlOperationId: APIV1Read_exports.GraphQlOperationId(firstOp.id),
454273
+ children2.push(this.#buildGraphqlChildNode({
454274
+ id: navigation_exports.V1.NodeId(`${this.apiDefinitionId}:${representativeOp.id}`),
454275
+ operationType: representativeOp.operationType,
454276
+ graphqlOperationId: APIV1Read_exports.GraphQlOperationId(representativeOp.id),
454280
454277
  graphqlOperationIds: groupOps.map((op2) => APIV1Read_exports.GraphQlOperationId(op2.id)),
454281
- apiDefinitionId: this.apiDefinitionId,
454282
- availability: convertDocsAvailability(parentAvailability),
454283
454278
  title: entry.parentField,
454284
454279
  slug: fieldSlug.get(),
454285
- icon: void 0,
454286
- hidden: this.hideChildren,
454287
- playground: void 0,
454288
- authed: void 0,
454289
- viewers: void 0,
454290
- orphaned: void 0,
454291
- featureFlags: void 0
454292
- });
454280
+ availability: parentAvailability,
454281
+ hidden: this.hideChildren
454282
+ }));
454293
454283
  }
454294
454284
  }
454295
454285
  return children2;
@@ -687227,7 +687217,7 @@ var AccessTokenPosthogManager = class {
687227
687217
  properties: {
687228
687218
  ...event,
687229
687219
  ...event.properties,
687230
- version: "5.63.1",
687220
+ version: "5.64.1",
687231
687221
  usingAccessToken: true,
687232
687222
  ...getRunIdProperties()
687233
687223
  }
@@ -687293,7 +687283,7 @@ var UserPosthogManager = class {
687293
687283
  distinctId: this.userId ?? await this.getPersistedDistinctId(),
687294
687284
  event: "CLI",
687295
687285
  properties: {
687296
- version: "5.63.1",
687286
+ version: "5.64.1",
687297
687287
  ...event,
687298
687288
  ...event.properties,
687299
687289
  usingAccessToken: false,
@@ -868388,7 +868378,7 @@ var LOCAL_STORAGE_FOLDER4 = ".fern-dev";
868388
868378
  var LOGS_FOLDER_NAME = "logs";
868389
868379
  var MAX_LOGS_DIR_SIZE_BYTES = 100 * 1024 * 1024;
868390
868380
  function getCliSource() {
868391
- const version7 = "5.63.1";
868381
+ const version7 = "5.64.1";
868392
868382
  return `cli@${version7}`;
868393
868383
  }
868394
868384
  var DebugLogger = class {
@@ -889949,6 +889939,9 @@ var import_child_process8 = require("child_process");
889949
889939
  var import_path77 = __toESM(require("path"), 1);
889950
889940
  init_esm16();
889951
889941
  var import_tmp_promise12 = __toESM(require_tmp_promise(), 1);
889942
+ function isCommitSha(ref2) {
889943
+ return /^[0-9a-f]{7,40}$/i.test(ref2);
889944
+ }
889952
889945
  function cloneTargetKey(target) {
889953
889946
  return `${target.repo}#${target.ref ?? "HEAD"}`;
889954
889947
  }
@@ -889986,12 +889979,22 @@ async function resolveRemoteSpecs({ definitions: definitions7, context: context3
889986
889979
  const tmpDir = await import_tmp_promise12.default.dir({ unsafeCleanup: true });
889987
889980
  const clonePath = AbsoluteFilePath2.of(tmpDir.path);
889988
889981
  const git = simpleGit();
889989
- const cloneArgs = ["--depth", "1", "--config", "core.symlinks=false"];
889990
- if (target.ref != null) {
889991
- cloneArgs.push("--branch", target.ref);
889992
- }
889982
+ const useCommitShaFlow = target.ref != null && isCommitSha(target.ref);
889993
889983
  try {
889994
- await git.clone(target.repo, tmpDir.path, cloneArgs);
889984
+ if (useCommitShaFlow) {
889985
+ const ref2 = target.ref;
889986
+ const cloneArgs = ["--depth", "1", "--config", "core.symlinks=false", "--no-checkout"];
889987
+ await git.clone(target.repo, tmpDir.path, cloneArgs);
889988
+ const repoGit = simpleGit(tmpDir.path);
889989
+ await repoGit.fetch("origin", ref2, { "--depth": "1" });
889990
+ await repoGit.checkout(ref2);
889991
+ } else {
889992
+ const cloneArgs = ["--depth", "1", "--config", "core.symlinks=false"];
889993
+ if (target.ref != null) {
889994
+ cloneArgs.push("--branch", target.ref);
889995
+ }
889996
+ await git.clone(target.repo, tmpDir.path, cloneArgs);
889997
+ }
889995
889998
  } catch (error50) {
889996
889999
  const errorMessage = extractErrorMessage(error50);
889997
890000
  if (errorMessage.includes("Authentication failed") || errorMessage.includes("could not read Username") || errorMessage.includes("401") || errorMessage.includes("403")) {
@@ -890019,11 +890022,16 @@ async function resolveRemoteSpecs({ definitions: definitions7, context: context3
890019
890022
  throw new Error(`Invalid git source path '${def.gitSource.path}': path must be relative to the repository root and cannot traverse outside it.`);
890020
890023
  }
890021
890024
  if (def.schema.type === "protobuf") {
890025
+ const resolvedTarget = def.schema.target.length > 0 ? import_path77.default.resolve(clonedPath, def.schema.target) : def.schema.target;
890026
+ if (resolvedTarget.length > 0 && !resolvedTarget.startsWith(clonedPath + import_path77.default.sep) && resolvedTarget !== clonedPath) {
890027
+ throw new Error(`Invalid proto target path '${def.schema.target}': path must be relative to the repository root and cannot traverse outside it.`);
890028
+ }
890022
890029
  return {
890023
890030
  ...def,
890024
890031
  schema: {
890025
890032
  ...def.schema,
890026
- root: resolvedPath
890033
+ root: resolvedPath,
890034
+ target: resolvedTarget
890027
890035
  },
890028
890036
  gitSource: void 0,
890029
890037
  resolvedAbsolutePath: true
@@ -890067,13 +890075,14 @@ async function loadSingleNamespaceAPIWorkspace({ absolutePathToWorkspace, namesp
890067
890075
  }
890068
890076
  };
890069
890077
  }
890070
- const absoluteFilepathToTarget = definition3.schema.target.length === 0 ? void 0 : join8(absolutePathToWorkspace, RelativeFilePath2.of(definition3.schema.target));
890078
+ const absoluteFilepathToTarget = definition3.schema.target.length === 0 ? void 0 : import_path78.default.isAbsolute(definition3.schema.target) && definition3.resolvedAbsolutePath ? AbsoluteFilePath2.of(definition3.schema.target) : join8(absolutePathToWorkspace, RelativeFilePath2.of(definition3.schema.target));
890071
890079
  if (absoluteFilepathToTarget != null) {
890072
890080
  if (!await doesPathExist(absoluteFilepathToTarget)) {
890081
+ const displayTarget = import_path78.default.isAbsolute(definition3.schema.target) && definition3.resolvedAbsolutePath ? RelativeFilePath2.of(import_path78.default.basename(definition3.schema.target)) : RelativeFilePath2.of(definition3.schema.target);
890073
890082
  return {
890074
890083
  didSucceed: false,
890075
890084
  failures: {
890076
- [RelativeFilePath2.of(definition3.schema.target)]: {
890085
+ [displayTarget]: {
890077
890086
  type: WorkspaceLoaderFailureType.FILE_MISSING
890078
890087
  }
890079
890088
  }
@@ -900886,7 +900895,7 @@ var LegacyDocsPublisher = class {
900886
900895
  previewId,
900887
900896
  disableTemplates: void 0,
900888
900897
  skipUpload,
900889
- cliVersion: "5.63.1",
900898
+ cliVersion: "5.64.1",
900890
900899
  loginCommand: "fern auth login"
900891
900900
  });
900892
900901
  if (taskContext.getResult() === TaskResult.Failure) {
@@ -951447,7 +951456,7 @@ var TypeLiteral4 = class _TypeLiteral extends AstNode9 {
951447
951456
  writer2.writeLine("{");
951448
951457
  writer2.indent();
951449
951458
  for (const entry of entries24) {
951450
- entry.key.write(writer2);
951459
+ this.writeObjectKey({ writer: writer2, key: entry.key });
951451
951460
  writer2.write(": ");
951452
951461
  entry.value.write(writer2);
951453
951462
  writer2.writeLine(",");
@@ -951455,6 +951464,14 @@ var TypeLiteral4 = class _TypeLiteral extends AstNode9 {
951455
951464
  writer2.dedent();
951456
951465
  writer2.write("}");
951457
951466
  }
951467
+ writeObjectKey({ writer: writer2, key: key2 }) {
951468
+ const internal2 = key2.internalType;
951469
+ if (internal2.type === "string" && isValidIdentifier(internal2.value)) {
951470
+ writer2.write(internal2.value);
951471
+ return;
951472
+ }
951473
+ key2.write(writer2);
951474
+ }
951458
951475
  writeObject({ writer: writer2, object: object23 }) {
951459
951476
  const fields = filterNopObjectFields({ fields: object23.fields });
951460
951477
  if (fields.length === 0) {
@@ -951590,7 +951607,12 @@ var TypeLiteral4 = class _TypeLiteral extends AstNode9 {
951590
951607
  writer2.writeLine("{");
951591
951608
  writer2.indent();
951592
951609
  for (const [key2, val] of entries24) {
951593
- writer2.write(`${key2}: `);
951610
+ if (isValidIdentifier(key2)) {
951611
+ writer2.write(`${key2}: `);
951612
+ } else {
951613
+ writer2.writeNode(_TypeLiteral.string(key2));
951614
+ writer2.write(": ");
951615
+ }
951594
951616
  writer2.writeNode(_TypeLiteral.unknown(val));
951595
951617
  writer2.writeLine(",");
951596
951618
  }
@@ -951598,6 +951620,9 @@ var TypeLiteral4 = class _TypeLiteral extends AstNode9 {
951598
951620
  writer2.write("}");
951599
951621
  }
951600
951622
  };
951623
+ function isValidIdentifier(value2) {
951624
+ return /^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(value2);
951625
+ }
951601
951626
  function filterNopObjectFields({ fields }) {
951602
951627
  return fields.filter((field5) => !TypeLiteral4.isNop(field5.value));
951603
951628
  }
@@ -967178,7 +967203,7 @@ function getAutomationContextFromEnv() {
967178
967203
  config_branch: process.env.FERN_CONFIG_BRANCH,
967179
967204
  config_pr_number: process.env.FERN_CONFIG_PR_NUMBER,
967180
967205
  trigger: process.env.GITHUB_EVENT_NAME,
967181
- cli_version: "5.63.1"
967206
+ cli_version: "5.64.1"
967182
967207
  };
967183
967208
  }
967184
967209
  function isAutomationMode() {
@@ -968010,7 +968035,7 @@ var CliContext = class _CliContext {
968010
968035
  if (false) {
968011
968036
  this.logger.error("CLI_VERSION is not defined");
968012
968037
  }
968013
- return "5.63.1";
968038
+ return "5.64.1";
968014
968039
  }
968015
968040
  getCliName() {
968016
968041
  if (false) {
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "5.63.1",
2
+ "version": "5.64.1",
3
3
  "repository": {
4
4
  "type": "git",
5
5
  "url": "git+https://github.com/fern-api/fern.git",