@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,91 @@
|
|
|
1
|
+
import { ActionResultSimple, RunActionParams } from "@memberjunction/actions-base";
|
|
2
|
+
import { BaseAction } from "@memberjunction/actions";
|
|
3
|
+
/**
|
|
4
|
+
* Action that performs aggregation operations on arrays of data
|
|
5
|
+
* Supports grouping, counting, summing, averaging, and other statistical operations
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* // Simple aggregation
|
|
10
|
+
* await runAction({
|
|
11
|
+
* ActionName: 'Aggregate Data',
|
|
12
|
+
* Params: [{
|
|
13
|
+
* Name: 'InputData',
|
|
14
|
+
* Value: [
|
|
15
|
+
* { category: 'A', value: 10 },
|
|
16
|
+
* { category: 'A', value: 20 },
|
|
17
|
+
* { category: 'B', value: 15 }
|
|
18
|
+
* ]
|
|
19
|
+
* }, {
|
|
20
|
+
* Name: 'Aggregations',
|
|
21
|
+
* Value: [
|
|
22
|
+
* { field: 'value', operation: 'sum', outputName: 'totalValue' },
|
|
23
|
+
* { field: 'value', operation: 'avg', outputName: 'avgValue' }
|
|
24
|
+
* ]
|
|
25
|
+
* }]
|
|
26
|
+
* });
|
|
27
|
+
*
|
|
28
|
+
* // Group by aggregation
|
|
29
|
+
* await runAction({
|
|
30
|
+
* ActionName: 'Aggregate Data',
|
|
31
|
+
* Params: [{
|
|
32
|
+
* Name: 'InputData',
|
|
33
|
+
* Value: salesData
|
|
34
|
+
* }, {
|
|
35
|
+
* Name: 'GroupBy',
|
|
36
|
+
* Value: ['region', 'product']
|
|
37
|
+
* }, {
|
|
38
|
+
* Name: 'Aggregations',
|
|
39
|
+
* Value: [
|
|
40
|
+
* { field: 'sales', operation: 'sum', outputName: 'totalSales' },
|
|
41
|
+
* { field: 'sales', operation: 'count', outputName: 'transactionCount' }
|
|
42
|
+
* ]
|
|
43
|
+
* }]
|
|
44
|
+
* });
|
|
45
|
+
* ```
|
|
46
|
+
*/
|
|
47
|
+
export declare class AggregateDataAction extends BaseAction {
|
|
48
|
+
/**
|
|
49
|
+
* Performs aggregation operations on data arrays
|
|
50
|
+
*
|
|
51
|
+
* @param params - The action parameters containing:
|
|
52
|
+
* - InputData: Array of objects to aggregate
|
|
53
|
+
* - GroupBy: Field name(s) to group by (string or array, optional)
|
|
54
|
+
* - Aggregations: Array of aggregation specifications
|
|
55
|
+
* - IncludeEmptyGroups: Include groups with no data (default: false)
|
|
56
|
+
* - SortBy: Field to sort results by (optional)
|
|
57
|
+
* - SortOrder: "asc" | "desc" (default: "asc")
|
|
58
|
+
*
|
|
59
|
+
* @returns Aggregated results
|
|
60
|
+
*/
|
|
61
|
+
protected InternalRunAction(params: RunActionParams): Promise<ActionResultSimple>;
|
|
62
|
+
/**
|
|
63
|
+
* Aggregate without grouping (single result)
|
|
64
|
+
*/
|
|
65
|
+
private aggregateWithoutGrouping;
|
|
66
|
+
/**
|
|
67
|
+
* Aggregate with grouping (multiple results)
|
|
68
|
+
*/
|
|
69
|
+
private aggregateWithGrouping;
|
|
70
|
+
/**
|
|
71
|
+
* Calculate a single aggregation
|
|
72
|
+
*/
|
|
73
|
+
private calculateAggregation;
|
|
74
|
+
/**
|
|
75
|
+
* Get numeric value, handling null/undefined
|
|
76
|
+
*/
|
|
77
|
+
private getNumericValue;
|
|
78
|
+
/**
|
|
79
|
+
* Calculate standard deviation
|
|
80
|
+
*/
|
|
81
|
+
private calculateStandardDeviation;
|
|
82
|
+
/**
|
|
83
|
+
* Calculate variance
|
|
84
|
+
*/
|
|
85
|
+
private calculateVariance;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Loader function to ensure the AggregateDataAction class is included in the bundle
|
|
89
|
+
*/
|
|
90
|
+
export declare function LoadAggregateDataAction(): void;
|
|
91
|
+
//# sourceMappingURL=aggregate-data.action.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aggregate-data.action.d.ts","sourceRoot":"","sources":["../../../src/custom/data/aggregate-data.action.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AACnF,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAIrD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,qBACa,mBAAoB,SAAQ,UAAU;IAE/C;;;;;;;;;;;;OAYG;cACa,iBAAiB,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,kBAAkB,CAAC;IA2IvF;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAUhC;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAmC7B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IA0D5B;;OAEG;IACH,OAAO,CAAC,eAAe;IAMvB;;OAEG;IACH,OAAO,CAAC,0BAA0B;IAKlC;;OAEG;IACH,OAAO,CAAC,iBAAiB;CAQ5B;AAED;;GAEG;AACH,wBAAgB,uBAAuB,SAEtC"}
|
|
@@ -0,0 +1,333 @@
|
|
|
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.LoadAggregateDataAction = exports.AggregateDataAction = void 0;
|
|
10
|
+
const actions_1 = require("@memberjunction/actions");
|
|
11
|
+
const global_1 = require("@memberjunction/global");
|
|
12
|
+
const json_param_helper_1 = require("../utilities/json-param-helper");
|
|
13
|
+
/**
|
|
14
|
+
* Action that performs aggregation operations on arrays of data
|
|
15
|
+
* Supports grouping, counting, summing, averaging, and other statistical operations
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```typescript
|
|
19
|
+
* // Simple aggregation
|
|
20
|
+
* await runAction({
|
|
21
|
+
* ActionName: 'Aggregate Data',
|
|
22
|
+
* Params: [{
|
|
23
|
+
* Name: 'InputData',
|
|
24
|
+
* Value: [
|
|
25
|
+
* { category: 'A', value: 10 },
|
|
26
|
+
* { category: 'A', value: 20 },
|
|
27
|
+
* { category: 'B', value: 15 }
|
|
28
|
+
* ]
|
|
29
|
+
* }, {
|
|
30
|
+
* Name: 'Aggregations',
|
|
31
|
+
* Value: [
|
|
32
|
+
* { field: 'value', operation: 'sum', outputName: 'totalValue' },
|
|
33
|
+
* { field: 'value', operation: 'avg', outputName: 'avgValue' }
|
|
34
|
+
* ]
|
|
35
|
+
* }]
|
|
36
|
+
* });
|
|
37
|
+
*
|
|
38
|
+
* // Group by aggregation
|
|
39
|
+
* await runAction({
|
|
40
|
+
* ActionName: 'Aggregate Data',
|
|
41
|
+
* Params: [{
|
|
42
|
+
* Name: 'InputData',
|
|
43
|
+
* Value: salesData
|
|
44
|
+
* }, {
|
|
45
|
+
* Name: 'GroupBy',
|
|
46
|
+
* Value: ['region', 'product']
|
|
47
|
+
* }, {
|
|
48
|
+
* Name: 'Aggregations',
|
|
49
|
+
* Value: [
|
|
50
|
+
* { field: 'sales', operation: 'sum', outputName: 'totalSales' },
|
|
51
|
+
* { field: 'sales', operation: 'count', outputName: 'transactionCount' }
|
|
52
|
+
* ]
|
|
53
|
+
* }]
|
|
54
|
+
* });
|
|
55
|
+
* ```
|
|
56
|
+
*/
|
|
57
|
+
let AggregateDataAction = class AggregateDataAction extends actions_1.BaseAction {
|
|
58
|
+
/**
|
|
59
|
+
* Performs aggregation operations on data arrays
|
|
60
|
+
*
|
|
61
|
+
* @param params - The action parameters containing:
|
|
62
|
+
* - InputData: Array of objects to aggregate
|
|
63
|
+
* - GroupBy: Field name(s) to group by (string or array, optional)
|
|
64
|
+
* - Aggregations: Array of aggregation specifications
|
|
65
|
+
* - IncludeEmptyGroups: Include groups with no data (default: false)
|
|
66
|
+
* - SortBy: Field to sort results by (optional)
|
|
67
|
+
* - SortOrder: "asc" | "desc" (default: "asc")
|
|
68
|
+
*
|
|
69
|
+
* @returns Aggregated results
|
|
70
|
+
*/
|
|
71
|
+
async InternalRunAction(params) {
|
|
72
|
+
try {
|
|
73
|
+
// Extract parameters
|
|
74
|
+
let inputData;
|
|
75
|
+
let aggregations;
|
|
76
|
+
try {
|
|
77
|
+
inputData = json_param_helper_1.JSONParamHelper.getRequiredJSONParam(params, 'InputData');
|
|
78
|
+
}
|
|
79
|
+
catch (error) {
|
|
80
|
+
return {
|
|
81
|
+
Success: false,
|
|
82
|
+
Message: error instanceof Error ? error.message : String(error),
|
|
83
|
+
ResultCode: "MISSING_PARAMETERS"
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
try {
|
|
87
|
+
aggregations = json_param_helper_1.JSONParamHelper.getRequiredJSONParam(params, 'Aggregations');
|
|
88
|
+
}
|
|
89
|
+
catch (error) {
|
|
90
|
+
return {
|
|
91
|
+
Success: false,
|
|
92
|
+
Message: error instanceof Error ? error.message : String(error),
|
|
93
|
+
ResultCode: "MISSING_PARAMETERS"
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
const groupByParam = params.Params.find(p => p.Name.trim().toLowerCase() === 'groupby');
|
|
97
|
+
const includeEmptyGroupsParam = params.Params.find(p => p.Name.trim().toLowerCase() === 'includeemptygroups');
|
|
98
|
+
const sortByParam = params.Params.find(p => p.Name.trim().toLowerCase() === 'sortby');
|
|
99
|
+
const sortOrderParam = params.Params.find(p => p.Name.trim().toLowerCase() === 'sortorder');
|
|
100
|
+
if (!Array.isArray(inputData)) {
|
|
101
|
+
return {
|
|
102
|
+
Success: false,
|
|
103
|
+
Message: "InputData must be an array",
|
|
104
|
+
ResultCode: "INVALID_INPUT_DATA"
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
// Parse group by fields
|
|
108
|
+
let groupByFields = [];
|
|
109
|
+
if (groupByParam?.Value) {
|
|
110
|
+
if (typeof groupByParam.Value === 'string') {
|
|
111
|
+
groupByFields = [groupByParam.Value];
|
|
112
|
+
}
|
|
113
|
+
else if (Array.isArray(groupByParam.Value)) {
|
|
114
|
+
groupByFields = groupByParam.Value;
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
return {
|
|
118
|
+
Success: false,
|
|
119
|
+
Message: "GroupBy must be a string or array of strings",
|
|
120
|
+
ResultCode: "INVALID_GROUP_BY"
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
if (!Array.isArray(aggregations)) {
|
|
125
|
+
return {
|
|
126
|
+
Success: false,
|
|
127
|
+
Message: "Aggregations must be an array",
|
|
128
|
+
ResultCode: "INVALID_AGGREGATIONS"
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
// Validate aggregations
|
|
132
|
+
const validOperations = ['sum', 'avg', 'min', 'max', 'count', 'countDistinct', 'first', 'last', 'stdDev', 'variance'];
|
|
133
|
+
for (const agg of aggregations) {
|
|
134
|
+
if (!agg.operation || !validOperations.includes(agg.operation)) {
|
|
135
|
+
return {
|
|
136
|
+
Success: false,
|
|
137
|
+
Message: `Invalid operation: ${agg.operation}. Valid operations are: ${validOperations.join(', ')}`,
|
|
138
|
+
ResultCode: "INVALID_OPERATION"
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
if (!agg.outputName) {
|
|
142
|
+
return {
|
|
143
|
+
Success: false,
|
|
144
|
+
Message: "Each aggregation must have an outputName",
|
|
145
|
+
ResultCode: "MISSING_OUTPUT_NAME"
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
// Get other parameters
|
|
150
|
+
const includeEmptyGroups = includeEmptyGroupsParam?.Value?.toString()?.toLowerCase() === 'true' ?? false;
|
|
151
|
+
const sortBy = sortByParam?.Value?.toString();
|
|
152
|
+
const sortOrder = (sortOrderParam?.Value?.toString() || 'asc').toLowerCase();
|
|
153
|
+
// Perform aggregation
|
|
154
|
+
let result;
|
|
155
|
+
if (groupByFields.length > 0) {
|
|
156
|
+
result = this.aggregateWithGrouping(inputData, groupByFields, aggregations, includeEmptyGroups);
|
|
157
|
+
}
|
|
158
|
+
else {
|
|
159
|
+
result = this.aggregateWithoutGrouping(inputData, aggregations);
|
|
160
|
+
}
|
|
161
|
+
// Sort results if requested
|
|
162
|
+
if (sortBy && Array.isArray(result)) {
|
|
163
|
+
result.sort((a, b) => {
|
|
164
|
+
const aVal = a[sortBy];
|
|
165
|
+
const bVal = b[sortBy];
|
|
166
|
+
if (aVal === bVal)
|
|
167
|
+
return 0;
|
|
168
|
+
if (aVal === null || aVal === undefined)
|
|
169
|
+
return 1;
|
|
170
|
+
if (bVal === null || bVal === undefined)
|
|
171
|
+
return -1;
|
|
172
|
+
const comparison = aVal < bVal ? -1 : 1;
|
|
173
|
+
return sortOrder === 'asc' ? comparison : -comparison;
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
// Prepare output
|
|
177
|
+
const output = {
|
|
178
|
+
result: result,
|
|
179
|
+
rowCount: Array.isArray(result) ? result.length : 1,
|
|
180
|
+
inputRowCount: inputData.length,
|
|
181
|
+
groupBy: groupByFields.length > 0 ? groupByFields : undefined,
|
|
182
|
+
aggregations: aggregations.map(a => ({
|
|
183
|
+
field: a.field,
|
|
184
|
+
operation: a.operation,
|
|
185
|
+
outputName: a.outputName
|
|
186
|
+
}))
|
|
187
|
+
};
|
|
188
|
+
return {
|
|
189
|
+
Success: true,
|
|
190
|
+
ResultCode: "SUCCESS",
|
|
191
|
+
Message: JSON.stringify(output, null, 2)
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
catch (error) {
|
|
195
|
+
return {
|
|
196
|
+
Success: false,
|
|
197
|
+
Message: `Failed to aggregate data: ${error instanceof Error ? error.message : String(error)}`,
|
|
198
|
+
ResultCode: "FAILED"
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Aggregate without grouping (single result)
|
|
204
|
+
*/
|
|
205
|
+
aggregateWithoutGrouping(data, aggregations) {
|
|
206
|
+
const result = {};
|
|
207
|
+
for (const agg of aggregations) {
|
|
208
|
+
result[agg.outputName] = this.calculateAggregation(data, agg);
|
|
209
|
+
}
|
|
210
|
+
return result;
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Aggregate with grouping (multiple results)
|
|
214
|
+
*/
|
|
215
|
+
aggregateWithGrouping(data, groupByFields, aggregations, includeEmptyGroups) {
|
|
216
|
+
// Group the data
|
|
217
|
+
const groups = new Map();
|
|
218
|
+
for (const item of data) {
|
|
219
|
+
const key = groupByFields.map(field => item[field] ?? 'null').join('|');
|
|
220
|
+
if (!groups.has(key)) {
|
|
221
|
+
groups.set(key, []);
|
|
222
|
+
}
|
|
223
|
+
groups.get(key).push(item);
|
|
224
|
+
}
|
|
225
|
+
// Calculate aggregations for each group
|
|
226
|
+
const results = [];
|
|
227
|
+
for (const [key, groupData] of groups) {
|
|
228
|
+
const result = {};
|
|
229
|
+
// Add group by values
|
|
230
|
+
const keyParts = key.split('|');
|
|
231
|
+
groupByFields.forEach((field, index) => {
|
|
232
|
+
result[field] = keyParts[index] === 'null' ? null : groupData[0][field];
|
|
233
|
+
});
|
|
234
|
+
// Calculate aggregations
|
|
235
|
+
for (const agg of aggregations) {
|
|
236
|
+
result[agg.outputName] = this.calculateAggregation(groupData, agg);
|
|
237
|
+
}
|
|
238
|
+
results.push(result);
|
|
239
|
+
}
|
|
240
|
+
return results;
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* Calculate a single aggregation
|
|
244
|
+
*/
|
|
245
|
+
calculateAggregation(data, aggregation) {
|
|
246
|
+
if (data.length === 0) {
|
|
247
|
+
return aggregation.operation === 'count' ? 0 : null;
|
|
248
|
+
}
|
|
249
|
+
switch (aggregation.operation) {
|
|
250
|
+
case 'count':
|
|
251
|
+
return data.length;
|
|
252
|
+
case 'countDistinct':
|
|
253
|
+
if (!aggregation.field)
|
|
254
|
+
return data.length;
|
|
255
|
+
const uniqueValues = new Set(data.map(item => item[aggregation.field]));
|
|
256
|
+
return uniqueValues.size;
|
|
257
|
+
case 'sum':
|
|
258
|
+
return data.reduce((sum, item) => {
|
|
259
|
+
const value = this.getNumericValue(item[aggregation.field]);
|
|
260
|
+
return sum + (value ?? 0);
|
|
261
|
+
}, 0);
|
|
262
|
+
case 'avg':
|
|
263
|
+
const total = data.reduce((sum, item) => {
|
|
264
|
+
const value = this.getNumericValue(item[aggregation.field]);
|
|
265
|
+
return sum + (value ?? 0);
|
|
266
|
+
}, 0);
|
|
267
|
+
return total / data.length;
|
|
268
|
+
case 'min':
|
|
269
|
+
return data.reduce((min, item) => {
|
|
270
|
+
const value = item[aggregation.field];
|
|
271
|
+
if (value === null || value === undefined)
|
|
272
|
+
return min;
|
|
273
|
+
return min === null || value < min ? value : min;
|
|
274
|
+
}, null);
|
|
275
|
+
case 'max':
|
|
276
|
+
return data.reduce((max, item) => {
|
|
277
|
+
const value = item[aggregation.field];
|
|
278
|
+
if (value === null || value === undefined)
|
|
279
|
+
return max;
|
|
280
|
+
return max === null || value > max ? value : max;
|
|
281
|
+
}, null);
|
|
282
|
+
case 'first':
|
|
283
|
+
return data[0][aggregation.field];
|
|
284
|
+
case 'last':
|
|
285
|
+
return data[data.length - 1][aggregation.field];
|
|
286
|
+
case 'stdDev':
|
|
287
|
+
return this.calculateStandardDeviation(data, aggregation.field);
|
|
288
|
+
case 'variance':
|
|
289
|
+
return this.calculateVariance(data, aggregation.field);
|
|
290
|
+
default:
|
|
291
|
+
return null;
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
/**
|
|
295
|
+
* Get numeric value, handling null/undefined
|
|
296
|
+
*/
|
|
297
|
+
getNumericValue(value) {
|
|
298
|
+
if (value === null || value === undefined)
|
|
299
|
+
return null;
|
|
300
|
+
const num = Number(value);
|
|
301
|
+
return isNaN(num) ? null : num;
|
|
302
|
+
}
|
|
303
|
+
/**
|
|
304
|
+
* Calculate standard deviation
|
|
305
|
+
*/
|
|
306
|
+
calculateStandardDeviation(data, field) {
|
|
307
|
+
const variance = this.calculateVariance(data, field);
|
|
308
|
+
return variance === null ? null : Math.sqrt(variance);
|
|
309
|
+
}
|
|
310
|
+
/**
|
|
311
|
+
* Calculate variance
|
|
312
|
+
*/
|
|
313
|
+
calculateVariance(data, field) {
|
|
314
|
+
const values = data.map(item => this.getNumericValue(item[field])).filter(v => v !== null);
|
|
315
|
+
if (values.length === 0)
|
|
316
|
+
return null;
|
|
317
|
+
const mean = values.reduce((sum, val) => sum + val, 0) / values.length;
|
|
318
|
+
const squaredDifferences = values.map(val => Math.pow(val - mean, 2));
|
|
319
|
+
return squaredDifferences.reduce((sum, val) => sum + val, 0) / values.length;
|
|
320
|
+
}
|
|
321
|
+
};
|
|
322
|
+
exports.AggregateDataAction = AggregateDataAction;
|
|
323
|
+
exports.AggregateDataAction = AggregateDataAction = __decorate([
|
|
324
|
+
(0, global_1.RegisterClass)(actions_1.BaseAction, "Aggregate Data")
|
|
325
|
+
], AggregateDataAction);
|
|
326
|
+
/**
|
|
327
|
+
* Loader function to ensure the AggregateDataAction class is included in the bundle
|
|
328
|
+
*/
|
|
329
|
+
function LoadAggregateDataAction() {
|
|
330
|
+
// Stub function to prevent tree shaking
|
|
331
|
+
}
|
|
332
|
+
exports.LoadAggregateDataAction = LoadAggregateDataAction;
|
|
333
|
+
//# sourceMappingURL=aggregate-data.action.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aggregate-data.action.js","sourceRoot":"","sources":["../../../src/custom/data/aggregate-data.action.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { ActionResultSimple, RunActionParams } from "@memberjunction/actions-base";
|
|
2
|
+
import { BaseFileHandlerAction } from "../utilities/base-file-handler";
|
|
3
|
+
/**
|
|
4
|
+
* Action that parses CSV data into structured JSON format
|
|
5
|
+
* Supports multiple input sources, custom delimiters, and various parsing options
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* // Parse CSV with headers
|
|
10
|
+
* await runAction({
|
|
11
|
+
* ActionName: 'CSV Parser',
|
|
12
|
+
* Params: [{
|
|
13
|
+
* Name: 'CSVData',
|
|
14
|
+
* Value: 'Name,Age,City\nJohn,30,NYC\nJane,25,LA'
|
|
15
|
+
* }]
|
|
16
|
+
* });
|
|
17
|
+
*
|
|
18
|
+
* // Parse CSV from URL with custom delimiter
|
|
19
|
+
* await runAction({
|
|
20
|
+
* ActionName: 'CSV Parser',
|
|
21
|
+
* Params: [{
|
|
22
|
+
* Name: 'FileURL',
|
|
23
|
+
* Value: 'https://example.com/data.csv'
|
|
24
|
+
* }, {
|
|
25
|
+
* Name: 'Delimiter',
|
|
26
|
+
* Value: ';'
|
|
27
|
+
* }]
|
|
28
|
+
* });
|
|
29
|
+
*
|
|
30
|
+
* // Parse CSV without headers
|
|
31
|
+
* await runAction({
|
|
32
|
+
* ActionName: 'CSV Parser',
|
|
33
|
+
* Params: [{
|
|
34
|
+
* Name: 'CSVData',
|
|
35
|
+
* Value: 'John,30,NYC\nJane,25,LA'
|
|
36
|
+
* }, {
|
|
37
|
+
* Name: 'HasHeaders',
|
|
38
|
+
* Value: false
|
|
39
|
+
* }]
|
|
40
|
+
* });
|
|
41
|
+
* ```
|
|
42
|
+
*/
|
|
43
|
+
export declare class CSVParserAction extends BaseFileHandlerAction {
|
|
44
|
+
/**
|
|
45
|
+
* Parses CSV data into JSON format
|
|
46
|
+
*
|
|
47
|
+
* @param params - The action parameters containing:
|
|
48
|
+
* - CSVData: String containing CSV data (direct input)
|
|
49
|
+
* - FileID: UUID of MJ Storage file (alternative)
|
|
50
|
+
* - FileURL: URL of CSV file (alternative)
|
|
51
|
+
* - HasHeaders: Boolean indicating if first row contains headers (default: true)
|
|
52
|
+
* - Delimiter: Field delimiter character (default: ",")
|
|
53
|
+
* - QuoteChar: Character used to quote fields (default: '"')
|
|
54
|
+
* - EscapeChar: Character used to escape quotes (default: '"')
|
|
55
|
+
* - SkipEmptyRows: Skip empty rows (default: true)
|
|
56
|
+
* - TrimValues: Trim whitespace from values (default: true)
|
|
57
|
+
* - DynamicTyping: Convert numeric strings to numbers (default: true)
|
|
58
|
+
* - MaxRows: Maximum number of rows to parse (optional)
|
|
59
|
+
*
|
|
60
|
+
* @returns Parsed CSV data as array of objects (if headers) or array of arrays
|
|
61
|
+
*/
|
|
62
|
+
protected InternalRunAction(params: RunActionParams): Promise<ActionResultSimple>;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Loader function to ensure the CSVParserAction class is included in the bundle
|
|
66
|
+
*/
|
|
67
|
+
export declare function LoadCSVParserAction(): void;
|
|
68
|
+
//# sourceMappingURL=csv-parser.action.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"csv-parser.action.d.ts","sourceRoot":"","sources":["../../../src/custom/data/csv-parser.action.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAEnF,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AAGvE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,qBACa,eAAgB,SAAQ,qBAAqB;IAEtD;;;;;;;;;;;;;;;;;OAiBG;cACa,iBAAiB,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,kBAAkB,CAAC;CAwF1F;AAED;;GAEG;AACH,wBAAgB,mBAAmB,SAElC"}
|