arvo-core 1.0.3 → 1.0.5
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 +8 -0
- package/README.md +15 -12
- package/dist/ArvoContract/helpers.d.ts +43 -1
- package/dist/ArvoContract/helpers.js +65 -1
- package/dist/ArvoContract/index.d.ts +1 -2
- package/dist/ArvoEvent/helpers.js +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +2 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
@@ -12,3 +12,11 @@
|
|
12
12
|
|
13
13
|
- Making type in ArvoEvent a generic string for better type control
|
14
14
|
|
15
|
+
## [0.0.4] - 2024-08-31
|
16
|
+
|
17
|
+
- Created an event factory generator for creating contractually compliant events
|
18
|
+
|
19
|
+
## [0.0.5] - 2024-08-31
|
20
|
+
|
21
|
+
- Updated README documentation
|
22
|
+
|
package/README.md
CHANGED
@@ -1,5 +1,3 @@
|
|
1
|
-
|
2
|
-
|
3
1
|
# Arvo
|
4
2
|
|
5
3
|
## What is Arvo
|
@@ -28,13 +26,11 @@ This core package defines primitive types and utility functions to help you quic
|
|
28
26
|
|
29
27
|
## Documentation & Resources
|
30
28
|
|
31
|
-
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
| Documenation | https://saadahmad123.github.io/arvo-core/index.html |
|
37
|
-
|
29
|
+
| Source | Link |
|
30
|
+
| ------------ | -------------------------------------------------------- |
|
31
|
+
| Package | https://www.npmjs.com/package/arvo-core?activeTab=readme |
|
32
|
+
| Github | https://github.com/SaadAhmad123/arvo-core |
|
33
|
+
| Documenation | https://saadahmad123.github.io/arvo-core/index.html |
|
38
34
|
|
39
35
|
## Installation
|
40
36
|
|
@@ -43,11 +39,11 @@ You can install the core package via `npm` or `yarn`
|
|
43
39
|
```bash
|
44
40
|
npm install arvo-core
|
45
41
|
```
|
42
|
+
|
46
43
|
```bash
|
47
44
|
yarn add arvo-core
|
48
45
|
```
|
49
46
|
|
50
|
-
|
51
47
|
## Components
|
52
48
|
|
53
49
|
At its core, Arvo has only three main data structures:
|
@@ -70,9 +66,15 @@ To start using Arvo in your project:
|
|
70
66
|
|
71
67
|
- Install the package as shown in the Installation section.
|
72
68
|
- Import the necessary components:
|
69
|
+
|
73
70
|
```javascript
|
74
|
-
import {
|
71
|
+
import {
|
72
|
+
createArvoEvent,
|
73
|
+
createArvoContract,
|
74
|
+
createArvoContractLibrary,
|
75
|
+
} from 'arvo-core';
|
75
76
|
```
|
77
|
+
|
76
78
|
- Begin defining your events and contracts using the provided classes.
|
77
79
|
|
78
80
|
## License
|
@@ -80,4 +82,5 @@ import { createArvoEvent, createArvoContract, createArvoContractLibrary } from '
|
|
80
82
|
This package is available under the MIT License. For more details, refer to the [LICENSE.md](LICENSE.md) file in the project repository.
|
81
83
|
|
82
84
|
## Change Logs
|
83
|
-
|
85
|
+
|
86
|
+
For a detailed list of changes and updates, please refer to the [document](CHANGELOG.md) file.
|
@@ -1,5 +1,9 @@
|
|
1
1
|
import { IArvoContract } from './types';
|
2
|
-
import ArvoContract from '.';
|
2
|
+
import ArvoContract, { ExtractEventType } from '.';
|
3
|
+
import { CreateArvoEvent } from '../ArvoEvent/types';
|
4
|
+
import { TelemetryContext } from '../OpenTelemetry/types';
|
5
|
+
import { ArvoContractRecord } from './types';
|
6
|
+
import { z } from 'zod';
|
3
7
|
/**
|
4
8
|
* Infers the ArvoContract type from a given IArvoContract.
|
5
9
|
*/
|
@@ -33,3 +37,41 @@ export type InferArvoContract<T> = T extends IArvoContract<infer U, infer V, inf
|
|
33
37
|
* });
|
34
38
|
*/
|
35
39
|
export declare const createArvoContract: <const TContract extends IArvoContract>(contract: TContract) => InferArvoContract<TContract>;
|
40
|
+
/**
|
41
|
+
* Creates a contractual ArvoEvent factory based on the provided contract.
|
42
|
+
*
|
43
|
+
* @template T - The type of the contract.
|
44
|
+
* @template TAccepts - The type of events the contract accepts.
|
45
|
+
* @template TEmits - The type of events the contract emits.
|
46
|
+
* @param {ArvoContract<T, TAccepts, TEmits>} contract - The ArvoContract to base the events on.
|
47
|
+
* @returns {Object} An object with 'accepts' and 'emits' methods for creating events.
|
48
|
+
*/
|
49
|
+
export declare const createContractualArvoEvent: <T extends string = string, TAccepts extends ArvoContractRecord = ArvoContractRecord, TEmits extends ArvoContractRecord = ArvoContractRecord>(contract: ArvoContract<T, TAccepts, TEmits>) => {
|
50
|
+
/**
|
51
|
+
* Creates an ArvoEvent as per the accept record of the contract.
|
52
|
+
*
|
53
|
+
* @template TExtension - The type of extensions to add to the event.
|
54
|
+
* @param {CreateArvoEvent<z.infer<TAccepts['schema']>, TAccepts['type']>} event - The event to create.
|
55
|
+
* @param {TExtension} [extensions] - Optional extensions to add to the event.
|
56
|
+
* @param {TelemetryContext} [telemetry] - Optional telemetry context for tracing.
|
57
|
+
* @returns The created ArvoEvent as per the accept record of the contract.
|
58
|
+
* @throws {Error} If the event data fails validation against the contract.
|
59
|
+
*/
|
60
|
+
accepts: <TExtension extends Record<string, any>>(event: CreateArvoEvent<z.infer<TAccepts["schema"]>, TAccepts["type"]>, extensions?: TExtension, telemetry?: TelemetryContext) => import("..").ArvoEvent<z.TypeOf<z.TypeOf<TAccepts["schema"]>>, TExtension, string>;
|
61
|
+
/**
|
62
|
+
* Creates an ArvoEvent as per one of the emits record in the contract.
|
63
|
+
*
|
64
|
+
* @template U - The specific event type from TEmits.
|
65
|
+
* @template TExtension - The type of extensions to add to the event.
|
66
|
+
* @param {CreateArvoEvent<z.infer<Extract<TEmits, { type: U }>['schema']>, U>} event - The event to create.
|
67
|
+
* @param {TExtension} [extensions] - Optional extensions to add to the event.
|
68
|
+
* @param {TelemetryContext} [telemetry] - Optional telemetry context for tracing.
|
69
|
+
* @returns The created ArvoEvent as per one of the emits records of the contract.
|
70
|
+
* @throws {Error} If the event data fails validation against the contract.
|
71
|
+
*/
|
72
|
+
emits: <U extends ExtractEventType<TEmits>, TExtension extends Record<string, any>>(event: CreateArvoEvent<z.infer<Extract<TEmits, {
|
73
|
+
type: U;
|
74
|
+
}>["schema"]>, U>, extensions?: TExtension, telemetry?: TelemetryContext) => import("..").ArvoEvent<z.TypeOf<Extract<TEmits, {
|
75
|
+
type: U;
|
76
|
+
}>["schema"]>, TExtension, string>;
|
77
|
+
};
|
@@ -1,10 +1,23 @@
|
|
1
1
|
"use strict";
|
2
|
+
var __assign = (this && this.__assign) || function () {
|
3
|
+
__assign = Object.assign || function(t) {
|
4
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
5
|
+
s = arguments[i];
|
6
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
7
|
+
t[p] = s[p];
|
8
|
+
}
|
9
|
+
return t;
|
10
|
+
};
|
11
|
+
return __assign.apply(this, arguments);
|
12
|
+
};
|
2
13
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
14
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
15
|
};
|
5
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
-
exports.createArvoContract = void 0;
|
17
|
+
exports.createContractualArvoEvent = exports.createArvoContract = void 0;
|
7
18
|
var _1 = __importDefault(require("."));
|
19
|
+
var helpers_1 = require("../ArvoEvent/helpers");
|
20
|
+
var OpenTelemetry_1 = require("../OpenTelemetry");
|
8
21
|
/**
|
9
22
|
* Creates an ArvoContract instance from the given contract specification.
|
10
23
|
*
|
@@ -37,3 +50,54 @@ var createArvoContract = function (contract) {
|
|
37
50
|
return new _1.default(contract);
|
38
51
|
};
|
39
52
|
exports.createArvoContract = createArvoContract;
|
53
|
+
/**
|
54
|
+
* Creates a contractual ArvoEvent factory based on the provided contract.
|
55
|
+
*
|
56
|
+
* @template T - The type of the contract.
|
57
|
+
* @template TAccepts - The type of events the contract accepts.
|
58
|
+
* @template TEmits - The type of events the contract emits.
|
59
|
+
* @param {ArvoContract<T, TAccepts, TEmits>} contract - The ArvoContract to base the events on.
|
60
|
+
* @returns {Object} An object with 'accepts' and 'emits' methods for creating events.
|
61
|
+
*/
|
62
|
+
var createContractualArvoEvent = function (contract) { return ({
|
63
|
+
/**
|
64
|
+
* Creates an ArvoEvent as per the accept record of the contract.
|
65
|
+
*
|
66
|
+
* @template TExtension - The type of extensions to add to the event.
|
67
|
+
* @param {CreateArvoEvent<z.infer<TAccepts['schema']>, TAccepts['type']>} event - The event to create.
|
68
|
+
* @param {TExtension} [extensions] - Optional extensions to add to the event.
|
69
|
+
* @param {TelemetryContext} [telemetry] - Optional telemetry context for tracing.
|
70
|
+
* @returns The created ArvoEvent as per the accept record of the contract.
|
71
|
+
* @throws {Error} If the event data fails validation against the contract.
|
72
|
+
*/
|
73
|
+
accepts: function (event, extensions, telemetry) {
|
74
|
+
return (0, OpenTelemetry_1.createOtelSpan)(telemetry || 'ArvoEvent Creation Tracer', 'createArvoContractEvent.accepts', {}, function () {
|
75
|
+
var validationResult = contract.validateInput(event.type, event.data);
|
76
|
+
if (!validationResult.success) {
|
77
|
+
throw new Error("Accept Event data validation failed: ".concat(validationResult.error.message));
|
78
|
+
}
|
79
|
+
return (0, helpers_1.createArvoEvent)(__assign(__assign({}, event), { data: validationResult.data }), extensions, telemetry);
|
80
|
+
});
|
81
|
+
},
|
82
|
+
/**
|
83
|
+
* Creates an ArvoEvent as per one of the emits record in the contract.
|
84
|
+
*
|
85
|
+
* @template U - The specific event type from TEmits.
|
86
|
+
* @template TExtension - The type of extensions to add to the event.
|
87
|
+
* @param {CreateArvoEvent<z.infer<Extract<TEmits, { type: U }>['schema']>, U>} event - The event to create.
|
88
|
+
* @param {TExtension} [extensions] - Optional extensions to add to the event.
|
89
|
+
* @param {TelemetryContext} [telemetry] - Optional telemetry context for tracing.
|
90
|
+
* @returns The created ArvoEvent as per one of the emits records of the contract.
|
91
|
+
* @throws {Error} If the event data fails validation against the contract.
|
92
|
+
*/
|
93
|
+
emits: function (event, extensions, telemetry) {
|
94
|
+
return (0, OpenTelemetry_1.createOtelSpan)(telemetry || 'ArvoEvent Creation Tracer', 'createArvoContractEvent.emits', {}, function () {
|
95
|
+
var validationResult = contract.validateOutput(event.type, event.data);
|
96
|
+
if (!validationResult.success) {
|
97
|
+
throw new Error("Emit Event data validation failed: ".concat(validationResult.error.message));
|
98
|
+
}
|
99
|
+
return (0, helpers_1.createArvoEvent)(__assign(__assign({}, event), { data: validationResult.data }), extensions, telemetry);
|
100
|
+
});
|
101
|
+
},
|
102
|
+
}); };
|
103
|
+
exports.createContractualArvoEvent = createContractualArvoEvent;
|
@@ -4,7 +4,7 @@ import { ArvoContractRecord, IArvoContract } from './types';
|
|
4
4
|
* Extracts the event type from a given type T.
|
5
5
|
* @template T - The type to extract the event type from.
|
6
6
|
*/
|
7
|
-
type ExtractEventType<T> = T extends {
|
7
|
+
export type ExtractEventType<T> = T extends {
|
8
8
|
type: infer U;
|
9
9
|
} ? U : never;
|
10
10
|
/**
|
@@ -128,4 +128,3 @@ export default class ArvoContract<T extends string = string, TAccepts extends Ar
|
|
128
128
|
}[];
|
129
129
|
};
|
130
130
|
}
|
131
|
-
export {};
|
@@ -47,7 +47,7 @@ var uuid_1 = require("uuid");
|
|
47
47
|
* );
|
48
48
|
*/
|
49
49
|
var createArvoEvent = function (event, extensions, telemetry) {
|
50
|
-
return (0, OpenTelemetry_1.createOtelSpan)(telemetry || 'ArvoEvent Creation Tracer', '
|
50
|
+
return (0, OpenTelemetry_1.createOtelSpan)(telemetry || 'ArvoEvent Creation Tracer', 'createArvoEvent', {}, function (span) {
|
51
51
|
if (event.datacontenttype &&
|
52
52
|
event.datacontenttype !== schema_1.ArvoDataContentType) {
|
53
53
|
var warning = (0, utils_1.cleanString)("\n Warning! The provided datacontenttype(=".concat(event.datacontenttype, ")\n is not ArvoEvent compatible (=").concat(schema_1.ArvoDataContentType, "). There may \n be some limited functionality.\n "));
|
package/dist/index.d.ts
CHANGED
@@ -6,7 +6,7 @@ import { exceptionToSpan, logToSpan, getTelemetryContext, getTelemetryCarrier, c
|
|
6
6
|
import { TelemetryCarrier, TelemetryContext, TelemetryLogLevel } from './OpenTelemetry/types';
|
7
7
|
import { validateURI, cleanString } from './utils';
|
8
8
|
import ArvoContract from './ArvoContract';
|
9
|
-
import { createArvoContract, InferArvoContract } from './ArvoContract/helpers';
|
9
|
+
import { createArvoContract, InferArvoContract, createContractualArvoEvent } from './ArvoContract/helpers';
|
10
10
|
import { ArvoContractValidators } from './ArvoContract/validators';
|
11
11
|
import { ArvoContractRecord, IArvoContract, ResolveArvoContractRecord } from './ArvoContract/types';
|
12
12
|
import ArvoContractLibrary from './ArvoContractLibrary';
|
@@ -77,4 +77,4 @@ declare const ArvoEventSchemas: {
|
|
77
77
|
tracestate: string | null;
|
78
78
|
}>;
|
79
79
|
};
|
80
|
-
export { ArvoEvent, createArvoEvent, ArvoDataContentType, ArvoEventData, CloudEventExtension, ArvoEventSchemas, CloudEventContext, ArvoExtension, OpenTelemetryExtension, CreateArvoEvent, exceptionToSpan, logToSpan, getTelemetryCarrier, getTelemetryContext, createOtelSpan, TelemetryCarrier, TelemetryContext, TelemetryLogLevel, OTelNull, validateURI, cleanString, ArvoContract, createArvoContract, ArvoContractValidators, ArvoContractRecord, InferArvoContract, IArvoContract, ResolveArvoContractRecord, ArvoContractLibrary, createArvoContractLibrary, };
|
80
|
+
export { ArvoEvent, createArvoEvent, ArvoDataContentType, ArvoEventData, CloudEventExtension, ArvoEventSchemas, CloudEventContext, ArvoExtension, OpenTelemetryExtension, CreateArvoEvent, exceptionToSpan, logToSpan, getTelemetryCarrier, getTelemetryContext, createOtelSpan, TelemetryCarrier, TelemetryContext, TelemetryLogLevel, OTelNull, validateURI, cleanString, ArvoContract, createArvoContract, ArvoContractValidators, ArvoContractRecord, InferArvoContract, IArvoContract, ResolveArvoContractRecord, ArvoContractLibrary, createArvoContractLibrary, createContractualArvoEvent, };
|
package/dist/index.js
CHANGED
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
4
|
};
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
-
exports.createArvoContractLibrary = exports.ArvoContractLibrary = exports.ArvoContractValidators = exports.createArvoContract = exports.ArvoContract = exports.cleanString = exports.validateURI = exports.OTelNull = exports.createOtelSpan = exports.getTelemetryContext = exports.getTelemetryCarrier = exports.logToSpan = exports.exceptionToSpan = exports.ArvoEventSchemas = exports.ArvoDataContentType = exports.createArvoEvent = exports.ArvoEvent = void 0;
|
6
|
+
exports.createContractualArvoEvent = exports.createArvoContractLibrary = exports.ArvoContractLibrary = exports.ArvoContractValidators = exports.createArvoContract = exports.ArvoContract = exports.cleanString = exports.validateURI = exports.OTelNull = exports.createOtelSpan = exports.getTelemetryContext = exports.getTelemetryCarrier = exports.logToSpan = exports.exceptionToSpan = exports.ArvoEventSchemas = exports.ArvoDataContentType = exports.createArvoEvent = exports.ArvoEvent = void 0;
|
7
7
|
var ArvoEvent_1 = __importDefault(require("./ArvoEvent"));
|
8
8
|
exports.ArvoEvent = ArvoEvent_1.default;
|
9
9
|
var schema_1 = require("./ArvoEvent/schema");
|
@@ -24,6 +24,7 @@ var ArvoContract_1 = __importDefault(require("./ArvoContract"));
|
|
24
24
|
exports.ArvoContract = ArvoContract_1.default;
|
25
25
|
var helpers_2 = require("./ArvoContract/helpers");
|
26
26
|
Object.defineProperty(exports, "createArvoContract", { enumerable: true, get: function () { return helpers_2.createArvoContract; } });
|
27
|
+
Object.defineProperty(exports, "createContractualArvoEvent", { enumerable: true, get: function () { return helpers_2.createContractualArvoEvent; } });
|
27
28
|
var validators_1 = require("./ArvoContract/validators");
|
28
29
|
Object.defineProperty(exports, "ArvoContractValidators", { enumerable: true, get: function () { return validators_1.ArvoContractValidators; } });
|
29
30
|
var ArvoContractLibrary_1 = __importDefault(require("./ArvoContractLibrary"));
|