@marktoflow/core 2.0.2 → 2.0.4
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/README.md +69 -6
- package/dist/built-in-operations.d.ts +2 -136
- package/dist/built-in-operations.d.ts.map +1 -1
- package/dist/built-in-operations.js +7 -743
- package/dist/built-in-operations.js.map +1 -1
- package/dist/engine/conditions.d.ts +29 -0
- package/dist/engine/conditions.d.ts.map +1 -0
- package/dist/engine/conditions.js +109 -0
- package/dist/engine/conditions.js.map +1 -0
- package/dist/engine/control-flow.d.ts +35 -0
- package/dist/engine/control-flow.d.ts.map +1 -0
- package/dist/engine/control-flow.js +653 -0
- package/dist/engine/control-flow.js.map +1 -0
- package/dist/engine/index.d.ts +12 -0
- package/dist/engine/index.d.ts.map +1 -0
- package/dist/engine/index.js +11 -0
- package/dist/engine/index.js.map +1 -0
- package/dist/engine/retry.d.ts +35 -0
- package/dist/engine/retry.d.ts.map +1 -0
- package/dist/engine/retry.js +86 -0
- package/dist/engine/retry.js.map +1 -0
- package/dist/engine/subworkflow.d.ts +31 -0
- package/dist/engine/subworkflow.d.ts.map +1 -0
- package/dist/engine/subworkflow.js +240 -0
- package/dist/engine/subworkflow.js.map +1 -0
- package/dist/engine/types.d.ts +55 -0
- package/dist/engine/types.d.ts.map +1 -0
- package/dist/engine/types.js +5 -0
- package/dist/{secrets → engine}/types.js.map +1 -1
- package/dist/engine/variable-resolution.d.ts +29 -0
- package/dist/engine/variable-resolution.d.ts.map +1 -0
- package/dist/engine/variable-resolution.js +130 -0
- package/dist/engine/variable-resolution.js.map +1 -0
- package/dist/engine.d.ts +17 -211
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +84 -1351
- package/dist/engine.js.map +1 -1
- package/dist/file-operations.js +1 -1
- package/dist/file-operations.js.map +1 -1
- package/dist/filters/array.d.ts +9 -0
- package/dist/filters/array.d.ts.map +1 -0
- package/dist/filters/array.js +41 -0
- package/dist/filters/array.js.map +1 -0
- package/dist/filters/date.d.ts +9 -0
- package/dist/filters/date.d.ts.map +1 -0
- package/dist/filters/date.js +51 -0
- package/dist/filters/date.js.map +1 -0
- package/dist/filters/index.d.ts +13 -0
- package/dist/filters/index.d.ts.map +1 -0
- package/dist/filters/index.js +13 -0
- package/dist/filters/index.js.map +1 -0
- package/dist/filters/json.d.ts +6 -0
- package/dist/filters/json.d.ts.map +1 -0
- package/dist/filters/json.js +15 -0
- package/dist/filters/json.js.map +1 -0
- package/dist/filters/logic.d.ts +8 -0
- package/dist/filters/logic.d.ts.map +1 -0
- package/dist/filters/logic.js +28 -0
- package/dist/filters/logic.js.map +1 -0
- package/dist/filters/math.d.ts +13 -0
- package/dist/filters/math.d.ts.map +1 -0
- package/dist/filters/math.js +39 -0
- package/dist/filters/math.js.map +1 -0
- package/dist/filters/object.d.ts +11 -0
- package/dist/filters/object.d.ts.map +1 -0
- package/dist/filters/object.js +64 -0
- package/dist/filters/object.js.map +1 -0
- package/dist/filters/regex.d.ts +7 -0
- package/dist/filters/regex.d.ts.map +1 -0
- package/dist/filters/regex.js +38 -0
- package/dist/filters/regex.js.map +1 -0
- package/dist/filters/string.d.ts +11 -0
- package/dist/filters/string.d.ts.map +1 -0
- package/dist/filters/string.js +35 -0
- package/dist/filters/string.js.map +1 -0
- package/dist/filters/type-checks.d.ts +10 -0
- package/dist/filters/type-checks.d.ts.map +1 -0
- package/dist/filters/type-checks.js +30 -0
- package/dist/filters/type-checks.js.map +1 -0
- package/dist/index.d.ts +5 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -1
- package/dist/index.js.map +1 -1
- package/dist/nunjucks-filters.d.ts +2 -261
- package/dist/nunjucks-filters.d.ts.map +1 -1
- package/dist/nunjucks-filters.js +24 -582
- package/dist/nunjucks-filters.js.map +1 -1
- package/dist/operations/compress.d.ts +6 -0
- package/dist/operations/compress.d.ts.map +1 -0
- package/dist/operations/compress.js +36 -0
- package/dist/operations/compress.js.map +1 -0
- package/dist/operations/crypto.d.ts +5 -0
- package/dist/operations/crypto.d.ts.map +1 -0
- package/dist/operations/crypto.js +61 -0
- package/dist/operations/crypto.js.map +1 -0
- package/dist/operations/data-ops.d.ts +10 -0
- package/dist/operations/data-ops.d.ts.map +1 -0
- package/dist/operations/data-ops.js +124 -0
- package/dist/operations/data-ops.js.map +1 -0
- package/dist/operations/datetime.d.ts +5 -0
- package/dist/operations/datetime.d.ts.map +1 -0
- package/dist/operations/datetime.js +86 -0
- package/dist/operations/datetime.js.map +1 -0
- package/dist/operations/extract.d.ts +23 -0
- package/dist/operations/extract.d.ts.map +1 -0
- package/dist/operations/extract.js +31 -0
- package/dist/operations/extract.js.map +1 -0
- package/dist/operations/format.d.ts +14 -0
- package/dist/operations/format.d.ts.map +1 -0
- package/dist/operations/format.js +84 -0
- package/dist/operations/format.js.map +1 -0
- package/dist/operations/index.d.ts +13 -0
- package/dist/operations/index.d.ts.map +1 -0
- package/dist/operations/index.js +13 -0
- package/dist/operations/index.js.map +1 -0
- package/dist/operations/parse.d.ts +5 -0
- package/dist/operations/parse.d.ts.map +1 -0
- package/dist/operations/parse.js +59 -0
- package/dist/operations/parse.js.map +1 -0
- package/dist/operations/set.d.ts +21 -0
- package/dist/operations/set.d.ts.map +1 -0
- package/dist/operations/set.js +25 -0
- package/dist/operations/set.js.map +1 -0
- package/dist/operations/transform.d.ts +15 -0
- package/dist/operations/transform.d.ts.map +1 -0
- package/dist/operations/transform.js +110 -0
- package/dist/operations/transform.js.map +1 -0
- package/dist/parallel.d.ts +114 -0
- package/dist/parallel.d.ts.map +1 -0
- package/dist/parallel.js +325 -0
- package/dist/parallel.js.map +1 -0
- package/dist/parser.d.ts.map +1 -1
- package/dist/parser.js +2 -0
- package/dist/parser.js.map +1 -1
- package/dist/routing.js +2 -2
- package/dist/routing.js.map +1 -1
- package/dist/sdk-registry.d.ts.map +1 -1
- package/dist/sdk-registry.js +9 -3
- package/dist/sdk-registry.js.map +1 -1
- package/dist/utils/duration.d.ts +23 -0
- package/dist/utils/duration.d.ts.map +1 -0
- package/dist/utils/duration.js +41 -0
- package/dist/utils/duration.js.map +1 -0
- package/dist/utils/errors.d.ts +20 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +37 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/index.d.ts +3 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +3 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/workflow-templates.d.ts +80 -0
- package/dist/workflow-templates.d.ts.map +1 -0
- package/dist/workflow-templates.js +248 -0
- package/dist/workflow-templates.js.map +1 -0
- package/package.json +30 -5
- package/dist/secrets/index.d.ts +0 -12
- package/dist/secrets/index.d.ts.map +0 -1
- package/dist/secrets/index.js +0 -11
- package/dist/secrets/index.js.map +0 -1
- package/dist/secrets/providers/aws.d.ts +0 -32
- package/dist/secrets/providers/aws.d.ts.map +0 -1
- package/dist/secrets/providers/aws.js +0 -118
- package/dist/secrets/providers/aws.js.map +0 -1
- package/dist/secrets/providers/azure.d.ts +0 -40
- package/dist/secrets/providers/azure.d.ts.map +0 -1
- package/dist/secrets/providers/azure.js +0 -170
- package/dist/secrets/providers/azure.js.map +0 -1
- package/dist/secrets/providers/env.d.ts +0 -26
- package/dist/secrets/providers/env.d.ts.map +0 -1
- package/dist/secrets/providers/env.js +0 -59
- package/dist/secrets/providers/env.js.map +0 -1
- package/dist/secrets/providers/vault.d.ts +0 -39
- package/dist/secrets/providers/vault.d.ts.map +0 -1
- package/dist/secrets/providers/vault.js +0 -180
- package/dist/secrets/providers/vault.js.map +0 -1
- package/dist/secrets/secret-manager.d.ts +0 -72
- package/dist/secrets/secret-manager.d.ts.map +0 -1
- package/dist/secrets/secret-manager.js +0 -226
- package/dist/secrets/secret-manager.js.map +0 -1
- package/dist/secrets/types.d.ts +0 -105
- package/dist/secrets/types.d.ts.map +0 -1
- package/dist/secrets/types.js +0 -8
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Duration parsing utility for marktoflow.
|
|
3
|
+
*
|
|
4
|
+
* Parses human-readable duration strings like "2h", "30m", "5s", "100ms"
|
|
5
|
+
* into milliseconds.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Parse a duration string into milliseconds.
|
|
9
|
+
*
|
|
10
|
+
* Supported formats:
|
|
11
|
+
* - "100ms" → 100
|
|
12
|
+
* - "5s" → 5000
|
|
13
|
+
* - "30m" → 1800000
|
|
14
|
+
* - "2h" → 7200000
|
|
15
|
+
* - "1d" → 86400000
|
|
16
|
+
* - "5000" → 5000 (bare number treated as milliseconds)
|
|
17
|
+
*
|
|
18
|
+
* @param duration - Duration string to parse
|
|
19
|
+
* @returns Duration in milliseconds
|
|
20
|
+
* @throws Error if format is invalid
|
|
21
|
+
*/
|
|
22
|
+
export declare function parseDuration(duration: string): number;
|
|
23
|
+
//# sourceMappingURL=duration.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"duration.d.ts","sourceRoot":"","sources":["../../src/utils/duration.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAiBtD"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Duration parsing utility for marktoflow.
|
|
3
|
+
*
|
|
4
|
+
* Parses human-readable duration strings like "2h", "30m", "5s", "100ms"
|
|
5
|
+
* into milliseconds.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Parse a duration string into milliseconds.
|
|
9
|
+
*
|
|
10
|
+
* Supported formats:
|
|
11
|
+
* - "100ms" → 100
|
|
12
|
+
* - "5s" → 5000
|
|
13
|
+
* - "30m" → 1800000
|
|
14
|
+
* - "2h" → 7200000
|
|
15
|
+
* - "1d" → 86400000
|
|
16
|
+
* - "5000" → 5000 (bare number treated as milliseconds)
|
|
17
|
+
*
|
|
18
|
+
* @param duration - Duration string to parse
|
|
19
|
+
* @returns Duration in milliseconds
|
|
20
|
+
* @throws Error if format is invalid
|
|
21
|
+
*/
|
|
22
|
+
export function parseDuration(duration) {
|
|
23
|
+
const match = duration.match(/^(\d+(?:\.\d+)?)\s*(ms|s|m|h|d)$/i);
|
|
24
|
+
if (!match) {
|
|
25
|
+
const asNum = Number(duration);
|
|
26
|
+
if (!isNaN(asNum))
|
|
27
|
+
return asNum; // Treat bare numbers as milliseconds
|
|
28
|
+
throw new Error(`Invalid duration format: "${duration}". Use format like "2h", "30m", "5s", "100ms"`);
|
|
29
|
+
}
|
|
30
|
+
const value = parseFloat(match[1]);
|
|
31
|
+
const unit = match[2].toLowerCase();
|
|
32
|
+
const multipliers = {
|
|
33
|
+
ms: 1,
|
|
34
|
+
s: 1000,
|
|
35
|
+
m: 60000,
|
|
36
|
+
h: 3600000,
|
|
37
|
+
d: 86400000,
|
|
38
|
+
};
|
|
39
|
+
return value * (multipliers[unit] ?? 1);
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=duration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"duration.js","sourceRoot":"","sources":["../../src/utils/duration.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,aAAa,CAAC,QAAgB;IAC5C,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;IAClE,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC/B,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC,CAAC,qCAAqC;QACtE,MAAM,IAAI,KAAK,CAAC,6BAA6B,QAAQ,+CAA+C,CAAC,CAAC;IACxG,CAAC;IACD,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACnC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IACpC,MAAM,WAAW,GAA2B;QAC1C,EAAE,EAAE,CAAC;QACL,CAAC,EAAE,IAAI;QACP,CAAC,EAAE,KAAK;QACR,CAAC,EAAE,OAAO;QACV,CAAC,EAAE,QAAQ;KACZ,CAAC;IACF,OAAO,KAAK,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC1C,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Error handling utilities for marktoflow.
|
|
3
|
+
*
|
|
4
|
+
* Provides consistent error conversion patterns used across the engine.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Convert an unknown error value to a human-readable string.
|
|
8
|
+
*
|
|
9
|
+
* @param error - Any thrown value
|
|
10
|
+
* @returns A string representation of the error
|
|
11
|
+
*/
|
|
12
|
+
export declare function errorToString(error: unknown): string;
|
|
13
|
+
/**
|
|
14
|
+
* Convert an unknown thrown value to an Error object.
|
|
15
|
+
*
|
|
16
|
+
* @param error - Any thrown value
|
|
17
|
+
* @returns An Error instance
|
|
18
|
+
*/
|
|
19
|
+
export declare function toError(error: unknown): Error;
|
|
20
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CASpD;AAED;;;;;GAKG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,CAG7C"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Error handling utilities for marktoflow.
|
|
3
|
+
*
|
|
4
|
+
* Provides consistent error conversion patterns used across the engine.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Convert an unknown error value to a human-readable string.
|
|
8
|
+
*
|
|
9
|
+
* @param error - Any thrown value
|
|
10
|
+
* @returns A string representation of the error
|
|
11
|
+
*/
|
|
12
|
+
export function errorToString(error) {
|
|
13
|
+
if (!error)
|
|
14
|
+
return 'Unknown error';
|
|
15
|
+
if (typeof error === 'string')
|
|
16
|
+
return error;
|
|
17
|
+
if (error instanceof Error)
|
|
18
|
+
return error.message;
|
|
19
|
+
try {
|
|
20
|
+
return JSON.stringify(error);
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
return String(error);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Convert an unknown thrown value to an Error object.
|
|
28
|
+
*
|
|
29
|
+
* @param error - Any thrown value
|
|
30
|
+
* @returns An Error instance
|
|
31
|
+
*/
|
|
32
|
+
export function toError(error) {
|
|
33
|
+
if (error instanceof Error)
|
|
34
|
+
return error;
|
|
35
|
+
return new Error(errorToString(error));
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,KAAc;IAC1C,IAAI,CAAC,KAAK;QAAE,OAAO,eAAe,CAAC;IACnC,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5C,IAAI,KAAK,YAAY,KAAK;QAAE,OAAO,KAAK,CAAC,OAAO,CAAC;IACjD,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,OAAO,CAAC,KAAc;IACpC,IAAI,KAAK,YAAY,KAAK;QAAE,OAAO,KAAK,CAAC;IACzC,OAAO,IAAI,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;AACzC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Workflow template library for marktoflow.
|
|
3
|
+
* Uses Nunjucks for template rendering with full filter/conditional support.
|
|
4
|
+
*/
|
|
5
|
+
export declare enum TemplateCategory {
|
|
6
|
+
CODE_QUALITY = "code_quality",
|
|
7
|
+
DEPLOYMENT = "deployment",
|
|
8
|
+
TESTING = "testing",
|
|
9
|
+
DOCUMENTATION = "documentation",
|
|
10
|
+
SECURITY = "security",
|
|
11
|
+
MONITORING = "monitoring",
|
|
12
|
+
DATA = "data",
|
|
13
|
+
INTEGRATION = "integration",
|
|
14
|
+
GENERAL = "general"
|
|
15
|
+
}
|
|
16
|
+
export interface TemplateVariable {
|
|
17
|
+
name: string;
|
|
18
|
+
description: string;
|
|
19
|
+
type?: 'string' | 'integer' | 'boolean' | 'array' | 'object';
|
|
20
|
+
required?: boolean;
|
|
21
|
+
default?: unknown;
|
|
22
|
+
example?: unknown;
|
|
23
|
+
pattern?: string | undefined;
|
|
24
|
+
}
|
|
25
|
+
export interface TemplateMetadata {
|
|
26
|
+
id: string;
|
|
27
|
+
name: string;
|
|
28
|
+
description?: string;
|
|
29
|
+
category: TemplateCategory;
|
|
30
|
+
version?: string;
|
|
31
|
+
author?: string;
|
|
32
|
+
tags?: string[];
|
|
33
|
+
license?: string;
|
|
34
|
+
homepage?: string;
|
|
35
|
+
variables?: TemplateVariable[];
|
|
36
|
+
requirements?: Record<string, unknown>;
|
|
37
|
+
examples?: Array<Record<string, unknown>>;
|
|
38
|
+
}
|
|
39
|
+
export declare class WorkflowTemplate {
|
|
40
|
+
metadata: TemplateMetadata;
|
|
41
|
+
content: string;
|
|
42
|
+
source: 'builtin' | 'file' | 'registry';
|
|
43
|
+
path?: string | undefined;
|
|
44
|
+
readonly createdAt: Date;
|
|
45
|
+
constructor(metadata: TemplateMetadata, content: string, source?: 'builtin' | 'file' | 'registry', path?: string | undefined);
|
|
46
|
+
get id(): string;
|
|
47
|
+
get name(): string;
|
|
48
|
+
get category(): TemplateCategory;
|
|
49
|
+
get variables(): TemplateVariable[];
|
|
50
|
+
validateVariables(values: Record<string, unknown>): {
|
|
51
|
+
valid: boolean;
|
|
52
|
+
errors: string[];
|
|
53
|
+
};
|
|
54
|
+
/**
|
|
55
|
+
* Render the template with the given variables using Nunjucks.
|
|
56
|
+
*
|
|
57
|
+
* Features enabled by using Nunjucks:
|
|
58
|
+
* - Filters: {{ template.name | upper }}, {{ value | split('/') | first }}
|
|
59
|
+
* - Conditionals: {% if template.enabled %}...{% endif %}
|
|
60
|
+
* - Loops: {% for item in items %}...{% endfor %}
|
|
61
|
+
* - All custom filters from nunjucks-filters.ts
|
|
62
|
+
*/
|
|
63
|
+
render(variables?: Record<string, unknown>): string;
|
|
64
|
+
instantiate(outputPath: string, variables?: Record<string, unknown>, workflowId?: string): string;
|
|
65
|
+
static fromFile(path: string): WorkflowTemplate;
|
|
66
|
+
}
|
|
67
|
+
export declare class TemplateRegistry {
|
|
68
|
+
private templateDirs;
|
|
69
|
+
private templates;
|
|
70
|
+
constructor(templateDirs?: string[], loadBuiltins?: boolean);
|
|
71
|
+
register(template: WorkflowTemplate): void;
|
|
72
|
+
unregister(id: string): boolean;
|
|
73
|
+
get(id: string): WorkflowTemplate | undefined;
|
|
74
|
+
list(category?: TemplateCategory, tags?: string[]): WorkflowTemplate[];
|
|
75
|
+
search(query: string): WorkflowTemplate[];
|
|
76
|
+
discover(): string[];
|
|
77
|
+
}
|
|
78
|
+
export declare const HELLO_TEMPLATE: WorkflowTemplate;
|
|
79
|
+
export declare const BUILTIN_TEMPLATES: WorkflowTemplate[];
|
|
80
|
+
//# sourceMappingURL=workflow-templates.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-templates.d.ts","sourceRoot":"","sources":["../src/workflow-templates.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Workflow template library for marktoflow.
|
|
3
|
+
* Uses Nunjucks for template rendering with full filter/conditional support.
|
|
4
|
+
*/
|
|
5
|
+
import { readFileSync, existsSync, mkdirSync } from 'node:fs';
|
|
6
|
+
import { dirname } from 'node:path';
|
|
7
|
+
import { parse } from 'yaml';
|
|
8
|
+
import { renderTemplate } from './template-engine.js';
|
|
9
|
+
export var TemplateCategory;
|
|
10
|
+
(function (TemplateCategory) {
|
|
11
|
+
TemplateCategory["CODE_QUALITY"] = "code_quality";
|
|
12
|
+
TemplateCategory["DEPLOYMENT"] = "deployment";
|
|
13
|
+
TemplateCategory["TESTING"] = "testing";
|
|
14
|
+
TemplateCategory["DOCUMENTATION"] = "documentation";
|
|
15
|
+
TemplateCategory["SECURITY"] = "security";
|
|
16
|
+
TemplateCategory["MONITORING"] = "monitoring";
|
|
17
|
+
TemplateCategory["DATA"] = "data";
|
|
18
|
+
TemplateCategory["INTEGRATION"] = "integration";
|
|
19
|
+
TemplateCategory["GENERAL"] = "general";
|
|
20
|
+
})(TemplateCategory || (TemplateCategory = {}));
|
|
21
|
+
export class WorkflowTemplate {
|
|
22
|
+
metadata;
|
|
23
|
+
content;
|
|
24
|
+
source;
|
|
25
|
+
path;
|
|
26
|
+
createdAt;
|
|
27
|
+
constructor(metadata, content, source = 'builtin', path) {
|
|
28
|
+
this.metadata = metadata;
|
|
29
|
+
this.content = content;
|
|
30
|
+
this.source = source;
|
|
31
|
+
this.path = path;
|
|
32
|
+
this.createdAt = new Date();
|
|
33
|
+
}
|
|
34
|
+
get id() {
|
|
35
|
+
return this.metadata.id;
|
|
36
|
+
}
|
|
37
|
+
get name() {
|
|
38
|
+
return this.metadata.name;
|
|
39
|
+
}
|
|
40
|
+
get category() {
|
|
41
|
+
return this.metadata.category;
|
|
42
|
+
}
|
|
43
|
+
get variables() {
|
|
44
|
+
return this.metadata.variables ?? [];
|
|
45
|
+
}
|
|
46
|
+
validateVariables(values) {
|
|
47
|
+
const errors = [];
|
|
48
|
+
for (const variable of this.variables) {
|
|
49
|
+
const value = values[variable.name];
|
|
50
|
+
if (value === undefined || value === null) {
|
|
51
|
+
if (variable.required && variable.default === undefined) {
|
|
52
|
+
errors.push(`Variable '${variable.name}' is required`);
|
|
53
|
+
}
|
|
54
|
+
continue;
|
|
55
|
+
}
|
|
56
|
+
if (variable.type) {
|
|
57
|
+
const typeMap = {
|
|
58
|
+
string: 'string',
|
|
59
|
+
integer: 'number',
|
|
60
|
+
boolean: 'boolean',
|
|
61
|
+
array: 'object',
|
|
62
|
+
object: 'object',
|
|
63
|
+
};
|
|
64
|
+
const expected = typeMap[variable.type];
|
|
65
|
+
if (expected === 'number' && typeof value !== 'number') {
|
|
66
|
+
errors.push(`Variable '${variable.name}' must be a number`);
|
|
67
|
+
}
|
|
68
|
+
else if (expected === 'string' && typeof value !== 'string') {
|
|
69
|
+
errors.push(`Variable '${variable.name}' must be a string`);
|
|
70
|
+
}
|
|
71
|
+
else if (expected === 'boolean' && typeof value !== 'boolean') {
|
|
72
|
+
errors.push(`Variable '${variable.name}' must be a boolean`);
|
|
73
|
+
}
|
|
74
|
+
else if (variable.type === 'array' && !Array.isArray(value)) {
|
|
75
|
+
errors.push(`Variable '${variable.name}' must be an array`);
|
|
76
|
+
}
|
|
77
|
+
else if (variable.type === 'object' && typeof value !== 'object') {
|
|
78
|
+
errors.push(`Variable '${variable.name}' must be an object`);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
if (variable.pattern && typeof value === 'string') {
|
|
82
|
+
const regex = new RegExp(variable.pattern);
|
|
83
|
+
if (!regex.test(value)) {
|
|
84
|
+
errors.push(`Variable '${variable.name}' must match pattern ${variable.pattern}`);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return { valid: errors.length === 0, errors };
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Render the template with the given variables using Nunjucks.
|
|
92
|
+
*
|
|
93
|
+
* Features enabled by using Nunjucks:
|
|
94
|
+
* - Filters: {{ template.name | upper }}, {{ value | split('/') | first }}
|
|
95
|
+
* - Conditionals: {% if template.enabled %}...{% endif %}
|
|
96
|
+
* - Loops: {% for item in items %}...{% endfor %}
|
|
97
|
+
* - All custom filters from nunjucks-filters.ts
|
|
98
|
+
*/
|
|
99
|
+
render(variables = {}) {
|
|
100
|
+
const values = { ...variables };
|
|
101
|
+
for (const variable of this.variables) {
|
|
102
|
+
if (values[variable.name] === undefined && variable.default !== undefined) {
|
|
103
|
+
values[variable.name] = variable.default;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
// Build the template context with 'template' namespace
|
|
107
|
+
const templateContext = {
|
|
108
|
+
template: values,
|
|
109
|
+
...values, // Also expose at top level for convenience
|
|
110
|
+
};
|
|
111
|
+
// Render using Nunjucks
|
|
112
|
+
const rendered = renderTemplate(this.content, templateContext);
|
|
113
|
+
return typeof rendered === 'string' ? rendered : String(rendered);
|
|
114
|
+
}
|
|
115
|
+
instantiate(outputPath, variables = {}, workflowId) {
|
|
116
|
+
const { valid, errors } = this.validateVariables(variables);
|
|
117
|
+
if (!valid) {
|
|
118
|
+
throw new Error(`Invalid variables: ${errors.join('; ')}`);
|
|
119
|
+
}
|
|
120
|
+
let content = this.render(variables);
|
|
121
|
+
if (workflowId) {
|
|
122
|
+
content = content.replace(/(id:\\s*\")[^\"]*(\")/g, `$1${workflowId}$2`);
|
|
123
|
+
content = content.replace(/(id:\\s*)'[^']*(')/g, `$1'${workflowId}'$2`);
|
|
124
|
+
content = content.replace(/(id:\\s*)(\\S+)/g, `$1${workflowId}`);
|
|
125
|
+
}
|
|
126
|
+
const dir = dirname(outputPath);
|
|
127
|
+
if (!existsSync(dir)) {
|
|
128
|
+
mkdirSync(dir, { recursive: true });
|
|
129
|
+
}
|
|
130
|
+
const fs = require('node:fs');
|
|
131
|
+
fs.writeFileSync(outputPath, content);
|
|
132
|
+
return outputPath;
|
|
133
|
+
}
|
|
134
|
+
static fromFile(path) {
|
|
135
|
+
const content = readFileSync(path, 'utf8');
|
|
136
|
+
if (content.startsWith('---')) {
|
|
137
|
+
const parts = content.split('---', 3);
|
|
138
|
+
if (parts.length >= 3) {
|
|
139
|
+
const frontmatter = parse(parts[1]);
|
|
140
|
+
const templateMeta = frontmatter?.template ?? {};
|
|
141
|
+
const metadata = {
|
|
142
|
+
id: templateMeta.id ?? path.split('/').pop()?.replace(/\\.md$/, '') ?? 'template',
|
|
143
|
+
name: templateMeta.name ?? path.split('/').pop()?.replace(/\\.md$/, '') ?? 'Template',
|
|
144
|
+
description: templateMeta.description ?? '',
|
|
145
|
+
category: templateMeta.category ?? TemplateCategory.GENERAL,
|
|
146
|
+
version: templateMeta.version ?? '1.0.0',
|
|
147
|
+
author: templateMeta.author ?? '',
|
|
148
|
+
tags: templateMeta.tags ?? [],
|
|
149
|
+
variables: templateMeta.variables ?? [],
|
|
150
|
+
requirements: templateMeta.requirements ?? {},
|
|
151
|
+
};
|
|
152
|
+
return new WorkflowTemplate(metadata, content, 'file', path);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
const fallback = {
|
|
156
|
+
id: path.split('/').pop()?.replace(/\\.md$/, '') ?? 'template',
|
|
157
|
+
name: path.split('/').pop()?.replace(/\\.md$/, '') ?? 'Template',
|
|
158
|
+
category: TemplateCategory.GENERAL,
|
|
159
|
+
};
|
|
160
|
+
return new WorkflowTemplate(fallback, content, 'file', path);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
export class TemplateRegistry {
|
|
164
|
+
templateDirs;
|
|
165
|
+
templates = new Map();
|
|
166
|
+
constructor(templateDirs = [], loadBuiltins = true) {
|
|
167
|
+
this.templateDirs = templateDirs;
|
|
168
|
+
if (loadBuiltins) {
|
|
169
|
+
for (const template of BUILTIN_TEMPLATES) {
|
|
170
|
+
this.templates.set(template.id, template);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
register(template) {
|
|
175
|
+
this.templates.set(template.id, template);
|
|
176
|
+
}
|
|
177
|
+
unregister(id) {
|
|
178
|
+
return this.templates.delete(id);
|
|
179
|
+
}
|
|
180
|
+
get(id) {
|
|
181
|
+
return this.templates.get(id);
|
|
182
|
+
}
|
|
183
|
+
list(category, tags) {
|
|
184
|
+
let items = Array.from(this.templates.values());
|
|
185
|
+
if (category) {
|
|
186
|
+
items = items.filter((t) => t.category === category);
|
|
187
|
+
}
|
|
188
|
+
if (tags && tags.length > 0) {
|
|
189
|
+
items = items.filter((t) => (t.metadata.tags ?? []).some((tag) => tags.includes(tag)));
|
|
190
|
+
}
|
|
191
|
+
return items.sort((a, b) => a.name.localeCompare(b.name));
|
|
192
|
+
}
|
|
193
|
+
search(query) {
|
|
194
|
+
const q = query.toLowerCase();
|
|
195
|
+
return Array.from(this.templates.values()).filter((t) => {
|
|
196
|
+
if (t.name.toLowerCase().includes(q))
|
|
197
|
+
return true;
|
|
198
|
+
if ((t.metadata.description ?? '').toLowerCase().includes(q))
|
|
199
|
+
return true;
|
|
200
|
+
return (t.metadata.tags ?? []).some((tag) => tag.toLowerCase().includes(q));
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
discover() {
|
|
204
|
+
const discovered = [];
|
|
205
|
+
for (const dir of this.templateDirs) {
|
|
206
|
+
if (!existsSync(dir))
|
|
207
|
+
continue;
|
|
208
|
+
const fs = require('node:fs');
|
|
209
|
+
const entries = fs.readdirSync(dir);
|
|
210
|
+
for (const entry of entries) {
|
|
211
|
+
if (!entry.endsWith('.md'))
|
|
212
|
+
continue;
|
|
213
|
+
const path = `${dir}/${entry}`;
|
|
214
|
+
try {
|
|
215
|
+
const tmpl = WorkflowTemplate.fromFile(path);
|
|
216
|
+
if (!this.templates.has(tmpl.id)) {
|
|
217
|
+
this.templates.set(tmpl.id, tmpl);
|
|
218
|
+
discovered.push(tmpl.id);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
catch {
|
|
222
|
+
// ignore invalid templates
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
return discovered;
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
export const HELLO_TEMPLATE = new WorkflowTemplate({
|
|
230
|
+
id: 'hello-world',
|
|
231
|
+
name: 'Hello World',
|
|
232
|
+
description: 'A minimal example workflow template',
|
|
233
|
+
category: TemplateCategory.GENERAL,
|
|
234
|
+
version: '1.0.0',
|
|
235
|
+
author: 'marktoflow',
|
|
236
|
+
tags: ['example', 'starter'],
|
|
237
|
+
variables: [
|
|
238
|
+
{
|
|
239
|
+
name: 'message',
|
|
240
|
+
description: 'Message to print',
|
|
241
|
+
type: 'string',
|
|
242
|
+
required: true,
|
|
243
|
+
default: 'Hello from marktoflow!',
|
|
244
|
+
},
|
|
245
|
+
],
|
|
246
|
+
}, `---\nworkflow:\n id: hello-world\n name: \"Hello World\"\n version: \"1.0.0\"\n description: \"A simple example workflow\"\n\nsteps:\n - id: greet\n action: core.log\n inputs:\n message: \"{{ template.message }}\"\n---\n\n# Hello World\n\nThis is a simple example workflow.\n`);
|
|
247
|
+
export const BUILTIN_TEMPLATES = [HELLO_TEMPLATE];
|
|
248
|
+
//# sourceMappingURL=workflow-templates.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-templates.js","sourceRoot":"","sources":["../src/workflow-templates.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@marktoflow/core",
|
|
3
|
-
"version": "2.0.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "2.0.4",
|
|
4
|
+
"description": "AI workflow engine with tool calling, parallel execution, structured output, and agent routing",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
7
7
|
"types": "./dist/index.d.ts",
|
|
@@ -66,13 +66,38 @@
|
|
|
66
66
|
],
|
|
67
67
|
"keywords": [
|
|
68
68
|
"marktoflow",
|
|
69
|
+
"workflow-engine",
|
|
69
70
|
"workflow",
|
|
70
|
-
"parser",
|
|
71
71
|
"automation",
|
|
72
|
-
"
|
|
72
|
+
"parser",
|
|
73
|
+
"ai-workflow",
|
|
74
|
+
"ai-agents",
|
|
75
|
+
"tool-calling",
|
|
76
|
+
"agentic",
|
|
77
|
+
"llm",
|
|
78
|
+
"mcp",
|
|
79
|
+
"model-context-protocol",
|
|
80
|
+
"parallel-execution",
|
|
81
|
+
"control-flow",
|
|
82
|
+
"state-management",
|
|
83
|
+
"plugin-system",
|
|
84
|
+
"agent-routing",
|
|
85
|
+
"cost-tracking",
|
|
86
|
+
"typescript",
|
|
87
|
+
"markdown",
|
|
88
|
+
"yaml",
|
|
89
|
+
"structured-output",
|
|
90
|
+
"self-hosted",
|
|
91
|
+
"private",
|
|
92
|
+
"secure",
|
|
93
|
+
"air-gapped",
|
|
94
|
+
"local-first",
|
|
95
|
+
"no-telemetry",
|
|
96
|
+
"data-privacy",
|
|
97
|
+
"on-premise"
|
|
73
98
|
],
|
|
74
99
|
"author": "Scott Glover",
|
|
75
|
-
"license": "
|
|
100
|
+
"license": "AGPL-3.0-only",
|
|
76
101
|
"publishConfig": {
|
|
77
102
|
"registry": "https://registry.npmjs.org/"
|
|
78
103
|
}
|
package/dist/secrets/index.d.ts
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* External Secrets Management
|
|
3
|
-
*
|
|
4
|
-
* Provides integration with external secret managers.
|
|
5
|
-
*/
|
|
6
|
-
export { SecretManager, SecretNotFoundError, SecretProviderError } from './secret-manager.js';
|
|
7
|
-
export { VaultProvider } from './providers/vault.js';
|
|
8
|
-
export { AWSSecretsManagerProvider } from './providers/aws.js';
|
|
9
|
-
export { AzureKeyVaultProvider } from './providers/azure.js';
|
|
10
|
-
export { EnvProvider } from './providers/env.js';
|
|
11
|
-
export type { Secret, SecretMetadata, SecretProvider, SecretProviderConfig, SecretManagerOptions, SecretReference, CachedSecret, VaultConfig, AWSSecretsManagerConfig, AzureKeyVaultConfig, GCPSecretManagerConfig, } from './types.js';
|
|
12
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/secrets/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE9F,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,YAAY,EACV,MAAM,EACN,cAAc,EACd,cAAc,EACd,oBAAoB,EACpB,oBAAoB,EACpB,eAAe,EACf,YAAY,EACZ,WAAW,EACX,uBAAuB,EACvB,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,YAAY,CAAC"}
|
package/dist/secrets/index.js
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* External Secrets Management
|
|
3
|
-
*
|
|
4
|
-
* Provides integration with external secret managers.
|
|
5
|
-
*/
|
|
6
|
-
export { SecretManager, SecretNotFoundError, SecretProviderError } from './secret-manager.js';
|
|
7
|
-
export { VaultProvider } from './providers/vault.js';
|
|
8
|
-
export { AWSSecretsManagerProvider } from './providers/aws.js';
|
|
9
|
-
export { AzureKeyVaultProvider } from './providers/azure.js';
|
|
10
|
-
export { EnvProvider } from './providers/env.js';
|
|
11
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/secrets/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE9F,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* AWS Secrets Manager Provider
|
|
3
|
-
*
|
|
4
|
-
* Supports IAM authentication and explicit credentials.
|
|
5
|
-
*/
|
|
6
|
-
import type { SecretProvider, Secret, AWSSecretsManagerConfig } from '../types.js';
|
|
7
|
-
export declare class AWSSecretsManagerProvider implements SecretProvider {
|
|
8
|
-
private config;
|
|
9
|
-
private initialized;
|
|
10
|
-
constructor(config: AWSSecretsManagerConfig);
|
|
11
|
-
initialize(): Promise<void>;
|
|
12
|
-
/**
|
|
13
|
-
* Get a secret from AWS Secrets Manager
|
|
14
|
-
*/
|
|
15
|
-
getSecret(secretName: string): Promise<Secret>;
|
|
16
|
-
/**
|
|
17
|
-
* Check if a secret exists
|
|
18
|
-
*/
|
|
19
|
-
exists(secretName: string): Promise<boolean>;
|
|
20
|
-
/**
|
|
21
|
-
* List secrets (returns secret ARNs)
|
|
22
|
-
*/
|
|
23
|
-
listSecrets(): Promise<string[]>;
|
|
24
|
-
/**
|
|
25
|
-
* Call AWS Secrets Manager API
|
|
26
|
-
*
|
|
27
|
-
* This is a simplified implementation. In production, use @aws-sdk/client-secrets-manager
|
|
28
|
-
*/
|
|
29
|
-
private callAWSAPI;
|
|
30
|
-
destroy(): Promise<void>;
|
|
31
|
-
}
|
|
32
|
-
//# sourceMappingURL=aws.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"aws.d.ts","sourceRoot":"","sources":["../../../src/secrets/providers/aws.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAEnF,qBAAa,yBAA0B,YAAW,cAAc;IAC9D,OAAO,CAAC,MAAM,CAAoC;IAClD,OAAO,CAAC,WAAW,CAAS;gBAEhB,MAAM,EAAE,uBAAuB;IAUrC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAejC;;OAEG;IACG,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAuCpD;;OAEG;IACG,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAYlD;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IActC;;;;OAIG;YACW,UAAU;IAelB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAG/B"}
|