[web] avoid accessing the sharejs snapshot directly (#25037)

* [web] avoid accessing the sharejs snapshot directly

* [web] limit API interface for sharejs types

GitOrigin-RevId: faece372128e4580376e32fa93aa8fedf1e02957
This commit is contained in:
Jakob Ackermann
2025-04-23 09:22:01 +01:00
committed by Copybot
parent ceec16314e
commit ead78d49ea
4 changed files with 8 additions and 10 deletions

View File

@@ -580,7 +580,7 @@ export const EditorManagerProvider: FC = ({ children }) => {
editorContent =
typeof editorContent === 'string'
? editorContent
: document.doc?._doc.snapshot
: document.getSnapshot()
// Tear down the ShareJsDoc.
if (document.doc) document.doc.clearInflightAndPendingOps()

View File

@@ -60,7 +60,7 @@ export const ReferencesProvider: FC = ({ children }) => {
// avoid reindexing references if the bib file has not changed since the
// last time they were indexed
const docId = doc.doc_id
const snapshot = doc._doc.snapshot
const snapshot = doc.getSnapshot()
const now = Date.now()
const sha1 = generateSHA1Hash(
'blob ' + snapshot.length + '\x00' + snapshot

View File

@@ -142,11 +142,8 @@ export class ShareJsDoc extends EventEmitter {
private removeCarriageReturnCharFromShareJsDoc() {
const doc = this._doc
if (doc.snapshot.indexOf('\r') === -1) {
return
}
let nextPos
while ((nextPos = doc.snapshot.indexOf('\r')) !== -1) {
while ((nextPos = doc.getText().indexOf('\r')) !== -1) {
debugConsole.log('[ShareJsDoc] remove-carriage-return-char', nextPos)
doc.del(nextPos, 1)
}
@@ -259,7 +256,7 @@ export class ShareJsDoc extends EventEmitter {
}
getSnapshot() {
return this._doc.snapshot as string | undefined
return this._doc.getText() as string
}
getVersion() {

View File

@@ -1008,8 +1008,8 @@ export const { Doc } = (() => {
this.type = type;
if (type.api) {
for (var k in type.api) {
var v = type.api[k];this[k] = v;
for (const k of ['insert', 'del', 'getText', 'getLength', '_register']) {
this[k] = type.api[k]
}
return typeof this._register === 'function' ? this._register() : undefined;
} else {
@@ -1322,7 +1322,8 @@ export const { Doc } = (() => {
var needToRecomputeHash = !this.__lastSubmitTimestamp || (age > RECOMPUTE_HASH_INTERVAL) || (age < 0)
if (needToRecomputeHash || debugging) {
// send git hash of current snapshot
var sha1 = generateSHA1Hash("blob " + this.snapshot.length + "\x00" + this.snapshot)
const str = this.getText()
var sha1 = generateSHA1Hash("blob " + str.length + "\x00" + str)
this.__lastSubmitTimestamp = now;
}
}