@memberjunction/core-actions 2.106.0 → 2.108.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 (95) hide show
  1. package/dist/config.d.ts +112 -0
  2. package/dist/config.d.ts.map +1 -1
  3. package/dist/config.js +34 -2
  4. package/dist/config.js.map +1 -1
  5. package/dist/custom/ai/find-best-agent.action.d.ts +53 -0
  6. package/dist/custom/ai/find-best-agent.action.d.ts.map +1 -0
  7. package/dist/custom/ai/find-best-agent.action.js +194 -0
  8. package/dist/custom/ai/find-best-agent.action.js.map +1 -0
  9. package/dist/custom/ai/summarize-content.action.d.ts +72 -0
  10. package/dist/custom/ai/summarize-content.action.d.ts.map +1 -0
  11. package/dist/custom/ai/summarize-content.action.js +296 -0
  12. package/dist/custom/ai/summarize-content.action.js.map +1 -0
  13. package/dist/custom/code-execution/execute-code.action.d.ts +61 -0
  14. package/dist/custom/code-execution/execute-code.action.d.ts.map +1 -0
  15. package/dist/custom/code-execution/execute-code.action.js +172 -0
  16. package/dist/custom/code-execution/execute-code.action.js.map +1 -0
  17. package/dist/custom/data/csv-parser.action.js +1 -1
  18. package/dist/custom/data/csv-parser.action.js.map +1 -1
  19. package/dist/custom/data/execute-research-query.action.d.ts +114 -0
  20. package/dist/custom/data/execute-research-query.action.d.ts.map +1 -0
  21. package/dist/custom/data/execute-research-query.action.js +520 -0
  22. package/dist/custom/data/execute-research-query.action.js.map +1 -0
  23. package/dist/custom/data/explore-database-schema.action.d.ts +95 -0
  24. package/dist/custom/data/explore-database-schema.action.d.ts.map +1 -0
  25. package/dist/custom/data/explore-database-schema.action.js +499 -0
  26. package/dist/custom/data/explore-database-schema.action.js.map +1 -0
  27. package/dist/custom/data/get-entity-details.action.d.ts +63 -0
  28. package/dist/custom/data/get-entity-details.action.d.ts.map +1 -0
  29. package/dist/custom/data/get-entity-details.action.js +284 -0
  30. package/dist/custom/data/get-entity-details.action.js.map +1 -0
  31. package/dist/custom/data/get-entity-list.action.d.ts +57 -0
  32. package/dist/custom/data/get-entity-list.action.d.ts.map +1 -0
  33. package/dist/custom/data/get-entity-list.action.js +177 -0
  34. package/dist/custom/data/get-entity-list.action.js.map +1 -0
  35. package/dist/custom/files/index.d.ts +2 -0
  36. package/dist/custom/files/index.d.ts.map +1 -1
  37. package/dist/custom/files/index.js +5 -1
  38. package/dist/custom/files/index.js.map +1 -1
  39. package/dist/custom/files/list-storage-providers.action.d.ts +52 -0
  40. package/dist/custom/files/list-storage-providers.action.d.ts.map +1 -0
  41. package/dist/custom/files/list-storage-providers.action.js +175 -0
  42. package/dist/custom/files/list-storage-providers.action.js.map +1 -0
  43. package/dist/custom/files/search-storage-files.action.d.ts +61 -0
  44. package/dist/custom/files/search-storage-files.action.d.ts.map +1 -0
  45. package/dist/custom/files/search-storage-files.action.js +183 -0
  46. package/dist/custom/files/search-storage-files.action.js.map +1 -0
  47. package/dist/custom/visualization/create-svg-chart.action.d.ts +97 -0
  48. package/dist/custom/visualization/create-svg-chart.action.d.ts.map +1 -0
  49. package/dist/custom/visualization/create-svg-chart.action.js +290 -0
  50. package/dist/custom/visualization/create-svg-chart.action.js.map +1 -0
  51. package/dist/custom/visualization/create-svg-diagram.action.d.ts +151 -0
  52. package/dist/custom/visualization/create-svg-diagram.action.d.ts.map +1 -0
  53. package/dist/custom/visualization/create-svg-diagram.action.js +764 -0
  54. package/dist/custom/visualization/create-svg-diagram.action.js.map +1 -0
  55. package/dist/custom/visualization/create-svg-infographic.action.d.ts +72 -0
  56. package/dist/custom/visualization/create-svg-infographic.action.d.ts.map +1 -0
  57. package/dist/custom/visualization/create-svg-infographic.action.js +343 -0
  58. package/dist/custom/visualization/create-svg-infographic.action.js.map +1 -0
  59. package/dist/custom/visualization/create-svg-network.action.d.ts +106 -0
  60. package/dist/custom/visualization/create-svg-network.action.d.ts.map +1 -0
  61. package/dist/custom/visualization/create-svg-network.action.js +651 -0
  62. package/dist/custom/visualization/create-svg-network.action.js.map +1 -0
  63. package/dist/custom/visualization/create-svg-word-cloud.action.d.ts +94 -0
  64. package/dist/custom/visualization/create-svg-word-cloud.action.d.ts.map +1 -0
  65. package/dist/custom/visualization/create-svg-word-cloud.action.js +422 -0
  66. package/dist/custom/visualization/create-svg-word-cloud.action.js.map +1 -0
  67. package/dist/custom/visualization/shared/svg-theming.d.ts +91 -0
  68. package/dist/custom/visualization/shared/svg-theming.d.ts.map +1 -0
  69. package/dist/custom/visualization/shared/svg-theming.js +235 -0
  70. package/dist/custom/visualization/shared/svg-theming.js.map +1 -0
  71. package/dist/custom/visualization/shared/svg-types.d.ts +338 -0
  72. package/dist/custom/visualization/shared/svg-types.d.ts.map +1 -0
  73. package/dist/custom/visualization/shared/svg-types.js +11 -0
  74. package/dist/custom/visualization/shared/svg-types.js.map +1 -0
  75. package/dist/custom/visualization/shared/svg-utils.d.ts +129 -0
  76. package/dist/custom/visualization/shared/svg-utils.d.ts.map +1 -0
  77. package/dist/custom/visualization/shared/svg-utils.js +287 -0
  78. package/dist/custom/visualization/shared/svg-utils.js.map +1 -0
  79. package/dist/custom/web/google-custom-search.action.d.ts +60 -0
  80. package/dist/custom/web/google-custom-search.action.d.ts.map +1 -0
  81. package/dist/custom/web/google-custom-search.action.js +378 -0
  82. package/dist/custom/web/google-custom-search.action.js.map +1 -0
  83. package/dist/custom/web/web-page-content.action.d.ts +24 -0
  84. package/dist/custom/web/web-page-content.action.d.ts.map +1 -1
  85. package/dist/custom/web/web-page-content.action.js +90 -9
  86. package/dist/custom/web/web-page-content.action.js.map +1 -1
  87. package/dist/generated/action_subclasses.d.ts +51 -3
  88. package/dist/generated/action_subclasses.d.ts.map +1 -1
  89. package/dist/generated/action_subclasses.js +174 -90
  90. package/dist/generated/action_subclasses.js.map +1 -1
  91. package/dist/index.d.ts +14 -0
  92. package/dist/index.d.ts.map +1 -1
  93. package/dist/index.js +44 -0
  94. package/dist/index.js.map +1 -1
  95. package/package.json +30 -11
@@ -0,0 +1,296 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ 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;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.LoadSummarizeContentAction = exports.SummarizeContentAction = void 0;
10
+ const actions_base_1 = require("@memberjunction/actions-base");
11
+ const actions_1 = require("@memberjunction/actions");
12
+ const global_1 = require("@memberjunction/global");
13
+ const core_1 = require("@memberjunction/core");
14
+ const ai_prompts_1 = require("@memberjunction/ai-prompts");
15
+ const ai_core_plus_1 = require("@memberjunction/ai-core-plus");
16
+ const aiengine_1 = require("@memberjunction/aiengine");
17
+ /**
18
+ * Action that creates a concise summary of content with citations to source material.
19
+ * Can work with either a URL (fetch + summarize) or pre-fetched content.
20
+ *
21
+ * Features:
22
+ * - Flexible input: URL or pre-fetched content
23
+ * - Configurable summary length (word count target)
24
+ * - Optional citations with quotes and links
25
+ * - Focus instructions for domain-specific summarization
26
+ * - Multiple output formats (paragraph, bullets, hybrid)
27
+ * - Automatic anchor link detection for precise citations
28
+ *
29
+ * @example
30
+ * ```typescript
31
+ * // Summarize from URL
32
+ * await runAction({
33
+ * ActionName: 'Summarize Content',
34
+ * Params: [{
35
+ * Name: 'url',
36
+ * Value: 'https://docs.memberjunction.org/architecture'
37
+ * }, {
38
+ * Name: 'summaryWords',
39
+ * Value: 200
40
+ * }, {
41
+ * Name: 'instructions',
42
+ * Value: 'Focus on metadata layer and entity system'
43
+ * }]
44
+ * });
45
+ *
46
+ * // Summarize pre-fetched content
47
+ * await runAction({
48
+ * ActionName: 'Summarize Content',
49
+ * Params: [{
50
+ * Name: 'content',
51
+ * Value: '<html>...</html>'
52
+ * }, {
53
+ * Name: 'sourceUrl',
54
+ * Value: 'https://docs.memberjunction.org/architecture'
55
+ * }, {
56
+ * Name: 'includeCitations',
57
+ * Value: true
58
+ * }]
59
+ * });
60
+ * ```
61
+ */
62
+ let SummarizeContentAction = class SummarizeContentAction extends actions_1.BaseAction {
63
+ async InternalRunAction(params) {
64
+ try {
65
+ // Extract parameters
66
+ const url = this.getStringParam(params, "url");
67
+ const content = this.getStringParam(params, "content");
68
+ const sourceUrl = this.getStringParam(params, "sourceurl");
69
+ const summaryWords = this.getNumericParam(params, "summarywords", 200);
70
+ const includeCitations = this.getBooleanParam(params, "includecitations", true);
71
+ const maxCitations = this.getNumericParam(params, "maxcitations", 5);
72
+ const instructions = this.getStringParam(params, "instructions", "Provide a comprehensive summary");
73
+ const format = this.getStringParam(params, "format", "paragraph");
74
+ // Validation: Must have either URL or content
75
+ if (!url && !content) {
76
+ return this.createErrorResult("Must provide either 'url' or 'content' parameter", "MISSING_INPUT");
77
+ }
78
+ // Validation: If content provided, must have sourceUrl
79
+ if (content && !sourceUrl) {
80
+ return this.createErrorResult("When using 'content' parameter, 'sourceUrl' is required for citations", "MISSING_SOURCE_URL");
81
+ }
82
+ let pageContent;
83
+ let finalSourceUrl;
84
+ // Fetch content if URL provided
85
+ if (url) {
86
+ const fetchResult = await this.fetchWebPageContent(url, params);
87
+ if (!fetchResult.success) {
88
+ return this.createErrorResult(`Failed to fetch web page: ${fetchResult.error}`, "FETCH_FAILED");
89
+ }
90
+ pageContent = fetchResult.content;
91
+ finalSourceUrl = url;
92
+ }
93
+ else {
94
+ // Use provided content
95
+ pageContent = content;
96
+ finalSourceUrl = sourceUrl;
97
+ }
98
+ // Call the LLM prompt action to do the actual summarization
99
+ const summaryResult = await this.generateSummary(pageContent, finalSourceUrl, {
100
+ summaryWords,
101
+ includeCitations,
102
+ maxCitations,
103
+ instructions,
104
+ format
105
+ }, params);
106
+ if (!summaryResult.success) {
107
+ return this.createErrorResult(`Failed to generate summary: ${summaryResult.error}`, "SUMMARIZATION_FAILED");
108
+ }
109
+ // Add output parameters
110
+ const outputData = summaryResult.data;
111
+ this.addOutputParam(params, "summary", outputData.summary);
112
+ this.addOutputParam(params, "wordCount", outputData.wordCount);
113
+ if (outputData.citations) {
114
+ this.addOutputParam(params, "citations", outputData.citations);
115
+ }
116
+ if (outputData.keyPoints) {
117
+ this.addOutputParam(params, "keyPoints", outputData.keyPoints);
118
+ }
119
+ if (outputData.metadata) {
120
+ this.addOutputParam(params, "metadata", outputData.metadata);
121
+ }
122
+ return {
123
+ Success: true,
124
+ ResultCode: "SUCCESS",
125
+ Message: JSON.stringify(outputData, null, 2)
126
+ };
127
+ }
128
+ catch (error) {
129
+ (0, core_1.LogError)(`Error in Summarize Content action: ${error}`);
130
+ return this.createErrorResult(`Error summarizing content: ${error instanceof Error ? error.message : String(error)}`, "UNEXPECTED_ERROR");
131
+ }
132
+ }
133
+ /**
134
+ * Fetch web page content using the Get Web Page Content action
135
+ */
136
+ async fetchWebPageContent(url, params) {
137
+ try {
138
+ // Load the Web Page Content action
139
+ await actions_base_1.ActionEngineBase.Instance.Config(false, params.ContextUser);
140
+ const action = actions_base_1.ActionEngineBase.Instance.Actions.find(a => a.Name === 'Web Page Content');
141
+ if (!action) {
142
+ return {
143
+ success: false,
144
+ error: "Action 'Web Page Content' not found"
145
+ };
146
+ }
147
+ // Build action params
148
+ const actionParams = [{
149
+ Name: "url",
150
+ Type: "Input",
151
+ Value: url
152
+ }];
153
+ const runParams = new actions_base_1.RunActionParams();
154
+ runParams.Action = action;
155
+ runParams.Params = actionParams;
156
+ runParams.ContextUser = params.ContextUser;
157
+ runParams.SkipActionLog = true;
158
+ // Execute the action
159
+ const engine = new actions_1.ActionEngineServer();
160
+ const result = await engine.RunAction(runParams);
161
+ if (!result.Success) {
162
+ return {
163
+ success: false,
164
+ error: result.Message || "Failed to fetch web page"
165
+ };
166
+ }
167
+ // Extract content from result
168
+ const content = result.Message || "";
169
+ return {
170
+ success: true,
171
+ content
172
+ };
173
+ }
174
+ catch (error) {
175
+ return {
176
+ success: false,
177
+ error: error instanceof Error ? error.message : String(error)
178
+ };
179
+ }
180
+ }
181
+ /**
182
+ * Generate summary using AI Prompts package directly
183
+ */
184
+ async generateSummary(content, sourceUrl, options, params) {
185
+ try {
186
+ // Ensure AIEngine is initialized
187
+ await aiengine_1.AIEngine.Instance.Config(false, params.ContextUser);
188
+ // Get the summarization prompt from AIEngine
189
+ const prompt = this.getPromptByNameAndCategory('Summarize Content', 'MJ: System');
190
+ if (!prompt) {
191
+ return {
192
+ success: false,
193
+ error: "Prompt 'Summarize Content' not found. Ensure metadata has been synced."
194
+ };
195
+ }
196
+ // Build prompt parameters with data context
197
+ const promptParams = new ai_core_plus_1.AIPromptParams();
198
+ promptParams.prompt = prompt;
199
+ promptParams.data = {
200
+ content,
201
+ sourceUrl,
202
+ summaryWords: options.summaryWords,
203
+ includeCitations: options.includeCitations,
204
+ maxCitations: options.maxCitations,
205
+ instructions: options.instructions,
206
+ format: options.format
207
+ };
208
+ promptParams.contextUser = params.ContextUser;
209
+ promptParams.cleanValidationSyntax = true;
210
+ promptParams.attemptJSONRepair = true;
211
+ // Execute the prompt
212
+ const runner = new ai_prompts_1.AIPromptRunner();
213
+ const result = await runner.ExecutePrompt(promptParams);
214
+ if (!result.success) {
215
+ return {
216
+ success: false,
217
+ error: result.errorMessage || "Prompt execution failed"
218
+ };
219
+ }
220
+ return {
221
+ success: true,
222
+ data: result.result
223
+ };
224
+ }
225
+ catch (error) {
226
+ return {
227
+ success: false,
228
+ error: error instanceof Error ? error.message : String(error)
229
+ };
230
+ }
231
+ }
232
+ /**
233
+ * Get prompt by name and category from AIEngine
234
+ */
235
+ getPromptByNameAndCategory(name, category) {
236
+ return aiengine_1.AIEngine.Instance.Prompts.find(p => p.Name.trim().toLowerCase() === name.trim().toLowerCase() &&
237
+ p.Category?.trim().toLowerCase() === category?.trim().toLowerCase());
238
+ }
239
+ // Helper methods (consistent with other actions)
240
+ getStringParam(params, paramName, defaultValue) {
241
+ const param = params.Params.find(p => p.Name.trim().toLowerCase() === paramName.toLowerCase());
242
+ if (!param || param.Value === undefined || param.Value === null) {
243
+ return defaultValue;
244
+ }
245
+ const value = String(param.Value).trim();
246
+ return value.length > 0 ? value : defaultValue;
247
+ }
248
+ getNumericParam(params, paramName, defaultValue) {
249
+ const param = params.Params.find(p => p.Name.trim().toLowerCase() === paramName.toLowerCase());
250
+ if (!param || param.Value === undefined || param.Value === null) {
251
+ return defaultValue;
252
+ }
253
+ const parsed = Number(param.Value);
254
+ return isNaN(parsed) ? defaultValue : parsed;
255
+ }
256
+ getBooleanParam(params, paramName, defaultValue) {
257
+ const param = params.Params.find(p => p.Name.trim().toLowerCase() === paramName.toLowerCase());
258
+ if (!param || param.Value === undefined || param.Value === null) {
259
+ return defaultValue;
260
+ }
261
+ const value = String(param.Value).trim().toLowerCase();
262
+ if (value === "true" || value === "1" || value === "yes") {
263
+ return true;
264
+ }
265
+ if (value === "false" || value === "0" || value === "no") {
266
+ return false;
267
+ }
268
+ return defaultValue;
269
+ }
270
+ addOutputParam(params, name, value) {
271
+ params.Params.push({
272
+ Name: name,
273
+ Type: "Output",
274
+ Value: value
275
+ });
276
+ }
277
+ createErrorResult(message, code) {
278
+ return {
279
+ Success: false,
280
+ Message: message,
281
+ ResultCode: code
282
+ };
283
+ }
284
+ };
285
+ exports.SummarizeContentAction = SummarizeContentAction;
286
+ exports.SummarizeContentAction = SummarizeContentAction = __decorate([
287
+ (0, global_1.RegisterClass)(actions_1.BaseAction, "SummarizeContentAction")
288
+ ], SummarizeContentAction);
289
+ /**
290
+ * Loader function to ensure the SummarizeContentAction class is included in the bundle.
291
+ */
292
+ function LoadSummarizeContentAction() {
293
+ // This function is a stub that is used to force the bundler to include the above class in the final bundle
294
+ }
295
+ exports.LoadSummarizeContentAction = LoadSummarizeContentAction;
296
+ //# sourceMappingURL=summarize-content.action.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"summarize-content.action.js","sourceRoot":"","sources":["../../../src/custom/ai/summarize-content.action.ts"],"names":[],"mappings":";;;;;;;;;AAAA,+DAAkH;AAClH,qDAAyE;AACzE,mDAAuD;AACvD,+CAAyD;AACzD,2DAA4D;AAC5D,+DAA8D;AAC9D,uDAAoD;AAsBpD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AAEI,IAAM,sBAAsB,GAA5B,MAAM,sBAAuB,SAAQ,oBAAU;IAExC,KAAK,CAAC,iBAAiB,CAAC,MAAuB;QACrD,IAAI,CAAC;YACD,qBAAqB;YACrB,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YAC/C,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YACvD,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;YAC3D,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,CAAC,CAAC;YACvE,MAAM,gBAAgB,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,kBAAkB,EAAE,IAAI,CAAC,CAAC;YAChF,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC;YACrE,MAAM,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,cAAc,EAAE,iCAAiC,CAAC,CAAC;YACpG,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;YAElE,8CAA8C;YAC9C,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;gBACnB,OAAO,IAAI,CAAC,iBAAiB,CACzB,kDAAkD,EAClD,eAAe,CAClB,CAAC;YACN,CAAC;YAED,uDAAuD;YACvD,IAAI,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC;gBACxB,OAAO,IAAI,CAAC,iBAAiB,CACzB,uEAAuE,EACvE,oBAAoB,CACvB,CAAC;YACN,CAAC;YAED,IAAI,WAAmB,CAAC;YACxB,IAAI,cAAsB,CAAC;YAE3B,gCAAgC;YAChC,IAAI,GAAG,EAAE,CAAC;gBACN,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;gBAChE,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;oBACvB,OAAO,IAAI,CAAC,iBAAiB,CACzB,6BAA6B,WAAW,CAAC,KAAK,EAAE,EAChD,cAAc,CACjB,CAAC;gBACN,CAAC;gBACD,WAAW,GAAG,WAAW,CAAC,OAAQ,CAAC;gBACnC,cAAc,GAAG,GAAG,CAAC;YACzB,CAAC;iBAAM,CAAC;gBACJ,uBAAuB;gBACvB,WAAW,GAAG,OAAQ,CAAC;gBACvB,cAAc,GAAG,SAAU,CAAC;YAChC,CAAC;YAED,4DAA4D;YAC5D,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,cAAc,EAAE;gBAC1E,YAAY;gBACZ,gBAAgB;gBAChB,YAAY;gBACZ,YAAY;gBACZ,MAAM;aACT,EAAE,MAAM,CAAC,CAAC;YAEX,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;gBACzB,OAAO,IAAI,CAAC,iBAAiB,CACzB,+BAA+B,aAAa,CAAC,KAAK,EAAE,EACpD,sBAAsB,CACzB,CAAC;YACN,CAAC;YAED,wBAAwB;YACxB,MAAM,UAAU,GAAG,aAAa,CAAC,IAAqB,CAAC;YACvD,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,SAAS,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC;YAC3D,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,WAAW,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC;YAC/D,IAAI,UAAU,CAAC,SAAS,EAAE,CAAC;gBACvB,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,WAAW,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC;YACnE,CAAC;YACD,IAAI,UAAU,CAAC,SAAS,EAAE,CAAC;gBACvB,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,WAAW,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC;YACnE,CAAC;YACD,IAAI,UAAU,CAAC,QAAQ,EAAE,CAAC;gBACtB,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,UAAU,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;YACjE,CAAC;YAED,OAAO;gBACH,OAAO,EAAE,IAAI;gBACb,UAAU,EAAE,SAAS;gBACrB,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;aAC/C,CAAC;QAEN,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,IAAA,eAAQ,EAAC,sCAAsC,KAAK,EAAE,CAAC,CAAC;YACxD,OAAO,IAAI,CAAC,iBAAiB,CACzB,8BAA8B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EACtF,kBAAkB,CACrB,CAAC;QACN,CAAC;IACL,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,mBAAmB,CAC7B,GAAW,EACX,MAAuB;QAEvB,IAAI,CAAC;YACD,mCAAmC;YACnC,MAAM,+BAAgB,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;YAClE,MAAM,MAAM,GAAG,+BAAgB,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,kBAAkB,CAAC,CAAC;YAC1F,IAAI,CAAC,MAAM,EAAE,CAAC;gBACV,OAAO;oBACH,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,qCAAqC;iBAC/C,CAAC;YACN,CAAC;YAED,sBAAsB;YACtB,MAAM,YAAY,GAAkB,CAAC;oBACjC,IAAI,EAAE,KAAK;oBACX,IAAI,EAAE,OAAO;oBACb,KAAK,EAAE,GAAG;iBACb,CAAC,CAAC;YAEH,MAAM,SAAS,GAAG,IAAI,8BAAe,EAAE,CAAC;YACxC,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC;YAC1B,SAAS,CAAC,MAAM,GAAG,YAAY,CAAC;YAChC,SAAS,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;YAC3C,SAAS,CAAC,aAAa,GAAG,IAAI,CAAC;YAE/B,qBAAqB;YACrB,MAAM,MAAM,GAAG,IAAI,4BAAkB,EAAE,CAAC;YACxC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;YAEjD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBAClB,OAAO;oBACH,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,MAAM,CAAC,OAAO,IAAI,0BAA0B;iBACtD,CAAC;YACN,CAAC;YAED,8BAA8B;YAC9B,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;YACrC,OAAO;gBACH,OAAO,EAAE,IAAI;gBACb,OAAO;aACV,CAAC;QACN,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,OAAO;gBACH,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;aAChE,CAAC;QACN,CAAC;IACL,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,eAAe,CACzB,OAAe,EACf,SAAiB,EACjB,OAMC,EACD,MAAuB;QAEvB,IAAI,CAAC;YACD,iCAAiC;YACjC,MAAM,mBAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;YAE1D,6CAA6C;YAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,0BAA0B,CAAC,mBAAmB,EAAE,YAAY,CAAC,CAAC;YAClF,IAAI,CAAC,MAAM,EAAE,CAAC;gBACV,OAAO;oBACH,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,wEAAwE;iBAClF,CAAC;YACN,CAAC;YAED,4CAA4C;YAC5C,MAAM,YAAY,GAAG,IAAI,6BAAc,EAAE,CAAC;YAC1C,YAAY,CAAC,MAAM,GAAG,MAAM,CAAC;YAC7B,YAAY,CAAC,IAAI,GAAG;gBAChB,OAAO;gBACP,SAAS;gBACT,YAAY,EAAE,OAAO,CAAC,YAAY;gBAClC,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;gBAC1C,YAAY,EAAE,OAAO,CAAC,YAAY;gBAClC,YAAY,EAAE,OAAO,CAAC,YAAY;gBAClC,MAAM,EAAE,OAAO,CAAC,MAAM;aACzB,CAAC;YACF,YAAY,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;YAC9C,YAAY,CAAC,qBAAqB,GAAG,IAAI,CAAC;YAC1C,YAAY,CAAC,iBAAiB,GAAG,IAAI,CAAC;YAEtC,qBAAqB;YACrB,MAAM,MAAM,GAAG,IAAI,2BAAc,EAAE,CAAC;YACpC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,aAAa,CAAgB,YAAY,CAAC,CAAC;YAEvE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBAClB,OAAO;oBACH,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,MAAM,CAAC,YAAY,IAAI,yBAAyB;iBAC1D,CAAC;YACN,CAAC;YAED,OAAO;gBACH,OAAO,EAAE,IAAI;gBACb,IAAI,EAAE,MAAM,CAAC,MAAM;aACtB,CAAC;QAEN,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,OAAO;gBACH,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;aAChE,CAAC;QACN,CAAC;IACL,CAAC;IAED;;OAEG;IACK,0BAA0B,CAAC,IAAY,EAAE,QAAgB;QAC7D,OAAO,mBAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE;YACzD,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,QAAQ,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;IACpH,CAAC;IAGD,iDAAiD;IACzC,cAAc,CAAC,MAAuB,EAAE,SAAiB,EAAE,YAAqB;QACpF,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC;QAC/F,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;YAC9D,OAAO,YAAY,CAAC;QACxB,CAAC;QACD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;QACzC,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC;IACnD,CAAC;IAEO,eAAe,CAAC,MAAuB,EAAE,SAAiB,EAAE,YAAoB;QACpF,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC;QAC/F,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;YAC9D,OAAO,YAAY,CAAC;QACxB,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACnC,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC;IACjD,CAAC;IAEO,eAAe,CAAC,MAAuB,EAAE,SAAiB,EAAE,YAAqB;QACrF,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC;QAC/F,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;YAC9D,OAAO,YAAY,CAAC;QACxB,CAAC;QACD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACvD,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,GAAG,IAAI,KAAK,KAAK,KAAK,EAAE,CAAC;YACvD,OAAO,IAAI,CAAC;QAChB,CAAC;QACD,IAAI,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,GAAG,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACvD,OAAO,KAAK,CAAC;QACjB,CAAC;QACD,OAAO,YAAY,CAAC;IACxB,CAAC;IAEO,cAAc,CAAC,MAAuB,EAAE,IAAY,EAAE,KAAc;QACxE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;YACf,IAAI,EAAE,IAAI;YACV,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,KAAK;SACf,CAAC,CAAC;IACP,CAAC;IAEO,iBAAiB,CAAC,OAAe,EAAE,IAAY;QACnD,OAAO;YACH,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,OAAO;YAChB,UAAU,EAAE,IAAI;SACnB,CAAC;IACN,CAAC;CACJ,CAAA;AArRY,wDAAsB;iCAAtB,sBAAsB;IADlC,IAAA,sBAAa,EAAC,oBAAU,EAAE,wBAAwB,CAAC;GACvC,sBAAsB,CAqRlC;AAED;;GAEG;AACH,SAAgB,0BAA0B;IACtC,2GAA2G;AAC/G,CAAC;AAFD,gEAEC"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Execute Code Action
3
+ *
4
+ * Thin wrapper action that exposes code execution capabilities to AI agents and workflows.
5
+ * Delegates all logic to CodeExecutionService following MJ's pattern of Actions as boundaries.
6
+ *
7
+ * @module @memberjunction/core-actions
8
+ */
9
+ import { BaseAction } from '@memberjunction/actions';
10
+ import { RunActionParams, ActionResultSimple } from '@memberjunction/actions-base';
11
+ /**
12
+ * Action for executing JavaScript code in a sandboxed environment
13
+ *
14
+ * This is a THIN WRAPPER - all core logic lives in CodeExecutionService.
15
+ * The action's job is simply to:
16
+ * 1. Extract parameters from the action interface
17
+ * 2. Delegate to CodeExecutionService
18
+ * 3. Map results back to ActionResultSimple
19
+ *
20
+ * Security is enforced entirely by CodeExecutionService.
21
+ *
22
+ * @example Agent usage:
23
+ * ```json
24
+ * {
25
+ * "type": "Action",
26
+ * "action": {
27
+ * "name": "Execute Code",
28
+ * "params": {
29
+ * "code": "const sum = input.values.reduce((a,b) => a+b, 0); output = sum;",
30
+ * "language": "javascript",
31
+ * "inputData": "{\"values\": [1,2,3,4,5]}"
32
+ * }
33
+ * }
34
+ * }
35
+ * ```
36
+ */
37
+ export declare class ExecuteCodeAction extends BaseAction {
38
+ /**
39
+ * Execute the action by delegating to CodeExecutionService
40
+ *
41
+ * @param params - Action parameters including code, language, inputData
42
+ * @returns ActionResultSimple with execution results or errors
43
+ */
44
+ protected InternalRunAction(params: RunActionParams): Promise<ActionResultSimple>;
45
+ /**
46
+ * Helper to get string parameter from action params
47
+ * @private
48
+ */
49
+ private getStringParam;
50
+ /**
51
+ * Helper to get numeric parameter from action params
52
+ * @private
53
+ */
54
+ private getNumericParam;
55
+ /**
56
+ * Helper to add output parameter to action results
57
+ * @private
58
+ */
59
+ private addOutputParam;
60
+ }
61
+ //# sourceMappingURL=execute-code.action.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execute-code.action.d.ts","sourceRoot":"","sources":["../../../src/custom/code-execution/execute-code.action.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAErD,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAQnF;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,qBACa,iBAAkB,SAAQ,UAAU;IAC7C;;;;;OAKG;cACa,iBAAiB,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAqFvF;;;OAGG;IACH,OAAO,CAAC,cAAc;IAStB;;;OAGG;IACH,OAAO,CAAC,eAAe;IASvB;;;OAGG;IACH,OAAO,CAAC,cAAc;CAOzB"}
@@ -0,0 +1,172 @@
1
+ "use strict";
2
+ /**
3
+ * Execute Code Action
4
+ *
5
+ * Thin wrapper action that exposes code execution capabilities to AI agents and workflows.
6
+ * Delegates all logic to CodeExecutionService following MJ's pattern of Actions as boundaries.
7
+ *
8
+ * @module @memberjunction/core-actions
9
+ */
10
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
11
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
12
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
13
+ 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;
14
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.ExecuteCodeAction = void 0;
18
+ const actions_1 = require("@memberjunction/actions");
19
+ const global_1 = require("@memberjunction/global");
20
+ const code_execution_1 = require("@memberjunction/code-execution");
21
+ const core_1 = require("@memberjunction/core");
22
+ /**
23
+ * Action for executing JavaScript code in a sandboxed environment
24
+ *
25
+ * This is a THIN WRAPPER - all core logic lives in CodeExecutionService.
26
+ * The action's job is simply to:
27
+ * 1. Extract parameters from the action interface
28
+ * 2. Delegate to CodeExecutionService
29
+ * 3. Map results back to ActionResultSimple
30
+ *
31
+ * Security is enforced entirely by CodeExecutionService.
32
+ *
33
+ * @example Agent usage:
34
+ * ```json
35
+ * {
36
+ * "type": "Action",
37
+ * "action": {
38
+ * "name": "Execute Code",
39
+ * "params": {
40
+ * "code": "const sum = input.values.reduce((a,b) => a+b, 0); output = sum;",
41
+ * "language": "javascript",
42
+ * "inputData": "{\"values\": [1,2,3,4,5]}"
43
+ * }
44
+ * }
45
+ * }
46
+ * ```
47
+ */
48
+ let ExecuteCodeAction = class ExecuteCodeAction extends actions_1.BaseAction {
49
+ /**
50
+ * Execute the action by delegating to CodeExecutionService
51
+ *
52
+ * @param params - Action parameters including code, language, inputData
53
+ * @returns ActionResultSimple with execution results or errors
54
+ */
55
+ async InternalRunAction(params) {
56
+ try {
57
+ // 1. Extract parameters (this is all the action does besides delegation)
58
+ const code = this.getStringParam(params, "code");
59
+ const language = this.getStringParam(params, "language", "javascript");
60
+ const inputDataStr = this.getStringParam(params, "inputData");
61
+ const timeout = this.getNumericParam(params, "timeout", 30);
62
+ const memoryLimit = this.getNumericParam(params, "memoryLimit", 128);
63
+ // Validate required parameters
64
+ if (!code) {
65
+ return {
66
+ Success: false,
67
+ ResultCode: "MISSING_CODE",
68
+ Message: "Parameter 'code' is required"
69
+ };
70
+ }
71
+ // Parse input data if provided
72
+ let inputData = undefined;
73
+ if (inputDataStr) {
74
+ try {
75
+ inputData = JSON.parse(inputDataStr);
76
+ }
77
+ catch (parseError) {
78
+ return {
79
+ Success: false,
80
+ ResultCode: "INVALID_INPUT_DATA",
81
+ Message: `Failed to parse inputData as JSON: ${parseError instanceof Error ? parseError.message : String(parseError)}`
82
+ };
83
+ }
84
+ }
85
+ // 2. Delegate to service (DIRECT IMPORT - not another action!)
86
+ const executionService = new code_execution_1.CodeExecutionService();
87
+ const executionParams = {
88
+ code,
89
+ language,
90
+ inputData,
91
+ timeoutSeconds: timeout,
92
+ memoryLimitMB: memoryLimit
93
+ };
94
+ const result = await executionService.execute(executionParams);
95
+ // 3. Map results to action format
96
+ if (!result.success) {
97
+ return {
98
+ Success: false,
99
+ ResultCode: result.errorType || "EXECUTION_FAILED",
100
+ Message: result.error || "Code execution failed"
101
+ };
102
+ }
103
+ // Add output parameters for agents to use
104
+ if (result.output !== undefined) {
105
+ this.addOutputParam(params, "output", result.output);
106
+ }
107
+ if (result.logs && result.logs.length > 0) {
108
+ this.addOutputParam(params, "logs", result.logs);
109
+ }
110
+ if (result.executionTimeMs !== undefined) {
111
+ this.addOutputParam(params, "executionTimeMs", result.executionTimeMs);
112
+ }
113
+ return {
114
+ Success: true,
115
+ ResultCode: "SUCCESS",
116
+ Message: JSON.stringify({
117
+ output: result.output,
118
+ logs: result.logs,
119
+ executionTimeMs: result.executionTimeMs
120
+ })
121
+ };
122
+ }
123
+ catch (error) {
124
+ (0, core_1.LogError)(`Error in ExecuteCodeAction: ${error}`);
125
+ return {
126
+ Success: false,
127
+ ResultCode: "UNEXPECTED_ERROR",
128
+ Message: error instanceof Error ? error.message : String(error)
129
+ };
130
+ }
131
+ }
132
+ /**
133
+ * Helper to get string parameter from action params
134
+ * @private
135
+ */
136
+ getStringParam(params, name, defaultValue) {
137
+ const param = params.Params.find(p => p.Name.trim().toLowerCase() === name.toLowerCase());
138
+ if (!param || param.Value === undefined || param.Value === null) {
139
+ return defaultValue;
140
+ }
141
+ const value = String(param.Value).trim();
142
+ return value.length > 0 ? value : defaultValue;
143
+ }
144
+ /**
145
+ * Helper to get numeric parameter from action params
146
+ * @private
147
+ */
148
+ getNumericParam(params, name, defaultValue) {
149
+ const param = params.Params.find(p => p.Name.trim().toLowerCase() === name.toLowerCase());
150
+ if (!param || param.Value === undefined || param.Value === null) {
151
+ return defaultValue;
152
+ }
153
+ const parsed = Number(param.Value);
154
+ return isNaN(parsed) ? defaultValue : parsed;
155
+ }
156
+ /**
157
+ * Helper to add output parameter to action results
158
+ * @private
159
+ */
160
+ addOutputParam(params, name, value) {
161
+ params.Params.push({
162
+ Name: name,
163
+ Type: "Output",
164
+ Value: value
165
+ });
166
+ }
167
+ };
168
+ exports.ExecuteCodeAction = ExecuteCodeAction;
169
+ exports.ExecuteCodeAction = ExecuteCodeAction = __decorate([
170
+ (0, global_1.RegisterClass)(actions_1.BaseAction, "Execute Code")
171
+ ], ExecuteCodeAction);
172
+ //# sourceMappingURL=execute-code.action.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execute-code.action.js","sourceRoot":"","sources":["../../../src/custom/code-execution/execute-code.action.ts"],"names":[],"mappings":"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"}
@@ -127,7 +127,7 @@ let CSVParserAction = class CSVParserAction extends base_file_handler_1.BaseFile
127
127
  skipEmptyLines: skipEmptyRows ? 'greedy' : false,
128
128
  dynamicTyping: dynamicTyping,
129
129
  preview: maxRows > 0 ? maxRows : undefined,
130
- transformValue: (value) => {
130
+ transform: (value, field) => {
131
131
  return trimValues ? value.trim() : value;
132
132
  }
133
133
  });
@@ -1 +1 @@
1
- {"version":3,"file":"csv-parser.action.js","sourceRoot":"","sources":["../../../src/custom/data/csv-parser.action.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"csv-parser.action.js","sourceRoot":"","sources":["../../../src/custom/data/csv-parser.action.ts"],"names":[],"mappings":"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"}