diff --git a/packages/components/nodes/documentloaders/Notion/NotionDB.ts b/packages/components/nodes/documentloaders/NotionDB/NotionDB.ts similarity index 93% rename from packages/components/nodes/documentloaders/Notion/NotionDB.ts rename to packages/components/nodes/documentloaders/NotionDB/NotionDB.ts index e1eb182a..10bb93c4 100644 --- a/packages/components/nodes/documentloaders/Notion/NotionDB.ts +++ b/packages/components/nodes/documentloaders/NotionDB/NotionDB.ts @@ -1,6 +1,6 @@ import { INode, INodeData, INodeParams } from '../../../src/Interface' import { TextSplitter } from 'langchain/text_splitter' -import { NotionDBLoader } from 'langchain/document_loaders/web/notiondb' +import { NotionDBLoader, NotionDBLoaderParams } from 'langchain/document_loaders/web/notiondb' class NotionDB_DocumentLoaders implements INode { label: string @@ -37,7 +37,7 @@ class NotionDB_DocumentLoaders implements INode { { label: 'Notion Integration Token', name: 'notionIntegrationToken', - type: 'string', + type: 'password', description: 'You can find integration token here' }, @@ -64,13 +64,14 @@ class NotionDB_DocumentLoaders implements INode { const pageSizeLimit = nodeData.inputs?.pageSizeLimit as string const metadata = nodeData.inputs?.metadata - const loader = new NotionDBLoader({ + const obj: NotionDBLoaderParams = { pageSizeLimit: pageSizeLimit ? parseInt(pageSizeLimit, 10) : 10, databaseId, notionIntegrationToken - }) - let docs = [] + } + const loader = new NotionDBLoader(obj) + let docs = [] if (textSplitter) { docs = await loader.loadAndSplit(textSplitter) } else { diff --git a/packages/components/nodes/documentloaders/Notion/notion.png b/packages/components/nodes/documentloaders/NotionDB/notion.png similarity index 100% rename from packages/components/nodes/documentloaders/Notion/notion.png rename to packages/components/nodes/documentloaders/NotionDB/notion.png diff --git a/packages/components/nodes/documentloaders/NotionFolder/NotionFolder.ts b/packages/components/nodes/documentloaders/NotionFolder/NotionFolder.ts new file mode 100644 index 00000000..d7c72a05 --- /dev/null +++ b/packages/components/nodes/documentloaders/NotionFolder/NotionFolder.ts @@ -0,0 +1,81 @@ +import { INode, INodeData, INodeParams } from '../../../src/Interface' +import { TextSplitter } from 'langchain/text_splitter' +import { NotionLoader } from 'langchain/document_loaders/fs/notion' + +class NotionFolder_DocumentLoaders implements INode { + label: string + name: string + description: string + type: string + icon: string + category: string + baseClasses: string[] + inputs: INodeParams[] + + constructor() { + this.label = 'Notion Folder' + this.name = 'notionFolder' + this.type = 'Document' + this.icon = 'notion.png' + this.category = 'Document Loaders' + this.description = `Load data from Notion folder` + this.baseClasses = [this.type] + this.inputs = [ + { + label: 'Notion Folder', + name: 'notionFolder', + type: 'string', + description: 'Get folder path', + placeholder: 'Paste folder path' + }, + { + label: 'Text Splitter', + name: 'textSplitter', + type: 'TextSplitter', + optional: true + }, + { + label: 'Metadata', + name: 'metadata', + type: 'json', + optional: true, + additionalParams: true + } + ] + } + + async init(nodeData: INodeData): Promise { + const textSplitter = nodeData.inputs?.textSplitter as TextSplitter + const notionFolder = nodeData.inputs?.notionFolder as string + const metadata = nodeData.inputs?.metadata + + const loader = new NotionLoader(notionFolder) + let docs = [] + + if (textSplitter) { + docs = await loader.loadAndSplit(textSplitter) + } else { + docs = await loader.load() + } + + if (metadata) { + const parsedMetadata = typeof metadata === 'object' ? metadata : JSON.parse(metadata) + let finaldocs = [] + for (const doc of docs) { + const newdoc = { + ...doc, + metadata: { + ...doc.metadata, + ...parsedMetadata + } + } + finaldocs.push(newdoc) + } + return finaldocs + } + + return docs + } +} + +module.exports = { nodeClass: NotionFolder_DocumentLoaders } diff --git a/packages/components/nodes/documentloaders/NotionFolder/notion.png b/packages/components/nodes/documentloaders/NotionFolder/notion.png new file mode 100644 index 00000000..39105167 Binary files /dev/null and b/packages/components/nodes/documentloaders/NotionFolder/notion.png differ