/
setDefault.ts
82 lines (79 loc) · 2.27 KB
/
setDefault.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
import {
FieldType,
} from '@terascope/types';
import {
castArray
} from '@terascope/utils';
import {
FieldTransformConfig,
ProcessMode,
FunctionDefinitionType,
FunctionDefinitionCategory
} from '../interfaces';
export interface SetDefaultArgs {
value: unknown;
}
export const setDefaultConfig: FieldTransformConfig<SetDefaultArgs> = {
name: 'setDefault',
type: FunctionDefinitionType.FIELD_TRANSFORM,
process_mode: ProcessMode.FULL_VALUES,
category: FunctionDefinitionCategory.JSON,
description: 'Replaces missing values in a column with a constant value',
examples: [
{
args: { value: 'example' },
config: {
version: 1,
fields: { testField: { type: FieldType.String } }
},
field: 'testField',
input: null,
output: 'example',
},
{
args: { value: 'example' },
config: {
version: 1,
fields: { testField: { type: FieldType.String, array: true } }
},
field: 'testField',
input: null,
output: ['example'],
}
],
create({ args, inputConfig }) {
let isListValue = inputConfig?.field_config?.array;
return function setDefault(value) {
if (isListValue == null && Array.isArray(value)) {
isListValue = true;
}
if (isListValue) {
if (value == null) return [args.value];
const result = [];
for (const val of castArray(value)) {
result.push(val != null ? val : args.value);
}
return result;
}
return value != null ? value : args.value;
};
},
accepts: [],
argument_schema: {
value: {
type: FieldType.Any,
description: 'The default value to use'
}
},
required_arguments: ['value'],
output_type(inputConfig) {
const { field_config } = inputConfig;
return {
field_config: {
description: field_config.description,
array: field_config.array,
type: FieldType.Keyword
},
};
}
};