n8n-nodes-nextcloud-ext 1.0.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 +21 -0
- package/README.md +357 -0
- package/dist/credentials/NextCloudApi.credentials.d.ts +9 -0
- package/dist/credentials/NextCloudApi.credentials.js +57 -0
- package/dist/credentials/NextCloudApi.credentials.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -0
- package/dist/nodes/NextCloud/NextCloud.node.d.ts +10 -0
- package/dist/nodes/NextCloud/NextCloud.node.js +601 -0
- package/dist/nodes/NextCloud/NextCloud.node.js.map +1 -0
- package/dist/nodes/NextCloud/nextcloud.svg +13 -0
- package/dist/nodes/NextCloudSpreadsheet/NextCloudSpreadsheet.node.d.ts +12 -0
- package/dist/nodes/NextCloudSpreadsheet/NextCloudSpreadsheet.node.js +820 -0
- package/dist/nodes/NextCloudSpreadsheet/NextCloudSpreadsheet.node.js.map +1 -0
- package/dist/nodes/NextCloudSpreadsheet/nextcloud.svg +13 -0
- package/dist/nodes/shared/GenericFunctions.d.ts +55 -0
- package/dist/nodes/shared/GenericFunctions.js +523 -0
- package/dist/nodes/shared/GenericFunctions.js.map +1 -0
- package/package.json +72 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NextCloudSpreadsheet.node.js","sourceRoot":"","sources":["../../../nodes/NextCloudSpreadsheet/NextCloudSpreadsheet.node.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
|
|
2
|
+
<circle cx="50" cy="50" r="50" fill="#0082c9"/>
|
|
3
|
+
<!-- Nextcloud logo: three circles -->
|
|
4
|
+
<circle cx="30" cy="55" r="14" fill="#fff"/>
|
|
5
|
+
<circle cx="50" cy="42" r="20" fill="#fff"/>
|
|
6
|
+
<circle cx="70" cy="55" r="14" fill="#fff"/>
|
|
7
|
+
<!-- inner overlap cutouts to create the cloud shape -->
|
|
8
|
+
<circle cx="50" cy="42" r="14" fill="#0082c9"/>
|
|
9
|
+
<circle cx="30" cy="55" r="8" fill="#0082c9"/>
|
|
10
|
+
<circle cx="70" cy="55" r="8" fill="#0082c9"/>
|
|
11
|
+
<!-- bottom bar -->
|
|
12
|
+
<rect x="16" y="55" width="68" height="14" fill="#fff" rx="7"/>
|
|
13
|
+
</svg>
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { IExecuteFunctions, ILoadOptionsFunctions, IDataObject, INodePropertyOptions } from 'n8n-workflow';
|
|
2
|
+
import * as xlsx from 'xlsx';
|
|
3
|
+
export interface NextCloudCredentials {
|
|
4
|
+
serverUrl: string;
|
|
5
|
+
user: string;
|
|
6
|
+
password: string;
|
|
7
|
+
}
|
|
8
|
+
export declare function getCredentials(context: IExecuteFunctions | ILoadOptionsFunctions): Promise<NextCloudCredentials>;
|
|
9
|
+
export declare function davUrl(serverUrl: string, user: string, filePath: string): string;
|
|
10
|
+
export declare function webdavRequest(context: IExecuteFunctions | ILoadOptionsFunctions, method: string, url: string, creds: NextCloudCredentials, extraHeaders?: IDataObject, body?: string, encoding?: 'arraybuffer' | undefined): Promise<{
|
|
11
|
+
statusCode: number;
|
|
12
|
+
headers: IDataObject;
|
|
13
|
+
body: Buffer | string;
|
|
14
|
+
}>;
|
|
15
|
+
export interface DavEntry {
|
|
16
|
+
href: string;
|
|
17
|
+
name: string;
|
|
18
|
+
isDirectory: boolean;
|
|
19
|
+
size: number;
|
|
20
|
+
contentType: string;
|
|
21
|
+
lastModified: string;
|
|
22
|
+
fileId: string;
|
|
23
|
+
}
|
|
24
|
+
export declare function listDirectory(context: IExecuteFunctions | ILoadOptionsFunctions, creds: NextCloudCredentials, path: string, depth?: '0' | '1' | 'infinity'): Promise<DavEntry[]>;
|
|
25
|
+
export declare function downloadFile(context: IExecuteFunctions | ILoadOptionsFunctions, creds: NextCloudCredentials, filePath: string): Promise<Buffer>;
|
|
26
|
+
export declare function uploadFile(context: IExecuteFunctions, creds: NextCloudCredentials, filePath: string, data: Buffer, contentType?: string): Promise<void>;
|
|
27
|
+
export declare function parseWorkbook(buffer: Buffer): xlsx.WorkBook;
|
|
28
|
+
export declare function serializeWorkbook(workbook: xlsx.WorkBook, ext: string): Buffer;
|
|
29
|
+
export declare function getSheetNames(workbook: xlsx.WorkBook): string[];
|
|
30
|
+
export declare function sheetToRows(sheet: xlsx.WorkSheet, rawData?: boolean): IDataObject[];
|
|
31
|
+
export declare function getHeaders(sheet: xlsx.WorkSheet): string[];
|
|
32
|
+
export declare function getDataRowCount(sheet: xlsx.WorkSheet): number;
|
|
33
|
+
export declare function appendRowToSheet(sheet: xlsx.WorkSheet, rowData: IDataObject): void;
|
|
34
|
+
export declare function updateRowInSheet(sheet: xlsx.WorkSheet, rowIndex: number, rowData: IDataObject): void;
|
|
35
|
+
export declare function deleteRowFromSheet(workbook: xlsx.WorkBook, sheetName: string, rowIndex: number): void;
|
|
36
|
+
export declare function getSpreadsheetFiles(context: ILoadOptionsFunctions, folderPath?: string): Promise<INodePropertyOptions[]>;
|
|
37
|
+
export declare function getSheetsForFile(context: ILoadOptionsFunctions, filePath: string): Promise<INodePropertyOptions[]>;
|
|
38
|
+
export interface ExcelTableInfo {
|
|
39
|
+
name: string;
|
|
40
|
+
displayName: string;
|
|
41
|
+
ref: string;
|
|
42
|
+
sheetName: string;
|
|
43
|
+
columns: string[];
|
|
44
|
+
dataRowCount: number;
|
|
45
|
+
}
|
|
46
|
+
export declare function getWorkbookTables(workbook: xlsx.WorkBook): ExcelTableInfo[];
|
|
47
|
+
export declare function getTableColumns(workbook: xlsx.WorkBook, tableName: string): string[];
|
|
48
|
+
export declare function getTableRows(workbook: xlsx.WorkBook, tableName: string, filters?: Array<{
|
|
49
|
+
column: string;
|
|
50
|
+
value: string;
|
|
51
|
+
}>): IDataObject[];
|
|
52
|
+
export declare function appendRowToTable(workbook: xlsx.WorkBook, tableName: string, rowData: IDataObject): void;
|
|
53
|
+
export declare function updateRowInTable(workbook: xlsx.WorkBook, tableName: string, rowIndex: number, rowData: IDataObject): void;
|
|
54
|
+
export declare function deleteRowFromTable(workbook: xlsx.WorkBook, tableName: string, rowIndex: number): void;
|
|
55
|
+
export declare function getTablesForFile(context: ILoadOptionsFunctions, filePath: string): Promise<INodePropertyOptions[]>;
|
|
@@ -0,0 +1,523 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.getCredentials = getCredentials;
|
|
37
|
+
exports.davUrl = davUrl;
|
|
38
|
+
exports.webdavRequest = webdavRequest;
|
|
39
|
+
exports.listDirectory = listDirectory;
|
|
40
|
+
exports.downloadFile = downloadFile;
|
|
41
|
+
exports.uploadFile = uploadFile;
|
|
42
|
+
exports.parseWorkbook = parseWorkbook;
|
|
43
|
+
exports.serializeWorkbook = serializeWorkbook;
|
|
44
|
+
exports.getSheetNames = getSheetNames;
|
|
45
|
+
exports.sheetToRows = sheetToRows;
|
|
46
|
+
exports.getHeaders = getHeaders;
|
|
47
|
+
exports.getDataRowCount = getDataRowCount;
|
|
48
|
+
exports.appendRowToSheet = appendRowToSheet;
|
|
49
|
+
exports.updateRowInSheet = updateRowInSheet;
|
|
50
|
+
exports.deleteRowFromSheet = deleteRowFromSheet;
|
|
51
|
+
exports.getSpreadsheetFiles = getSpreadsheetFiles;
|
|
52
|
+
exports.getSheetsForFile = getSheetsForFile;
|
|
53
|
+
exports.getWorkbookTables = getWorkbookTables;
|
|
54
|
+
exports.getTableColumns = getTableColumns;
|
|
55
|
+
exports.getTableRows = getTableRows;
|
|
56
|
+
exports.appendRowToTable = appendRowToTable;
|
|
57
|
+
exports.updateRowInTable = updateRowInTable;
|
|
58
|
+
exports.deleteRowFromTable = deleteRowFromTable;
|
|
59
|
+
exports.getTablesForFile = getTablesForFile;
|
|
60
|
+
const n8n_workflow_1 = require("n8n-workflow");
|
|
61
|
+
const fast_xml_parser_1 = require("fast-xml-parser");
|
|
62
|
+
const xlsx = __importStar(require("xlsx"));
|
|
63
|
+
async function getCredentials(context) {
|
|
64
|
+
const creds = await context.getCredentials('nextCloudApi');
|
|
65
|
+
return {
|
|
66
|
+
serverUrl: creds.serverUrl.replace(/\/$/, ''),
|
|
67
|
+
user: creds.user,
|
|
68
|
+
password: creds.password,
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
function authHeader(user, password) {
|
|
72
|
+
return 'Basic ' + Buffer.from(`${user}:${password}`).toString('base64');
|
|
73
|
+
}
|
|
74
|
+
// ---------------------------------------------------------------------------
|
|
75
|
+
// WebDAV base URL builder
|
|
76
|
+
// ---------------------------------------------------------------------------
|
|
77
|
+
function davUrl(serverUrl, user, filePath) {
|
|
78
|
+
const clean = filePath.replace(/^\/+/, '');
|
|
79
|
+
return `${serverUrl}/remote.php/dav/files/${encodeURIComponent(user)}/${clean}`;
|
|
80
|
+
}
|
|
81
|
+
// ---------------------------------------------------------------------------
|
|
82
|
+
// Low-level WebDAV request helper
|
|
83
|
+
// ---------------------------------------------------------------------------
|
|
84
|
+
async function webdavRequest(context, method, url, creds, extraHeaders = {}, body, encoding) {
|
|
85
|
+
const options = {
|
|
86
|
+
method: method,
|
|
87
|
+
url,
|
|
88
|
+
headers: {
|
|
89
|
+
Authorization: authHeader(creds.user, creds.password),
|
|
90
|
+
...extraHeaders,
|
|
91
|
+
},
|
|
92
|
+
returnFullResponse: true,
|
|
93
|
+
ignoreHttpStatusErrors: true,
|
|
94
|
+
};
|
|
95
|
+
if (body !== undefined) {
|
|
96
|
+
options.body = body;
|
|
97
|
+
options.headers['Content-Type'] = 'application/xml; charset=utf-8';
|
|
98
|
+
}
|
|
99
|
+
if (encoding === 'arraybuffer') {
|
|
100
|
+
options.encoding = 'arraybuffer';
|
|
101
|
+
}
|
|
102
|
+
try {
|
|
103
|
+
const response = await context.helpers.httpRequest(options);
|
|
104
|
+
return {
|
|
105
|
+
statusCode: response.statusCode,
|
|
106
|
+
headers: response.headers,
|
|
107
|
+
body: response.body,
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
catch (error) {
|
|
111
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
112
|
+
throw new n8n_workflow_1.NodeApiError(context.getNode(), { message: msg });
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
// ---------------------------------------------------------------------------
|
|
116
|
+
// PROPFIND — list a directory
|
|
117
|
+
// ---------------------------------------------------------------------------
|
|
118
|
+
const PROPFIND_BODY = `<?xml version="1.0" encoding="UTF-8"?>
|
|
119
|
+
<d:propfind xmlns:d="DAV:" xmlns:oc="http://owncloud.org/ns" xmlns:nc="http://nextcloud.org/ns">
|
|
120
|
+
<d:prop>
|
|
121
|
+
<d:displayname/>
|
|
122
|
+
<d:resourcetype/>
|
|
123
|
+
<d:getcontentlength/>
|
|
124
|
+
<d:getcontenttype/>
|
|
125
|
+
<d:getlastmodified/>
|
|
126
|
+
<oc:fileid/>
|
|
127
|
+
<oc:size/>
|
|
128
|
+
</d:prop>
|
|
129
|
+
</d:propfind>`;
|
|
130
|
+
async function listDirectory(context, creds, path, depth = '1') {
|
|
131
|
+
const url = davUrl(creds.serverUrl, creds.user, path);
|
|
132
|
+
const response = await webdavRequest(context, 'PROPFIND', url, creds, { Depth: depth }, PROPFIND_BODY);
|
|
133
|
+
if (response.statusCode >= 400) {
|
|
134
|
+
throw new n8n_workflow_1.NodeApiError(context.getNode(), {
|
|
135
|
+
message: `PROPFIND failed: ${response.statusCode}`,
|
|
136
|
+
description: String(response.body).slice(0, 500),
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
return parsePropfind(String(response.body), creds.serverUrl, creds.user);
|
|
140
|
+
}
|
|
141
|
+
function parsePropfind(xml, serverUrl, user) {
|
|
142
|
+
const parser = new fast_xml_parser_1.XMLParser({ ignoreAttributes: false, parseTagValue: false });
|
|
143
|
+
const parsed = parser.parse(xml);
|
|
144
|
+
// Navigate the parsed object — the structure varies slightly per parser output
|
|
145
|
+
const multistatus = parsed['d:multistatus'] ||
|
|
146
|
+
parsed['D:multistatus'] ||
|
|
147
|
+
parsed.multistatus ||
|
|
148
|
+
{};
|
|
149
|
+
const rawResponses = multistatus['d:response'] ||
|
|
150
|
+
multistatus['D:response'] ||
|
|
151
|
+
multistatus.response ||
|
|
152
|
+
[];
|
|
153
|
+
const responses = Array.isArray(rawResponses) ? rawResponses : [rawResponses];
|
|
154
|
+
const baseDavPath = `/remote.php/dav/files/${encodeURIComponent(user)}/`;
|
|
155
|
+
return responses.map((r) => {
|
|
156
|
+
const prop = extractProp(r);
|
|
157
|
+
const href = String(r['d:href'] || r['D:href'] || r.href || '');
|
|
158
|
+
const relPath = href.startsWith(baseDavPath)
|
|
159
|
+
? href.slice(baseDavPath.length)
|
|
160
|
+
: href;
|
|
161
|
+
const resourcetype = (prop['d:resourcetype'] || prop['D:resourcetype'] || prop.resourcetype || {});
|
|
162
|
+
const isDirectory = typeof resourcetype === 'object' &&
|
|
163
|
+
('d:collection' in resourcetype ||
|
|
164
|
+
'D:collection' in resourcetype ||
|
|
165
|
+
'collection' in resourcetype);
|
|
166
|
+
return {
|
|
167
|
+
href,
|
|
168
|
+
name: decodeURIComponent(relPath.replace(/\/$/, '').split('/').pop() || relPath),
|
|
169
|
+
isDirectory,
|
|
170
|
+
size: Number(prop['d:getcontentlength'] || prop['oc:size'] || prop.size || 0),
|
|
171
|
+
contentType: String(prop['d:getcontenttype'] || prop.getcontenttype || ''),
|
|
172
|
+
lastModified: String(prop['d:getlastmodified'] || prop.getlastmodified || ''),
|
|
173
|
+
fileId: String(prop['oc:fileid'] || prop.fileid || ''),
|
|
174
|
+
};
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
function extractProp(response) {
|
|
178
|
+
const propstat = response['d:propstat'] ||
|
|
179
|
+
response['D:propstat'] ||
|
|
180
|
+
response.propstat ||
|
|
181
|
+
{};
|
|
182
|
+
const first = Array.isArray(propstat) ? propstat[0] : propstat;
|
|
183
|
+
return (first['d:prop'] ||
|
|
184
|
+
first['D:prop'] ||
|
|
185
|
+
first.prop ||
|
|
186
|
+
{});
|
|
187
|
+
}
|
|
188
|
+
// ---------------------------------------------------------------------------
|
|
189
|
+
// Download a file as Buffer
|
|
190
|
+
// ---------------------------------------------------------------------------
|
|
191
|
+
async function downloadFile(context, creds, filePath) {
|
|
192
|
+
const url = davUrl(creds.serverUrl, creds.user, filePath);
|
|
193
|
+
const response = await webdavRequest(context, 'GET', url, creds, {}, undefined, 'arraybuffer');
|
|
194
|
+
if (response.statusCode >= 400) {
|
|
195
|
+
throw new n8n_workflow_1.NodeApiError(context.getNode(), {
|
|
196
|
+
message: `Download failed (${response.statusCode}) for path: ${filePath}`,
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
return Buffer.from(response.body);
|
|
200
|
+
}
|
|
201
|
+
// ---------------------------------------------------------------------------
|
|
202
|
+
// Upload a file (Buffer → WebDAV PUT)
|
|
203
|
+
// ---------------------------------------------------------------------------
|
|
204
|
+
async function uploadFile(context, creds, filePath, data, contentType = 'application/octet-stream') {
|
|
205
|
+
const url = davUrl(creds.serverUrl, creds.user, filePath);
|
|
206
|
+
const options = {
|
|
207
|
+
method: 'PUT',
|
|
208
|
+
url,
|
|
209
|
+
headers: {
|
|
210
|
+
Authorization: authHeader(creds.user, creds.password),
|
|
211
|
+
'Content-Type': contentType,
|
|
212
|
+
},
|
|
213
|
+
body: data,
|
|
214
|
+
returnFullResponse: true,
|
|
215
|
+
ignoreHttpStatusErrors: true,
|
|
216
|
+
};
|
|
217
|
+
const response = await context.helpers.httpRequest(options);
|
|
218
|
+
const status = response.statusCode;
|
|
219
|
+
if (status >= 400) {
|
|
220
|
+
throw new n8n_workflow_1.NodeApiError(context.getNode(), {
|
|
221
|
+
message: `Upload failed (${status}) for path: ${filePath}`,
|
|
222
|
+
});
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
// ---------------------------------------------------------------------------
|
|
226
|
+
// Spreadsheet helpers (SheetJS / xlsx)
|
|
227
|
+
// ---------------------------------------------------------------------------
|
|
228
|
+
function parseWorkbook(buffer) {
|
|
229
|
+
return xlsx.read(buffer, { type: 'buffer', cellDates: true });
|
|
230
|
+
}
|
|
231
|
+
function serializeWorkbook(workbook, ext) {
|
|
232
|
+
const bookType = extToBookType(ext);
|
|
233
|
+
const out = xlsx.write(workbook, { type: 'buffer', bookType, cellDates: true });
|
|
234
|
+
return Buffer.from(out);
|
|
235
|
+
}
|
|
236
|
+
function extToBookType(ext) {
|
|
237
|
+
var _a;
|
|
238
|
+
const e = ext.toLowerCase().replace('.', '');
|
|
239
|
+
const map = {
|
|
240
|
+
xlsx: 'xlsx',
|
|
241
|
+
xlsm: 'xlsm',
|
|
242
|
+
xls: 'xls',
|
|
243
|
+
ods: 'ods',
|
|
244
|
+
csv: 'csv',
|
|
245
|
+
};
|
|
246
|
+
return (_a = map[e]) !== null && _a !== void 0 ? _a : 'xlsx';
|
|
247
|
+
}
|
|
248
|
+
function getSheetNames(workbook) {
|
|
249
|
+
return workbook.SheetNames;
|
|
250
|
+
}
|
|
251
|
+
function sheetToRows(sheet, rawData = false) {
|
|
252
|
+
if (rawData) {
|
|
253
|
+
const rows = xlsx.utils.sheet_to_json(sheet, { header: 1, defval: '' });
|
|
254
|
+
return rows.map((row, i) => ({ __row: i + 1, ...row }));
|
|
255
|
+
}
|
|
256
|
+
return xlsx.utils.sheet_to_json(sheet, { defval: '' });
|
|
257
|
+
}
|
|
258
|
+
function getHeaders(sheet) {
|
|
259
|
+
var _a;
|
|
260
|
+
const range = xlsx.utils.decode_range((_a = sheet['!ref']) !== null && _a !== void 0 ? _a : 'A1');
|
|
261
|
+
const headers = [];
|
|
262
|
+
for (let col = range.s.c; col <= range.e.c; col++) {
|
|
263
|
+
const cell = sheet[xlsx.utils.encode_cell({ r: range.s.r, c: col })];
|
|
264
|
+
headers.push(cell ? String(cell.v) : `Column${col + 1}`);
|
|
265
|
+
}
|
|
266
|
+
return headers;
|
|
267
|
+
}
|
|
268
|
+
// Returns the row count (excluding header)
|
|
269
|
+
function getDataRowCount(sheet) {
|
|
270
|
+
var _a;
|
|
271
|
+
const range = xlsx.utils.decode_range((_a = sheet['!ref']) !== null && _a !== void 0 ? _a : 'A1');
|
|
272
|
+
return Math.max(0, range.e.r - range.s.r);
|
|
273
|
+
}
|
|
274
|
+
// Append a row to a sheet (mutates)
|
|
275
|
+
function appendRowToSheet(sheet, rowData) {
|
|
276
|
+
const headers = getHeaders(sheet);
|
|
277
|
+
const rowArray = headers.map((h) => { var _a; return (_a = rowData[h]) !== null && _a !== void 0 ? _a : ''; });
|
|
278
|
+
xlsx.utils.sheet_add_aoa(sheet, [rowArray], { origin: -1 });
|
|
279
|
+
}
|
|
280
|
+
// Update a row by 1-based data index (row 1 = first data row, after header)
|
|
281
|
+
function updateRowInSheet(sheet, rowIndex, rowData) {
|
|
282
|
+
var _a;
|
|
283
|
+
const headers = getHeaders(sheet);
|
|
284
|
+
const range = xlsx.utils.decode_range((_a = sheet['!ref']) !== null && _a !== void 0 ? _a : 'A1');
|
|
285
|
+
const targetRow = range.s.r + rowIndex; // header row + rowIndex
|
|
286
|
+
if (targetRow > range.e.r) {
|
|
287
|
+
throw new Error(`Row ${rowIndex} does not exist (sheet has ${range.e.r - range.s.r} data rows)`);
|
|
288
|
+
}
|
|
289
|
+
headers.forEach((h, colIdx) => {
|
|
290
|
+
if (rowData[h] !== undefined) {
|
|
291
|
+
const cellAddr = xlsx.utils.encode_cell({ r: targetRow, c: range.s.c + colIdx });
|
|
292
|
+
sheet[cellAddr] = { v: rowData[h], t: typeof rowData[h] === 'number' ? 'n' : 's' };
|
|
293
|
+
}
|
|
294
|
+
});
|
|
295
|
+
}
|
|
296
|
+
// Delete a row by 1-based data index (mutates — rebuilds sheet)
|
|
297
|
+
function deleteRowFromSheet(workbook, sheetName, rowIndex) {
|
|
298
|
+
const sheet = workbook.Sheets[sheetName];
|
|
299
|
+
const rows = xlsx.utils.sheet_to_json(sheet, { header: 1, defval: '' });
|
|
300
|
+
// rowIndex is 1-based data row (0 = header), so actual array index = rowIndex (header at 0)
|
|
301
|
+
if (rowIndex < 1 || rowIndex >= rows.length) {
|
|
302
|
+
throw new Error(`Row ${rowIndex} is out of range`);
|
|
303
|
+
}
|
|
304
|
+
rows.splice(rowIndex, 1);
|
|
305
|
+
const newSheet = xlsx.utils.aoa_to_sheet(rows);
|
|
306
|
+
workbook.Sheets[sheetName] = newSheet;
|
|
307
|
+
}
|
|
308
|
+
// ---------------------------------------------------------------------------
|
|
309
|
+
// Load-options helpers (file browser for n8n dropdowns)
|
|
310
|
+
// ---------------------------------------------------------------------------
|
|
311
|
+
async function getSpreadsheetFiles(context, folderPath = '') {
|
|
312
|
+
var _a, _b;
|
|
313
|
+
const creds = await getCredentials(context);
|
|
314
|
+
const SPREADSHEET_MIME = [
|
|
315
|
+
'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
|
|
316
|
+
'application/vnd.ms-excel',
|
|
317
|
+
'application/vnd.oasis.opendocument.spreadsheet',
|
|
318
|
+
'text/csv',
|
|
319
|
+
];
|
|
320
|
+
const entries = await listDirectory(context, creds, folderPath || '/', '1');
|
|
321
|
+
const files = [];
|
|
322
|
+
for (const entry of entries) {
|
|
323
|
+
if (entry.isDirectory)
|
|
324
|
+
continue;
|
|
325
|
+
const ext = (_b = (_a = entry.name.split('.').pop()) === null || _a === void 0 ? void 0 : _a.toLowerCase()) !== null && _b !== void 0 ? _b : '';
|
|
326
|
+
if (SPREADSHEET_MIME.includes(entry.contentType) ||
|
|
327
|
+
['xlsx', 'xls', 'ods', 'csv', 'xlsm'].includes(ext)) {
|
|
328
|
+
const rel = entry.href.replace(`/remote.php/dav/files/${encodeURIComponent(creds.user)}/`, '/');
|
|
329
|
+
files.push({ name: entry.name, value: rel });
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
return files;
|
|
333
|
+
}
|
|
334
|
+
async function getSheetsForFile(context, filePath) {
|
|
335
|
+
const creds = await getCredentials(context);
|
|
336
|
+
const buffer = await downloadFile(context, creds, filePath);
|
|
337
|
+
const workbook = parseWorkbook(buffer);
|
|
338
|
+
return workbook.SheetNames.map((name) => ({ name, value: name }));
|
|
339
|
+
}
|
|
340
|
+
// Extract header names directly from sheet cells within a range
|
|
341
|
+
function headersFromRange(sheet, range) {
|
|
342
|
+
const headers = [];
|
|
343
|
+
for (let col = range.s.c; col <= range.e.c; col++) {
|
|
344
|
+
const cell = sheet[xlsx.utils.encode_cell({ r: range.s.r, c: col })];
|
|
345
|
+
headers.push(cell ? String(cell.v) : `Column${col - range.s.c + 1}`);
|
|
346
|
+
}
|
|
347
|
+
return headers;
|
|
348
|
+
}
|
|
349
|
+
// Resolve column names: prefer SheetJS column metadata, fall back to cell reading
|
|
350
|
+
function resolveColumns(sheet, table) {
|
|
351
|
+
var _a;
|
|
352
|
+
const range = xlsx.utils.decode_range(table.ref);
|
|
353
|
+
if ((_a = table.columns) === null || _a === void 0 ? void 0 : _a.length) {
|
|
354
|
+
return table.columns.map((c, i) => { var _a; return (_a = c.name) !== null && _a !== void 0 ? _a : `Column${i + 1}`; });
|
|
355
|
+
}
|
|
356
|
+
return headersFromRange(sheet, range);
|
|
357
|
+
}
|
|
358
|
+
// Returns all named tables across all sheets of a workbook
|
|
359
|
+
function getWorkbookTables(workbook) {
|
|
360
|
+
var _a, _b, _c;
|
|
361
|
+
const tables = [];
|
|
362
|
+
for (const sheetName of workbook.SheetNames) {
|
|
363
|
+
const sheet = workbook.Sheets[sheetName];
|
|
364
|
+
const rawTables = (_a = sheet['!tables']) !== null && _a !== void 0 ? _a : [];
|
|
365
|
+
for (const t of rawTables) {
|
|
366
|
+
if (!t.ref || !t.name)
|
|
367
|
+
continue;
|
|
368
|
+
const range = xlsx.utils.decode_range(t.ref);
|
|
369
|
+
const totalsRows = (_b = t.totalsRowCount) !== null && _b !== void 0 ? _b : 0;
|
|
370
|
+
tables.push({
|
|
371
|
+
name: t.name,
|
|
372
|
+
displayName: (_c = t.displayName) !== null && _c !== void 0 ? _c : t.name,
|
|
373
|
+
ref: t.ref,
|
|
374
|
+
sheetName,
|
|
375
|
+
columns: resolveColumns(sheet, t),
|
|
376
|
+
dataRowCount: Math.max(0, range.e.r - range.s.r - totalsRows),
|
|
377
|
+
});
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
return tables;
|
|
381
|
+
}
|
|
382
|
+
function findTable(workbook, tableName) {
|
|
383
|
+
var _a;
|
|
384
|
+
for (const sheetName of workbook.SheetNames) {
|
|
385
|
+
const sheet = workbook.Sheets[sheetName];
|
|
386
|
+
const rawTables = (_a = sheet['!tables']) !== null && _a !== void 0 ? _a : [];
|
|
387
|
+
for (const table of rawTables) {
|
|
388
|
+
if (table.name === tableName || table.displayName === tableName) {
|
|
389
|
+
return { sheet, sheetName, table };
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
throw new Error(`Table "${tableName}" not found. Use "List" to see available tables.`);
|
|
394
|
+
}
|
|
395
|
+
// Return column names of a named table
|
|
396
|
+
function getTableColumns(workbook, tableName) {
|
|
397
|
+
const { sheet, table } = findTable(workbook, tableName);
|
|
398
|
+
return resolveColumns(sheet, table);
|
|
399
|
+
}
|
|
400
|
+
// Return all data rows of a named table (optionally filtered)
|
|
401
|
+
function getTableRows(workbook, tableName, filters = []) {
|
|
402
|
+
var _a;
|
|
403
|
+
const { sheet, table } = findTable(workbook, tableName);
|
|
404
|
+
const range = xlsx.utils.decode_range(table.ref);
|
|
405
|
+
const columns = resolveColumns(sheet, table);
|
|
406
|
+
const totalsRows = (_a = table.totalsRowCount) !== null && _a !== void 0 ? _a : 0;
|
|
407
|
+
const lastDataRow = range.e.r - totalsRows;
|
|
408
|
+
const rows = [];
|
|
409
|
+
for (let r = range.s.r + 1; r <= lastDataRow; r++) {
|
|
410
|
+
const row = {};
|
|
411
|
+
for (let c = range.s.c; c <= range.e.c; c++) {
|
|
412
|
+
const cell = sheet[xlsx.utils.encode_cell({ r, c })];
|
|
413
|
+
row[columns[c - range.s.c]] = cell ? cell.v : '';
|
|
414
|
+
}
|
|
415
|
+
rows.push(row);
|
|
416
|
+
}
|
|
417
|
+
if (filters.length === 0)
|
|
418
|
+
return rows;
|
|
419
|
+
return rows.filter((row) => filters.every((f) => { var _a; return String((_a = row[f.column]) !== null && _a !== void 0 ? _a : '').toLowerCase() === f.value.toLowerCase(); }));
|
|
420
|
+
}
|
|
421
|
+
// Append a row to a named table — extends the table ref by 1 row
|
|
422
|
+
function appendRowToTable(workbook, tableName, rowData) {
|
|
423
|
+
var _a, _b;
|
|
424
|
+
const { sheet, table } = findTable(workbook, tableName);
|
|
425
|
+
const range = xlsx.utils.decode_range(table.ref);
|
|
426
|
+
const columns = resolveColumns(sheet, table);
|
|
427
|
+
const totalsRows = (_a = table.totalsRowCount) !== null && _a !== void 0 ? _a : 0;
|
|
428
|
+
// New data row goes just before any totals row
|
|
429
|
+
const insertRow = range.e.r - totalsRows + 1;
|
|
430
|
+
columns.forEach((col, colIdx) => {
|
|
431
|
+
var _a;
|
|
432
|
+
const val = (_a = rowData[col]) !== null && _a !== void 0 ? _a : '';
|
|
433
|
+
const cellAddr = xlsx.utils.encode_cell({ r: insertRow, c: range.s.c + colIdx });
|
|
434
|
+
sheet[cellAddr] = {
|
|
435
|
+
v: val,
|
|
436
|
+
t: typeof val === 'number' ? 'n' : typeof val === 'boolean' ? 'b' : 's',
|
|
437
|
+
};
|
|
438
|
+
});
|
|
439
|
+
// Extend table ref and autoFilter
|
|
440
|
+
range.e.r += 1;
|
|
441
|
+
table.ref = xlsx.utils.encode_range(range);
|
|
442
|
+
if (table.autoFilter)
|
|
443
|
+
table.autoFilter.ref = table.ref;
|
|
444
|
+
// Extend sheet ref if needed
|
|
445
|
+
const sheetRange = xlsx.utils.decode_range((_b = sheet['!ref']) !== null && _b !== void 0 ? _b : 'A1');
|
|
446
|
+
if (insertRow > sheetRange.e.r) {
|
|
447
|
+
sheetRange.e.r = insertRow;
|
|
448
|
+
sheet['!ref'] = xlsx.utils.encode_range(sheetRange);
|
|
449
|
+
}
|
|
450
|
+
}
|
|
451
|
+
// Update an existing row in a named table (rowIndex is 1-based data row)
|
|
452
|
+
function updateRowInTable(workbook, tableName, rowIndex, rowData) {
|
|
453
|
+
var _a;
|
|
454
|
+
const { sheet, table } = findTable(workbook, tableName);
|
|
455
|
+
const range = xlsx.utils.decode_range(table.ref);
|
|
456
|
+
const columns = resolveColumns(sheet, table);
|
|
457
|
+
const totalsRows = (_a = table.totalsRowCount) !== null && _a !== void 0 ? _a : 0;
|
|
458
|
+
const dataRowCount = range.e.r - range.s.r - totalsRows;
|
|
459
|
+
if (rowIndex < 1 || rowIndex > dataRowCount) {
|
|
460
|
+
throw new Error(`Row ${rowIndex} is out of range — table "${tableName}" has ${dataRowCount} data row(s)`);
|
|
461
|
+
}
|
|
462
|
+
const targetRow = range.s.r + rowIndex;
|
|
463
|
+
columns.forEach((col, colIdx) => {
|
|
464
|
+
if (rowData[col] !== undefined) {
|
|
465
|
+
const cellAddr = xlsx.utils.encode_cell({ r: targetRow, c: range.s.c + colIdx });
|
|
466
|
+
const val = rowData[col];
|
|
467
|
+
sheet[cellAddr] = {
|
|
468
|
+
v: val,
|
|
469
|
+
t: typeof val === 'number' ? 'n' : typeof val === 'boolean' ? 'b' : 's',
|
|
470
|
+
};
|
|
471
|
+
}
|
|
472
|
+
});
|
|
473
|
+
}
|
|
474
|
+
// Delete a row from a named table — shifts subsequent rows up, shrinks table ref
|
|
475
|
+
function deleteRowFromTable(workbook, tableName, rowIndex) {
|
|
476
|
+
var _a;
|
|
477
|
+
const { sheet, table } = findTable(workbook, tableName);
|
|
478
|
+
const range = xlsx.utils.decode_range(table.ref);
|
|
479
|
+
const totalsRows = (_a = table.totalsRowCount) !== null && _a !== void 0 ? _a : 0;
|
|
480
|
+
const dataRowCount = range.e.r - range.s.r - totalsRows;
|
|
481
|
+
if (rowIndex < 1 || rowIndex > dataRowCount) {
|
|
482
|
+
throw new Error(`Row ${rowIndex} is out of range — table "${tableName}" has ${dataRowCount} data row(s)`);
|
|
483
|
+
}
|
|
484
|
+
const targetRow = range.s.r + rowIndex;
|
|
485
|
+
const lastDataRow = range.e.r - totalsRows;
|
|
486
|
+
// Shift all rows above the totals section up by one
|
|
487
|
+
for (let r = targetRow; r < lastDataRow; r++) {
|
|
488
|
+
for (let c = range.s.c; c <= range.e.c; c++) {
|
|
489
|
+
const srcAddr = xlsx.utils.encode_cell({ r: r + 1, c });
|
|
490
|
+
const dstAddr = xlsx.utils.encode_cell({ r, c });
|
|
491
|
+
if (sheet[srcAddr]) {
|
|
492
|
+
sheet[dstAddr] = { ...sheet[srcAddr] };
|
|
493
|
+
}
|
|
494
|
+
else {
|
|
495
|
+
delete sheet[dstAddr];
|
|
496
|
+
}
|
|
497
|
+
}
|
|
498
|
+
}
|
|
499
|
+
// Blank the vacated last data row
|
|
500
|
+
for (let c = range.s.c; c <= range.e.c; c++) {
|
|
501
|
+
delete sheet[xlsx.utils.encode_cell({ r: lastDataRow, c })];
|
|
502
|
+
}
|
|
503
|
+
// Shrink table ref and autoFilter
|
|
504
|
+
range.e.r -= 1;
|
|
505
|
+
table.ref = xlsx.utils.encode_range(range);
|
|
506
|
+
if (table.autoFilter)
|
|
507
|
+
table.autoFilter.ref = table.ref;
|
|
508
|
+
}
|
|
509
|
+
// Load-options helper: returns all named tables in the selected file
|
|
510
|
+
async function getTablesForFile(context, filePath) {
|
|
511
|
+
const creds = await getCredentials(context);
|
|
512
|
+
const buffer = await downloadFile(context, creds, filePath);
|
|
513
|
+
const workbook = parseWorkbook(buffer);
|
|
514
|
+
const tables = getWorkbookTables(workbook);
|
|
515
|
+
if (tables.length === 0) {
|
|
516
|
+
return [{ name: '(no named tables found — create a table in Excel first)', value: '' }];
|
|
517
|
+
}
|
|
518
|
+
return tables.map((t) => ({
|
|
519
|
+
name: `${t.displayName} [${t.sheetName} · ${t.ref} · ${t.dataRowCount} rows]`,
|
|
520
|
+
value: t.name,
|
|
521
|
+
}));
|
|
522
|
+
}
|
|
523
|
+
//# sourceMappingURL=GenericFunctions.js.map
|