n8n-nodes-html-readability 0.1.0
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/LICENSE.md +19 -0
- package/README.md +94 -0
- package/dist/nodes/Readability/Readability.node.d.ts +5 -0
- package/dist/nodes/Readability/Readability.node.js +181 -0
- package/dist/nodes/Readability/Readability.node.json +13 -0
- package/dist/nodes/Readability/readability.svg +13 -0
- package/dist/package.json +64 -0
- package/index.js +0 -0
- package/package.json +64 -0
package/LICENSE.md
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
Copyright 2024 TechupBusiness
|
|
2
|
+
|
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
4
|
+
this software and associated documentation files (the "Software"), to deal in
|
|
5
|
+
the Software without restriction, including without limitation the rights to
|
|
6
|
+
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
|
7
|
+
of the Software, and to permit persons to whom the Software is furnished to do
|
|
8
|
+
so, subject to the following conditions:
|
|
9
|
+
|
|
10
|
+
The above copyright notice and this permission notice shall be included in all
|
|
11
|
+
copies or substantial portions of the Software.
|
|
12
|
+
|
|
13
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
14
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
15
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
16
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
17
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
18
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
19
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+

|
|
2
|
+
|
|
3
|
+
# n8n-nodes-readability
|
|
4
|
+
|
|
5
|
+
This is an n8n community node. It lets you use Mozilla's Readability in your n8n workflows.
|
|
6
|
+
|
|
7
|
+
Mozilla's Readability is a standalone version of the algorithm used by Firefox Reader View to extract the main content from web pages, removing clutter and providing clean, readable text.
|
|
8
|
+
|
|
9
|
+
[n8n](https://n8n.io/) is a [fair-code licensed](https://docs.n8n.io/reference/license/) workflow automation platform.
|
|
10
|
+
|
|
11
|
+
[Installation](#installation)
|
|
12
|
+
[Operations](#operations)
|
|
13
|
+
[Compatibility](#compatibility)
|
|
14
|
+
[Usage](#usage)
|
|
15
|
+
[Resources](#resources)
|
|
16
|
+
|
|
17
|
+
## Installation
|
|
18
|
+
|
|
19
|
+
Follow the [installation guide](https://docs.n8n.io/integrations/community-nodes/installation/) in the n8n community nodes documentation.
|
|
20
|
+
|
|
21
|
+
## Operations
|
|
22
|
+
|
|
23
|
+
### HTML
|
|
24
|
+
|
|
25
|
+
#### Extract Content
|
|
26
|
+
|
|
27
|
+
Extracts the main content from HTML, removing navigation, ads, and other distracting elements.
|
|
28
|
+
|
|
29
|
+
**Options:**
|
|
30
|
+
|
|
31
|
+
| Parameter | Type | Description |
|
|
32
|
+
|:--------:|:----:|:------------|
|
|
33
|
+
| JSON Property | String | The property containing the HTML content to parse. Supports both dot notation (e.g., 'solution.response') and expressions |
|
|
34
|
+
| Continue on Error | Boolean | Whether to continue execution when the node encounters an error |
|
|
35
|
+
| Return Full Response | Boolean | Whether to return the full Readability response including metadata |
|
|
36
|
+
|
|
37
|
+
**Output:**
|
|
38
|
+
|
|
39
|
+
Default output includes:
|
|
40
|
+
```json
|
|
41
|
+
{
|
|
42
|
+
"content": "<div>...extracted HTML content...</div>",
|
|
43
|
+
"title": "Article Title",
|
|
44
|
+
"excerpt": "Brief excerpt of the content"
|
|
45
|
+
}
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
With "Return Full Response" enabled, additional fields are included:
|
|
49
|
+
```json
|
|
50
|
+
{
|
|
51
|
+
"content": "<div>...extracted HTML content...</div>",
|
|
52
|
+
"title": "Article Title",
|
|
53
|
+
"excerpt": "Brief excerpt of the content",
|
|
54
|
+
"length": 12345,
|
|
55
|
+
"byline": "Author Name",
|
|
56
|
+
"dir": "ltr",
|
|
57
|
+
"siteName": "Website Name",
|
|
58
|
+
"textContent": "Plain text version of the content"
|
|
59
|
+
}
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## Compatibility
|
|
63
|
+
|
|
64
|
+
- Requires n8n version 1.0.0 or later
|
|
65
|
+
- Uses Mozilla's Readability v0.6.0
|
|
66
|
+
- Node.js v18.10 or later
|
|
67
|
+
|
|
68
|
+
## Usage
|
|
69
|
+
|
|
70
|
+
1. Add the Readability node to your workflow
|
|
71
|
+
2. Connect it to a node that provides HTML content (e.g., HTTP Request)
|
|
72
|
+
3. Specify the JSON property containing the HTML (e.g., 'data' or 'response.body')
|
|
73
|
+
4. Optionally enable "Return Full Response" for additional metadata
|
|
74
|
+
5. Run the workflow to extract clean, readable content
|
|
75
|
+
|
|
76
|
+
### Example Usage
|
|
77
|
+
|
|
78
|
+
This example shows how to extract readable content from a webpage:
|
|
79
|
+
|
|
80
|
+
1. HTTP Request node: Fetch a webpage
|
|
81
|
+
2. Readability node:
|
|
82
|
+
- Set "JSON Property" to "data"
|
|
83
|
+
- Enable "Return Full Response" if you need metadata
|
|
84
|
+
3. The node will output clean HTML content and metadata
|
|
85
|
+
|
|
86
|
+
## Resources
|
|
87
|
+
|
|
88
|
+
* [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes/)
|
|
89
|
+
* [Mozilla Readability Documentation](https://github.com/mozilla/readability)
|
|
90
|
+
* [Firefox Reader View Blog Post](https://firefox-source-docs.mozilla.org/toolkit/components/reader/)
|
|
91
|
+
|
|
92
|
+
## License
|
|
93
|
+
|
|
94
|
+
[MIT](https://github.com/n8n-io/n8n-nodes-starter/blob/master/LICENSE.md)
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Readability = void 0;
|
|
4
|
+
const n8n_workflow_1 = require("n8n-workflow");
|
|
5
|
+
const jsdom_1 = require("jsdom");
|
|
6
|
+
const readability_1 = require("@mozilla/readability");
|
|
7
|
+
class Readability {
|
|
8
|
+
constructor() {
|
|
9
|
+
this.description = {
|
|
10
|
+
displayName: 'Readability',
|
|
11
|
+
name: 'readability',
|
|
12
|
+
icon: 'file:readability.svg',
|
|
13
|
+
group: ['transform'],
|
|
14
|
+
version: 1,
|
|
15
|
+
subtitle: '={{$parameter["operation"] + ": " + $parameter["htmlField"]}}',
|
|
16
|
+
description: 'Extract readable content from HTML using Mozilla Readability',
|
|
17
|
+
defaults: {
|
|
18
|
+
name: 'Readability',
|
|
19
|
+
},
|
|
20
|
+
inputs: ["main"],
|
|
21
|
+
outputs: ["main"],
|
|
22
|
+
properties: [
|
|
23
|
+
{
|
|
24
|
+
displayName: 'Resource',
|
|
25
|
+
name: 'resource',
|
|
26
|
+
type: 'options',
|
|
27
|
+
noDataExpression: true,
|
|
28
|
+
options: [
|
|
29
|
+
{
|
|
30
|
+
name: 'HTML',
|
|
31
|
+
value: 'html',
|
|
32
|
+
},
|
|
33
|
+
],
|
|
34
|
+
default: 'html',
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
displayName: 'Operation',
|
|
38
|
+
name: 'operation',
|
|
39
|
+
type: 'options',
|
|
40
|
+
noDataExpression: true,
|
|
41
|
+
displayOptions: {
|
|
42
|
+
show: {
|
|
43
|
+
resource: ['html'],
|
|
44
|
+
},
|
|
45
|
+
},
|
|
46
|
+
options: [
|
|
47
|
+
{
|
|
48
|
+
name: 'Extract Content',
|
|
49
|
+
value: 'extract',
|
|
50
|
+
description: 'Wether to extract readable content from HTML',
|
|
51
|
+
action: 'Extract readable content from HTML',
|
|
52
|
+
},
|
|
53
|
+
],
|
|
54
|
+
default: 'extract',
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
displayName: 'JSON Property',
|
|
58
|
+
name: 'htmlField',
|
|
59
|
+
type: 'string',
|
|
60
|
+
default: 'html',
|
|
61
|
+
required: true,
|
|
62
|
+
displayOptions: {
|
|
63
|
+
show: {
|
|
64
|
+
resource: ['html'],
|
|
65
|
+
operation: ['extract'],
|
|
66
|
+
},
|
|
67
|
+
},
|
|
68
|
+
description: 'The name of the JSON property containing the HTML content to parse (supports dot notation and expressions)',
|
|
69
|
+
noDataExpression: false,
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
displayName: 'Options',
|
|
73
|
+
name: 'options',
|
|
74
|
+
type: 'collection',
|
|
75
|
+
placeholder: 'Add Option',
|
|
76
|
+
default: {},
|
|
77
|
+
displayOptions: {
|
|
78
|
+
show: {
|
|
79
|
+
resource: ['html'],
|
|
80
|
+
operation: ['extract'],
|
|
81
|
+
},
|
|
82
|
+
},
|
|
83
|
+
options: [
|
|
84
|
+
{
|
|
85
|
+
displayName: 'Continue on Error',
|
|
86
|
+
name: 'continueOnFail',
|
|
87
|
+
type: 'boolean',
|
|
88
|
+
default: false,
|
|
89
|
+
description: 'Whether to continue with execution even when the node encounters an error',
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
displayName: 'Return Full Response',
|
|
93
|
+
name: 'fullResponse',
|
|
94
|
+
type: 'boolean',
|
|
95
|
+
default: false,
|
|
96
|
+
description: 'Whether to return the full response from Readability (includes metadata)',
|
|
97
|
+
},
|
|
98
|
+
],
|
|
99
|
+
},
|
|
100
|
+
],
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
async execute() {
|
|
104
|
+
const items = this.getInputData();
|
|
105
|
+
if (items.length === 0) {
|
|
106
|
+
return [[]];
|
|
107
|
+
}
|
|
108
|
+
const returnData = [];
|
|
109
|
+
const resource = this.getNodeParameter('resource', 0);
|
|
110
|
+
const operation = this.getNodeParameter('operation', 0);
|
|
111
|
+
if (resource === 'html' && operation === 'extract') {
|
|
112
|
+
for (let i = 0; i < items.length; i++) {
|
|
113
|
+
const options = this.getNodeParameter('options', i, {});
|
|
114
|
+
try {
|
|
115
|
+
const item = items[i];
|
|
116
|
+
if (!(item === null || item === void 0 ? void 0 : item.json)) {
|
|
117
|
+
throw new n8n_workflow_1.NodeOperationError(this.getNode(), `Item ${i} has no JSON data`);
|
|
118
|
+
}
|
|
119
|
+
const htmlField = this.getNodeParameter('htmlField', i);
|
|
120
|
+
let htmlContent;
|
|
121
|
+
if (typeof htmlField === 'string' && htmlField.includes('.')) {
|
|
122
|
+
const pathParts = htmlField.split('.');
|
|
123
|
+
htmlContent = item.json;
|
|
124
|
+
for (const part of pathParts) {
|
|
125
|
+
if (htmlContent && typeof htmlContent === 'object' && part in htmlContent) {
|
|
126
|
+
htmlContent = htmlContent[part];
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
htmlContent = undefined;
|
|
130
|
+
break;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
htmlContent = item.json[htmlField];
|
|
136
|
+
}
|
|
137
|
+
if (!htmlContent) {
|
|
138
|
+
throw new n8n_workflow_1.NodeOperationError(this.getNode(), `No HTML found in field "${htmlField}" for item ${i}`);
|
|
139
|
+
}
|
|
140
|
+
const dom = new jsdom_1.JSDOM(htmlContent);
|
|
141
|
+
const reader = new readability_1.Readability(dom.window.document);
|
|
142
|
+
const article = reader.parse();
|
|
143
|
+
if (!article) {
|
|
144
|
+
throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'Failed to extract content');
|
|
145
|
+
}
|
|
146
|
+
if (options.fullResponse) {
|
|
147
|
+
returnData.push({
|
|
148
|
+
json: {
|
|
149
|
+
...article,
|
|
150
|
+
},
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
returnData.push({
|
|
155
|
+
json: {
|
|
156
|
+
content: article.content,
|
|
157
|
+
title: article.title,
|
|
158
|
+
excerpt: article.excerpt,
|
|
159
|
+
},
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
catch (error) {
|
|
164
|
+
if (options.continueOnFail || this.continueOnFail()) {
|
|
165
|
+
returnData.push({
|
|
166
|
+
json: {
|
|
167
|
+
error: error instanceof Error ? error.message : 'An unknown error occurred',
|
|
168
|
+
item: i,
|
|
169
|
+
},
|
|
170
|
+
});
|
|
171
|
+
continue;
|
|
172
|
+
}
|
|
173
|
+
throw error;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
return [returnData];
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
exports.Readability = Readability;
|
|
181
|
+
//# sourceMappingURL=Readability.node.js.map
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{
|
|
2
|
+
"node": "n8n-nodes-base.readability",
|
|
3
|
+
"nodeVersion": "1.0",
|
|
4
|
+
"codexVersion": "1.0",
|
|
5
|
+
"categories": ["Text", "Utility"],
|
|
6
|
+
"resources": {
|
|
7
|
+
"primaryDocumentation": [
|
|
8
|
+
{
|
|
9
|
+
"url": "https://github.com/TechupBusiness/n8n-nodes-readability"
|
|
10
|
+
}
|
|
11
|
+
]
|
|
12
|
+
}
|
|
13
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
<svg width="64" height="64" viewBox="0 0 64 64" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<!-- Background rectangle (webpage) with shadow -->
|
|
3
|
+
<rect x="8" y="8" width="48" height="48" rx="4" fill="#F5F5F5" stroke="#333333" stroke-width="2"/>
|
|
4
|
+
<rect x="8" y="8" width="48" height="48" rx="4" fill="none" stroke="#000000" stroke-opacity="0.1" stroke-width="2" transform="translate(2, 2)"/>
|
|
5
|
+
<!-- Text lines with better spacing and thickness -->
|
|
6
|
+
<rect x="14" y="14" width="36" height="3" rx="1" fill="#666666"/>
|
|
7
|
+
<rect x="14" y="22" width="28" height="3" rx="1" fill="#666666"/>
|
|
8
|
+
<rect x="14" y="30" width="32" height="3" rx="1" fill="#666666"/>
|
|
9
|
+
<rect x="14" y="38" width="24" height="3" rx="1" fill="#666666"/>
|
|
10
|
+
<!-- Magnifying glass with a filled handle and thicker stroke -->
|
|
11
|
+
<circle cx="48" cy="48" r="8" fill="#FFFFFF" stroke="#333333" stroke-width="2.5"/>
|
|
12
|
+
<line x1="52" y1="52" x2="56" y2="56" stroke="#333333" stroke-width="2.5" stroke-linecap="round"/>
|
|
13
|
+
</svg>
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "n8n-nodes-html-readability",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "n8n node to extract readable content from HTML using Mozilla Readability",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"n8n-community-node-package"
|
|
7
|
+
],
|
|
8
|
+
"license": "MIT",
|
|
9
|
+
"homepage": "https://github.com/TechupBusiness/n8n-nodes-html-readability",
|
|
10
|
+
"author": {
|
|
11
|
+
"name": "Techup Business",
|
|
12
|
+
"email": "info@techupbusiness.com"
|
|
13
|
+
},
|
|
14
|
+
"repository": {
|
|
15
|
+
"type": "git",
|
|
16
|
+
"url": "https://github.com/TechupBusiness/n8n-nodes-html-readability.git"
|
|
17
|
+
},
|
|
18
|
+
"engines": {
|
|
19
|
+
"node": ">=18.10",
|
|
20
|
+
"pnpm": ">=9.1"
|
|
21
|
+
},
|
|
22
|
+
"packageManager": "pnpm@9.1.4",
|
|
23
|
+
"main": "index.js",
|
|
24
|
+
"scripts": {
|
|
25
|
+
"preinstall": "npx only-allow pnpm",
|
|
26
|
+
"build": "tsc && gulp build:icons",
|
|
27
|
+
"dev": "tsc --watch",
|
|
28
|
+
"format": "prettier nodes --write",
|
|
29
|
+
"lint": "eslint nodes package.json",
|
|
30
|
+
"lintfix": "eslint nodes package.json --fix",
|
|
31
|
+
"prepublishOnly": "pnpm build && pnpm lint -c .eslintrc.prepublish.js nodes package.json"
|
|
32
|
+
},
|
|
33
|
+
"files": [
|
|
34
|
+
"dist/nodes/Readability/**/*.js",
|
|
35
|
+
"dist/nodes/Readability/**/*.d.ts",
|
|
36
|
+
"dist/nodes/Readability/**/*.json",
|
|
37
|
+
"dist/nodes/Readability/**/*.svg",
|
|
38
|
+
"dist/package.json",
|
|
39
|
+
"LICENSE.md",
|
|
40
|
+
"README.md"
|
|
41
|
+
],
|
|
42
|
+
"n8n": {
|
|
43
|
+
"n8nNodesApiVersion": 1,
|
|
44
|
+
"nodes": [
|
|
45
|
+
"dist/nodes/Readability/Readability.node.js"
|
|
46
|
+
]
|
|
47
|
+
},
|
|
48
|
+
"devDependencies": {
|
|
49
|
+
"@typescript-eslint/parser": "^7.15.0",
|
|
50
|
+
"eslint": "^8.56.0",
|
|
51
|
+
"@types/jsdom": "^21.1.0",
|
|
52
|
+
"eslint-plugin-n8n-nodes-base": "^1.16.1",
|
|
53
|
+
"gulp": "^4.0.2",
|
|
54
|
+
"prettier": "^3.3.2",
|
|
55
|
+
"typescript": "^5.5.3"
|
|
56
|
+
},
|
|
57
|
+
"dependencies": {
|
|
58
|
+
"@mozilla/readability": "^0.6.0",
|
|
59
|
+
"jsdom": "^22.1.0"
|
|
60
|
+
},
|
|
61
|
+
"peerDependencies": {
|
|
62
|
+
"n8n-workflow": "*"
|
|
63
|
+
}
|
|
64
|
+
}
|
package/index.js
ADDED
|
File without changes
|
package/package.json
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "n8n-nodes-html-readability",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "n8n node to extract readable content from HTML using Mozilla Readability",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"n8n-community-node-package"
|
|
7
|
+
],
|
|
8
|
+
"license": "MIT",
|
|
9
|
+
"homepage": "https://github.com/TechupBusiness/n8n-nodes-html-readability",
|
|
10
|
+
"author": {
|
|
11
|
+
"name": "Techup Business",
|
|
12
|
+
"email": "info@techupbusiness.com"
|
|
13
|
+
},
|
|
14
|
+
"repository": {
|
|
15
|
+
"type": "git",
|
|
16
|
+
"url": "https://github.com/TechupBusiness/n8n-nodes-html-readability.git"
|
|
17
|
+
},
|
|
18
|
+
"engines": {
|
|
19
|
+
"node": ">=18.10",
|
|
20
|
+
"pnpm": ">=9.1"
|
|
21
|
+
},
|
|
22
|
+
"packageManager": "pnpm@9.1.4",
|
|
23
|
+
"main": "index.js",
|
|
24
|
+
"scripts": {
|
|
25
|
+
"preinstall": "npx only-allow pnpm",
|
|
26
|
+
"build": "tsc && gulp build:icons",
|
|
27
|
+
"dev": "tsc --watch",
|
|
28
|
+
"format": "prettier nodes --write",
|
|
29
|
+
"lint": "eslint nodes package.json",
|
|
30
|
+
"lintfix": "eslint nodes package.json --fix",
|
|
31
|
+
"prepublishOnly": "pnpm build && pnpm lint -c .eslintrc.prepublish.js nodes package.json"
|
|
32
|
+
},
|
|
33
|
+
"files": [
|
|
34
|
+
"dist/nodes/Readability/**/*.js",
|
|
35
|
+
"dist/nodes/Readability/**/*.d.ts",
|
|
36
|
+
"dist/nodes/Readability/**/*.json",
|
|
37
|
+
"dist/nodes/Readability/**/*.svg",
|
|
38
|
+
"dist/package.json",
|
|
39
|
+
"LICENSE.md",
|
|
40
|
+
"README.md"
|
|
41
|
+
],
|
|
42
|
+
"n8n": {
|
|
43
|
+
"n8nNodesApiVersion": 1,
|
|
44
|
+
"nodes": [
|
|
45
|
+
"dist/nodes/Readability/Readability.node.js"
|
|
46
|
+
]
|
|
47
|
+
},
|
|
48
|
+
"devDependencies": {
|
|
49
|
+
"@typescript-eslint/parser": "^7.15.0",
|
|
50
|
+
"eslint": "^8.56.0",
|
|
51
|
+
"@types/jsdom": "^21.1.0",
|
|
52
|
+
"eslint-plugin-n8n-nodes-base": "^1.16.1",
|
|
53
|
+
"gulp": "^4.0.2",
|
|
54
|
+
"prettier": "^3.3.2",
|
|
55
|
+
"typescript": "^5.5.3"
|
|
56
|
+
},
|
|
57
|
+
"dependencies": {
|
|
58
|
+
"@mozilla/readability": "^0.6.0",
|
|
59
|
+
"jsdom": "^22.1.0"
|
|
60
|
+
},
|
|
61
|
+
"peerDependencies": {
|
|
62
|
+
"n8n-workflow": "*"
|
|
63
|
+
}
|
|
64
|
+
}
|