@supernova-studio/client 1.69.6 → 1.69.7

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.
package/dist/index.d.mts CHANGED
@@ -352970,10 +352970,10 @@ declare class RequestExecutorError extends Error {
352970
352970
  readonly type: RequestExecutorErrorType;
352971
352971
  readonly errorCode: RequestEexecutorServerErrorCode | undefined;
352972
352972
  readonly serverErrorType: SupernovaExceptionType | undefined;
352973
- static tryParseErrorCode(body: string): any;
352974
- static tryParseServerErrorType(body: string): any;
352973
+ static tryParseJSON(body: string): any;
352975
352974
  static serverError(endpoint: string, status: number, bodyText: string): RequestExecutorError;
352976
352975
  static responseParsingError(endpoint: string, cause: Error): RequestExecutorError;
352976
+ getDisplayMessage(): string;
352977
352977
  private constructor();
352978
352978
  }
352979
352979
 
package/dist/index.d.ts CHANGED
@@ -352970,10 +352970,10 @@ declare class RequestExecutorError extends Error {
352970
352970
  readonly type: RequestExecutorErrorType;
352971
352971
  readonly errorCode: RequestEexecutorServerErrorCode | undefined;
352972
352972
  readonly serverErrorType: SupernovaExceptionType | undefined;
352973
- static tryParseErrorCode(body: string): any;
352974
- static tryParseServerErrorType(body: string): any;
352973
+ static tryParseJSON(body: string): any;
352975
352974
  static serverError(endpoint: string, status: number, bodyText: string): RequestExecutorError;
352976
352975
  static responseParsingError(endpoint: string, cause: Error): RequestExecutorError;
352976
+ getDisplayMessage(): string;
352977
352977
  private constructor();
352978
352978
  }
352979
352979
 
package/dist/index.js CHANGED
@@ -5823,7 +5823,8 @@ var FlaggedFeature = _zod.z.enum([
5823
5823
  "ForgeOnDemandIterations",
5824
5824
  "ForgeAutoRetryOnErrors",
5825
5825
  "ForgeAiBackendMigrated",
5826
- "CustomForgeTemplate"
5826
+ "CustomForgeTemplate",
5827
+ "ForgeRestartPlaywright"
5827
5828
  ]);
5828
5829
  var FeatureFlagMap = _zod.z.record(FlaggedFeature, _zod.z.boolean());
5829
5830
  var FeatureFlag = _zod.z.object({
@@ -13519,35 +13520,22 @@ var RequestExecutorError = class _RequestExecutorError extends Error {
13519
13520
  this.errorCode = errorCode;
13520
13521
  this.serverErrorType = serverErrorType;
13521
13522
  }
13522
- static tryParseErrorCode(body) {
13523
+ static tryParseJSON(body) {
13523
13524
  try {
13524
- const errorObj = JSON.parse(body);
13525
- if (errorObj && typeof errorObj.errorCode === "string") {
13526
- return errorObj.errorCode;
13527
- }
13528
- return null;
13529
- } catch (e) {
13530
- return null;
13531
- }
13532
- }
13533
- static tryParseServerErrorType(body) {
13534
- try {
13535
- const errorObj = JSON.parse(body);
13536
- if (errorObj && typeof errorObj.errorCode === "string") {
13537
- return errorObj.type;
13538
- }
13539
- return null;
13525
+ return JSON.parse(body);
13540
13526
  } catch (e) {
13541
13527
  return null;
13542
13528
  }
13543
13529
  }
13544
13530
  static serverError(endpoint, status, bodyText) {
13531
+ const parsedBody = this.tryParseJSON(bodyText);
13545
13532
  return new _RequestExecutorError(
13546
13533
  "ServerError",
13547
13534
  `Endpoint ${endpoint} returned ${status}
13548
13535
  ${bodyText}`,
13549
- this.tryParseErrorCode(bodyText),
13550
- this.tryParseServerErrorType(bodyText)
13536
+ _nullishCoalesce(_optionalChain([parsedBody, 'optionalAccess', _38 => _38.errorCode]), () => ( null)),
13537
+ _nullishCoalesce(_optionalChain([parsedBody, 'optionalAccess', _39 => _39.type]), () => ( null)),
13538
+ _nullishCoalesce(parsedBody, () => ( null))
13551
13539
  );
13552
13540
  }
13553
13541
  static responseParsingError(endpoint, cause) {
@@ -13559,6 +13547,12 @@ ${bodyText}`,
13559
13547
  cause
13560
13548
  );
13561
13549
  }
13550
+ getDisplayMessage() {
13551
+ if (this.type === "ServerError" && this.cause && typeof this.cause === "object" && "message" in this.cause) {
13552
+ return this.cause.message || this.message;
13553
+ }
13554
+ return this.message;
13555
+ }
13562
13556
  };
13563
13557
 
13564
13558
  // src/api/transport/request-executor.ts
@@ -13615,7 +13609,7 @@ var RequestExecutor = class {
13615
13609
  }
13616
13610
  fullUrl(path, query) {
13617
13611
  let url = `https://${this.testServerConfig.host}/api/v2${path}`;
13618
- const queryString = _optionalChain([query, 'optionalAccess', _38 => _38.toString, 'call', _39 => _39()]);
13612
+ const queryString = _optionalChain([query, 'optionalAccess', _40 => _40.toString, 'call', _41 => _41()]);
13619
13613
  if (queryString) url += `?${queryString}`;
13620
13614
  return url;
13621
13615
  }
@@ -13635,7 +13629,7 @@ var SupernovaApiClient = class {
13635
13629
  __publicField(this, "threads");
13636
13630
  __publicField(this, "mcpStreams");
13637
13631
  __publicField(this, "sandboxes");
13638
- const apiSecret = _nullishCoalesce(config.apiSecret, () => ( _optionalChain([process, 'optionalAccess', _40 => _40.env, 'optionalAccess', _41 => _41.SUPERNOVA_API_SECRET])));
13632
+ const apiSecret = _nullishCoalesce(config.apiSecret, () => ( _optionalChain([process, 'optionalAccess', _42 => _42.env, 'optionalAccess', _43 => _43.SUPERNOVA_API_SECRET])));
13639
13633
  const requestExecutor = new RequestExecutor({
13640
13634
  apiSecret,
13641
13635
  host: config.host,
@@ -13865,9 +13859,9 @@ var LocalDocsElementActionExecutor = class {
13865
13859
  ...existingGroup.data,
13866
13860
  // TODO Artem: move somewhere reusable
13867
13861
  configuration: input.configuration ? {
13868
- ..._nullishCoalesce(_optionalChain([existingGroup, 'access', _42 => _42.data, 'optionalAccess', _43 => _43.configuration]), () => ( defaultDocumentationItemConfigurationV2)),
13862
+ ..._nullishCoalesce(_optionalChain([existingGroup, 'access', _44 => _44.data, 'optionalAccess', _45 => _45.configuration]), () => ( defaultDocumentationItemConfigurationV2)),
13869
13863
  ...input.configuration
13870
- } : _optionalChain([existingGroup, 'access', _44 => _44.data, 'optionalAccess', _45 => _45.configuration])
13864
+ } : _optionalChain([existingGroup, 'access', _46 => _46.data, 'optionalAccess', _47 => _47.configuration])
13871
13865
  }
13872
13866
  };
13873
13867
  this.groups.set(localGroup.persistentId, localGroup);
@@ -13908,7 +13902,7 @@ var LocalDocsElementActionExecutor = class {
13908
13902
  updatedAt: /* @__PURE__ */ new Date(),
13909
13903
  data: {
13910
13904
  behavior: "Tabs",
13911
- configuration: _optionalChain([page, 'optionalAccess', _46 => _46.data, 'access', _47 => _47.configuration])
13905
+ configuration: _optionalChain([page, 'optionalAccess', _48 => _48.data, 'access', _49 => _49.configuration])
13912
13906
  },
13913
13907
  sortOrder: page.sortOrder,
13914
13908
  designSystemVersionId: this.designSystemVersionId
@@ -13932,7 +13926,7 @@ var LocalDocsElementActionExecutor = class {
13932
13926
  if (input.approvalState) {
13933
13927
  this.approvalStates.set(input.persistentId, {
13934
13928
  approvalState: input.approvalState,
13935
- createdAt: _nullishCoalesce(_optionalChain([existingApproval, 'optionalAccess', _48 => _48.createdAt]), () => ( /* @__PURE__ */ new Date())),
13929
+ createdAt: _nullishCoalesce(_optionalChain([existingApproval, 'optionalAccess', _50 => _50.createdAt]), () => ( /* @__PURE__ */ new Date())),
13936
13930
  designSystemVersionId: this.designSystemVersionId,
13937
13931
  pagePersistentId: input.persistentId,
13938
13932
  updatedAt: /* @__PURE__ */ new Date(),
@@ -13960,7 +13954,7 @@ var LocalDocsElementActionExecutor = class {
13960
13954
  return neighbours[neighbours.length - 1].sortOrder + sortOrderStep;
13961
13955
  }
13962
13956
  const left = neighbours[index].sortOrder;
13963
- const right = _nullishCoalesce(_optionalChain([neighbours, 'access', _49 => _49[index + 1], 'optionalAccess', _50 => _50.sortOrder]), () => ( left + sortOrderStep * 2));
13957
+ const right = _nullishCoalesce(_optionalChain([neighbours, 'access', _51 => _51[index + 1], 'optionalAccess', _52 => _52.sortOrder]), () => ( left + sortOrderStep * 2));
13964
13958
  return (right + left) / 2;
13965
13959
  }
13966
13960
  };
@@ -14248,7 +14242,7 @@ function buildPageDraftCreatedAndUpdatedStates(pages, pageSnapshots, pageHashes,
14248
14242
  if (snapshot) {
14249
14243
  publishedState = itemStateFromPage(snapshot.page, snapshot.pageContentHash);
14250
14244
  }
14251
- const currentPageContentHash = _nullishCoalesce(_nullishCoalesce(pageHashes[page.persistentId], () => ( _optionalChain([snapshot, 'optionalAccess', _51 => _51.pageContentHash]))), () => ( ""));
14245
+ const currentPageContentHash = _nullishCoalesce(_nullishCoalesce(pageHashes[page.persistentId], () => ( _optionalChain([snapshot, 'optionalAccess', _53 => _53.pageContentHash]))), () => ( ""));
14252
14246
  const currentState = itemStateFromPage(page, currentPageContentHash);
14253
14247
  const draftState = createDraftState(page.persistentId, currentState, publishedState, debug);
14254
14248
  if (draftState) result.set(page.persistentId, draftState);
@@ -14381,7 +14375,7 @@ function buildGroupDraftCreatedAndUpdatedStates(groups, groupSnapshots, debug) {
14381
14375
  function itemStateFromGroup(group) {
14382
14376
  return {
14383
14377
  title: group.meta.name,
14384
- configuration: _nullishCoalesce(_optionalChain([group, 'access', _52 => _52.data, 'optionalAccess', _53 => _53.configuration]), () => ( defaultDocumentationItemConfigurationV2)),
14378
+ configuration: _nullishCoalesce(_optionalChain([group, 'access', _54 => _54.data, 'optionalAccess', _55 => _55.configuration]), () => ( defaultDocumentationItemConfigurationV2)),
14385
14379
  contentHash: "-"
14386
14380
  };
14387
14381
  }
@@ -14542,7 +14536,7 @@ var DTODocumentationPageRoomHeaderDataUpdate = _zod.z.object({
14542
14536
  function itemConfigurationToYjs(yDoc, item) {
14543
14537
  yDoc.transact((trx) => {
14544
14538
  const { title, configuration } = item;
14545
- const header = _optionalChain([configuration, 'optionalAccess', _54 => _54.header]);
14539
+ const header = _optionalChain([configuration, 'optionalAccess', _56 => _56.header]);
14546
14540
  if (title !== void 0) {
14547
14541
  const headerYMap = trx.doc.getMap("itemTitle");
14548
14542
  headerYMap.set("title", title);
@@ -14560,9 +14554,9 @@ function itemConfigurationToYjs(yDoc, item) {
14560
14554
  header.minHeight !== void 0 && headerYMap.set("minHeight", header.minHeight);
14561
14555
  }
14562
14556
  const configYMap = trx.doc.getMap("itemConfiguration");
14563
- _optionalChain([configuration, 'optionalAccess', _55 => _55.showSidebar]) !== void 0 && configYMap.set("showSidebar", configuration.showSidebar);
14564
- _optionalChain([configuration, 'optionalAccess', _56 => _56.isHidden]) !== void 0 && configYMap.set("isHidden", configuration.isHidden);
14565
- _optionalChain([configuration, 'optionalAccess', _57 => _57.isPrivate]) !== void 0 && configYMap.set("isPrivate", configuration.isPrivate);
14557
+ _optionalChain([configuration, 'optionalAccess', _57 => _57.showSidebar]) !== void 0 && configYMap.set("showSidebar", configuration.showSidebar);
14558
+ _optionalChain([configuration, 'optionalAccess', _58 => _58.isHidden]) !== void 0 && configYMap.set("isHidden", configuration.isHidden);
14559
+ _optionalChain([configuration, 'optionalAccess', _59 => _59.isPrivate]) !== void 0 && configYMap.set("isPrivate", configuration.isPrivate);
14566
14560
  });
14567
14561
  }
14568
14562
 
@@ -15386,7 +15380,7 @@ var ListTreeBuilder = class {
15386
15380
  }
15387
15381
  addWithProperty(block, multiRichTextProperty) {
15388
15382
  const parsedOptions = PageBlockDefinitionMutiRichTextOptions.optional().parse(multiRichTextProperty.options);
15389
- return this.add(block, multiRichTextProperty.id, _optionalChain([parsedOptions, 'optionalAccess', _58 => _58.multiRichTextStyle]) || "OL");
15383
+ return this.add(block, multiRichTextProperty.id, _optionalChain([parsedOptions, 'optionalAccess', _60 => _60.multiRichTextStyle]) || "OL");
15390
15384
  }
15391
15385
  add(block, multiRichTextPropertyId, multiRichTextPropertyStyle) {
15392
15386
  const list = this.createList(block, multiRichTextPropertyId, multiRichTextPropertyStyle);
@@ -15401,7 +15395,7 @@ var ListTreeBuilder = class {
15401
15395
  }
15402
15396
  const listParent = this.getParentOfDepth(block.data.indentLevel);
15403
15397
  const lastChild = listParent.children[listParent.children.length - 1];
15404
- if (_optionalChain([lastChild, 'optionalAccess', _59 => _59.type]) === "List") {
15398
+ if (_optionalChain([lastChild, 'optionalAccess', _61 => _61.type]) === "List") {
15405
15399
  lastChild.children.push(...list.leadingChildren);
15406
15400
  return;
15407
15401
  } else {
@@ -15630,7 +15624,7 @@ function serializeAsRichTextBlock(input) {
15630
15624
  const textPropertyValue = BlockParsingUtils.richTextPropertyValue(blockItem, richTextProperty.id);
15631
15625
  const enrichedInput = { ...input, richTextPropertyValue: textPropertyValue };
15632
15626
  const parsedOptions = PageBlockDefinitionRichTextOptions.optional().parse(richTextProperty.options);
15633
- const style = _nullishCoalesce(_optionalChain([parsedOptions, 'optionalAccess', _60 => _60.richTextStyle]), () => ( "Default"));
15627
+ const style = _nullishCoalesce(_optionalChain([parsedOptions, 'optionalAccess', _62 => _62.richTextStyle]), () => ( "Default"));
15634
15628
  switch (style) {
15635
15629
  case "Callout":
15636
15630
  return serializeAsCallout(enrichedInput);
@@ -15854,7 +15848,7 @@ function serializeBlockNodeAttributes(block) {
15854
15848
  };
15855
15849
  }
15856
15850
  function richTextHeadingLevel(property) {
15857
- const style = _optionalChain([property, 'access', _61 => _61.options, 'optionalAccess', _62 => _62.richTextStyle]);
15851
+ const style = _optionalChain([property, 'access', _63 => _63.options, 'optionalAccess', _64 => _64.richTextStyle]);
15858
15852
  if (!style) return void 0;
15859
15853
  switch (style) {
15860
15854
  case "Title1":
@@ -15973,7 +15967,7 @@ function serializeAsCustomBlock(block, definition) {
15973
15967
  linksTo: i.linksTo
15974
15968
  };
15975
15969
  });
15976
- const columns = _optionalChain([block, 'access', _63 => _63.data, 'access', _64 => _64.appearance, 'optionalAccess', _65 => _65.numberOfColumns]);
15970
+ const columns = _optionalChain([block, 'access', _65 => _65.data, 'access', _66 => _66.appearance, 'optionalAccess', _67 => _67.numberOfColumns]);
15977
15971
  return {
15978
15972
  type: serializeCustomBlockNodeType(block, definition),
15979
15973
  attrs: {
@@ -18298,7 +18292,7 @@ function parseAsListNode(prosemirrorNode) {
18298
18292
  }
18299
18293
  function parseAsListNodeItem(prosemirrorNode) {
18300
18294
  if (prosemirrorNode.type !== "listItem") return null;
18301
- const firstChild = _optionalChain([prosemirrorNode, 'access', _66 => _66.content, 'optionalAccess', _67 => _67[0]]);
18295
+ const firstChild = _optionalChain([prosemirrorNode, 'access', _68 => _68.content, 'optionalAccess', _69 => _69[0]]);
18302
18296
  if (!firstChild || firstChild.type !== "paragraph") return null;
18303
18297
  return parseRichText(_nullishCoalesce(firstChild.content, () => ( [])));
18304
18298
  }
@@ -18446,9 +18440,9 @@ function parseAsMultiRichText(prosemirrorNode, definition, property, definitions
18446
18440
  const variantId = getProsemirrorBlockVariantId(prosemirrorNode);
18447
18441
  const result = [];
18448
18442
  const listItems = [];
18449
- _optionalChain([prosemirrorNode, 'access', _68 => _68.content, 'optionalAccess', _69 => _69.forEach, 'call', _70 => _70((c) => {
18443
+ _optionalChain([prosemirrorNode, 'access', _70 => _70.content, 'optionalAccess', _71 => _71.forEach, 'call', _72 => _72((c) => {
18450
18444
  if (c.type !== "listItem") return;
18451
- _optionalChain([c, 'access', _71 => _71.content, 'optionalAccess', _72 => _72.forEach, 'call', _73 => _73((cc) => {
18445
+ _optionalChain([c, 'access', _73 => _73.content, 'optionalAccess', _74 => _74.forEach, 'call', _75 => _75((cc) => {
18452
18446
  listItems.push(cc);
18453
18447
  })]);
18454
18448
  })]);
@@ -18559,17 +18553,17 @@ function parseAsTable(prosemirrorNode, definition, property) {
18559
18553
  if (!id) return null;
18560
18554
  const variantId = getProsemirrorBlockVariantId(prosemirrorNode);
18561
18555
  const hasBorder = getProsemirrorAttribute(prosemirrorNode, "hasBorder", _zod.z.boolean().optional()) !== false;
18562
- const tableChild = _optionalChain([prosemirrorNode, 'access', _74 => _74.content, 'optionalAccess', _75 => _75.find, 'call', _76 => _76((c) => c.type === "table")]);
18556
+ const tableChild = _optionalChain([prosemirrorNode, 'access', _76 => _76.content, 'optionalAccess', _77 => _77.find, 'call', _78 => _78((c) => c.type === "table")]);
18563
18557
  if (!tableChild) {
18564
18558
  return emptyTable(id, variantId, 0);
18565
18559
  }
18566
- const rows = _nullishCoalesce(_optionalChain([tableChild, 'access', _77 => _77.content, 'optionalAccess', _78 => _78.filter, 'call', _79 => _79((c) => c.type === "tableRow" && !!_optionalChain([c, 'access', _80 => _80.content, 'optionalAccess', _81 => _81.length]))]), () => ( []));
18560
+ const rows = _nullishCoalesce(_optionalChain([tableChild, 'access', _79 => _79.content, 'optionalAccess', _80 => _80.filter, 'call', _81 => _81((c) => c.type === "tableRow" && !!_optionalChain([c, 'access', _82 => _82.content, 'optionalAccess', _83 => _83.length]))]), () => ( []));
18567
18561
  if (!rows.length) {
18568
18562
  return emptyTable(id, variantId, 0);
18569
18563
  }
18570
- const rowHeaderCells = _nullishCoalesce(_optionalChain([rows, 'access', _82 => _82[0], 'access', _83 => _83.content, 'optionalAccess', _84 => _84.filter, 'call', _85 => _85((c) => c.type === "tableHeader"), 'access', _86 => _86.length]), () => ( 0));
18571
- const columnHeaderCells = rows.filter((r) => _optionalChain([r, 'access', _87 => _87.content, 'optionalAccess', _88 => _88[0], 'optionalAccess', _89 => _89.type]) === "tableHeader").length;
18572
- const hasHeaderRow = _optionalChain([rows, 'access', _90 => _90[0], 'access', _91 => _91.content, 'optionalAccess', _92 => _92.length]) === rowHeaderCells;
18564
+ const rowHeaderCells = _nullishCoalesce(_optionalChain([rows, 'access', _84 => _84[0], 'access', _85 => _85.content, 'optionalAccess', _86 => _86.filter, 'call', _87 => _87((c) => c.type === "tableHeader"), 'access', _88 => _88.length]), () => ( 0));
18565
+ const columnHeaderCells = rows.filter((r) => _optionalChain([r, 'access', _89 => _89.content, 'optionalAccess', _90 => _90[0], 'optionalAccess', _91 => _91.type]) === "tableHeader").length;
18566
+ const hasHeaderRow = _optionalChain([rows, 'access', _92 => _92[0], 'access', _93 => _93.content, 'optionalAccess', _94 => _94.length]) === rowHeaderCells;
18573
18567
  const hasHeaderColumn = rows.length === columnHeaderCells;
18574
18568
  const tableValue = {
18575
18569
  showBorder: hasBorder,
@@ -18646,7 +18640,7 @@ function parseAsTableNode(prosemirrorNode) {
18646
18640
  if (!items) return null;
18647
18641
  const parsedItems = PageBlockItemV2.array().safeParse(JSON.parse(items));
18648
18642
  if (!parsedItems.success) return null;
18649
- const rawImagePropertyValue = _optionalChain([parsedItems, 'access', _93 => _93.data, 'access', _94 => _94[0], 'optionalAccess', _95 => _95.props, 'access', _96 => _96.image]);
18643
+ const rawImagePropertyValue = _optionalChain([parsedItems, 'access', _95 => _95.data, 'access', _96 => _96[0], 'optionalAccess', _97 => _97.props, 'access', _98 => _98.image]);
18650
18644
  if (!rawImagePropertyValue) return null;
18651
18645
  const imagePropertyValueParseResult = PageBlockItemImageValue.safeParse(rawImagePropertyValue);
18652
18646
  if (!imagePropertyValueParseResult.success) return null;
@@ -18887,7 +18881,7 @@ function getProsemirrorBlockVariantId(prosemirrorNode) {
18887
18881
  return getProsemirrorAttribute(prosemirrorNode, "variantId", nullishToOptional(_zod.z.string()));
18888
18882
  }
18889
18883
  function getProsemirrorAttribute(prosemirrorNode, attributeName, validationSchema) {
18890
- const parsedAttr = validationSchema.safeParse(_optionalChain([prosemirrorNode, 'access', _97 => _97.attrs, 'optionalAccess', _98 => _98[attributeName]]));
18884
+ const parsedAttr = validationSchema.safeParse(_optionalChain([prosemirrorNode, 'access', _99 => _99.attrs, 'optionalAccess', _100 => _100[attributeName]]));
18891
18885
  if (parsedAttr.success) {
18892
18886
  return parsedAttr.data;
18893
18887
  } else {
@@ -19715,10 +19709,10 @@ var LocalProjectActionExecutor = class {
19715
19709
  const SORT_ORDER_STEP = 1e3;
19716
19710
  if (afterItemId === void 0) {
19717
19711
  const lastSection = findLast(projectId, sectionId);
19718
- return (_nullishCoalesce(_optionalChain([lastSection, 'optionalAccess', _99 => _99.sortOrder]), () => ( 0))) + SORT_ORDER_STEP;
19712
+ return (_nullishCoalesce(_optionalChain([lastSection, 'optionalAccess', _101 => _101.sortOrder]), () => ( 0))) + SORT_ORDER_STEP;
19719
19713
  } else if (afterItemId === null) {
19720
19714
  const firstSection = findFirst(projectId, sectionId);
19721
- return (_nullishCoalesce(_optionalChain([firstSection, 'optionalAccess', _100 => _100.sortOrder]), () => ( SORT_ORDER_STEP))) - SORT_ORDER_STEP;
19715
+ return (_nullishCoalesce(_optionalChain([firstSection, 'optionalAccess', _102 => _102.sortOrder]), () => ( SORT_ORDER_STEP))) - SORT_ORDER_STEP;
19722
19716
  } else {
19723
19717
  const targetSection = findUnique(projectId, afterItemId, sectionId);
19724
19718
  if (!targetSection) return null;