ocean-brain 0.8.0 → 0.8.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +113 -0
- package/dist/mcp.js +230 -291
- package/package.json +6 -5
- package/server/client/dist/assets/ArrowRight.es-g2YZTklZ.js +1 -0
- package/server/client/dist/assets/Calendar-BP6HTuSn.js +25 -0
- package/server/client/dist/assets/Callout-B_IPSF_5.js +1 -0
- package/server/client/dist/assets/Copy.es-CNxe4ujr.js +1 -0
- package/server/client/dist/assets/Graph-D9GeO71k.js +1 -0
- package/server/client/dist/assets/Graph-Xha3fwhp.js +46 -0
- package/server/client/dist/assets/Image-BLEjLUqd.js +1 -0
- package/server/client/dist/assets/Image.es-DnON8cv2.js +1 -0
- package/server/client/dist/assets/Note-DjrCYtat.js +24 -0
- package/server/client/dist/assets/NotePropertiesPanel-2DgXEM4B.js +2 -0
- package/server/client/dist/assets/Plus.es-CQ8wn2is.js +1 -0
- package/server/client/dist/assets/Reminders-B4l3KdlK.js +1 -0
- package/server/client/dist/assets/Search-BN5sf7bE.js +1 -0
- package/server/client/dist/assets/SurfaceCard-BZm73nyS.js +1 -0
- package/server/client/dist/assets/Tag-oSnmViVp.js +1 -0
- package/server/client/dist/assets/TagNotes-BDTCcJcL.js +1 -0
- package/server/client/dist/assets/Trash.es-0aPpA-3S.js +1 -0
- package/server/client/dist/assets/ViewNotes-CiZtGJNE.js +1 -0
- package/server/client/dist/assets/{ViewSectionDialog-CzskgmMF.js → ViewSectionDialog-Ctl_694Y.js} +17 -17
- package/server/client/dist/assets/Views-D-zlatYD.js +1 -0
- package/server/client/dist/assets/app-DmqIOMWF.css +1 -0
- package/server/client/dist/assets/app-cTRcKMGc.js +26 -0
- package/server/client/dist/assets/floating-ui.react-dom-wWLZ1CdM.js +1 -0
- package/server/client/dist/assets/{image.api-8dlMwzMd.js → image.api-CVuuvTBk.js} +1 -1
- package/server/client/dist/assets/index-DKJChPr4.js +1 -0
- package/server/client/dist/assets/manage-image-BZjaxp-f.js +1 -0
- package/server/client/dist/assets/manage-image-detail-DPv0FQ2m.js +1 -0
- package/server/client/dist/assets/{mcp-EDurbggR.js → mcp-CT_9IV2c.js} +2 -2
- package/server/client/dist/assets/mcp-admin-adapter-xAuyZc_M.js +1 -0
- package/server/client/dist/assets/note-core-Buwzyxi7.js +13 -0
- package/server/client/dist/assets/note-runtime-CPDVOFEo.js +168 -0
- package/server/client/dist/assets/note-ui-CHI-tzj-.js +2 -0
- package/server/client/dist/assets/{index-BEUqDuAZ.css → note-ui-DL8owV-U.css} +1 -1
- package/server/client/dist/assets/note.api-D_00ZzJC.js +356 -0
- package/server/client/dist/assets/{placeholder-DeKgSBnC.js → placeholder-DbdGiYGL.js} +4 -4
- package/server/client/dist/assets/preload-helper-BXl3LOEh.js +1 -0
- package/server/client/dist/assets/properties-D447wsWk.js +1 -0
- package/server/client/dist/assets/route-preload.js +2 -0
- package/server/client/dist/assets/{tag.api-Dl8DQd0m.js → tag.api-CX0SE06J.js} +1 -1
- package/server/client/dist/assets/time-B3pt8vt4.js +9 -0
- package/server/client/dist/assets/trash-8sH7EZgc.js +1 -0
- package/server/client/dist/assets/url-BSnWpmJx.js +1 -0
- package/server/client/dist/assets/{useReminderMutate-CoXXqJY2.js → useReminderMutate-CLK1tHvT.js} +4 -4
- package/server/client/dist/index.html +10 -5
- package/server/dist/app.js +1 -2
- package/server/dist/features/auth/http/api.js +0 -1
- package/server/dist/features/auth/http/login-page.js +272 -5
- package/server/dist/features/auth/http/pages.js +20 -3
- package/server/dist/features/auth/service.js +3 -2
- package/server/dist/features/cache/graphql/cache.field.resolver.js +0 -1
- package/server/dist/features/cache/graphql/cache.mutation.resolver.js +0 -1
- package/server/dist/features/cache/graphql/cache.query.resolver.js +0 -1
- package/server/dist/features/cache/graphql/cache.resolver.js +0 -1
- package/server/dist/features/cache/graphql/cache.type-defs.js +0 -1
- package/server/dist/features/cache/graphql/index.js +0 -1
- package/server/dist/features/image/graphql/image.field.resolver.js +0 -1
- package/server/dist/features/image/graphql/image.mutation.resolver.js +0 -1
- package/server/dist/features/image/graphql/image.query.resolver.js +0 -1
- package/server/dist/features/image/graphql/image.resolver.js +0 -1
- package/server/dist/features/image/graphql/image.type-defs.js +0 -1
- package/server/dist/features/image/graphql/index.js +0 -1
- package/server/dist/features/image/http/upload.js +0 -1
- package/server/dist/features/image/services/delete.js +0 -1
- package/server/dist/features/image/services/upload.js +0 -1
- package/server/dist/features/image/services/validation.js +0 -1
- package/server/dist/features/mcp-admin/http/handlers.js +0 -1
- package/server/dist/features/mcp-admin/service.js +0 -1
- package/server/dist/features/note/graphql/index.js +0 -1
- package/server/dist/features/note/graphql/note.field.resolver.js +0 -1
- package/server/dist/features/note/graphql/note.mutation.resolver.js +0 -1
- package/server/dist/features/note/graphql/note.query.resolver.js +0 -1
- package/server/dist/features/note/graphql/note.resolver.js +0 -1
- package/server/dist/features/note/graphql/note.type-defs.js +0 -1
- package/server/dist/features/note/http/mcp.js +0 -1
- package/server/dist/features/note/services/authoring.js +0 -1
- package/server/dist/features/note/services/cleanup.js +0 -1
- package/server/dist/features/note/services/content-blocks.js +0 -1
- package/server/dist/features/note/services/markdown-intent-write.js +0 -1
- package/server/dist/features/note/services/markdown-patch.js +0 -1
- package/server/dist/features/note/services/properties.js +0 -1
- package/server/dist/features/note/services/search-backfill.js +0 -1
- package/server/dist/features/note/services/search.js +0 -1
- package/server/dist/features/note/services/snapshot.js +0 -1
- package/server/dist/features/note/services/tag-filter.js +0 -1
- package/server/dist/features/note/services/trash.js +0 -1
- package/server/dist/features/note/services/write-conflict.js +0 -1
- package/server/dist/features/note/services/write.js +0 -1
- package/server/dist/features/placeholder/graphql/index.js +0 -1
- package/server/dist/features/placeholder/graphql/placeholder.field.resolver.js +0 -1
- package/server/dist/features/placeholder/graphql/placeholder.mutation.resolver.js +0 -1
- package/server/dist/features/placeholder/graphql/placeholder.query.resolver.js +0 -1
- package/server/dist/features/placeholder/graphql/placeholder.resolver.js +0 -1
- package/server/dist/features/placeholder/graphql/placeholder.type-defs.js +0 -1
- package/server/dist/features/reminder/graphql/index.js +0 -1
- package/server/dist/features/reminder/graphql/reminder.field.resolver.js +0 -1
- package/server/dist/features/reminder/graphql/reminder.mutation.resolver.js +0 -1
- package/server/dist/features/reminder/graphql/reminder.query.resolver.js +0 -1
- package/server/dist/features/reminder/graphql/reminder.resolver.js +0 -1
- package/server/dist/features/reminder/graphql/reminder.type-defs.js +0 -1
- package/server/dist/features/tag/graphql/index.js +0 -1
- package/server/dist/features/tag/graphql/tag.field.resolver.js +0 -1
- package/server/dist/features/tag/graphql/tag.mutation.resolver.js +0 -1
- package/server/dist/features/tag/graphql/tag.query.resolver.js +0 -1
- package/server/dist/features/tag/graphql/tag.resolver.js +0 -1
- package/server/dist/features/tag/graphql/tag.type-defs.js +0 -1
- package/server/dist/features/tag/http/mcp.js +0 -1
- package/server/dist/features/tag/services/organization.js +0 -1
- package/server/dist/features/view/graphql/index.js +0 -1
- package/server/dist/features/view/graphql/view.mutation.resolver.js +0 -1
- package/server/dist/features/view/graphql/view.query.resolver.js +0 -1
- package/server/dist/features/view/graphql/view.resolver.js +0 -1
- package/server/dist/features/view/graphql/view.type-defs.js +0 -1
- package/server/dist/features/view/services/workspace.js +0 -1
- package/server/dist/main.js +0 -1
- package/server/dist/models.js +0 -1
- package/server/dist/modules/app-version.js +0 -1
- package/server/dist/modules/auth-guard.js +0 -1
- package/server/dist/modules/auth-mode.js +0 -1
- package/server/dist/modules/auth-redirect.js +0 -1
- package/server/dist/modules/blocknote-markdown-editor.js +53 -0
- package/server/dist/modules/blocknote-tree.js +0 -1
- package/server/dist/modules/blocknote.js +272 -79
- package/server/dist/modules/data-maintenance.js +0 -1
- package/server/dist/modules/error-handler.js +8 -1
- package/server/dist/modules/graphql.js +0 -1
- package/server/dist/modules/logger.js +0 -1
- package/server/dist/modules/mcp-auth.js +0 -1
- package/server/dist/modules/mcp-token.js +0 -1
- package/server/dist/modules/prisma-runtime.js +0 -1
- package/server/dist/modules/rate-limit.js +0 -1
- package/server/dist/modules/recovery-retention.js +0 -1
- package/server/dist/modules/server-events-handler.js +0 -1
- package/server/dist/modules/server-events.js +0 -1
- package/server/dist/modules/session-store.js +0 -1
- package/server/dist/modules/use-async.js +0 -1
- package/server/dist/paths.js +0 -1
- package/server/dist/routes/api.js +0 -1
- package/server/dist/routes/auth-pages.js +0 -1
- package/server/dist/routes/client.js +0 -1
- package/server/dist/routes/graphql.js +0 -1
- package/server/dist/routes/index.js +0 -1
- package/server/dist/routes/mcp.js +0 -1
- package/server/dist/schema/index.js +0 -1
- package/server/dist/start.js +0 -1
- package/server/dist/types/index.js +0 -1
- package/server/dist/types/input.js +0 -1
- package/server/client/dist/assets/ArrowRight.es-C4zlc54Z.js +0 -1
- package/server/client/dist/assets/Calendar-COrN6Hjv.js +0 -25
- package/server/client/dist/assets/Callout-BK0K9E74.js +0 -1
- package/server/client/dist/assets/Copy.es-zm8f_XXX.js +0 -1
- package/server/client/dist/assets/Graph-BH1fzhue.js +0 -1
- package/server/client/dist/assets/Image-KXuHOG4b.js +0 -1
- package/server/client/dist/assets/Image.es-BKahRbIm.js +0 -1
- package/server/client/dist/assets/Note-C143cKKw.js +0 -12
- package/server/client/dist/assets/Plus.es-BqeC8T8h.js +0 -1
- package/server/client/dist/assets/Reminders-BYG5rz1M.js +0 -1
- package/server/client/dist/assets/Search-DBWsIMDP.js +0 -1
- package/server/client/dist/assets/SurfaceCard-CNSQfYfM.js +0 -1
- package/server/client/dist/assets/Tag-5aCfSO8Y.js +0 -1
- package/server/client/dist/assets/TagNotes-BPZjN-6l.js +0 -1
- package/server/client/dist/assets/Trash.es-CRQkTnXZ.js +0 -1
- package/server/client/dist/assets/ViewNotes-DGLNF96x.js +0 -1
- package/server/client/dist/assets/Views-DR5jT23G.js +0 -1
- package/server/client/dist/assets/graph-vendor-UTvF2NS_.js +0 -46
- package/server/client/dist/assets/index-DGIAh3ZY.js +0 -1
- package/server/client/dist/assets/index-VHp17GQX.js +0 -342
- package/server/client/dist/assets/manage-image-RqtWKas2.js +0 -1
- package/server/client/dist/assets/manage-image-detail-BTSIbLlQ.js +0 -1
- package/server/client/dist/assets/mcp-admin-adapter-DmGUo5G8.js +0 -1
- package/server/client/dist/assets/note-core-BklwyZHk.js +0 -180
- package/server/client/dist/assets/note-vendor-DkYKUmLo.js +0 -54
- package/server/client/dist/assets/properties-BjrZvOYn.js +0 -1
- package/server/client/dist/assets/trash-C5ntddLu.js +0 -1
- package/server/client/dist/fonts/Pretendard-Bold.woff +0 -0
- package/server/client/dist/fonts/Pretendard-Regular.woff +0 -0
- package/server/dist/app.js.map +0 -1
- package/server/dist/features/auth/http/api.js.map +0 -1
- package/server/dist/features/auth/http/login-page.js.map +0 -1
- package/server/dist/features/auth/http/pages.js.map +0 -1
- package/server/dist/features/auth/service.js.map +0 -1
- package/server/dist/features/cache/graphql/cache.field.resolver.js.map +0 -1
- package/server/dist/features/cache/graphql/cache.mutation.resolver.js.map +0 -1
- package/server/dist/features/cache/graphql/cache.query.resolver.js.map +0 -1
- package/server/dist/features/cache/graphql/cache.resolver.js.map +0 -1
- package/server/dist/features/cache/graphql/cache.type-defs.js.map +0 -1
- package/server/dist/features/cache/graphql/index.js.map +0 -1
- package/server/dist/features/image/graphql/image.field.resolver.js.map +0 -1
- package/server/dist/features/image/graphql/image.mutation.resolver.js.map +0 -1
- package/server/dist/features/image/graphql/image.query.resolver.js.map +0 -1
- package/server/dist/features/image/graphql/image.resolver.js.map +0 -1
- package/server/dist/features/image/graphql/image.type-defs.js.map +0 -1
- package/server/dist/features/image/graphql/index.js.map +0 -1
- package/server/dist/features/image/http/upload.js.map +0 -1
- package/server/dist/features/image/services/delete.js.map +0 -1
- package/server/dist/features/image/services/upload.js.map +0 -1
- package/server/dist/features/image/services/validation.js.map +0 -1
- package/server/dist/features/mcp-admin/http/handlers.js.map +0 -1
- package/server/dist/features/mcp-admin/service.js.map +0 -1
- package/server/dist/features/note/graphql/index.js.map +0 -1
- package/server/dist/features/note/graphql/note.field.resolver.js.map +0 -1
- package/server/dist/features/note/graphql/note.mutation.resolver.js.map +0 -1
- package/server/dist/features/note/graphql/note.query.resolver.js.map +0 -1
- package/server/dist/features/note/graphql/note.resolver.js.map +0 -1
- package/server/dist/features/note/graphql/note.type-defs.js.map +0 -1
- package/server/dist/features/note/http/mcp.js.map +0 -1
- package/server/dist/features/note/services/authoring.js.map +0 -1
- package/server/dist/features/note/services/cleanup.js.map +0 -1
- package/server/dist/features/note/services/content-blocks.js.map +0 -1
- package/server/dist/features/note/services/markdown-intent-write.js.map +0 -1
- package/server/dist/features/note/services/markdown-patch.js.map +0 -1
- package/server/dist/features/note/services/properties.js.map +0 -1
- package/server/dist/features/note/services/search-backfill.js.map +0 -1
- package/server/dist/features/note/services/search.js.map +0 -1
- package/server/dist/features/note/services/snapshot.js.map +0 -1
- package/server/dist/features/note/services/tag-filter.js.map +0 -1
- package/server/dist/features/note/services/trash.js.map +0 -1
- package/server/dist/features/note/services/write-conflict.js.map +0 -1
- package/server/dist/features/note/services/write.js.map +0 -1
- package/server/dist/features/placeholder/graphql/index.js.map +0 -1
- package/server/dist/features/placeholder/graphql/placeholder.field.resolver.js.map +0 -1
- package/server/dist/features/placeholder/graphql/placeholder.mutation.resolver.js.map +0 -1
- package/server/dist/features/placeholder/graphql/placeholder.query.resolver.js.map +0 -1
- package/server/dist/features/placeholder/graphql/placeholder.resolver.js.map +0 -1
- package/server/dist/features/placeholder/graphql/placeholder.type-defs.js.map +0 -1
- package/server/dist/features/reminder/graphql/index.js.map +0 -1
- package/server/dist/features/reminder/graphql/reminder.field.resolver.js.map +0 -1
- package/server/dist/features/reminder/graphql/reminder.mutation.resolver.js.map +0 -1
- package/server/dist/features/reminder/graphql/reminder.query.resolver.js.map +0 -1
- package/server/dist/features/reminder/graphql/reminder.resolver.js.map +0 -1
- package/server/dist/features/reminder/graphql/reminder.type-defs.js.map +0 -1
- package/server/dist/features/tag/graphql/index.js.map +0 -1
- package/server/dist/features/tag/graphql/tag.field.resolver.js.map +0 -1
- package/server/dist/features/tag/graphql/tag.mutation.resolver.js.map +0 -1
- package/server/dist/features/tag/graphql/tag.query.resolver.js.map +0 -1
- package/server/dist/features/tag/graphql/tag.resolver.js.map +0 -1
- package/server/dist/features/tag/graphql/tag.type-defs.js.map +0 -1
- package/server/dist/features/tag/http/mcp.js.map +0 -1
- package/server/dist/features/tag/services/organization.js.map +0 -1
- package/server/dist/features/view/graphql/index.js.map +0 -1
- package/server/dist/features/view/graphql/view.mutation.resolver.js.map +0 -1
- package/server/dist/features/view/graphql/view.query.resolver.js.map +0 -1
- package/server/dist/features/view/graphql/view.resolver.js.map +0 -1
- package/server/dist/features/view/graphql/view.type-defs.js.map +0 -1
- package/server/dist/features/view/services/workspace.js.map +0 -1
- package/server/dist/main.js.map +0 -1
- package/server/dist/models.js.map +0 -1
- package/server/dist/modules/app-version.js.map +0 -1
- package/server/dist/modules/auth-guard.js.map +0 -1
- package/server/dist/modules/auth-mode.js.map +0 -1
- package/server/dist/modules/auth-redirect.js.map +0 -1
- package/server/dist/modules/blocknote-tree.js.map +0 -1
- package/server/dist/modules/blocknote.js.map +0 -1
- package/server/dist/modules/data-maintenance.js.map +0 -1
- package/server/dist/modules/error-handler.js.map +0 -1
- package/server/dist/modules/graphql.js.map +0 -1
- package/server/dist/modules/logger.js.map +0 -1
- package/server/dist/modules/mcp-auth.js.map +0 -1
- package/server/dist/modules/mcp-token.js.map +0 -1
- package/server/dist/modules/prisma-runtime.js.map +0 -1
- package/server/dist/modules/rate-limit.js.map +0 -1
- package/server/dist/modules/recovery-retention.js.map +0 -1
- package/server/dist/modules/server-events-handler.js.map +0 -1
- package/server/dist/modules/server-events.js.map +0 -1
- package/server/dist/modules/session-store.js.map +0 -1
- package/server/dist/modules/use-async.js.map +0 -1
- package/server/dist/paths.js.map +0 -1
- package/server/dist/routes/api.js.map +0 -1
- package/server/dist/routes/auth-pages.js.map +0 -1
- package/server/dist/routes/client.js.map +0 -1
- package/server/dist/routes/graphql.js.map +0 -1
- package/server/dist/routes/index.js.map +0 -1
- package/server/dist/routes/mcp.js.map +0 -1
- package/server/dist/schema/index.js.map +0 -1
- package/server/dist/start.js.map +0 -1
- package/server/dist/types/index.js.map +0 -1
- package/server/dist/types/input.js.map +0 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { ServerBlockNoteEditor } from "@blocknote/server-util";
|
|
2
1
|
import { ensureTagByName } from "../features/tag/services/organization.js";
|
|
3
2
|
import models from "../models.js";
|
|
3
|
+
import { BlockNoteMarkdownEditor } from "./blocknote-markdown-editor.js";
|
|
4
4
|
const UNSUPPORTED_MARKDOWN_BLOCK_TYPES = /* @__PURE__ */ new Set(["tableOfContents"]);
|
|
5
5
|
const TAG_PLACEHOLDER_PREFIX = "OCEAN_BRAIN_TAG_";
|
|
6
6
|
const TAG_PLACEHOLDER_SUFFIX = "_TOKEN";
|
|
@@ -242,7 +242,10 @@ function replaceExplicitReferenceTokens(text, placeholderToReference) {
|
|
|
242
242
|
});
|
|
243
243
|
}
|
|
244
244
|
const MARKDOWN_ANGLE_BRACKET_TOKEN_PATTERN = /<([^<>\n]+)>/g;
|
|
245
|
-
const
|
|
245
|
+
const TILDE_RUN_PATTERN = /~+/g;
|
|
246
|
+
const NUMERIC_ENDPOINT_TOKEN_CHARACTER_PATTERN = /[\p{L}\p{M}\p{N}\p{Sc}%‰.,+\-/:°℃℉µμ·²³^]/u;
|
|
247
|
+
const NUMERIC_ENDPOINT_START_PATTERN = /^(?:[+-]?\p{Sc}?|\p{Sc}[+-]?)\p{N}/u;
|
|
248
|
+
const NUMERIC_CHARACTER_REFERENCE_PATTERN = /&#(?:x[0-9a-f]+|\d+);/giu;
|
|
246
249
|
const MARKDOWN_FENCED_CODE_PATTERN = /^ {0,3}(`{3,}|~{3,})/;
|
|
247
250
|
const ANGLE_BRACKET_PLACEHOLDER_PREFIX = "\uE000OBANGLE";
|
|
248
251
|
const ANGLE_BRACKET_PLACEHOLDER_SUFFIX = "\uE001";
|
|
@@ -285,19 +288,39 @@ function hasLiteralAngleBracketTextTokenLoss(sourceMarkdown, renderedMarkdown) {
|
|
|
285
288
|
}
|
|
286
289
|
return false;
|
|
287
290
|
}
|
|
288
|
-
function
|
|
289
|
-
|
|
291
|
+
function getNumericTildeRangeRunSignatures(markdown) {
|
|
292
|
+
const normalizedMarkdown = markdown.replace(/\\(?=~)/g, "");
|
|
293
|
+
return getNumericTildeRangeRuns(normalizedMarkdown).map((run) => {
|
|
294
|
+
const leftEndpoint = getNumericEndpointBefore(normalizedMarkdown, run.start);
|
|
295
|
+
const rightEndpoint = getNumericEndpointAfter(normalizedMarkdown, run.start + run.length);
|
|
296
|
+
return JSON.stringify([leftEndpoint, run.length, rightEndpoint]);
|
|
297
|
+
});
|
|
290
298
|
}
|
|
291
299
|
function hasNumericTildeRangeMarkers(markdown) {
|
|
292
|
-
return
|
|
300
|
+
return getNumericTildeRangeRunSignatures(markdown).length > 0;
|
|
293
301
|
}
|
|
294
302
|
function hasNumericTildeRangeMarkerLoss(sourceMarkdown, renderedMarkdown) {
|
|
295
|
-
const
|
|
296
|
-
|
|
303
|
+
const sourceRunSignatures = getNumericTildeRangeRunSignatures(sourceMarkdown);
|
|
304
|
+
if (sourceRunSignatures.length === 0) {
|
|
305
|
+
return false;
|
|
306
|
+
}
|
|
307
|
+
const renderedRunSignatures = getNumericTildeRangeRunSignatures(renderedMarkdown);
|
|
308
|
+
let renderedIndex = 0;
|
|
309
|
+
for (const sourceRunSignature of sourceRunSignatures) {
|
|
310
|
+
while (renderedIndex < renderedRunSignatures.length && renderedRunSignatures[renderedIndex] !== sourceRunSignature) {
|
|
311
|
+
renderedIndex += 1;
|
|
312
|
+
}
|
|
313
|
+
if (renderedIndex === renderedRunSignatures.length) {
|
|
314
|
+
return true;
|
|
315
|
+
}
|
|
316
|
+
renderedIndex += 1;
|
|
317
|
+
}
|
|
318
|
+
return false;
|
|
297
319
|
}
|
|
298
320
|
function protectMarkdownNumericTildeRanges(markdown) {
|
|
299
321
|
const protectedLines = [];
|
|
300
322
|
const placeholderToToken = /* @__PURE__ */ new Map();
|
|
323
|
+
const createPlaceholder = createNumericTildeRangePlaceholderFactory(markdown);
|
|
301
324
|
let activeFence = null;
|
|
302
325
|
for (const line of markdown.split(/(?<=\n)/)) {
|
|
303
326
|
const { body: lineBody, lineEnding } = splitMarkdownLineEnding(line);
|
|
@@ -322,7 +345,9 @@ function protectMarkdownNumericTildeRanges(markdown) {
|
|
|
322
345
|
protectedLines.push(line);
|
|
323
346
|
continue;
|
|
324
347
|
}
|
|
325
|
-
protectedLines.push(
|
|
348
|
+
protectedLines.push(
|
|
349
|
+
`${protectMarkdownLineNumericTildeRanges(lineBody, placeholderToToken, createPlaceholder)}${lineEnding}`
|
|
350
|
+
);
|
|
326
351
|
}
|
|
327
352
|
return {
|
|
328
353
|
markdown: protectedLines.join(""),
|
|
@@ -332,6 +357,11 @@ function protectMarkdownNumericTildeRanges(markdown) {
|
|
|
332
357
|
function protectMarkdownLineEndHardBreakMarkers(markdown) {
|
|
333
358
|
const protectedLines = [];
|
|
334
359
|
const placeholderToToken = /* @__PURE__ */ new Map();
|
|
360
|
+
const createPlaceholder = createProtectedTextPlaceholderFactory(
|
|
361
|
+
markdown,
|
|
362
|
+
HARD_BREAK_PLACEHOLDER_PREFIX,
|
|
363
|
+
HARD_BREAK_PLACEHOLDER_SUFFIX
|
|
364
|
+
);
|
|
335
365
|
let activeFence = null;
|
|
336
366
|
const lines = markdown.split(/(?<=\n)/);
|
|
337
367
|
for (const [index, line] of lines.entries()) {
|
|
@@ -363,7 +393,8 @@ function protectMarkdownLineEndHardBreakMarkers(markdown) {
|
|
|
363
393
|
lineBody,
|
|
364
394
|
lineEnding,
|
|
365
395
|
isMarkdownHardBreakContinuationLine(nextLineBody),
|
|
366
|
-
placeholderToToken
|
|
396
|
+
placeholderToToken,
|
|
397
|
+
createPlaceholder
|
|
367
398
|
)}${lineEnding}`
|
|
368
399
|
);
|
|
369
400
|
}
|
|
@@ -375,6 +406,11 @@ function protectMarkdownLineEndHardBreakMarkers(markdown) {
|
|
|
375
406
|
function protectMarkdownTextAngleBrackets(markdown) {
|
|
376
407
|
const protectedLines = [];
|
|
377
408
|
const placeholderToToken = /* @__PURE__ */ new Map();
|
|
409
|
+
const createPlaceholder = createProtectedTextPlaceholderFactory(
|
|
410
|
+
markdown,
|
|
411
|
+
ANGLE_BRACKET_PLACEHOLDER_PREFIX,
|
|
412
|
+
ANGLE_BRACKET_PLACEHOLDER_SUFFIX
|
|
413
|
+
);
|
|
378
414
|
let activeFence = null;
|
|
379
415
|
for (const line of markdown.split(/(?<=\n)/)) {
|
|
380
416
|
const { body: lineBody, lineEnding } = splitMarkdownLineEnding(line);
|
|
@@ -399,7 +435,9 @@ function protectMarkdownTextAngleBrackets(markdown) {
|
|
|
399
435
|
protectedLines.push(line);
|
|
400
436
|
continue;
|
|
401
437
|
}
|
|
402
|
-
protectedLines.push(
|
|
438
|
+
protectedLines.push(
|
|
439
|
+
`${protectMarkdownLineTextAngleBrackets(lineBody, placeholderToToken, createPlaceholder)}${lineEnding}`
|
|
440
|
+
);
|
|
403
441
|
}
|
|
404
442
|
return {
|
|
405
443
|
markdown: protectedLines.join(""),
|
|
@@ -428,68 +466,69 @@ function isClosingFenceLine(line, fence) {
|
|
|
428
466
|
const escapedMarker = fence.marker === "`" ? "`" : "~";
|
|
429
467
|
return new RegExp(`^ {0,3}${escapedMarker}{${fence.length},} *$`).test(line);
|
|
430
468
|
}
|
|
431
|
-
function protectMarkdownLineTextAngleBrackets(line, placeholderToToken) {
|
|
469
|
+
function protectMarkdownLineTextAngleBrackets(line, placeholderToToken, createPlaceholder) {
|
|
432
470
|
let result = "";
|
|
433
471
|
let cursor = 0;
|
|
434
472
|
while (cursor < line.length) {
|
|
435
|
-
const
|
|
436
|
-
if (
|
|
437
|
-
result += replaceLiteralAngleBracketTextTokens(line.slice(cursor), placeholderToToken);
|
|
438
|
-
break;
|
|
439
|
-
}
|
|
440
|
-
result += replaceLiteralAngleBracketTextTokens(line.slice(cursor, codeStart), placeholderToToken);
|
|
441
|
-
const delimiterLength = countRepeatedCharacter(line, codeStart, "`");
|
|
442
|
-
const codeEnd = line.indexOf("`".repeat(delimiterLength), codeStart + delimiterLength);
|
|
443
|
-
if (codeEnd === -1) {
|
|
444
|
-
result += replaceLiteralAngleBracketTextTokens(line.slice(codeStart), placeholderToToken);
|
|
473
|
+
const codeSpan = findNextInlineCodeSpan(line, cursor);
|
|
474
|
+
if (!codeSpan) {
|
|
475
|
+
result += replaceLiteralAngleBracketTextTokens(line.slice(cursor), placeholderToToken, createPlaceholder);
|
|
445
476
|
break;
|
|
446
477
|
}
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
478
|
+
result += replaceLiteralAngleBracketTextTokens(
|
|
479
|
+
line.slice(cursor, codeSpan.start),
|
|
480
|
+
placeholderToToken,
|
|
481
|
+
createPlaceholder
|
|
482
|
+
);
|
|
483
|
+
result += line.slice(codeSpan.start, codeSpan.end);
|
|
484
|
+
cursor = codeSpan.end;
|
|
450
485
|
}
|
|
451
486
|
return result;
|
|
452
487
|
}
|
|
453
|
-
function protectMarkdownLineNumericTildeRanges(line, placeholderToToken) {
|
|
488
|
+
function protectMarkdownLineNumericTildeRanges(line, placeholderToToken, createPlaceholder) {
|
|
454
489
|
let result = "";
|
|
455
490
|
let cursor = 0;
|
|
456
491
|
while (cursor < line.length) {
|
|
457
492
|
const protectedSpan = findNextMarkdownProtectedSpan(line, cursor);
|
|
458
493
|
if (!protectedSpan) {
|
|
459
|
-
result += replaceNumericTildeRangeMarkers(line.slice(cursor), placeholderToToken);
|
|
494
|
+
result += replaceNumericTildeRangeMarkers(line.slice(cursor), placeholderToToken, createPlaceholder);
|
|
460
495
|
break;
|
|
461
496
|
}
|
|
462
|
-
result += replaceNumericTildeRangeMarkers(
|
|
497
|
+
result += replaceNumericTildeRangeMarkers(
|
|
498
|
+
line.slice(cursor, protectedSpan.start),
|
|
499
|
+
placeholderToToken,
|
|
500
|
+
createPlaceholder
|
|
501
|
+
);
|
|
463
502
|
result += line.slice(protectedSpan.start, protectedSpan.end);
|
|
464
503
|
cursor = protectedSpan.end;
|
|
465
504
|
}
|
|
466
505
|
return result;
|
|
467
506
|
}
|
|
468
507
|
function findNextMarkdownProtectedSpan(line, cursor) {
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
508
|
+
return [
|
|
509
|
+
findNextInlineCodeSpan(line, cursor),
|
|
510
|
+
findNextMarkdownLinkDestinationSpan(line, cursor),
|
|
511
|
+
findNextMarkdownAngleBracketSpan(line, cursor)
|
|
512
|
+
].reduce((nextSpan, span) => {
|
|
513
|
+
if (!span || nextSpan && nextSpan.start <= span.start) {
|
|
514
|
+
return nextSpan;
|
|
515
|
+
}
|
|
516
|
+
return span;
|
|
517
|
+
}, null);
|
|
478
518
|
}
|
|
479
519
|
function findNextInlineCodeSpan(line, cursor) {
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
520
|
+
let codeStart = line.indexOf("`", cursor);
|
|
521
|
+
while (codeStart !== -1) {
|
|
522
|
+
const delimiterLength = countRepeatedCharacter(line, codeStart, "`");
|
|
523
|
+
if (!isEscapedMarkdownCharacter(line, codeStart)) {
|
|
524
|
+
const end = findMatchingBacktickRunEnd(line, codeStart, delimiterLength);
|
|
525
|
+
if (end !== null) {
|
|
526
|
+
return { start: codeStart, end };
|
|
527
|
+
}
|
|
528
|
+
}
|
|
529
|
+
codeStart = line.indexOf("`", codeStart + delimiterLength);
|
|
488
530
|
}
|
|
489
|
-
return
|
|
490
|
-
start: codeStart,
|
|
491
|
-
end: codeEnd + delimiterLength
|
|
492
|
-
};
|
|
531
|
+
return null;
|
|
493
532
|
}
|
|
494
533
|
function findNextMarkdownLinkDestinationSpan(line, cursor) {
|
|
495
534
|
const linkDestinationPrefix = line.indexOf("](", cursor);
|
|
@@ -497,39 +536,146 @@ function findNextMarkdownLinkDestinationSpan(line, cursor) {
|
|
|
497
536
|
return null;
|
|
498
537
|
}
|
|
499
538
|
const destinationStart = linkDestinationPrefix + 2;
|
|
500
|
-
|
|
501
|
-
|
|
539
|
+
let parenthesisDepth = 0;
|
|
540
|
+
for (let destinationEnd = destinationStart; destinationEnd < line.length; destinationEnd += 1) {
|
|
541
|
+
const character = line[destinationEnd];
|
|
542
|
+
if (character === "\\") {
|
|
543
|
+
destinationEnd += 1;
|
|
544
|
+
continue;
|
|
545
|
+
}
|
|
546
|
+
if (character === "(") {
|
|
547
|
+
parenthesisDepth += 1;
|
|
548
|
+
continue;
|
|
549
|
+
}
|
|
550
|
+
if (character !== ")") {
|
|
551
|
+
continue;
|
|
552
|
+
}
|
|
553
|
+
if (parenthesisDepth > 0) {
|
|
554
|
+
parenthesisDepth -= 1;
|
|
555
|
+
continue;
|
|
556
|
+
}
|
|
557
|
+
return {
|
|
558
|
+
start: destinationStart,
|
|
559
|
+
end: destinationEnd
|
|
560
|
+
};
|
|
561
|
+
}
|
|
562
|
+
return null;
|
|
563
|
+
}
|
|
564
|
+
function findNextMarkdownAngleBracketSpan(line, cursor) {
|
|
565
|
+
const start = line.indexOf("<", cursor);
|
|
566
|
+
if (start === -1) {
|
|
502
567
|
return null;
|
|
503
568
|
}
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
}
|
|
569
|
+
const end = line.indexOf(">", start + 1);
|
|
570
|
+
if (end === -1) {
|
|
571
|
+
return null;
|
|
572
|
+
}
|
|
573
|
+
return { start, end: end + 1 };
|
|
508
574
|
}
|
|
509
|
-
function replaceLiteralAngleBracketTextTokens(text, placeholderToToken) {
|
|
575
|
+
function replaceLiteralAngleBracketTextTokens(text, placeholderToToken, createPlaceholder) {
|
|
510
576
|
return text.replace(MARKDOWN_ANGLE_BRACKET_TOKEN_PATTERN, (match, innerText) => {
|
|
511
577
|
if (isMarkdownAutolinkAngleBracketText(innerText)) {
|
|
512
578
|
return match;
|
|
513
579
|
}
|
|
514
|
-
const placeholder =
|
|
580
|
+
const placeholder = createPlaceholder();
|
|
515
581
|
placeholderToToken.set(placeholder, match);
|
|
516
582
|
return placeholder;
|
|
517
583
|
});
|
|
518
584
|
}
|
|
519
|
-
function
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
585
|
+
function isPotentialNumericTildeRangeRun(value, start, end) {
|
|
586
|
+
if (end - start > 2) {
|
|
587
|
+
return false;
|
|
588
|
+
}
|
|
589
|
+
return getNumericEndpointBefore(value, start) !== null && getNumericEndpointAfter(value, end) !== null;
|
|
590
|
+
}
|
|
591
|
+
function findEndpointTokenBefore(value, end) {
|
|
592
|
+
let start = end;
|
|
593
|
+
while (start > 0 && NUMERIC_ENDPOINT_TOKEN_CHARACTER_PATTERN.test(value[start - 1] ?? "")) {
|
|
594
|
+
start -= 1;
|
|
595
|
+
}
|
|
596
|
+
return {
|
|
597
|
+
start,
|
|
598
|
+
token: value.slice(start, end)
|
|
599
|
+
};
|
|
600
|
+
}
|
|
601
|
+
function findEndpointTokenAfter(value, start) {
|
|
602
|
+
let end = start;
|
|
603
|
+
while (end < value.length && NUMERIC_ENDPOINT_TOKEN_CHARACTER_PATTERN.test(value[end] ?? "")) {
|
|
604
|
+
end += 1;
|
|
605
|
+
}
|
|
606
|
+
return value.slice(start, end);
|
|
607
|
+
}
|
|
608
|
+
function getNumericEndpointBefore(value, end) {
|
|
609
|
+
const endpoint = findEndpointTokenBefore(value, end);
|
|
610
|
+
if (NUMERIC_ENDPOINT_START_PATTERN.test(endpoint.token)) {
|
|
611
|
+
return endpoint.token;
|
|
612
|
+
}
|
|
613
|
+
if (!endpoint.token) {
|
|
614
|
+
return null;
|
|
615
|
+
}
|
|
616
|
+
let previousEnd = endpoint.start;
|
|
617
|
+
while (previousEnd > 0 && (value[previousEnd - 1] === " " || value[previousEnd - 1] === " ")) {
|
|
618
|
+
previousEnd -= 1;
|
|
619
|
+
}
|
|
620
|
+
if (previousEnd === endpoint.start) {
|
|
621
|
+
return null;
|
|
622
|
+
}
|
|
623
|
+
const previousEndpoint = findEndpointTokenBefore(value, previousEnd);
|
|
624
|
+
return NUMERIC_ENDPOINT_START_PATTERN.test(previousEndpoint.token) ? value.slice(previousEndpoint.start, end) : null;
|
|
625
|
+
}
|
|
626
|
+
function getNumericEndpointAfter(value, start) {
|
|
627
|
+
const endpoint = findEndpointTokenAfter(value, start);
|
|
628
|
+
return NUMERIC_ENDPOINT_START_PATTERN.test(endpoint) ? endpoint : null;
|
|
629
|
+
}
|
|
630
|
+
function getNumericTildeRangeRuns(value) {
|
|
631
|
+
const numericRuns = [];
|
|
632
|
+
const pendingNumericBoundaryStrikeOpeners = /* @__PURE__ */ new Set();
|
|
633
|
+
for (const match of value.matchAll(TILDE_RUN_PATTERN)) {
|
|
634
|
+
const start = match.index;
|
|
635
|
+
const length = match[0].length;
|
|
636
|
+
const end = start + length;
|
|
637
|
+
if (length > 2) {
|
|
638
|
+
continue;
|
|
639
|
+
}
|
|
640
|
+
const canOpen = end < value.length && !/\s/u.test(value[end] ?? "");
|
|
641
|
+
const canClose = start > 0 && !/\s/u.test(value[start - 1] ?? "");
|
|
642
|
+
const isNumericRange = isPotentialNumericTildeRangeRun(value, start, end);
|
|
643
|
+
if (isNumericRange) {
|
|
644
|
+
if (canClose && pendingNumericBoundaryStrikeOpeners.delete(length)) {
|
|
645
|
+
continue;
|
|
646
|
+
}
|
|
647
|
+
numericRuns.push({ length, start });
|
|
648
|
+
continue;
|
|
649
|
+
}
|
|
650
|
+
if (canClose && pendingNumericBoundaryStrikeOpeners.delete(length)) {
|
|
651
|
+
continue;
|
|
652
|
+
}
|
|
653
|
+
if (canOpen && getNumericEndpointBefore(value, start) !== null) {
|
|
654
|
+
pendingNumericBoundaryStrikeOpeners.add(length);
|
|
655
|
+
}
|
|
656
|
+
}
|
|
657
|
+
return numericRuns;
|
|
658
|
+
}
|
|
659
|
+
function replaceNumericTildeRangeMarkers(text, placeholderToToken, createPlaceholder) {
|
|
660
|
+
const numericRunStarts = new Set(getNumericTildeRangeRuns(text).map((run) => run.start));
|
|
661
|
+
return text.replace(TILDE_RUN_PATTERN, (tildeRun, offset) => {
|
|
662
|
+
if (!numericRunStarts.has(offset)) {
|
|
663
|
+
return tildeRun;
|
|
664
|
+
}
|
|
665
|
+
return [...tildeRun].map(() => {
|
|
666
|
+
const placeholder = createPlaceholder();
|
|
667
|
+
placeholderToToken.set(placeholder, "~");
|
|
668
|
+
return placeholder;
|
|
669
|
+
}).join("");
|
|
524
670
|
});
|
|
525
671
|
}
|
|
526
|
-
function protectMarkdownLineEndHardBreakMarker(line, lineEnding, hasContinuationLine, placeholderToToken) {
|
|
672
|
+
function protectMarkdownLineEndHardBreakMarker(line, lineEnding, hasContinuationLine, placeholderToToken, createPlaceholder) {
|
|
527
673
|
if (!lineEnding || !line.endsWith("\\")) {
|
|
528
674
|
return line;
|
|
529
675
|
}
|
|
530
|
-
const placeholder =
|
|
676
|
+
const placeholder = createPlaceholder();
|
|
531
677
|
const shouldPreserveAsHardBreak = hasContinuationLine && !hasUnclosedInlineCodeSpanAtLineEnd(line);
|
|
532
|
-
placeholderToToken.set(placeholder, shouldPreserveAsHardBreak ? "" : "\\");
|
|
678
|
+
placeholderToToken.set(placeholder, shouldPreserveAsHardBreak ? "\n" : "\\");
|
|
533
679
|
return `${line.slice(0, -1)}${placeholder}`;
|
|
534
680
|
}
|
|
535
681
|
function isMarkdownHardBreakContinuationLine(line) {
|
|
@@ -569,14 +715,35 @@ function hasUnclosedInlineCodeSpanAtLineEnd(line) {
|
|
|
569
715
|
}
|
|
570
716
|
return openDelimiter !== null;
|
|
571
717
|
}
|
|
572
|
-
function
|
|
573
|
-
|
|
718
|
+
function decodeNumericCharacterReference(reference) {
|
|
719
|
+
const value = reference.slice(2, -1);
|
|
720
|
+
const isHexadecimal = value[0]?.toLowerCase() === "x";
|
|
721
|
+
const codePoint = Number.parseInt(isHexadecimal ? value.slice(1) : value, isHexadecimal ? 16 : 10);
|
|
722
|
+
if (!Number.isSafeInteger(codePoint) || codePoint < 0 || codePoint > 1114111) {
|
|
723
|
+
return reference;
|
|
724
|
+
}
|
|
725
|
+
return String.fromCodePoint(codePoint);
|
|
574
726
|
}
|
|
575
|
-
function
|
|
576
|
-
return
|
|
727
|
+
function createNumericTildeRangePlaceholderFactory(markdown) {
|
|
728
|
+
return createProtectedTextPlaceholderFactory(
|
|
729
|
+
markdown,
|
|
730
|
+
NUMERIC_TILDE_RANGE_PLACEHOLDER_PREFIX,
|
|
731
|
+
NUMERIC_TILDE_RANGE_PLACEHOLDER_SUFFIX
|
|
732
|
+
);
|
|
577
733
|
}
|
|
578
|
-
function
|
|
579
|
-
|
|
734
|
+
function createProtectedTextPlaceholderFactory(markdown, prefix, suffix) {
|
|
735
|
+
const decodedMarkdown = markdown.replace(NUMERIC_CHARACTER_REFERENCE_PATTERN, decodeNumericCharacterReference);
|
|
736
|
+
const lowercaseMarkdown = markdown.toLowerCase();
|
|
737
|
+
let index = 0;
|
|
738
|
+
return () => {
|
|
739
|
+
let placeholder = `${prefix}${index}${suffix}`;
|
|
740
|
+
while (markdown.includes(placeholder) || lowercaseMarkdown.includes(encodeURIComponent(placeholder).toLowerCase()) || decodedMarkdown.includes(placeholder)) {
|
|
741
|
+
index += 1;
|
|
742
|
+
placeholder = `${prefix}${index}${suffix}`;
|
|
743
|
+
}
|
|
744
|
+
index += 1;
|
|
745
|
+
return placeholder;
|
|
746
|
+
};
|
|
580
747
|
}
|
|
581
748
|
function countRepeatedCharacter(value, start, character) {
|
|
582
749
|
let cursor = start;
|
|
@@ -585,6 +752,28 @@ function countRepeatedCharacter(value, start, character) {
|
|
|
585
752
|
}
|
|
586
753
|
return cursor - start;
|
|
587
754
|
}
|
|
755
|
+
function isEscapedMarkdownCharacter(value, index) {
|
|
756
|
+
let precedingBackslashes = 0;
|
|
757
|
+
for (let cursor = index - 1; cursor >= 0 && value[cursor] === "\\"; cursor -= 1) {
|
|
758
|
+
precedingBackslashes += 1;
|
|
759
|
+
}
|
|
760
|
+
return precedingBackslashes % 2 === 1;
|
|
761
|
+
}
|
|
762
|
+
function findMatchingBacktickRunEnd(line, start, delimiterLength) {
|
|
763
|
+
let cursor = start + delimiterLength;
|
|
764
|
+
while (cursor < line.length) {
|
|
765
|
+
const candidate = line.indexOf("`", cursor);
|
|
766
|
+
if (candidate === -1) {
|
|
767
|
+
return null;
|
|
768
|
+
}
|
|
769
|
+
const candidateLength = countRepeatedCharacter(line, candidate, "`");
|
|
770
|
+
if (candidateLength === delimiterLength) {
|
|
771
|
+
return candidate + candidateLength;
|
|
772
|
+
}
|
|
773
|
+
cursor = candidate + candidateLength;
|
|
774
|
+
}
|
|
775
|
+
return null;
|
|
776
|
+
}
|
|
588
777
|
function findTagPlaceholderAtCursor(text, cursor, placeholderToTag) {
|
|
589
778
|
for (const [placeholder, tagToken] of placeholderToTag.entries()) {
|
|
590
779
|
if (text.startsWith(placeholder, cursor)) {
|
|
@@ -629,13 +818,7 @@ function restoreProtectedTextPlaceholders(blocks, placeholderToToken) {
|
|
|
629
818
|
if (placeholderToToken.size === 0) {
|
|
630
819
|
return blocks;
|
|
631
820
|
}
|
|
632
|
-
return
|
|
633
|
-
blocks,
|
|
634
|
-
(content) => mapBlockContent(
|
|
635
|
-
content,
|
|
636
|
-
(inline) => restoreProtectedTextInValue(inline, placeholderToToken)
|
|
637
|
-
)
|
|
638
|
-
);
|
|
821
|
+
return restoreProtectedTextInValue(blocks, placeholderToToken);
|
|
639
822
|
}
|
|
640
823
|
function restoreProtectedTextInValue(value, placeholderToToken) {
|
|
641
824
|
if (typeof value === "string") {
|
|
@@ -654,6 +837,17 @@ function restoreProtectedTextInValue(value, placeholderToToken) {
|
|
|
654
837
|
function restoreProtectedText(text, placeholderToToken) {
|
|
655
838
|
let restoredText = text;
|
|
656
839
|
for (const [placeholder, token] of placeholderToToken.entries()) {
|
|
840
|
+
if (placeholder.startsWith(HARD_BREAK_PLACEHOLDER_PREFIX) && token === "\n") {
|
|
841
|
+
restoredText = restoredText.split(`${placeholder} `).join(placeholder).split(`${placeholder}
|
|
842
|
+
`).join(`${placeholder}
|
|
843
|
+
`).split(`${placeholder}\r
|
|
844
|
+
`).join(`${placeholder}\r
|
|
845
|
+
`);
|
|
846
|
+
}
|
|
847
|
+
restoredText = restoredText.replace(
|
|
848
|
+
new RegExp(encodeURIComponent(placeholder), "gi"),
|
|
849
|
+
encodeURIComponent(token)
|
|
850
|
+
);
|
|
657
851
|
restoredText = restoredText.split(placeholder).join(token);
|
|
658
852
|
}
|
|
659
853
|
return restoredText;
|
|
@@ -828,7 +1022,7 @@ function collectTagIds(blocks) {
|
|
|
828
1022
|
let editorInstance = null;
|
|
829
1023
|
function getEditor() {
|
|
830
1024
|
if (!editorInstance) {
|
|
831
|
-
editorInstance =
|
|
1025
|
+
editorInstance = BlockNoteMarkdownEditor.create();
|
|
832
1026
|
}
|
|
833
1027
|
return editorInstance;
|
|
834
1028
|
}
|
|
@@ -943,4 +1137,3 @@ export {
|
|
|
943
1137
|
hasUnsupportedMarkdownBlocks,
|
|
944
1138
|
markdownToBlocksJson
|
|
945
1139
|
};
|
|
946
|
-
//# sourceMappingURL=blocknote.js.map
|
|
@@ -13,6 +13,7 @@ class AppError extends Error {
|
|
|
13
13
|
const createAppError = (status, code, message, details) => {
|
|
14
14
|
return new AppError(status, code, message, details);
|
|
15
15
|
};
|
|
16
|
+
const hasErrorType = (error, type) => error instanceof Error && "type" in error && error.type === type;
|
|
16
17
|
const createErrorHandler = () => {
|
|
17
18
|
return (error, _req, res, next) => {
|
|
18
19
|
if (res.headersSent) {
|
|
@@ -27,6 +28,13 @@ const createErrorHandler = () => {
|
|
|
27
28
|
}).end();
|
|
28
29
|
return;
|
|
29
30
|
}
|
|
31
|
+
if (hasErrorType(error, "encoding.unsupported")) {
|
|
32
|
+
res.status(415).json({
|
|
33
|
+
code: "UNSUPPORTED_CONTENT_ENCODING",
|
|
34
|
+
message: "Compressed request bodies are not supported."
|
|
35
|
+
}).end();
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
30
38
|
if (error instanceof Error && error.message.startsWith("CSRF token ")) {
|
|
31
39
|
res.status(403).json({
|
|
32
40
|
code: "CSRF_TOKEN_INVALID",
|
|
@@ -48,4 +56,3 @@ export {
|
|
|
48
56
|
createAppError,
|
|
49
57
|
createErrorHandler
|
|
50
58
|
};
|
|
51
|
-
//# sourceMappingURL=error-handler.js.map
|
package/server/dist/paths.js
CHANGED
package/server/dist/start.js
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
//# sourceMappingURL=input.js.map
|