@kernhq/module-quire 0.7.3 → 0.8.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/dist/server/document.d.ts +13 -0
- package/dist/server/document.d.ts.map +1 -0
- package/dist/server/document.js +58 -0
- package/dist/server/document.js.map +1 -0
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +26 -1
- package/dist/server/index.js.map +1 -1
- package/dist/server/render.d.ts +53 -0
- package/dist/server/render.d.ts.map +1 -0
- package/dist/server/render.js +358 -0
- package/dist/server/render.js.map +1 -0
- package/dist/server/services/versions.d.ts.map +1 -1
- package/dist/server/services/versions.js +13 -1
- package/dist/server/services/versions.js.map +1 -1
- package/package.json +10 -6
- package/src/client/components/PageEditor.svelte +7 -0
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { PageDoc } from '@kernhq/ui/editor/page-doc';
|
|
2
|
+
/**
|
|
3
|
+
* Decode a stored state into a page document.
|
|
4
|
+
*
|
|
5
|
+
* Returns null rather than throwing when the bytes will not decode. Every caller is doing something
|
|
6
|
+
* *alongside* its real job — taking a version, mirroring search text — and none of them should fail
|
|
7
|
+
* because a document is unreadable. A version that records no HTML is a small loss; a version that
|
|
8
|
+
* was never taken is somebody's afternoon.
|
|
9
|
+
*/
|
|
10
|
+
export declare function pageDocFromState(state: Uint8Array | Buffer | null | undefined): PageDoc | null;
|
|
11
|
+
/** The same thing from what `collab.document.snapshot` and `.state` return, which is base64. */
|
|
12
|
+
export declare function pageDocFromBase64(state: string | null | undefined): PageDoc | null;
|
|
13
|
+
//# sourceMappingURL=document.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"document.d.ts","sourceRoot":"","sources":["../../src/server/document.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAyBzD;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,GAAG,IAAI,CAa9F;AAED,gGAAgG;AAChG,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,GAAG,IAAI,CAOlF"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { yDocToProsemirrorJSON } from '@tiptap/y-tiptap';
|
|
2
|
+
import * as Y from 'yjs';
|
|
3
|
+
/**
|
|
4
|
+
* Yjs bytes to the JSON the renderer reads.
|
|
5
|
+
*
|
|
6
|
+
* The server has never had a page's prose in a shape it could do anything with. `page_versions`
|
|
7
|
+
* stores `Y.encodeStateAsUpdate` — a CRDT update, not a document — and the only thing that knew how
|
|
8
|
+
* to turn that into blocks was the editor, in a browser. This is the bridge, and it is what makes
|
|
9
|
+
* publishing, exporting and honest search snippets possible at all.
|
|
10
|
+
*
|
|
11
|
+
* It needs no ProseMirror schema, which is the part worth knowing: the Yjs tree already carries the
|
|
12
|
+
* node names and attributes, so a service that has never loaded Tiptap can read a document written
|
|
13
|
+
* by one that has.
|
|
14
|
+
*/
|
|
15
|
+
/**
|
|
16
|
+
* The shared field the editor writes into.
|
|
17
|
+
*
|
|
18
|
+
* Not a guess: `collab.ts` in @kernhq/ui configures `Collaboration` with no `field`, and its default
|
|
19
|
+
* is `default`. Change one and this stops returning anything — silently, as an empty document.
|
|
20
|
+
*/
|
|
21
|
+
const FIELD = 'default';
|
|
22
|
+
/**
|
|
23
|
+
* Decode a stored state into a page document.
|
|
24
|
+
*
|
|
25
|
+
* Returns null rather than throwing when the bytes will not decode. Every caller is doing something
|
|
26
|
+
* *alongside* its real job — taking a version, mirroring search text — and none of them should fail
|
|
27
|
+
* because a document is unreadable. A version that records no HTML is a small loss; a version that
|
|
28
|
+
* was never taken is somebody's afternoon.
|
|
29
|
+
*/
|
|
30
|
+
export function pageDocFromState(state) {
|
|
31
|
+
if (!state || state.length === 0)
|
|
32
|
+
return null;
|
|
33
|
+
const doc = new Y.Doc();
|
|
34
|
+
try {
|
|
35
|
+
Y.applyUpdate(doc, state instanceof Uint8Array ? state : new Uint8Array(state));
|
|
36
|
+
const json = yDocToProsemirrorJSON(doc, FIELD);
|
|
37
|
+
// An untouched document decodes to a doc with no content, which is not worth storing as one.
|
|
38
|
+
return Array.isArray(json?.content) && json.content.length > 0 ? json : null;
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
43
|
+
finally {
|
|
44
|
+
doc.destroy();
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
/** The same thing from what `collab.document.snapshot` and `.state` return, which is base64. */
|
|
48
|
+
export function pageDocFromBase64(state) {
|
|
49
|
+
if (!state)
|
|
50
|
+
return null;
|
|
51
|
+
try {
|
|
52
|
+
return pageDocFromState(Buffer.from(state, 'base64'));
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
return null;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=document.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"document.js","sourceRoot":"","sources":["../../src/server/document.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAA;AACxD,OAAO,KAAK,CAAC,MAAM,KAAK,CAAA;AAExB;;;;;;;;;;;GAWG;AAEH;;;;;GAKG;AACH,MAAM,KAAK,GAAG,SAAS,CAAA;AAEvB;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAA6C;IAC5E,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAA;IAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,GAAG,EAAE,CAAA;IACvB,IAAI,CAAC;QACH,CAAC,CAAC,WAAW,CAAC,GAAG,EAAE,KAAK,YAAY,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,CAAA;QAC/E,MAAM,IAAI,GAAG,qBAAqB,CAAC,GAAG,EAAE,KAAK,CAAY,CAAA;QACzD,6FAA6F;QAC7F,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAA;IAC9E,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAA;IACb,CAAC;YAAS,CAAC;QACT,GAAG,CAAC,OAAO,EAAE,CAAA;IACf,CAAC;AACH,CAAC;AAED,gGAAgG;AAChG,MAAM,UAAU,iBAAiB,CAAC,KAAgC;IAChE,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAA;IACvB,IAAI,CAAC;QACH,OAAO,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAA;IACvD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AA6DA,eAAO,MAAM,WAAW,2IAqRtB,CAAA;AAEF,eAAe,WAAW,CAAA"}
|
package/dist/server/index.js
CHANGED
|
@@ -5,6 +5,8 @@ import { KernError } from '@kernhq/kernel';
|
|
|
5
5
|
import { and, asc, eq, gt, inArray, isNull } from 'drizzle-orm';
|
|
6
6
|
import { MODULE_ID, quireCapabilities, quireContract, quireEvents, quireNotificationTypes, quirePermissions, } from '../contract/index.js';
|
|
7
7
|
import { defineModule, defineServerModule, implement_, packageVersion } from './_impl.js';
|
|
8
|
+
import { pageDocFromBase64 } from './document.js';
|
|
9
|
+
import { textFromPageDoc } from './render.js';
|
|
8
10
|
import { pages, schema, spaces } from './schema.js';
|
|
9
11
|
import { quireServices } from './services/index.js';
|
|
10
12
|
import { createNotify } from './services/notify.js';
|
|
@@ -176,6 +178,29 @@ export const quireModule = defineServerModule({
|
|
|
176
178
|
if (payload.module !== MODULE_ID || payload.type !== 'page')
|
|
177
179
|
return;
|
|
178
180
|
const svc = quireServices(kernel);
|
|
181
|
+
/*
|
|
182
|
+
* `payload.text` is not used, and that is the whole point of this call.
|
|
183
|
+
*
|
|
184
|
+
* The collab service flattens a document by calling `toString()` on each `Y.XmlText`, which
|
|
185
|
+
* renders marks *as markup* — so a page holding a single link contributed
|
|
186
|
+
* `<link class="null" href="…" rel="noopener noreferrer nofollow" target="_blank">` to the
|
|
187
|
+
* search body, and every page in the workspace matched a search for "noopener". Fetching the
|
|
188
|
+
* state and flattening it properly costs one call per open document per snapshot interval,
|
|
189
|
+
* which defaults to five minutes.
|
|
190
|
+
*
|
|
191
|
+
* The published text stays as the fallback: a collab hiccup should leave the search body
|
|
192
|
+
* as it was rather than empty it.
|
|
193
|
+
*/
|
|
194
|
+
const flattened = await svc.versions
|
|
195
|
+
.documentState(payload.workspaceId, payload.objectId)
|
|
196
|
+
.then((state) => {
|
|
197
|
+
const decoded = pageDocFromBase64(state.state);
|
|
198
|
+
return decoded ? textFromPageDoc(decoded) : null;
|
|
199
|
+
})
|
|
200
|
+
.catch((err) => {
|
|
201
|
+
kernel.log.warn({ err: String(err), pageId: payload.objectId }, 'could not flatten the document');
|
|
202
|
+
return null;
|
|
203
|
+
});
|
|
179
204
|
await kernel.database.withWorkspace(payload.workspaceId, async (tx) => {
|
|
180
205
|
const [page] = await tx
|
|
181
206
|
.select()
|
|
@@ -188,7 +213,7 @@ export const quireModule = defineServerModule({
|
|
|
188
213
|
await tx
|
|
189
214
|
.update(pages)
|
|
190
215
|
.set({
|
|
191
|
-
text: payload.text,
|
|
216
|
+
text: flattened ?? payload.text,
|
|
192
217
|
// A `page` diverges from what readers see; a `live` doc has nothing to diverge from.
|
|
193
218
|
hasUnpublishedChanges: page.kind === 'page' && page.publishedVersionId !== null ? true : page.hasUnpublishedChanges,
|
|
194
219
|
updatedAt: new Date(),
|
package/dist/server/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import type { PageDoc, PageDocNode } from '@kernhq/ui/editor/page-doc';
|
|
2
|
+
/** Both quote characters, so an escaped value is safe in an attribute however it is quoted. */
|
|
3
|
+
export declare const escapeHtml: (value: string) => string;
|
|
4
|
+
export declare function safeHref(href: unknown): string | null;
|
|
5
|
+
export interface RenderOptions {
|
|
6
|
+
/**
|
|
7
|
+
* Turn a stored file id into something a reader's browser can fetch.
|
|
8
|
+
*
|
|
9
|
+
* Injected rather than resolved here, because there is no one right answer. The app signs a
|
|
10
|
+
* short-lived URL per render; a page published to the public internet needs something that
|
|
11
|
+
* outlives a session. A picture whose id cannot be resolved is dropped rather than rendered as
|
|
12
|
+
* a broken image.
|
|
13
|
+
*/
|
|
14
|
+
fileSrc?: (fileId: string) => string | null;
|
|
15
|
+
/**
|
|
16
|
+
* Turn a page id into a link. The renderer does not know a page's space key, and a wrong link is
|
|
17
|
+
* worse than none — without this a page mention degrades to a plain, still-readable label.
|
|
18
|
+
*/
|
|
19
|
+
pageHref?: (pageId: string) => string | null;
|
|
20
|
+
}
|
|
21
|
+
type NodeRenderer = (node: PageDocNode, children: string, options: RenderOptions) => string;
|
|
22
|
+
type MarkRenderer = (html: string, attrs: Record<string, unknown> | null | undefined) => string;
|
|
23
|
+
/**
|
|
24
|
+
* The mark table.
|
|
25
|
+
*
|
|
26
|
+
* A mark this does not know is dropped and its text kept, which is the correct failure: the
|
|
27
|
+
* sentence still reads, it just is not bold.
|
|
28
|
+
*/
|
|
29
|
+
export declare const MARK_RENDERERS: Record<string, MarkRenderer>;
|
|
30
|
+
/**
|
|
31
|
+
* The node table.
|
|
32
|
+
*
|
|
33
|
+
* A `Record` rather than a `switch`, so the test can compare *this object* against the schema's
|
|
34
|
+
* node list. A switch would force the test to restate its cases, and a test that restates what it
|
|
35
|
+
* checks is a second copy that drifts rather than a check.
|
|
36
|
+
*
|
|
37
|
+
* `doc` and `text` are not here; they are the two the walker handles itself.
|
|
38
|
+
*/
|
|
39
|
+
export declare const NODE_RENDERERS: Record<string, NodeRenderer>;
|
|
40
|
+
/** Sanitised HTML for a stored page. An empty or missing document renders as an empty string. */
|
|
41
|
+
export declare function renderPageDoc(doc: PageDoc | null | undefined, options?: RenderOptions): string;
|
|
42
|
+
/**
|
|
43
|
+
* The same document as plain text, for the search index and for previews.
|
|
44
|
+
*
|
|
45
|
+
* This exists because the flatten it replaces is wrong in a way nobody could see. `collab`'s
|
|
46
|
+
* `extractText` walks the Yjs tree and calls `toString()` on each `Y.XmlText`, which renders marks
|
|
47
|
+
* *as markup* — so a page containing one link put
|
|
48
|
+
* `<link class="null" href="…" rel="noreferrer noopener" target="_blank">` into the search body,
|
|
49
|
+
* and every page in the workspace matched a search for "noopener".
|
|
50
|
+
*/
|
|
51
|
+
export declare function textFromPageDoc(doc: PageDoc | null | undefined): string;
|
|
52
|
+
export {};
|
|
53
|
+
//# sourceMappingURL=render.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/server/render.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAe,WAAW,EAAE,MAAM,4BAA4B,CAAA;AA8BnF,+FAA+F;AAC/F,eAAO,MAAM,UAAU,GAAI,OAAO,MAAM,KAAG,MAAgE,CAAA;AAsC3G,wBAAgB,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAerD;AAsBD,MAAM,WAAW,aAAa;IAC5B;;;;;;;OAOG;IACH,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAA;IAC3C;;;OAGG;IACH,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAA;CAC7C;AAED,KAAK,YAAY,GAAG,CAAC,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,KAAK,MAAM,CAAA;AAC3F,KAAK,YAAY,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG,SAAS,KAAK,MAAM,CAAA;AAQ/F;;;;;GAKG;AACH,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAavD,CAAA;AAgCD;;;;;;;;GAQG;AACH,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CA4HvD,CAAA;AAeD,iGAAiG;AACjG,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,GAAG,SAAS,EAAE,OAAO,GAAE,aAAkB,GAAG,MAAM,CAGlG;AAoBD;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAqCvE"}
|
|
@@ -0,0 +1,358 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A page, drawn outside the browser.
|
|
3
|
+
*
|
|
4
|
+
* Everything that is not the editor needs this: publishing a page to a reader, exporting it,
|
|
5
|
+
* putting a snippet in a search result, mailing a digest. None of those has a DOM, so none of them
|
|
6
|
+
* could see a page at all before — the prose lives in a Yjs document, and the only thing that knew
|
|
7
|
+
* how to draw it was Tiptap.
|
|
8
|
+
*
|
|
9
|
+
* The rule this file exists to keep is the one in `@kernhq/ui`'s `schema.ts`: **the read side must
|
|
10
|
+
* be able to draw everything the writer can produce.** A node the editor emits and this file has no
|
|
11
|
+
* case for does not render as something plain — it vanishes, and the writer finds out from a reader.
|
|
12
|
+
* `render.test.ts` compares the dispatch tables below against `PAGE_DOC_NODES` and `PAGE_DOC_MARKS`
|
|
13
|
+
* in both directions, so a node with no renderer fails, and so does a renderer for a node that no
|
|
14
|
+
* longer exists.
|
|
15
|
+
*
|
|
16
|
+
* The output is safe to hand to `{@html}` or to write into a response. Every piece of text and
|
|
17
|
+
* every attribute value is escaped, anything that reaches a URL goes through `safeHref`, and
|
|
18
|
+
* everything numeric is parsed as a number rather than interpolated.
|
|
19
|
+
*/
|
|
20
|
+
const ESCAPES = {
|
|
21
|
+
'&': '&',
|
|
22
|
+
'<': '<',
|
|
23
|
+
'>': '>',
|
|
24
|
+
'"': '"',
|
|
25
|
+
"'": ''',
|
|
26
|
+
};
|
|
27
|
+
/** Both quote characters, so an escaped value is safe in an attribute however it is quoted. */
|
|
28
|
+
export const escapeHtml = (value) => value.replace(/[&<>"']/g, (c) => ESCAPES[c]);
|
|
29
|
+
const ALLOWED_PROTOCOLS = new Set(['http:', 'https:', 'mailto:']);
|
|
30
|
+
/**
|
|
31
|
+
* The only hrefs that reach the page.
|
|
32
|
+
*
|
|
33
|
+
* Stricter than the tracker's client renderer, deliberately. That one is `/^(https?:|mailto:|\/)/i`,
|
|
34
|
+
* which accepts `//evil.example` — a protocol-relative href inherits the page's scheme and leaves
|
|
35
|
+
* the site entirely, so it is an off-site link wearing the costume of a local one.
|
|
36
|
+
*
|
|
37
|
+
* The cleaning step is not cosmetic either. A browser strips tab, newline and carriage return from
|
|
38
|
+
* anywhere in a URL and trims leading control characters before deciding what protocol it is, so
|
|
39
|
+
* `java	script:alert(1)` navigates to `javascript:`. This has to reach the same verdict the
|
|
40
|
+
* browser will, or the check is reading a different string from the one that runs.
|
|
41
|
+
*/
|
|
42
|
+
/**
|
|
43
|
+
* What the URL parser throws away before it looks at a URL, done by hand.
|
|
44
|
+
*
|
|
45
|
+
* Character codes rather than a regex, because the characters in question are control characters:
|
|
46
|
+
* a regex holding them is unreadable, and Biome refuses one on sight. Two rules, and they are not
|
|
47
|
+
* the same rule — everything up to and including a space is stripped from *the ends*, and tab,
|
|
48
|
+
* line feed and carriage return are removed from *anywhere*.
|
|
49
|
+
*/
|
|
50
|
+
function stripUrlNoise(raw) {
|
|
51
|
+
let start = 0;
|
|
52
|
+
let end = raw.length;
|
|
53
|
+
while (start < end && raw.charCodeAt(start) <= 0x20)
|
|
54
|
+
start++;
|
|
55
|
+
while (end > start && raw.charCodeAt(end - 1) <= 0x20)
|
|
56
|
+
end--;
|
|
57
|
+
let out = '';
|
|
58
|
+
for (let i = start; i < end; i++) {
|
|
59
|
+
const code = raw.charCodeAt(i);
|
|
60
|
+
if (code === 0x09 || code === 0x0a || code === 0x0d)
|
|
61
|
+
continue;
|
|
62
|
+
out += raw[i];
|
|
63
|
+
}
|
|
64
|
+
return out;
|
|
65
|
+
}
|
|
66
|
+
export function safeHref(href) {
|
|
67
|
+
if (typeof href !== 'string')
|
|
68
|
+
return null;
|
|
69
|
+
const cleaned = stripUrlNoise(href);
|
|
70
|
+
if (!cleaned)
|
|
71
|
+
return null;
|
|
72
|
+
// A fragment stays on this page — that is what a table of contents links to.
|
|
73
|
+
if (cleaned.startsWith('#'))
|
|
74
|
+
return cleaned;
|
|
75
|
+
if (cleaned.startsWith('//'))
|
|
76
|
+
return null;
|
|
77
|
+
// A root-relative path is a link inside the app, e.g. `/quire/ENG/<id>`.
|
|
78
|
+
if (cleaned.startsWith('/'))
|
|
79
|
+
return cleaned;
|
|
80
|
+
try {
|
|
81
|
+
return ALLOWED_PROTOCOLS.has(new URL(cleaned).protocol) ? cleaned : null;
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
// Anything that is not a URL at all, including a bare relative path we cannot resolve.
|
|
85
|
+
return null;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
/** An attribute we generated ourselves is still checked: it arrived as document JSON. */
|
|
89
|
+
const ID_PATTERN = /^[A-Za-z0-9_-]{1,64}$/;
|
|
90
|
+
const LANGUAGE_PATTERN = /^[a-z0-9#+.-]{1,24}$/i;
|
|
91
|
+
const safeId = (value) => typeof value === 'string' && ID_PATTERN.test(value) ? value : null;
|
|
92
|
+
/** A whole number in a sane range, or nothing. Never the string that was in the document. */
|
|
93
|
+
function safeInt(value, min, max) {
|
|
94
|
+
const n = typeof value === 'number' ? value : Number.parseInt(String(value ?? ''), 10);
|
|
95
|
+
if (!Number.isFinite(n) || !Number.isInteger(n) || n < min || n > max)
|
|
96
|
+
return null;
|
|
97
|
+
return n;
|
|
98
|
+
}
|
|
99
|
+
const attr = (name, value) => value === null || value === undefined || value === '' ? '' : ` ${name}="${escapeHtml(String(value))}"`;
|
|
100
|
+
/** `id` when the writer's editor stamped one, so a heading can be linked to. */
|
|
101
|
+
const idAttr = (node) => attr('id', safeId(node.attrs?.id));
|
|
102
|
+
/** Every character in the node, ignoring marks. What a `<pre>` wants. */
|
|
103
|
+
function textOf(node) {
|
|
104
|
+
if (typeof node.text === 'string')
|
|
105
|
+
return node.text;
|
|
106
|
+
return (node.content ?? []).map(textOf).join('');
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* The mark table.
|
|
110
|
+
*
|
|
111
|
+
* A mark this does not know is dropped and its text kept, which is the correct failure: the
|
|
112
|
+
* sentence still reads, it just is not bold.
|
|
113
|
+
*/
|
|
114
|
+
export const MARK_RENDERERS = {
|
|
115
|
+
bold: (html) => `<strong>${html}</strong>`,
|
|
116
|
+
italic: (html) => `<em>${html}</em>`,
|
|
117
|
+
strike: (html) => `<s>${html}</s>`,
|
|
118
|
+
underline: (html) => `<u>${html}</u>`,
|
|
119
|
+
code: (html) => `<code>${html}</code>`,
|
|
120
|
+
highlight: (html) => `<mark class="kern-highlight">${html}</mark>`,
|
|
121
|
+
link: (html, attrs) => {
|
|
122
|
+
const href = safeHref(attrs?.href);
|
|
123
|
+
// No `<a>` at all rather than a dead one: a link that cannot navigate must not look like it can.
|
|
124
|
+
if (!href)
|
|
125
|
+
return html;
|
|
126
|
+
return `<a href="${escapeHtml(href)}" rel="noreferrer noopener" target="_blank">${html}</a>`;
|
|
127
|
+
},
|
|
128
|
+
};
|
|
129
|
+
function renderMarks(html, marks) {
|
|
130
|
+
let out = html;
|
|
131
|
+
for (const mark of marks ?? []) {
|
|
132
|
+
const render = MARK_RENDERERS[mark?.type ?? ''];
|
|
133
|
+
if (render)
|
|
134
|
+
out = render(out, mark.attrs);
|
|
135
|
+
}
|
|
136
|
+
return out;
|
|
137
|
+
}
|
|
138
|
+
/** `<td>` and `<th>` differ only in the tag, so the attributes are written once. */
|
|
139
|
+
function cell(tag, node, children) {
|
|
140
|
+
const colspan = safeInt(node.attrs?.colspan, 1, 1000);
|
|
141
|
+
const rowspan = safeInt(node.attrs?.rowspan, 1, 1000);
|
|
142
|
+
const widths = Array.isArray(node.attrs?.colwidth)
|
|
143
|
+
? node.attrs.colwidth.map((w) => safeInt(w, 1, 10000)).filter((w) => w !== null)
|
|
144
|
+
: [];
|
|
145
|
+
const align = ['start', 'center', 'end'].includes(String(node.attrs?.align))
|
|
146
|
+
? String(node.attrs?.align)
|
|
147
|
+
: null;
|
|
148
|
+
return [
|
|
149
|
+
`<${tag}`,
|
|
150
|
+
idAttr(node),
|
|
151
|
+
colspan && colspan > 1 ? attr('colspan', colspan) : '',
|
|
152
|
+
rowspan && rowspan > 1 ? attr('rowspan', rowspan) : '',
|
|
153
|
+
widths.length ? attr('data-colwidth', widths.join(',')) : '',
|
|
154
|
+
attr('data-align', align),
|
|
155
|
+
`>${children}</${tag}>`,
|
|
156
|
+
].join('');
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* The node table.
|
|
160
|
+
*
|
|
161
|
+
* A `Record` rather than a `switch`, so the test can compare *this object* against the schema's
|
|
162
|
+
* node list. A switch would force the test to restate its cases, and a test that restates what it
|
|
163
|
+
* checks is a second copy that drifts rather than a check.
|
|
164
|
+
*
|
|
165
|
+
* `doc` and `text` are not here; they are the two the walker handles itself.
|
|
166
|
+
*/
|
|
167
|
+
export const NODE_RENDERERS = {
|
|
168
|
+
// An empty paragraph is a deliberate blank line, and `<p></p>` collapses to nothing.
|
|
169
|
+
paragraph: (node, children) => `<p${idAttr(node)}>${children || '<br>'}</p>`,
|
|
170
|
+
heading: (node, children) => {
|
|
171
|
+
const level = safeInt(node.attrs?.level, 1, 6) ?? 1;
|
|
172
|
+
return `<h${level}${idAttr(node)}>${children}</h${level}>`;
|
|
173
|
+
},
|
|
174
|
+
bulletList: (node, children) => `<ul${idAttr(node)}>${children}</ul>`,
|
|
175
|
+
// `start` and `type`, or a list that begins at 5 silently restarts at 1.
|
|
176
|
+
orderedList: (node, children) => {
|
|
177
|
+
const start = safeInt(node.attrs?.start, 1, 1_000_000);
|
|
178
|
+
const type = ['a', 'A', 'i', 'I', '1'].includes(String(node.attrs?.type))
|
|
179
|
+
? String(node.attrs?.type)
|
|
180
|
+
: null;
|
|
181
|
+
return `<ol${idAttr(node)}${start && start !== 1 ? attr('start', start) : ''}${attr('type', type)}>${children}</ol>`;
|
|
182
|
+
},
|
|
183
|
+
listItem: (node, children) => `<li${idAttr(node)}>${children}</li>`,
|
|
184
|
+
taskList: (node, children) => `<ul${idAttr(node)} class="kern-tasks" data-type="taskList">${children}</ul>`,
|
|
185
|
+
/*
|
|
186
|
+
* Mirrors what Tiptap's own TaskItem renders, so a page does not shift between the editor and the
|
|
187
|
+
* published copy — with `disabled` added. A checkbox a reader can click that changes nothing is
|
|
188
|
+
* worse than one that plainly cannot be clicked.
|
|
189
|
+
*/
|
|
190
|
+
taskItem: (node, children) => {
|
|
191
|
+
const checked = node.attrs?.checked === true;
|
|
192
|
+
return [
|
|
193
|
+
`<li${idAttr(node)} data-checked="${checked}" data-type="taskItem">`,
|
|
194
|
+
`<label><input type="checkbox" disabled${checked ? ' checked' : ''}><span></span></label>`,
|
|
195
|
+
`<div>${children}</div></li>`,
|
|
196
|
+
].join('');
|
|
197
|
+
},
|
|
198
|
+
blockquote: (node, children) => `<blockquote${idAttr(node)}>${children}</blockquote>`,
|
|
199
|
+
/*
|
|
200
|
+
* The text, not the rendered children. A code block's content is text and nothing else, and
|
|
201
|
+
* rendering its children would let a `code` mark inside it emit a nested `<code>`.
|
|
202
|
+
*/
|
|
203
|
+
codeBlock: (node) => {
|
|
204
|
+
const language = typeof node.attrs?.language === 'string' && LANGUAGE_PATTERN.test(node.attrs.language)
|
|
205
|
+
? node.attrs.language
|
|
206
|
+
: null;
|
|
207
|
+
const className = language ? ` class="language-${escapeHtml(language)}"` : '';
|
|
208
|
+
return `<pre${idAttr(node)}><code${className}>${escapeHtml(textOf(node))}</code></pre>`;
|
|
209
|
+
},
|
|
210
|
+
horizontalRule: (node) => `<hr${idAttr(node)}>`,
|
|
211
|
+
hardBreak: () => '<br>',
|
|
212
|
+
/*
|
|
213
|
+
* A picture is stored by file id — see the note on the node in `page-schema.ts`. Without a
|
|
214
|
+
* resolver there is nothing honest to emit, so nothing is: a broken-image icon tells a reader the
|
|
215
|
+
* page is damaged when it is the render that is under-configured.
|
|
216
|
+
*/
|
|
217
|
+
image: (node, _children, options) => {
|
|
218
|
+
const fileId = typeof node.attrs?.fileId === 'string' ? node.attrs.fileId : null;
|
|
219
|
+
const resolved = fileId ? (options.fileSrc?.(fileId) ?? null) : null;
|
|
220
|
+
const src = safeHref(resolved ?? node.attrs?.src);
|
|
221
|
+
if (!src)
|
|
222
|
+
return '';
|
|
223
|
+
const alt = typeof node.attrs?.alt === 'string' ? node.attrs.alt : '';
|
|
224
|
+
return [
|
|
225
|
+
`<img${idAttr(node)} src="${escapeHtml(src)}" alt="${escapeHtml(alt)}"`,
|
|
226
|
+
attr('title', typeof node.attrs?.title === 'string' ? node.attrs.title : null),
|
|
227
|
+
attr('width', safeInt(node.attrs?.width, 1, 20000)),
|
|
228
|
+
attr('height', safeInt(node.attrs?.height, 1, 20000)),
|
|
229
|
+
' loading="lazy">',
|
|
230
|
+
].join('');
|
|
231
|
+
},
|
|
232
|
+
/*
|
|
233
|
+
* The wrapper is not decoration. A table is the one block that cannot be made narrower, so it
|
|
234
|
+
* gets its own scroller — otherwise a wide one pushes the whole page sideways, which is exactly
|
|
235
|
+
* the defect shell's e2e sweep exists to catch, and it is worst in Persian.
|
|
236
|
+
*/
|
|
237
|
+
table: (node, children) => `<div class="kern-table-wrap"><table${idAttr(node)} class="kern-table"><tbody>${children}</tbody></table></div>`,
|
|
238
|
+
tableRow: (node, children) => `<tr${idAttr(node)}>${children}</tr>`,
|
|
239
|
+
tableCell: (node, children) => cell('td', node, children),
|
|
240
|
+
tableHeader: (node, children) => cell('th', node, children),
|
|
241
|
+
details: (node, children) => `<details${idAttr(node)} class="kern-toggle">${children}</details>`,
|
|
242
|
+
detailsSummary: (node, children) => `<summary${idAttr(node)}>${children}</summary>`,
|
|
243
|
+
detailsContent: (node, children) => `<div${idAttr(node)}>${children}</div>`,
|
|
244
|
+
/*
|
|
245
|
+
* Byte-identical to what the Callout node renders in the editor — that pairing is written down in
|
|
246
|
+
* `nodes/callout.ts` and this is the other half of it. The tone is narrowed to the closed set
|
|
247
|
+
* rather than trusted, because it ends up inside an attribute selector.
|
|
248
|
+
*/
|
|
249
|
+
callout: (node, children) => {
|
|
250
|
+
const tone = ['info', 'note', 'success', 'warning', 'danger'].includes(String(node.attrs?.tone))
|
|
251
|
+
? String(node.attrs?.tone)
|
|
252
|
+
: 'info';
|
|
253
|
+
return `<aside${idAttr(node)} class="kern-callout" data-callout="${tone}">${children}</aside>`;
|
|
254
|
+
},
|
|
255
|
+
/*
|
|
256
|
+
* A mention is an inline leaf: it has no children, so a case that rendered `children` would render
|
|
257
|
+
* nothing and the mention would simply disappear.
|
|
258
|
+
*/
|
|
259
|
+
mention: (node) => {
|
|
260
|
+
const label = String(node.attrs?.label ?? '');
|
|
261
|
+
const id = String(node.attrs?.id ?? '');
|
|
262
|
+
return `<span class="kern-mention" data-type="mention" data-id="${escapeHtml(id)}">@${escapeHtml(label)}</span>`;
|
|
263
|
+
},
|
|
264
|
+
pageMention: (node, _children, options) => {
|
|
265
|
+
const label = String(node.attrs?.label ?? '');
|
|
266
|
+
const id = String(node.attrs?.id ?? '');
|
|
267
|
+
const href = id ? safeHref(options.pageHref?.(id)) : null;
|
|
268
|
+
const body = escapeHtml(label || 'Untitled');
|
|
269
|
+
const data = ` data-type="pageMention" data-id="${escapeHtml(id)}"`;
|
|
270
|
+
// No resolver, or a page we cannot address: still readable, just not clickable.
|
|
271
|
+
if (!href)
|
|
272
|
+
return `<span class="kern-page-mention"${data}>${body}</span>`;
|
|
273
|
+
return `<a class="kern-page-mention" href="${escapeHtml(href)}"${data}>${body}</a>`;
|
|
274
|
+
},
|
|
275
|
+
};
|
|
276
|
+
function renderNode(node, options) {
|
|
277
|
+
if (node.type === 'text')
|
|
278
|
+
return renderMarks(escapeHtml(node.text ?? ''), node.marks);
|
|
279
|
+
const render = NODE_RENDERERS[node.type ?? ''];
|
|
280
|
+
const children = (node.content ?? []).map((child) => renderNode(child, options)).join('');
|
|
281
|
+
/*
|
|
282
|
+
* An unknown node keeps its children rather than dropping them. This should be unreachable — the
|
|
283
|
+
* test makes sure every node in the schema has a case — but a document written by a newer image
|
|
284
|
+
* and read by an older one is a real situation during a rolling deploy, and losing a paragraph
|
|
285
|
+
* because its wrapper is from next week is not an acceptable way to handle it.
|
|
286
|
+
*/
|
|
287
|
+
return render ? render(node, children, options) : children;
|
|
288
|
+
}
|
|
289
|
+
/** Sanitised HTML for a stored page. An empty or missing document renders as an empty string. */
|
|
290
|
+
export function renderPageDoc(doc, options = {}) {
|
|
291
|
+
if (!doc || !Array.isArray(doc.content))
|
|
292
|
+
return '';
|
|
293
|
+
return doc.content.map((node) => renderNode(node, options)).join('');
|
|
294
|
+
}
|
|
295
|
+
/** Nodes whose children are separate blocks, so their text needs a line between each. */
|
|
296
|
+
const BLOCK_PARENTS = new Set([
|
|
297
|
+
'blockquote',
|
|
298
|
+
'bulletList',
|
|
299
|
+
'callout',
|
|
300
|
+
'details',
|
|
301
|
+
'detailsContent',
|
|
302
|
+
'doc',
|
|
303
|
+
'listItem',
|
|
304
|
+
'orderedList',
|
|
305
|
+
'table',
|
|
306
|
+
'taskItem',
|
|
307
|
+
'taskList',
|
|
308
|
+
]);
|
|
309
|
+
/** What `collab`'s own flatten caps at; the same number, so the two agree about a very long page. */
|
|
310
|
+
const TEXT_LIMIT = 100_000;
|
|
311
|
+
/**
|
|
312
|
+
* The same document as plain text, for the search index and for previews.
|
|
313
|
+
*
|
|
314
|
+
* This exists because the flatten it replaces is wrong in a way nobody could see. `collab`'s
|
|
315
|
+
* `extractText` walks the Yjs tree and calls `toString()` on each `Y.XmlText`, which renders marks
|
|
316
|
+
* *as markup* — so a page containing one link put
|
|
317
|
+
* `<link class="null" href="…" rel="noreferrer noopener" target="_blank">` into the search body,
|
|
318
|
+
* and every page in the workspace matched a search for "noopener".
|
|
319
|
+
*/
|
|
320
|
+
export function textFromPageDoc(doc) {
|
|
321
|
+
if (!doc || !Array.isArray(doc.content))
|
|
322
|
+
return '';
|
|
323
|
+
const walk = (node) => {
|
|
324
|
+
if (typeof node.text === 'string')
|
|
325
|
+
return node.text;
|
|
326
|
+
switch (node.type) {
|
|
327
|
+
case 'hardBreak':
|
|
328
|
+
return '\n';
|
|
329
|
+
// The literal that produced it, so an edit round-trips instead of deleting who was mentioned.
|
|
330
|
+
case 'mention':
|
|
331
|
+
return `@${String(node.attrs?.label ?? '')}`;
|
|
332
|
+
case 'pageMention':
|
|
333
|
+
return String(node.attrs?.label ?? '');
|
|
334
|
+
// A picture contributes its alt text, the only part of it anybody can search for.
|
|
335
|
+
case 'image':
|
|
336
|
+
return typeof node.attrs?.alt === 'string' ? node.attrs.alt : '';
|
|
337
|
+
// Cells are joined with a tab, or two columns run together into one nonsense word.
|
|
338
|
+
case 'tableRow':
|
|
339
|
+
return (node.content ?? []).map(walk).join('\t');
|
|
340
|
+
default:
|
|
341
|
+
break;
|
|
342
|
+
}
|
|
343
|
+
/*
|
|
344
|
+
* A toggle contributes its summary *and* what it hides, and a code block contributes its
|
|
345
|
+
* commands. Collapsed is a display choice, and a runbook's commands are exactly the thing
|
|
346
|
+
* people search for — so neither is skipped.
|
|
347
|
+
*/
|
|
348
|
+
const separator = BLOCK_PARENTS.has(node.type ?? '') ? '\n' : '';
|
|
349
|
+
return (node.content ?? []).map(walk).join(separator);
|
|
350
|
+
};
|
|
351
|
+
return (doc.content ?? [])
|
|
352
|
+
.map(walk)
|
|
353
|
+
.join('\n')
|
|
354
|
+
.replace(/\n{3,}/g, '\n\n')
|
|
355
|
+
.trim()
|
|
356
|
+
.slice(0, TEXT_LIMIT);
|
|
357
|
+
}
|
|
358
|
+
//# sourceMappingURL=render.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/server/render.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"versions.d.ts","sourceRoot":"","sources":["../../../src/server/services/versions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAuB,SAAS,EAAE,MAAM,mBAAmB,CAAA;AACvE,OAAO,EAAa,KAAK,MAAM,EAAE,KAAK,EAAE,EAAU,MAAM,gBAAgB,CAAA;AAExE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;
|
|
1
|
+
{"version":3,"file":"versions.d.ts","sourceRoot":"","sources":["../../../src/server/services/versions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAuB,SAAS,EAAE,MAAM,mBAAmB,CAAA;AACvE,OAAO,EAAa,KAAK,MAAM,EAAE,KAAK,EAAE,EAAU,MAAM,gBAAgB,CAAA;AAExE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAG1D,OAAO,EAAS,YAAY,EAAE,MAAM,cAAc,CAAA;AAClD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAG9C,KAAK,UAAU,GAAG,OAAO,YAAY,CAAC,YAAY,CAAA;AAKlD,wBAAgB,SAAS,CAAC,GAAG,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,WAAW,CAalF;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW;IAS7D;;;;;;OAMG;gBAEG,EAAE,eACO,MAAM,UACX,MAAM,QACR;QAAE,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GACnF,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;aA0Cd,EAAE,eAAe,MAAM,UAAU,MAAM,SAAS,MAAM,UAAU,MAAM,GAAG,IAAI;;;;;;;;;;;;;;;YAkB9E,EAAE,eAAe,MAAM,aAAa,MAAM;;;;;;;;;;;;;IAUxD;;;;;;;OAOG;gBACe,EAAE,aAAa,SAAS,eAAe,MAAM,aAAa,MAAM;;;;;;;;;;;;;IAsBlF,kEAAkE;gBAChD,EAAE,aAAa,SAAS,eAAe,MAAM,UAAU,MAAM,SAAS,MAAM,GAAG,IAAI;;;;;;;;;;;;;;;;;;;;;;;IAyBrG,wEAAwE;eACvD,EAAE,aAAa,SAAS,eAAe,MAAM,UAAU,MAAM;;;;;;;;;;;;;;;;;;;;;;;IAyB9E,2FAA2F;uBAClE,EAAE,eAAe,MAAM,UAAU,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IAUvF,wFAAwF;+BAC7D,MAAM,UAAU,MAAM;;;;;;EAMpD;AACD,MAAM,MAAM,aAAa,GAAG,UAAU,CAAC,OAAO,aAAa,CAAC,CAAA"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { KernError, uuidv7 } from '@kernhq/kernel';
|
|
2
2
|
import { and, desc, eq, lt } from 'drizzle-orm';
|
|
3
|
+
import { pageDocFromBase64 } from '../document.js';
|
|
4
|
+
import { textFromPageDoc } from '../render.js';
|
|
3
5
|
import { pages, pageVersions } from '../schema.js';
|
|
4
6
|
import { documentNameOf } from './pages.js';
|
|
5
7
|
/** How much of the prose a version list shows without loading the document. */
|
|
@@ -46,6 +48,14 @@ export function quireVersions(kernel, access) {
|
|
|
46
48
|
.where(and(eq(pages.workspaceId, workspaceId), eq(pages.id, pageId)))
|
|
47
49
|
.limit(1);
|
|
48
50
|
const state = Buffer.from(taken.state, 'base64');
|
|
51
|
+
/*
|
|
52
|
+
* Flattened from the state that is being stored, not copied from `pages.text`.
|
|
53
|
+
*
|
|
54
|
+
* `pages.text` is what the collab service published, and its flatten renders marks as markup
|
|
55
|
+
* — a page with one link contributed `rel="noopener noreferrer nofollow"` to the preview and
|
|
56
|
+
* to search. Decoding here costs nothing extra: the bytes are already in hand.
|
|
57
|
+
*/
|
|
58
|
+
const decoded = pageDocFromBase64(taken.state);
|
|
49
59
|
const [version] = await tx
|
|
50
60
|
.insert(pageVersions)
|
|
51
61
|
.values({
|
|
@@ -56,7 +66,9 @@ export function quireVersions(kernel, access) {
|
|
|
56
66
|
label: opts.label ?? null,
|
|
57
67
|
state,
|
|
58
68
|
snapshot: Buffer.from(taken.snapshot, 'base64'),
|
|
59
|
-
|
|
69
|
+
// The mirrored column is the fallback, so a document that will not decode still gets a
|
|
70
|
+
// version — losing the preview is a small thing; not taking the version is somebody's work.
|
|
71
|
+
text: decoded ? textFromPageDoc(decoded) : (row?.text ?? ''),
|
|
60
72
|
size: state.length,
|
|
61
73
|
authorId: opts.authorId ?? null,
|
|
62
74
|
})
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"versions.js","sourceRoot":"","sources":["../../../src/server/services/versions.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAwB,MAAM,EAAE,MAAM,gBAAgB,CAAA;AACxE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,aAAa,CAAA;AAE/C,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAElD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAI3C,+EAA+E;AAC/E,MAAM,OAAO,GAAG,GAAG,CAAA;AAEnB,MAAM,UAAU,SAAS,CAAC,GAAe,EAAE,WAA0B;IACnE,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,WAAW,EAAE,GAAG,CAAC,WAAyC;QAC1D,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,IAAI,EAAE,GAAG,CAAC,IAA2B;QACrC,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC;QACnC,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,QAAQ,EAAE,GAAG,CAAC,QAAmC;QACjD,SAAS,EAAE,GAAG,CAAC,SAAS,CAAC,WAAW,EAAE;QACtC,SAAS,EAAE,WAAW,KAAK,GAAG,CAAC,EAAE;KAClC,CAAA;AACH,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,MAAc,EAAE,MAAmB;IAC/D,kFAAkF;IAClF,KAAK,UAAU,UAAU,CAAC,WAAmB,EAAE,MAAc;QAC3D,OAAO,MAAM,CAAC,IAAI,CAAsC,0BAA0B,EAAE;YAClF,IAAI,EAAE,cAAc,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC;SAClD,CAAC,CAAA;IACJ,CAAC;IAED,OAAO;QACL;;;;;;WAMG;QACH,KAAK,CAAC,OAAO,CACX,EAAM,EACN,WAAmB,EACnB,MAAc,EACd,IAAoF;YAEpF,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;gBAChE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,EAAE,iCAAiC,CAAC,CAAA;gBAChF,OAAO,IAAI,CAAA;YACb,CAAC,CAAC,CAAA;YACF,IAAI,CAAC,KAAK;gBAAE,OAAO,IAAI,CAAA;YAEvB,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,EAAE;iBACnB,MAAM,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;iBAC5B,IAAI,CAAC,KAAK,CAAC;iBACX,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,WAAW,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;iBACpE,KAAK,CAAC,CAAC,CAAC,CAAA;YAEX,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;YAChD,MAAM,CAAC,OAAO,CAAC,GAAG,MAAM,EAAE;iBACvB,MAAM,CAAC,YAAY,CAAC;iBACpB,MAAM,CAAC;gBACN,EAAE,EAAE,MAAM,EAAE;gBACZ,WAAW;gBACX,MAAM;gBACN,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,IAAI;gBACzB,KAAK;gBACL,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC;gBAC/C,IAAI,EAAE,GAAG,EAAE,IAAI,IAAI,EAAE;
|
|
1
|
+
{"version":3,"file":"versions.js","sourceRoot":"","sources":["../../../src/server/services/versions.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAwB,MAAM,EAAE,MAAM,gBAAgB,CAAA;AACxE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,aAAa,CAAA;AAE/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAC9C,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAElD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAI3C,+EAA+E;AAC/E,MAAM,OAAO,GAAG,GAAG,CAAA;AAEnB,MAAM,UAAU,SAAS,CAAC,GAAe,EAAE,WAA0B;IACnE,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,WAAW,EAAE,GAAG,CAAC,WAAyC;QAC1D,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,IAAI,EAAE,GAAG,CAAC,IAA2B;QACrC,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC;QACnC,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,QAAQ,EAAE,GAAG,CAAC,QAAmC;QACjD,SAAS,EAAE,GAAG,CAAC,SAAS,CAAC,WAAW,EAAE;QACtC,SAAS,EAAE,WAAW,KAAK,GAAG,CAAC,EAAE;KAClC,CAAA;AACH,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,MAAc,EAAE,MAAmB;IAC/D,kFAAkF;IAClF,KAAK,UAAU,UAAU,CAAC,WAAmB,EAAE,MAAc;QAC3D,OAAO,MAAM,CAAC,IAAI,CAAsC,0BAA0B,EAAE;YAClF,IAAI,EAAE,cAAc,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC;SAClD,CAAC,CAAA;IACJ,CAAC;IAED,OAAO;QACL;;;;;;WAMG;QACH,KAAK,CAAC,OAAO,CACX,EAAM,EACN,WAAmB,EACnB,MAAc,EACd,IAAoF;YAEpF,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;gBAChE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,EAAE,iCAAiC,CAAC,CAAA;gBAChF,OAAO,IAAI,CAAA;YACb,CAAC,CAAC,CAAA;YACF,IAAI,CAAC,KAAK;gBAAE,OAAO,IAAI,CAAA;YAEvB,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,EAAE;iBACnB,MAAM,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;iBAC5B,IAAI,CAAC,KAAK,CAAC;iBACX,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,WAAW,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;iBACpE,KAAK,CAAC,CAAC,CAAC,CAAA;YAEX,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;YAChD;;;;;;eAMG;YACH,MAAM,OAAO,GAAG,iBAAiB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;YAC9C,MAAM,CAAC,OAAO,CAAC,GAAG,MAAM,EAAE;iBACvB,MAAM,CAAC,YAAY,CAAC;iBACpB,MAAM,CAAC;gBACN,EAAE,EAAE,MAAM,EAAE;gBACZ,WAAW;gBACX,MAAM;gBACN,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,IAAI;gBACzB,KAAK;gBACL,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC;gBAC/C,uFAAuF;gBACvF,4FAA4F;gBAC5F,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,IAAI,EAAE,CAAC;gBAC5D,IAAI,EAAE,KAAK,CAAC,MAAM;gBAClB,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,IAAI;aAChC,CAAC;iBACD,SAAS,EAAE,CAAA;YACd,OAAO,OAAO,IAAI,IAAI,CAAA;QACxB,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,EAAM,EAAE,WAAmB,EAAE,MAAc,EAAE,KAAa,EAAE,MAAqB;YAC1F,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE,WAAW,EAAE,MAAM,CAAC,CAAA;YAC1D,MAAM,IAAI,GAAG,MAAM,EAAE;iBAClB,MAAM,EAAE;iBACR,IAAI,CAAC,YAAY,CAAC;iBAClB,KAAK,CACJ,GAAG,CACD,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,WAAW,CAAC,EACzC,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,EAC/B,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CACjD,CACF;iBACA,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;iBAC9B,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAA;YACnB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAA;YACpF,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;QACvF,CAAC;QAED,KAAK,CAAC,GAAG,CAAC,EAAM,EAAE,WAAmB,EAAE,SAAiB;YACtD,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,EAAE;iBACnB,MAAM,EAAE;iBACR,IAAI,CAAC,YAAY,CAAC;iBAClB,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,WAAW,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC;iBACrF,KAAK,CAAC,CAAC,CAAC,CAAA;YACX,IAAI,CAAC,GAAG;gBAAE,MAAM,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAA;YAC7C,OAAO,GAAG,CAAA;QACZ,CAAC;QAED;;;;;;;WAOG;QACH,KAAK,CAAC,OAAO,CAAC,EAAM,EAAE,SAAoB,EAAE,WAAmB,EAAE,SAAiB;YAChF,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,WAAW,EAAE,SAAS,CAAC,CAAA;YAC1D,MAAM,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE,WAAW,EAAE,OAAO,CAAC,MAAM,CAAC,CAAA;YAErD,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,WAAW,EAAE,OAAO,CAAC,MAAM,EAAE;gBAClD,IAAI,EAAE,MAAM;gBACZ,KAAK,EAAE,IAAI;gBACX,QAAQ,EAAE,SAAS,CAAC,MAAM;aAC3B,CAAC,CAAA;YACF,MAAM,MAAM,CAAC,IAAI,CAAC,yBAAyB,EAAE;gBAC3C,IAAI,EAAE,cAAc,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;gBACzD,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;aACrD,CAAC,CAAA;YACF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,WAAW,EAAE,OAAO,CAAC,MAAM,EAAE;gBACnE,IAAI,EAAE,SAAS;gBACf,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,QAAQ,EAAE,SAAS,CAAC,MAAM;aAC3B,CAAC,CAAA;YACF,IAAI,CAAC,QAAQ;gBAAE,MAAM,SAAS,CAAC,UAAU,CAAC,oCAAoC,CAAC,CAAA;YAC/E,OAAO,QAAQ,CAAA;QACjB,CAAC;QAED,kEAAkE;QAClE,KAAK,CAAC,OAAO,CAAC,EAAM,EAAE,SAAoB,EAAE,WAAmB,EAAE,MAAc,EAAE,KAAoB;YACnG,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE,WAAW,EAAE,MAAM,CAAC,CAAA;YAC1D,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM;gBACtB,MAAM,SAAS,CAAC,UAAU,CAAC,gEAAgE,CAAC,CAAA;YAE9F,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE;gBAC1D,IAAI,EAAE,SAAS;gBACf,KAAK;gBACL,QAAQ,EAAE,SAAS,CAAC,MAAM;aAC3B,CAAC,CAAA;YACF,IAAI,CAAC,OAAO;gBAAE,MAAM,SAAS,CAAC,UAAU,CAAC,qCAAqC,CAAC,CAAA;YAE/E,MAAM,CAAC,OAAO,CAAC,GAAG,MAAM,EAAE;iBACvB,MAAM,CAAC,KAAK,CAAC;iBACb,GAAG,CAAC;gBACH,kBAAkB,EAAE,OAAO,CAAC,EAAE;gBAC9B,qBAAqB,EAAE,KAAK;gBAC5B,SAAS,EAAE,SAAS,CAAC,MAAM;gBAC3B,SAAS,EAAE,IAAI,IAAI,EAAE;aACtB,CAAC;iBACD,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,WAAW,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;iBACpE,SAAS,EAAE,CAAA;YACd,OAAO,OAAQ,CAAA;QACjB,CAAC;QAED,wEAAwE;QACxE,KAAK,CAAC,MAAM,CAAC,EAAM,EAAE,SAAoB,EAAE,WAAmB,EAAE,MAAc;YAC5E,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE,WAAW,EAAE,MAAM,CAAC,CAAA;YAC1D,IAAI,CAAC,IAAI,CAAC,kBAAkB;gBAC1B,MAAM,SAAS,CAAC,UAAU,CAAC,uEAAuE,CAAC,CAAA;YAErG,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,WAAW,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAA;YAC1E,qFAAqF;YACrF,wCAAwC;YACxC,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE;gBAC1C,IAAI,EAAE,MAAM;gBACZ,KAAK,EAAE,IAAI;gBACX,QAAQ,EAAE,SAAS,CAAC,MAAM;aAC3B,CAAC,CAAA;YACF,MAAM,MAAM,CAAC,IAAI,CAAC,yBAAyB,EAAE;gBAC3C,IAAI,EAAE,cAAc,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC;gBACjD,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;aACvD,CAAC,CAAA;YACF,MAAM,CAAC,OAAO,CAAC,GAAG,MAAM,EAAE;iBACvB,MAAM,CAAC,KAAK,CAAC;iBACb,GAAG,CAAC,EAAE,qBAAqB,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC;iBACzF,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,WAAW,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;iBACpE,SAAS,EAAE,CAAA;YACd,OAAO,OAAQ,CAAA;QACjB,CAAC;QAED,2FAA2F;QAC3F,KAAK,CAAC,cAAc,CAAC,EAAM,EAAE,WAAmB,EAAE,MAAc;YAC9D,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,EAAE;iBACnB,MAAM,CAAC,EAAE,SAAS,EAAE,YAAY,CAAC,SAAS,EAAE,CAAC;iBAC7C,IAAI,CAAC,YAAY,CAAC;iBAClB,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,WAAW,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;iBACtF,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;iBAC9B,KAAK,CAAC,CAAC,CAAC,CAAA;YACX,OAAO,GAAG,EAAE,SAAS,IAAI,IAAI,CAAA;QAC/B,CAAC;QAED,wFAAwF;QACxF,aAAa,CAAC,WAAmB,EAAE,MAAc;YAC/C,OAAO,MAAM,CAAC,IAAI,CAAsB,uBAAuB,EAAE;gBAC/D,IAAI,EAAE,cAAc,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC;aAClD,CAAC,CAAA;QACJ,CAAC;KACF,CAAA;AACH,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kernhq/module-quire",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.8.0",
|
|
4
4
|
"description": "Kern Quire: collaborative documents, spaces and page trees",
|
|
5
5
|
"homepage": "https://github.com/KernAIO/module-quire#readme",
|
|
6
6
|
"license": "AGPL-3.0-only",
|
|
@@ -42,16 +42,18 @@
|
|
|
42
42
|
}
|
|
43
43
|
},
|
|
44
44
|
"dependencies": {
|
|
45
|
-
"@kernhq/
|
|
46
|
-
"@kernhq/kernel": "^0.7.0",
|
|
47
|
-
"@kernhq/sdk": "^0.1.5",
|
|
45
|
+
"@kernhq/sdk": "^0.1.8",
|
|
48
46
|
"@orpc/contract": "^1.15.0",
|
|
49
47
|
"@orpc/server": "^1.15.0",
|
|
48
|
+
"@tiptap/y-tiptap": "^3.0.7",
|
|
50
49
|
"drizzle-orm": "^0.45.0",
|
|
50
|
+
"yjs": "^13.6.32",
|
|
51
51
|
"zod": "^4.1.0"
|
|
52
52
|
},
|
|
53
53
|
"peerDependencies": {
|
|
54
|
-
"@kernhq/
|
|
54
|
+
"@kernhq/contracts": "^0.6.1",
|
|
55
|
+
"@kernhq/kernel": "^0.7.2",
|
|
56
|
+
"@kernhq/ui": "^0.9.0",
|
|
55
57
|
"@tanstack/svelte-query": "^6.1.0",
|
|
56
58
|
"svelte": "^5.46.0"
|
|
57
59
|
},
|
|
@@ -69,8 +71,10 @@
|
|
|
69
71
|
"devDependencies": {
|
|
70
72
|
"@biomejs/biome": "^2.0.0",
|
|
71
73
|
"@changesets/cli": "^2.27.0",
|
|
74
|
+
"@kernhq/contracts": "^0.6.1",
|
|
75
|
+
"@kernhq/kernel": "^0.7.2",
|
|
72
76
|
"@kernhq/tsconfig": "^0.1.0",
|
|
73
|
-
"@kernhq/ui": "^0.
|
|
77
|
+
"@kernhq/ui": "^0.9.0",
|
|
74
78
|
"@tanstack/svelte-query": "^6.1.0",
|
|
75
79
|
"@types/node": "^24.0.0",
|
|
76
80
|
"@types/pg": "^8.15.0",
|
|
@@ -67,10 +67,17 @@ const user = $derived({
|
|
|
67
67
|
<EmptyState icon="triangle-alert" title={t('editor_no_session')} description={t('editor_no_session_desc')} />
|
|
68
68
|
{:else}
|
|
69
69
|
{#key name}
|
|
70
|
+
<!--
|
|
71
|
+
`page` is what selects the wide wiki schema — tables, callouts, toggles, task lists, images,
|
|
72
|
+
six heading levels. It is opt-in for a reason: a comment box shares this component and shares
|
|
73
|
+
the narrow schema with issue descriptions, and only a page has a reader (`renderPageDoc`) able
|
|
74
|
+
to draw all of this outside the browser.
|
|
75
|
+
-->
|
|
70
76
|
<CollaborativeEditor
|
|
71
77
|
{url}
|
|
72
78
|
{name}
|
|
73
79
|
{user}
|
|
80
|
+
page
|
|
74
81
|
placeholder={t('editor_placeholder')}
|
|
75
82
|
{onpeers}
|
|
76
83
|
{onstatus}
|