From 7b1973c058e0cb7dfa436953c6f046c2b3b145eb Mon Sep 17 00:00:00 2001 From: MC Naveen <8493007+mcnaveen@users.noreply.github.com> Date: Mon, 23 Oct 2023 14:30:38 +0530 Subject: [PATCH] feat(Ghost Node): Add support for lexical format (#7488) --- packages/nodes-base/nodes/Ghost/Ghost.node.ts | 17 +++++++ .../nodes-base/nodes/Ghost/PostDescription.ts | 48 +++++++++++++++++++ 2 files changed, 65 insertions(+) diff --git a/packages/nodes-base/nodes/Ghost/Ghost.node.ts b/packages/nodes-base/nodes/Ghost/Ghost.node.ts index 36733028cb..de6a521aaf 100644 --- a/packages/nodes-base/nodes/Ghost/Ghost.node.ts +++ b/packages/nodes-base/nodes/Ghost/Ghost.node.ts @@ -195,6 +195,14 @@ export class Ghost implements INodeType { if (contentFormat === 'html') { post.html = content; qs.source = 'html'; + } else if (contentFormat === 'lexical') { + const lexical = validateJSON(content); + if (lexical === undefined) { + throw new NodeOperationError(this.getNode(), 'Content must be a valid JSON', { + itemIndex: i, + }); + } + post.lexical = content; } else { const mobileDoc = validateJSON(content); if (mobileDoc === undefined) { @@ -293,6 +301,15 @@ export class Ghost implements INodeType { post.html = updateFields.content || ''; qs.source = 'html'; delete updateFields.content; + } else if (contentFormat === 'lexical') { + const lexical = validateJSON((updateFields.contentJson as string) || undefined); + if (lexical === undefined) { + throw new NodeOperationError(this.getNode(), 'Content must be a valid JSON', { + itemIndex: i, + }); + } + post.lexical = updateFields.contentJson; + delete updateFields.contentJson; } else { const mobileDoc = validateJSON((updateFields.contentJson as string) || undefined); if (mobileDoc === undefined) { diff --git a/packages/nodes-base/nodes/Ghost/PostDescription.ts b/packages/nodes-base/nodes/Ghost/PostDescription.ts index 8d344e5a50..de01ce27b5 100644 --- a/packages/nodes-base/nodes/Ghost/PostDescription.ts +++ b/packages/nodes-base/nodes/Ghost/PostDescription.ts @@ -114,6 +114,10 @@ export const postFields: INodeProperties[] = [ name: 'Mobile Doc', value: 'mobileDoc', }, + { + name: 'Lexical', + value: 'lexical', + }, ], default: 'html', description: 'The format of the post', @@ -150,6 +154,22 @@ export const postFields: INodeProperties[] = [ description: 'Mobiledoc is the raw JSON format that Ghost uses to store post contents. Info.', }, + { + displayName: 'Content (JSON)', + name: 'content', + type: 'json', + displayOptions: { + show: { + source: ['adminApi'], + resource: ['post'], + operation: ['create'], + contentFormat: ['lexical'], + }, + }, + + default: '', + description: 'Lexical is the JSON format returned by the Ghost Default editor', + }, { displayName: 'Additional Fields', name: 'additionalFields', @@ -395,6 +415,10 @@ export const postFields: INodeProperties[] = [ name: 'Mobile Doc', value: 'mobiledoc', }, + { + name: 'Lexical', + value: 'lexical', + }, ], default: ['mobiledoc'], }, @@ -532,6 +556,10 @@ export const postFields: INodeProperties[] = [ name: 'Plaintext', value: 'plaintext', }, + { + name: 'Lexical', + value: 'lexical', + }, ], default: ['html'], description: @@ -593,6 +621,10 @@ export const postFields: INodeProperties[] = [ name: 'Mobile Doc', value: 'mobiledoc', }, + { + name: 'Lexical', + value: 'lexical', + }, ], default: ['mobiledoc'], }, @@ -636,6 +668,10 @@ export const postFields: INodeProperties[] = [ name: 'Mobile Doc', value: 'mobileDoc', }, + { + name: 'Lexical', + value: 'lexical', + }, ], default: 'html', description: 'The format of the post', @@ -707,6 +743,18 @@ export const postFields: INodeProperties[] = [ description: 'Mobiledoc is the raw JSON format that Ghost uses to store post contents. Info..', }, + { + displayName: 'Content (JSON)', + name: 'contentJson', + type: 'json', + displayOptions: { + show: { + '/contentFormat': ['lexical'], + }, + }, + default: '', + description: 'Lexical is the JSON format returned by the Ghost Default editor', + }, { displayName: 'Featured', name: 'featured',