From 6c9f2659189024f4b660503c9726cc0b665b3eeb Mon Sep 17 00:00:00 2001 From: Hemachandar <132386067+hmacr@users.noreply.github.com> Date: Thu, 10 Oct 2024 07:34:04 +0530 Subject: [PATCH] feat: Lossless JSON import (#7274) * feat: Lossless JSON import * transform node only when attachments are present in the zip --- server/queues/tasks/ImportJSONTask.test.ts | 37 ++++++++ server/queues/tasks/ImportJSONTask.ts | 97 +++++++++++++++++---- server/queues/tasks/ImportTask.ts | 2 + server/test/fixtures/outline-json.zip | Bin 0 -> 46911 bytes 4 files changed, 118 insertions(+), 18 deletions(-) create mode 100644 server/queues/tasks/ImportJSONTask.test.ts create mode 100644 server/test/fixtures/outline-json.zip diff --git a/server/queues/tasks/ImportJSONTask.test.ts b/server/queues/tasks/ImportJSONTask.test.ts new file mode 100644 index 0000000000..de768ef202 --- /dev/null +++ b/server/queues/tasks/ImportJSONTask.test.ts @@ -0,0 +1,37 @@ +import path from "path"; +import { FileOperation } from "@server/models"; +import { buildFileOperation } from "@server/test/factories"; +import ImportJSONTask from "./ImportJSONTask"; + +describe("ImportJSONTask", () => { + it("should import the documents, attachments", async () => { + const fileOperation = await buildFileOperation(); + Object.defineProperty(fileOperation, "handle", { + get() { + return { + path: path.resolve( + __dirname, + "..", + "..", + "test", + "fixtures", + "outline-json.zip" + ), + cleanup: async () => {}, + }; + }, + }); + jest.spyOn(FileOperation, "findByPk").mockResolvedValue(fileOperation); + + const props = { + fileOperationId: fileOperation.id, + }; + + const task = new ImportJSONTask(); + const response = await task.perform(props); + + expect(response.collections.size).toEqual(1); + expect(response.documents.size).toEqual(2); + expect(response.attachments.size).toEqual(1); + }); +}); diff --git a/server/queues/tasks/ImportJSONTask.ts b/server/queues/tasks/ImportJSONTask.ts index ad204daded..af81f1d76b 100644 --- a/server/queues/tasks/ImportJSONTask.ts +++ b/server/queues/tasks/ImportJSONTask.ts @@ -1,13 +1,13 @@ import path from "path"; import fs from "fs-extra"; -import escapeRegExp from "lodash/escapeRegExp"; import find from "lodash/find"; import mime from "mime-types"; -import { Node } from "prosemirror-model"; +import { Fragment, Node } from "prosemirror-model"; import { v4 as uuidv4 } from "uuid"; +import { ProsemirrorData } from "@shared/types"; import { schema, serializer } from "@server/editor"; import Logger from "@server/logging/Logger"; -import { FileOperation } from "@server/models"; +import { Attachment, FileOperation } from "@server/models"; import { AttachmentJSONExport, CollectionJSONExport, @@ -76,9 +76,10 @@ export default class ImportJSONTask extends ImportTask { output.documents.push({ ...node, path: "", - // TODO: This is kind of temporary, we can import the document - // structure directly in the future. + // populate text to maintain consistency with existing data. + // moving forward, `data` field will be used. text: serializer.serialize(Node.fromJSON(schema, node.data)), + data: node.data, icon: node.icon ?? node.emoji, color: node.color, createdAt: node.createdAt ? new Date(node.createdAt) : undefined, @@ -151,21 +152,81 @@ export default class ImportJSONTask extends ImportTask { } } - // Check all of the attachments we've created against urls in the text - // and replace them out with attachment redirect urls before continuing. - for (const document of output.documents) { - for (const attachment of output.attachments) { - const encodedPath = encodeURI( - `/api/attachments.redirect?id=${attachment.externalId}` - ); - - document.text = document.text.replace( - new RegExp(escapeRegExp(encodedPath), "g"), - `<<${attachment.id}>>` - ); - } + // Check all of the attachments we've created against urls and + // replace them with the correct redirect urls before continuing. + if (output.attachments.length) { + this.replaceAttachmentURLs(output); } return output; } + + private replaceAttachmentURLs(output: StructuredImportData) { + const attachmentTypes = ["attachment", "image", "video"]; + const urlRegex = /\/api\/attachments.redirect\?id=(.+)/; + + const attachmentExternalIdMap = output.attachments.reduce( + (obj, attachment) => { + if (attachment.externalId) { + obj[attachment.externalId] = attachment; + } + return obj; + }, + {} as Record + ); + + const getRedirectPath = (existingPath?: string): string | undefined => { + if (!existingPath) { + return; + } + + const match = existingPath.match(urlRegex); + if (!match) { + return existingPath; + } + + const attachment = attachmentExternalIdMap[match[1]]; + // maintain the existing behaviour of using existingPath when attachment id is not present. + return attachment + ? Attachment.getRedirectUrl(attachment.id) + : existingPath; + }; + + const transformAttachmentNode = (node: Node): Node => { + const json = node.toJSON() as ProsemirrorData; + const attrs = json.attrs ?? {}; + + if (node.type.name === "attachment") { + // attachment node uses 'href' attribute + attrs.href = getRedirectPath(attrs.href as string); + } else if (node.type.name === "image" || node.type.name === "video") { + // image & video nodes use 'src' attribute + attrs.src = getRedirectPath(attrs.src as string); + } + + json.attrs = attrs; + return Node.fromJSON(schema, json); + }; + + const transformFragment = (fragment: Fragment): Fragment => { + const nodes: Node[] = []; + + fragment.forEach((node) => { + nodes.push( + attachmentTypes.includes(node.type.name) + ? transformAttachmentNode(node) + : node.copy(transformFragment(node.content)) + ); + }); + + return Fragment.fromArray(nodes); + }; + + for (const document of output.documents) { + const node = Node.fromJSON(schema, document.data); + const transformedNode = node.copy(transformFragment(node.content)); + document.data = transformedNode; + document.text = serializer.serialize(transformedNode); + } + } } diff --git a/server/queues/tasks/ImportTask.ts b/server/queues/tasks/ImportTask.ts index 5a4af8d164..1bb69426fd 100644 --- a/server/queues/tasks/ImportTask.ts +++ b/server/queues/tasks/ImportTask.ts @@ -9,6 +9,7 @@ import { CollectionPermission, CollectionSort, FileOperationState, + ProsemirrorData, } from "@shared/types"; import { CollectionValidation } from "@shared/validations"; import attachmentCreator from "@server/commands/attachmentCreator"; @@ -459,6 +460,7 @@ export default abstract class ImportTask extends BaseTask { title: item.title, urlId: item.urlId, text, + content: item.data ? (item.data as ProsemirrorData) : undefined, collectionId: item.collectionId, createdAt: item.createdAt, updatedAt: item.updatedAt ?? item.createdAt, diff --git a/server/test/fixtures/outline-json.zip b/server/test/fixtures/outline-json.zip new file mode 100644 index 0000000000000000000000000000000000000000..a9fe2dec430a260ab499d8006275629a5d0c1638 GIT binary patch literal 46911 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