@jhl548/duplicate-doc-core 0.1.0 → 0.1.2

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.ts CHANGED
@@ -1,5 +1,5 @@
1
- export * from "./colors";
2
- export * from "./ranges";
3
- export * from "./scroll";
4
- export * from "./tiptapDuplicateHighlight";
5
- export * from "./types";
1
+ export * from "./colors.js";
2
+ export * from "./ranges.js";
3
+ export * from "./scroll.js";
4
+ export * from "./tiptapDuplicateHighlight.js";
5
+ export * from "./types.js";
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
- export * from "./colors";
2
- export * from "./ranges";
3
- export * from "./scroll";
4
- export * from "./tiptapDuplicateHighlight";
5
- export * from "./types";
1
+ export * from "./colors.js";
2
+ export * from "./ranges.js";
3
+ export * from "./scroll.js";
4
+ export * from "./tiptapDuplicateHighlight.js";
5
+ export * from "./types.js";
6
6
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,4BAA4B,CAAC;AAC3C,cAAc,SAAS,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,+BAA+B,CAAC;AAC9C,cAAc,YAAY,CAAC"}
package/dist/ranges.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import type { DuplicateHighlight, TextRange } from "./types";
1
+ import type { DuplicateHighlight, TextRange } from "./types.js";
2
2
  export declare function normalizeRange(range: TextRange): TextRange | null;
3
3
  export declare function normalizeRanges(ranges: TextRange[]): TextRange[];
4
4
  export declare function filterHighlightsForDocument(highlights: DuplicateHighlight[], documentId: string): DuplicateHighlight[];
@@ -2,7 +2,7 @@ import { Extension } from "@tiptap/core";
2
2
  import type { Node as ProseMirrorNode } from "@tiptap/pm/model";
3
3
  import { PluginKey } from "@tiptap/pm/state";
4
4
  import { DecorationSet } from "@tiptap/pm/view";
5
- import type { DuplicateHighlight, TextRange } from "./types";
5
+ import type { DuplicateHighlight, TextRange } from "./types.js";
6
6
  declare module "@tiptap/core" {
7
7
  interface Commands<ReturnType> {
8
8
  duplicateHighlight: {
@@ -10,12 +10,30 @@ declare module "@tiptap/core" {
10
10
  };
11
11
  }
12
12
  }
13
- export declare const duplicateHighlightPluginKey: PluginKey<DecorationSet>;
14
- export declare function buildPlainTextPositionMap(doc: ProseMirrorNode): number[];
15
- export declare function mapTextRangeToDocPositions(positions: number[], range: TextRange): {
13
+ interface MappedRange {
16
14
  from: number;
17
15
  to: number;
18
- } | null;
16
+ }
17
+ interface HighlightAnchor extends MappedRange {
18
+ key: string;
19
+ attrs: Record<string, string | undefined>;
20
+ expectedText?: string;
21
+ valid: boolean;
22
+ }
23
+ interface DuplicateHighlightState {
24
+ decorations: DecorationSet;
25
+ anchors: Record<string, HighlightAnchor>;
26
+ activeKeys: string[];
27
+ }
28
+ interface PlainTextSnapshot {
29
+ text: string;
30
+ positions: number[];
31
+ }
32
+ export declare const duplicateHighlightPluginKey: PluginKey<DuplicateHighlightState>;
33
+ export declare function buildPlainTextSnapshot(doc: ProseMirrorNode): PlainTextSnapshot;
34
+ export declare function buildPlainTextPositionMap(doc: ProseMirrorNode): number[];
35
+ export declare function mapTextRangeToDocPositions(positions: number[], range: TextRange): MappedRange | null;
19
36
  export declare const DuplicateHighlightExtension: Extension<any, {
20
37
  highlights: DuplicateHighlight[];
21
38
  }>;
39
+ export {};
@@ -1,14 +1,16 @@
1
1
  import { Extension } from "@tiptap/core";
2
2
  import { Plugin, PluginKey } from "@tiptap/pm/state";
3
3
  import { Decoration, DecorationSet } from "@tiptap/pm/view";
4
- import { createHighlightClass } from "./colors";
5
- import { normalizeRanges } from "./ranges";
4
+ import { createHighlightClass } from "./colors.js";
5
+ import { normalizeRanges } from "./ranges.js";
6
6
  export const duplicateHighlightPluginKey = new PluginKey("duplicate-highlight");
7
- export function buildPlainTextPositionMap(doc) {
7
+ export function buildPlainTextSnapshot(doc) {
8
+ const textParts = [];
8
9
  const positions = [];
9
10
  doc.forEach((blockNode, blockOffset, blockIndex) => {
10
11
  // 后端 plainText 以换行分隔块级节点,这里补齐同样的偏移,避免第二段以后定位偏移。
11
12
  if (blockIndex > 0) {
13
+ textParts.push("\n");
12
14
  positions.push(blockOffset);
13
15
  }
14
16
  blockNode.descendants((node, relativePos) => {
@@ -18,12 +20,19 @@ export function buildPlainTextPositionMap(doc) {
18
20
  const text = node.text ?? "";
19
21
  const absolutePos = blockOffset + 1 + relativePos;
20
22
  for (let index = 0; index < text.length; index += 1) {
23
+ textParts.push(text[index] ?? "");
21
24
  positions.push(absolutePos + index);
22
25
  }
23
26
  return true;
24
27
  });
25
28
  });
26
- return positions;
29
+ return {
30
+ text: textParts.join(""),
31
+ positions
32
+ };
33
+ }
34
+ export function buildPlainTextPositionMap(doc) {
35
+ return buildPlainTextSnapshot(doc).positions;
27
36
  }
28
37
  export function mapTextRangeToDocPositions(positions, range) {
29
38
  const from = positions[range.start];
@@ -34,28 +43,176 @@ export function mapTextRangeToDocPositions(positions, range) {
34
43
  const to = lastIncludedPosition + 1;
35
44
  return to > from ? { from, to } : null;
36
45
  }
37
- function buildDecorations(doc, highlights) {
38
- const decorations = [];
39
- const positions = buildPlainTextPositionMap(doc);
46
+ function getRangeText(doc, range) {
47
+ return doc.textBetween(range.from, range.to, "\n", "");
48
+ }
49
+ function rangeStillMatches(doc, range, text) {
50
+ if (!text) {
51
+ return true;
52
+ }
53
+ return getRangeText(doc, range) === text;
54
+ }
55
+ function getExpectedText(doc, range, text) {
56
+ return text || getRangeText(doc, range) || undefined;
57
+ }
58
+ function findClosestTextIndex(text, target, preferredIndex) {
59
+ if (!target) {
60
+ return -1;
61
+ }
62
+ let closestIndex = -1;
63
+ let closestDistance = Number.POSITIVE_INFINITY;
64
+ let searchIndex = text.indexOf(target);
65
+ while (searchIndex >= 0) {
66
+ const distance = Math.abs(searchIndex - preferredIndex);
67
+ if (distance < closestDistance) {
68
+ closestIndex = searchIndex;
69
+ closestDistance = distance;
70
+ }
71
+ searchIndex = text.indexOf(target, searchIndex + 1);
72
+ }
73
+ return closestIndex;
74
+ }
75
+ function getRangeKey(highlight, range, index) {
76
+ return [
77
+ highlight.documentId,
78
+ highlight.duplicateId,
79
+ range.blockId ?? "unknown-block",
80
+ range.start,
81
+ range.end,
82
+ index
83
+ ].join("::");
84
+ }
85
+ function getDecorationAttrs(highlight, range) {
86
+ return {
87
+ class: createHighlightClass(highlight.similarity, highlight.active, highlight.ignored),
88
+ "data-duplicate-id": highlight.duplicateId,
89
+ "data-section-path": highlight.sectionPath?.join(" / ") ?? range.sectionPath?.join(" / "),
90
+ "data-region": highlight.region ?? range.region,
91
+ "data-semantic-type": highlight.semanticType ?? range.semanticType,
92
+ "data-noise-reason": highlight.noiseReason,
93
+ "data-table-id": highlight.tableContext?.tableId ?? range.tableContext?.tableId
94
+ };
95
+ }
96
+ function createAnchor(doc, snapshot, highlight, range, index, expectedText = range.matchedText) {
97
+ const mappedRange = mapTextRangeToDocPositions(snapshot.positions, range);
98
+ if (mappedRange && rangeStillMatches(doc, mappedRange, expectedText)) {
99
+ return {
100
+ key: getRangeKey(highlight, range, index),
101
+ from: mappedRange.from,
102
+ to: mappedRange.to,
103
+ attrs: getDecorationAttrs(highlight, range),
104
+ expectedText: getExpectedText(doc, mappedRange, expectedText),
105
+ valid: true
106
+ };
107
+ }
108
+ const fallbackStart = findClosestTextIndex(snapshot.text, expectedText ?? "", range.start);
109
+ const fallbackRange = fallbackStart >= 0 && expectedText
110
+ ? mapTextRangeToDocPositions(snapshot.positions, {
111
+ ...range,
112
+ start: fallbackStart,
113
+ end: fallbackStart + expectedText.length
114
+ })
115
+ : null;
116
+ if (!fallbackRange || !rangeStillMatches(doc, fallbackRange, expectedText)) {
117
+ return null;
118
+ }
119
+ return {
120
+ key: getRangeKey(highlight, range, index),
121
+ from: fallbackRange.from,
122
+ to: fallbackRange.to,
123
+ attrs: getDecorationAttrs(highlight, range),
124
+ expectedText: getExpectedText(doc, fallbackRange, expectedText),
125
+ valid: true
126
+ };
127
+ }
128
+ function buildDecorations(doc, anchors, activeKeys) {
129
+ const activeKeySet = new Set(activeKeys);
130
+ const decorations = anchors
131
+ .filter((anchor) => anchor.valid && activeKeySet.has(anchor.key) && anchor.to > anchor.from)
132
+ .map((anchor) => Decoration.inline(anchor.from, anchor.to, anchor.attrs));
133
+ return DecorationSet.create(doc, decorations);
134
+ }
135
+ function buildHighlightState(doc, highlights, previousAnchors = {}) {
136
+ const snapshot = buildPlainTextSnapshot(doc);
137
+ const anchors = { ...previousAnchors };
138
+ const activeKeys = [];
40
139
  for (const highlight of highlights) {
41
140
  const ranges = normalizeRanges(highlight.ranges);
42
- for (const range of ranges) {
43
- const mappedRange = mapTextRangeToDocPositions(positions, range);
44
- if (!mappedRange) {
141
+ for (const [index, range] of ranges.entries()) {
142
+ const key = getRangeKey(highlight, range, index);
143
+ const previousAnchor = anchors[key];
144
+ activeKeys.push(key);
145
+ if (previousAnchor && !previousAnchor.valid) {
146
+ const restoredAnchor = createAnchor(doc, snapshot, highlight, range, index, previousAnchor.expectedText);
147
+ if (restoredAnchor) {
148
+ anchors[key] = restoredAnchor;
149
+ }
150
+ else {
151
+ anchors[key] = {
152
+ ...previousAnchor,
153
+ attrs: getDecorationAttrs(highlight, range)
154
+ };
155
+ }
156
+ continue;
157
+ }
158
+ if (previousAnchor) {
159
+ const updatedAnchor = {
160
+ ...previousAnchor,
161
+ attrs: getDecorationAttrs(highlight, range)
162
+ };
163
+ if (rangeStillMatches(doc, updatedAnchor, updatedAnchor.expectedText)) {
164
+ anchors[key] = updatedAnchor;
165
+ }
166
+ else {
167
+ anchors[key] =
168
+ createAnchor(doc, snapshot, highlight, range, index, updatedAnchor.expectedText) ?? {
169
+ ...updatedAnchor,
170
+ valid: false
171
+ };
172
+ }
45
173
  continue;
46
174
  }
47
- decorations.push(Decoration.inline(mappedRange.from, mappedRange.to, {
48
- class: createHighlightClass(highlight.similarity, highlight.active, highlight.ignored),
49
- "data-duplicate-id": highlight.duplicateId,
50
- "data-section-path": highlight.sectionPath?.join(" / ") ?? range.sectionPath?.join(" / "),
51
- "data-region": highlight.region ?? range.region,
52
- "data-semantic-type": highlight.semanticType ?? range.semanticType,
53
- "data-noise-reason": highlight.noiseReason,
54
- "data-table-id": highlight.tableContext?.tableId ?? range.tableContext?.tableId
55
- }));
175
+ const anchor = createAnchor(doc, snapshot, highlight, range, index);
176
+ if (anchor) {
177
+ anchors[key] = anchor;
178
+ }
56
179
  }
57
180
  }
58
- return DecorationSet.create(doc, decorations);
181
+ return {
182
+ decorations: buildDecorations(doc, Object.values(anchors), activeKeys),
183
+ anchors,
184
+ activeKeys
185
+ };
186
+ }
187
+ function mapAnchors(doc, anchors, activeKeys, trMapping) {
188
+ const nextAnchors = {};
189
+ const activeKeySet = new Set(activeKeys);
190
+ for (const [key, anchor] of Object.entries(anchors)) {
191
+ if (!activeKeySet.has(key)) {
192
+ nextAnchors[key] = anchor;
193
+ continue;
194
+ }
195
+ if (!anchor.valid) {
196
+ nextAnchors[key] = anchor;
197
+ continue;
198
+ }
199
+ const fromResult = trMapping.mapResult(anchor.from, 1);
200
+ const toResult = trMapping.mapResult(anchor.to, -1);
201
+ const from = fromResult.pos;
202
+ const to = toResult.pos;
203
+ const wasDeleted = fromResult.deleted || toResult.deleted || to <= from;
204
+ const mappedAnchor = {
205
+ ...anchor,
206
+ from,
207
+ to
208
+ };
209
+ const textChanged = !rangeStillMatches(doc, mappedAnchor, anchor.expectedText);
210
+ nextAnchors[key] = {
211
+ ...mappedAnchor,
212
+ valid: !wasDeleted && to > from && to <= doc.content.size && !textChanged
213
+ };
214
+ }
215
+ return nextAnchors;
59
216
  }
60
217
  export const DuplicateHighlightExtension = Extension.create({
61
218
  name: "duplicateHighlight",
@@ -80,18 +237,23 @@ export const DuplicateHighlightExtension = Extension.create({
80
237
  new Plugin({
81
238
  key: duplicateHighlightPluginKey,
82
239
  state: {
83
- init: (_, state) => buildDecorations(state.doc, this.storage.highlights),
84
- apply: (tr, decorationSet, _oldState, newState) => {
240
+ init: (_, state) => buildHighlightState(state.doc, this.storage.highlights),
241
+ apply: (tr, pluginState, _oldState, newState) => {
85
242
  const meta = tr.getMeta(duplicateHighlightPluginKey);
86
243
  if (meta?.highlights) {
87
- return buildDecorations(newState.doc, meta.highlights);
244
+ return buildHighlightState(newState.doc, meta.highlights, pluginState.anchors);
88
245
  }
89
- return decorationSet.map(tr.mapping, tr.doc);
246
+ const anchors = mapAnchors(newState.doc, pluginState.anchors, pluginState.activeKeys, tr.mapping);
247
+ return {
248
+ ...pluginState,
249
+ decorations: buildDecorations(newState.doc, Object.values(anchors), pluginState.activeKeys),
250
+ anchors
251
+ };
90
252
  }
91
253
  },
92
254
  props: {
93
255
  decorations(state) {
94
- return duplicateHighlightPluginKey.getState(state);
256
+ return duplicateHighlightPluginKey.getState(state)?.decorations;
95
257
  }
96
258
  }
97
259
  })
@@ -1 +1 @@
1
- {"version":3,"file":"tiptapDuplicateHighlight.js","sourceRoot":"","sources":["../src/tiptapDuplicateHighlight.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tiptapDuplicateHighlight.js","sourceRoot":"","sources":["../src/tiptapDuplicateHighlight.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -12,6 +12,7 @@ export interface TableCellContext {
12
12
  export interface TextRange {
13
13
  start: number;
14
14
  end: number;
15
+ matchedText?: string;
15
16
  blockId?: string;
16
17
  sectionPath?: string[];
17
18
  region?: DocumentRegion;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jhl548/duplicate-doc-core",
3
- "version": "0.1.0",
3
+ "version": "0.1.2",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -22,6 +22,7 @@
22
22
  "access": "public"
23
23
  },
24
24
  "scripts": {
25
+ "prepack": "node ../../scripts/check-encoding.mjs && npm run typecheck && npm run build",
25
26
  "build": "tsc -p tsconfig.json",
26
27
  "typecheck": "tsc -p tsconfig.json --noEmit"
27
28
  },