@abyss-project/console 1.0.30 → 1.0.32
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/index.d.ts +2 -4
- package/dist/index.js +2 -4
- package/dist/workflow-expressions/helpers.d.ts +45 -0
- package/dist/workflow-expressions/helpers.js +133 -1
- package/dist/workflow-expressions/index.d.ts +2 -1
- package/dist/workflow-expressions/index.js +6 -1
- package/dist/workflow-expressions/types.d.ts +2 -1
- package/dist/workflow-expressions/types.js +1 -0
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -13,10 +13,8 @@ import * as secretPublicApi from './api/secret-public.api';
|
|
|
13
13
|
export * from './utils/cidr.util';
|
|
14
14
|
export * from './types';
|
|
15
15
|
export * from './utils';
|
|
16
|
-
|
|
17
|
-
export
|
|
18
|
-
import * as WorkflowExpression from './workflow-expressions';
|
|
19
|
-
export { WorkflowExpression };
|
|
16
|
+
export * as GenericExpression from './expressions';
|
|
17
|
+
export * as WorkflowExpression from './workflow-expressions';
|
|
20
18
|
export declare const API_KEY_APPLICATION_HEADER = "abyss-console-api-key-application";
|
|
21
19
|
export declare const ADMIN_TOKEN_HEADER = "abyss-admin-token";
|
|
22
20
|
export declare const HEADER_WEBHOOK_SIGNATURE_NAME = "abyss-console-webhook-signature";
|
package/dist/index.js
CHANGED
|
@@ -46,10 +46,8 @@ const secretPublicApi = __importStar(require("./api/secret-public.api"));
|
|
|
46
46
|
__exportStar(require("./utils/cidr.util"), exports);
|
|
47
47
|
__exportStar(require("./types"), exports);
|
|
48
48
|
__exportStar(require("./utils"), exports);
|
|
49
|
-
|
|
50
|
-
exports.
|
|
51
|
-
const WorkflowExpression = __importStar(require("./workflow-expressions"));
|
|
52
|
-
exports.WorkflowExpression = WorkflowExpression;
|
|
49
|
+
exports.GenericExpression = __importStar(require("./expressions"));
|
|
50
|
+
exports.WorkflowExpression = __importStar(require("./workflow-expressions"));
|
|
53
51
|
const MONITOR_DEFAULT_BASE_URL = 'https://console-api.abyss-project.fr/api/';
|
|
54
52
|
exports.API_KEY_APPLICATION_HEADER = 'abyss-console-api-key-application';
|
|
55
53
|
exports.ADMIN_TOKEN_HEADER = 'abyss-admin-token';
|
|
@@ -1,3 +1,21 @@
|
|
|
1
|
+
import { DataSourceType, ParsedExpression } from './types';
|
|
2
|
+
export interface ResourceMapping {
|
|
3
|
+
type: DataSourceType;
|
|
4
|
+
id: string;
|
|
5
|
+
name: string;
|
|
6
|
+
displayPath: string;
|
|
7
|
+
savePath: string;
|
|
8
|
+
}
|
|
9
|
+
export interface EnrichedToken {
|
|
10
|
+
type: 'text' | 'expression' | 'error';
|
|
11
|
+
value: string;
|
|
12
|
+
rawValue: string;
|
|
13
|
+
start: number;
|
|
14
|
+
end: number;
|
|
15
|
+
parsed?: ParsedExpression;
|
|
16
|
+
source?: DataSourceType | null;
|
|
17
|
+
isSecret?: boolean;
|
|
18
|
+
}
|
|
1
19
|
export declare function buildExpressionString(path: string, operations?: Array<{
|
|
2
20
|
name: string;
|
|
3
21
|
args: unknown[];
|
|
@@ -22,5 +40,32 @@ export declare function getCurrentExpressionContext(text: string, cursorPos: num
|
|
|
22
40
|
end: number;
|
|
23
41
|
path: string;
|
|
24
42
|
} | null;
|
|
43
|
+
export declare function tokenizeEnriched(template: string): EnrichedToken[];
|
|
44
|
+
export declare function validateExpression(expression: string, context: Record<string, unknown>): {
|
|
45
|
+
isValid: boolean;
|
|
46
|
+
errors: Array<{
|
|
47
|
+
type: 'error';
|
|
48
|
+
message: string;
|
|
49
|
+
start: number;
|
|
50
|
+
end: number;
|
|
51
|
+
path?: string;
|
|
52
|
+
}>;
|
|
53
|
+
warnings: Array<{
|
|
54
|
+
type: 'warning';
|
|
55
|
+
message: string;
|
|
56
|
+
start: number;
|
|
57
|
+
end: number;
|
|
58
|
+
path?: string;
|
|
59
|
+
suggestion?: string;
|
|
60
|
+
}>;
|
|
61
|
+
tokens: EnrichedToken[];
|
|
62
|
+
};
|
|
63
|
+
export declare function generatePreview(expression: string, context: Record<string, unknown>): {
|
|
64
|
+
value: unknown;
|
|
65
|
+
type: string;
|
|
66
|
+
error?: string;
|
|
67
|
+
};
|
|
68
|
+
export declare function convertExpressionToSaveFormat(expression: string, mappings: ResourceMapping[]): string;
|
|
69
|
+
export declare function convertExpressionToDisplayFormat(expression: string, mappings: ResourceMapping[]): string;
|
|
25
70
|
export declare function getValueType(value: unknown): string;
|
|
26
71
|
export {};
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getValueType = exports.getCurrentExpressionContext = exports.parseOperations = exports.extractPaths = exports.isInsideExpression = exports.hasReferences = exports.hasExpressions = exports.buildReferenceString = exports.buildExpressionString = void 0;
|
|
3
|
+
exports.getValueType = exports.convertExpressionToDisplayFormat = exports.convertExpressionToSaveFormat = exports.generatePreview = exports.validateExpression = exports.tokenizeEnriched = exports.getCurrentExpressionContext = exports.parseOperations = exports.extractPaths = exports.isInsideExpression = exports.hasReferences = exports.hasExpressions = exports.buildReferenceString = exports.buildExpressionString = void 0;
|
|
4
|
+
const types_1 = require("./types");
|
|
5
|
+
const parser_1 = require("./parser");
|
|
6
|
+
const parser_2 = require("./parser");
|
|
7
|
+
const resolver_1 = require("./resolver");
|
|
8
|
+
const parser_3 = require("./parser");
|
|
4
9
|
function buildExpressionString(path, operations) {
|
|
5
10
|
let expr = `{{${path}`;
|
|
6
11
|
if (operations && operations.length > 0) {
|
|
@@ -115,6 +120,133 @@ function getCurrentExpressionContext(text, cursorPos) {
|
|
|
115
120
|
};
|
|
116
121
|
}
|
|
117
122
|
exports.getCurrentExpressionContext = getCurrentExpressionContext;
|
|
123
|
+
function tokenizeEnriched(template) {
|
|
124
|
+
const backendTokens = (0, parser_1.tokenizeTemplate)(template);
|
|
125
|
+
const result = [];
|
|
126
|
+
let currentPos = 0;
|
|
127
|
+
for (const token of backendTokens) {
|
|
128
|
+
if (token.type === 'text') {
|
|
129
|
+
result.push({
|
|
130
|
+
type: 'text',
|
|
131
|
+
value: token.value,
|
|
132
|
+
rawValue: token.value,
|
|
133
|
+
start: currentPos,
|
|
134
|
+
end: currentPos + token.value.length,
|
|
135
|
+
});
|
|
136
|
+
currentPos += token.value.length;
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
const exprValue = token.value.trim();
|
|
140
|
+
const parsed = (0, parser_2.parseExpression)(exprValue);
|
|
141
|
+
const source = (0, parser_3.detectDataSource)(exprValue);
|
|
142
|
+
const rawValue = `{{${token.value}}}`;
|
|
143
|
+
result.push({
|
|
144
|
+
type: parsed.isValid ? 'expression' : 'error',
|
|
145
|
+
value: exprValue,
|
|
146
|
+
rawValue: rawValue,
|
|
147
|
+
start: currentPos,
|
|
148
|
+
end: currentPos + rawValue.length,
|
|
149
|
+
parsed,
|
|
150
|
+
source,
|
|
151
|
+
isSecret: source === types_1.DataSourceType.SECRETS,
|
|
152
|
+
});
|
|
153
|
+
currentPos += rawValue.length;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
return result;
|
|
157
|
+
}
|
|
158
|
+
exports.tokenizeEnriched = tokenizeEnriched;
|
|
159
|
+
function validateExpression(expression, context) {
|
|
160
|
+
const tokens = tokenizeEnriched(expression);
|
|
161
|
+
try {
|
|
162
|
+
const parsed = (0, parser_2.parseExpression)(expression);
|
|
163
|
+
if (!parsed.isValid) {
|
|
164
|
+
return {
|
|
165
|
+
isValid: false,
|
|
166
|
+
errors: [
|
|
167
|
+
{
|
|
168
|
+
type: 'error',
|
|
169
|
+
message: parsed.error || 'Invalid expression',
|
|
170
|
+
start: 0,
|
|
171
|
+
end: expression.length,
|
|
172
|
+
path: expression,
|
|
173
|
+
},
|
|
174
|
+
],
|
|
175
|
+
warnings: [],
|
|
176
|
+
tokens,
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
(0, resolver_1.evaluateExpression)(parsed, context);
|
|
180
|
+
return {
|
|
181
|
+
isValid: true,
|
|
182
|
+
errors: [],
|
|
183
|
+
warnings: [],
|
|
184
|
+
tokens,
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
catch (error) {
|
|
188
|
+
return {
|
|
189
|
+
isValid: false,
|
|
190
|
+
errors: [
|
|
191
|
+
{
|
|
192
|
+
type: 'error',
|
|
193
|
+
message: error instanceof Error ? error.message : 'Validation error',
|
|
194
|
+
start: 0,
|
|
195
|
+
end: expression.length,
|
|
196
|
+
path: expression,
|
|
197
|
+
},
|
|
198
|
+
],
|
|
199
|
+
warnings: [],
|
|
200
|
+
tokens,
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
exports.validateExpression = validateExpression;
|
|
205
|
+
function generatePreview(expression, context) {
|
|
206
|
+
try {
|
|
207
|
+
const parsed = (0, parser_2.parseExpression)(expression);
|
|
208
|
+
if (!parsed.isValid) {
|
|
209
|
+
return { value: null, type: 'error', error: parsed.error };
|
|
210
|
+
}
|
|
211
|
+
const value = (0, resolver_1.evaluateExpression)(parsed, context);
|
|
212
|
+
const type = value === null ? 'null' : typeof value;
|
|
213
|
+
return { value, type };
|
|
214
|
+
}
|
|
215
|
+
catch (error) {
|
|
216
|
+
return {
|
|
217
|
+
value: null,
|
|
218
|
+
type: 'error',
|
|
219
|
+
error: error instanceof Error ? error.message : 'Evaluation error',
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
exports.generatePreview = generatePreview;
|
|
224
|
+
function convertExpressionToSaveFormat(expression, mappings) {
|
|
225
|
+
if (!expression || mappings.length === 0) {
|
|
226
|
+
return expression;
|
|
227
|
+
}
|
|
228
|
+
let result = expression;
|
|
229
|
+
const sortedMappings = [...mappings].sort((a, b) => b.displayPath.length - a.displayPath.length);
|
|
230
|
+
for (const mapping of sortedMappings) {
|
|
231
|
+
const regex = new RegExp(mapping.displayPath.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'), 'g');
|
|
232
|
+
result = result.replace(regex, mapping.savePath);
|
|
233
|
+
}
|
|
234
|
+
return result;
|
|
235
|
+
}
|
|
236
|
+
exports.convertExpressionToSaveFormat = convertExpressionToSaveFormat;
|
|
237
|
+
function convertExpressionToDisplayFormat(expression, mappings) {
|
|
238
|
+
if (!expression || mappings.length === 0) {
|
|
239
|
+
return expression;
|
|
240
|
+
}
|
|
241
|
+
let result = expression;
|
|
242
|
+
const sortedMappings = [...mappings].sort((a, b) => b.savePath.length - a.savePath.length);
|
|
243
|
+
for (const mapping of sortedMappings) {
|
|
244
|
+
const regex = new RegExp(mapping.savePath.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'), 'g');
|
|
245
|
+
result = result.replace(regex, mapping.displayPath);
|
|
246
|
+
}
|
|
247
|
+
return result;
|
|
248
|
+
}
|
|
249
|
+
exports.convertExpressionToDisplayFormat = convertExpressionToDisplayFormat;
|
|
118
250
|
function getValueType(value) {
|
|
119
251
|
if (value === null) {
|
|
120
252
|
return 'null';
|
|
@@ -6,7 +6,8 @@ export { BUILT_IN_FUNCTIONS, executeFunction, getFunctionsByCategory, getFunctio
|
|
|
6
6
|
export { PIPE_OPERATIONS, executePipeOperation, getPipesByCategory, getPipeNames, hasPipe, getPipe, } from './pipes';
|
|
7
7
|
export type { PipeDefinition } from './pipes/string-pipes';
|
|
8
8
|
import type { WorkflowContext } from './types';
|
|
9
|
-
export { buildExpressionString, buildReferenceString, hasExpressions, hasReferences, isInsideExpression, extractPaths, parseOperations, getCurrentExpressionContext, getValueType, } from './helpers';
|
|
9
|
+
export { buildExpressionString, buildReferenceString, hasExpressions, hasReferences, isInsideExpression, extractPaths, parseOperations, getCurrentExpressionContext, getValueType, tokenizeEnriched, validateExpression, generatePreview, convertExpressionToSaveFormat, convertExpressionToDisplayFormat, } from './helpers';
|
|
10
|
+
export type { ResourceMapping, EnrichedToken } from './helpers';
|
|
10
11
|
export declare function evaluate(expression: string, workflowContext: WorkflowContext, secretsMap?: Map<string, string>): unknown;
|
|
11
12
|
export declare function interpolate(template: string, workflowContext: WorkflowContext, secretsMap?: Map<string, string>, options?: {
|
|
12
13
|
maskSecrets?: boolean;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.extractReferences = exports.hasDynamicContent = exports.interpolate = exports.evaluate = exports.getValueType = exports.getCurrentExpressionContext = exports.parseOperations = exports.extractPaths = exports.isInsideExpression = exports.hasReferences = exports.hasExpressions = exports.buildReferenceString = exports.buildExpressionString = exports.getPipe = exports.hasPipe = exports.getPipeNames = exports.getPipesByCategory = exports.executePipeOperation = exports.PIPE_OPERATIONS = exports.getFunction = exports.hasFunction = exports.getFunctionNames = exports.getFunctionsByCategory = exports.executeFunction = exports.BUILT_IN_FUNCTIONS = exports.resolveExpression = exports.interpolateString = exports.evaluateExpression = exports.resolvePathValue = exports.buildResolverContext = exports.tokenizeTemplate = exports.parsePathSegments = exports.detectDataSource = exports.parseExpression = exports.OPERATOR_PRECEDENCE = exports.DataSourceType = void 0;
|
|
3
|
+
exports.extractReferences = exports.hasDynamicContent = exports.interpolate = exports.evaluate = exports.convertExpressionToDisplayFormat = exports.convertExpressionToSaveFormat = exports.generatePreview = exports.validateExpression = exports.tokenizeEnriched = exports.getValueType = exports.getCurrentExpressionContext = exports.parseOperations = exports.extractPaths = exports.isInsideExpression = exports.hasReferences = exports.hasExpressions = exports.buildReferenceString = exports.buildExpressionString = exports.getPipe = exports.hasPipe = exports.getPipeNames = exports.getPipesByCategory = exports.executePipeOperation = exports.PIPE_OPERATIONS = exports.getFunction = exports.hasFunction = exports.getFunctionNames = exports.getFunctionsByCategory = exports.executeFunction = exports.BUILT_IN_FUNCTIONS = exports.resolveExpression = exports.interpolateString = exports.evaluateExpression = exports.resolvePathValue = exports.buildResolverContext = exports.tokenizeTemplate = exports.parsePathSegments = exports.detectDataSource = exports.parseExpression = exports.OPERATOR_PRECEDENCE = exports.DataSourceType = void 0;
|
|
4
4
|
var types_1 = require("./types");
|
|
5
5
|
Object.defineProperty(exports, "DataSourceType", { enumerable: true, get: function () { return types_1.DataSourceType; } });
|
|
6
6
|
Object.defineProperty(exports, "OPERATOR_PRECEDENCE", { enumerable: true, get: function () { return types_1.OPERATOR_PRECEDENCE; } });
|
|
@@ -40,6 +40,11 @@ Object.defineProperty(exports, "extractPaths", { enumerable: true, get: function
|
|
|
40
40
|
Object.defineProperty(exports, "parseOperations", { enumerable: true, get: function () { return helpers_1.parseOperations; } });
|
|
41
41
|
Object.defineProperty(exports, "getCurrentExpressionContext", { enumerable: true, get: function () { return helpers_1.getCurrentExpressionContext; } });
|
|
42
42
|
Object.defineProperty(exports, "getValueType", { enumerable: true, get: function () { return helpers_1.getValueType; } });
|
|
43
|
+
Object.defineProperty(exports, "tokenizeEnriched", { enumerable: true, get: function () { return helpers_1.tokenizeEnriched; } });
|
|
44
|
+
Object.defineProperty(exports, "validateExpression", { enumerable: true, get: function () { return helpers_1.validateExpression; } });
|
|
45
|
+
Object.defineProperty(exports, "generatePreview", { enumerable: true, get: function () { return helpers_1.generatePreview; } });
|
|
46
|
+
Object.defineProperty(exports, "convertExpressionToSaveFormat", { enumerable: true, get: function () { return helpers_1.convertExpressionToSaveFormat; } });
|
|
47
|
+
Object.defineProperty(exports, "convertExpressionToDisplayFormat", { enumerable: true, get: function () { return helpers_1.convertExpressionToDisplayFormat; } });
|
|
43
48
|
function evaluate(expression, workflowContext, secretsMap) {
|
|
44
49
|
const context = (0, resolver_2.buildResolverContext)(workflowContext);
|
|
45
50
|
return (0, resolver_2.resolveExpression)(expression, context, secretsMap);
|
|
@@ -10,7 +10,8 @@ export declare enum DataSourceType {
|
|
|
10
10
|
PROJECT = "project",
|
|
11
11
|
ENV = "env",
|
|
12
12
|
ABYSS_CONFIG = "abyss",
|
|
13
|
-
FUNCTIONS = "fn"
|
|
13
|
+
FUNCTIONS = "fn",
|
|
14
|
+
OPERATORS = "op"
|
|
14
15
|
}
|
|
15
16
|
export declare const OPERATOR_PRECEDENCE: Record<string, number>;
|
|
16
17
|
export type ParsedExpression = PathExpression | FunctionExpression | BinaryExpression | UnaryExpression | TernaryExpression | LiteralExpression | GroupExpression;
|
|
@@ -14,6 +14,7 @@ var DataSourceType;
|
|
|
14
14
|
DataSourceType["ENV"] = "env";
|
|
15
15
|
DataSourceType["ABYSS_CONFIG"] = "abyss";
|
|
16
16
|
DataSourceType["FUNCTIONS"] = "fn";
|
|
17
|
+
DataSourceType["OPERATORS"] = "op";
|
|
17
18
|
})(DataSourceType || (exports.DataSourceType = DataSourceType = {}));
|
|
18
19
|
exports.OPERATOR_PRECEDENCE = {
|
|
19
20
|
'||': 1,
|