@memberjunction/core-actions 2.53.0 → 2.55.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/dist/custom/ai/execute-ai-prompt.action.d.ts +94 -0
- package/dist/custom/ai/execute-ai-prompt.action.d.ts.map +1 -0
- package/dist/custom/ai/execute-ai-prompt.action.js +274 -0
- package/dist/custom/ai/execute-ai-prompt.action.js.map +1 -0
- package/dist/custom/communication/slack-webhook.action.d.ts +101 -0
- package/dist/custom/communication/slack-webhook.action.d.ts.map +1 -0
- package/dist/custom/communication/slack-webhook.action.js +269 -0
- package/dist/custom/communication/slack-webhook.action.js.map +1 -0
- package/dist/custom/communication/teams-webhook.action.d.ts +96 -0
- package/dist/custom/communication/teams-webhook.action.d.ts.map +1 -0
- package/dist/custom/communication/teams-webhook.action.js +275 -0
- package/dist/custom/communication/teams-webhook.action.js.map +1 -0
- package/dist/custom/data/aggregate-data.action.d.ts +91 -0
- package/dist/custom/data/aggregate-data.action.d.ts.map +1 -0
- package/dist/custom/data/aggregate-data.action.js +333 -0
- package/dist/custom/data/aggregate-data.action.js.map +1 -0
- package/dist/custom/data/csv-parser.action.d.ts +68 -0
- package/dist/custom/data/csv-parser.action.d.ts.map +1 -0
- package/dist/custom/data/csv-parser.action.js +184 -0
- package/dist/custom/data/csv-parser.action.js.map +1 -0
- package/dist/custom/data/data-mapper.action.d.ts +89 -0
- package/dist/custom/data/data-mapper.action.d.ts.map +1 -0
- package/dist/custom/data/data-mapper.action.js +325 -0
- package/dist/custom/data/data-mapper.action.js.map +1 -0
- package/dist/custom/data/json-transform.action.d.ts +57 -0
- package/dist/custom/data/json-transform.action.d.ts.map +1 -0
- package/dist/custom/data/json-transform.action.js +205 -0
- package/dist/custom/data/json-transform.action.js.map +1 -0
- package/dist/custom/data/xml-parser.action.d.ts +85 -0
- package/dist/custom/data/xml-parser.action.d.ts.map +1 -0
- package/dist/custom/data/xml-parser.action.js +326 -0
- package/dist/custom/data/xml-parser.action.js.map +1 -0
- package/dist/custom/files/excel-reader.action.d.ts +86 -0
- package/dist/custom/files/excel-reader.action.d.ts.map +1 -0
- package/dist/custom/files/excel-reader.action.js +348 -0
- package/dist/custom/files/excel-reader.action.js.map +1 -0
- package/dist/custom/files/excel-writer.action.d.ts +79 -0
- package/dist/custom/files/excel-writer.action.d.ts.map +1 -0
- package/dist/custom/files/excel-writer.action.js +325 -0
- package/dist/custom/files/excel-writer.action.js.map +1 -0
- package/dist/custom/files/file-compress.action.d.ts +90 -0
- package/dist/custom/files/file-compress.action.d.ts.map +1 -0
- package/dist/custom/files/file-compress.action.js +346 -0
- package/dist/custom/files/file-compress.action.js.map +1 -0
- package/dist/custom/files/pdf-extractor.action.d.ts +86 -0
- package/dist/custom/files/pdf-extractor.action.d.ts.map +1 -0
- package/dist/custom/files/pdf-extractor.action.js +247 -0
- package/dist/custom/files/pdf-extractor.action.js.map +1 -0
- package/dist/custom/files/pdf-generator.action.d.ts +70 -0
- package/dist/custom/files/pdf-generator.action.d.ts.map +1 -0
- package/dist/custom/files/pdf-generator.action.js +286 -0
- package/dist/custom/files/pdf-generator.action.js.map +1 -0
- package/dist/custom/integration/api-rate-limiter.action.d.ts +88 -0
- package/dist/custom/integration/api-rate-limiter.action.d.ts.map +1 -0
- package/dist/custom/integration/api-rate-limiter.action.js +363 -0
- package/dist/custom/integration/api-rate-limiter.action.js.map +1 -0
- package/dist/custom/integration/graphql-query.action.d.ts +92 -0
- package/dist/custom/integration/graphql-query.action.d.ts.map +1 -0
- package/dist/custom/integration/graphql-query.action.js +251 -0
- package/dist/custom/integration/graphql-query.action.js.map +1 -0
- package/dist/custom/integration/http-request.action.d.ts +96 -0
- package/dist/custom/integration/http-request.action.d.ts.map +1 -0
- package/dist/custom/integration/http-request.action.js +316 -0
- package/dist/custom/integration/http-request.action.js.map +1 -0
- package/dist/custom/integration/oauth-flow.action.d.ts +130 -0
- package/dist/custom/integration/oauth-flow.action.d.ts.map +1 -0
- package/dist/custom/integration/oauth-flow.action.js +624 -0
- package/dist/custom/integration/oauth-flow.action.js.map +1 -0
- package/dist/custom/security/password-strength.action.d.ts +129 -0
- package/dist/custom/security/password-strength.action.d.ts.map +1 -0
- package/dist/custom/security/password-strength.action.js +463 -0
- package/dist/custom/security/password-strength.action.js.map +1 -0
- package/dist/custom/utilities/base-file-handler.d.ts +54 -0
- package/dist/custom/utilities/base-file-handler.d.ts.map +1 -0
- package/dist/custom/utilities/base-file-handler.js +167 -0
- package/dist/custom/utilities/base-file-handler.js.map +1 -0
- package/dist/custom/utilities/index.d.ts +3 -0
- package/dist/custom/utilities/index.d.ts.map +1 -0
- package/dist/custom/utilities/index.js +19 -0
- package/dist/custom/utilities/index.js.map +1 -0
- package/dist/custom/utilities/json-param-helper.d.ts +33 -0
- package/dist/custom/utilities/json-param-helper.d.ts.map +1 -0
- package/dist/custom/utilities/json-param-helper.js +66 -0
- package/dist/custom/utilities/json-param-helper.js.map +1 -0
- package/dist/custom/web/duckduckgo-rate-limiter.d.ts +72 -0
- package/dist/custom/web/duckduckgo-rate-limiter.d.ts.map +1 -0
- package/dist/custom/web/duckduckgo-rate-limiter.js +175 -0
- package/dist/custom/web/duckduckgo-rate-limiter.js.map +1 -0
- package/dist/custom/web/web-search.action.d.ts +1 -0
- package/dist/custom/web/web-search.action.d.ts.map +1 -1
- package/dist/custom/web/web-search.action.js +48 -20
- package/dist/custom/web/web-search.action.js.map +1 -1
- package/dist/custom/workflow/conditional.action.d.ts +94 -0
- package/dist/custom/workflow/conditional.action.d.ts.map +1 -0
- package/dist/custom/workflow/conditional.action.js +274 -0
- package/dist/custom/workflow/conditional.action.js.map +1 -0
- package/dist/custom/workflow/delay.action.d.ts +76 -0
- package/dist/custom/workflow/delay.action.d.ts.map +1 -0
- package/dist/custom/workflow/delay.action.js +187 -0
- package/dist/custom/workflow/delay.action.js.map +1 -0
- package/dist/custom/workflow/loop.action.d.ts +112 -0
- package/dist/custom/workflow/loop.action.d.ts.map +1 -0
- package/dist/custom/workflow/loop.action.js +380 -0
- package/dist/custom/workflow/loop.action.js.map +1 -0
- package/dist/custom/workflow/parallel-execute.action.d.ts +105 -0
- package/dist/custom/workflow/parallel-execute.action.d.ts.map +1 -0
- package/dist/custom/workflow/parallel-execute.action.js +457 -0
- package/dist/custom/workflow/parallel-execute.action.js.map +1 -0
- package/dist/custom/workflow/retry.action.d.ts +90 -0
- package/dist/custom/workflow/retry.action.d.ts.map +1 -0
- package/dist/custom/workflow/retry.action.js +378 -0
- package/dist/custom/workflow/retry.action.js.map +1 -0
- package/dist/index.d.ts +23 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +75 -0
- package/dist/index.js.map +1 -1
- package/package.json +25 -10
- package/readme.md +11270 -101
|
@@ -0,0 +1,325 @@
|
|
|
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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
19
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
20
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
21
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
22
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
23
|
+
};
|
|
24
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
25
|
+
if (mod && mod.__esModule) return mod;
|
|
26
|
+
var result = {};
|
|
27
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
28
|
+
__setModuleDefault(result, mod);
|
|
29
|
+
return result;
|
|
30
|
+
};
|
|
31
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
32
|
+
exports.LoadExcelWriterAction = exports.ExcelWriterAction = void 0;
|
|
33
|
+
const global_1 = require("@memberjunction/global");
|
|
34
|
+
const base_file_handler_1 = require("../utilities/base-file-handler");
|
|
35
|
+
const ExcelJS = __importStar(require("exceljs"));
|
|
36
|
+
const json_param_helper_1 = require("../utilities/json-param-helper");
|
|
37
|
+
/**
|
|
38
|
+
* Action that creates Excel files from JSON data
|
|
39
|
+
* Supports multiple sheets, formatting, and formulas
|
|
40
|
+
*
|
|
41
|
+
* @example
|
|
42
|
+
* ```typescript
|
|
43
|
+
* // Create simple Excel with one sheet
|
|
44
|
+
* await runAction({
|
|
45
|
+
* ActionName: 'Excel Writer',
|
|
46
|
+
* Params: [{
|
|
47
|
+
* Name: 'Sheets',
|
|
48
|
+
* Value: [{
|
|
49
|
+
* name: 'Sales Data',
|
|
50
|
+
* data: [
|
|
51
|
+
* { Product: 'Widget A', Sales: 100, Revenue: 1000 },
|
|
52
|
+
* { Product: 'Widget B', Sales: 150, Revenue: 1500 }
|
|
53
|
+
* ]
|
|
54
|
+
* }]
|
|
55
|
+
* }]
|
|
56
|
+
* });
|
|
57
|
+
*
|
|
58
|
+
* // Create Excel with multiple sheets and formatting
|
|
59
|
+
* await runAction({
|
|
60
|
+
* ActionName: 'Excel Writer',
|
|
61
|
+
* Params: [{
|
|
62
|
+
* Name: 'Sheets',
|
|
63
|
+
* Value: [{
|
|
64
|
+
* name: 'Q1 Sales',
|
|
65
|
+
* data: salesData,
|
|
66
|
+
* headers: ['Product', 'Units', 'Revenue'],
|
|
67
|
+
* columnWidths: [20, 10, 15],
|
|
68
|
+
* styles: {
|
|
69
|
+
* headerStyle: { font: { bold: true }, fill: { type: 'pattern', pattern: 'solid', fgColor: { argb: 'FF4472C4' } } }
|
|
70
|
+
* }
|
|
71
|
+
* }, {
|
|
72
|
+
* name: 'Summary',
|
|
73
|
+
* data: summaryData
|
|
74
|
+
* }]
|
|
75
|
+
* }]
|
|
76
|
+
* });
|
|
77
|
+
* ```
|
|
78
|
+
*/
|
|
79
|
+
let ExcelWriterAction = class ExcelWriterAction extends base_file_handler_1.BaseFileHandlerAction {
|
|
80
|
+
/**
|
|
81
|
+
* Creates Excel files from JSON data
|
|
82
|
+
*
|
|
83
|
+
* @param params - The action parameters containing:
|
|
84
|
+
* - Sheets: Array of sheet definitions, each containing:
|
|
85
|
+
* - name: Sheet name (required)
|
|
86
|
+
* - data: Array of data rows (required)
|
|
87
|
+
* - headers: Array of column headers (optional, derived from data if not provided)
|
|
88
|
+
* - columnWidths: Array of column widths in characters (optional)
|
|
89
|
+
* - styles: Object with style definitions (optional)
|
|
90
|
+
* - formulas: Array of formula definitions (optional)
|
|
91
|
+
* - OutputFileID: Optional MJ Storage file ID to save to
|
|
92
|
+
* - FileName: Name for the generated Excel file (default: 'workbook.xlsx')
|
|
93
|
+
* - Author: Author metadata (optional)
|
|
94
|
+
* - Title: Title metadata (optional)
|
|
95
|
+
* - Description: Description metadata (optional)
|
|
96
|
+
*
|
|
97
|
+
* @returns Base64 encoded Excel data or FileID if saved
|
|
98
|
+
*/
|
|
99
|
+
async InternalRunAction(params) {
|
|
100
|
+
try {
|
|
101
|
+
// Extract parameters
|
|
102
|
+
let sheets;
|
|
103
|
+
try {
|
|
104
|
+
sheets = json_param_helper_1.JSONParamHelper.getRequiredJSONParam(params, 'sheets');
|
|
105
|
+
}
|
|
106
|
+
catch (error) {
|
|
107
|
+
return {
|
|
108
|
+
Success: false,
|
|
109
|
+
Message: error instanceof Error ? error.message : String(error),
|
|
110
|
+
ResultCode: "MISSING_SHEETS"
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
const outputFileId = this.getParamValue(params, 'outputfileid');
|
|
114
|
+
const fileName = this.getParamValue(params, 'filename') || 'workbook.xlsx';
|
|
115
|
+
const author = this.getParamValue(params, 'author');
|
|
116
|
+
const title = this.getParamValue(params, 'title');
|
|
117
|
+
const description = this.getParamValue(params, 'description');
|
|
118
|
+
if (!Array.isArray(sheets) || sheets.length === 0) {
|
|
119
|
+
return {
|
|
120
|
+
Success: false,
|
|
121
|
+
Message: "Sheets must be a non-empty array",
|
|
122
|
+
ResultCode: "INVALID_SHEETS"
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
// Create workbook
|
|
126
|
+
const workbook = new ExcelJS.Workbook();
|
|
127
|
+
// Set metadata
|
|
128
|
+
workbook.creator = author || 'MemberJunction';
|
|
129
|
+
workbook.created = new Date();
|
|
130
|
+
workbook.modified = new Date();
|
|
131
|
+
if (title)
|
|
132
|
+
workbook.title = title;
|
|
133
|
+
if (description)
|
|
134
|
+
workbook.description = description;
|
|
135
|
+
// Add sheets
|
|
136
|
+
let totalRows = 0;
|
|
137
|
+
let totalColumns = 0;
|
|
138
|
+
for (const sheetDef of sheets) {
|
|
139
|
+
if (!sheetDef.name || !sheetDef.data) {
|
|
140
|
+
return {
|
|
141
|
+
Success: false,
|
|
142
|
+
Message: "Each sheet must have a name and data",
|
|
143
|
+
ResultCode: "INVALID_SHEET_DEFINITION"
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
const worksheet = workbook.addWorksheet(sheetDef.name);
|
|
147
|
+
const result = this.populateWorksheet(worksheet, sheetDef);
|
|
148
|
+
totalRows += result.rowCount;
|
|
149
|
+
totalColumns = Math.max(totalColumns, result.columnCount);
|
|
150
|
+
}
|
|
151
|
+
// Generate Excel buffer
|
|
152
|
+
const buffer = await workbook.xlsx.writeBuffer();
|
|
153
|
+
// Save to storage if requested
|
|
154
|
+
if (outputFileId) {
|
|
155
|
+
try {
|
|
156
|
+
const fileId = await this.saveToMJStorage(buffer, fileName, 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', params);
|
|
157
|
+
// Add output parameter
|
|
158
|
+
params.Params.push({
|
|
159
|
+
Name: 'GeneratedFileID',
|
|
160
|
+
Type: 'Output',
|
|
161
|
+
Value: fileId
|
|
162
|
+
});
|
|
163
|
+
return {
|
|
164
|
+
Success: true,
|
|
165
|
+
ResultCode: "SUCCESS_SAVED",
|
|
166
|
+
Message: JSON.stringify({
|
|
167
|
+
message: "Excel file generated and saved successfully",
|
|
168
|
+
fileId: fileId,
|
|
169
|
+
fileName: fileName,
|
|
170
|
+
sheets: sheets.length,
|
|
171
|
+
totalRows: totalRows,
|
|
172
|
+
sizeBytes: buffer.length
|
|
173
|
+
}, null, 2)
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
catch (error) {
|
|
177
|
+
// If save fails, still return the Excel data
|
|
178
|
+
console.error('Failed to save to storage:', error);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
// Return as base64
|
|
182
|
+
const base64Data = buffer.toString('base64');
|
|
183
|
+
// Add output parameter
|
|
184
|
+
params.Params.push({
|
|
185
|
+
Name: 'ExcelData',
|
|
186
|
+
Type: 'Output',
|
|
187
|
+
Value: base64Data
|
|
188
|
+
});
|
|
189
|
+
return {
|
|
190
|
+
Success: true,
|
|
191
|
+
ResultCode: "SUCCESS",
|
|
192
|
+
Message: JSON.stringify({
|
|
193
|
+
message: "Excel file generated successfully",
|
|
194
|
+
fileName: fileName,
|
|
195
|
+
sheets: sheets.length,
|
|
196
|
+
totalRows: totalRows,
|
|
197
|
+
sizeBytes: buffer.length,
|
|
198
|
+
base64Length: base64Data.length
|
|
199
|
+
}, null, 2)
|
|
200
|
+
};
|
|
201
|
+
}
|
|
202
|
+
catch (error) {
|
|
203
|
+
return {
|
|
204
|
+
Success: false,
|
|
205
|
+
Message: `Failed to create Excel file: ${error instanceof Error ? error.message : String(error)}`,
|
|
206
|
+
ResultCode: "CREATION_FAILED"
|
|
207
|
+
};
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Populate worksheet with data
|
|
212
|
+
*/
|
|
213
|
+
populateWorksheet(worksheet, sheetDef) {
|
|
214
|
+
const data = sheetDef.data;
|
|
215
|
+
if (!Array.isArray(data) || data.length === 0) {
|
|
216
|
+
return { rowCount: 0, columnCount: 0 };
|
|
217
|
+
}
|
|
218
|
+
// Determine headers
|
|
219
|
+
let headers = sheetDef.headers;
|
|
220
|
+
if (!headers && data.length > 0 && typeof data[0] === 'object' && !Array.isArray(data[0])) {
|
|
221
|
+
headers = Object.keys(data[0]);
|
|
222
|
+
}
|
|
223
|
+
let rowCount = 0;
|
|
224
|
+
let columnCount = 0;
|
|
225
|
+
// Add headers if present
|
|
226
|
+
if (headers) {
|
|
227
|
+
worksheet.addRow(headers);
|
|
228
|
+
rowCount++;
|
|
229
|
+
columnCount = headers.length;
|
|
230
|
+
// Apply header styles if provided
|
|
231
|
+
if (sheetDef.styles?.headerStyle) {
|
|
232
|
+
const headerRow = worksheet.getRow(1);
|
|
233
|
+
this.applyRowStyle(headerRow, sheetDef.styles.headerStyle);
|
|
234
|
+
}
|
|
235
|
+
// Set column widths if provided
|
|
236
|
+
if (sheetDef.columnWidths && Array.isArray(sheetDef.columnWidths)) {
|
|
237
|
+
headers.forEach((header, index) => {
|
|
238
|
+
if (index < sheetDef.columnWidths.length) {
|
|
239
|
+
worksheet.getColumn(index + 1).width = sheetDef.columnWidths[index];
|
|
240
|
+
}
|
|
241
|
+
});
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
// Add data rows
|
|
245
|
+
for (const row of data) {
|
|
246
|
+
if (Array.isArray(row)) {
|
|
247
|
+
// Array of arrays
|
|
248
|
+
worksheet.addRow(row);
|
|
249
|
+
columnCount = Math.max(columnCount, row.length);
|
|
250
|
+
}
|
|
251
|
+
else if (typeof row === 'object' && headers) {
|
|
252
|
+
// Array of objects with headers
|
|
253
|
+
const rowData = headers.map(header => row[header] ?? '');
|
|
254
|
+
worksheet.addRow(rowData);
|
|
255
|
+
}
|
|
256
|
+
else {
|
|
257
|
+
// Single value
|
|
258
|
+
worksheet.addRow([row]);
|
|
259
|
+
columnCount = Math.max(columnCount, 1);
|
|
260
|
+
}
|
|
261
|
+
rowCount++;
|
|
262
|
+
}
|
|
263
|
+
// Apply data styles if provided
|
|
264
|
+
if (sheetDef.styles?.dataStyle) {
|
|
265
|
+
for (let i = headers ? 2 : 1; i <= rowCount; i++) {
|
|
266
|
+
const row = worksheet.getRow(i);
|
|
267
|
+
this.applyRowStyle(row, sheetDef.styles.dataStyle);
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
// Add formulas if provided
|
|
271
|
+
if (sheetDef.formulas && Array.isArray(sheetDef.formulas)) {
|
|
272
|
+
for (const formula of sheetDef.formulas) {
|
|
273
|
+
if (formula.cell && formula.formula) {
|
|
274
|
+
worksheet.getCell(formula.cell).value = { formula: formula.formula };
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
// Auto-fit columns if no widths provided
|
|
279
|
+
if (!sheetDef.columnWidths) {
|
|
280
|
+
worksheet.columns.forEach(column => {
|
|
281
|
+
let maxLength = 0;
|
|
282
|
+
column.eachCell({ includeEmpty: false }, cell => {
|
|
283
|
+
const columnLength = cell.value ? cell.value.toString().length : 10;
|
|
284
|
+
if (columnLength > maxLength) {
|
|
285
|
+
maxLength = columnLength;
|
|
286
|
+
}
|
|
287
|
+
});
|
|
288
|
+
column.width = Math.min(maxLength + 2, 50); // Cap at 50 characters
|
|
289
|
+
});
|
|
290
|
+
}
|
|
291
|
+
return { rowCount, columnCount };
|
|
292
|
+
}
|
|
293
|
+
/**
|
|
294
|
+
* Apply style to a row
|
|
295
|
+
*/
|
|
296
|
+
applyRowStyle(row, style) {
|
|
297
|
+
if (style.font) {
|
|
298
|
+
row.font = style.font;
|
|
299
|
+
}
|
|
300
|
+
if (style.fill) {
|
|
301
|
+
row.fill = style.fill;
|
|
302
|
+
}
|
|
303
|
+
if (style.alignment) {
|
|
304
|
+
row.alignment = style.alignment;
|
|
305
|
+
}
|
|
306
|
+
if (style.border) {
|
|
307
|
+
row.border = style.border;
|
|
308
|
+
}
|
|
309
|
+
if (style.height) {
|
|
310
|
+
row.height = style.height;
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
};
|
|
314
|
+
exports.ExcelWriterAction = ExcelWriterAction;
|
|
315
|
+
exports.ExcelWriterAction = ExcelWriterAction = __decorate([
|
|
316
|
+
(0, global_1.RegisterClass)(base_file_handler_1.BaseFileHandlerAction, "Excel Writer")
|
|
317
|
+
], ExcelWriterAction);
|
|
318
|
+
/**
|
|
319
|
+
* Loader function to ensure the ExcelWriterAction class is included in the bundle
|
|
320
|
+
*/
|
|
321
|
+
function LoadExcelWriterAction() {
|
|
322
|
+
// Stub function to prevent tree shaking
|
|
323
|
+
}
|
|
324
|
+
exports.LoadExcelWriterAction = LoadExcelWriterAction;
|
|
325
|
+
//# sourceMappingURL=excel-writer.action.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"excel-writer.action.js","sourceRoot":"","sources":["../../../src/custom/files/excel-writer.action.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { ActionResultSimple, RunActionParams } from "@memberjunction/actions-base";
|
|
2
|
+
import { BaseFileHandlerAction } from "../utilities/base-file-handler";
|
|
3
|
+
/**
|
|
4
|
+
* Action that compresses or decompresses files
|
|
5
|
+
* Supports ZIP format with various compression levels
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* // Compress multiple files into ZIP
|
|
10
|
+
* await runAction({
|
|
11
|
+
* ActionName: 'File Compress',
|
|
12
|
+
* Params: [{
|
|
13
|
+
* Name: 'Operation',
|
|
14
|
+
* Value: 'compress'
|
|
15
|
+
* }, {
|
|
16
|
+
* Name: 'Files',
|
|
17
|
+
* Value: [
|
|
18
|
+
* { name: 'report.pdf', data: pdfBase64Data },
|
|
19
|
+
* { name: 'data.csv', data: csvData }
|
|
20
|
+
* ]
|
|
21
|
+
* }]
|
|
22
|
+
* });
|
|
23
|
+
*
|
|
24
|
+
* // Decompress ZIP file
|
|
25
|
+
* await runAction({
|
|
26
|
+
* ActionName: 'File Compress',
|
|
27
|
+
* Params: [{
|
|
28
|
+
* Name: 'Operation',
|
|
29
|
+
* Value: 'decompress'
|
|
30
|
+
* }, {
|
|
31
|
+
* Name: 'FileURL',
|
|
32
|
+
* Value: 'https://example.com/archive.zip'
|
|
33
|
+
* }]
|
|
34
|
+
* });
|
|
35
|
+
*
|
|
36
|
+
* // Compress with options
|
|
37
|
+
* await runAction({
|
|
38
|
+
* ActionName: 'File Compress',
|
|
39
|
+
* Params: [{
|
|
40
|
+
* Name: 'Operation',
|
|
41
|
+
* Value: 'compress'
|
|
42
|
+
* }, {
|
|
43
|
+
* Name: 'Files',
|
|
44
|
+
* Value: filesArray
|
|
45
|
+
* }, {
|
|
46
|
+
* Name: 'CompressionLevel',
|
|
47
|
+
* Value: 9
|
|
48
|
+
* }, {
|
|
49
|
+
* Name: 'OutputFileID',
|
|
50
|
+
* Value: true
|
|
51
|
+
* }]
|
|
52
|
+
* });
|
|
53
|
+
* ```
|
|
54
|
+
*/
|
|
55
|
+
export declare class FileCompressAction extends BaseFileHandlerAction {
|
|
56
|
+
/**
|
|
57
|
+
* Compresses or decompresses files
|
|
58
|
+
*
|
|
59
|
+
* @param params - The action parameters containing:
|
|
60
|
+
* - Operation: "compress" | "decompress" (required)
|
|
61
|
+
* - For compress:
|
|
62
|
+
* - Files: Array of file objects with { name: string, data: string/Buffer }
|
|
63
|
+
* - CompressionLevel: 0-9 (default: 6, 0=store only, 9=maximum compression)
|
|
64
|
+
* - Format: "zip" (currently only ZIP supported)
|
|
65
|
+
* - For decompress:
|
|
66
|
+
* - FileID/FileURL/Data: Input compressed file
|
|
67
|
+
* - OutputFileID: Save result to MJ Storage (optional)
|
|
68
|
+
* - FileName: Name for output file (default: 'archive.zip' or 'extracted_files.json')
|
|
69
|
+
*
|
|
70
|
+
* @returns Compressed/decompressed data
|
|
71
|
+
*/
|
|
72
|
+
protected InternalRunAction(params: RunActionParams): Promise<ActionResultSimple>;
|
|
73
|
+
/**
|
|
74
|
+
* Compress files
|
|
75
|
+
*/
|
|
76
|
+
private compress;
|
|
77
|
+
/**
|
|
78
|
+
* Decompress files
|
|
79
|
+
*/
|
|
80
|
+
private decompress;
|
|
81
|
+
/**
|
|
82
|
+
* Check if string is base64
|
|
83
|
+
*/
|
|
84
|
+
private isBase64;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Loader function to ensure the FileCompressAction class is included in the bundle
|
|
88
|
+
*/
|
|
89
|
+
export declare function LoadFileCompressAction(): void;
|
|
90
|
+
//# sourceMappingURL=file-compress.action.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-compress.action.d.ts","sourceRoot":"","sources":["../../../src/custom/files/file-compress.action.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAEnF,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AAMvE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmDG;AACH,qBACa,kBAAmB,SAAQ,qBAAqB;IAEzD;;;;;;;;;;;;;;;OAeG;cACa,iBAAiB,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,kBAAkB,CAAC;IA2BvF;;OAEG;YACW,QAAQ;IA8ItB;;OAEG;YACW,UAAU;IAiExB;;OAEG;IACH,OAAO,CAAC,QAAQ;CAOnB;AAED;;GAEG;AACH,wBAAgB,sBAAsB,SAErC"}
|