Skip to content

Commit 16dd70e

Browse files
committed
even better error messages part 1
1 parent 7860d73 commit 16dd70e

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

46 files changed

+538
-372
lines changed

exampleVault/Input Fields/Progress Bar.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
---
22
progress1: -6
33
progress2: 0.2
4+
progress3: 4
45
---
56

67
```meta-bind
@@ -12,5 +13,8 @@ INPUT[progressBar(showcase, minValue(-10), maxValue(3)):progress1]
1213
INPUT[progressBar(showcase, minValue(0), maxValue(1), stepSize(0.1)):progress2]
1314
```
1415

16+
```meta-bind
17+
INPUT[progressBar(showcase, minValue(0), maxValue(10), stepSize(-1)):progress3]
18+
```
1519

1620

exampleVault/examples.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ Domestic_tasks:
66
- Lunch 🍲
77
Meditate: 100
88
Slept: 00:00
9-
select: option c
9+
select: option d
1010
toggle: false
1111
nested:
1212
object: asd

src/cm6/Cm6_Util.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,11 @@ export class Cm6_Util {
4848
return 'VIEW';
4949
}
5050

51-
throw new MetaBindInternalError(ErrorLevel.ERROR, 'failed to get declaration prefix', `Invalid widget type "${widgetType}"`);
51+
throw new MetaBindInternalError({
52+
errorLevel: ErrorLevel.CRITICAL,
53+
effect: 'failed to get declaration prefix',
54+
cause: `Invalid widget type "${widgetType}"`,
55+
});
5256
}
5357

5458
static isDeclaration(widgetType: MBWidgetType, str: string): boolean {

src/fieldArguments/AbstractFieldArgument.ts

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,14 @@ export abstract class AbstractFieldArgument<
2020

2121
validateValues(value: ParsingResultNode[], allowedValues: FieldArgumentValueConfig[][]): void {
2222
if (allowedValues.find(x => x.length === value.length) === undefined) {
23-
throw new MetaBindArgumentError(
24-
ErrorLevel.WARNING,
25-
`Failed to parse argument value for argument '${this.getConfig().type}'.`,
26-
`Expected argument values to follow the form ${allowedValues
23+
throw new MetaBindArgumentError({
24+
errorLevel: ErrorLevel.WARNING,
25+
effect: `Failed to parse argument value for argument '${this.getConfig().type}'.`,
26+
cause: `Expected argument values to follow the form ${allowedValues
2727
.map(x => (x.length === 0 ? 'none' : x.map(y => `'${y.name}'`).join(', ')))
2828
.join(' or ')}. Received arguments of length ${value.length}.`,
29-
);
29+
// TODO: link to docs of the argument somehow
30+
});
3031
}
3132
}
3233

src/fieldArguments/AbstractFieldArgumentContainer.ts

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { ErrorLevel, MetaBindParsingError } from '../utils/errors/MetaBindErrors';
1+
import { ErrorLevel, MetaBindArgumentError } from '../utils/errors/MetaBindErrors';
22
import { type FieldArgumentConfig, InputFieldArgumentType } from '../parsers/GeneralConfigs';
33
import { type AbstractFieldArgument } from './AbstractFieldArgument';
44

@@ -24,11 +24,12 @@ export abstract class AbstractFieldArgumentContainer<
2424

2525
map[argumentConfig.type] += 1;
2626
if (map[argumentConfig.type] > 1 && !argumentConfig.allowMultiple) {
27-
throw new MetaBindParsingError(
28-
ErrorLevel.CRITICAL,
29-
'failed to validate argument container',
30-
`argument '${argumentConfig.type}' does not allow duplicates`,
31-
);
27+
throw new MetaBindArgumentError({
28+
errorLevel: ErrorLevel.ERROR,
29+
effect: 'failed to validate argument container',
30+
cause: `argument '${argumentConfig.type}' does not allow duplicates`,
31+
// TODO: link to docs
32+
});
3233
}
3334
}
3435
}
@@ -69,11 +70,11 @@ export abstract class AbstractFieldArgumentContainer<
6970
const argumentConfig = argument.getConfig();
7071
if (!argumentConfig.allowMultiple) {
7172
if (this.arguments.filter(x => x.getConfig().type === argumentConfig.type).length > 0) {
72-
throw new MetaBindParsingError(
73-
ErrorLevel.ERROR,
74-
'failed to merge argument container',
75-
'can not merge FieldArgumentContainers, since arguments overlap',
76-
);
73+
throw new MetaBindArgumentError({
74+
errorLevel: ErrorLevel.ERROR,
75+
effect: 'failed to merge argument container',
76+
cause: 'can not merge FieldArgumentContainers, since arguments overlap',
77+
});
7778
}
7879
}
7980
this.arguments.push(argument);

src/fieldArguments/inputFieldArguments/InputFieldArgumentFactory.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,10 @@ export class InputFieldArgumentFactory {
5454
}
5555
}
5656

57-
throw new MetaBindParsingError(ErrorLevel.ERROR, 'can not crate input field argument', `unknown argument '${argumentIdentifier}'`);
57+
throw new MetaBindParsingError({
58+
errorLevel: ErrorLevel.WARNING,
59+
effect: 'can not crate input field argument',
60+
cause: `unknown argument '${argumentIdentifier}'`,
61+
});
5862
}
5963
}

src/fieldArguments/inputFieldArguments/arguments/LimitInputFieldArgument.ts

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,29 @@
11
import { AbstractInputFieldArgument } from '../AbstractInputFieldArgument';
22
import { type ParsingResultNode } from '../../../parsers/nomParsers/GeneralParsers';
3-
import { ErrorLevel, MetaBindParsingError } from '../../../utils/errors/MetaBindErrors';
3+
import { ErrorLevel, MetaBindArgumentError } from '../../../utils/errors/MetaBindErrors';
44
import { type InputFieldArgumentConfig, InputFieldArgumentConfigs } from '../../../parsers/GeneralConfigs';
5+
import { DocsHelper } from '../../../utils/DocsHelper';
56

67
export class LimitInputFieldArgument extends AbstractInputFieldArgument {
78
value: number | undefined = undefined;
89

910
_parseValue(value: ParsingResultNode[]): void {
1011
this.value = Number.parseInt(value[0].value);
1112
if (Number.isNaN(this.value)) {
12-
throw new MetaBindParsingError(
13-
ErrorLevel.WARNING,
14-
'failed to set value for input field argument',
15-
"value of argument 'limit' must be of type number",
16-
);
13+
throw new MetaBindArgumentError({
14+
errorLevel: ErrorLevel.WARNING,
15+
effect: 'failed to set value for input field argument',
16+
cause: "value of argument 'limit' must be of type number",
17+
docs: [DocsHelper.linkToInputFieldArgument(this.getConfig().type)],
18+
});
1719
}
18-
1920
if (this.value <= 0) {
20-
throw new MetaBindParsingError(ErrorLevel.WARNING, 'failed to set value for input field argument', "value of argument 'limit' must be positive");
21+
throw new MetaBindArgumentError({
22+
errorLevel: ErrorLevel.WARNING,
23+
effect: 'failed to set value for input field argument',
24+
cause: "value of argument 'limit' must be a positive number",
25+
docs: [DocsHelper.linkToInputFieldArgument(this.getConfig().type)],
26+
});
2127
}
2228
}
2329

src/fieldArguments/inputFieldArguments/arguments/MaxValueInputFieldArgument.ts

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,21 @@
11
import { AbstractInputFieldArgument } from '../AbstractInputFieldArgument';
2-
import { ErrorLevel, MetaBindParsingError } from '../../../utils/errors/MetaBindErrors';
2+
import { ErrorLevel, MetaBindArgumentError } from '../../../utils/errors/MetaBindErrors';
33
import { type ParsingResultNode } from '../../../parsers/nomParsers/GeneralParsers';
44
import { type InputFieldArgumentConfig, InputFieldArgumentConfigs } from '../../../parsers/GeneralConfigs';
5+
import { DocsHelper } from '../../../utils/DocsHelper';
56

67
export class MaxValueInputFieldArgument extends AbstractInputFieldArgument {
78
value: number = 100;
89

910
_parseValue(value: ParsingResultNode[]): void {
1011
this.value = Number.parseFloat(value[0].value);
1112
if (Number.isNaN(this.value)) {
12-
throw new MetaBindParsingError(
13-
ErrorLevel.ERROR,
14-
'failed to set value for input field argument',
15-
"value of argument 'maxValue' must be of type number",
16-
);
13+
throw new MetaBindArgumentError({
14+
errorLevel: ErrorLevel.WARNING,
15+
effect: 'failed to set value for input field argument',
16+
cause: "value of argument 'maxValue' must be of type number",
17+
docs: [DocsHelper.linkToInputFieldArgument(this.getConfig().type)],
18+
});
1719
}
1820
}
1921

src/fieldArguments/inputFieldArguments/arguments/MinValueInputFieldArgument.ts

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,21 @@
11
import { AbstractInputFieldArgument } from '../AbstractInputFieldArgument';
2-
import { ErrorLevel, MetaBindParsingError } from '../../../utils/errors/MetaBindErrors';
2+
import { ErrorLevel, MetaBindArgumentError } from '../../../utils/errors/MetaBindErrors';
33
import { type ParsingResultNode } from '../../../parsers/nomParsers/GeneralParsers';
44
import { type InputFieldArgumentConfig, InputFieldArgumentConfigs } from '../../../parsers/GeneralConfigs';
5+
import { DocsHelper } from '../../../utils/DocsHelper';
56

67
export class MinValueInputFieldArgument extends AbstractInputFieldArgument {
78
value: number = 0;
89

910
_parseValue(value: ParsingResultNode[]): void {
1011
this.value = Number.parseFloat(value[0].value);
1112
if (Number.isNaN(this.value)) {
12-
throw new MetaBindParsingError(
13-
ErrorLevel.ERROR,
14-
'failed to set value for input field argument',
15-
"value of argument 'minValue' must be of type number",
16-
);
13+
throw new MetaBindArgumentError({
14+
errorLevel: ErrorLevel.WARNING,
15+
effect: 'failed to set value for input field argument',
16+
cause: "value of argument 'minValue' must be of type number",
17+
docs: [DocsHelper.linkToInputFieldArgument(this.getConfig().type)],
18+
});
1719
}
1820
}
1921

src/fieldArguments/inputFieldArguments/arguments/StepSizeValueInputFieldArgument.ts

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,29 @@
11
import { AbstractInputFieldArgument } from '../AbstractInputFieldArgument';
2-
import { ErrorLevel, MetaBindParsingError } from '../../../utils/errors/MetaBindErrors';
2+
import { ErrorLevel, MetaBindArgumentError } from '../../../utils/errors/MetaBindErrors';
33
import { type ParsingResultNode } from '../../../parsers/nomParsers/GeneralParsers';
44
import { type InputFieldArgumentConfig, InputFieldArgumentConfigs } from '../../../parsers/GeneralConfigs';
5+
import { DocsHelper } from '../../../utils/DocsHelper';
56

67
export class StepSizeValueInputFieldArgument extends AbstractInputFieldArgument {
78
value: number = 0;
89

910
_parseValue(value: ParsingResultNode[]): void {
1011
this.value = Number.parseFloat(value[0].value);
1112
if (Number.isNaN(this.value)) {
12-
throw new MetaBindParsingError(
13-
ErrorLevel.WARNING,
14-
'failed to set value for input field argument',
15-
"value of argument 'stepSize' must be of type number",
16-
);
13+
throw new MetaBindArgumentError({
14+
errorLevel: ErrorLevel.WARNING,
15+
effect: 'failed to set value for input field argument',
16+
cause: "value of argument 'stepSize' must be of type number",
17+
docs: [DocsHelper.linkToInputFieldArgument(this.getConfig().type)],
18+
});
1719
}
1820
if (this.value <= 0) {
19-
throw new MetaBindParsingError(
20-
ErrorLevel.WARNING,
21-
'failed to set value for input field argument',
22-
"value of argument 'stepSize' must be a positive number",
23-
);
21+
throw new MetaBindArgumentError({
22+
errorLevel: ErrorLevel.WARNING,
23+
effect: 'failed to set value for input field argument',
24+
cause: "value of argument 'stepSize' must be a positive number",
25+
docs: [DocsHelper.linkToInputFieldArgument(this.getConfig().type)],
26+
});
2427
}
2528
}
2629

0 commit comments

Comments
 (0)