@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.
Files changed (118) hide show
  1. package/dist/custom/ai/execute-ai-prompt.action.d.ts +94 -0
  2. package/dist/custom/ai/execute-ai-prompt.action.d.ts.map +1 -0
  3. package/dist/custom/ai/execute-ai-prompt.action.js +274 -0
  4. package/dist/custom/ai/execute-ai-prompt.action.js.map +1 -0
  5. package/dist/custom/communication/slack-webhook.action.d.ts +101 -0
  6. package/dist/custom/communication/slack-webhook.action.d.ts.map +1 -0
  7. package/dist/custom/communication/slack-webhook.action.js +269 -0
  8. package/dist/custom/communication/slack-webhook.action.js.map +1 -0
  9. package/dist/custom/communication/teams-webhook.action.d.ts +96 -0
  10. package/dist/custom/communication/teams-webhook.action.d.ts.map +1 -0
  11. package/dist/custom/communication/teams-webhook.action.js +275 -0
  12. package/dist/custom/communication/teams-webhook.action.js.map +1 -0
  13. package/dist/custom/data/aggregate-data.action.d.ts +91 -0
  14. package/dist/custom/data/aggregate-data.action.d.ts.map +1 -0
  15. package/dist/custom/data/aggregate-data.action.js +333 -0
  16. package/dist/custom/data/aggregate-data.action.js.map +1 -0
  17. package/dist/custom/data/csv-parser.action.d.ts +68 -0
  18. package/dist/custom/data/csv-parser.action.d.ts.map +1 -0
  19. package/dist/custom/data/csv-parser.action.js +184 -0
  20. package/dist/custom/data/csv-parser.action.js.map +1 -0
  21. package/dist/custom/data/data-mapper.action.d.ts +89 -0
  22. package/dist/custom/data/data-mapper.action.d.ts.map +1 -0
  23. package/dist/custom/data/data-mapper.action.js +325 -0
  24. package/dist/custom/data/data-mapper.action.js.map +1 -0
  25. package/dist/custom/data/json-transform.action.d.ts +57 -0
  26. package/dist/custom/data/json-transform.action.d.ts.map +1 -0
  27. package/dist/custom/data/json-transform.action.js +205 -0
  28. package/dist/custom/data/json-transform.action.js.map +1 -0
  29. package/dist/custom/data/xml-parser.action.d.ts +85 -0
  30. package/dist/custom/data/xml-parser.action.d.ts.map +1 -0
  31. package/dist/custom/data/xml-parser.action.js +326 -0
  32. package/dist/custom/data/xml-parser.action.js.map +1 -0
  33. package/dist/custom/files/excel-reader.action.d.ts +86 -0
  34. package/dist/custom/files/excel-reader.action.d.ts.map +1 -0
  35. package/dist/custom/files/excel-reader.action.js +348 -0
  36. package/dist/custom/files/excel-reader.action.js.map +1 -0
  37. package/dist/custom/files/excel-writer.action.d.ts +79 -0
  38. package/dist/custom/files/excel-writer.action.d.ts.map +1 -0
  39. package/dist/custom/files/excel-writer.action.js +325 -0
  40. package/dist/custom/files/excel-writer.action.js.map +1 -0
  41. package/dist/custom/files/file-compress.action.d.ts +90 -0
  42. package/dist/custom/files/file-compress.action.d.ts.map +1 -0
  43. package/dist/custom/files/file-compress.action.js +346 -0
  44. package/dist/custom/files/file-compress.action.js.map +1 -0
  45. package/dist/custom/files/pdf-extractor.action.d.ts +86 -0
  46. package/dist/custom/files/pdf-extractor.action.d.ts.map +1 -0
  47. package/dist/custom/files/pdf-extractor.action.js +247 -0
  48. package/dist/custom/files/pdf-extractor.action.js.map +1 -0
  49. package/dist/custom/files/pdf-generator.action.d.ts +70 -0
  50. package/dist/custom/files/pdf-generator.action.d.ts.map +1 -0
  51. package/dist/custom/files/pdf-generator.action.js +286 -0
  52. package/dist/custom/files/pdf-generator.action.js.map +1 -0
  53. package/dist/custom/integration/api-rate-limiter.action.d.ts +88 -0
  54. package/dist/custom/integration/api-rate-limiter.action.d.ts.map +1 -0
  55. package/dist/custom/integration/api-rate-limiter.action.js +363 -0
  56. package/dist/custom/integration/api-rate-limiter.action.js.map +1 -0
  57. package/dist/custom/integration/graphql-query.action.d.ts +92 -0
  58. package/dist/custom/integration/graphql-query.action.d.ts.map +1 -0
  59. package/dist/custom/integration/graphql-query.action.js +251 -0
  60. package/dist/custom/integration/graphql-query.action.js.map +1 -0
  61. package/dist/custom/integration/http-request.action.d.ts +96 -0
  62. package/dist/custom/integration/http-request.action.d.ts.map +1 -0
  63. package/dist/custom/integration/http-request.action.js +316 -0
  64. package/dist/custom/integration/http-request.action.js.map +1 -0
  65. package/dist/custom/integration/oauth-flow.action.d.ts +130 -0
  66. package/dist/custom/integration/oauth-flow.action.d.ts.map +1 -0
  67. package/dist/custom/integration/oauth-flow.action.js +624 -0
  68. package/dist/custom/integration/oauth-flow.action.js.map +1 -0
  69. package/dist/custom/security/password-strength.action.d.ts +129 -0
  70. package/dist/custom/security/password-strength.action.d.ts.map +1 -0
  71. package/dist/custom/security/password-strength.action.js +463 -0
  72. package/dist/custom/security/password-strength.action.js.map +1 -0
  73. package/dist/custom/utilities/base-file-handler.d.ts +54 -0
  74. package/dist/custom/utilities/base-file-handler.d.ts.map +1 -0
  75. package/dist/custom/utilities/base-file-handler.js +167 -0
  76. package/dist/custom/utilities/base-file-handler.js.map +1 -0
  77. package/dist/custom/utilities/index.d.ts +3 -0
  78. package/dist/custom/utilities/index.d.ts.map +1 -0
  79. package/dist/custom/utilities/index.js +19 -0
  80. package/dist/custom/utilities/index.js.map +1 -0
  81. package/dist/custom/utilities/json-param-helper.d.ts +33 -0
  82. package/dist/custom/utilities/json-param-helper.d.ts.map +1 -0
  83. package/dist/custom/utilities/json-param-helper.js +66 -0
  84. package/dist/custom/utilities/json-param-helper.js.map +1 -0
  85. package/dist/custom/web/duckduckgo-rate-limiter.d.ts +85 -0
  86. package/dist/custom/web/duckduckgo-rate-limiter.d.ts.map +1 -0
  87. package/dist/custom/web/duckduckgo-rate-limiter.js +257 -0
  88. package/dist/custom/web/duckduckgo-rate-limiter.js.map +1 -0
  89. package/dist/custom/web/web-search.action.d.ts +1 -0
  90. package/dist/custom/web/web-search.action.d.ts.map +1 -1
  91. package/dist/custom/web/web-search.action.js +48 -20
  92. package/dist/custom/web/web-search.action.js.map +1 -1
  93. package/dist/custom/workflow/conditional.action.d.ts +94 -0
  94. package/dist/custom/workflow/conditional.action.d.ts.map +1 -0
  95. package/dist/custom/workflow/conditional.action.js +274 -0
  96. package/dist/custom/workflow/conditional.action.js.map +1 -0
  97. package/dist/custom/workflow/delay.action.d.ts +76 -0
  98. package/dist/custom/workflow/delay.action.d.ts.map +1 -0
  99. package/dist/custom/workflow/delay.action.js +187 -0
  100. package/dist/custom/workflow/delay.action.js.map +1 -0
  101. package/dist/custom/workflow/loop.action.d.ts +112 -0
  102. package/dist/custom/workflow/loop.action.d.ts.map +1 -0
  103. package/dist/custom/workflow/loop.action.js +380 -0
  104. package/dist/custom/workflow/loop.action.js.map +1 -0
  105. package/dist/custom/workflow/parallel-execute.action.d.ts +105 -0
  106. package/dist/custom/workflow/parallel-execute.action.d.ts.map +1 -0
  107. package/dist/custom/workflow/parallel-execute.action.js +457 -0
  108. package/dist/custom/workflow/parallel-execute.action.js.map +1 -0
  109. package/dist/custom/workflow/retry.action.d.ts +90 -0
  110. package/dist/custom/workflow/retry.action.d.ts.map +1 -0
  111. package/dist/custom/workflow/retry.action.js +378 -0
  112. package/dist/custom/workflow/retry.action.js.map +1 -0
  113. package/dist/index.d.ts +23 -0
  114. package/dist/index.d.ts.map +1 -1
  115. package/dist/index.js +75 -0
  116. package/dist/index.js.map +1 -1
  117. package/package.json +25 -10
  118. 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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,mDAAuD;AACvD,sEAAuE;AACvE,gDAAkC;AAElC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AAEI,IAAM,eAAe,GAArB,MAAM,eAAgB,SAAQ,yCAAqB;IAEtD;;;;;;;;;;;;;;;;;OAiBG;IACO,KAAK,CAAC,iBAAiB,CAAC,MAAuB;QACrD,IAAI,CAAC;YACD,wCAAwC;YACxC,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YAEjE,sBAAsB;YACtB,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,CAAC,CAAC;YACpE,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,WAAW,CAAC,IAAI,GAAG,CAAC;YACjE,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,WAAW,CAAC,IAAI,GAAG,CAAC;YACjE,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,YAAY,CAAC,IAAI,GAAG,CAAC;YACnE,MAAM,aAAa,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,eAAe,EAAE,IAAI,CAAC,CAAC;YAC1E,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,CAAC,CAAC;YACpE,MAAM,aAAa,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,eAAe,EAAE,IAAI,CAAC,CAAC;YAC1E,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;YAE3D,qBAAqB;YACrB,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACzB,OAAO;oBACH,OAAO,EAAE,KAAK;oBACd,OAAO,EAAE,sCAAsC;oBAC/C,UAAU,EAAE,mBAAmB;iBAClC,CAAC;YACN,CAAC;YAED,wCAAwC;YACxC,MAAM,SAAS,GAAG,OAAO,WAAW,CAAC,OAAO,KAAK,QAAQ;gBACrD,CAAC,CAAC,WAAW,CAAC,OAAO;gBACrB,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;YAErC,4BAA4B;YAC5B,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE;gBACtC,MAAM,EAAE,UAAU;gBAClB,SAAS,EAAE,SAAS;gBACpB,SAAS,EAAE,SAAS;gBACpB,UAAU,EAAE,UAAU;gBACtB,cAAc,EAAE,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK;gBAChD,aAAa,EAAE,aAAa;gBAC5B,OAAO,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;gBAC1C,cAAc,EAAE,CAAC,KAAa,EAAE,EAAE;oBAC9B,OAAO,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;gBAC7C,CAAC;aACJ,CAAC,CAAC;YAEH,2BAA2B;YAC3B,IAAI,WAAW,CAAC,MAAM,IAAI,WAAW,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACtD,MAAM,aAAa,GAAG,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAC7C,OAAO,CAAC,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,KAAK,CAAC,CAAC,OAAO,EAAE,CACrE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAEb,OAAO;oBACH,OAAO,EAAE,KAAK;oBACd,OAAO,EAAE,uBAAuB,aAAa,EAAE;oBAC/C,UAAU,EAAE,aAAa;iBAC5B,CAAC;YACN,CAAC;YAED,iBAAiB;YACjB,MAAM,MAAM,GAAG;gBACX,IAAI,EAAE,WAAW,CAAC,IAAI;gBACtB,QAAQ,EAAE,WAAW,CAAC,IAAI,CAAC,MAAM;gBACjC,WAAW,EAAE,UAAU,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC;oBAClD,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAW,CAAC,CAAC,MAAM;oBACnD,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAE,WAAW,CAAC,IAAI,CAAC,CAAC,CAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC/E,UAAU,EAAE,UAAU;gBACtB,MAAM,EAAE,WAAW,CAAC,MAAM;gBAC1B,QAAQ,EAAE,WAAW,CAAC,QAAQ;gBAC9B,SAAS,EAAE,SAAS;aACvB,CAAC;YAEF,yCAAyC;YACzC,IAAI,UAAU,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC5C,MAAM,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAW,CAAC,CAAC;YACnE,CAAC;YAED,OAAO;gBACH,OAAO,EAAE,IAAI;gBACb,UAAU,EAAE,SAAS;gBACrB,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;aAC3C,CAAC;QAEN,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,OAAO;gBACH,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,wBAAwB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;gBACzF,UAAU,EAAE,QAAQ;aACvB,CAAC;QACN,CAAC;IACL,CAAC;CACJ,CAAA;AA5GY,0CAAe;0BAAf,eAAe;IAD3B,IAAA,sBAAa,EAAC,yCAAqB,EAAE,YAAY,CAAC;GACtC,eAAe,CA4G3B;AAED;;GAEG;AACH,SAAgB,mBAAmB;IAC/B,wCAAwC;AAC5C,CAAC;AAFD,kDAEC"}
@@ -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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"}