@superdoc/sdk 2.12.0 → 2.13.0-next.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.
@@ -1133,7 +1133,7 @@ async function runInsertHeading(doc, args) {
1133
1133
  return failedReceipt('insert_heading', err, pre);
1134
1134
  }
1135
1135
  }
1136
- async function runReplaceText(doc, args) {
1136
+ async function runReplaceTextUnchecked(doc, args) {
1137
1137
  const selectorDomains = args.selector ? snapshotDomainsForSelector(args.selector) : null;
1138
1138
  const requiresBlockSnapshot = args.selector != null;
1139
1139
  const preIdentity = requiresBlockSnapshot ? null : await readDocumentIdentity(doc);
@@ -1326,6 +1326,13 @@ async function runReplaceText(doc, args) {
1326
1326
  return failedReceipt('replace_text', err, pre);
1327
1327
  }
1328
1328
  }
1329
+ async function runReplaceText(doc, args) {
1330
+ const changeMode = args.changeMode ?? 'direct';
1331
+ return {
1332
+ ...(await runReplaceTextUnchecked(doc, { ...args, changeMode })),
1333
+ changeMode,
1334
+ };
1335
+ }
1329
1336
  async function runDeleteText(doc, args) {
1330
1337
  const caseSensitive = args.caseSensitive === true;
1331
1338
  // Scoped form: delete finds within ONE block (mirrors replace_text's selector
@@ -4613,7 +4620,7 @@ function compactOpResult(result) {
4613
4620
  compact.stepCount = result.steps.length;
4614
4621
  return compact;
4615
4622
  }
4616
- function parseScopedReplaceArgs(args) {
4623
+ function parseScopedReplaceArgs(args, changeMode) {
4617
4624
  if (args.action !== 'replace_text')
4618
4625
  return null;
4619
4626
  if (!isRecord(args.selector))
@@ -4630,7 +4637,7 @@ function parseScopedReplaceArgs(args) {
4630
4637
  edits,
4631
4638
  selector: args.selector,
4632
4639
  caseSensitive: args.caseSensitive === true,
4633
- changeMode: args.changeMode === 'tracked' ? 'tracked' : 'direct',
4640
+ changeMode,
4634
4641
  };
4635
4642
  }
4636
4643
  async function runScopedReplaceUnchecked(doc, args) {
@@ -4796,11 +4803,15 @@ async function runScopedReplaceUnchecked(doc, args) {
4796
4803
  };
4797
4804
  }
4798
4805
  async function runScopedReplace(doc, args) {
4806
+ const changeMode = args.changeMode ?? 'direct';
4799
4807
  try {
4800
- return await runScopedReplaceUnchecked(doc, args);
4808
+ return {
4809
+ ...(await runScopedReplaceUnchecked(doc, { ...args, changeMode })),
4810
+ changeMode,
4811
+ };
4801
4812
  }
4802
4813
  catch (error) {
4803
- return failedReceipt('replace_text', error);
4814
+ return { ...failedReceipt('replace_text', error), changeMode };
4804
4815
  }
4805
4816
  }
4806
4817
  /**
@@ -6526,11 +6537,12 @@ async function dispatchSuperdocPerformAction(doc, args) {
6526
6537
  code: 'INVALID_ARGUMENT',
6527
6538
  });
6528
6539
  }
6540
+ const changeMode = parseReplaceTextChangeMode(args.changeMode);
6529
6541
  // Selector-scoped replaces take the span-targeted path: per-find
6530
6542
  // text.rewrite spans inside the one selected block, so tabs/breaks/
6531
6543
  // images outside the spans survive and the receipt reports per-edit
6532
6544
  // applied/skipped truth.
6533
- const scoped = parseScopedReplaceArgs(args);
6545
+ const scoped = parseScopedReplaceArgs(args, changeMode);
6534
6546
  if (scoped) {
6535
6547
  return runScopedReplace(doc, scoped);
6536
6548
  }
@@ -6543,7 +6555,7 @@ async function dispatchSuperdocPerformAction(doc, args) {
6543
6555
  edits,
6544
6556
  selector,
6545
6557
  caseSensitive: args.caseSensitive === true,
6546
- changeMode: parseChangeMode(args.changeMode),
6558
+ changeMode,
6547
6559
  });
6548
6560
  }
6549
6561
  case 'delete_text': {
@@ -7171,6 +7183,17 @@ function parseChangeMode(value) {
7171
7183
  return value;
7172
7184
  return undefined;
7173
7185
  }
7186
+ function parseReplaceTextChangeMode(value) {
7187
+ if (value === undefined)
7188
+ return 'direct';
7189
+ const changeMode = parseChangeMode(value);
7190
+ if (changeMode)
7191
+ return changeMode;
7192
+ throw new errors.SuperDocCliError('replace_text: "changeMode" must be "direct" or "tracked"', {
7193
+ code: 'INVALID_ARGUMENT',
7194
+ details: { changeMode: value },
7195
+ });
7196
+ }
7174
7197
  function parseTrackedChangeKind(value) {
7175
7198
  if (value === 'insert' || value === 'delete' || value === 'replacement' || value === 'format')
7176
7199
  return value;
@@ -1130,7 +1130,7 @@ async function runInsertHeading(doc, args) {
1130
1130
  return failedReceipt('insert_heading', err, pre);
1131
1131
  }
1132
1132
  }
1133
- async function runReplaceText(doc, args) {
1133
+ async function runReplaceTextUnchecked(doc, args) {
1134
1134
  const selectorDomains = args.selector ? snapshotDomainsForSelector(args.selector) : null;
1135
1135
  const requiresBlockSnapshot = args.selector != null;
1136
1136
  const preIdentity = requiresBlockSnapshot ? null : await readDocumentIdentity(doc);
@@ -1323,6 +1323,13 @@ async function runReplaceText(doc, args) {
1323
1323
  return failedReceipt('replace_text', err, pre);
1324
1324
  }
1325
1325
  }
1326
+ async function runReplaceText(doc, args) {
1327
+ const changeMode = args.changeMode ?? 'direct';
1328
+ return {
1329
+ ...(await runReplaceTextUnchecked(doc, { ...args, changeMode })),
1330
+ changeMode,
1331
+ };
1332
+ }
1326
1333
  async function runDeleteText(doc, args) {
1327
1334
  const caseSensitive = args.caseSensitive === true;
1328
1335
  // Scoped form: delete finds within ONE block (mirrors replace_text's selector
@@ -4610,7 +4617,7 @@ function compactOpResult(result) {
4610
4617
  compact.stepCount = result.steps.length;
4611
4618
  return compact;
4612
4619
  }
4613
- function parseScopedReplaceArgs(args) {
4620
+ function parseScopedReplaceArgs(args, changeMode) {
4614
4621
  if (args.action !== 'replace_text')
4615
4622
  return null;
4616
4623
  if (!isRecord(args.selector))
@@ -4627,7 +4634,7 @@ function parseScopedReplaceArgs(args) {
4627
4634
  edits,
4628
4635
  selector: args.selector,
4629
4636
  caseSensitive: args.caseSensitive === true,
4630
- changeMode: args.changeMode === 'tracked' ? 'tracked' : 'direct',
4637
+ changeMode,
4631
4638
  };
4632
4639
  }
4633
4640
  async function runScopedReplaceUnchecked(doc, args) {
@@ -4793,11 +4800,15 @@ async function runScopedReplaceUnchecked(doc, args) {
4793
4800
  };
4794
4801
  }
4795
4802
  async function runScopedReplace(doc, args) {
4803
+ const changeMode = args.changeMode ?? 'direct';
4796
4804
  try {
4797
- return await runScopedReplaceUnchecked(doc, args);
4805
+ return {
4806
+ ...(await runScopedReplaceUnchecked(doc, { ...args, changeMode })),
4807
+ changeMode,
4808
+ };
4798
4809
  }
4799
4810
  catch (error) {
4800
- return failedReceipt('replace_text', error);
4811
+ return { ...failedReceipt('replace_text', error), changeMode };
4801
4812
  }
4802
4813
  }
4803
4814
  /**
@@ -6523,11 +6534,12 @@ async function dispatchSuperdocPerformAction(doc, args) {
6523
6534
  code: 'INVALID_ARGUMENT',
6524
6535
  });
6525
6536
  }
6537
+ const changeMode = parseReplaceTextChangeMode(args.changeMode);
6526
6538
  // Selector-scoped replaces take the span-targeted path: per-find
6527
6539
  // text.rewrite spans inside the one selected block, so tabs/breaks/
6528
6540
  // images outside the spans survive and the receipt reports per-edit
6529
6541
  // applied/skipped truth.
6530
- const scoped = parseScopedReplaceArgs(args);
6542
+ const scoped = parseScopedReplaceArgs(args, changeMode);
6531
6543
  if (scoped) {
6532
6544
  return runScopedReplace(doc, scoped);
6533
6545
  }
@@ -6540,7 +6552,7 @@ async function dispatchSuperdocPerformAction(doc, args) {
6540
6552
  edits,
6541
6553
  selector,
6542
6554
  caseSensitive: args.caseSensitive === true,
6543
- changeMode: parseChangeMode(args.changeMode),
6555
+ changeMode,
6544
6556
  });
6545
6557
  }
6546
6558
  case 'delete_text': {
@@ -7170,6 +7182,17 @@ function parseChangeMode(value) {
7170
7182
  return value;
7171
7183
  return undefined;
7172
7184
  }
7185
+ function parseReplaceTextChangeMode(value) {
7186
+ if (value === undefined)
7187
+ return 'direct';
7188
+ const changeMode = parseChangeMode(value);
7189
+ if (changeMode)
7190
+ return changeMode;
7191
+ throw new SuperDocCliError('replace_text: "changeMode" must be "direct" or "tracked"', {
7192
+ code: 'INVALID_ARGUMENT',
7193
+ details: { changeMode: value },
7194
+ });
7195
+ }
7173
7196
  function parseTrackedChangeKind(value) {
7174
7197
  if (value === 'insert' || value === 'delete' || value === 'replacement' || value === 'format')
7175
7198
  return value;