@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.
@@ -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":"AA2DA,eAAO,MAAM,WAAW,2IA4PtB,CAAA;AAEF,eAAe,WAAW,CAAA"}
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"}
@@ -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(),
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACxC,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAA6B,MAAM,mBAAmB,CAAA;AAC9F,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAC/D,OAAO,EACL,SAAS,EACT,iBAAiB,EACjB,aAAa,EACb,WAAW,EACX,sBAAsB,EACtB,gBAAgB,GACjB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AACzF,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAEnD;;;;;;GAMG;AACH,MAAM,wBAAwB,GAAG,CAAC,GAAG,MAAM,CAAA;AAE3C;;;;;GAKG;AACH,SAAS,cAAc,CACrB,WAAmB,EACnB,IAA+B,EAC/B,QAAgB,EAChB,UAAkB;IAElB,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,UAAU;QAAE,OAAO,IAAI,CAAA;IAClD,IAAI,UAAU,KAAK,MAAM;QAAE,OAAO,IAAI,CAAA;IACtC,OAAO;QACL,WAAW,EAAE,WAAiD;QAC9D,MAAM,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE;QACxD,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,UAAU;QAC/B,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,GAAG,EAAE,UAAU,QAAQ,IAAI,IAAI,CAAC,EAAE,EAAE;QACpC,IAAI,EAAE,WAAW;QACjB,GAAG,EAAE,IAAI;QACT,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE;QACvC,UAAU,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE;KACvD,CAAA;AACH,CAAC;AAED,2FAA2F;AAC3F,SAAS,cAAc,CAAC,SAAoB;IAC1C,IAAI,SAAS,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,SAAS,CAAC,aAAa;QAAE,MAAM,SAAS,CAAC,SAAS,EAAE,CAAA;AAC3F,CAAC;AAED,MAAM,CAAC,MAAM,WAAW,GAAG,kBAAkB,CAAC;IAC5C,UAAU,EAAE,YAAY,CAAC;QACvB,EAAE,EAAE,SAAS;QACb,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;QACxC,WAAW,EAAE,2DAA2D;QACxE,IAAI,EAAE,aAAa;QACnB,WAAW,EAAE,gBAAgB;QAC7B,YAAY,EAAE,iBAAiB;QAC/B,iBAAiB,EAAE,sBAAsB;QACzC,MAAM,EAAE,WAAW;QACnB;;;WAGG;QACH,WAAW,EAAE;YACX,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,IAAI,EAAE;YACrE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE;SACvD;KACF,CAAC;IACF,sFAAsF;IACtF,QAAQ,EAAE,aAAa;IACvB,MAAM;IACN,gBAAgB,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,kBAAkB,CAAC;IACnF,MAAM,EAAE,UAAU;IAElB;;;;;;;;;;OAUG;IACH,MAAM,EAAE;QACN;YACE,KAAK,EAAE,CAAC,MAAM,CAAC;YACf,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,EAAuC,EAAE,CAC3E,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,WAAW,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE;gBACtD,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,EAAE;qBACnB,MAAM,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC;qBAC5E,IAAI,CAAC,KAAK,CAAC;qBACX,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;qBAC/C,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,WAAW,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;qBAChE,KAAK,CAAC,CAAC,CAAC,CAAA;gBACX,IAAI,CAAC,GAAG;oBAAE,OAAO,IAAI,CAAA;gBACrB,OAAO,cAAc,CAAC,WAAW,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,UAAU,CAAC,CAAA;YAC5E,CAAC,CAAC;YACJ,IAAI,EAAE,KAAK,SAAS,CAAC,EAAE,WAAW,EAAE,MAAM;gBACxC,IAAI,KAAK,GAAkB,IAAI,CAAA;gBAC/B,SAAS,CAAC;oBACR,MAAM,KAAK,GAIN,MAAM,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC,EAAE,EAAE,EAAE,CAC3D,EAAE;yBACC,MAAM,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC;yBAC5E,IAAI,CAAC,KAAK,CAAC;yBACX,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;yBAC/C,KAAK,CACJ,GAAG,CACD,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,WAAW,CAAC,EAClC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,EACvB,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CACxC,CACF;yBACA,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;yBACtB,KAAK,CAAC,GAAG,CAAC,CACd,CAAA;oBACD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;wBAAE,OAAM;oBAC9B,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;wBACtB,MAAM,GAAG,GAAG,cAAc,CAAC,WAAW,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,UAAU,CAAC,CAAA;wBACzE,IAAI,GAAG;4BAAE,MAAM,GAAG,CAAA;oBACpB,CAAC;oBACD,KAAK,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,IAAI,IAAI,CAAA;oBACrC,IAAI,KAAK,CAAC,MAAM,GAAG,GAAG;wBAAE,OAAM;gBAChC,CAAC;YACH,CAAC;SACF;KACF;IAED,0EAA0E;IAC1E,SAAS,EAAE;QACT;YACE,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,CACtD,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,WAAW,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE;gBACtD,MAAM,IAAI,GAAG,MAAM,EAAE;qBAClB,MAAM,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC;qBAClE,IAAI,CAAC,KAAK,CAAC;qBACX,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;qBAC/C,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,WAAW,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAA;gBACzE,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;gBAChD,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE;oBACpB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;oBACxB,OAAO,GAAG;wBACR,CAAC,CAAC;4BACE,EAAE,EAAE,GAAG,CAAC,EAAE;4BACV,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,UAAU;4BAC9B,GAAG,EAAE,UAAU,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,EAAE,EAAE;4BACvC,IAAI,EAAE,WAAW;4BACjB,QAAQ,EAAE,IAAI;yBACf;wBACH,CAAC,CAAC,IAAI,CAAA;gBACV,CAAC,CAAC,CAAA;YACJ,CAAC,CAAC;SACL;QACD;YACE,IAAI,EAAE,OAAO;YACb,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,CACtD,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,WAAW,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE;gBACtD,MAAM,IAAI,GAAG,MAAM,EAAE;qBAClB,MAAM,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC;qBAC7D,IAAI,CAAC,MAAM,CAAC;qBACZ,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,WAAW,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAA;gBAC3E,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;gBAChD,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE;oBACpB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;oBACxB,OAAO,GAAG;wBACR,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,UAAU,GAAG,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,IAAI,EAAE;wBAChG,CAAC,CAAC,IAAI,CAAA;gBACV,CAAC,CAAC,CAAA;YACJ,CAAC,CAAC;SACL;KACF;IAED,aAAa,EAAE;QACb;;;;;;;;;WASG;QACH,yBAAyB,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;YACjD,MAAM,OAAO,GAAG,KAAK,CAAC,OAMrB,CAAA;YACD,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM;gBAAE,OAAM;YAEnE,MAAM,GAAG,GAAG,aAAa,CAAC,MAAM,CAAC,CAAA;YACjC,MAAM,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE;gBACpE,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,EAAE;qBACpB,MAAM,EAAE;qBACR,IAAI,CAAC,KAAK,CAAC;qBACX,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,OAAO,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;qBACtF,KAAK,CAAC,CAAC,CAAC,CAAA;gBACX,6FAA6F;gBAC7F,IAAI,CAAC,IAAI;oBAAE,OAAM;gBAEjB,MAAM,EAAE;qBACL,MAAM,CAAC,KAAK,CAAC;qBACb,GAAG,CAAC;oBACH,IAAI,EAAE,OAAO,CAAC,IAAI;oBAClB,qFAAqF;oBACrF,qBAAqB,EACnB,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,kBAAkB,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,qBAAqB;oBAC9F,SAAS,EAAE,IAAI,IAAI,EAAE;iBACtB,CAAC;qBACD,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,OAAO,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;gBAEzF,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,EAAE,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAA;gBACzF,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,wBAAwB,EAAE,CAAC;oBACpE,MAAM,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,QAAQ,EAAE;wBACpE,IAAI,EAAE,MAAM;wBACZ,KAAK,EAAE,IAAI;wBACX,QAAQ,EAAE,IAAI;qBACf,CAAC,CAAA;gBACJ,CAAC;YACH,CAAC,CAAC,CAAA;YAEF,sFAAsF;YACtF,yCAAyC;YACzC,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE;gBAChF,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,EAAE;qBACnB,MAAM,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC;qBAC5E,IAAI,CAAC,KAAK,CAAC;qBACX,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;qBAC/C,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,OAAO,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;qBACtF,KAAK,CAAC,CAAC,CAAC,CAAA;gBACX,OAAO,GAAG,CAAC,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;YACjG,CAAC,CAAC,CAAA;YACF,IAAI,GAAG;gBAAE,MAAM,YAAY,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;YAEhD,MAAM,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE;gBAChD,MAAM,EAAE,SAAS;gBACjB,MAAM,EAAE,MAAM;gBACd,EAAE,EAAE,OAAO,CAAC,QAAQ;gBACpB,EAAE,EAAE,SAAS;aACd,CAAC,CAAA;QACJ,CAAC;KACF;IAED,UAAU,EAAE;QACV;;;;;;;WAOG;QACH,eAAe,EAAE;YACf,KAAK,EAAE,iBAAiB;YACxB,MAAM,EAAE,YAAY;YACpB,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE;gBAC9C,cAAc,CAAC,SAAS,CAAC,CAAA;gBACzB,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;oBAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAA;gBACrE,MAAM,GAAG,GAAG,aAAa,CAAC,MAAM,CAAC,CAAA;gBACjC,OAAO,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE;oBACnE,IAAI,CAAC;wBACH,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,CAAA;wBACvE,sFAAsF;wBACtF,sDAAsD;wBACtD,MAAM,OAAO,GACX,SAAS,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM;4BAC/B,CAAC,CAAC,SAAS;4BACX,CAAC,CAAC,CAAC,CAAC,MAAM,MAAM;iCACX,IAAI,CAAmB,sBAAsB,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;iCACxE,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI;gCACvB,GAAG,SAAS;gCACZ,MAAM,EAAE,KAAK,CAAC,MAAM;gCACpB,aAAa,EAAE,KAAK;gCACpB,IAAI,EAAE,MAAe;6BACtB,CAAC,CAAA;wBAER,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,iBAAiB,EAAE,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,CAAA;wBAC9F,MAAM,QAAQ,GACZ,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,iBAAiB,EAAE,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,CAAA;wBAC7F,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAA;oBAC9B,CAAC;oBAAC,OAAO,GAAG,EAAE,CAAC;wBACb,yFAAyF;wBACzF,kDAAkD;wBAClD,IAAI,GAAG,YAAY,SAAS,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,WAAW,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW,CAAC;4BACpF,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAA;wBAC5C,MAAM,GAAG,CAAA;oBACX,CAAC;gBACH,CAAC,CAAC,CAAA;YACJ,CAAC;SACF;KACF;CACF,CAAC,CAAA;AAEF,eAAe,WAAW,CAAA"}
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
+ '&': '&amp;',
22
+ '<': '&lt;',
23
+ '>': '&gt;',
24
+ '"': '&quot;',
25
+ "'": '&#39;',
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&#9;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;AAC1D,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;aAgCd,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
+ {"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
- text: row?.text ?? '',
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":"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"}
1
+ {"version":3,"file":"versions.js","sourceRoot":"","sources":["../../../src/server/services/versions.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kernhq/module-quire",
3
- "version": "0.7.3",
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/contracts": "^0.5.1",
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/ui": "^0.8.0",
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.8.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}