@segment/actions-core 1.3.0-next.0
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/cjs/create-request-client.d.ts +5 -0
- package/dist/cjs/create-request-client.js +24 -0
- package/dist/cjs/dayjs.d.ts +2 -0
- package/dist/cjs/dayjs.js +10 -0
- package/dist/cjs/defaults.d.ts +2 -0
- package/dist/cjs/defaults.js +15 -0
- package/dist/cjs/destination-kit/action.d.ts +86 -0
- package/dist/cjs/destination-kit/action.js +217 -0
- package/dist/cjs/destination-kit/fields-to-jsonschema.d.ts +4 -0
- package/dist/cjs/destination-kit/fields-to-jsonschema.js +38 -0
- package/dist/cjs/destination-kit/index.d.ts +84 -0
- package/dist/cjs/destination-kit/index.js +165 -0
- package/dist/cjs/destination-kit/step.d.ts +38 -0
- package/dist/cjs/destination-kit/step.js +54 -0
- package/dist/cjs/destination-kit/types.d.ts +39 -0
- package/dist/cjs/destination-kit/types.js +3 -0
- package/dist/cjs/get.d.ts +5 -0
- package/dist/cjs/get.js +22 -0
- package/dist/cjs/index.d.ts +12 -0
- package/dist/cjs/index.js +26 -0
- package/dist/cjs/json-object.d.ts +11 -0
- package/dist/cjs/json-object.js +3 -0
- package/dist/cjs/mapping-kit/index.d.ts +8 -0
- package/dist/cjs/mapping-kit/index.js +182 -0
- package/dist/cjs/mapping-kit/is-directive.d.ts +2 -0
- package/dist/cjs/mapping-kit/is-directive.js +22 -0
- package/dist/cjs/mapping-kit/placeholders.d.ts +4 -0
- package/dist/cjs/mapping-kit/placeholders.js +51 -0
- package/dist/cjs/mapping-kit/validate.d.ts +1 -0
- package/dist/cjs/mapping-kit/validate.js +280 -0
- package/dist/cjs/omit.d.ts +4 -0
- package/dist/cjs/omit.js +15 -0
- package/dist/cjs/real-type-of.d.ts +12 -0
- package/dist/cjs/real-type-of.js +25 -0
- package/dist/cjs/remove-undefined.d.ts +1 -0
- package/dist/cjs/remove-undefined.js +24 -0
- package/dist/cjs/segment-event.d.ts +127 -0
- package/dist/cjs/segment-event.js +3 -0
- package/dist/cjs/time.d.ts +8 -0
- package/dist/cjs/time.js +18 -0
- package/dist/esm/create-request-client.d.ts +5 -0
- package/dist/esm/create-request-client.js +18 -0
- package/dist/esm/dayjs.d.ts +2 -0
- package/dist/esm/dayjs.js +5 -0
- package/dist/esm/defaults.d.ts +2 -0
- package/dist/esm/defaults.js +11 -0
- package/dist/esm/destination-kit/action.d.ts +86 -0
- package/dist/esm/destination-kit/action.js +209 -0
- package/dist/esm/destination-kit/fields-to-jsonschema.d.ts +4 -0
- package/dist/esm/destination-kit/fields-to-jsonschema.js +33 -0
- package/dist/esm/destination-kit/index.d.ts +84 -0
- package/dist/esm/destination-kit/index.js +157 -0
- package/dist/esm/destination-kit/step.d.ts +38 -0
- package/dist/esm/destination-kit/step.js +49 -0
- package/dist/esm/destination-kit/types.d.ts +39 -0
- package/dist/esm/destination-kit/types.js +2 -0
- package/dist/esm/get.d.ts +5 -0
- package/dist/esm/get.js +18 -0
- package/dist/esm/index.d.ts +12 -0
- package/dist/esm/index.js +9 -0
- package/dist/esm/json-object.d.ts +11 -0
- package/dist/esm/json-object.js +2 -0
- package/dist/esm/mapping-kit/index.d.ts +8 -0
- package/dist/esm/mapping-kit/index.js +175 -0
- package/dist/esm/mapping-kit/is-directive.d.ts +2 -0
- package/dist/esm/mapping-kit/is-directive.js +18 -0
- package/dist/esm/mapping-kit/placeholders.d.ts +4 -0
- package/dist/esm/mapping-kit/placeholders.js +47 -0
- package/dist/esm/mapping-kit/validate.d.ts +1 -0
- package/dist/esm/mapping-kit/validate.js +274 -0
- package/dist/esm/omit.d.ts +4 -0
- package/dist/esm/omit.js +11 -0
- package/dist/esm/real-type-of.d.ts +12 -0
- package/dist/esm/real-type-of.js +18 -0
- package/dist/esm/remove-undefined.d.ts +1 -0
- package/dist/esm/remove-undefined.js +20 -0
- package/dist/esm/segment-event.d.ts +127 -0
- package/dist/esm/segment-event.js +2 -0
- package/dist/esm/time.d.ts +8 -0
- package/dist/esm/time.js +13 -0
- package/package.json +74 -0
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { EventEmitter } from 'events';
|
|
2
|
+
/**
|
|
3
|
+
* Step is the base class for all discrete execution steps. It handles executing the step, logging,
|
|
4
|
+
* catching errors, and returning a result object.
|
|
5
|
+
*/
|
|
6
|
+
export class Step extends EventEmitter {
|
|
7
|
+
async execute(data) {
|
|
8
|
+
const result = {
|
|
9
|
+
output: null,
|
|
10
|
+
error: null
|
|
11
|
+
};
|
|
12
|
+
if (!this.executeStep) {
|
|
13
|
+
return result;
|
|
14
|
+
}
|
|
15
|
+
try {
|
|
16
|
+
result.output = await this.executeStep(data);
|
|
17
|
+
}
|
|
18
|
+
catch (e) {
|
|
19
|
+
result.error = e;
|
|
20
|
+
}
|
|
21
|
+
return result;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Steps is a list of one or more Step instances that can be executed in-order.
|
|
26
|
+
*/
|
|
27
|
+
export class Steps {
|
|
28
|
+
constructor() {
|
|
29
|
+
this.steps = [];
|
|
30
|
+
}
|
|
31
|
+
push(step) {
|
|
32
|
+
this.steps.push(step);
|
|
33
|
+
}
|
|
34
|
+
async execute(data) {
|
|
35
|
+
if (this.steps.length === 0) {
|
|
36
|
+
throw new Error('no steps defined');
|
|
37
|
+
}
|
|
38
|
+
const results = [];
|
|
39
|
+
for (const step of this.steps) {
|
|
40
|
+
const result = await step.execute(data);
|
|
41
|
+
results.push(result);
|
|
42
|
+
if (result.error) {
|
|
43
|
+
break;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return results;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9kZXN0aW5hdGlvbi1raXQvc3RlcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sUUFBUSxDQUFBO0FBcUJyQzs7O0dBR0c7QUFDSCxNQUFNLE9BQU8sSUFBd0IsU0FBUSxZQUFZO0lBR3ZELEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBcUM7UUFDakQsTUFBTSxNQUFNLEdBQWU7WUFDekIsTUFBTSxFQUFFLElBQUk7WUFDWixLQUFLLEVBQUUsSUFBSTtTQUNaLENBQUE7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNyQixPQUFPLE1BQU0sQ0FBQTtTQUNkO1FBRUQsSUFBSTtZQUNGLE1BQU0sQ0FBQyxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFBO1NBQzdDO1FBQUMsT0FBTyxDQUFDLEVBQUU7WUFDVixNQUFNLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQTtTQUNqQjtRQUVELE9BQU8sTUFBTSxDQUFBO0lBQ2YsQ0FBQztDQUNGO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLE9BQU8sS0FBSztJQUdoQjtRQUNFLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFBO0lBQ2pCLENBQUM7SUFFRCxJQUFJLENBQUMsSUFBNkI7UUFDaEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDdkIsQ0FBQztJQUVELEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBcUM7UUFDakQsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDM0IsTUFBTSxJQUFJLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxDQUFBO1NBQ3BDO1FBRUQsTUFBTSxPQUFPLEdBQWlCLEVBQUUsQ0FBQTtRQUVoQyxLQUFLLE1BQU0sSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDN0IsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFBO1lBRXZDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7WUFFcEIsSUFBSSxNQUFNLENBQUMsS0FBSyxFQUFFO2dCQUNoQixNQUFLO2FBQ047U0FDRjtRQUVELE9BQU8sT0FBTyxDQUFBO0lBQ2hCLENBQUM7Q0FDRiJ9
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { Options } from 'got';
|
|
2
|
+
import { JSONSchema4 } from 'json-schema';
|
|
3
|
+
import { ExecuteInput } from './step';
|
|
4
|
+
export interface AutocompleteResponse {
|
|
5
|
+
body: {
|
|
6
|
+
data: AutocompleteItem[];
|
|
7
|
+
pagination: {
|
|
8
|
+
nextPage?: string;
|
|
9
|
+
};
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
export interface AutocompleteItem {
|
|
13
|
+
label: string;
|
|
14
|
+
value: string;
|
|
15
|
+
}
|
|
16
|
+
export interface InputField extends Omit<JSONSchema4, 'required'> {
|
|
17
|
+
required?: boolean;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* The supported request options you can use to extend the instance of our `request`
|
|
21
|
+
*/
|
|
22
|
+
export interface RequestOptions {
|
|
23
|
+
headers?: Options['headers'];
|
|
24
|
+
method?: Options['method'];
|
|
25
|
+
username?: Options['username'];
|
|
26
|
+
password?: Options['password'];
|
|
27
|
+
prefixUrl?: Options['prefixUrl'];
|
|
28
|
+
responseType?: Options['responseType'];
|
|
29
|
+
searchParams?: Options['searchParams'];
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* A function to configure a request client instance with options
|
|
33
|
+
* that will be applied to every request made by that instance
|
|
34
|
+
*/
|
|
35
|
+
export declare type RequestExtension<Settings, Payload = unknown> = (data: ExecuteInput<Settings, Payload>) => RequestOptions;
|
|
36
|
+
/**
|
|
37
|
+
* A set of request extensions to apply to a request client instance
|
|
38
|
+
*/
|
|
39
|
+
export declare type RequestExtensions<Settings, Payload = unknown> = RequestExtension<Settings, Payload>[];
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lightweight alternative to lodash.get with similar coverage
|
|
3
|
+
* Supports basic path lookup via dot notation `'foo.bar[0].baz'` or an array ['foo', 'bar', '0', 'baz']
|
|
4
|
+
*/
|
|
5
|
+
export declare function get<T = unknown, Default = undefined>(obj: any, path: string | string[], defValue?: Default): T | Default | undefined;
|
package/dist/esm/get.js
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lightweight alternative to lodash.get with similar coverage
|
|
3
|
+
* Supports basic path lookup via dot notation `'foo.bar[0].baz'` or an array ['foo', 'bar', '0', 'baz']
|
|
4
|
+
*/
|
|
5
|
+
export function get(
|
|
6
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
7
|
+
obj, path, defValue) {
|
|
8
|
+
// If path is not defined or it has false value
|
|
9
|
+
if (!path)
|
|
10
|
+
return defValue;
|
|
11
|
+
// Check if path is string or array. Regex : ensure that we do not have '.' and brackets.
|
|
12
|
+
// Regex explained: https://regexr.com/58j0k
|
|
13
|
+
const pathArray = Array.isArray(path) ? path : path.match(/([^[.\]])+/g);
|
|
14
|
+
// Find value if exist return otherwise return undefined value
|
|
15
|
+
const value = pathArray.reduce((prevObj, key) => prevObj && prevObj[key], obj);
|
|
16
|
+
return typeof value !== 'undefined' ? value : defValue;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2dldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsR0FBRztBQUNqQiw4REFBOEQ7QUFDOUQsR0FBUSxFQUNSLElBQXVCLEVBQ3ZCLFFBQWtCO0lBRWxCLCtDQUErQztJQUMvQyxJQUFJLENBQUMsSUFBSTtRQUFFLE9BQU8sUUFBUSxDQUFBO0lBRTFCLHlGQUF5RjtJQUN6Riw0Q0FBNEM7SUFDNUMsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBRSxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBYyxDQUFBO0lBRXRGLDhEQUE4RDtJQUM5RCxNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQTtJQUM5RSxPQUFPLE9BQU8sS0FBSyxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUE7QUFDeEQsQ0FBQyJ9
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export { Destination, fieldsToJsonSchema, jsonSchemaToFields } from './destination-kit';
|
|
2
|
+
export { transform } from './mapping-kit';
|
|
3
|
+
export { defaultValues } from './defaults';
|
|
4
|
+
export { get } from './get';
|
|
5
|
+
export { omit } from './omit';
|
|
6
|
+
export { removeUndefined } from './remove-undefined';
|
|
7
|
+
export { time, duration } from './time';
|
|
8
|
+
export { realTypeOf, isObject, isArray, isString } from './real-type-of';
|
|
9
|
+
export type { ActionDefinition, DestinationDefinition, ExecuteInput, Subscription, SubscriptionStats, AuthenticationScheme, BasicAuthentication, CustomAuthentication } from './destination-kit';
|
|
10
|
+
export type { AutocompleteResponse, AutocompleteItem, InputField, RequestOptions, RequestExtension, RequestExtensions } from './destination-kit/types';
|
|
11
|
+
export type { JSONPrimitive, JSONValue, JSONObject, JSONArray, JSONLike, JSONLikeObject } from './json-object';
|
|
12
|
+
export type { SegmentEvent } from './segment-event';
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export { Destination, fieldsToJsonSchema, jsonSchemaToFields } from './destination-kit';
|
|
2
|
+
export { transform } from './mapping-kit';
|
|
3
|
+
export { defaultValues } from './defaults';
|
|
4
|
+
export { get } from './get';
|
|
5
|
+
export { omit } from './omit';
|
|
6
|
+
export { removeUndefined } from './remove-undefined';
|
|
7
|
+
export { time, duration } from './time';
|
|
8
|
+
export { realTypeOf, isObject, isArray, isString } from './real-type-of';
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBQ3ZGLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDekMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUMxQyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sT0FBTyxDQUFBO0FBQzNCLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxRQUFRLENBQUE7QUFDN0IsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFBO0FBQ3BELE9BQU8sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0sUUFBUSxDQUFBO0FBRXZDLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQSJ9
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export declare type JSONPrimitive = string | number | boolean | null;
|
|
2
|
+
export declare type JSONValue = JSONPrimitive | JSONObject | JSONArray;
|
|
3
|
+
export declare type JSONObject = {
|
|
4
|
+
[member: string]: JSONValue;
|
|
5
|
+
};
|
|
6
|
+
export declare type JSONArray = Array<JSONValue>;
|
|
7
|
+
export declare type JSONLike = JSONPrimitive | JSONLikeObject | Array<JSONLike> | Date | undefined;
|
|
8
|
+
export declare type JSONLikeObject = {
|
|
9
|
+
[member: string]: JSONLike;
|
|
10
|
+
[member: number]: JSONLike;
|
|
11
|
+
};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { JSONObject, JSONLikeObject } from '../json-object';
|
|
2
|
+
/**
|
|
3
|
+
* Validates and transforms a mapping by applying the input payload
|
|
4
|
+
* based on the directives and raw values defined in the mapping object
|
|
5
|
+
* @param mapping - the directives and raw values
|
|
6
|
+
* @param payload - the input data to apply to directives
|
|
7
|
+
*/
|
|
8
|
+
export declare function transform(mapping: JSONLikeObject, payload?: JSONObject): JSONObject;
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
import { v4 as uuidv4 } from 'uuid';
|
|
2
|
+
import dayjs from '../dayjs';
|
|
3
|
+
import { get } from '../get';
|
|
4
|
+
import { isDirective } from './is-directive';
|
|
5
|
+
import { render } from './placeholders';
|
|
6
|
+
import { realTypeOf, isObject, isString, isArray } from '../real-type-of';
|
|
7
|
+
import { removeUndefined } from '../remove-undefined';
|
|
8
|
+
import validate from './validate';
|
|
9
|
+
const directives = {};
|
|
10
|
+
const directiveRegExp = /^@[a-z][a-zA-Z0-9]+$/;
|
|
11
|
+
function registerDirective(name, fn) {
|
|
12
|
+
if (!directiveRegExp.exec(name)) {
|
|
13
|
+
throw new Error(`"${name}" is an invalid directive name`);
|
|
14
|
+
}
|
|
15
|
+
directives[name] = fn;
|
|
16
|
+
}
|
|
17
|
+
function registerStringDirective(name, fn) {
|
|
18
|
+
registerDirective(name, (value, payload) => {
|
|
19
|
+
const str = resolve(value, payload);
|
|
20
|
+
if (typeof str !== 'string') {
|
|
21
|
+
throw new Error(`${name}: expected string, got ${realTypeOf(str)}`);
|
|
22
|
+
}
|
|
23
|
+
return fn(str, payload);
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
function runDirective(obj, payload) {
|
|
27
|
+
const name = Object.keys(obj).find((key) => key.startsWith('@'));
|
|
28
|
+
const directiveFn = directives[name];
|
|
29
|
+
const value = obj[name];
|
|
30
|
+
if (typeof directiveFn !== 'function') {
|
|
31
|
+
throw new Error(`${name} is not a valid directive, got ${realTypeOf(directiveFn)}`);
|
|
32
|
+
}
|
|
33
|
+
return directiveFn(value, payload);
|
|
34
|
+
}
|
|
35
|
+
registerStringDirective('@base64', (str, _payload) => {
|
|
36
|
+
return Buffer.from(str).toString('base64');
|
|
37
|
+
});
|
|
38
|
+
registerDirective('@if', (opts, payload) => {
|
|
39
|
+
let condition = false;
|
|
40
|
+
if (!isObject(opts)) {
|
|
41
|
+
throw new Error('@if requires an object with one of: "exists", "true"');
|
|
42
|
+
}
|
|
43
|
+
if (opts.exists !== undefined) {
|
|
44
|
+
const value = resolve(opts.exists, payload);
|
|
45
|
+
condition = value !== undefined && value !== null;
|
|
46
|
+
}
|
|
47
|
+
else if (opts.true !== undefined) {
|
|
48
|
+
const value = resolve(opts.true, payload);
|
|
49
|
+
condition = value !== null && value !== undefined && value.toString().toLowerCase() === 'true';
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
throw new Error('@if requires one of: exists, true');
|
|
53
|
+
}
|
|
54
|
+
if (condition && opts.then !== undefined) {
|
|
55
|
+
return resolve(opts.then, payload);
|
|
56
|
+
}
|
|
57
|
+
else if (!condition && opts.else) {
|
|
58
|
+
return resolve(opts.else, payload);
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
registerDirective('@json', (value, payload) => {
|
|
62
|
+
return JSON.stringify(resolve(value, payload));
|
|
63
|
+
});
|
|
64
|
+
registerStringDirective('@lowercase', (str, _payload) => {
|
|
65
|
+
return str.toLowerCase();
|
|
66
|
+
});
|
|
67
|
+
registerDirective('@merge', (arr, payload) => {
|
|
68
|
+
if (!Array.isArray(arr)) {
|
|
69
|
+
throw new Error(`@merge: expected array, got ${realTypeOf(arr)}`);
|
|
70
|
+
}
|
|
71
|
+
const objects = arr.map((v) => resolve(v, payload));
|
|
72
|
+
return Object.assign({}, ...objects);
|
|
73
|
+
});
|
|
74
|
+
function resolveObjectAndFields(directive, opts, payload) {
|
|
75
|
+
if (!isObject(opts)) {
|
|
76
|
+
throw new Error(`${directive}: expected object, got ${realTypeOf(opts)}`);
|
|
77
|
+
}
|
|
78
|
+
const obj = resolve(opts.object, payload);
|
|
79
|
+
if (!isObject(obj)) {
|
|
80
|
+
throw new Error(`${directive}: expected object, got ${realTypeOf(obj)}`);
|
|
81
|
+
}
|
|
82
|
+
const fields = resolve(opts.fields, payload);
|
|
83
|
+
if (!Array.isArray(fields)) {
|
|
84
|
+
throw new Error(`${directive}: expected fields as array, got ${realTypeOf(fields)}`);
|
|
85
|
+
}
|
|
86
|
+
return [obj, fields];
|
|
87
|
+
}
|
|
88
|
+
registerDirective('@omit', (opts, payload) => {
|
|
89
|
+
const [obj, fields] = resolveObjectAndFields('@omit', opts, payload);
|
|
90
|
+
const clonedObj = JSON.parse(JSON.stringify(obj));
|
|
91
|
+
fields.forEach((f) => delete clonedObj[f]);
|
|
92
|
+
return clonedObj;
|
|
93
|
+
});
|
|
94
|
+
registerStringDirective('@path', (path, payload) => {
|
|
95
|
+
return get(payload, path.replace('$.', ''));
|
|
96
|
+
});
|
|
97
|
+
registerDirective('@pick', (opts, payload) => {
|
|
98
|
+
const [obj, fields] = resolveObjectAndFields('@pick', opts, payload);
|
|
99
|
+
const clean = {};
|
|
100
|
+
fields.forEach((f) => {
|
|
101
|
+
if (Object.prototype.hasOwnProperty.call(obj, f)) {
|
|
102
|
+
clean[f] = obj[f];
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
return clean;
|
|
106
|
+
});
|
|
107
|
+
registerDirective('@root', (_, payload) => payload);
|
|
108
|
+
registerStringDirective('@template', (template, payload) => {
|
|
109
|
+
return render(template, payload);
|
|
110
|
+
});
|
|
111
|
+
registerDirective('@timestamp', (opts, payload) => {
|
|
112
|
+
if (!isObject(opts)) {
|
|
113
|
+
throw new Error(`@timestamp: requires an object, got ${realTypeOf(opts)}`);
|
|
114
|
+
}
|
|
115
|
+
const ts = resolve(opts.timestamp, payload);
|
|
116
|
+
if (!isString(ts)) {
|
|
117
|
+
throw new Error(`@timestamp: timestamp must be a string, got ${realTypeOf(ts)}`);
|
|
118
|
+
}
|
|
119
|
+
const format = resolve(opts.format, payload);
|
|
120
|
+
if (!isString(format)) {
|
|
121
|
+
throw new Error(`@timestamp: format must be a string, got ${realTypeOf(format)}`);
|
|
122
|
+
}
|
|
123
|
+
const inputFormat = resolve(opts.inputFormat, payload);
|
|
124
|
+
if (inputFormat !== undefined && !isString(inputFormat)) {
|
|
125
|
+
throw new Error(`@timestamp: inputFormat must be a string, got ${realTypeOf(inputFormat)}`);
|
|
126
|
+
}
|
|
127
|
+
const dayjsTs = dayjs.utc(ts, inputFormat);
|
|
128
|
+
if (format === 'json') {
|
|
129
|
+
return dayjsTs.toJSON();
|
|
130
|
+
}
|
|
131
|
+
return dayjsTs.format(format);
|
|
132
|
+
});
|
|
133
|
+
registerDirective('@uuid', (_, _payload) => uuidv4());
|
|
134
|
+
/**
|
|
135
|
+
* Resolves a mapping value/object by applying the input payload based on directives
|
|
136
|
+
* *WARNING* This function mutates `mapping` when an object
|
|
137
|
+
* @param mapping - the mapping directives or raw values to resolve
|
|
138
|
+
* @param payload - the input data to apply to the mapping directives
|
|
139
|
+
* @todo support arrays or array directives?
|
|
140
|
+
*/
|
|
141
|
+
function resolve(mapping, payload) {
|
|
142
|
+
if (!isObject(mapping) && !isArray(mapping)) {
|
|
143
|
+
return mapping;
|
|
144
|
+
}
|
|
145
|
+
if (isDirective(mapping)) {
|
|
146
|
+
return runDirective(mapping, payload);
|
|
147
|
+
}
|
|
148
|
+
if (Array.isArray(mapping)) {
|
|
149
|
+
return mapping.map((value) => resolve(value, payload));
|
|
150
|
+
}
|
|
151
|
+
for (const key of Object.keys(mapping)) {
|
|
152
|
+
const value = mapping[key];
|
|
153
|
+
mapping[key] = resolve(value, payload);
|
|
154
|
+
}
|
|
155
|
+
return mapping;
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Validates and transforms a mapping by applying the input payload
|
|
159
|
+
* based on the directives and raw values defined in the mapping object
|
|
160
|
+
* @param mapping - the directives and raw values
|
|
161
|
+
* @param payload - the input data to apply to directives
|
|
162
|
+
*/
|
|
163
|
+
export function transform(mapping, payload = {}) {
|
|
164
|
+
const payloadType = realTypeOf(payload);
|
|
165
|
+
if (payloadType !== 'object') {
|
|
166
|
+
throw new Error(`payload must be an object, got ${payloadType}`);
|
|
167
|
+
}
|
|
168
|
+
// throws if the mapping config is invalid
|
|
169
|
+
validate(mapping);
|
|
170
|
+
let resolved = resolve(mapping, payload);
|
|
171
|
+
resolved = removeUndefined(resolved);
|
|
172
|
+
// Cast because we know there are no `undefined` values anymore
|
|
173
|
+
return resolved;
|
|
174
|
+
}
|
|
175
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbWFwcGluZy1raXQvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEVBQUUsSUFBSSxNQUFNLEVBQUUsTUFBTSxNQUFNLENBQUE7QUFDbkMsT0FBTyxLQUFLLE1BQU0sVUFBVSxDQUFBO0FBQzVCLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxRQUFRLENBQUE7QUFFNUIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBQzVDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUN2QyxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFDekUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBQ3JELE9BQU8sUUFBUSxNQUFNLFlBQVksQ0FBQTtBQVNqQyxNQUFNLFVBQVUsR0FBZSxFQUFFLENBQUE7QUFDakMsTUFBTSxlQUFlLEdBQUcsc0JBQXNCLENBQUE7QUFFOUMsU0FBUyxpQkFBaUIsQ0FBQyxJQUFZLEVBQUUsRUFBYTtJQUNwRCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUMvQixNQUFNLElBQUksS0FBSyxDQUFDLElBQUksSUFBSSxnQ0FBZ0MsQ0FBQyxDQUFBO0tBQzFEO0lBRUQsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQTtBQUN2QixDQUFDO0FBRUQsU0FBUyx1QkFBdUIsQ0FBQyxJQUFZLEVBQUUsRUFBbUI7SUFDaEUsaUJBQWlCLENBQUMsSUFBSSxFQUFFLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFO1FBQ3pDLE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUE7UUFDbkMsSUFBSSxP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
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { isObject } from '../real-type-of';
|
|
2
|
+
export function isDirective(obj) {
|
|
3
|
+
if (!isObject(obj)) {
|
|
4
|
+
return false;
|
|
5
|
+
}
|
|
6
|
+
const keys = Object.keys(obj);
|
|
7
|
+
const hasDirectivePrefix = keys.some((key) => key.startsWith('@'));
|
|
8
|
+
if (!hasDirectivePrefix) {
|
|
9
|
+
return false;
|
|
10
|
+
}
|
|
11
|
+
// Ensure there aren't any other keys besides `@directive` or `_metadata`
|
|
12
|
+
const otherKeys = keys.filter((key) => !key.startsWith('@') && key !== '_metadata');
|
|
13
|
+
if (otherKeys.length === 0) {
|
|
14
|
+
return true;
|
|
15
|
+
}
|
|
16
|
+
return false;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXMtZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21hcHBpbmcta2l0L2lzLWRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFFMUMsTUFBTSxVQUFVLFdBQVcsQ0FBQyxHQUFZO0lBQ3RDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDbEIsT0FBTyxLQUFLLENBQUE7S0FDYjtJQUVELE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDN0IsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUE7SUFDbEUsSUFBSSxDQUFDLGtCQUFrQixFQUFFO1FBQ3ZCLE9BQU8sS0FBSyxDQUFBO0tBQ2I7SUFFRCx5RUFBeUU7SUFDekUsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsS0FBSyxXQUFXLENBQUMsQ0FBQTtJQUNuRixJQUFJLFNBQVMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQzFCLE9BQU8sSUFBSSxDQUFBO0tBQ1o7SUFFRCxPQUFPLEtBQUssQ0FBQTtBQUNkLENBQUMifQ==
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { get } from '../get';
|
|
2
|
+
import { realTypeOf } from '../real-type-of';
|
|
3
|
+
const entityMap = {
|
|
4
|
+
'&': '&',
|
|
5
|
+
'<': '<',
|
|
6
|
+
'>': '>',
|
|
7
|
+
'"': '"',
|
|
8
|
+
"'": ''',
|
|
9
|
+
'/': '/',
|
|
10
|
+
'`': '`',
|
|
11
|
+
'=': '='
|
|
12
|
+
};
|
|
13
|
+
function escapeHtml(value) {
|
|
14
|
+
if (typeof value !== 'string')
|
|
15
|
+
return value;
|
|
16
|
+
return value.replace(/[&<>"'`=/]/g, (match) => {
|
|
17
|
+
return entityMap[match];
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Replaces curly brace placeholders in a template with real content
|
|
22
|
+
*/
|
|
23
|
+
export function render(template, data = {}) {
|
|
24
|
+
if (typeof template !== 'string') {
|
|
25
|
+
throw new TypeError(`Invalid template! Template should be a "string" but ${realTypeOf(template)} was given.`);
|
|
26
|
+
}
|
|
27
|
+
function replacer(chars, escape) {
|
|
28
|
+
return (match) => {
|
|
29
|
+
var _a;
|
|
30
|
+
// Remove the wrapping curly braces
|
|
31
|
+
match = match.slice(chars, -chars).trim();
|
|
32
|
+
// Grab the value from data, if it exists
|
|
33
|
+
const value = get(data, match);
|
|
34
|
+
// Replace with the value (or empty string)
|
|
35
|
+
if (escape) {
|
|
36
|
+
return String((_a = escapeHtml(value)) !== null && _a !== void 0 ? _a : '');
|
|
37
|
+
}
|
|
38
|
+
return (value !== null && value !== void 0 ? value : '');
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
return (template
|
|
42
|
+
// Replace unescaped content
|
|
43
|
+
.replace(/\{\{\{([^}]+)\}\}\}/g, replacer(3, false))
|
|
44
|
+
// Replace escaped content
|
|
45
|
+
.replace(/\{\{([^}]+)\}\}/g, replacer(2, true)));
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhY2Vob2xkZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21hcHBpbmcta2l0L3BsYWNlaG9sZGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sUUFBUSxDQUFBO0FBQzVCLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQTtBQUU1QyxNQUFNLFNBQVMsR0FBMkI7SUFDeEMsR0FBRyxFQUFFLE9BQU87SUFDWixHQUFHLEVBQUUsTUFBTTtJQUNYLEdBQUcsRUFBRSxNQUFNO0lBQ1gsR0FBRyxFQUFFLFFBQVE7SUFDYixHQUFHLEVBQUUsT0FBTztJQUNaLEdBQUcsRUFBRSxRQUFRO0lBQ2IsR0FBRyxFQUFFLFFBQVE7SUFDYixHQUFHLEVBQUUsUUFBUTtDQUNkLENBQUE7QUFFRCxTQUFTLFVBQVUsQ0FBQyxLQUFjO0lBQ2hDLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUTtRQUFFLE9BQU8sS0FBSyxDQUFBO0lBRTNDLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtRQUM1QyxPQUFPLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUN6QixDQUFDLENBQUMsQ0FBQTtBQUNKLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sVUFBVSxNQUFNLENBQUMsUUFBZ0IsRUFBRSxPQUFnQixFQUFFO0lBQ3pELElBQUksT0FBTyxRQUFRLEtBQUssUUFBUSxFQUFFO1FBQ2hDLE1BQU0sSUFBSSxTQUFTLENBQUMsdURBQXVELFVBQVUsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUE7S0FDOUc7SUFFRCxTQUFTLFFBQVEsQ0FBQyxLQUFhLEVBQUUsTUFBZTtRQUM5QyxPQUFPLENBQUMsS0FBYSxFQUFVLEVBQUU7O1lBQy9CLG1DQUFtQztZQUNuQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQTtZQUV6Qyx5Q0FBeUM7WUFDekMsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQTtZQUU5QiwyQ0FBMkM7WUFDM0MsSUFBSSxNQUFNLEVBQUU7Z0JBQ1YsT0FBTyxNQUFNLE9BQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxtQ0FBSSxFQUFFLENBQUMsQ0FBQTthQUN2QztZQUVELE9BQU8sQ0FBQyxLQUFLLGFBQUwsS0FBSyxjQUFMLEtBQUssR0FBSSxFQUFFLENBQVcsQ0FBQTtRQUNoQyxDQUFDLENBQUE7SUFDSCxDQUFDO0lBRUQsT0FBTyxDQUNMLFFBQVE7UUFDTiw0QkFBNEI7U0FDM0IsT0FBTyxDQUFDLHNCQUFzQixFQUFFLFFBQVEsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDcEQsMEJBQTBCO1NBQ3pCLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxRQUFRLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQ2xELENBQUE7QUFDSCxDQUFDIn0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export default function validate(mapping: unknown, stack?: string[]): void | null;
|