@memberjunction/core-actions 2.54.0 → 2.56.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 +85 -0
- package/dist/custom/web/duckduckgo-rate-limiter.d.ts.map +1 -0
- package/dist/custom/web/duckduckgo-rate-limiter.js +257 -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,184 @@
|
|
|
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.LoadCSVParserAction = exports.CSVParserAction = void 0;
|
|
33
|
+
const global_1 = require("@memberjunction/global");
|
|
34
|
+
const base_file_handler_1 = require("../utilities/base-file-handler");
|
|
35
|
+
const Papa = __importStar(require("papaparse"));
|
|
36
|
+
/**
|
|
37
|
+
* Action that parses CSV data into structured JSON format
|
|
38
|
+
* Supports multiple input sources, custom delimiters, and various parsing options
|
|
39
|
+
*
|
|
40
|
+
* @example
|
|
41
|
+
* ```typescript
|
|
42
|
+
* // Parse CSV with headers
|
|
43
|
+
* await runAction({
|
|
44
|
+
* ActionName: 'CSV Parser',
|
|
45
|
+
* Params: [{
|
|
46
|
+
* Name: 'CSVData',
|
|
47
|
+
* Value: 'Name,Age,City\nJohn,30,NYC\nJane,25,LA'
|
|
48
|
+
* }]
|
|
49
|
+
* });
|
|
50
|
+
*
|
|
51
|
+
* // Parse CSV from URL with custom delimiter
|
|
52
|
+
* await runAction({
|
|
53
|
+
* ActionName: 'CSV Parser',
|
|
54
|
+
* Params: [{
|
|
55
|
+
* Name: 'FileURL',
|
|
56
|
+
* Value: 'https://example.com/data.csv'
|
|
57
|
+
* }, {
|
|
58
|
+
* Name: 'Delimiter',
|
|
59
|
+
* Value: ';'
|
|
60
|
+
* }]
|
|
61
|
+
* });
|
|
62
|
+
*
|
|
63
|
+
* // Parse CSV without headers
|
|
64
|
+
* await runAction({
|
|
65
|
+
* ActionName: 'CSV Parser',
|
|
66
|
+
* Params: [{
|
|
67
|
+
* Name: 'CSVData',
|
|
68
|
+
* Value: 'John,30,NYC\nJane,25,LA'
|
|
69
|
+
* }, {
|
|
70
|
+
* Name: 'HasHeaders',
|
|
71
|
+
* Value: false
|
|
72
|
+
* }]
|
|
73
|
+
* });
|
|
74
|
+
* ```
|
|
75
|
+
*/
|
|
76
|
+
let CSVParserAction = class CSVParserAction extends base_file_handler_1.BaseFileHandlerAction {
|
|
77
|
+
/**
|
|
78
|
+
* Parses CSV data into JSON format
|
|
79
|
+
*
|
|
80
|
+
* @param params - The action parameters containing:
|
|
81
|
+
* - CSVData: String containing CSV data (direct input)
|
|
82
|
+
* - FileID: UUID of MJ Storage file (alternative)
|
|
83
|
+
* - FileURL: URL of CSV file (alternative)
|
|
84
|
+
* - HasHeaders: Boolean indicating if first row contains headers (default: true)
|
|
85
|
+
* - Delimiter: Field delimiter character (default: ",")
|
|
86
|
+
* - QuoteChar: Character used to quote fields (default: '"')
|
|
87
|
+
* - EscapeChar: Character used to escape quotes (default: '"')
|
|
88
|
+
* - SkipEmptyRows: Skip empty rows (default: true)
|
|
89
|
+
* - TrimValues: Trim whitespace from values (default: true)
|
|
90
|
+
* - DynamicTyping: Convert numeric strings to numbers (default: true)
|
|
91
|
+
* - MaxRows: Maximum number of rows to parse (optional)
|
|
92
|
+
*
|
|
93
|
+
* @returns Parsed CSV data as array of objects (if headers) or array of arrays
|
|
94
|
+
*/
|
|
95
|
+
async InternalRunAction(params) {
|
|
96
|
+
try {
|
|
97
|
+
// Get file content from various sources
|
|
98
|
+
const fileContent = await this.getFileContent(params, 'csvdata');
|
|
99
|
+
// Get parsing options
|
|
100
|
+
const hasHeaders = this.getBooleanParam(params, 'hasheaders', true);
|
|
101
|
+
const delimiter = this.getParamValue(params, 'delimiter') || ',';
|
|
102
|
+
const quoteChar = this.getParamValue(params, 'quotechar') || '"';
|
|
103
|
+
const escapeChar = this.getParamValue(params, 'escapechar') || '"';
|
|
104
|
+
const skipEmptyRows = this.getBooleanParam(params, 'skipemptyrows', true);
|
|
105
|
+
const trimValues = this.getBooleanParam(params, 'trimvalues', true);
|
|
106
|
+
const dynamicTyping = this.getBooleanParam(params, 'dynamictyping', true);
|
|
107
|
+
const maxRows = this.getNumericParam(params, 'maxrows', 0);
|
|
108
|
+
// Validate delimiter
|
|
109
|
+
if (delimiter.length !== 1) {
|
|
110
|
+
return {
|
|
111
|
+
Success: false,
|
|
112
|
+
Message: "Delimiter must be a single character",
|
|
113
|
+
ResultCode: "INVALID_DELIMITER"
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
// Convert Buffer to string if necessary
|
|
117
|
+
const csvString = typeof fileContent.content === 'string'
|
|
118
|
+
? fileContent.content
|
|
119
|
+
: fileContent.content.toString();
|
|
120
|
+
// Parse CSV using PapaParse
|
|
121
|
+
const parseResult = Papa.parse(csvString, {
|
|
122
|
+
header: hasHeaders,
|
|
123
|
+
delimiter: delimiter,
|
|
124
|
+
quoteChar: quoteChar,
|
|
125
|
+
escapeChar: escapeChar,
|
|
126
|
+
skipEmptyLines: skipEmptyRows ? 'greedy' : false,
|
|
127
|
+
dynamicTyping: dynamicTyping,
|
|
128
|
+
preview: maxRows > 0 ? maxRows : undefined,
|
|
129
|
+
transformValue: (value) => {
|
|
130
|
+
return trimValues ? value.trim() : value;
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
// Check for parsing errors
|
|
134
|
+
if (parseResult.errors && parseResult.errors.length > 0) {
|
|
135
|
+
const errorMessages = parseResult.errors.map(e => `Row ${e.row !== undefined ? e.row + 1 : 'unknown'}: ${e.message}`).join('; ');
|
|
136
|
+
return {
|
|
137
|
+
Success: false,
|
|
138
|
+
Message: `CSV parsing errors: ${errorMessages}`,
|
|
139
|
+
ResultCode: "PARSE_ERROR"
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
// Prepare result
|
|
143
|
+
const result = {
|
|
144
|
+
data: parseResult.data,
|
|
145
|
+
rowCount: parseResult.data.length,
|
|
146
|
+
columnCount: hasHeaders && parseResult.data.length > 0
|
|
147
|
+
? Object.keys(parseResult.data[0]).length
|
|
148
|
+
: (parseResult.data.length > 0 ? parseResult.data[0].length : 0),
|
|
149
|
+
hasHeaders: hasHeaders,
|
|
150
|
+
source: fileContent.source,
|
|
151
|
+
fileName: fileContent.fileName,
|
|
152
|
+
delimiter: delimiter
|
|
153
|
+
};
|
|
154
|
+
// Add column info if headers are present
|
|
155
|
+
if (hasHeaders && parseResult.data.length > 0) {
|
|
156
|
+
result['columns'] = Object.keys(parseResult.data[0]);
|
|
157
|
+
}
|
|
158
|
+
return {
|
|
159
|
+
Success: true,
|
|
160
|
+
ResultCode: "SUCCESS",
|
|
161
|
+
Message: JSON.stringify(result, null, 2)
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
catch (error) {
|
|
165
|
+
return {
|
|
166
|
+
Success: false,
|
|
167
|
+
Message: `Failed to parse CSV: ${error instanceof Error ? error.message : String(error)}`,
|
|
168
|
+
ResultCode: "FAILED"
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
};
|
|
173
|
+
exports.CSVParserAction = CSVParserAction;
|
|
174
|
+
exports.CSVParserAction = CSVParserAction = __decorate([
|
|
175
|
+
(0, global_1.RegisterClass)(base_file_handler_1.BaseFileHandlerAction, "CSV Parser")
|
|
176
|
+
], CSVParserAction);
|
|
177
|
+
/**
|
|
178
|
+
* Loader function to ensure the CSVParserAction class is included in the bundle
|
|
179
|
+
*/
|
|
180
|
+
function LoadCSVParserAction() {
|
|
181
|
+
// Stub function to prevent tree shaking
|
|
182
|
+
}
|
|
183
|
+
exports.LoadCSVParserAction = LoadCSVParserAction;
|
|
184
|
+
//# sourceMappingURL=csv-parser.action.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"csv-parser.action.js","sourceRoot":"","sources":["../../../src/custom/data/csv-parser.action.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { ActionResultSimple, RunActionParams } from "@memberjunction/actions-base";
|
|
2
|
+
import { BaseAction } from "@memberjunction/actions";
|
|
3
|
+
/**
|
|
4
|
+
* Action that transforms data using Nunjucks templates
|
|
5
|
+
* Provides powerful templating capabilities for data transformation
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* // Simple object mapping
|
|
10
|
+
* await runAction({
|
|
11
|
+
* ActionName: 'Data Mapper',
|
|
12
|
+
* Params: [{
|
|
13
|
+
* Name: 'SourceData',
|
|
14
|
+
* Value: { user: { firstName: 'John', lastName: 'Doe', age: 30 } }
|
|
15
|
+
* }, {
|
|
16
|
+
* Name: 'MappingTemplate',
|
|
17
|
+
* Value: {
|
|
18
|
+
* fullName: '{{ user.firstName }} {{ user.lastName }}',
|
|
19
|
+
* displayName: '{{ user.firstName | upper }}',
|
|
20
|
+
* ageGroup: '{% if user.age < 18 %}minor{% elif user.age < 65 %}adult{% else %}senior{% endif %}'
|
|
21
|
+
* }
|
|
22
|
+
* }]
|
|
23
|
+
* });
|
|
24
|
+
*
|
|
25
|
+
* // Array transformation
|
|
26
|
+
* await runAction({
|
|
27
|
+
* ActionName: 'Data Mapper',
|
|
28
|
+
* Params: [{
|
|
29
|
+
* Name: 'SourceData',
|
|
30
|
+
* Value: [{ price: 10, qty: 2 }, { price: 20, qty: 1 }]
|
|
31
|
+
* }, {
|
|
32
|
+
* Name: 'MappingTemplate',
|
|
33
|
+
* Value: {
|
|
34
|
+
* total: '{{ price * qty }}',
|
|
35
|
+
* formattedPrice: '${{ price | number(2) }}'
|
|
36
|
+
* }
|
|
37
|
+
* }, {
|
|
38
|
+
* Name: 'IterateArrays',
|
|
39
|
+
* Value: true
|
|
40
|
+
* }]
|
|
41
|
+
* });
|
|
42
|
+
*
|
|
43
|
+
* // String template
|
|
44
|
+
* await runAction({
|
|
45
|
+
* ActionName: 'Data Mapper',
|
|
46
|
+
* Params: [{
|
|
47
|
+
* Name: 'SourceData',
|
|
48
|
+
* Value: { name: 'John', items: ['apple', 'banana'] }
|
|
49
|
+
* }, {
|
|
50
|
+
* Name: 'MappingTemplate',
|
|
51
|
+
* Value: 'Hello {{ name }}, you have {{ items | length }} items: {{ items | join(", ") }}'
|
|
52
|
+
* }, {
|
|
53
|
+
* Name: 'TemplateType',
|
|
54
|
+
* Value: 'string'
|
|
55
|
+
* }]
|
|
56
|
+
* });
|
|
57
|
+
* ```
|
|
58
|
+
*/
|
|
59
|
+
export declare class DataMapperAction extends BaseAction {
|
|
60
|
+
private nunjucksEnv;
|
|
61
|
+
constructor();
|
|
62
|
+
/**
|
|
63
|
+
* Setup custom Nunjucks filters
|
|
64
|
+
*/
|
|
65
|
+
private setupCustomFilters;
|
|
66
|
+
/**
|
|
67
|
+
* Transform data using Nunjucks templates
|
|
68
|
+
*
|
|
69
|
+
* @param params - The action parameters containing:
|
|
70
|
+
* - SourceData: Input object or array to transform
|
|
71
|
+
* - MappingTemplate: Nunjucks template string or object with templates
|
|
72
|
+
* - TemplateType: "string" | "object" (default: "object")
|
|
73
|
+
* - IterateArrays: Boolean - if true, map each array item (default: false)
|
|
74
|
+
* - CustomFilters: Object with custom Nunjucks filters (optional)
|
|
75
|
+
* - StrictVariables: Boolean - throw error on undefined variables (default: false)
|
|
76
|
+
*
|
|
77
|
+
* @returns Transformed data based on templates
|
|
78
|
+
*/
|
|
79
|
+
protected InternalRunAction(params: RunActionParams): Promise<ActionResultSimple>;
|
|
80
|
+
/**
|
|
81
|
+
* Transform a single data item using templates
|
|
82
|
+
*/
|
|
83
|
+
private transformData;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Loader function to ensure the DataMapperAction class is included in the bundle
|
|
87
|
+
*/
|
|
88
|
+
export declare function LoadDataMapperAction(): void;
|
|
89
|
+
//# sourceMappingURL=data-mapper.action.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-mapper.action.d.ts","sourceRoot":"","sources":["../../../src/custom/data/data-mapper.action.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AACnF,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAKrD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuDG;AACH,qBACa,gBAAiB,SAAQ,UAAU;IAC5C,OAAO,CAAC,WAAW,CAAuB;;IAS1C;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA6D1B;;;;;;;;;;;;OAYG;cACa,iBAAiB,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAoFvF;;OAEG;IACH,OAAO,CAAC,aAAa;CAoDxB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,SAEnC"}
|
|
@@ -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
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
32
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
33
|
+
};
|
|
34
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
35
|
+
exports.LoadDataMapperAction = exports.DataMapperAction = void 0;
|
|
36
|
+
const actions_1 = require("@memberjunction/actions");
|
|
37
|
+
const global_1 = require("@memberjunction/global");
|
|
38
|
+
const nunjucks = __importStar(require("nunjucks"));
|
|
39
|
+
const json_param_helper_1 = require("../utilities/json-param-helper");
|
|
40
|
+
/**
|
|
41
|
+
* Action that transforms data using Nunjucks templates
|
|
42
|
+
* Provides powerful templating capabilities for data transformation
|
|
43
|
+
*
|
|
44
|
+
* @example
|
|
45
|
+
* ```typescript
|
|
46
|
+
* // Simple object mapping
|
|
47
|
+
* await runAction({
|
|
48
|
+
* ActionName: 'Data Mapper',
|
|
49
|
+
* Params: [{
|
|
50
|
+
* Name: 'SourceData',
|
|
51
|
+
* Value: { user: { firstName: 'John', lastName: 'Doe', age: 30 } }
|
|
52
|
+
* }, {
|
|
53
|
+
* Name: 'MappingTemplate',
|
|
54
|
+
* Value: {
|
|
55
|
+
* fullName: '{{ user.firstName }} {{ user.lastName }}',
|
|
56
|
+
* displayName: '{{ user.firstName | upper }}',
|
|
57
|
+
* ageGroup: '{% if user.age < 18 %}minor{% elif user.age < 65 %}adult{% else %}senior{% endif %}'
|
|
58
|
+
* }
|
|
59
|
+
* }]
|
|
60
|
+
* });
|
|
61
|
+
*
|
|
62
|
+
* // Array transformation
|
|
63
|
+
* await runAction({
|
|
64
|
+
* ActionName: 'Data Mapper',
|
|
65
|
+
* Params: [{
|
|
66
|
+
* Name: 'SourceData',
|
|
67
|
+
* Value: [{ price: 10, qty: 2 }, { price: 20, qty: 1 }]
|
|
68
|
+
* }, {
|
|
69
|
+
* Name: 'MappingTemplate',
|
|
70
|
+
* Value: {
|
|
71
|
+
* total: '{{ price * qty }}',
|
|
72
|
+
* formattedPrice: '${{ price | number(2) }}'
|
|
73
|
+
* }
|
|
74
|
+
* }, {
|
|
75
|
+
* Name: 'IterateArrays',
|
|
76
|
+
* Value: true
|
|
77
|
+
* }]
|
|
78
|
+
* });
|
|
79
|
+
*
|
|
80
|
+
* // String template
|
|
81
|
+
* await runAction({
|
|
82
|
+
* ActionName: 'Data Mapper',
|
|
83
|
+
* Params: [{
|
|
84
|
+
* Name: 'SourceData',
|
|
85
|
+
* Value: { name: 'John', items: ['apple', 'banana'] }
|
|
86
|
+
* }, {
|
|
87
|
+
* Name: 'MappingTemplate',
|
|
88
|
+
* Value: 'Hello {{ name }}, you have {{ items | length }} items: {{ items | join(", ") }}'
|
|
89
|
+
* }, {
|
|
90
|
+
* Name: 'TemplateType',
|
|
91
|
+
* Value: 'string'
|
|
92
|
+
* }]
|
|
93
|
+
* });
|
|
94
|
+
* ```
|
|
95
|
+
*/
|
|
96
|
+
let DataMapperAction = class DataMapperAction extends actions_1.BaseAction {
|
|
97
|
+
nunjucksEnv;
|
|
98
|
+
constructor() {
|
|
99
|
+
super();
|
|
100
|
+
// Initialize Nunjucks with custom filters
|
|
101
|
+
this.nunjucksEnv = new nunjucks.Environment();
|
|
102
|
+
this.setupCustomFilters();
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Setup custom Nunjucks filters
|
|
106
|
+
*/
|
|
107
|
+
setupCustomFilters() {
|
|
108
|
+
// Number formatting filter
|
|
109
|
+
this.nunjucksEnv.addFilter('number', (value, decimals = 2) => {
|
|
110
|
+
const num = Number(value);
|
|
111
|
+
return isNaN(num) ? value : num.toFixed(decimals);
|
|
112
|
+
});
|
|
113
|
+
// Currency formatting filter
|
|
114
|
+
this.nunjucksEnv.addFilter('currency', (value, symbol = '$', decimals = 2) => {
|
|
115
|
+
const num = Number(value);
|
|
116
|
+
return isNaN(num) ? value : `${symbol}${num.toFixed(decimals)}`;
|
|
117
|
+
});
|
|
118
|
+
// Date formatting filter (basic)
|
|
119
|
+
this.nunjucksEnv.addFilter('date', (value, format = 'YYYY-MM-DD') => {
|
|
120
|
+
const date = new Date(value);
|
|
121
|
+
if (isNaN(date.getTime()))
|
|
122
|
+
return value;
|
|
123
|
+
const year = date.getFullYear();
|
|
124
|
+
const month = String(date.getMonth() + 1).padStart(2, '0');
|
|
125
|
+
const day = String(date.getDate()).padStart(2, '0');
|
|
126
|
+
const hours = String(date.getHours()).padStart(2, '0');
|
|
127
|
+
const minutes = String(date.getMinutes()).padStart(2, '0');
|
|
128
|
+
const seconds = String(date.getSeconds()).padStart(2, '0');
|
|
129
|
+
return format
|
|
130
|
+
.replace('YYYY', String(year))
|
|
131
|
+
.replace('MM', month)
|
|
132
|
+
.replace('DD', day)
|
|
133
|
+
.replace('HH', hours)
|
|
134
|
+
.replace('mm', minutes)
|
|
135
|
+
.replace('ss', seconds);
|
|
136
|
+
});
|
|
137
|
+
// JSON stringify filter
|
|
138
|
+
this.nunjucksEnv.addFilter('json', (value, indent = 0) => {
|
|
139
|
+
return JSON.stringify(value, null, indent);
|
|
140
|
+
});
|
|
141
|
+
// Default value filter
|
|
142
|
+
this.nunjucksEnv.addFilter('default', (value, defaultValue) => {
|
|
143
|
+
return value === null || value === undefined || value === '' ? defaultValue : value;
|
|
144
|
+
});
|
|
145
|
+
// Truncate filter
|
|
146
|
+
this.nunjucksEnv.addFilter('truncate', (value, length = 50, suffix = '...') => {
|
|
147
|
+
if (!value || value.length <= length)
|
|
148
|
+
return value;
|
|
149
|
+
return value.substring(0, length - suffix.length) + suffix;
|
|
150
|
+
});
|
|
151
|
+
// Slugify filter
|
|
152
|
+
this.nunjucksEnv.addFilter('slugify', (value) => {
|
|
153
|
+
if (!value)
|
|
154
|
+
return '';
|
|
155
|
+
return value
|
|
156
|
+
.toLowerCase()
|
|
157
|
+
.replace(/[^\w\s-]/g, '')
|
|
158
|
+
.replace(/[\s_-]+/g, '-')
|
|
159
|
+
.replace(/^-+|-+$/g, '');
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Transform data using Nunjucks templates
|
|
164
|
+
*
|
|
165
|
+
* @param params - The action parameters containing:
|
|
166
|
+
* - SourceData: Input object or array to transform
|
|
167
|
+
* - MappingTemplate: Nunjucks template string or object with templates
|
|
168
|
+
* - TemplateType: "string" | "object" (default: "object")
|
|
169
|
+
* - IterateArrays: Boolean - if true, map each array item (default: false)
|
|
170
|
+
* - CustomFilters: Object with custom Nunjucks filters (optional)
|
|
171
|
+
* - StrictVariables: Boolean - throw error on undefined variables (default: false)
|
|
172
|
+
*
|
|
173
|
+
* @returns Transformed data based on templates
|
|
174
|
+
*/
|
|
175
|
+
async InternalRunAction(params) {
|
|
176
|
+
try {
|
|
177
|
+
// Extract parameters
|
|
178
|
+
let sourceData;
|
|
179
|
+
let mappingTemplate;
|
|
180
|
+
try {
|
|
181
|
+
sourceData = json_param_helper_1.JSONParamHelper.getRequiredJSONParam(params, 'SourceData');
|
|
182
|
+
}
|
|
183
|
+
catch (error) {
|
|
184
|
+
return {
|
|
185
|
+
Success: false,
|
|
186
|
+
Message: error instanceof Error ? error.message : String(error),
|
|
187
|
+
ResultCode: "MISSING_PARAMETERS"
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
try {
|
|
191
|
+
mappingTemplate = json_param_helper_1.JSONParamHelper.getRequiredJSONParam(params, 'MappingTemplate');
|
|
192
|
+
}
|
|
193
|
+
catch (error) {
|
|
194
|
+
return {
|
|
195
|
+
Success: false,
|
|
196
|
+
Message: error instanceof Error ? error.message : String(error),
|
|
197
|
+
ResultCode: "MISSING_PARAMETERS"
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
const templateTypeParam = params.Params.find(p => p.Name.trim().toLowerCase() === 'templatetype');
|
|
201
|
+
const iterateArraysParam = params.Params.find(p => p.Name.trim().toLowerCase() === 'iteratearrays');
|
|
202
|
+
const customFiltersParam = params.Params.find(p => p.Name.trim().toLowerCase() === 'customfilters');
|
|
203
|
+
const strictVariablesParam = params.Params.find(p => p.Name.trim().toLowerCase() === 'strictvariables');
|
|
204
|
+
// Get other parameters
|
|
205
|
+
const templateType = (templateTypeParam?.Value?.toString() || 'object').toLowerCase();
|
|
206
|
+
const iterateArrays = iterateArraysParam?.Value?.toString()?.toLowerCase() === 'true' ?? false;
|
|
207
|
+
const strictVariables = strictVariablesParam?.Value?.toString()?.toLowerCase() === 'true' ?? false;
|
|
208
|
+
// Configure Nunjucks environment
|
|
209
|
+
this.nunjucksEnv.opts.throwOnUndefined = strictVariables;
|
|
210
|
+
// Add custom filters if provided
|
|
211
|
+
const customFilters = json_param_helper_1.JSONParamHelper.getJSONParam(params, 'CustomFilters');
|
|
212
|
+
if (customFilters) {
|
|
213
|
+
for (const [name, filterFunc] of Object.entries(customFilters)) {
|
|
214
|
+
if (typeof filterFunc === 'function') {
|
|
215
|
+
this.nunjucksEnv.addFilter(name, filterFunc);
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
// Perform transformation
|
|
220
|
+
let result;
|
|
221
|
+
if (iterateArrays && Array.isArray(sourceData)) {
|
|
222
|
+
// Transform each array item
|
|
223
|
+
result = sourceData.map(item => this.transformData(item, mappingTemplate, templateType));
|
|
224
|
+
}
|
|
225
|
+
else {
|
|
226
|
+
// Transform single item
|
|
227
|
+
result = this.transformData(sourceData, mappingTemplate, templateType);
|
|
228
|
+
}
|
|
229
|
+
// Prepare output
|
|
230
|
+
const output = {
|
|
231
|
+
result: result,
|
|
232
|
+
sourceType: Array.isArray(sourceData) ? 'array' : typeof sourceData,
|
|
233
|
+
resultType: Array.isArray(result) ? 'array' : typeof result,
|
|
234
|
+
templateType: templateType,
|
|
235
|
+
itemsProcessed: Array.isArray(sourceData) && iterateArrays ? sourceData.length : 1
|
|
236
|
+
};
|
|
237
|
+
return {
|
|
238
|
+
Success: true,
|
|
239
|
+
ResultCode: "SUCCESS",
|
|
240
|
+
Message: JSON.stringify(output, null, 2)
|
|
241
|
+
};
|
|
242
|
+
}
|
|
243
|
+
catch (error) {
|
|
244
|
+
return {
|
|
245
|
+
Success: false,
|
|
246
|
+
Message: `Failed to map data: ${error instanceof Error ? error.message : String(error)}`,
|
|
247
|
+
ResultCode: "FAILED"
|
|
248
|
+
};
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* Transform a single data item using templates
|
|
253
|
+
*/
|
|
254
|
+
transformData(data, template, templateType) {
|
|
255
|
+
try {
|
|
256
|
+
if (templateType === 'string') {
|
|
257
|
+
// Render string template
|
|
258
|
+
return this.nunjucksEnv.renderString(template.toString(), data);
|
|
259
|
+
}
|
|
260
|
+
else if (templateType === 'object' && typeof template === 'object' && !Array.isArray(template)) {
|
|
261
|
+
// Transform object template
|
|
262
|
+
const result = {};
|
|
263
|
+
for (const [key, templateValue] of Object.entries(template)) {
|
|
264
|
+
if (typeof templateValue === 'string') {
|
|
265
|
+
// Render template string
|
|
266
|
+
result[key] = this.nunjucksEnv.renderString(templateValue, data);
|
|
267
|
+
// Try to parse as JSON if it looks like JSON
|
|
268
|
+
if (typeof result[key] === 'string' &&
|
|
269
|
+
(result[key].startsWith('{') || result[key].startsWith('['))) {
|
|
270
|
+
try {
|
|
271
|
+
result[key] = JSON.parse(result[key]);
|
|
272
|
+
}
|
|
273
|
+
catch (e) {
|
|
274
|
+
// Keep as string if not valid JSON
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
else if (typeof templateValue === 'object') {
|
|
279
|
+
// Recursively transform nested objects
|
|
280
|
+
result[key] = this.transformData(data, templateValue, 'object');
|
|
281
|
+
}
|
|
282
|
+
else {
|
|
283
|
+
// Copy non-string values as-is
|
|
284
|
+
result[key] = templateValue;
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
return result;
|
|
288
|
+
}
|
|
289
|
+
else if (Array.isArray(template)) {
|
|
290
|
+
// Transform array template
|
|
291
|
+
return template.map(item => {
|
|
292
|
+
if (typeof item === 'string') {
|
|
293
|
+
return this.nunjucksEnv.renderString(item, data);
|
|
294
|
+
}
|
|
295
|
+
else if (typeof item === 'object') {
|
|
296
|
+
return this.transformData(data, item, 'object');
|
|
297
|
+
}
|
|
298
|
+
else {
|
|
299
|
+
return item;
|
|
300
|
+
}
|
|
301
|
+
});
|
|
302
|
+
}
|
|
303
|
+
else {
|
|
304
|
+
// Return template as-is if not a recognized type
|
|
305
|
+
return template;
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
catch (error) {
|
|
309
|
+
throw new Error(`Template rendering error: ${error instanceof Error ? error.message : String(error)}`);
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
};
|
|
313
|
+
exports.DataMapperAction = DataMapperAction;
|
|
314
|
+
exports.DataMapperAction = DataMapperAction = __decorate([
|
|
315
|
+
(0, global_1.RegisterClass)(actions_1.BaseAction, "Data Mapper"),
|
|
316
|
+
__metadata("design:paramtypes", [])
|
|
317
|
+
], DataMapperAction);
|
|
318
|
+
/**
|
|
319
|
+
* Loader function to ensure the DataMapperAction class is included in the bundle
|
|
320
|
+
*/
|
|
321
|
+
function LoadDataMapperAction() {
|
|
322
|
+
// Stub function to prevent tree shaking
|
|
323
|
+
}
|
|
324
|
+
exports.LoadDataMapperAction = LoadDataMapperAction;
|
|
325
|
+
//# sourceMappingURL=data-mapper.action.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-mapper.action.js","sourceRoot":"","sources":["../../../src/custom/data/data-mapper.action.ts"],"names":[],"mappings":"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"}
|