@abyss-project/console 1.0.29 → 1.0.31

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 (70) hide show
  1. package/dist/expressions/functions/array.d.ts +2 -0
  2. package/dist/expressions/functions/array.js +252 -0
  3. package/dist/expressions/functions/crypto.d.ts +2 -0
  4. package/dist/expressions/functions/crypto.js +101 -0
  5. package/dist/expressions/functions/datetime.d.ts +2 -0
  6. package/dist/expressions/functions/datetime.js +256 -0
  7. package/dist/expressions/functions/index.d.ts +7 -0
  8. package/dist/expressions/functions/index.js +46 -0
  9. package/dist/expressions/functions/math.d.ts +2 -0
  10. package/dist/expressions/functions/math.js +174 -0
  11. package/dist/expressions/functions/string.d.ts +2 -0
  12. package/dist/expressions/functions/string.js +301 -0
  13. package/dist/expressions/functions/utility.d.ts +2 -0
  14. package/dist/expressions/functions/utility.js +230 -0
  15. package/dist/expressions/helpers.d.ts +26 -0
  16. package/dist/expressions/helpers.js +132 -0
  17. package/dist/expressions/index.d.ts +5 -0
  18. package/dist/expressions/index.js +16 -0
  19. package/dist/expressions/mapper.d.ts +9 -0
  20. package/dist/expressions/mapper.js +88 -0
  21. package/dist/expressions/parser.d.ts +3 -0
  22. package/dist/expressions/parser.js +97 -0
  23. package/dist/expressions/pipes/array-pipes.d.ts +2 -0
  24. package/dist/expressions/pipes/array-pipes.js +248 -0
  25. package/dist/expressions/pipes/index.d.ts +8 -0
  26. package/dist/expressions/pipes/index.js +40 -0
  27. package/dist/expressions/pipes/object-pipes.d.ts +2 -0
  28. package/dist/expressions/pipes/object-pipes.js +243 -0
  29. package/dist/expressions/pipes/string-pipes.d.ts +9 -0
  30. package/dist/expressions/pipes/string-pipes.js +178 -0
  31. package/dist/expressions/resolver.d.ts +12 -0
  32. package/dist/expressions/resolver.js +88 -0
  33. package/dist/expressions/types.d.ts +36 -0
  34. package/dist/expressions/types.js +2 -0
  35. package/dist/index.d.ts +2 -0
  36. package/dist/index.js +3 -1
  37. package/dist/utils/webhook-trigger.utils.js +10 -6
  38. package/dist/workflow-expressions/functions/array.d.ts +2 -0
  39. package/dist/workflow-expressions/functions/array.js +252 -0
  40. package/dist/workflow-expressions/functions/crypto.d.ts +2 -0
  41. package/dist/workflow-expressions/functions/crypto.js +101 -0
  42. package/dist/workflow-expressions/functions/datetime.d.ts +2 -0
  43. package/dist/workflow-expressions/functions/datetime.js +256 -0
  44. package/dist/workflow-expressions/functions/index.d.ts +7 -0
  45. package/dist/workflow-expressions/functions/index.js +46 -0
  46. package/dist/workflow-expressions/functions/math.d.ts +2 -0
  47. package/dist/workflow-expressions/functions/math.js +174 -0
  48. package/dist/workflow-expressions/functions/string.d.ts +2 -0
  49. package/dist/workflow-expressions/functions/string.js +301 -0
  50. package/dist/workflow-expressions/functions/utility.d.ts +2 -0
  51. package/dist/workflow-expressions/functions/utility.js +230 -0
  52. package/dist/workflow-expressions/helpers.d.ts +71 -0
  53. package/dist/workflow-expressions/helpers.js +262 -0
  54. package/dist/workflow-expressions/index.d.ts +16 -0
  55. package/dist/workflow-expressions/index.js +66 -0
  56. package/dist/workflow-expressions/parser.d.ts +8 -0
  57. package/dist/workflow-expressions/parser.js +456 -0
  58. package/dist/workflow-expressions/pipes/array-pipes.d.ts +2 -0
  59. package/dist/workflow-expressions/pipes/array-pipes.js +248 -0
  60. package/dist/workflow-expressions/pipes/index.d.ts +8 -0
  61. package/dist/workflow-expressions/pipes/index.js +40 -0
  62. package/dist/workflow-expressions/pipes/object-pipes.d.ts +2 -0
  63. package/dist/workflow-expressions/pipes/object-pipes.js +243 -0
  64. package/dist/workflow-expressions/pipes/string-pipes.d.ts +9 -0
  65. package/dist/workflow-expressions/pipes/string-pipes.js +178 -0
  66. package/dist/workflow-expressions/resolver.d.ts +8 -0
  67. package/dist/workflow-expressions/resolver.js +260 -0
  68. package/dist/workflow-expressions/types.d.ts +141 -0
  69. package/dist/workflow-expressions/types.js +33 -0
  70. package/package.json +2 -1
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getPipe = exports.hasPipe = exports.getPipeNames = exports.getPipesByCategory = exports.executePipeOperation = exports.PIPE_OPERATIONS = void 0;
4
+ const string_pipes_1 = require("./string-pipes");
5
+ const array_pipes_1 = require("./array-pipes");
6
+ const object_pipes_1 = require("./object-pipes");
7
+ exports.PIPE_OPERATIONS = {
8
+ ...string_pipes_1.stringPipes,
9
+ ...array_pipes_1.arrayPipes,
10
+ ...object_pipes_1.objectPipes,
11
+ };
12
+ function executePipeOperation(name, value, args) {
13
+ const pipe = exports.PIPE_OPERATIONS[name];
14
+ if (!pipe) {
15
+ throw new Error(`Unknown pipe operation: ${name}`);
16
+ }
17
+ return pipe.execute(value, ...args);
18
+ }
19
+ exports.executePipeOperation = executePipeOperation;
20
+ function getPipesByCategory(category) {
21
+ return Object.entries(exports.PIPE_OPERATIONS)
22
+ .filter(([, pipe]) => pipe.category === category)
23
+ .reduce((acc, [name, pipe]) => {
24
+ acc[name] = pipe;
25
+ return acc;
26
+ }, {});
27
+ }
28
+ exports.getPipesByCategory = getPipesByCategory;
29
+ function getPipeNames() {
30
+ return Object.keys(exports.PIPE_OPERATIONS);
31
+ }
32
+ exports.getPipeNames = getPipeNames;
33
+ function hasPipe(name) {
34
+ return name in exports.PIPE_OPERATIONS;
35
+ }
36
+ exports.hasPipe = hasPipe;
37
+ function getPipe(name) {
38
+ return exports.PIPE_OPERATIONS[name];
39
+ }
40
+ exports.getPipe = getPipe;
@@ -0,0 +1,2 @@
1
+ import type { PipeDefinition } from './string-pipes';
2
+ export declare const objectPipes: Record<string, PipeDefinition>;
@@ -0,0 +1,243 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.objectPipes = void 0;
4
+ exports.objectPipes = {
5
+ keys: {
6
+ name: 'keys',
7
+ description: 'Returns object keys',
8
+ category: 'object',
9
+ signature: 'keys',
10
+ examples: ['{{trigger.data | keys}}'],
11
+ execute: (value) => {
12
+ if (value && typeof value === 'object') {
13
+ return Object.keys(value);
14
+ }
15
+ return [];
16
+ },
17
+ },
18
+ values: {
19
+ name: 'values',
20
+ description: 'Returns object values',
21
+ category: 'object',
22
+ signature: 'values',
23
+ examples: ['{{trigger.data | values}}'],
24
+ execute: (value) => {
25
+ if (value && typeof value === 'object') {
26
+ return Object.values(value);
27
+ }
28
+ return [];
29
+ },
30
+ },
31
+ entries: {
32
+ name: 'entries',
33
+ description: 'Returns key-value pairs',
34
+ category: 'object',
35
+ signature: 'entries',
36
+ examples: ['{{trigger.data | entries}}'],
37
+ execute: (value) => {
38
+ if (value && typeof value === 'object') {
39
+ return Object.entries(value);
40
+ }
41
+ return [];
42
+ },
43
+ },
44
+ get: {
45
+ name: 'get',
46
+ description: 'Gets a property value',
47
+ category: 'object',
48
+ signature: 'get(path)',
49
+ examples: ['{{trigger.data | get("user.name")}}'],
50
+ execute: (value, path) => {
51
+ if (!value || typeof value !== 'object') {
52
+ return undefined;
53
+ }
54
+ const pathStr = String(path);
55
+ const keys = pathStr.split('.');
56
+ let current = value;
57
+ for (const key of keys) {
58
+ if (current === null || current === undefined) {
59
+ return undefined;
60
+ }
61
+ if (typeof current !== 'object') {
62
+ return undefined;
63
+ }
64
+ current = current[key];
65
+ }
66
+ return current;
67
+ },
68
+ },
69
+ has: {
70
+ name: 'has',
71
+ description: 'Checks if property exists',
72
+ category: 'object',
73
+ signature: 'has(key)',
74
+ examples: ['{{trigger.data | has("email")}}'],
75
+ execute: (value, key) => {
76
+ if (!value || typeof value !== 'object') {
77
+ return false;
78
+ }
79
+ return String(key) in value;
80
+ },
81
+ },
82
+ omit: {
83
+ name: 'omit',
84
+ description: 'Omits specified keys',
85
+ category: 'object',
86
+ signature: 'omit(...keys)',
87
+ examples: ['{{trigger.data | omit("password", "token")}}'],
88
+ execute: (value, ...keys) => {
89
+ if (!value || typeof value !== 'object') {
90
+ return value;
91
+ }
92
+ const obj = value;
93
+ const keysToOmit = new Set(keys.map(String));
94
+ return Object.entries(obj).reduce((acc, [key, val]) => {
95
+ if (!keysToOmit.has(key)) {
96
+ acc[key] = val;
97
+ }
98
+ return acc;
99
+ }, {});
100
+ },
101
+ },
102
+ pick: {
103
+ name: 'pick',
104
+ description: 'Picks specified keys',
105
+ category: 'object',
106
+ signature: 'pick(...keys)',
107
+ examples: ['{{trigger.data | pick("id", "name", "email")}}'],
108
+ execute: (value, ...keys) => {
109
+ if (!value || typeof value !== 'object') {
110
+ return {};
111
+ }
112
+ const obj = value;
113
+ const keysToPick = keys.map(String);
114
+ return keysToPick.reduce((acc, key) => {
115
+ if (key in obj) {
116
+ acc[key] = obj[key];
117
+ }
118
+ return acc;
119
+ }, {});
120
+ },
121
+ },
122
+ merge: {
123
+ name: 'merge',
124
+ description: 'Merges with another object',
125
+ category: 'object',
126
+ signature: 'merge(object)',
127
+ examples: ['{{trigger.data | merge(trigger.defaults)}}'],
128
+ execute: (value, other) => {
129
+ if (!value || typeof value !== 'object') {
130
+ return other || {};
131
+ }
132
+ if (!other || typeof other !== 'object') {
133
+ return value;
134
+ }
135
+ return { ...value, ...other };
136
+ },
137
+ },
138
+ base64: {
139
+ name: 'base64',
140
+ description: 'Encodes to base64',
141
+ category: 'encoding',
142
+ signature: 'base64',
143
+ examples: ['{{trigger.text | base64}}'],
144
+ execute: (value) => {
145
+ return Buffer.from(String(value)).toString('base64');
146
+ },
147
+ },
148
+ base64decode: {
149
+ name: 'base64decode',
150
+ description: 'Decodes from base64',
151
+ category: 'encoding',
152
+ signature: 'base64decode',
153
+ examples: ['{{trigger.encoded | base64decode}}'],
154
+ execute: (value) => {
155
+ try {
156
+ return Buffer.from(String(value), 'base64').toString('utf-8');
157
+ }
158
+ catch {
159
+ return value;
160
+ }
161
+ },
162
+ },
163
+ urlEncode: {
164
+ name: 'urlEncode',
165
+ description: 'URL encodes a string',
166
+ category: 'encoding',
167
+ signature: 'urlEncode',
168
+ examples: ['{{trigger.query | urlEncode}}'],
169
+ execute: (value) => {
170
+ return encodeURIComponent(String(value));
171
+ },
172
+ },
173
+ urlDecode: {
174
+ name: 'urlDecode',
175
+ description: 'URL decodes a string',
176
+ category: 'encoding',
177
+ signature: 'urlDecode',
178
+ examples: ['{{trigger.encoded | urlDecode}}'],
179
+ execute: (value) => {
180
+ try {
181
+ return decodeURIComponent(String(value));
182
+ }
183
+ catch {
184
+ return value;
185
+ }
186
+ },
187
+ },
188
+ json: {
189
+ name: 'json',
190
+ description: 'Converts to JSON string',
191
+ category: 'formatting',
192
+ signature: 'json',
193
+ examples: ['{{trigger.data | json}}'],
194
+ execute: (value) => {
195
+ return JSON.stringify(value);
196
+ },
197
+ },
198
+ jsonPretty: {
199
+ name: 'jsonPretty',
200
+ description: 'Converts to pretty JSON',
201
+ category: 'formatting',
202
+ signature: 'jsonPretty',
203
+ examples: ['{{trigger.data | jsonPretty}}'],
204
+ execute: (value) => {
205
+ return JSON.stringify(value, null, 2);
206
+ },
207
+ },
208
+ parseJson: {
209
+ name: 'parseJson',
210
+ description: 'Parses JSON string',
211
+ category: 'formatting',
212
+ signature: 'parseJson',
213
+ examples: ['{{trigger.jsonString | parseJson}}'],
214
+ execute: (value) => {
215
+ try {
216
+ return JSON.parse(String(value));
217
+ }
218
+ catch {
219
+ return value;
220
+ }
221
+ },
222
+ },
223
+ toFixed: {
224
+ name: 'toFixed',
225
+ description: 'Formats number with fixed decimals',
226
+ category: 'number',
227
+ signature: 'toFixed(decimals)',
228
+ examples: ['{{trigger.price | toFixed(2)}}'],
229
+ execute: (value, decimals) => {
230
+ return Number(value).toFixed(Number(decimals));
231
+ },
232
+ },
233
+ toPrecision: {
234
+ name: 'toPrecision',
235
+ description: 'Formats number with precision',
236
+ category: 'number',
237
+ signature: 'toPrecision(precision)',
238
+ examples: ['{{trigger.value | toPrecision(4)}}'],
239
+ execute: (value, precision) => {
240
+ return Number(value).toPrecision(Number(precision));
241
+ },
242
+ },
243
+ };
@@ -0,0 +1,9 @@
1
+ export interface PipeDefinition {
2
+ name: string;
3
+ description: string;
4
+ category: 'string' | 'array' | 'object' | 'number' | 'date' | 'encoding' | 'formatting';
5
+ signature: string;
6
+ examples: string[];
7
+ execute: (value: unknown, ...args: unknown[]) => unknown;
8
+ }
9
+ export declare const stringPipes: Record<string, PipeDefinition>;
@@ -0,0 +1,178 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.stringPipes = void 0;
4
+ exports.stringPipes = {
5
+ upper: {
6
+ name: 'upper',
7
+ description: 'Converts to uppercase',
8
+ category: 'string',
9
+ signature: 'upper',
10
+ examples: ['{{trigger.name | upper}}'],
11
+ execute: (value) => String(value).toUpperCase(),
12
+ },
13
+ lower: {
14
+ name: 'lower',
15
+ description: 'Converts to lowercase',
16
+ category: 'string',
17
+ signature: 'lower',
18
+ examples: ['{{trigger.email | lower}}'],
19
+ execute: (value) => String(value).toLowerCase(),
20
+ },
21
+ capitalize: {
22
+ name: 'capitalize',
23
+ description: 'Capitalizes the first letter',
24
+ category: 'string',
25
+ signature: 'capitalize',
26
+ examples: ['{{trigger.name | capitalize}}'],
27
+ execute: (value) => {
28
+ const str = String(value);
29
+ return str.charAt(0).toUpperCase() + str.slice(1).toLowerCase();
30
+ },
31
+ },
32
+ trim: {
33
+ name: 'trim',
34
+ description: 'Removes whitespace from both ends',
35
+ category: 'string',
36
+ signature: 'trim',
37
+ examples: ['{{trigger.input | trim}}'],
38
+ execute: (value) => String(value).trim(),
39
+ },
40
+ truncate: {
41
+ name: 'truncate',
42
+ description: 'Truncates a string to a specified length',
43
+ category: 'string',
44
+ signature: 'truncate(length)',
45
+ examples: ['{{trigger.description | truncate(100)}}'],
46
+ execute: (value, length) => {
47
+ const str = String(value);
48
+ const len = Number(length);
49
+ return str.length > len ? str.substring(0, len) + '...' : str;
50
+ },
51
+ },
52
+ replace: {
53
+ name: 'replace',
54
+ description: 'Replaces occurrences of a pattern',
55
+ category: 'string',
56
+ signature: 'replace(search, replacement)',
57
+ examples: ['{{trigger.text | replace("old", "new")}}'],
58
+ execute: (value, search, replacement) => {
59
+ const searchStr = String(search);
60
+ const replaceStr = String(replacement);
61
+ return String(value).replace(new RegExp(searchStr.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'), 'g'), replaceStr);
62
+ },
63
+ },
64
+ split: {
65
+ name: 'split',
66
+ description: 'Splits a string into an array',
67
+ category: 'string',
68
+ signature: 'split(separator)',
69
+ examples: ['{{trigger.tags | split(",")}}'],
70
+ execute: (value, separator) => {
71
+ return String(value).split(String(separator));
72
+ },
73
+ },
74
+ substring: {
75
+ name: 'substring',
76
+ description: 'Extracts a substring',
77
+ category: 'string',
78
+ signature: 'substring(start, end?)',
79
+ examples: ['{{trigger.id | substring(0, 8)}}'],
80
+ execute: (value, start, end) => {
81
+ return String(value).substring(Number(start), end !== undefined ? Number(end) : undefined);
82
+ },
83
+ },
84
+ padStart: {
85
+ name: 'padStart',
86
+ description: 'Pads a string from the start',
87
+ category: 'string',
88
+ signature: 'padStart(length, padString?)',
89
+ examples: ['{{trigger.id | padStart(10, "0")}}'],
90
+ execute: (value, length, padString) => {
91
+ return String(value).padStart(Number(length), padString !== undefined ? String(padString) : ' ');
92
+ },
93
+ },
94
+ padEnd: {
95
+ name: 'padEnd',
96
+ description: 'Pads a string from the end',
97
+ category: 'string',
98
+ signature: 'padEnd(length, padString?)',
99
+ examples: ['{{trigger.code | padEnd(5, "X")}}'],
100
+ execute: (value, length, padString) => {
101
+ return String(value).padEnd(Number(length), padString !== undefined ? String(padString) : ' ');
102
+ },
103
+ },
104
+ repeat: {
105
+ name: 'repeat',
106
+ description: 'Repeats a string n times',
107
+ category: 'string',
108
+ signature: 'repeat(count)',
109
+ examples: ['{{trigger.char | repeat(3)}}'],
110
+ execute: (value, count) => {
111
+ return String(value).repeat(Number(count));
112
+ },
113
+ },
114
+ reverse: {
115
+ name: 'reverse',
116
+ description: 'Reverses a string',
117
+ category: 'string',
118
+ signature: 'reverse',
119
+ examples: ['{{trigger.text | reverse}}'],
120
+ execute: (value) => {
121
+ return String(value).split('').reverse().join('');
122
+ },
123
+ },
124
+ slugify: {
125
+ name: 'slugify',
126
+ description: 'Converts to URL-friendly slug',
127
+ category: 'string',
128
+ signature: 'slugify',
129
+ examples: ['{{trigger.title | slugify}}'],
130
+ execute: (value) => {
131
+ return String(value)
132
+ .toLowerCase()
133
+ .trim()
134
+ .replace(/[^\w\s-]/g, '')
135
+ .replace(/[\s_-]+/g, '-')
136
+ .replace(/^-+|-+$/g, '');
137
+ },
138
+ },
139
+ camelCase: {
140
+ name: 'camelCase',
141
+ description: 'Converts to camelCase',
142
+ category: 'string',
143
+ signature: 'camelCase',
144
+ examples: ['{{trigger.text | camelCase}}'],
145
+ execute: (value) => {
146
+ return String(value)
147
+ .replace(/[^\w\s]/g, '')
148
+ .replace(/\s+(.)/g, (_, char) => char.toUpperCase())
149
+ .replace(/^\w/, (char) => char.toLowerCase());
150
+ },
151
+ },
152
+ kebabCase: {
153
+ name: 'kebabCase',
154
+ description: 'Converts to kebab-case',
155
+ category: 'string',
156
+ signature: 'kebabCase',
157
+ examples: ['{{trigger.text | kebabCase}}'],
158
+ execute: (value) => {
159
+ return String(value)
160
+ .replace(/([a-z])([A-Z])/g, '$1-$2')
161
+ .replace(/[\s_]+/g, '-')
162
+ .toLowerCase();
163
+ },
164
+ },
165
+ snakeCase: {
166
+ name: 'snakeCase',
167
+ description: 'Converts to snake_case',
168
+ category: 'string',
169
+ signature: 'snakeCase',
170
+ examples: ['{{trigger.text | snakeCase}}'],
171
+ execute: (value) => {
172
+ return String(value)
173
+ .replace(/([a-z])([A-Z])/g, '$1_$2')
174
+ .replace(/[\s-]+/g, '_')
175
+ .toLowerCase();
176
+ },
177
+ },
178
+ };
@@ -0,0 +1,8 @@
1
+ import type { ParsedExpression, WorkflowContext } from './types';
2
+ export declare function buildResolverContext(workflowContext?: WorkflowContext): Record<string, unknown>;
3
+ export declare function resolvePathValue(path: string, context: Record<string, unknown>): unknown;
4
+ export declare function evaluateExpression(parsed: ParsedExpression, context: Record<string, unknown>, secretsMap?: Map<string, string>): unknown;
5
+ export declare function interpolateString(template: string, context: Record<string, unknown>, secretsMap?: Map<string, string>, options?: {
6
+ maskSecrets?: boolean;
7
+ }): string;
8
+ export declare function resolveExpression(expression: string, context: Record<string, unknown>, secretsMap?: Map<string, string>): unknown;