ogi-addon 0.1.1 → 0.1.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.
@@ -1,18 +1,18 @@
1
- export interface ConfigurationFile {
1
+ interface ConfigurationFile {
2
2
  [key: string]: ConfigurationOption;
3
3
  }
4
- export declare function isStringOption(option: ConfigurationOption): option is StringOption;
5
- export declare function isNumberOption(option: ConfigurationOption): option is NumberOption;
6
- export declare function isBooleanOption(option: ConfigurationOption): option is BooleanOption;
7
- export declare class ConfigurationBuilder {
4
+ declare function isStringOption(option: ConfigurationOption): option is StringOption;
5
+ declare function isNumberOption(option: ConfigurationOption): option is NumberOption;
6
+ declare function isBooleanOption(option: ConfigurationOption): option is BooleanOption;
7
+ declare class ConfigurationBuilder {
8
8
  private options;
9
9
  addNumberOption(option: (option: NumberOption) => NumberOption): ConfigurationBuilder;
10
10
  addStringOption(option: (option: StringOption) => StringOption): this;
11
11
  addBooleanOption(option: (option: BooleanOption) => BooleanOption): this;
12
12
  build(includeFunctions: boolean): ConfigurationFile;
13
13
  }
14
- export type ConfigurationOptionType = 'string' | 'number' | 'boolean' | 'unset';
15
- export declare class ConfigurationOption {
14
+ type ConfigurationOptionType = 'string' | 'number' | 'boolean' | 'unset';
15
+ declare class ConfigurationOption {
16
16
  name: string;
17
17
  defaultValue: unknown;
18
18
  displayName: string;
@@ -23,7 +23,7 @@ export declare class ConfigurationOption {
23
23
  setDescription(description: string): this;
24
24
  validate(input: unknown): [boolean, string];
25
25
  }
26
- export declare class StringOption extends ConfigurationOption {
26
+ declare class StringOption extends ConfigurationOption {
27
27
  allowedValues: string[];
28
28
  minTextLength: number;
29
29
  maxTextLength: number;
@@ -35,7 +35,7 @@ export declare class StringOption extends ConfigurationOption {
35
35
  setMaxTextLength(maxTextLength: number): this;
36
36
  validate(input: unknown): [boolean, string];
37
37
  }
38
- export declare class NumberOption extends ConfigurationOption {
38
+ declare class NumberOption extends ConfigurationOption {
39
39
  min: number;
40
40
  max: number;
41
41
  defaultValue: number;
@@ -47,9 +47,11 @@ export declare class NumberOption extends ConfigurationOption {
47
47
  setDefaultValue(defaultValue: number): this;
48
48
  validate(input: unknown): [boolean, string];
49
49
  }
50
- export declare class BooleanOption extends ConfigurationOption {
50
+ declare class BooleanOption extends ConfigurationOption {
51
51
  type: ConfigurationOptionType;
52
52
  defaultValue: boolean;
53
53
  setDefaultValue(defaultValue: boolean): this;
54
54
  validate(input: unknown): [boolean, string];
55
55
  }
56
+
57
+ export { BooleanOption, ConfigurationBuilder, type ConfigurationFile, ConfigurationOption, type ConfigurationOptionType, NumberOption, StringOption, isBooleanOption, isNumberOption, isStringOption };
@@ -1,170 +1,166 @@
1
+ // src/config/ConfigurationBuilder.ts
1
2
  import z, { ZodError } from "zod";
2
- const configValidation = z.object({
3
- name: z.string().min(1),
4
- displayName: z.string().min(1),
5
- description: z.string().min(1),
3
+ var configValidation = z.object({
4
+ name: z.string().min(1),
5
+ displayName: z.string().min(1),
6
+ description: z.string().min(1)
6
7
  });
7
- export function isStringOption(option) {
8
- return option.type === 'string';
8
+ function isStringOption(option) {
9
+ return option.type === "string";
9
10
  }
10
- export function isNumberOption(option) {
11
- return option.type === 'number';
11
+ function isNumberOption(option) {
12
+ return option.type === "number";
12
13
  }
13
- export function isBooleanOption(option) {
14
- return option.type === 'boolean';
14
+ function isBooleanOption(option) {
15
+ return option.type === "boolean";
15
16
  }
16
- export class ConfigurationBuilder {
17
- constructor() {
18
- this.options = [];
19
- }
20
- addNumberOption(option) {
21
- let newOption = new NumberOption();
22
- newOption = option(newOption);
23
- this.options.push(newOption);
24
- return this;
25
- }
26
- addStringOption(option) {
27
- let newOption = new StringOption();
28
- newOption = option(newOption);
29
- this.options.push(newOption);
30
- return this;
31
- }
32
- addBooleanOption(option) {
33
- let newOption = new BooleanOption();
34
- newOption = option(newOption);
35
- this.options.push(newOption);
36
- return this;
37
- }
38
- build(includeFunctions) {
39
- let config = {};
40
- this.options.forEach(option => {
41
- if (!includeFunctions) {
42
- option = JSON.parse(JSON.stringify(option));
43
- const optionData = configValidation.safeParse(option);
44
- if (!optionData.success) {
45
- throw new ZodError(optionData.error.errors);
46
- }
47
- config[option.name] = option;
48
- }
49
- else {
50
- config[option.name] = option;
51
- }
52
- });
53
- return config;
54
- }
55
- }
56
- export class ConfigurationOption {
57
- constructor() {
58
- this.name = '';
59
- this.defaultValue = '';
60
- this.displayName = '';
61
- this.description = '';
62
- this.type = 'unset';
63
- }
64
- setName(name) {
65
- this.name = name;
66
- return this;
67
- }
68
- setDisplayName(displayName) {
69
- this.displayName = displayName;
70
- return this;
71
- }
72
- setDescription(description) {
73
- this.description = description;
74
- return this;
75
- }
76
- validate(input) {
77
- throw new Error('Validation code not implemented. Value: ' + input);
78
- }
79
- ;
80
- }
81
- export class StringOption extends ConfigurationOption {
82
- constructor() {
83
- super(...arguments);
84
- this.allowedValues = [];
85
- this.minTextLength = 0;
86
- this.maxTextLength = Number.MAX_SAFE_INTEGER;
87
- this.defaultValue = '';
88
- this.type = 'string';
89
- }
90
- setAllowedValues(allowedValues) {
91
- this.allowedValues = allowedValues;
92
- return this;
93
- }
94
- setDefaultValue(defaultValue) {
95
- this.defaultValue = defaultValue;
96
- return this;
97
- }
98
- setMinTextLength(minTextLength) {
99
- this.minTextLength = minTextLength;
100
- return this;
101
- }
102
- setMaxTextLength(maxTextLength) {
103
- this.maxTextLength = maxTextLength;
104
- return this;
105
- }
106
- validate(input) {
107
- if (typeof input !== 'string') {
108
- return [false, 'Input is not a string'];
17
+ var ConfigurationBuilder = class {
18
+ options = [];
19
+ addNumberOption(option) {
20
+ let newOption = new NumberOption();
21
+ newOption = option(newOption);
22
+ this.options.push(newOption);
23
+ return this;
24
+ }
25
+ addStringOption(option) {
26
+ let newOption = new StringOption();
27
+ newOption = option(newOption);
28
+ this.options.push(newOption);
29
+ return this;
30
+ }
31
+ addBooleanOption(option) {
32
+ let newOption = new BooleanOption();
33
+ newOption = option(newOption);
34
+ this.options.push(newOption);
35
+ return this;
36
+ }
37
+ build(includeFunctions) {
38
+ let config = {};
39
+ this.options.forEach((option) => {
40
+ if (!includeFunctions) {
41
+ option = JSON.parse(JSON.stringify(option));
42
+ const optionData = configValidation.safeParse(option);
43
+ if (!optionData.success) {
44
+ throw new ZodError(optionData.error.errors);
109
45
  }
110
- if (this.allowedValues.length === 0 && input.length !== 0)
111
- return [true, ''];
112
- if (input.length < this.minTextLength || input.length > this.maxTextLength) {
113
- return [false, 'Input is not within the text length ' + this.minTextLength + ' and ' + this.maxTextLength + ' characters (currently ' + input.length + ' characters)'];
114
- }
115
- return [this.allowedValues.includes(input), 'Input is not an allowed value'];
116
- }
117
- }
118
- export class NumberOption extends ConfigurationOption {
119
- constructor() {
120
- super(...arguments);
121
- this.min = 0;
122
- this.max = Number.MAX_SAFE_INTEGER;
123
- this.defaultValue = 0;
124
- this.type = 'number';
125
- this.inputType = 'number';
126
- }
127
- setMin(min) {
128
- this.min = min;
129
- return this;
130
- }
131
- setInputType(type) {
132
- this.inputType = type;
133
- return this;
134
- }
135
- setMax(max) {
136
- this.max = max;
137
- return this;
138
- }
139
- setDefaultValue(defaultValue) {
140
- this.defaultValue = defaultValue;
141
- return this;
142
- }
143
- validate(input) {
144
- if (isNaN(Number(input))) {
145
- return [false, 'Input is not a number'];
146
- }
147
- if (Number(input) < this.min || Number(input) > this.max) {
148
- return [false, 'Input is not within the range of ' + this.min + ' and ' + this.max];
149
- }
150
- return [true, ''];
151
- }
152
- }
153
- export class BooleanOption extends ConfigurationOption {
154
- constructor() {
155
- super(...arguments);
156
- this.type = 'boolean';
157
- this.defaultValue = false;
158
- }
159
- setDefaultValue(defaultValue) {
160
- this.defaultValue = defaultValue;
161
- return this;
162
- }
163
- validate(input) {
164
- if (typeof input !== 'boolean') {
165
- return [false, 'Input is not a boolean'];
166
- }
167
- return [true, ''];
168
- }
169
- }
46
+ config[option.name] = option;
47
+ } else {
48
+ config[option.name] = option;
49
+ }
50
+ });
51
+ return config;
52
+ }
53
+ };
54
+ var ConfigurationOption = class {
55
+ name = "";
56
+ defaultValue = "";
57
+ displayName = "";
58
+ description = "";
59
+ type = "unset";
60
+ setName(name) {
61
+ this.name = name;
62
+ return this;
63
+ }
64
+ setDisplayName(displayName) {
65
+ this.displayName = displayName;
66
+ return this;
67
+ }
68
+ setDescription(description) {
69
+ this.description = description;
70
+ return this;
71
+ }
72
+ validate(input) {
73
+ throw new Error("Validation code not implemented. Value: " + input);
74
+ }
75
+ };
76
+ var StringOption = class extends ConfigurationOption {
77
+ allowedValues = [];
78
+ minTextLength = 0;
79
+ maxTextLength = Number.MAX_SAFE_INTEGER;
80
+ defaultValue = "";
81
+ type = "string";
82
+ setAllowedValues(allowedValues) {
83
+ this.allowedValues = allowedValues;
84
+ return this;
85
+ }
86
+ setDefaultValue(defaultValue) {
87
+ this.defaultValue = defaultValue;
88
+ return this;
89
+ }
90
+ setMinTextLength(minTextLength) {
91
+ this.minTextLength = minTextLength;
92
+ return this;
93
+ }
94
+ setMaxTextLength(maxTextLength) {
95
+ this.maxTextLength = maxTextLength;
96
+ return this;
97
+ }
98
+ validate(input) {
99
+ if (typeof input !== "string") {
100
+ return [false, "Input is not a string"];
101
+ }
102
+ if (this.allowedValues.length === 0 && input.length !== 0)
103
+ return [true, ""];
104
+ if (input.length < this.minTextLength || input.length > this.maxTextLength) {
105
+ return [false, "Input is not within the text length " + this.minTextLength + " and " + this.maxTextLength + " characters (currently " + input.length + " characters)"];
106
+ }
107
+ return [this.allowedValues.includes(input), "Input is not an allowed value"];
108
+ }
109
+ };
110
+ var NumberOption = class extends ConfigurationOption {
111
+ min = 0;
112
+ max = Number.MAX_SAFE_INTEGER;
113
+ defaultValue = 0;
114
+ type = "number";
115
+ inputType = "number";
116
+ setMin(min) {
117
+ this.min = min;
118
+ return this;
119
+ }
120
+ setInputType(type) {
121
+ this.inputType = type;
122
+ return this;
123
+ }
124
+ setMax(max) {
125
+ this.max = max;
126
+ return this;
127
+ }
128
+ setDefaultValue(defaultValue) {
129
+ this.defaultValue = defaultValue;
130
+ return this;
131
+ }
132
+ validate(input) {
133
+ if (isNaN(Number(input))) {
134
+ return [false, "Input is not a number"];
135
+ }
136
+ if (Number(input) < this.min || Number(input) > this.max) {
137
+ return [false, "Input is not within the range of " + this.min + " and " + this.max];
138
+ }
139
+ return [true, ""];
140
+ }
141
+ };
142
+ var BooleanOption = class extends ConfigurationOption {
143
+ type = "boolean";
144
+ defaultValue = false;
145
+ setDefaultValue(defaultValue) {
146
+ this.defaultValue = defaultValue;
147
+ return this;
148
+ }
149
+ validate(input) {
150
+ if (typeof input !== "boolean") {
151
+ return [false, "Input is not a boolean"];
152
+ }
153
+ return [true, ""];
154
+ }
155
+ };
156
+ export {
157
+ BooleanOption,
158
+ ConfigurationBuilder,
159
+ ConfigurationOption,
160
+ NumberOption,
161
+ StringOption,
162
+ isBooleanOption,
163
+ isNumberOption,
164
+ isStringOption
165
+ };
170
166
  //# sourceMappingURL=ConfigurationBuilder.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ConfigurationBuilder.js","sourceRoot":"/","sources":["config/ConfigurationBuilder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/config/ConfigurationBuilder.ts"],"sourcesContent":["import z, { ZodError } from \"zod\"\r\n\r\nexport interface ConfigurationFile {\r\n [key: string]: ConfigurationOption\r\n}\r\n\r\nconst configValidation = z.object({\r\n name: z.string().min(1),\r\n displayName: z.string().min(1),\r\n description: z.string().min(1),\r\n})\r\n\r\nexport function isStringOption(option: ConfigurationOption): option is StringOption {\r\n return option.type === 'string';\r\n }\r\n\r\nexport function isNumberOption(option: ConfigurationOption): option is NumberOption {\r\n return option.type === 'number';\r\n}\r\n\r\nexport function isBooleanOption(option: ConfigurationOption): option is BooleanOption {\r\n return option.type === 'boolean';\r\n}\r\n\r\nexport class ConfigurationBuilder {\r\n private options: ConfigurationOption[] = [];\r\n public addNumberOption(option: (option: NumberOption) => NumberOption): ConfigurationBuilder {\r\n let newOption = new NumberOption();\r\n newOption = option(newOption);\r\n this.options.push(newOption);\r\n return this;\r\n }\r\n\r\n public addStringOption(option: (option: StringOption) => StringOption) {\r\n let newOption = new StringOption();\r\n newOption = option(newOption);\r\n this.options.push(newOption);\r\n return this;\r\n }\r\n\r\n public addBooleanOption(option: (option: BooleanOption) => BooleanOption) {\r\n let newOption = new BooleanOption();\r\n newOption = option(newOption);\r\n this.options.push(newOption);\r\n return this;\r\n }\r\n\r\n public build(includeFunctions: boolean): ConfigurationFile {\r\n let config: ConfigurationFile = {};\r\n this.options.forEach(option => {\r\n // remove all functions from the option object\r\n if (!includeFunctions) {\r\n option = JSON.parse(JSON.stringify(option));\r\n const optionData = configValidation.safeParse(option)\r\n if (!optionData.success) {\r\n throw new ZodError(optionData.error.errors)\r\n }\r\n\r\n config[option.name] = option;\r\n }\r\n else {\r\n config[option.name] = option;\r\n }\r\n });\r\n return config;\r\n }\r\n}\r\n\r\nexport type ConfigurationOptionType = 'string' | 'number' | 'boolean' | 'unset'\r\nexport class ConfigurationOption {\r\n public name: string = '';\r\n public defaultValue: unknown = '';\r\n public displayName: string = '';\r\n public description: string = '';\r\n public type: ConfigurationOptionType = 'unset'\r\n \r\n setName(name: string) {\r\n this.name = name;\r\n return this;\r\n }\r\n\r\n setDisplayName(displayName: string) {\r\n this.displayName = displayName;\r\n return this;\r\n }\r\n\r\n setDescription(description: string) {\r\n this.description = description;\r\n return this;\r\n }\r\n\r\n\r\n validate(input: unknown): [ boolean, string ] {\r\n throw new Error('Validation code not implemented. Value: ' + input)\r\n };\r\n}\r\n\r\nexport class StringOption extends ConfigurationOption {\r\n public allowedValues: string[] = [];\r\n public minTextLength: number = 0;\r\n public maxTextLength: number = Number.MAX_SAFE_INTEGER;\r\n public defaultValue: string = '';\r\n public type: ConfigurationOptionType = 'string'\r\n\r\n setAllowedValues(allowedValues: string[]): this {\r\n this.allowedValues = allowedValues;\r\n return this;\r\n }\r\n\r\n setDefaultValue(defaultValue: string): this {\r\n this.defaultValue = defaultValue;\r\n return this;\r\n }\r\n\r\n setMinTextLength(minTextLength: number): this {\r\n this.minTextLength = minTextLength;\r\n return this;\r\n }\r\n\r\n setMaxTextLength(maxTextLength: number): this {\r\n this.maxTextLength = maxTextLength;\r\n return this;\r\n }\r\n\r\n override validate(input: unknown): [ boolean, string ] {\r\n if (typeof input !== 'string') {\r\n return [ false, 'Input is not a string' ];\r\n }\r\n if (this.allowedValues.length === 0 && input.length !== 0)\r\n return [ true, '' ];\r\n if (input.length < this.minTextLength || input.length > this.maxTextLength) {\r\n return [ false, 'Input is not within the text length ' + this.minTextLength + ' and ' + this.maxTextLength + ' characters (currently ' + input.length + ' characters)' ];\r\n }\r\n\r\n return [ this.allowedValues.includes(input), 'Input is not an allowed value' ];\r\n }\r\n}\r\n\r\nexport class NumberOption extends ConfigurationOption {\r\n public min: number = 0;\r\n public max: number = Number.MAX_SAFE_INTEGER;\r\n public defaultValue: number = 0;\r\n public type: ConfigurationOptionType = 'number'\r\n public inputType: 'range' | 'number' = 'number';\r\n setMin(min: number): this {\r\n this.min = min;\r\n return this;\r\n }\r\n\r\n setInputType(type: 'range' | 'number'): this {\r\n this.inputType = type;\r\n return this;\r\n }\r\n\r\n setMax(max: number): this {\r\n this.max = max;\r\n return this\r\n }\r\n\r\n setDefaultValue(defaultValue: number): this {\r\n this.defaultValue = defaultValue;\r\n return this;\r\n }\r\n\r\n override validate(input: unknown): [ boolean, string ] {\r\n if (isNaN(Number(input))) {\r\n return [ false, 'Input is not a number' ];\r\n }\r\n if (Number(input) < this.min || Number(input) > this.max) {\r\n return [ false, 'Input is not within the range of ' + this.min + ' and ' + this.max ];\r\n }\r\n return [ true, '' ];\r\n }\r\n\r\n}\r\n\r\nexport class BooleanOption extends ConfigurationOption {\r\n public type: ConfigurationOptionType = 'boolean'\r\n public defaultValue: boolean = false;\r\n\r\n setDefaultValue(defaultValue: boolean): this {\r\n this.defaultValue = defaultValue;\r\n return this;\r\n }\r\n\r\n override validate(input: unknown): [ boolean, string ] {\r\n if (typeof input !== 'boolean') {\r\n return [ false, 'Input is not a boolean' ];\r\n }\r\n return [ true, '' ];\r\n }\r\n\r\n}"],"mappings":"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","names":[]}