fix: Aligned images do not load in publicly shared documents (#2248)
This commit is contained in:
@ -1,5 +1,5 @@
|
|||||||
// @flow
|
// @flow
|
||||||
const attachmentRegex = /!\[.*?\]\(\/api\/attachments\.redirect\?id=(?<id>[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})\)/gi;
|
const attachmentRegex = /\/api\/attachments\.redirect\?id=(?<id>[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})/gi;
|
||||||
|
|
||||||
export default function parseAttachmentIds(text: any): string[] {
|
export default function parseAttachmentIds(text: any): string[] {
|
||||||
return [...text.matchAll(attachmentRegex)].map(
|
return [...text.matchAll(attachmentRegex)].map(
|
||||||
|
95
server/utils/parseAttachmentIds.test.js
Normal file
95
server/utils/parseAttachmentIds.test.js
Normal file
@ -0,0 +1,95 @@
|
|||||||
|
// @flow
|
||||||
|
import { expect } from "@jest/globals";
|
||||||
|
import { v4 as uuidv4 } from "uuid";
|
||||||
|
import parseAttachmentIds from "./parseAttachmentIds";
|
||||||
|
|
||||||
|
it("should return an empty array with no matches", () => {
|
||||||
|
expect(parseAttachmentIds(`some random text`).length).toBe(0);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should not return orphaned UUID's", () => {
|
||||||
|
const uuid = uuidv4();
|
||||||
|
expect(
|
||||||
|
parseAttachmentIds(`some random text with a uuid ${uuid}
|
||||||
|
|
||||||
|
`).length
|
||||||
|
).toBe(0);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should parse attachment ID from markdown", () => {
|
||||||
|
const uuid = uuidv4();
|
||||||
|
const results = parseAttachmentIds(
|
||||||
|
``
|
||||||
|
);
|
||||||
|
|
||||||
|
expect(results.length).toBe(1);
|
||||||
|
expect(results[0]).toBe(uuid);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should parse attachment ID from markdown with additional query params", () => {
|
||||||
|
const uuid = uuidv4();
|
||||||
|
const results = parseAttachmentIds(
|
||||||
|
``
|
||||||
|
);
|
||||||
|
|
||||||
|
expect(results.length).toBe(1);
|
||||||
|
expect(results[0]).toBe(uuid);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should parse attachment ID from markdown with fully qualified url", () => {
|
||||||
|
const uuid = uuidv4();
|
||||||
|
const results = parseAttachmentIds(
|
||||||
|
``
|
||||||
|
);
|
||||||
|
|
||||||
|
expect(process.env.URL).toBeTruthy();
|
||||||
|
expect(results.length).toBe(1);
|
||||||
|
expect(results[0]).toBe(uuid);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should parse attachment ID from markdown with title", () => {
|
||||||
|
const uuid = uuidv4();
|
||||||
|
const results = parseAttachmentIds(
|
||||||
|
``
|
||||||
|
);
|
||||||
|
|
||||||
|
expect(results.length).toBe(1);
|
||||||
|
expect(results[0]).toBe(uuid);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should parse multiple attachment IDs from markdown", () => {
|
||||||
|
const uuid = uuidv4();
|
||||||
|
const uuid2 = uuidv4();
|
||||||
|
const results = parseAttachmentIds(
|
||||||
|
`
|
||||||
|
|
||||||
|
some text
|
||||||
|
|
||||||
|
`
|
||||||
|
);
|
||||||
|
|
||||||
|
expect(results.length).toBe(2);
|
||||||
|
expect(results[0]).toBe(uuid);
|
||||||
|
expect(results[1]).toBe(uuid2);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should parse attachment ID from html", () => {
|
||||||
|
const uuid = uuidv4();
|
||||||
|
const results = parseAttachmentIds(
|
||||||
|
`<img src="/api/attachments.redirect?id=${uuid}" />`
|
||||||
|
);
|
||||||
|
|
||||||
|
expect(results.length).toBe(1);
|
||||||
|
expect(results[0]).toBe(uuid);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should parse attachment ID from html with fully qualified url", () => {
|
||||||
|
const uuid = uuidv4();
|
||||||
|
const results = parseAttachmentIds(
|
||||||
|
`<img src="${process.env.URL}/api/attachments.redirect?id=${uuid}" />`
|
||||||
|
);
|
||||||
|
|
||||||
|
expect(process.env.URL).toBeTruthy();
|
||||||
|
expect(results.length).toBe(1);
|
||||||
|
expect(results[0]).toBe(uuid);
|
||||||
|
});
|
Reference in New Issue
Block a user