arvo-core 1.2.3 → 2.0.1
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/CHANGELOG.md +4 -0
- package/dist/ArvoContract/helpers.d.ts +119 -20
- package/dist/ArvoContract/helpers.js +150 -32
- package/dist/ArvoContract/index.d.ts +32 -26
- package/dist/ArvoContract/index.js +69 -60
- package/dist/ArvoContract/types.d.ts +49 -35
- package/dist/ArvoEvent/schema.d.ts +2 -2
- package/dist/ArvoEventFactory/helpers.d.ts +39 -9
- package/dist/ArvoEventFactory/helpers.js +50 -8
- package/dist/ArvoEventFactory/index.d.ts +60 -33
- package/dist/ArvoEventFactory/index.js +62 -36
- package/dist/ArvoOrchestrationSubject/index.d.ts +5 -4
- package/dist/ArvoOrchestrationSubject/index.js +2 -2
- package/dist/ArvoOrchestrationSubject/schema.d.ts +1 -2
- package/dist/ArvoOrchestrationSubject/schema.js +4 -11
- package/dist/ArvoOrchestrationSubject/type.d.ts +2 -12
- package/dist/ArvoOrchestratorContract/index.d.ts +62 -56
- package/dist/ArvoOrchestratorContract/index.js +99 -93
- package/dist/ArvoOrchestratorContract/types.d.ts +64 -71
- package/dist/index.d.ts +14 -18
- package/dist/index.js +12 -14
- package/dist/schema.d.ts +1 -0
- package/dist/schema.js +6 -1
- package/dist/types.d.ts +107 -81
- package/dist/utils.d.ts +21 -0
- package/dist/utils.js +33 -0
- package/package.json +1 -1
- package/dist/ArvoContractLibrary/helpers.d.ts +0 -10
- package/dist/ArvoContractLibrary/helpers.js +0 -22
- package/dist/ArvoContractLibrary/index.d.ts +0 -61
- package/dist/ArvoContractLibrary/index.js +0 -87
- package/dist/ArvoOrchestratorContract/helpers.d.ts +0 -67
- package/dist/ArvoOrchestratorContract/helpers.js +0 -101
package/dist/types.d.ts
CHANGED
@@ -2,18 +2,61 @@ import { z } from 'zod';
|
|
2
2
|
import ArvoContract from './ArvoContract';
|
3
3
|
import ArvoEvent from './ArvoEvent';
|
4
4
|
import { ArvoExtension, OpenTelemetryExtension } from './ArvoEvent/types';
|
5
|
-
import
|
5
|
+
import { ArvoErrorSchema } from './schema';
|
6
|
+
/**
|
7
|
+
* Represents the version of Arvo components following Semantic Versioning (SemVer).
|
8
|
+
*
|
9
|
+
* @format MAJOR.MINOR.PATCH where each component is a non-negative integer
|
10
|
+
* @restriction Must not contain semicolons (;)
|
11
|
+
*
|
12
|
+
* @example
|
13
|
+
* ```typescript
|
14
|
+
* const version: ArvoSemanticVersion = "1.0.0";
|
15
|
+
* const preRelease: ArvoSemanticVersion = "0.5.2";
|
16
|
+
* const major: ArvoSemanticVersion = "2.0.0";
|
17
|
+
* ```
|
18
|
+
*/
|
19
|
+
export type ArvoSemanticVersion = `${number}.${number}.${number}`;
|
6
20
|
/**
|
7
21
|
* A type utility that infers the structure of an ArvoEvent.
|
8
22
|
*
|
9
|
-
* @template
|
23
|
+
* @template TData - The type of the event payload
|
24
|
+
* @template TExtension - Additional extension properties for the event
|
25
|
+
* @template TType - The literal type string identifying the event
|
10
26
|
*
|
11
|
-
* @
|
12
|
-
*
|
27
|
+
* @property id - Unique identifier for the event (UUID v4 recommended)
|
28
|
+
* @property source - Identifier for the context where the event occurred
|
29
|
+
* @property specversion - CloudEvents specification version
|
30
|
+
* @property type - Event type identifier
|
31
|
+
* @property subject - Event subject in the producer's context
|
32
|
+
* @property datacontenttype - MIME type of the event payload
|
33
|
+
* @property dataschema - URI reference to the event's JSON schema
|
34
|
+
* @property data - The actual event payload
|
35
|
+
* @property time - ISO 8601 timestamp of event occurrence
|
13
36
|
*
|
14
37
|
* @example
|
15
|
-
*
|
16
|
-
*
|
38
|
+
* ```typescript
|
39
|
+
* type UserCreatedEvent = InferArvoEvent<ArvoEvent<
|
40
|
+
* { userId: string; email: string },
|
41
|
+
* { region: string },
|
42
|
+
* 'user.created'
|
43
|
+
* >>;
|
44
|
+
*
|
45
|
+
* // Results in:
|
46
|
+
* // {
|
47
|
+
* // id: string;
|
48
|
+
* // source: string;
|
49
|
+
* // specversion: string;
|
50
|
+
* // type: 'user.created';
|
51
|
+
* // subject: string;
|
52
|
+
* // datacontenttype: string;
|
53
|
+
* // dataschema: string | null;
|
54
|
+
* // data: { userId: string; email: string };
|
55
|
+
* // time: string;
|
56
|
+
* // region: string;
|
57
|
+
* // // ... plus ArvoExtension & OpenTelemetryExtension properties
|
58
|
+
* // }
|
59
|
+
* ```
|
17
60
|
*/
|
18
61
|
export type InferArvoEvent<T> = T extends ArvoEvent<infer TData, infer TExtension, infer TType> ? {
|
19
62
|
/** Unique identifier of the event */
|
@@ -35,92 +78,75 @@ export type InferArvoEvent<T> = T extends ArvoEvent<infer TData, infer TExtensio
|
|
35
78
|
/** Timestamp of when the occurrence happened */
|
36
79
|
time: string;
|
37
80
|
} & ArvoExtension & OpenTelemetryExtension & TExtension : never;
|
38
|
-
/**
|
39
|
-
* Helper type to infer the TypeScript type from a Zod schema.
|
40
|
-
*
|
41
|
-
* @template T - The Zod schema type to infer from.
|
42
|
-
*
|
43
|
-
* @returns The TypeScript type that corresponds to the Zod schema.
|
44
|
-
*
|
45
|
-
* @example
|
46
|
-
* const mySchema = z.object({ name: z.string(), age: z.number() });
|
47
|
-
* type MyType = InferZodSchema<typeof mySchema>;
|
48
|
-
* // MyType will be { name: string; age: number; }
|
49
|
-
*/
|
50
81
|
type InferZodSchema<T> = T extends z.ZodTypeAny ? z.infer<T> : never;
|
51
82
|
/**
|
52
|
-
* A type utility that infers the structure of an ArvoContract
|
83
|
+
* A comprehensive type utility that infers the complete structure of an ArvoContract,
|
84
|
+
* including versioned event types, accepted events, and emitted events.
|
53
85
|
*
|
54
|
-
* @template T - The type to infer from
|
86
|
+
* @template T - The ArvoContract type to infer from
|
55
87
|
*
|
56
|
-
* @
|
88
|
+
* @property uri - Unique identifier for the contract
|
89
|
+
* @property type - The event type this contract handles
|
90
|
+
* @property versions - Version-specific contract definitions
|
91
|
+
* @property versions[version].accepts - Events this contract version can handle
|
92
|
+
* @property versions[version].emits - Events this contract version can produce
|
93
|
+
* @property systemError - System error event definition for this contract
|
57
94
|
*
|
58
95
|
* @example
|
59
|
-
*
|
60
|
-
*
|
61
|
-
*
|
62
|
-
*
|
63
|
-
*
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
};
|
74
|
-
/** The system error event type for this contract */
|
75
|
-
systemError: InferArvoEvent<ArvoEvent<InferZodSchema<T['systemError']['schema']>, {}, T['systemError']['type']>>;
|
76
|
-
/** Union type of all emittable events, including regular events and system error */
|
77
|
-
emittableEvents: ({
|
78
|
-
[K in keyof TEmits]: InferArvoEvent<ArvoEvent<InferZodSchema<TEmits[K]>, {}, K & string>>;
|
79
|
-
} & {
|
80
|
-
[K in `sys.${TType}.error`]: InferArvoEvent<ArvoEvent<InferZodSchema<T['systemError']['schema']>, {}, T['systemError']['type']>>;
|
81
|
-
})[keyof TEmits | `sys.${TType}.error`];
|
82
|
-
} : never;
|
83
|
-
/**
|
84
|
-
* A type utility that infers the structure of an ArvoOrchestratorContract.
|
85
|
-
*
|
86
|
-
* @template T - The type to infer from, expected to be an ArvoOrchestratorContract.
|
96
|
+
* ```typescript
|
97
|
+
* const userContract = new ArvoContract(
|
98
|
+
* 'user-service',
|
99
|
+
* 'user.operation',
|
100
|
+
* {
|
101
|
+
* '1.0.0': {
|
102
|
+
* accepts: z.object({ userId: z.string() }),
|
103
|
+
* emits: {
|
104
|
+
* 'user.created': z.object({ userId: z.string(), timestamp: z.string() }),
|
105
|
+
* 'user.failed': z.object({ error: z.string() })
|
106
|
+
* }
|
107
|
+
* }
|
108
|
+
* }
|
109
|
+
* );
|
87
110
|
*
|
88
|
-
*
|
89
|
-
*
|
90
|
-
*
|
111
|
+
* type UserContractType = InferArvoContract<typeof userContract>;
|
112
|
+
* // Results in:
|
113
|
+
* // {
|
114
|
+
* // uri: 'user-service';
|
115
|
+
* // type: 'user.operation';
|
116
|
+
* // versions: {
|
117
|
+
* // '1.0.0': {
|
118
|
+
* // accepts: { ... inferred input event type ... };
|
119
|
+
* // emits: {
|
120
|
+
* // 'user.created': { ... inferred output event type ... };
|
121
|
+
* // 'user.failed': { ... inferred error event type ... };
|
122
|
+
* // }
|
123
|
+
* // }
|
124
|
+
* // };
|
125
|
+
* // systemError: { ... inferred system error event type ... };
|
126
|
+
* // }
|
127
|
+
* ```
|
91
128
|
*
|
92
|
-
* @
|
93
|
-
*
|
94
|
-
*
|
95
|
-
*
|
96
|
-
*
|
97
|
-
* });
|
98
|
-
* type MyOrchestratorContractType = InferArvoOrchestratorContract<typeof myOrchestratorContract>;
|
99
|
-
* // MyOrchestratorContractType will have properties uri, accepts, emits, systemError, etc.
|
129
|
+
* @remarks
|
130
|
+
* - All version keys must be valid {@link ArvoSemanticVersion} strings
|
131
|
+
* - The contract must define at least one version
|
132
|
+
* - Each version must specify both accepted and emitted event schemas
|
133
|
+
* - System error handling is automatically included for all contracts
|
100
134
|
*/
|
101
|
-
export type
|
102
|
-
|
135
|
+
export type InferArvoContract<T extends ArvoContract<string, string, Record<ArvoSemanticVersion, {
|
136
|
+
accepts: z.ZodTypeAny;
|
137
|
+
emits: Record<string, z.ZodTypeAny>;
|
138
|
+
}>>> = T extends ArvoContract<infer TUri, infer TType, infer TVersion> ? {
|
103
139
|
uri: TUri;
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
140
|
+
type: TType;
|
141
|
+
versions: {
|
142
|
+
[V in ArvoSemanticVersion & keyof TVersion]: {
|
143
|
+
accepts: InferArvoEvent<ArvoEvent<InferZodSchema<TVersion[V]['accepts']>, {}, TType>>;
|
144
|
+
emits: {
|
145
|
+
[K in keyof TVersion[V]['emits']]: InferArvoEvent<ArvoEvent<InferZodSchema<TVersion[V]['emits'][K]>, {}, K & string>>;
|
146
|
+
};
|
147
|
+
};
|
109
148
|
};
|
110
|
-
/** The system error event type for this orchestrator contract */
|
111
149
|
systemError: InferArvoEvent<ArvoEvent<InferZodSchema<T['systemError']['schema']>, {}, T['systemError']['type']>>;
|
112
|
-
/**
|
113
|
-
* Union type of all emittable events, including the completion event and system error.
|
114
|
-
* This can be used to represent all possible outcomes of the orchestration process.
|
115
|
-
*/
|
116
|
-
emittableEvents: ({
|
117
|
-
[K in TCompleteType]: InferArvoEvent<ArvoEvent<InferZodSchema<TComplete>, {}, K>>;
|
118
|
-
} & {
|
119
|
-
[K in `sys.${TInitType}.error`]: InferArvoEvent<ArvoEvent<InferZodSchema<T['systemError']['schema']>, {}, T['systemError']['type']>>;
|
120
|
-
})[TCompleteType | `sys.${TInitType}.error`];
|
121
|
-
/** The initial event type and schema that starts the orchestration process */
|
122
|
-
init: InferArvoEvent<ArvoEvent<InferZodSchema<TInit>, {}, TInitType>>;
|
123
|
-
/** The completion event type and schema that signifies the end of the orchestration process */
|
124
|
-
complete: InferArvoEvent<ArvoEvent<InferZodSchema<TComplete>, {}, TCompleteType>>;
|
125
150
|
} : never;
|
151
|
+
export type ArvoErrorType = z.infer<typeof ArvoErrorSchema>;
|
126
152
|
export {};
|
package/dist/utils.d.ts
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
import { ArvoSemanticVersion } from './types';
|
1
2
|
/**
|
2
3
|
* Cleans a string by removing leading/trailing whitespace from each line,
|
3
4
|
* removing empty lines, and joining the remaining lines with newline characters.
|
@@ -48,3 +49,23 @@ export declare const validateURI: (value: string) => boolean;
|
|
48
49
|
* createTimestamp(-5);
|
49
50
|
*/
|
50
51
|
export declare const createTimestamp: (offsetHours?: number) => string;
|
52
|
+
/**
|
53
|
+
* Parse semantic version string into its numeric components
|
54
|
+
* @param version Semantic version string (e.g. "1.2.3")
|
55
|
+
* @returns Object containing major, minor, and patch numbers
|
56
|
+
*/
|
57
|
+
interface VersionComponents {
|
58
|
+
major: number;
|
59
|
+
minor: number;
|
60
|
+
patch: number;
|
61
|
+
}
|
62
|
+
export declare function parseSemanticVersion(version: ArvoSemanticVersion): VersionComponents;
|
63
|
+
/**
|
64
|
+
* Compares two semantic versions according to semver rules
|
65
|
+
* Returns:
|
66
|
+
* - Positive number if version1 > version2
|
67
|
+
* - Negative number if version1 < version2
|
68
|
+
* - 0 if version1 === version2
|
69
|
+
*/
|
70
|
+
export declare function compareSemanticVersions(version1: ArvoSemanticVersion, version2: ArvoSemanticVersion): number;
|
71
|
+
export {};
|
package/dist/utils.js
CHANGED
@@ -2,6 +2,8 @@
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
3
|
exports.createTimestamp = exports.validateURI = void 0;
|
4
4
|
exports.cleanString = cleanString;
|
5
|
+
exports.parseSemanticVersion = parseSemanticVersion;
|
6
|
+
exports.compareSemanticVersions = compareSemanticVersions;
|
5
7
|
/**
|
6
8
|
* Cleans a string by removing leading/trailing whitespace from each line,
|
7
9
|
* removing empty lines, and joining the remaining lines with newline characters.
|
@@ -77,3 +79,34 @@ var createTimestamp = function (offsetHours) {
|
|
77
79
|
: "-".concat(String(Math.abs(offsetHours)).padStart(2, '0'), ":00"));
|
78
80
|
};
|
79
81
|
exports.createTimestamp = createTimestamp;
|
82
|
+
function parseSemanticVersion(version) {
|
83
|
+
var _a = version.split('.').map(function (part) {
|
84
|
+
var num = parseInt(part, 10);
|
85
|
+
if (isNaN(num)) {
|
86
|
+
throw new Error("Invalid version number in ".concat(version));
|
87
|
+
}
|
88
|
+
return num;
|
89
|
+
}), major = _a[0], minor = _a[1], patch = _a[2];
|
90
|
+
if (major === undefined || minor === undefined || patch === undefined) {
|
91
|
+
throw new Error("Invalid semantic version format: ".concat(version));
|
92
|
+
}
|
93
|
+
return { major: major, minor: minor, patch: patch };
|
94
|
+
}
|
95
|
+
/**
|
96
|
+
* Compares two semantic versions according to semver rules
|
97
|
+
* Returns:
|
98
|
+
* - Positive number if version1 > version2
|
99
|
+
* - Negative number if version1 < version2
|
100
|
+
* - 0 if version1 === version2
|
101
|
+
*/
|
102
|
+
function compareSemanticVersions(version1, version2) {
|
103
|
+
var v1 = parseSemanticVersion(version1);
|
104
|
+
var v2 = parseSemanticVersion(version2);
|
105
|
+
if (v1.major !== v2.major) {
|
106
|
+
return v1.major - v2.major;
|
107
|
+
}
|
108
|
+
if (v1.minor !== v2.minor) {
|
109
|
+
return v1.minor - v2.minor;
|
110
|
+
}
|
111
|
+
return v1.patch - v2.patch;
|
112
|
+
}
|
package/package.json
CHANGED
@@ -1,10 +0,0 @@
|
|
1
|
-
import ArvoContractLibrary from '.';
|
2
|
-
import ArvoContract from '../ArvoContract';
|
3
|
-
/**
|
4
|
-
* Creates a new ArvoContractLibrary instance with the given ArvoContract instances.
|
5
|
-
*
|
6
|
-
* @template T - The type of ArvoContract to be stored in the library.
|
7
|
-
* @param {...T[]} args - One or more ArvoContract instances to initialize the library.
|
8
|
-
* @returns {ArvoContractLibrary<T>} A new ArvoContractLibrary instance containing the provided contracts.
|
9
|
-
*/
|
10
|
-
export declare const createArvoContractLibrary: <T extends ArvoContract>(...args: T[]) => ArvoContractLibrary<T>;
|
@@ -1,22 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
-
};
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
-
exports.createArvoContractLibrary = void 0;
|
7
|
-
var _1 = __importDefault(require("."));
|
8
|
-
/**
|
9
|
-
* Creates a new ArvoContractLibrary instance with the given ArvoContract instances.
|
10
|
-
*
|
11
|
-
* @template T - The type of ArvoContract to be stored in the library.
|
12
|
-
* @param {...T[]} args - One or more ArvoContract instances to initialize the library.
|
13
|
-
* @returns {ArvoContractLibrary<T>} A new ArvoContractLibrary instance containing the provided contracts.
|
14
|
-
*/
|
15
|
-
var createArvoContractLibrary = function () {
|
16
|
-
var args = [];
|
17
|
-
for (var _i = 0; _i < arguments.length; _i++) {
|
18
|
-
args[_i] = arguments[_i];
|
19
|
-
}
|
20
|
-
return new _1.default(args);
|
21
|
-
};
|
22
|
-
exports.createArvoContractLibrary = createArvoContractLibrary;
|
@@ -1,61 +0,0 @@
|
|
1
|
-
import ArvoContract from '../ArvoContract';
|
2
|
-
/**
|
3
|
-
* Extracts the URI type from a given ArvoContract type.
|
4
|
-
* @template T - The ArvoContract type to extract from.
|
5
|
-
*/
|
6
|
-
type ExtractContractUri<T> = T extends {
|
7
|
-
uri: infer U;
|
8
|
-
} ? U : never;
|
9
|
-
/**
|
10
|
-
* A library class for managing and accessing ArvoContract instances.
|
11
|
-
* @template T - The type of ArvoContract stored in the library.
|
12
|
-
*/
|
13
|
-
export default class ArvoContractLibrary<T extends ArvoContract> {
|
14
|
-
/**
|
15
|
-
* The array of ArvoContract instances stored in the library.
|
16
|
-
* @private
|
17
|
-
* @readonly
|
18
|
-
*/
|
19
|
-
private readonly _contracts;
|
20
|
-
/**
|
21
|
-
* Creates an instance of ArvoContractLibrary.
|
22
|
-
* @param {T[]} contracts - An array of ArvoContract instances to initialize the library.
|
23
|
-
* @throws An error in case the URI are duplicated
|
24
|
-
*/
|
25
|
-
constructor(contracts: T[]);
|
26
|
-
/**
|
27
|
-
* Returns a readonly array of all ArvoContract instances in the library.
|
28
|
-
* @returns {Array<T>} A readonly array of ArvoContract instances.
|
29
|
-
*/
|
30
|
-
list(): Array<T>;
|
31
|
-
/**
|
32
|
-
* Retrieves an ArvoContract instance by its URI.
|
33
|
-
* @template U - The type of the URI to search for.
|
34
|
-
* @param {U} uri - The URI of the contract to retrieve.
|
35
|
-
* @returns {Extract<T, { uri: U }>} A readonly ArvoContract instance matching the given URI.
|
36
|
-
* @throws {Error} If no contract with the given URI is found in the library.
|
37
|
-
*/
|
38
|
-
get<U extends ExtractContractUri<T>>(uri: U): Extract<T, {
|
39
|
-
uri: U;
|
40
|
-
}>;
|
41
|
-
/**
|
42
|
-
* Get an object where keys are contract URIs and values are readonly contract instances.
|
43
|
-
*/
|
44
|
-
get contracts(): {
|
45
|
-
[K in ExtractContractUri<T>]: Extract<T, {
|
46
|
-
uri: K;
|
47
|
-
}>;
|
48
|
-
};
|
49
|
-
/**
|
50
|
-
* Checks if the library contains a contract with the given URI.
|
51
|
-
* @param {string} uri - The URI to check for.
|
52
|
-
* @returns {boolean} True if a contract with the given URI exists in the library, false otherwise.
|
53
|
-
*/
|
54
|
-
has(uri: string): boolean;
|
55
|
-
/**
|
56
|
-
* Returns the number of contracts in the library.
|
57
|
-
* @returns {number} The number of contracts in the library.
|
58
|
-
*/
|
59
|
-
get size(): number;
|
60
|
-
}
|
61
|
-
export {};
|
@@ -1,87 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
3
|
-
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
4
|
-
if (ar || !(i in from)) {
|
5
|
-
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
6
|
-
ar[i] = from[i];
|
7
|
-
}
|
8
|
-
}
|
9
|
-
return to.concat(ar || Array.prototype.slice.call(from));
|
10
|
-
};
|
11
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
12
|
-
/**
|
13
|
-
* A library class for managing and accessing ArvoContract instances.
|
14
|
-
* @template T - The type of ArvoContract stored in the library.
|
15
|
-
*/
|
16
|
-
var ArvoContractLibrary = /** @class */ (function () {
|
17
|
-
/**
|
18
|
-
* Creates an instance of ArvoContractLibrary.
|
19
|
-
* @param {T[]} contracts - An array of ArvoContract instances to initialize the library.
|
20
|
-
* @throws An error in case the URI are duplicated
|
21
|
-
*/
|
22
|
-
function ArvoContractLibrary(contracts) {
|
23
|
-
var uriSet = new Set();
|
24
|
-
contracts.forEach(function (contract) {
|
25
|
-
if (uriSet.has(contract.uri)) {
|
26
|
-
throw new Error("Duplicate contract URI found: ".concat(contract.uri));
|
27
|
-
}
|
28
|
-
uriSet.add(contract.uri);
|
29
|
-
});
|
30
|
-
this._contracts = __spreadArray([], contracts, true);
|
31
|
-
}
|
32
|
-
/**
|
33
|
-
* Returns a readonly array of all ArvoContract instances in the library.
|
34
|
-
* @returns {Array<T>} A readonly array of ArvoContract instances.
|
35
|
-
*/
|
36
|
-
ArvoContractLibrary.prototype.list = function () {
|
37
|
-
return Object.freeze(__spreadArray([], this._contracts, true));
|
38
|
-
};
|
39
|
-
/**
|
40
|
-
* Retrieves an ArvoContract instance by its URI.
|
41
|
-
* @template U - The type of the URI to search for.
|
42
|
-
* @param {U} uri - The URI of the contract to retrieve.
|
43
|
-
* @returns {Extract<T, { uri: U }>} A readonly ArvoContract instance matching the given URI.
|
44
|
-
* @throws {Error} If no contract with the given URI is found in the library.
|
45
|
-
*/
|
46
|
-
ArvoContractLibrary.prototype.get = function (uri) {
|
47
|
-
var contract = this._contracts.find(function (item) { return item.uri === uri; });
|
48
|
-
if (!contract) {
|
49
|
-
throw new Error("ArvoContract with URI \"".concat(uri, "\" not found in the library"));
|
50
|
-
}
|
51
|
-
return Object.freeze(contract);
|
52
|
-
};
|
53
|
-
Object.defineProperty(ArvoContractLibrary.prototype, "contracts", {
|
54
|
-
/**
|
55
|
-
* Get an object where keys are contract URIs and values are readonly contract instances.
|
56
|
-
*/
|
57
|
-
get: function () {
|
58
|
-
return Object.freeze(Object.assign.apply(Object, __spreadArray([{}], this._contracts.map(function (item) {
|
59
|
-
var _a;
|
60
|
-
return (_a = {}, _a[item.uri] = Object.freeze(item), _a);
|
61
|
-
}), false)));
|
62
|
-
},
|
63
|
-
enumerable: false,
|
64
|
-
configurable: true
|
65
|
-
});
|
66
|
-
/**
|
67
|
-
* Checks if the library contains a contract with the given URI.
|
68
|
-
* @param {string} uri - The URI to check for.
|
69
|
-
* @returns {boolean} True if a contract with the given URI exists in the library, false otherwise.
|
70
|
-
*/
|
71
|
-
ArvoContractLibrary.prototype.has = function (uri) {
|
72
|
-
return this._contracts.some(function (contract) { return contract.uri === uri; });
|
73
|
-
};
|
74
|
-
Object.defineProperty(ArvoContractLibrary.prototype, "size", {
|
75
|
-
/**
|
76
|
-
* Returns the number of contracts in the library.
|
77
|
-
* @returns {number} The number of contracts in the library.
|
78
|
-
*/
|
79
|
-
get: function () {
|
80
|
-
return this._contracts.length;
|
81
|
-
},
|
82
|
-
enumerable: false,
|
83
|
-
configurable: true
|
84
|
-
});
|
85
|
-
return ArvoContractLibrary;
|
86
|
-
}());
|
87
|
-
exports.default = ArvoContractLibrary;
|
@@ -1,67 +0,0 @@
|
|
1
|
-
import { z } from 'zod';
|
2
|
-
import { ICreateArvoOrchestratorContract } from './types';
|
3
|
-
import ArvoOrchestratorContract from '.';
|
4
|
-
/**
|
5
|
-
* Creates an ArvoOrchestratorContract with specified parameters.
|
6
|
-
*
|
7
|
-
* The ArvoOrchestratorContract is a specialized contract class designed to manage the lifecycle
|
8
|
-
* of orchestration processes within the Arvo framework. It extends the base ArvoContract class
|
9
|
-
* to provide specific functionality for orchestration scenarios.
|
10
|
-
*
|
11
|
-
* Key features:
|
12
|
-
* 1. Initialization: Defines the structure and validation for the initial event that starts the orchestration.
|
13
|
-
* The init schema is automatically intersected with OrchestrationInitEventBaseSchema.
|
14
|
-
* 2. Completion: Specifies the event type and data emitted when the orchestration process concludes.
|
15
|
-
* 3. Type Safety: Utilizes TypeScript generics to ensure type consistency across the contract definition.
|
16
|
-
* 4. Runtime Validation: Employs Zod schemas for robust runtime type checking and data validation.
|
17
|
-
*
|
18
|
-
* Base Schema:
|
19
|
-
* The OrchestrationInitEventBaseSchema is automatically intersected with the user-provided init schema.
|
20
|
-
* This base schema includes essential fields for orchestration, such as:
|
21
|
-
* - parentSubject$$: Identifies the subject of the parent process or event in the ArvoEvent system.
|
22
|
-
*
|
23
|
-
* This contract serves as a crucial component in maintaining consistency and type safety
|
24
|
-
* throughout the orchestration process, from initiation to completion.
|
25
|
-
*
|
26
|
-
* @param param - The configuration object for creating the contract.
|
27
|
-
* @param param.uri - The URI for the contract.
|
28
|
-
* @param param.name - The name of the contract (must be lowercase alphanumeric with dots).
|
29
|
-
* @param param.schema - The schema object containing init and complete Zod schemas.
|
30
|
-
* @param param.schema.init - The Zod schema for initialization (will be intersected with OrchestrationInitEventBaseSchema).
|
31
|
-
* @param param.schema.complete - The Zod schema for completion.
|
32
|
-
*
|
33
|
-
* @throws {Error} Throws an error if the name is not lowercase alphanumeric with dots.
|
34
|
-
*
|
35
|
-
* @returns Returns a new ArvoOrchestratorContract instance with the specified parameters.
|
36
|
-
*
|
37
|
-
* @example
|
38
|
-
* ```typescript
|
39
|
-
* import { createArvoOrchestratorContract } from 'arvo-core'
|
40
|
-
* import { z } from 'zod'
|
41
|
-
*
|
42
|
-
* const contract = createArvoOrchestratorContract({
|
43
|
-
* uri: '#/example/contract',
|
44
|
-
* name: 'rag.orchestrator',
|
45
|
-
* schema: {
|
46
|
-
* init: z.object({
|
47
|
-
* request: z.string(),
|
48
|
-
* vectorStore: z.string(),
|
49
|
-
* llm: z.string()
|
50
|
-
* }),
|
51
|
-
* complete: z.object({
|
52
|
-
* response: z.string()
|
53
|
-
* })
|
54
|
-
* }
|
55
|
-
* })
|
56
|
-
* ```
|
57
|
-
*
|
58
|
-
* In this example, the actual init schema will be an intersection of the provided schema
|
59
|
-
* and the OrchestrationInitEventBaseSchema, ensuring all necessary fields are included.
|
60
|
-
*/
|
61
|
-
export declare const createArvoOrchestratorContract: <TUri extends string, TName extends string, TInit extends z.AnyZodObject, TComplete extends z.ZodTypeAny>(param: ICreateArvoOrchestratorContract<TUri, TName, TInit, TComplete>) => ArvoOrchestratorContract<TUri, `arvo.orc.${TName}`, z.ZodObject<z.objectUtil.extendShape<{
|
62
|
-
parentSubject$$: z.ZodNullable<z.ZodString>;
|
63
|
-
}, TInit["shape"]>, TInit["_def"]["unknownKeys"], TInit["_def"]["catchall"], z.objectOutputType<z.objectUtil.extendShape<{
|
64
|
-
parentSubject$$: z.ZodNullable<z.ZodString>;
|
65
|
-
}, TInit["shape"]>, TInit["_def"]["catchall"], TInit["_def"]["unknownKeys"]>, z.objectInputType<z.objectUtil.extendShape<{
|
66
|
-
parentSubject$$: z.ZodNullable<z.ZodString>;
|
67
|
-
}, TInit["shape"]>, TInit["_def"]["catchall"], TInit["_def"]["unknownKeys"]>>, `arvo.orc.${TName}.done`, TComplete>;
|
@@ -1,101 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
-
};
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
-
exports.createArvoOrchestratorContract = void 0;
|
7
|
-
var _1 = __importDefault(require("."));
|
8
|
-
var typegen_1 = require("./typegen");
|
9
|
-
var schema_1 = require("./schema");
|
10
|
-
/**
|
11
|
-
* Validates if a string contains only uppercase or lowercase alphanumeric characters.
|
12
|
-
*
|
13
|
-
* This function checks if the input string consists solely of:
|
14
|
-
* - Lowercase letters (a-z)
|
15
|
-
* - Numbers (0-9)
|
16
|
-
* - Dot (.)
|
17
|
-
*
|
18
|
-
* It does not allow any special characters, spaces, or other non-alphanumeric characters.
|
19
|
-
*
|
20
|
-
* @param input - The string to be validated.
|
21
|
-
* @returns True if the string contains only alphanumeric characters, false otherwise.
|
22
|
-
*/
|
23
|
-
function isLowerAlphanumeric(input) {
|
24
|
-
var alphanumericRegex = /^[a-z0-9.]+$/;
|
25
|
-
return alphanumericRegex.test(input);
|
26
|
-
}
|
27
|
-
/**
|
28
|
-
* Creates an ArvoOrchestratorContract with specified parameters.
|
29
|
-
*
|
30
|
-
* The ArvoOrchestratorContract is a specialized contract class designed to manage the lifecycle
|
31
|
-
* of orchestration processes within the Arvo framework. It extends the base ArvoContract class
|
32
|
-
* to provide specific functionality for orchestration scenarios.
|
33
|
-
*
|
34
|
-
* Key features:
|
35
|
-
* 1. Initialization: Defines the structure and validation for the initial event that starts the orchestration.
|
36
|
-
* The init schema is automatically intersected with OrchestrationInitEventBaseSchema.
|
37
|
-
* 2. Completion: Specifies the event type and data emitted when the orchestration process concludes.
|
38
|
-
* 3. Type Safety: Utilizes TypeScript generics to ensure type consistency across the contract definition.
|
39
|
-
* 4. Runtime Validation: Employs Zod schemas for robust runtime type checking and data validation.
|
40
|
-
*
|
41
|
-
* Base Schema:
|
42
|
-
* The OrchestrationInitEventBaseSchema is automatically intersected with the user-provided init schema.
|
43
|
-
* This base schema includes essential fields for orchestration, such as:
|
44
|
-
* - parentSubject$$: Identifies the subject of the parent process or event in the ArvoEvent system.
|
45
|
-
*
|
46
|
-
* This contract serves as a crucial component in maintaining consistency and type safety
|
47
|
-
* throughout the orchestration process, from initiation to completion.
|
48
|
-
*
|
49
|
-
* @param param - The configuration object for creating the contract.
|
50
|
-
* @param param.uri - The URI for the contract.
|
51
|
-
* @param param.name - The name of the contract (must be lowercase alphanumeric with dots).
|
52
|
-
* @param param.schema - The schema object containing init and complete Zod schemas.
|
53
|
-
* @param param.schema.init - The Zod schema for initialization (will be intersected with OrchestrationInitEventBaseSchema).
|
54
|
-
* @param param.schema.complete - The Zod schema for completion.
|
55
|
-
*
|
56
|
-
* @throws {Error} Throws an error if the name is not lowercase alphanumeric with dots.
|
57
|
-
*
|
58
|
-
* @returns Returns a new ArvoOrchestratorContract instance with the specified parameters.
|
59
|
-
*
|
60
|
-
* @example
|
61
|
-
* ```typescript
|
62
|
-
* import { createArvoOrchestratorContract } from 'arvo-core'
|
63
|
-
* import { z } from 'zod'
|
64
|
-
*
|
65
|
-
* const contract = createArvoOrchestratorContract({
|
66
|
-
* uri: '#/example/contract',
|
67
|
-
* name: 'rag.orchestrator',
|
68
|
-
* schema: {
|
69
|
-
* init: z.object({
|
70
|
-
* request: z.string(),
|
71
|
-
* vectorStore: z.string(),
|
72
|
-
* llm: z.string()
|
73
|
-
* }),
|
74
|
-
* complete: z.object({
|
75
|
-
* response: z.string()
|
76
|
-
* })
|
77
|
-
* }
|
78
|
-
* })
|
79
|
-
* ```
|
80
|
-
*
|
81
|
-
* In this example, the actual init schema will be an intersection of the provided schema
|
82
|
-
* and the OrchestrationInitEventBaseSchema, ensuring all necessary fields are included.
|
83
|
-
*/
|
84
|
-
var createArvoOrchestratorContract = function (param) {
|
85
|
-
if (!isLowerAlphanumeric(param.name)) {
|
86
|
-
throw new Error("Invalid 'name' = '".concat(param.name, "'. The 'name' must only contain alphanumeric characters. e.g. test.orchestrator"));
|
87
|
-
}
|
88
|
-
var mergedSchema = schema_1.OrchestrationInitEventBaseSchema.merge(param.schema.init);
|
89
|
-
return new _1.default({
|
90
|
-
uri: param.uri,
|
91
|
-
init: {
|
92
|
-
type: typegen_1.ArvoOrchestratorEventTypeGen.init(param.name),
|
93
|
-
schema: mergedSchema,
|
94
|
-
},
|
95
|
-
complete: {
|
96
|
-
type: typegen_1.ArvoOrchestratorEventTypeGen.complete(param.name),
|
97
|
-
schema: param.schema.complete,
|
98
|
-
},
|
99
|
-
});
|
100
|
-
};
|
101
|
-
exports.createArvoOrchestratorContract = createArvoOrchestratorContract;
|