n8n-nodes-mq 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 ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2024 Mauricio Perera
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,90 @@
1
+ # n8n-nodes-mq
2
+
3
+ n8n community node for processing Markdown using the **mq** query language.
4
+
5
+ [mq](https://github.com/harehare/mq) is a jq-like tool for Markdown - slice, filter, map, and transform structured data from Markdown files.
6
+
7
+ ## Features
8
+
9
+ - **Query**: Run mq queries on Markdown content (extract headers, code blocks, lists, etc.)
10
+ - **Extract Sections**: Split matching sections into separate n8n items
11
+ - **Format Query**: Format mq query strings
12
+ - **Validate Query**: Check if mq queries are valid
13
+
14
+ ## Installation
15
+
16
+ ### In n8n (Community Nodes)
17
+
18
+ 1. Go to **Settings > Community Nodes**
19
+ 2. Select **Install**
20
+ 3. Enter `n8n-nodes-mq`
21
+ 4. Click **Install**
22
+
23
+ ### Manual Installation
24
+
25
+ ```bash
26
+ npm install n8n-nodes-mq
27
+ ```
28
+
29
+ ## Operations
30
+
31
+ ### Query
32
+
33
+ Run an mq query and get the result as a string.
34
+
35
+ **Parameters:**
36
+ - **Markdown Content**: The Markdown to process
37
+ - **Query**: The mq query (e.g., `.h`, `.h2`, `.code`)
38
+ - **Input Format**: markdown, mdx, or html
39
+ - **Output Field**: Name of the result field
40
+
41
+ ### Extract Sections
42
+
43
+ Extract matching sections as separate items - useful for batch processing.
44
+
45
+ **Parameters:**
46
+ - **Markdown Content**: The Markdown to process
47
+ - **Query**: The mq query
48
+ - **Split By**: How to split (line breaks or single items)
49
+
50
+ ### Format Query
51
+
52
+ Format an mq query string for readability.
53
+
54
+ ### Validate Query
55
+
56
+ Check if a query is valid and get diagnostic information.
57
+
58
+ ## Query Examples
59
+
60
+ | Query | Description |
61
+ |-------|-------------|
62
+ | `.h` | All headers |
63
+ | `.h1` | Only h1 headers |
64
+ | `.h2` | Only h2 headers |
65
+ | `.code` | All code blocks |
66
+ | `.blockquote` | All blockquotes |
67
+ | `.link` | All links |
68
+ | `.h2 \| select(contains("API"))` | h2 headers containing "API" |
69
+
70
+ ## Example Workflow
71
+
72
+ ```
73
+ [HTTP Request] → [MQ: .h2] → [Extract Sections] → [For Each Item]
74
+ ↓ ↓ ↓ ↓
75
+ Fetch doc Query headers Split items Process each header
76
+ ```
77
+
78
+ ## Requirements
79
+
80
+ - n8n version 1.0.0 or later
81
+ - No external dependencies (uses WebAssembly)
82
+
83
+ ## License
84
+
85
+ MIT
86
+
87
+ ## Credits
88
+
89
+ - [mq](https://github.com/harehare/mq) by harehare - The underlying Markdown query tool
90
+ - Built with [n8n](https://n8n.io)
@@ -0,0 +1,3 @@
1
+ import { Mq } from './nodes/Mq/Mq.node';
2
+ export { Mq };
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,oBAAoB,CAAC;AAExC,OAAO,EAAE,EAAE,EAAE,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Mq = void 0;
4
+ const Mq_node_1 = require("./nodes/Mq/Mq.node");
5
+ Object.defineProperty(exports, "Mq", { enumerable: true, get: function () { return Mq_node_1.Mq; } });
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";;;AAAA,gDAAwC;AAE/B,mFAFA,YAAE,OAEA"}
@@ -0,0 +1,6 @@
1
+ import { IExecuteFunctions, INodeExecutionData, INodeType, INodeTypeDescription } from 'n8n-workflow';
2
+ export declare class Mq implements INodeType {
3
+ description: INodeTypeDescription;
4
+ execute(this: IExecuteFunctions): Promise<INodeExecutionData[][]>;
5
+ }
6
+ //# sourceMappingURL=Mq.node.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Mq.node.d.ts","sourceRoot":"","sources":["../../../nodes/Mq/Mq.node.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,iBAAiB,EACjB,kBAAkB,EAClB,SAAS,EACT,oBAAoB,EAGpB,MAAM,cAAc,CAAC;AAItB,qBAAa,EAAG,YAAW,SAAS;IACnC,WAAW,EAAE,oBAAoB,CAoF/B;IAEI,OAAO,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC;CAgFvE"}
@@ -0,0 +1,177 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Mq = void 0;
4
+ const n8n_workflow_1 = require("n8n-workflow");
5
+ const MqEngine_1 = require("./MqEngine");
6
+ class Mq {
7
+ constructor() {
8
+ this.description = {
9
+ displayName: 'MQ (Markdown Query)',
10
+ name: 'mq',
11
+ icon: 'file:mq.svg',
12
+ group: ['transform'],
13
+ version: 1,
14
+ subtitle: '={{$parameter["operation"]}}',
15
+ description: 'Process Markdown using mq query language - filter, transform and extract data like jq for JSON',
16
+ defaults: {
17
+ name: 'MQ',
18
+ },
19
+ inputs: ['main'],
20
+ outputs: ['main'],
21
+ properties: [
22
+ {
23
+ displayName: 'Operation',
24
+ name: 'operation',
25
+ type: 'options',
26
+ noDataExpression: true,
27
+ options: [
28
+ { name: 'Query', value: 'query', description: 'Run an mq query on Markdown content', action: 'Run mq query' },
29
+ { name: 'Extract Sections', value: 'extractSections', description: 'Extract matching sections as separate items', action: 'Extract sections' },
30
+ { name: 'Format Query', value: 'format', description: 'Format an mq query string', action: 'Format mq query' },
31
+ { name: 'Validate Query', value: 'validate', description: 'Check if an mq query is valid', action: 'Validate mq query' },
32
+ ],
33
+ default: 'query',
34
+ },
35
+ {
36
+ displayName: 'Markdown Content',
37
+ name: 'content',
38
+ type: 'string',
39
+ typeOptions: { rows: 10 },
40
+ default: '',
41
+ required: true,
42
+ description: 'The Markdown content to process',
43
+ displayOptions: { show: { operation: ['query', 'extractSections'] } },
44
+ },
45
+ {
46
+ displayName: 'Query',
47
+ name: 'query',
48
+ type: 'string',
49
+ default: '.h',
50
+ required: true,
51
+ description: 'The mq query. Examples: .h (headers), .h2, .code, .blockquote',
52
+ displayOptions: { show: { operation: ['query', 'extractSections', 'format', 'validate'] } },
53
+ },
54
+ {
55
+ displayName: 'Input Format',
56
+ name: 'inputFormat',
57
+ type: 'options',
58
+ options: [
59
+ { name: 'Markdown', value: 'markdown' },
60
+ { name: 'MDX', value: 'mdx' },
61
+ { name: 'HTML', value: 'html' },
62
+ ],
63
+ default: 'markdown',
64
+ displayOptions: { show: { operation: ['query', 'extractSections'] } },
65
+ },
66
+ {
67
+ displayName: 'Split By',
68
+ name: 'splitBy',
69
+ type: 'options',
70
+ options: [
71
+ { name: 'Line Breaks', value: 'lines' },
72
+ { name: 'Single Items', value: 'single' },
73
+ ],
74
+ default: 'lines',
75
+ displayOptions: { show: { operation: ['extractSections'] } },
76
+ },
77
+ {
78
+ displayName: 'Output Field',
79
+ name: 'outputField',
80
+ type: 'string',
81
+ default: 'result',
82
+ displayOptions: { show: { operation: ['query', 'format'] } },
83
+ },
84
+ {
85
+ displayName: 'Include Original',
86
+ name: 'includeOriginal',
87
+ type: 'boolean',
88
+ default: false,
89
+ displayOptions: { show: { operation: ['query', 'extractSections'] } },
90
+ },
91
+ ],
92
+ };
93
+ }
94
+ async execute() {
95
+ const items = this.getInputData();
96
+ const returnData = [];
97
+ for (let i = 0; i < items.length; i++) {
98
+ try {
99
+ const operation = this.getNodeParameter('operation', i);
100
+ let result = {};
101
+ switch (operation) {
102
+ case 'query': {
103
+ const content = this.getNodeParameter('content', i);
104
+ const query = this.getNodeParameter('query', i);
105
+ const inputFormat = this.getNodeParameter('inputFormat', i);
106
+ const outputField = this.getNodeParameter('outputField', i);
107
+ const includeOriginal = this.getNodeParameter('includeOriginal', i);
108
+ const queryResult = await (0, MqEngine_1.run)(query, content, { inputFormat });
109
+ result = { success: true, [outputField]: queryResult, query };
110
+ if (includeOriginal)
111
+ result.original = content;
112
+ break;
113
+ }
114
+ case 'extractSections': {
115
+ const content = this.getNodeParameter('content', i);
116
+ const query = this.getNodeParameter('query', i);
117
+ const inputFormat = this.getNodeParameter('inputFormat', i);
118
+ const splitBy = this.getNodeParameter('splitBy', i);
119
+ const includeOriginal = this.getNodeParameter('includeOriginal', i);
120
+ const queryResult = await (0, MqEngine_1.run)(query, content, { inputFormat });
121
+ let sections;
122
+ if (splitBy === "lines") {
123
+ sections = queryResult.split("\n\n").map(s => s.trim()).filter(s => s.length > 0);
124
+ }
125
+ else {
126
+ sections = queryResult.split("\n").map(s => s.trim()).filter(s => s.length > 0);
127
+ }
128
+ for (let j = 0; j < sections.length; j++) {
129
+ const sectionResult = {
130
+ success: true, section: sections[j], index: j, total: sections.length, query,
131
+ };
132
+ if (includeOriginal)
133
+ sectionResult.original = content;
134
+ returnData.push({ json: sectionResult, pairedItem: { item: i } });
135
+ }
136
+ continue;
137
+ }
138
+ case 'format': {
139
+ const query = this.getNodeParameter('query', i);
140
+ const outputField = this.getNodeParameter('outputField', i);
141
+ const formatted = await (0, MqEngine_1.format)(query);
142
+ result = { success: true, [outputField]: formatted, original: query };
143
+ break;
144
+ }
145
+ case 'validate': {
146
+ const query = this.getNodeParameter('query', i);
147
+ const diags = await (0, MqEngine_1.diagnostics)(query);
148
+ const isValid = diags.length === 0;
149
+ let ast;
150
+ if (isValid) {
151
+ try {
152
+ ast = await (0, MqEngine_1.toAst)(query);
153
+ }
154
+ catch { }
155
+ }
156
+ result = { success: true, valid: isValid, query, diagnostics: diags, ...(ast && { ast }) };
157
+ break;
158
+ }
159
+ default:
160
+ throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'Unknown operation: ' + operation);
161
+ }
162
+ returnData.push({ json: result, pairedItem: { item: i } });
163
+ }
164
+ catch (error) {
165
+ if (this.continueOnFail()) {
166
+ returnData.push({ json: { success: false, error: error instanceof Error ? error.message : String(error) }, pairedItem: { item: i } });
167
+ }
168
+ else {
169
+ throw error;
170
+ }
171
+ }
172
+ }
173
+ return [returnData];
174
+ }
175
+ }
176
+ exports.Mq = Mq;
177
+ //# sourceMappingURL=Mq.node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Mq.node.js","sourceRoot":"","sources":["../../../nodes/Mq/Mq.node.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * MqEngine - Node.js wrapper for mq-web WASM module
3
+ *
4
+ * mq-web is designed for browsers and uses fetch to load its WASM file.
5
+ * This wrapper patches fetch to work in Node.js by loading the WASM
6
+ * file from the filesystem.
7
+ */
8
+ export interface MqRunOptions {
9
+ isUpdate?: boolean;
10
+ inputFormat?: 'markdown' | 'mdx' | 'html';
11
+ listStyle?: 'dash' | 'star' | 'plus';
12
+ linkUrlStyle?: 'none' | 'inline' | 'reference';
13
+ linkTitleStyle?: 'paren' | 'quote';
14
+ }
15
+ export interface MqDiagnostic {
16
+ startLine: number;
17
+ startColumn: number;
18
+ endLine: number;
19
+ endColumn: number;
20
+ message: string;
21
+ severity: string;
22
+ }
23
+ export interface MqDefinedValue {
24
+ name: string;
25
+ type: string;
26
+ description?: string;
27
+ }
28
+ /**
29
+ * Run an mq query on markdown content
30
+ */
31
+ export declare function run(query: string, content: string, options?: MqRunOptions): Promise<string>;
32
+ /**
33
+ * Format an mq query
34
+ */
35
+ export declare function format(query: string): Promise<string>;
36
+ /**
37
+ * Get diagnostics for an mq query
38
+ */
39
+ export declare function diagnostics(query: string): Promise<MqDiagnostic[]>;
40
+ /**
41
+ * Get the AST of an mq query
42
+ */
43
+ export declare function toAst(query: string): Promise<string>;
44
+ /**
45
+ * Get defined values from an mq query
46
+ */
47
+ export declare function definedValues(query: string, module?: string): Promise<MqDefinedValue[]>;
48
+ //# sourceMappingURL=MqEngine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MqEngine.d.ts","sourceRoot":"","sources":["../../../nodes/Mq/MqEngine.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAcH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,UAAU,GAAG,KAAK,GAAG,MAAM,CAAC;IAC1C,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;IACrC,YAAY,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,WAAW,CAAC;IAC/C,cAAc,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC;CACpC;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AA0FD;;GAEG;AACH,wBAAsB,GAAG,CACvB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,YAAY,GACrB,OAAO,CAAC,MAAM,CAAC,CAWjB;AAED;;GAEG;AACH,wBAAsB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAI3D;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAIxE;AAED;;GAEG;AACH,wBAAsB,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAI1D;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,KAAK,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,cAAc,EAAE,CAAC,CAI3B"}
@@ -0,0 +1,172 @@
1
+ "use strict";
2
+ /**
3
+ * MqEngine - Node.js wrapper for mq-web WASM module
4
+ *
5
+ * mq-web is designed for browsers and uses fetch to load its WASM file.
6
+ * This wrapper patches fetch to work in Node.js by loading the WASM
7
+ * file from the filesystem.
8
+ */
9
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ var desc = Object.getOwnPropertyDescriptor(m, k);
12
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
13
+ desc = { enumerable: true, get: function() { return m[k]; } };
14
+ }
15
+ Object.defineProperty(o, k2, desc);
16
+ }) : (function(o, m, k, k2) {
17
+ if (k2 === undefined) k2 = k;
18
+ o[k2] = m[k];
19
+ }));
20
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
21
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
22
+ }) : function(o, v) {
23
+ o["default"] = v;
24
+ });
25
+ var __importStar = (this && this.__importStar) || (function () {
26
+ var ownKeys = function(o) {
27
+ ownKeys = Object.getOwnPropertyNames || function (o) {
28
+ var ar = [];
29
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
30
+ return ar;
31
+ };
32
+ return ownKeys(o);
33
+ };
34
+ return function (mod) {
35
+ if (mod && mod.__esModule) return mod;
36
+ var result = {};
37
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
38
+ __setModuleDefault(result, mod);
39
+ return result;
40
+ };
41
+ })();
42
+ Object.defineProperty(exports, "__esModule", { value: true });
43
+ exports.run = run;
44
+ exports.format = format;
45
+ exports.diagnostics = diagnostics;
46
+ exports.toAst = toAst;
47
+ exports.definedValues = definedValues;
48
+ const fs_1 = require("fs");
49
+ const path_1 = require("path");
50
+ let mqModule = null;
51
+ let initPromise = null;
52
+ let wasmInitialized = false;
53
+ let wasmBuffer = null;
54
+ let originalFetch = null;
55
+ /**
56
+ * Setup fetch patch for WASM loading
57
+ */
58
+ function setupFetchPatch() {
59
+ if (originalFetch)
60
+ return; // Already patched
61
+ // Find the WASM file
62
+ const possiblePaths = [
63
+ (0, path_1.join)(__dirname, '../../node_modules/mq-web/dist/mq_wasm_bg.wasm'),
64
+ (0, path_1.join)(__dirname, '../../../node_modules/mq-web/dist/mq_wasm_bg.wasm'),
65
+ (0, path_1.join)((0, path_1.dirname)(require.resolve('mq-web')), 'mq_wasm_bg.wasm'),
66
+ ];
67
+ for (const wasmPath of possiblePaths) {
68
+ try {
69
+ wasmBuffer = (0, fs_1.readFileSync)(wasmPath);
70
+ break;
71
+ }
72
+ catch {
73
+ continue;
74
+ }
75
+ }
76
+ if (!wasmBuffer) {
77
+ throw new Error('Could not find mq_wasm_bg.wasm file');
78
+ }
79
+ // Store original fetch and patch it
80
+ originalFetch = globalThis.fetch;
81
+ // @ts-ignore
82
+ globalThis.fetch = async (input, init) => {
83
+ const url = String(input);
84
+ if (url.includes('mq_wasm_bg.wasm') || url.endsWith('.wasm')) {
85
+ return new Response(wasmBuffer, {
86
+ status: 200,
87
+ headers: { 'Content-Type': 'application/wasm' },
88
+ });
89
+ }
90
+ return originalFetch(input, init);
91
+ };
92
+ }
93
+ /**
94
+ * Initialize the mq WASM module for Node.js
95
+ */
96
+ async function initMq() {
97
+ if (mqModule && wasmInitialized) {
98
+ return mqModule;
99
+ }
100
+ if (initPromise) {
101
+ await initPromise;
102
+ return mqModule;
103
+ }
104
+ initPromise = (async () => {
105
+ setupFetchPatch();
106
+ const mq = await Promise.resolve().then(() => __importStar(require('mq-web')));
107
+ mqModule = mq;
108
+ })();
109
+ await initPromise;
110
+ return mqModule;
111
+ }
112
+ /**
113
+ * Ensure WASM is loaded
114
+ */
115
+ async function ensureWasmLoaded() {
116
+ if (wasmInitialized)
117
+ return;
118
+ const mq = await initMq();
119
+ await mq.format('.h');
120
+ wasmInitialized = true;
121
+ if (originalFetch) {
122
+ globalThis.fetch = originalFetch;
123
+ }
124
+ }
125
+ /**
126
+ * Run an mq query on markdown content
127
+ */
128
+ async function run(query, content, options) {
129
+ await ensureWasmLoaded();
130
+ const mq = await initMq();
131
+ return mq.run(query, content, {
132
+ isUpdate: false,
133
+ inputFormat: 'markdown',
134
+ listStyle: 'dash',
135
+ linkUrlStyle: 'none',
136
+ linkTitleStyle: 'paren',
137
+ ...options,
138
+ });
139
+ }
140
+ /**
141
+ * Format an mq query
142
+ */
143
+ async function format(query) {
144
+ await ensureWasmLoaded();
145
+ const mq = await initMq();
146
+ return mq.format(query);
147
+ }
148
+ /**
149
+ * Get diagnostics for an mq query
150
+ */
151
+ async function diagnostics(query) {
152
+ await ensureWasmLoaded();
153
+ const mq = await initMq();
154
+ return mq.diagnostics(query);
155
+ }
156
+ /**
157
+ * Get the AST of an mq query
158
+ */
159
+ async function toAst(query) {
160
+ await ensureWasmLoaded();
161
+ const mq = await initMq();
162
+ return mq.toAst(query);
163
+ }
164
+ /**
165
+ * Get defined values from an mq query
166
+ */
167
+ async function definedValues(query, module) {
168
+ await ensureWasmLoaded();
169
+ const mq = await initMq();
170
+ return mq.definedValues(query, module);
171
+ }
172
+ //# sourceMappingURL=MqEngine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MqEngine.js","sourceRoot":"","sources":["../../../nodes/Mq/MqEngine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
2
+ <defs>
3
+ <linearGradient id="grad" x1="0%" y1="0%" x2="100%" y2="100%">
4
+ <stop offset="0%" style="stop-color:#6366f1;stop-opacity:1" />
5
+ <stop offset="100%" style="stop-color:#8b5cf6;stop-opacity:1" />
6
+ </linearGradient>
7
+ </defs>
8
+ <rect x="5" y="5" width="90" height="90" rx="15" fill="url(#grad)"/>
9
+ <text x="50" y="72" font-family="Arial, sans-serif" font-size="55" font-weight="bold" fill="white" text-anchor="middle">mq</text>
10
+ </svg>
package/package.json ADDED
@@ -0,0 +1,59 @@
1
+ {
2
+ "name": "n8n-nodes-mq",
3
+ "version": "0.1.0",
4
+ "description": "n8n community node for processing Markdown using mq query language - filter, transform and extract structured data from Markdown files",
5
+ "author": {
6
+ "name": "Mauricio Perera",
7
+ "email": "mauricio.perera@gmail.com"
8
+ },
9
+ "repository": {
10
+ "type": "git",
11
+ "url": "git+https://github.com/MauricioPerera/n8n-nodes-mq.git"
12
+ },
13
+ "keywords": [
14
+ "n8n",
15
+ "n8n-community-node-package",
16
+ "markdown",
17
+ "mq",
18
+ "jq",
19
+ "transform",
20
+ "filter",
21
+ "extract",
22
+ "query"
23
+ ],
24
+ "license": "MIT",
25
+ "main": "dist/index.js",
26
+ "type": "commonjs",
27
+ "scripts": {
28
+ "build": "tsc && shx cp nodes/Mq/*.svg dist/nodes/Mq/",
29
+ "dev": "tsc --watch",
30
+ "lint": "eslint nodes --ext .ts",
31
+ "lintfix": "eslint nodes --ext .ts --fix",
32
+ "prepublishOnly": "npm run build && npm run lint",
33
+ "release": "npm run build && npm publish --access public"
34
+ },
35
+ "n8n": {
36
+ "n8nNodesApiVersion": 1,
37
+ "nodes": [
38
+ "dist/nodes/Mq/Mq.node.js"
39
+ ]
40
+ },
41
+ "files": [
42
+ "dist"
43
+ ],
44
+ "dependencies": {
45
+ "mq-web": "^0.5.8"
46
+ },
47
+ "devDependencies": {
48
+ "@types/node": "^20.0.0",
49
+ "@typescript-eslint/parser": "^8.0.0",
50
+ "eslint": "^8.57.0",
51
+ "eslint-plugin-n8n-nodes-base": "^1.16.0",
52
+ "n8n-workflow": "^1.0.0",
53
+ "shx": "^0.3.4",
54
+ "typescript": "^5.3.0"
55
+ },
56
+ "peerDependencies": {
57
+ "n8n-workflow": "*"
58
+ }
59
+ }