@vuer-ai/vuer-rtc 0.6.0 → 0.7.0
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/CLAUDE.md +65 -0
- package/dist/client/coalesceTextOperations.d.ts.map +1 -1
- package/dist/client/coalesceTextOperations.js +14 -13
- package/dist/client/coalesceTextOperations.js.map +1 -1
- package/dist/client/createTextDocument.js +4 -4
- package/dist/client/createTextDocument.js.map +1 -1
- package/dist/client/textActions.js +21 -21
- package/dist/client/textActions.js.map +1 -1
- package/dist/client/textTypes.d.ts +3 -9
- package/dist/client/textTypes.d.ts.map +1 -1
- package/dist/crdt/BTree.d.ts +2 -2
- package/dist/crdt/BTree.d.ts.map +1 -1
- package/dist/crdt/BTree.js +12 -12
- package/dist/crdt/BTree.js.map +1 -1
- package/dist/crdt/RangeTree.d.ts +2 -2
- package/dist/crdt/RangeTree.d.ts.map +1 -1
- package/dist/crdt/RangeTree.js +10 -10
- package/dist/crdt/RangeTree.js.map +1 -1
- package/dist/crdt/Rope.d.ts +6 -0
- package/dist/crdt/Rope.d.ts.map +1 -1
- package/dist/crdt/Rope.js +38 -10
- package/dist/crdt/Rope.js.map +1 -1
- package/dist/operations/apply/text.d.ts.map +1 -1
- package/dist/operations/apply/text.js +5 -2
- package/dist/operations/apply/text.js.map +1 -1
- package/package.json +1 -1
- package/src/client/TEXT_DOCUMENT_API.md +11 -4
- package/src/client/coalesceTextOperations.ts +17 -16
- package/src/client/createTextDocument.ts +4 -4
- package/src/client/textActions.ts +21 -21
- package/src/client/textTypes.ts +3 -5
- package/src/crdt/BTree.ts +14 -14
- package/src/crdt/RangeTree.ts +12 -12
- package/src/crdt/Rope.ts +46 -11
- package/src/operations/apply/text.ts +5 -2
- package/tests/client/coalesce-text-operations.test.ts +182 -244
- package/tests/client/delete-coalescence-bug.test.ts +5 -5
- package/tests/crdt/btree.test.ts +2 -2
- package/tests/crdt/rope.test.ts +41 -0
- package/docs/rope-optimization-plan.md +0 -329
package/CLAUDE.md
CHANGED
|
@@ -29,6 +29,71 @@ Deploy
|
|
|
29
29
|
|
|
30
30
|
This ensures high-quality implementations and catches issues early.
|
|
31
31
|
|
|
32
|
+
### Deployment Process
|
|
33
|
+
|
|
34
|
+
**Publishing a new version requires careful coordination between npm publish and documentation site updates.**
|
|
35
|
+
|
|
36
|
+
#### Complete Deployment Workflow
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
# 1. Update package version
|
|
40
|
+
# Edit packages/vuer-rtc/package.json → bump version (e.g., 0.6.0)
|
|
41
|
+
|
|
42
|
+
# 2. Build and test locally
|
|
43
|
+
pnpm build && pnpm test
|
|
44
|
+
|
|
45
|
+
# 3. Commit package changes
|
|
46
|
+
git add -A && git commit -m "Release v0.6.0: <summary>" && git push
|
|
47
|
+
|
|
48
|
+
# 4. Publish to npm
|
|
49
|
+
pass otp npmjs && pnpm publish --otp $(pass otp npmjs)
|
|
50
|
+
|
|
51
|
+
# 5. Update documentation site
|
|
52
|
+
cd vuer-rtc-docs
|
|
53
|
+
# Edit package.json → update @vuer-ai/vuer-rtc to ^0.6.0
|
|
54
|
+
pnpm install # Updates pnpm-lock.yaml
|
|
55
|
+
|
|
56
|
+
# 6. Commit and deploy
|
|
57
|
+
git add -A && git commit -m "Update docs to v0.6.0"
|
|
58
|
+
cd ..
|
|
59
|
+
pnpm deploy # ← IMPORTANT: Uses workspace deploy script, pushes to main:netlify-production
|
|
60
|
+
|
|
61
|
+
# 7. WAIT for Netlify build (2-3 minutes)
|
|
62
|
+
# Do NOT check the site immediately - Netlify needs time to build and deploy
|
|
63
|
+
|
|
64
|
+
# 8. Verify deployment
|
|
65
|
+
curl https://rtc.vuer.ai | grep "v0.6.0"
|
|
66
|
+
# Or visit https://rtc.vuer.ai and check the version badge in the hero section
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
#### Important Notes
|
|
70
|
+
|
|
71
|
+
**Why lockfile update is sufficient:**
|
|
72
|
+
- The docs site uses a Vite alias that points to the LOCAL package.json:
|
|
73
|
+
```typescript
|
|
74
|
+
// vuer-rtc-docs/vite.config.ts
|
|
75
|
+
alias: {
|
|
76
|
+
'#vuer-rtc-pkg': path.resolve(__dirname, '../packages/vuer-rtc/package.json')
|
|
77
|
+
}
|
|
78
|
+
```
|
|
79
|
+
- The VuerRTCBadge component imports version from this alias:
|
|
80
|
+
```typescript
|
|
81
|
+
import packageJson from '#vuer-rtc-pkg';
|
|
82
|
+
const PACKAGE_VERSION = packageJson.version;
|
|
83
|
+
```
|
|
84
|
+
- This means the site reads the version from the workspace, NOT from npm
|
|
85
|
+
- The lockfile change triggers Netlify rebuild, which picks up the updated local package.json
|
|
86
|
+
|
|
87
|
+
**Why to use `pnpm deploy`:**
|
|
88
|
+
- The workspace has a deploy script: `"deploy": "git push origin main:netlify-production"`
|
|
89
|
+
- This pushes to the correct branch that triggers Netlify deployment
|
|
90
|
+
- Using manual `git push` may push to the wrong branch
|
|
91
|
+
|
|
92
|
+
**Why to wait:**
|
|
93
|
+
- Netlify build takes 2-3 minutes after push
|
|
94
|
+
- Checking the site immediately will show stale version
|
|
95
|
+
- Wait for the build to complete before verifying
|
|
96
|
+
|
|
32
97
|
## Text Architecture (3-Component Design)
|
|
33
98
|
|
|
34
99
|
The text handling system uses a 3-component architecture with clear separation of concerns:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"coalesceTextOperations.d.ts","sourceRoot":"","sources":["../../src/client/coalesceTextOperations.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,KAAK,EAAE,QAAQ,
|
|
1
|
+
{"version":3,"file":"coalesceTextOperations.d.ts","sourceRoot":"","sources":["../../src/client/coalesceTextOperations.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,KAAK,EAAE,QAAQ,EAAY,MAAM,iBAAiB,CAAC;AAI1D,MAAM,WAAW,eAAe;IAC9B,kEAAkE;IAClE,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAsBD;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,aAAa,EAAE,EACpB,OAAO,GAAE,eAAoB,GAC5B,aAAa,EAAE,CA8HjB;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,GAAG,MAAM,CAI/D"}
|
|
@@ -49,21 +49,21 @@ export function coalesceTextOperations(ops, options = {}) {
|
|
|
49
49
|
let pendingInsert = null;
|
|
50
50
|
let pendingDelete = null;
|
|
51
51
|
for (const op of ops) {
|
|
52
|
-
if (op.
|
|
52
|
+
if (op.otype === 'insert') {
|
|
53
53
|
// Flush any pending delete before starting new insert
|
|
54
54
|
if (pendingDelete !== null) {
|
|
55
55
|
// Sort and optimize deletions array before flushing
|
|
56
|
-
pendingDelete.
|
|
56
|
+
pendingDelete.deletions = sortAndOptimizeDeletions(pendingDelete.deletions);
|
|
57
57
|
result.push(pendingDelete);
|
|
58
58
|
pendingDelete = null;
|
|
59
59
|
}
|
|
60
60
|
if (pendingInsert === null) {
|
|
61
61
|
// Start new pending insert
|
|
62
|
-
pendingInsert = {
|
|
62
|
+
pendingInsert = { ...op };
|
|
63
63
|
}
|
|
64
64
|
else {
|
|
65
|
-
const prevOp = pendingInsert
|
|
66
|
-
const currOp = op
|
|
65
|
+
const prevOp = pendingInsert;
|
|
66
|
+
const currOp = op;
|
|
67
67
|
// Parse IDs to extract agent and local sequence numbers
|
|
68
68
|
const prevId = parseItemId(prevOp.id);
|
|
69
69
|
const currId = parseItemId(currOp.id);
|
|
@@ -85,6 +85,7 @@ export function coalesceTextOperations(ops, options = {}) {
|
|
|
85
85
|
if (sameAgent && sequentialIds && withinThreshold && formsChain) {
|
|
86
86
|
// Merge operations
|
|
87
87
|
const mergedOp = {
|
|
88
|
+
otype: 'insert',
|
|
88
89
|
id: prevOp.id, // Keep first ID (anchor point)
|
|
89
90
|
content: prevOp.content + currOp.content, // Concatenate content
|
|
90
91
|
parentId: prevOp.parentId, // Keep first parentId
|
|
@@ -93,7 +94,7 @@ export function coalesceTextOperations(ops, options = {}) {
|
|
|
93
94
|
// Track the last character ID for chain validation in next merge
|
|
94
95
|
_lastCharId: currOp.id,
|
|
95
96
|
};
|
|
96
|
-
pendingInsert =
|
|
97
|
+
pendingInsert = mergedOp;
|
|
97
98
|
}
|
|
98
99
|
else {
|
|
99
100
|
// Debug: Log why merge failed
|
|
@@ -107,11 +108,11 @@ export function coalesceTextOperations(ops, options = {}) {
|
|
|
107
108
|
console.log('[coalesce] Not a YATA chain:', { currParent: currOp.parentId, prevId: prevOp.id, prevParent: prevOp.parentId, currOp: currOp.id });
|
|
108
109
|
// Can't merge - flush pending and start new
|
|
109
110
|
result.push(pendingInsert);
|
|
110
|
-
pendingInsert = {
|
|
111
|
+
pendingInsert = { ...currOp };
|
|
111
112
|
}
|
|
112
113
|
}
|
|
113
114
|
}
|
|
114
|
-
else if (op.
|
|
115
|
+
else if (op.otype === 'delete') {
|
|
115
116
|
// Flush any pending insert before handling delete
|
|
116
117
|
if (pendingInsert !== null) {
|
|
117
118
|
result.push(pendingInsert);
|
|
@@ -119,7 +120,7 @@ export function coalesceTextOperations(ops, options = {}) {
|
|
|
119
120
|
}
|
|
120
121
|
if (pendingDelete === null) {
|
|
121
122
|
// Start new pending delete
|
|
122
|
-
pendingDelete = {
|
|
123
|
+
pendingDelete = { ...op, deletions: [...op.deletions] };
|
|
123
124
|
}
|
|
124
125
|
else {
|
|
125
126
|
// Try to merge consecutive delete operations
|
|
@@ -128,12 +129,12 @@ export function coalesceTextOperations(ops, options = {}) {
|
|
|
128
129
|
const canMerge = true; // For deletes, we just merge the deletions arrays
|
|
129
130
|
if (canMerge) {
|
|
130
131
|
// Merge by combining deletions
|
|
131
|
-
pendingDelete.
|
|
132
|
+
pendingDelete.deletions.push(...op.deletions);
|
|
132
133
|
}
|
|
133
134
|
else {
|
|
134
135
|
// Can't merge - flush pending and start new
|
|
135
136
|
result.push(pendingDelete);
|
|
136
|
-
pendingDelete = {
|
|
137
|
+
pendingDelete = { ...op, deletions: [...op.deletions] };
|
|
137
138
|
}
|
|
138
139
|
}
|
|
139
140
|
}
|
|
@@ -145,7 +146,7 @@ export function coalesceTextOperations(ops, options = {}) {
|
|
|
145
146
|
}
|
|
146
147
|
if (pendingDelete !== null) {
|
|
147
148
|
// Sort and optimize deletions array before flushing
|
|
148
|
-
pendingDelete.
|
|
149
|
+
pendingDelete.deletions = sortAndOptimizeDeletions(pendingDelete.deletions);
|
|
149
150
|
result.push(pendingDelete);
|
|
150
151
|
pendingDelete = null;
|
|
151
152
|
}
|
|
@@ -158,7 +159,7 @@ export function coalesceTextOperations(ops, options = {}) {
|
|
|
158
159
|
}
|
|
159
160
|
if (pendingDelete !== null) {
|
|
160
161
|
// Sort and optimize deletions array before flushing
|
|
161
|
-
pendingDelete.
|
|
162
|
+
pendingDelete.deletions = sortAndOptimizeDeletions(pendingDelete.deletions);
|
|
162
163
|
result.push(pendingDelete);
|
|
163
164
|
}
|
|
164
165
|
return result;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"coalesceTextOperations.js","sourceRoot":"","sources":["../../src/client/coalesceTextOperations.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,WAAW,IAAI,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAOnF;;;GAGG;AACH,SAAS,wBAAwB,CAAC,SAAgD;IAChF,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAE7C,+DAA+D;IAC/D,MAAM,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QAC1C,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC1B,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC1B,IAAI,GAAG,CAAC,KAAK,KAAK,GAAG,CAAC,KAAK,EAAE,CAAC;YAC5B,OAAO,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC5C,CAAC;QACD,OAAO,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;IAC3B,CAAC,CAAC,CAAC;IAEH,OAAO,iBAAiB,CAAC,MAAM,CAAC,CAAC;AACnC,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,sBAAsB,CACpC,GAAoB,EACpB,UAA2B,EAAE;IAE7B,MAAM,EAAE,WAAW,GAAG,IAAI,EAAE,GAAG,OAAO,CAAC;IAEvC,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,GAAG,CAAC;IAEjC,MAAM,MAAM,GAAoB,EAAE,CAAC;IACnC,IAAI,aAAa,
|
|
1
|
+
{"version":3,"file":"coalesceTextOperations.js","sourceRoot":"","sources":["../../src/client/coalesceTextOperations.ts"],"names":[],"mappings":"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"}
|
|
@@ -61,7 +61,7 @@ export function createTextDocument(options) {
|
|
|
61
61
|
// Text editing operations
|
|
62
62
|
insert: (position, text) => {
|
|
63
63
|
const insertOp = ropeInsert(state.rope, position, text);
|
|
64
|
-
dispatch(s => onTextEdit(s,
|
|
64
|
+
dispatch(s => onTextEdit(s, insertOp));
|
|
65
65
|
// Schedule coalesced commit if enabled
|
|
66
66
|
if (coalescingEnabled) {
|
|
67
67
|
scheduleCoalescedCommit();
|
|
@@ -69,7 +69,7 @@ export function createTextDocument(options) {
|
|
|
69
69
|
},
|
|
70
70
|
delete: (position, length) => {
|
|
71
71
|
const deleteOp = ropeRemove(state.rope, position, length);
|
|
72
|
-
dispatch(s => onTextEdit(s,
|
|
72
|
+
dispatch(s => onTextEdit(s, deleteOp));
|
|
73
73
|
// Schedule coalesced commit if enabled
|
|
74
74
|
if (coalescingEnabled) {
|
|
75
75
|
scheduleCoalescedCommit();
|
|
@@ -79,11 +79,11 @@ export function createTextDocument(options) {
|
|
|
79
79
|
// Replace is delete + insert
|
|
80
80
|
if (length > 0) {
|
|
81
81
|
const deleteOp = ropeRemove(state.rope, position, length);
|
|
82
|
-
dispatch(s => onTextEdit(s,
|
|
82
|
+
dispatch(s => onTextEdit(s, deleteOp));
|
|
83
83
|
}
|
|
84
84
|
if (text.length > 0) {
|
|
85
85
|
const insertOp = ropeInsert(state.rope, position, text);
|
|
86
|
-
dispatch(s => onTextEdit(s,
|
|
86
|
+
dispatch(s => onTextEdit(s, insertOp));
|
|
87
87
|
}
|
|
88
88
|
// Schedule coalesced commit if enabled
|
|
89
89
|
if (coalescingEnabled) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createTextDocument.js","sourceRoot":"","sources":["../../src/client/createTextDocument.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAQtF,OAAO,EACL,sBAAsB,EACtB,UAAU,EACV,eAAe,EAEf,eAAe,EACf,mBAAmB,EACnB,QAAQ,EACR,QAAQ,EACR,kBAAkB,GACnB,MAAM,kBAAkB,CAAC;AAE1B;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAAkC;IACnE,IAAI,KAAK,GAAG,sBAAsB,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;IAC/E,MAAM,SAAS,GAAG,IAAI,GAAG,EAAc,CAAC;IACxC,IAAI,eAAe,GAAyC,IAAI,CAAC;IACjE,IAAI,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,IAAI,KAAK,CAAC;IAC3D,IAAI,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,IAAI,GAAG,CAAC;IAEzD,SAAS,QAAQ,CAAC,EAA+C;QAC/D,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;QAClB,OAAO,CAAC,aAAa,EAAE,CAAC,KAAK,CAAC,CAAC;QAC/B,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IAC9B,CAAC;IAED,SAAS,oBAAoB;QAC3B,IAAI,eAAe,EAAE,CAAC;YACpB,YAAY,CAAC,eAAe,CAAC,CAAC;YAC9B,eAAe,GAAG,IAAI,CAAC;QACzB,CAAC;IACH,CAAC;IAED,SAAS,uBAAuB;QAC9B,oBAAoB,EAAE,CAAC;QACvB,eAAe,GAAG,UAAU,CAAC,GAAG,EAAE;YAChC,eAAe,GAAG,IAAI,CAAC;YACvB,IAAI,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC/B,4DAA4D;gBAC5D,MAAM,MAAM,GAAG,eAAe,CAAC,KAAK,EAAE,kBAAkB,EAAE,iBAAiB,CAAC,CAAC;gBAC7E,QAAQ,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC7B,IAAI,MAAM,CAAC,GAAG,EAAE,CAAC;oBACf,OAAO,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;oBAC7B,OAAO,CAAC,aAAa,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBACtC,CAAC;YACH,CAAC;QACH,CAAC,EAAE,iBAAiB,CAAC,CAAC;IACxB,CAAC;IAED,OAAO;QACL,eAAe;QACf,QAAQ,EAAE,GAAG,EAAE,CAAC,KAAK;QAErB,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC;QAElC,SAAS,EAAE,CAAC,QAAoB,EAAE,EAAE;YAClC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACxB,OAAO,GAAG,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC1C,CAAC;QAED,0BAA0B;QAC1B,MAAM,EAAE,CAAC,QAAgB,EAAE,IAAY,EAAE,EAAE;YACzC,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;YACxD,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,
|
|
1
|
+
{"version":3,"file":"createTextDocument.js","sourceRoot":"","sources":["../../src/client/createTextDocument.ts"],"names":[],"mappings":"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"}
|
|
@@ -51,11 +51,11 @@ export function onTextEdit(state, op) {
|
|
|
51
51
|
edits.ops = [...edits.ops, op];
|
|
52
52
|
// Clone rope and apply operation (rope operations mutate in place)
|
|
53
53
|
const rope = cloneRope(state.rope);
|
|
54
|
-
if (op.
|
|
55
|
-
ropeApply(rope, op
|
|
54
|
+
if (op.otype === 'insert') {
|
|
55
|
+
ropeApply(rope, op);
|
|
56
56
|
}
|
|
57
|
-
else {
|
|
58
|
-
ropeApplyDelete(rope, op
|
|
57
|
+
else if (op.otype === 'delete') {
|
|
58
|
+
ropeApplyDelete(rope, op);
|
|
59
59
|
}
|
|
60
60
|
return { ...state, rope, edits };
|
|
61
61
|
}
|
|
@@ -110,11 +110,11 @@ export function cancelTextEdits(state) {
|
|
|
110
110
|
if (entry.deletedAt)
|
|
111
111
|
continue; // Skip undone entries
|
|
112
112
|
for (const op of entry.msg.operations) {
|
|
113
|
-
if (op.
|
|
114
|
-
ropeApply(rope, op
|
|
113
|
+
if (op.otype === 'insert') {
|
|
114
|
+
ropeApply(rope, op);
|
|
115
115
|
}
|
|
116
|
-
else {
|
|
117
|
-
ropeApplyDelete(rope, op
|
|
116
|
+
else if (op.otype === 'delete') {
|
|
117
|
+
ropeApplyDelete(rope, op);
|
|
118
118
|
}
|
|
119
119
|
}
|
|
120
120
|
}
|
|
@@ -142,11 +142,11 @@ export function onTextRemoteMessage(state, msg) {
|
|
|
142
142
|
// Clone rope and apply remote operations
|
|
143
143
|
const rope = cloneRope(state.rope);
|
|
144
144
|
for (const op of msg.operations) {
|
|
145
|
-
if (op.
|
|
146
|
-
ropeApply(rope, op
|
|
145
|
+
if (op.otype === 'insert') {
|
|
146
|
+
ropeApply(rope, op);
|
|
147
147
|
}
|
|
148
|
-
else {
|
|
149
|
-
ropeApplyDelete(rope, op
|
|
148
|
+
else if (op.otype === 'delete') {
|
|
149
|
+
ropeApplyDelete(rope, op);
|
|
150
150
|
}
|
|
151
151
|
}
|
|
152
152
|
const entry = {
|
|
@@ -201,11 +201,11 @@ export function undoText(state) {
|
|
|
201
201
|
if (entry.deletedAt)
|
|
202
202
|
continue;
|
|
203
203
|
for (const op of entry.msg.operations) {
|
|
204
|
-
if (op.
|
|
205
|
-
ropeApply(rope, op
|
|
204
|
+
if (op.otype === 'insert') {
|
|
205
|
+
ropeApply(rope, op);
|
|
206
206
|
}
|
|
207
|
-
else {
|
|
208
|
-
ropeApplyDelete(rope, op
|
|
207
|
+
else if (op.otype === 'delete') {
|
|
208
|
+
ropeApplyDelete(rope, op);
|
|
209
209
|
}
|
|
210
210
|
}
|
|
211
211
|
}
|
|
@@ -215,7 +215,7 @@ export function undoText(state) {
|
|
|
215
215
|
const msg = {
|
|
216
216
|
msgId: `${state.sessionId}-undo-${Date.now()}`,
|
|
217
217
|
sessionId: state.sessionId,
|
|
218
|
-
operations: [{
|
|
218
|
+
operations: [{ otype: 'delete', deletions: [] }], // Placeholder for undo marker
|
|
219
219
|
vectorClock,
|
|
220
220
|
lamportTime,
|
|
221
221
|
timestamp: Date.now(),
|
|
@@ -259,11 +259,11 @@ export function redoText(state) {
|
|
|
259
259
|
if (e.deletedAt)
|
|
260
260
|
continue;
|
|
261
261
|
for (const op of e.msg.operations) {
|
|
262
|
-
if (op.
|
|
263
|
-
ropeApply(rope, op
|
|
262
|
+
if (op.otype === 'insert') {
|
|
263
|
+
ropeApply(rope, op);
|
|
264
264
|
}
|
|
265
|
-
else {
|
|
266
|
-
ropeApplyDelete(rope, op
|
|
265
|
+
else if (op.otype === 'delete') {
|
|
266
|
+
ropeApplyDelete(rope, op);
|
|
267
267
|
}
|
|
268
268
|
}
|
|
269
269
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"textActions.js","sourceRoot":"","sources":["../../src/client/textActions.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,MAAM,IAAI,UAAU,EACpB,OAAO,EAGP,KAAK,IAAI,SAAS,EAClB,WAAW,IAAI,eAAe,EAC9B,QAAQ,IAAI,SAAS,GAEtB,MAAM,iBAAiB,CAAC;AASzB,OAAO,EAAE,kBAAkB,EAAoB,MAAM,yBAAyB,CAAC;AAC/E,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAErE,MAAM,YAAY,GAAG,IAAI,kBAAkB,EAAE,CAAC;AAE9C;;GAEG;AACH,MAAM,UAAU,sBAAsB,CACpC,SAAiB,EACjB,eAA8B;IAE9B,IAAI,eAAe,EAAE,CAAC;QACpB,OAAO;YACL,IAAI,EAAE,eAAe,CAAC,IAAI;YAC1B,OAAO,EAAE,EAAE;YACX,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;YAClC,QAAQ,EAAE,eAAe;YACzB,WAAW,EAAE,eAAe,CAAC,WAAW;YACxC,WAAW,EAAE,EAAE,GAAG,eAAe,CAAC,WAAW,EAAE;YAC/C,SAAS;SACV,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;IACnC,OAAO;QACL,IAAI;QACJ,OAAO,EAAE,EAAE;QACX,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;QAClC,QAAQ,EAAE;YACR,IAAI;YACJ,WAAW,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE;YAC/B,WAAW,EAAE,CAAC;YACd,YAAY,EAAE,CAAC;SAChB;QACD,WAAW,EAAE,CAAC;QACd,WAAW,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE;QAC/B,SAAS;KACV,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CACxB,KAAwB,EACxB,EAAiB;IAEjB,MAAM,KAAK,GAAG,EAAE,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;IAEjC,wCAAwC;IACxC,IAAI,KAAK,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC;IAED,KAAK,CAAC,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IAE/B,mEAAmE;IACnE,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACnC,IAAI,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"textActions.js","sourceRoot":"","sources":["../../src/client/textActions.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,18 +6,12 @@
|
|
|
6
6
|
* - journal: committed text operations with ack and deletedAt
|
|
7
7
|
* - edits: uncommitted text operations (edit buffer)
|
|
8
8
|
*/
|
|
9
|
-
import type { TextRope, InsertOp, DeleteOp } from '../crdt/Rope.js';
|
|
9
|
+
import type { TextRope, InsertOp, DeleteOp, ReplaceOp } from '../crdt/Rope.js';
|
|
10
10
|
import type { VectorClock } from '../state/VectorClock.js';
|
|
11
11
|
/**
|
|
12
|
-
* Text operation types
|
|
12
|
+
* Text operation types - no wrapper needed since ops have otype discriminator
|
|
13
13
|
*/
|
|
14
|
-
export type TextOperation =
|
|
15
|
-
type: 'insert';
|
|
16
|
-
op: InsertOp;
|
|
17
|
-
} | {
|
|
18
|
-
type: 'delete';
|
|
19
|
-
op: DeleteOp;
|
|
20
|
-
};
|
|
14
|
+
export type TextOperation = InsertOp | DeleteOp | ReplaceOp;
|
|
21
15
|
/**
|
|
22
16
|
* Text message - a batch of text operations with CRDT metadata
|
|
23
17
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"textTypes.d.ts","sourceRoot":"","sources":["../../src/client/textTypes.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"textTypes.d.ts","sourceRoot":"","sources":["../../src/client/textTypes.ts"],"names":[],"mappings":"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"}
|
package/dist/crdt/BTree.d.ts
CHANGED
|
@@ -20,13 +20,13 @@ export interface Counts {
|
|
|
20
20
|
totalItems: number;
|
|
21
21
|
}
|
|
22
22
|
export interface LeafNode {
|
|
23
|
-
|
|
23
|
+
ntype: 'leaf';
|
|
24
24
|
items: TreeItem[];
|
|
25
25
|
counts: Counts;
|
|
26
26
|
parent: InternalNode | null;
|
|
27
27
|
}
|
|
28
28
|
export interface InternalNode {
|
|
29
|
-
|
|
29
|
+
ntype: 'internal';
|
|
30
30
|
children: TreeNode[];
|
|
31
31
|
childCounts: Counts[];
|
|
32
32
|
counts: Counts;
|
package/dist/crdt/BTree.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BTree.d.ts","sourceRoot":"","sources":["../../src/crdt/BTree.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAMH,uEAAuE;AACvE,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,MAAM;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,QAAQ;IACvB,
|
|
1
|
+
{"version":3,"file":"BTree.d.ts","sourceRoot":"","sources":["../../src/crdt/BTree.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAMH,uEAAuE;AACvE,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,MAAM;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,YAAY,GAAG,IAAI,CAAC;CAC7B;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,UAAU,CAAC;IAClB,QAAQ,EAAE,QAAQ,EAAE,CAAC;IACrB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,YAAY,GAAG,IAAI,CAAC;CAC7B;AAED,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,YAAY,CAAC;AAE/C,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,QAAQ,CAAC;IACf,SAAS,EAAE,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;CACxC;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,QAAQ,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACpB;AAyND,wBAAgB,UAAU,IAAI,QAAQ,CAQrC;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,QAAQ,CAqDpD;AAMD;;GAEG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,IAAI,CAW9E;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,QAAQ,EACd,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,QAAQ,GAClB,IAAI,CAaN;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,GAAG,IAAI,CAKpE;AAMD;;GAEG;AACH,wBAAgB,KAAK,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,GAAG,QAAQ,CAG/D;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAEpD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAEjD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,QAAQ,EACd,OAAO,EAAE,MAAM,GACd,gBAAgB,GAAG,IAAI,CA4BzB;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,GAAG,MAAM,CAqBrE;AAMD;;GAEG;AACH,wBAAiB,UAAU,CAAC,IAAI,EAAE,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC,CAE/D;AAYD;;GAEG;AACH,wBAAiB,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,CAYtF;AAuBD;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,QAAQ,GAAG,QAAQ,EAAE,CAIvD"}
|
package/dist/crdt/BTree.js
CHANGED
|
@@ -41,7 +41,7 @@ function sumChildCounts(childCounts) {
|
|
|
41
41
|
* Returns the accumulated ordinal prefix for computing the global ordinal.
|
|
42
42
|
*/
|
|
43
43
|
function findLeafByOrdinal(node, ordinal) {
|
|
44
|
-
while (node.
|
|
44
|
+
while (node.ntype === 'internal') {
|
|
45
45
|
let remaining = ordinal;
|
|
46
46
|
let found = false;
|
|
47
47
|
for (let i = 0; i < node.children.length; i++) {
|
|
@@ -58,7 +58,7 @@ function findLeafByOrdinal(node, ordinal) {
|
|
|
58
58
|
// Ordinal at the very end — go to last child
|
|
59
59
|
const internal = node;
|
|
60
60
|
node = internal.children[internal.children.length - 1];
|
|
61
|
-
ordinal = node.
|
|
61
|
+
ordinal = node.ntype === 'leaf' ? node.items.length : node.counts.totalItems;
|
|
62
62
|
}
|
|
63
63
|
}
|
|
64
64
|
return { leaf: node, localIdx: ordinal };
|
|
@@ -69,7 +69,7 @@ function findLeafByOrdinal(node, ordinal) {
|
|
|
69
69
|
*/
|
|
70
70
|
function findLeafByVisiblePos(node, charPos) {
|
|
71
71
|
let ordinalPrefix = 0;
|
|
72
|
-
while (node.
|
|
72
|
+
while (node.ntype === 'internal') {
|
|
73
73
|
let remaining = charPos;
|
|
74
74
|
for (let i = 0; i < node.children.length; i++) {
|
|
75
75
|
const vis = node.childCounts[i].visChars;
|
|
@@ -111,7 +111,7 @@ function updateCountsUp(leaf) {
|
|
|
111
111
|
function splitLeaf(tree, leaf) {
|
|
112
112
|
const rightItems = leaf.items.splice(LEAF_SPLIT);
|
|
113
113
|
const rightLeaf = {
|
|
114
|
-
|
|
114
|
+
ntype: 'leaf',
|
|
115
115
|
items: rightItems,
|
|
116
116
|
counts: leafCounts(rightItems),
|
|
117
117
|
parent: null, // set below
|
|
@@ -131,7 +131,7 @@ function insertChildAfter(tree, leftChild, rightChild) {
|
|
|
131
131
|
if (!parent) {
|
|
132
132
|
// Create new root
|
|
133
133
|
const newRoot = {
|
|
134
|
-
|
|
134
|
+
ntype: 'internal',
|
|
135
135
|
children: [leftChild, rightChild],
|
|
136
136
|
childCounts: [leftChild.counts, rightChild.counts],
|
|
137
137
|
counts: { visChars: 0, totalItems: 0 },
|
|
@@ -186,7 +186,7 @@ function splitInternal(tree, node) {
|
|
|
186
186
|
const rightChildren = node.children.splice(INTERNAL_SPLIT);
|
|
187
187
|
const rightCounts = node.childCounts.splice(INTERNAL_SPLIT);
|
|
188
188
|
const rightNode = {
|
|
189
|
-
|
|
189
|
+
ntype: 'internal',
|
|
190
190
|
children: rightChildren,
|
|
191
191
|
childCounts: rightCounts,
|
|
192
192
|
counts: sumChildCounts(rightCounts),
|
|
@@ -204,7 +204,7 @@ function splitInternal(tree, node) {
|
|
|
204
204
|
// ============================================
|
|
205
205
|
export function createTree() {
|
|
206
206
|
const leaf = {
|
|
207
|
-
|
|
207
|
+
ntype: 'leaf',
|
|
208
208
|
items: [],
|
|
209
209
|
counts: { visChars: 0, totalItems: 0 },
|
|
210
210
|
parent: null,
|
|
@@ -217,7 +217,7 @@ export function createTree() {
|
|
|
217
217
|
export function bulkLoad(items) {
|
|
218
218
|
const tree = { root: null, _itemLeaf: new WeakMap() };
|
|
219
219
|
if (items.length === 0) {
|
|
220
|
-
tree.root = {
|
|
220
|
+
tree.root = { ntype: 'leaf', items: [], counts: { visChars: 0, totalItems: 0 }, parent: null };
|
|
221
221
|
return tree;
|
|
222
222
|
}
|
|
223
223
|
// Create leaves
|
|
@@ -225,7 +225,7 @@ export function bulkLoad(items) {
|
|
|
225
225
|
for (let i = 0; i < items.length; i += MAX_LEAF) {
|
|
226
226
|
const chunk = items.slice(i, Math.min(i + MAX_LEAF, items.length));
|
|
227
227
|
const leaf = {
|
|
228
|
-
|
|
228
|
+
ntype: 'leaf',
|
|
229
229
|
items: chunk,
|
|
230
230
|
counts: leafCounts(chunk),
|
|
231
231
|
parent: null,
|
|
@@ -247,7 +247,7 @@ export function bulkLoad(items) {
|
|
|
247
247
|
const children = currentLevel.slice(i, Math.min(i + MAX_INTERNAL, currentLevel.length));
|
|
248
248
|
const childCounts = children.map(c => ({ ...c.counts }));
|
|
249
249
|
const node = {
|
|
250
|
-
|
|
250
|
+
ntype: 'internal',
|
|
251
251
|
children,
|
|
252
252
|
childCounts,
|
|
253
253
|
counts: sumChildCounts(childCounts),
|
|
@@ -395,7 +395,7 @@ export function* iterateAll(tree) {
|
|
|
395
395
|
yield* iterateNode(tree.root);
|
|
396
396
|
}
|
|
397
397
|
function* iterateNode(node) {
|
|
398
|
-
if (node.
|
|
398
|
+
if (node.ntype === 'leaf') {
|
|
399
399
|
yield* node.items;
|
|
400
400
|
}
|
|
401
401
|
else {
|
|
@@ -447,7 +447,7 @@ export function flattenItems(tree) {
|
|
|
447
447
|
return result;
|
|
448
448
|
}
|
|
449
449
|
function collectItems(node, result) {
|
|
450
|
-
if (node.
|
|
450
|
+
if (node.ntype === 'leaf') {
|
|
451
451
|
for (let i = 0; i < node.items.length; i++) {
|
|
452
452
|
result.push(node.items[i]);
|
|
453
453
|
}
|