fogui-common 0.0.1
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/LICENSE +674 -0
- package/dist/examples/extension/index.d.ts +1 -0
- package/dist/examples/extension/index.js +40 -0
- package/dist/examples/extension/index.js.map +1 -0
- package/dist/examples/parse-json-config/index.d.ts +1 -0
- package/dist/examples/parse-json-config/index.js +75 -0
- package/dist/examples/parse-json-config/index.js.map +1 -0
- package/dist/examples/parse-json-config/model/Config.d.ts +15 -0
- package/dist/examples/parse-json-config/model/Config.js +10 -0
- package/dist/examples/parse-json-config/model/Config.js.map +1 -0
- package/dist/examples/parse-json-config/model/DatabaseConnection.d.ts +26 -0
- package/dist/examples/parse-json-config/model/DatabaseConnection.js +12 -0
- package/dist/examples/parse-json-config/model/DatabaseConnection.js.map +1 -0
- package/dist/examples/parse-json-config/model/Socket.d.ts +15 -0
- package/dist/examples/parse-json-config/model/Socket.js +10 -0
- package/dist/examples/parse-json-config/model/Socket.js.map +1 -0
- package/dist/examples/parse-json-config/model/types/HostType.d.ts +4 -0
- package/dist/examples/parse-json-config/model/types/HostType.js +12 -0
- package/dist/examples/parse-json-config/model/types/HostType.js.map +1 -0
- package/dist/examples/parse-json-config/model/types/PortType.d.ts +5 -0
- package/dist/examples/parse-json-config/model/types/PortType.js +6 -0
- package/dist/examples/parse-json-config/model/types/PortType.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -0
- package/dist/model/base/Model.d.ts +15 -0
- package/dist/model/base/Model.js +46 -0
- package/dist/model/base/Model.js.map +1 -0
- package/dist/model/base/Model.spec.d.ts +1 -0
- package/dist/model/base/Model.spec.js +82 -0
- package/dist/model/base/Model.spec.js.map +1 -0
- package/dist/types/UuidType.d.ts +8 -0
- package/dist/types/UuidType.js +15 -0
- package/dist/types/UuidType.js.map +1 -0
- package/dist/types/UuidType.spec.d.ts +1 -0
- package/dist/types/UuidType.spec.js +27 -0
- package/dist/types/UuidType.spec.js.map +1 -0
- package/dist/types/base/ArrayType.d.ts +11 -0
- package/dist/types/base/ArrayType.js +40 -0
- package/dist/types/base/ArrayType.js.map +1 -0
- package/dist/types/base/ArrayType.spec.d.ts +1 -0
- package/dist/types/base/ArrayType.spec.js +51 -0
- package/dist/types/base/ArrayType.spec.js.map +1 -0
- package/dist/types/base/AttributeType.d.ts +44 -0
- package/dist/types/base/AttributeType.js +61 -0
- package/dist/types/base/AttributeType.js.map +1 -0
- package/dist/types/base/BooleanType.d.ts +10 -0
- package/dist/types/base/BooleanType.js +24 -0
- package/dist/types/base/BooleanType.js.map +1 -0
- package/dist/types/base/BooleanType.spec.d.ts +1 -0
- package/dist/types/base/BooleanType.spec.js +41 -0
- package/dist/types/base/BooleanType.spec.js.map +1 -0
- package/dist/types/base/NumberType.d.ts +13 -0
- package/dist/types/base/NumberType.js +38 -0
- package/dist/types/base/NumberType.js.map +1 -0
- package/dist/types/base/NumberType.spec.d.ts +1 -0
- package/dist/types/base/NumberType.spec.js +72 -0
- package/dist/types/base/NumberType.spec.js.map +1 -0
- package/dist/types/base/StringArrayType.d.ts +5 -0
- package/dist/types/base/StringArrayType.js +6 -0
- package/dist/types/base/StringArrayType.js.map +1 -0
- package/dist/types/base/StringType.d.ts +27 -0
- package/dist/types/base/StringType.js +59 -0
- package/dist/types/base/StringType.js.map +1 -0
- package/dist/types/base/StringType.spec.d.ts +1 -0
- package/dist/types/base/StringType.spec.js +28 -0
- package/dist/types/base/StringType.spec.js.map +1 -0
- package/dist/util/InferType.d.ts +15 -0
- package/dist/util/InferType.js +2 -0
- package/dist/util/InferType.js.map +1 -0
- package/package.json +33 -0
- package/src/examples/extension/index.ts +65 -0
- package/src/examples/parse-json-config/index.ts +81 -0
- package/src/examples/parse-json-config/model/Config.ts +10 -0
- package/src/examples/parse-json-config/model/DatabaseConnection.ts +12 -0
- package/src/examples/parse-json-config/model/Socket.ts +10 -0
- package/src/examples/parse-json-config/model/types/HostType.ts +12 -0
- package/src/examples/parse-json-config/model/types/PortType.ts +6 -0
- package/src/index.ts +8 -0
- package/src/model/base/Model.spec.ts +84 -0
- package/src/model/base/Model.ts +55 -0
- package/src/types/UuidType.spec.ts +31 -0
- package/src/types/UuidType.ts +20 -0
- package/src/types/base/ArrayType.spec.ts +62 -0
- package/src/types/base/ArrayType.ts +44 -0
- package/src/types/base/AttributeType.ts +83 -0
- package/src/types/base/BooleanType.spec.ts +48 -0
- package/src/types/base/BooleanType.ts +28 -0
- package/src/types/base/NumberType.spec.ts +86 -0
- package/src/types/base/NumberType.ts +43 -0
- package/src/types/base/StringArrayType.ts +6 -0
- package/src/types/base/StringType.spec.ts +34 -0
- package/src/types/base/StringType.ts +69 -0
- package/src/util/InferType.ts +27 -0
- package/tsconfig.json +21 -0
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { AttributeType, ParseAndValidationCriticality } from "./AttributeType.js";
|
|
2
|
+
export class ArrayType extends AttributeType {
|
|
3
|
+
constructor(options) {
|
|
4
|
+
super(options);
|
|
5
|
+
}
|
|
6
|
+
parse(value) {
|
|
7
|
+
let resultObject = { criticality: ParseAndValidationCriticality.Ok, messages: [] };
|
|
8
|
+
resultObject.subValidationResults = {};
|
|
9
|
+
let returnObject = [];
|
|
10
|
+
if (!value)
|
|
11
|
+
return { value: this.defaultValue, deepResult: { criticality: ParseAndValidationCriticality.Info, messages: [{ criticality: ParseAndValidationCriticality.Info, message: 'No value given using default Value!' }] } };
|
|
12
|
+
if (!Array.isArray(value))
|
|
13
|
+
return { value: this.defaultValue, deepResult: { criticality: ParseAndValidationCriticality.Error, messages: [{ criticality: ParseAndValidationCriticality.Error, message: 'Value is not an array' }] } };
|
|
14
|
+
for (let i = 0; i < value.length; i++) {
|
|
15
|
+
const result = this.type.parse(value[i]);
|
|
16
|
+
resultObject.criticality = Math.max(resultObject.criticality, result.deepResult.criticality);
|
|
17
|
+
resultObject.subValidationResults[i] = resultObject;
|
|
18
|
+
returnObject.push(result.value);
|
|
19
|
+
}
|
|
20
|
+
return { value: returnObject, deepResult: resultObject };
|
|
21
|
+
}
|
|
22
|
+
async validate(value, level) {
|
|
23
|
+
let validationObject = {
|
|
24
|
+
criticality: ParseAndValidationCriticality.Ok, messages: [], subValidationResults: {}
|
|
25
|
+
};
|
|
26
|
+
validationObject.subValidationResults = {};
|
|
27
|
+
for (let i = 0; i < value.length; i++) {
|
|
28
|
+
const validationResult = await this.type.validate(value[i], level);
|
|
29
|
+
validationObject.criticality = Math.max(validationObject.criticality, validationResult.criticality);
|
|
30
|
+
validationObject.subValidationResults[i] = validationResult;
|
|
31
|
+
}
|
|
32
|
+
return validationObject;
|
|
33
|
+
}
|
|
34
|
+
format(value) {
|
|
35
|
+
if (!value)
|
|
36
|
+
return [];
|
|
37
|
+
return value.map(v => this.type.format(v));
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=ArrayType.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ArrayType.js","sourceRoot":"","sources":["../../../src/types/base/ArrayType.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAwB,6BAA6B,EAAyC,MAAM,oBAAoB,CAAC;AAQ/I,MAAM,OAAgB,SAAqC,SAAQ,aAA4C;IAE3G,YAAY,OAA0B;QAClC,KAAK,CAAC,OAAO,CAAC,CAAA;IAClB,CAAC;IACD,KAAK,CAAC,KAAqB;QACvB,IAAI,YAAY,GAA4B,EAAC,WAAW,EAAC,6BAA6B,CAAC,EAAE,EAAC,QAAQ,EAAC,EAAE,EAAC,CAAA;QACtG,YAAY,CAAC,oBAAoB,GAAC,EAAE,CAAA;QACpC,IAAI,YAAY,GAAkB,EAAE,CAAA;QACpC,IAAG,CAAC,KAAK;YAAE,OAAO,EAAC,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,UAAU,EAAE,EAAE,WAAW,EAAE,6BAA6B,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAC,WAAW,EAAE,6BAA6B,CAAC,IAAI,EAAE,OAAO,EAAC,qCAAqC,EAAC,CAAC,EAAE,EAAC,CAAA;QAC3N,IAAG,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;YAAE,OAAO,EAAC,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,UAAU,EAAE,EAAE,WAAW,EAAE,6BAA6B,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAC,WAAW,EAAE,6BAA6B,CAAC,KAAK,EAAE,OAAO,EAAC,uBAAuB,EAAC,CAAC,EAAE,EAAC,CAAA;QAC7N,KAAI,IAAI,CAAC,GAAC,CAAC,EAAE,CAAC,GAAE,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAC,CAAC;YAChC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;YACxC,YAAY,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,CAAA;YAC5F,YAAY,CAAC,oBAAoB,CAAC,CAAC,CAAC,GAAG,YAAY,CAAA;YACnD,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,KAAqB,CAAC,CAAA;QACnD,CAAC;QACD,OAAO,EAAC,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAC,CAAA;IAC1D,CAAC;IACD,KAAK,CAAC,QAAQ,CAAC,KAAqB,EAAE,KAAqC;QACvE,IAAI,gBAAgB,GAA4B;YAC5C,WAAW,EAAE,6BAA6B,CAAC,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,oBAAoB,EAAE,EAAE;SACxF,CAAA;QACD,gBAAgB,CAAC,oBAAoB,GAAG,EAAE,CAAA;QAC1C,KAAI,IAAI,CAAC,GAAC,CAAC,EAAE,CAAC,GAAE,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAC,CAAC;YAC/B,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;YAClE,gBAAgB,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,WAAW,EAAE,gBAAgB,CAAC,WAAW,CAAC,CAAA;YACnG,gBAAgB,CAAC,oBAAoB,CAAC,CAAC,CAAC,GAAG,gBAAgB,CAAA;QAC/D,CAAC;QACD,OAAO,gBAAgB,CAAA;IAC3B,CAAC;IACD,MAAM,CAAC,KAAqB;QACxB,IAAG,CAAC,KAAK;YAAE,OAAO,EAAE,CAAA;QACpB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAA,EAAE,CAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAiB,CAAC,CAAA;IAC5D,CAAC;CACJ","sourcesContent":["import { AttributeType, AttributeTypeOptions, ParseAndValidationCriticality, ParseAndValidationResult, parseResult } from \"./AttributeType.js\";\n\n\nexport type ArrayTypeOptions = AttributeTypeOptions<any[]> &{\n type: AttributeType<any, any>\n} \n\n\nexport abstract class ArrayType<InternalType,ExternalType> extends AttributeType<InternalType[],ExternalType[]> {\n abstract type: AttributeType<InternalType,ExternalType> \n constructor(options?: ArrayTypeOptions) {\n super(options)\n }\n parse(value: ExternalType[]): parseResult<InternalType[]> {\n let resultObject:ParseAndValidationResult = {criticality:ParseAndValidationCriticality.Ok,messages:[]}\n resultObject.subValidationResults={}\n let returnObject:InternalType[] = []\n if(!value) return {value: this.defaultValue, deepResult: { criticality: ParseAndValidationCriticality.Info, messages: [{criticality: ParseAndValidationCriticality.Info, message:'No value given using default Value!'}] }}\n if(!Array.isArray(value)) return {value: this.defaultValue, deepResult: { criticality: ParseAndValidationCriticality.Error, messages: [{criticality: ParseAndValidationCriticality.Error, message:'Value is not an array'}] }}\n for(let i=0; i< value.length; i++){\n const result = this.type.parse(value[i])\n resultObject.criticality = Math.max(resultObject.criticality, result.deepResult.criticality)\n resultObject.subValidationResults[i] = resultObject\n returnObject.push(result.value as InternalType)\n }\n return {value: returnObject, deepResult: resultObject} \n }\n async validate(value: InternalType[], level?: ParseAndValidationCriticality): Promise<ParseAndValidationResult> {\n let validationObject:ParseAndValidationResult = {\n criticality: ParseAndValidationCriticality.Ok, messages: [], subValidationResults: {}\n }\n validationObject.subValidationResults = {}\n for(let i=0; i< value.length; i++){\n const validationResult = await this.type.validate(value[i], level)\n validationObject.criticality = Math.max(validationObject.criticality, validationResult.criticality)\n validationObject.subValidationResults[i] = validationResult\n }\n return validationObject\n }\n format(value: InternalType[]): ExternalType[] {\n if(!value) return []\n return value.map(v=>this.type.format(v) as ExternalType)\n }\n}"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { expect } from "chai";
|
|
2
|
+
import { ArrayType } from "./ArrayType.js";
|
|
3
|
+
import { ParseAndValidationCriticality } from "./AttributeType.js";
|
|
4
|
+
import { NumberType } from "./NumberType.js";
|
|
5
|
+
class NumberArrayType extends ArrayType {
|
|
6
|
+
type = new NumberType();
|
|
7
|
+
}
|
|
8
|
+
describe("ArrayType", () => {
|
|
9
|
+
let arrayType;
|
|
10
|
+
beforeEach(() => {
|
|
11
|
+
arrayType = new NumberArrayType();
|
|
12
|
+
});
|
|
13
|
+
describe("parse", () => {
|
|
14
|
+
it("should parse an array of numbers", () => {
|
|
15
|
+
const result = arrayType.parse(["1", "2", "3"]).value;
|
|
16
|
+
expect(result).to.deep.equal([1, 2, 3]);
|
|
17
|
+
});
|
|
18
|
+
it("should return defaultValue if value is undefined", () => {
|
|
19
|
+
const result = arrayType.parse(undefined).value;
|
|
20
|
+
expect(result).to.equal(arrayType.defaultValue);
|
|
21
|
+
});
|
|
22
|
+
it("should return error result if value is not an array", () => {
|
|
23
|
+
const result = arrayType.parse(123);
|
|
24
|
+
expect(result.deepResult.criticality).to.equal(ParseAndValidationCriticality.Error);
|
|
25
|
+
expect(result.deepResult.messages).to.deep.include({ criticality: ParseAndValidationCriticality.Error, message: "Value is not an array" });
|
|
26
|
+
});
|
|
27
|
+
});
|
|
28
|
+
describe("validate", () => {
|
|
29
|
+
it("should validate all elements and aggregate criticality", async () => {
|
|
30
|
+
const result = await arrayType.validate([1, NaN, 3]);
|
|
31
|
+
result.subValidationResults = result.subValidationResults || {};
|
|
32
|
+
expect(result.criticality).to.equal(ParseAndValidationCriticality.Error);
|
|
33
|
+
expect(result.subValidationResults[1].messages).to.deep.include({ criticality: ParseAndValidationCriticality.Error, message: "Not a number" });
|
|
34
|
+
});
|
|
35
|
+
it("should return Ok for valid array", async () => {
|
|
36
|
+
const result = await arrayType.validate([1, 2, 3]);
|
|
37
|
+
expect(result.criticality).to.equal(ParseAndValidationCriticality.Ok);
|
|
38
|
+
});
|
|
39
|
+
});
|
|
40
|
+
describe("format", () => {
|
|
41
|
+
it("should format an array of numbers", () => {
|
|
42
|
+
const result = arrayType.format([1, 2, 3]);
|
|
43
|
+
expect(result).to.deep.equal(["1", "2", "3"]);
|
|
44
|
+
});
|
|
45
|
+
it("should return empty array if value is undefined", () => {
|
|
46
|
+
const result = arrayType.format(undefined);
|
|
47
|
+
expect(result).to.deep.equal([]);
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
//# sourceMappingURL=ArrayType.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ArrayType.spec.js","sourceRoot":"","sources":["../../../src/types/base/ArrayType.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAiB,6BAA6B,EAA4B,MAAM,oBAAoB,CAAC;AAC5G,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAI7C,MAAM,eAAgB,SAAQ,SAAyB;IACnD,IAAI,GAAG,IAAI,UAAU,EAAE,CAAC;CAC3B;AAED,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;IACvB,IAAI,SAA0B,CAAC;IAE/B,UAAU,CAAC,GAAG,EAAE;QACZ,SAAS,GAAG,IAAI,eAAe,EAAE,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE;QACnB,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;YACxC,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC;YACtD,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;YACxD,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,SAAgB,CAAC,CAAC,KAAK,CAAC;YACvD,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;YAC3D,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,GAAU,CAAC,CAAC;YAC3C,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,6BAA6B,CAAC,KAAK,CAAC,CAAC;YACpF,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,6BAA6B,CAAC,KAAK,EAAE,OAAO,EAAE,uBAAuB,EAAE,CAAC,CAAC;QAC/I,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;QACtB,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;YACpE,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;YACrD,MAAM,CAAC,oBAAoB,GAAG,MAAM,CAAC,oBAAoB,IAAI,EAAE,CAAC;YAChE,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,6BAA6B,CAAC,KAAK,CAAC,CAAC;YACzE,MAAM,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,6BAA6B,CAAC,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAC;QACnJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kCAAkC,EAAE,KAAK,IAAI,EAAE;YAC9C,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACnD,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,6BAA6B,CAAC,EAAE,CAAC,CAAC;QAC1E,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;QACpB,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;YACzC,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAC3C,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;YACvD,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,SAAgB,CAAC,CAAC;YAClD,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC","sourcesContent":["import { expect } from \"chai\";\nimport { ArrayType } from \"./ArrayType.js\";\nimport { AttributeType, ParseAndValidationCriticality, ParseAndValidationResult } from \"./AttributeType.js\";\nimport { NumberType } from \"./NumberType.js\";\n\n\n\nclass NumberArrayType extends ArrayType<number, string> {\n type = new NumberType();\n}\n\ndescribe(\"ArrayType\", () => {\n let arrayType: NumberArrayType;\n\n beforeEach(() => {\n arrayType = new NumberArrayType();\n });\n\n describe(\"parse\", () => {\n it(\"should parse an array of numbers\", () => {\n const result = arrayType.parse([\"1\", \"2\", \"3\"]).value;\n expect(result).to.deep.equal([1, 2, 3]);\n });\n\n it(\"should return defaultValue if value is undefined\", () => {\n const result = arrayType.parse(undefined as any).value;\n expect(result).to.equal(arrayType.defaultValue);\n });\n\n it(\"should return error result if value is not an array\", () => {\n const result = arrayType.parse(123 as any);\n expect(result.deepResult.criticality).to.equal(ParseAndValidationCriticality.Error);\n expect(result.deepResult.messages).to.deep.include({ criticality: ParseAndValidationCriticality.Error, message: \"Value is not an array\" });\n });\n });\n\n describe(\"validate\", () => {\n it(\"should validate all elements and aggregate criticality\", async () => {\n const result = await arrayType.validate([1, NaN, 3]);\n result.subValidationResults = result.subValidationResults || {};\n expect(result.criticality).to.equal(ParseAndValidationCriticality.Error);\n expect(result.subValidationResults[1].messages).to.deep.include({ criticality: ParseAndValidationCriticality.Error, message: \"Not a number\" });\n });\n\n it(\"should return Ok for valid array\", async () => {\n const result = await arrayType.validate([1, 2, 3]);\n expect(result.criticality).to.equal(ParseAndValidationCriticality.Ok);\n });\n });\n\n describe(\"format\", () => {\n it(\"should format an array of numbers\", () => {\n const result = arrayType.format([1, 2, 3]);\n expect(result).to.deep.equal([\"1\", \"2\", \"3\"]);\n });\n\n it(\"should return empty array if value is undefined\", () => {\n const result = arrayType.format(undefined as any);\n expect(result).to.deep.equal([]);\n });\n });\n});"]}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
export declare enum ParseAndValidationCriticality {
|
|
2
|
+
Ok = 0,
|
|
3
|
+
Silly = 1,
|
|
4
|
+
Debug = 2,
|
|
5
|
+
Info = 3,
|
|
6
|
+
Warn = 4,
|
|
7
|
+
Error = 5
|
|
8
|
+
}
|
|
9
|
+
export type ParseAndValidationResult = {
|
|
10
|
+
criticality: ParseAndValidationCriticality;
|
|
11
|
+
messages: ParseAndValidationMessage[];
|
|
12
|
+
subValidationResults?: {
|
|
13
|
+
[key: string]: ParseAndValidationResult;
|
|
14
|
+
};
|
|
15
|
+
};
|
|
16
|
+
export type ParseAndValidationMessage = {
|
|
17
|
+
criticality: ParseAndValidationCriticality;
|
|
18
|
+
message: string;
|
|
19
|
+
};
|
|
20
|
+
export type AttributeTypeOptions<InternalType> = {
|
|
21
|
+
defaultValue?: InternalType;
|
|
22
|
+
allowNull?: boolean;
|
|
23
|
+
extensionConfigurations?: ExtensionConfiguration[];
|
|
24
|
+
};
|
|
25
|
+
export type parseResult<T> = {
|
|
26
|
+
value: T | undefined;
|
|
27
|
+
deepResult: ParseAndValidationResult;
|
|
28
|
+
};
|
|
29
|
+
export interface ExtensionConfiguration {
|
|
30
|
+
extensionName: string;
|
|
31
|
+
}
|
|
32
|
+
export declare function registerGlobalExtensionConfiguration(typeName: string, config: ExtensionConfiguration): void;
|
|
33
|
+
export declare class AttributeType<InternalType, ExternalType = string> {
|
|
34
|
+
value?: InternalType;
|
|
35
|
+
extensionsConfigurations: Record<string, ExtensionConfiguration>;
|
|
36
|
+
get defaultValue(): InternalType | undefined;
|
|
37
|
+
_defaultValue?: InternalType | undefined;
|
|
38
|
+
allowNull?: boolean;
|
|
39
|
+
constructor(options?: AttributeTypeOptions<InternalType>);
|
|
40
|
+
parse(value: ExternalType): parseResult<InternalType>;
|
|
41
|
+
format(value: InternalType): ExternalType;
|
|
42
|
+
validate(value: InternalType, level?: ParseAndValidationCriticality): Promise<ParseAndValidationResult>;
|
|
43
|
+
getExtensionConfiguration(extensionName: string): ExtensionConfiguration | undefined;
|
|
44
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
export var ParseAndValidationCriticality;
|
|
2
|
+
(function (ParseAndValidationCriticality) {
|
|
3
|
+
ParseAndValidationCriticality[ParseAndValidationCriticality["Ok"] = 0] = "Ok";
|
|
4
|
+
ParseAndValidationCriticality[ParseAndValidationCriticality["Silly"] = 1] = "Silly";
|
|
5
|
+
ParseAndValidationCriticality[ParseAndValidationCriticality["Debug"] = 2] = "Debug";
|
|
6
|
+
ParseAndValidationCriticality[ParseAndValidationCriticality["Info"] = 3] = "Info";
|
|
7
|
+
ParseAndValidationCriticality[ParseAndValidationCriticality["Warn"] = 4] = "Warn";
|
|
8
|
+
ParseAndValidationCriticality[ParseAndValidationCriticality["Error"] = 5] = "Error";
|
|
9
|
+
})(ParseAndValidationCriticality || (ParseAndValidationCriticality = {}));
|
|
10
|
+
let globalExtensionConfigurations = {};
|
|
11
|
+
export function registerGlobalExtensionConfiguration(typeName, config) {
|
|
12
|
+
if (!globalExtensionConfigurations[typeName]) {
|
|
13
|
+
globalExtensionConfigurations[typeName] = {};
|
|
14
|
+
}
|
|
15
|
+
globalExtensionConfigurations[typeName][config.extensionName] = config;
|
|
16
|
+
}
|
|
17
|
+
export class AttributeType {
|
|
18
|
+
value;
|
|
19
|
+
extensionsConfigurations = {};
|
|
20
|
+
get defaultValue() {
|
|
21
|
+
return this._defaultValue;
|
|
22
|
+
}
|
|
23
|
+
_defaultValue;
|
|
24
|
+
allowNull = true;
|
|
25
|
+
constructor(options) {
|
|
26
|
+
options = options || {};
|
|
27
|
+
this._defaultValue = options.defaultValue;
|
|
28
|
+
this.allowNull = options.allowNull !== undefined ? options.allowNull : true;
|
|
29
|
+
if (options.extensionConfigurations) {
|
|
30
|
+
for (const extConfig of options.extensionConfigurations) {
|
|
31
|
+
this.extensionsConfigurations[extConfig.extensionName] = extConfig;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
parse(value) {
|
|
36
|
+
throw new Error("Method not implemented.");
|
|
37
|
+
}
|
|
38
|
+
format(value) {
|
|
39
|
+
throw new Error("Method not implemented.");
|
|
40
|
+
}
|
|
41
|
+
async validate(value, level = ParseAndValidationCriticality.Info) {
|
|
42
|
+
let validateionObject = { criticality: ParseAndValidationCriticality.Ok, messages: [] };
|
|
43
|
+
if (!value && this.allowNull === false)
|
|
44
|
+
validateionObject.messages.push({ criticality: ParseAndValidationCriticality.Error, message: "Feld darf nicht leer sein." });
|
|
45
|
+
return validateionObject;
|
|
46
|
+
}
|
|
47
|
+
getExtensionConfiguration(extensionName) {
|
|
48
|
+
let obj = this;
|
|
49
|
+
while (obj) {
|
|
50
|
+
if (obj.extensionsConfigurations && obj.extensionsConfigurations[extensionName]) {
|
|
51
|
+
return obj.extensionsConfigurations[extensionName];
|
|
52
|
+
}
|
|
53
|
+
if (globalExtensionConfigurations[obj.constructor.name] && globalExtensionConfigurations[obj.constructor.name][extensionName]) {
|
|
54
|
+
return globalExtensionConfigurations[obj.constructor.name][extensionName];
|
|
55
|
+
}
|
|
56
|
+
obj = Object.getPrototypeOf(obj);
|
|
57
|
+
}
|
|
58
|
+
return undefined;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=AttributeType.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AttributeType.js","sourceRoot":"","sources":["../../../src/types/base/AttributeType.ts"],"names":[],"mappings":"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","sourcesContent":["export enum ParseAndValidationCriticality {\n Ok = 0,\n Silly,\n Debug,\n Info,\n Warn,\n Error,\n}\nexport type ParseAndValidationResult = {\n criticality: ParseAndValidationCriticality\n messages: ParseAndValidationMessage[]\n subValidationResults?: {[key:string]:ParseAndValidationResult}\n}\nexport type ParseAndValidationMessage = {\n criticality: ParseAndValidationCriticality\n message: string\n}\n\nexport type AttributeTypeOptions<InternalType> = {\n defaultValue?: InternalType\n allowNull?: boolean\n extensionConfigurations?: ExtensionConfiguration[]\n}\n\nexport type parseResult<T>= {value: T|undefined, deepResult: ParseAndValidationResult}\n\nexport interface ExtensionConfiguration {\n extensionName: string\n}\n\nlet globalExtensionConfigurations: Record<string, Record<string, ExtensionConfiguration>> = {}\n\nexport function registerGlobalExtensionConfiguration(typeName: string, config: ExtensionConfiguration) {\n if(!globalExtensionConfigurations[typeName]){\n globalExtensionConfigurations[typeName] = {}\n }\n globalExtensionConfigurations[typeName][config.extensionName] = config\n}\n\nexport class AttributeType<InternalType, ExternalType = string> {\n value?: InternalType\n extensionsConfigurations: Record<string, ExtensionConfiguration> = {}\n get defaultValue(): InternalType | undefined {\n return this._defaultValue\n }\n _defaultValue?: InternalType | undefined\n allowNull?: boolean = true\n constructor(options?: AttributeTypeOptions<InternalType>) {\n options = options || {}\n this._defaultValue = options.defaultValue\n this.allowNull = options.allowNull !== undefined ? options.allowNull : true\n if (options.extensionConfigurations) {\n for (const extConfig of options.extensionConfigurations) {\n this.extensionsConfigurations[extConfig.extensionName] = extConfig\n }\n }\n }\n parse(value: ExternalType): parseResult<InternalType> {\n throw new Error(\"Method not implemented.\");\n }\n format(value: InternalType): ExternalType {\n throw new Error(\"Method not implemented.\");\n }\n async validate(value: InternalType, level: ParseAndValidationCriticality = ParseAndValidationCriticality.Info): Promise<ParseAndValidationResult> {\n let validateionObject:ParseAndValidationResult = {criticality:ParseAndValidationCriticality.Ok, messages:[]}\n if(!value && this.allowNull===false)\n validateionObject.messages.push({criticality:ParseAndValidationCriticality.Error, message:\"Feld darf nicht leer sein.\"})\n return validateionObject\n }\n getExtensionConfiguration(extensionName: string): ExtensionConfiguration | undefined {\n let obj = this as AttributeType<any, any>\n while(obj){\n if(obj.extensionsConfigurations && obj.extensionsConfigurations[extensionName]){\n return obj.extensionsConfigurations[extensionName]\n }\n if( globalExtensionConfigurations[obj.constructor.name] && globalExtensionConfigurations[obj.constructor.name][extensionName]){\n return globalExtensionConfigurations[obj.constructor.name][extensionName]\n }\n obj = Object.getPrototypeOf(obj)\n }\n return undefined\n }\n}"]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { AttributeType, AttributeTypeOptions, parseResult } from "./AttributeType.js";
|
|
2
|
+
export type BooleanTypeOptions = AttributeTypeOptions<boolean> & {
|
|
3
|
+
truthyValues?: string[];
|
|
4
|
+
};
|
|
5
|
+
export declare class BooleanType extends AttributeType<boolean> {
|
|
6
|
+
truthyValues: string[];
|
|
7
|
+
constructor(options?: BooleanTypeOptions);
|
|
8
|
+
parse(value: string): parseResult<boolean>;
|
|
9
|
+
format(value: boolean): string;
|
|
10
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { AttributeType, ParseAndValidationCriticality } from "./AttributeType.js";
|
|
2
|
+
export class BooleanType extends AttributeType {
|
|
3
|
+
truthyValues = ["true", "1", "yes", "on", "x"];
|
|
4
|
+
constructor(options) {
|
|
5
|
+
options = options || {};
|
|
6
|
+
super(options);
|
|
7
|
+
if (options.truthyValues) {
|
|
8
|
+
this.truthyValues = options.truthyValues;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
parse(value) {
|
|
12
|
+
if (value === undefined || value === null) {
|
|
13
|
+
return { value: this.defaultValue, deepResult: { criticality: ParseAndValidationCriticality.Info, messages: [{ criticality: ParseAndValidationCriticality.Info, message: 'No value given using default Value!' }] } };
|
|
14
|
+
}
|
|
15
|
+
else if (this.truthyValues.includes(value.toLowerCase())) {
|
|
16
|
+
return { value: true, deepResult: { criticality: ParseAndValidationCriticality.Ok, messages: [] } };
|
|
17
|
+
}
|
|
18
|
+
return { value: false, deepResult: { criticality: ParseAndValidationCriticality.Ok, messages: [] } };
|
|
19
|
+
}
|
|
20
|
+
format(value) {
|
|
21
|
+
return value ? "true" : "false";
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=BooleanType.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BooleanType.js","sourceRoot":"","sources":["../../../src/types/base/BooleanType.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAwB,6BAA6B,EAAe,MAAM,oBAAoB,CAAC;AAMrH,MAAM,OAAO,WAAY,SAAQ,aAAsB;IACnD,YAAY,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,CAAA;IAC9C,YAAY,OAA4B;QACpC,OAAO,GAAG,OAAO,IAAI,EAAE,CAAA;QACvB,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;YACvB,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAA;QAC5C,CAAC;IACL,CAAC;IACD,KAAK,CAAC,KAAa;QACf,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACxC,OAAO,EAAC,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,UAAU,EAAE,EAAE,WAAW,EAAE,6BAA6B,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAC,WAAW,EAAE,6BAA6B,CAAC,IAAI,EAAE,OAAO,EAAC,qCAAqC,EAAC,CAAC,EAAE,EAAC,CAAA;QACpN,CAAC;aACI,IAAI,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;YACvD,OAAO,EAAC,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,WAAW,EAAE,6BAA6B,CAAC,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,CAAA;QACtG,CAAC;QACD,OAAO,EAAC,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,WAAW,EAAE,6BAA6B,CAAC,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,CAAA;IACvG,CAAC;IACD,MAAM,CAAC,KAAc;QACjB,OAAO,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;IACpC,CAAC;CACJ","sourcesContent":["import { AttributeType, AttributeTypeOptions, ParseAndValidationCriticality, parseResult } from \"./AttributeType.js\";\n\nexport type BooleanTypeOptions = AttributeTypeOptions<boolean> & {\n truthyValues?: string[]\n} \n\nexport class BooleanType extends AttributeType<boolean> {\n truthyValues = [\"true\", \"1\", \"yes\", \"on\", \"x\"]\n constructor(options?: BooleanTypeOptions) {\n options = options || {}\n super(options)\n if (options.truthyValues) {\n this.truthyValues = options.truthyValues\n }\n }\n parse(value: string): parseResult<boolean> {\n if (value === undefined || value === null) {\n return {value: this.defaultValue, deepResult: { criticality: ParseAndValidationCriticality.Info, messages: [{criticality: ParseAndValidationCriticality.Info, message:'No value given using default Value!'}] }}\n }\n else if (this.truthyValues.includes(value.toLowerCase())) {\n return {value: true, deepResult: { criticality: ParseAndValidationCriticality.Ok, messages: [] } }\n }\n return {value: false, deepResult: { criticality: ParseAndValidationCriticality.Ok, messages: [] } }\n }\n format(value: boolean): string {\n return value ? \"true\" : \"false\";\n }\n}"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { expect } from "chai";
|
|
2
|
+
import { BooleanType } from "./BooleanType.js";
|
|
3
|
+
describe("BooleanType", () => {
|
|
4
|
+
let boolType;
|
|
5
|
+
beforeEach(() => {
|
|
6
|
+
boolType = new BooleanType();
|
|
7
|
+
});
|
|
8
|
+
describe("parse", () => {
|
|
9
|
+
it("should return true for truthy values", () => {
|
|
10
|
+
const truthy = ["true", "1", "yes", "on", "x"];
|
|
11
|
+
truthy.forEach(val => {
|
|
12
|
+
expect(boolType.parse(val).value).to.be.true;
|
|
13
|
+
expect(boolType.parse(val.toUpperCase()).value).to.be.true;
|
|
14
|
+
expect(boolType.parse(val.charAt(0).toUpperCase() + val.slice(1)).value).to.be.true;
|
|
15
|
+
});
|
|
16
|
+
});
|
|
17
|
+
it("should return false for falsy values", () => {
|
|
18
|
+
const falsy = ["false", "0", "no", "off", "", "random"];
|
|
19
|
+
falsy.forEach(val => {
|
|
20
|
+
expect(boolType.parse(val).value).to.be.false;
|
|
21
|
+
});
|
|
22
|
+
});
|
|
23
|
+
it("should return defaultValue for undefined or null", () => {
|
|
24
|
+
boolType._defaultValue = true;
|
|
25
|
+
//expect(boolType.parse(undefined)).to.equal(true);
|
|
26
|
+
expect(boolType.parse(null).value).to.equal(true);
|
|
27
|
+
boolType._defaultValue = false;
|
|
28
|
+
//expect(boolType.parse(undefined)).to.equal(false);
|
|
29
|
+
expect(boolType.parse(null).value).to.equal(false);
|
|
30
|
+
});
|
|
31
|
+
});
|
|
32
|
+
describe("format", () => {
|
|
33
|
+
it("should format true as 'true'", () => {
|
|
34
|
+
expect(boolType.format(true)).to.equal("true");
|
|
35
|
+
});
|
|
36
|
+
it("should format false as 'false'", () => {
|
|
37
|
+
expect(boolType.format(false)).to.equal("false");
|
|
38
|
+
});
|
|
39
|
+
});
|
|
40
|
+
});
|
|
41
|
+
//# sourceMappingURL=BooleanType.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BooleanType.spec.js","sourceRoot":"","sources":["../../../src/types/base/BooleanType.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IACzB,IAAI,QAAqB,CAAC;IAE1B,UAAU,CAAC,GAAG,EAAE;QACZ,QAAQ,GAAG,IAAI,WAAW,EAAE,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE;QACnB,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;YAC5C,MAAM,MAAM,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;YAC/C,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;gBACjB,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;gBAC7C,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;gBAC3D,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YACxF,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;YAC5C,MAAM,KAAK,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC;YACxD,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;gBAChB,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;YAClD,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;YACxD,QAAQ,CAAC,aAAa,GAAG,IAAI,CAAC;YAC9B,mDAAmD;YACnD,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAW,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAEzD,QAAQ,CAAC,aAAa,GAAG,KAAK,CAAC;YAC/B,oDAAoD;YACpD,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAW,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC9D,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;QACpB,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;YACpC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;YACtC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC","sourcesContent":["import { expect } from \"chai\";\nimport { BooleanType } from \"./BooleanType.js\";\n\ndescribe(\"BooleanType\", () => {\n let boolType: BooleanType;\n\n beforeEach(() => {\n boolType = new BooleanType();\n });\n\n describe(\"parse\", () => {\n it(\"should return true for truthy values\", () => {\n const truthy = [\"true\", \"1\", \"yes\", \"on\", \"x\"];\n truthy.forEach(val => {\n expect(boolType.parse(val).value).to.be.true;\n expect(boolType.parse(val.toUpperCase()).value).to.be.true;\n expect(boolType.parse(val.charAt(0).toUpperCase() + val.slice(1)).value).to.be.true;\n });\n });\n\n it(\"should return false for falsy values\", () => {\n const falsy = [\"false\", \"0\", \"no\", \"off\", \"\", \"random\"];\n falsy.forEach(val => {\n expect(boolType.parse(val).value).to.be.false;\n });\n });\n\n it(\"should return defaultValue for undefined or null\", () => {\n boolType._defaultValue = true;\n //expect(boolType.parse(undefined)).to.equal(true);\n expect(boolType.parse(null as any).value).to.equal(true);\n\n boolType._defaultValue = false;\n //expect(boolType.parse(undefined)).to.equal(false);\n expect(boolType.parse(null as any).value).to.equal(false);\n });\n });\n\n describe(\"format\", () => {\n it(\"should format true as 'true'\", () => {\n expect(boolType.format(true)).to.equal(\"true\");\n });\n\n it(\"should format false as 'false'\", () => {\n expect(boolType.format(false)).to.equal(\"false\");\n });\n });\n});"]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { AttributeType, AttributeTypeOptions, ParseAndValidationCriticality, ParseAndValidationResult, parseResult } from "./AttributeType.js";
|
|
2
|
+
export type NumberTypeOptions = {
|
|
3
|
+
max?: number;
|
|
4
|
+
min?: number;
|
|
5
|
+
} & AttributeTypeOptions<number>;
|
|
6
|
+
export declare class NumberType extends AttributeType<number> {
|
|
7
|
+
max: number;
|
|
8
|
+
min: number;
|
|
9
|
+
constructor(options?: NumberTypeOptions);
|
|
10
|
+
parse(value: string): parseResult<number>;
|
|
11
|
+
validate(value: number, level?: ParseAndValidationCriticality): Promise<ParseAndValidationResult>;
|
|
12
|
+
format(value: number): string;
|
|
13
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { AttributeType, ParseAndValidationCriticality } from "./AttributeType.js";
|
|
2
|
+
export class NumberType extends AttributeType {
|
|
3
|
+
max;
|
|
4
|
+
min;
|
|
5
|
+
constructor(options) {
|
|
6
|
+
options = options || {};
|
|
7
|
+
super(options);
|
|
8
|
+
this.max = options.max || Infinity;
|
|
9
|
+
this.min = options.min || -Infinity;
|
|
10
|
+
}
|
|
11
|
+
parse(value) {
|
|
12
|
+
const number = parseFloat(value);
|
|
13
|
+
if (isNaN(number)) {
|
|
14
|
+
return { value: this.defaultValue, deepResult: { criticality: ParseAndValidationCriticality.Warn, messages: [{ criticality: ParseAndValidationCriticality.Warn, message: "Not a number useing default Value" }] } };
|
|
15
|
+
}
|
|
16
|
+
return { value: number, deepResult: { criticality: ParseAndValidationCriticality.Ok, messages: [] } };
|
|
17
|
+
}
|
|
18
|
+
validate(value, level) {
|
|
19
|
+
let validationObject = { criticality: ParseAndValidationCriticality.Ok, messages: [] };
|
|
20
|
+
if (isNaN(value)) {
|
|
21
|
+
validationObject.criticality = ParseAndValidationCriticality.Error;
|
|
22
|
+
validationObject.messages.push({ criticality: ParseAndValidationCriticality.Error, message: "Not a number" });
|
|
23
|
+
}
|
|
24
|
+
if (value < this.min) {
|
|
25
|
+
validationObject.criticality = ParseAndValidationCriticality.Error;
|
|
26
|
+
validationObject.messages.push({ criticality: ParseAndValidationCriticality.Error, message: `Value is less than minimum ${this.min}` });
|
|
27
|
+
}
|
|
28
|
+
if (value > this.max) {
|
|
29
|
+
validationObject.criticality = ParseAndValidationCriticality.Error;
|
|
30
|
+
validationObject.messages.push({ criticality: ParseAndValidationCriticality.Error, message: `Value is greater than maximum ${this.max}` });
|
|
31
|
+
}
|
|
32
|
+
return Promise.resolve(validationObject);
|
|
33
|
+
}
|
|
34
|
+
format(value) {
|
|
35
|
+
return value.toString();
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=NumberType.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NumberType.js","sourceRoot":"","sources":["../../../src/types/base/NumberType.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAwB,6BAA6B,EAAyC,MAAM,oBAAoB,CAAC;AAO/I,MAAM,OAAO,UAAW,SAAQ,aAAqB;IACjD,GAAG,CAAQ;IACX,GAAG,CAAQ;IACX,YAAY,OAA2B;QACnC,OAAO,GAAG,OAAO,IAAI,EAAE,CAAA;QACvB,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,QAAQ,CAAA;QAClC,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAA;IACvC,CAAC;IACD,KAAK,CAAC,KAAa;QACf,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,CAAA;QAChC,IAAI,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;YAChB,OAAO,EAAC,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,UAAU,EAAE,EAAE,WAAW,EAAE,6BAA6B,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,WAAW,EAAE,6BAA6B,CAAC,IAAI,EAAE,OAAO,EAAE,mCAAmC,EAAE,CAAC,EAAE,EAAC,CAAA;QACrN,CAAC;QACD,OAAO,EAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,WAAW,EAAE,6BAA6B,CAAC,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,CAAA;IACxG,CAAC;IACD,QAAQ,CAAC,KAAa,EAAE,KAAqC;QACzD,IAAI,gBAAgB,GAA6B,EAAE,WAAW,EAAE,6BAA6B,CAAC,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAA;QAChH,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;YACf,gBAAgB,CAAC,WAAW,GAAG,6BAA6B,CAAC,KAAK,CAAA;YAClE,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,6BAA6B,CAAC,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAA;QACjH,CAAC;QACD,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACnB,gBAAgB,CAAC,WAAW,GAAG,6BAA6B,CAAC,KAAK,CAAA;YAClE,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,6BAA6B,CAAC,KAAK,EAAE,OAAO,EAAE,8BAA8B,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA;QAC3I,CAAC;QACD,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACnB,gBAAgB,CAAC,WAAW,GAAG,6BAA6B,CAAC,KAAK,CAAA;YAClE,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,6BAA6B,CAAC,KAAK,EAAE,OAAO,EAAE,iCAAiC,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA;QAC9I,CAAC;QACD,OAAO,OAAO,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAA;IAC5C,CAAC;IACD,MAAM,CAAC,KAAa;QAChB,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAA;IAC3B,CAAC;CACJ","sourcesContent":["import { AttributeType, AttributeTypeOptions, ParseAndValidationCriticality, ParseAndValidationResult, parseResult } from \"./AttributeType.js\";\n\nexport type NumberTypeOptions = {\n max?: number,\n min?: number\n} & AttributeTypeOptions<number>\n\nexport class NumberType extends AttributeType<number> {\n max: number \n min: number \n constructor(options?: NumberTypeOptions) {\n options = options || {}\n super(options)\n this.max = options.max || Infinity\n this.min = options.min || -Infinity\n }\n parse(value: string): parseResult<number> {\n const number = parseFloat(value)\n if (isNaN(number)) {\n return {value: this.defaultValue, deepResult: { criticality: ParseAndValidationCriticality.Warn, messages: [{ criticality: ParseAndValidationCriticality.Warn, message: \"Not a number useing default Value\" }] }}\n }\n return {value: number, deepResult: { criticality: ParseAndValidationCriticality.Ok, messages: [] } }\n }\n validate(value: number, level?: ParseAndValidationCriticality): Promise<ParseAndValidationResult> {\n let validationObject: ParseAndValidationResult = { criticality: ParseAndValidationCriticality.Ok, messages: [] }\n if (isNaN(value)) {\n validationObject.criticality = ParseAndValidationCriticality.Error\n validationObject.messages.push({ criticality: ParseAndValidationCriticality.Error, message: \"Not a number\" })\n }\n if (value < this.min) {\n validationObject.criticality = ParseAndValidationCriticality.Error\n validationObject.messages.push({ criticality: ParseAndValidationCriticality.Error, message: `Value is less than minimum ${this.min}` })\n }\n if (value > this.max) {\n validationObject.criticality = ParseAndValidationCriticality.Error\n validationObject.messages.push({ criticality: ParseAndValidationCriticality.Error, message: `Value is greater than maximum ${this.max}` })\n }\n return Promise.resolve(validationObject)\n }\n format(value: number): string {\n return value.toString()\n }\n}"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { expect } from "chai";
|
|
2
|
+
import { NumberType } from "./NumberType.js";
|
|
3
|
+
import { ParseAndValidationCriticality } from "./AttributeType.js";
|
|
4
|
+
describe("NumberType", () => {
|
|
5
|
+
let numberType;
|
|
6
|
+
beforeEach(() => {
|
|
7
|
+
numberType = new NumberType();
|
|
8
|
+
// Optionally set a default value for testing
|
|
9
|
+
numberType._defaultValue = 42;
|
|
10
|
+
});
|
|
11
|
+
describe("parse", () => {
|
|
12
|
+
it("should parse a valid number string", () => {
|
|
13
|
+
expect(numberType.parse("123.45").value).to.equal(123.45);
|
|
14
|
+
});
|
|
15
|
+
it("should parse a negative number string", () => {
|
|
16
|
+
expect(numberType.parse("-99.99").value).to.equal(-99.99);
|
|
17
|
+
});
|
|
18
|
+
it("should return defaultValue for invalid number string", () => {
|
|
19
|
+
expect(numberType.parse("abc").value).to.equal(42);
|
|
20
|
+
});
|
|
21
|
+
it("should return defaultValue for empty string", () => {
|
|
22
|
+
expect(numberType.parse("").value).to.equal(42);
|
|
23
|
+
});
|
|
24
|
+
it("should parse zero", () => {
|
|
25
|
+
expect(numberType.parse("0").value).to.equal(0);
|
|
26
|
+
});
|
|
27
|
+
it("should parse string with leading/trailing spaces", () => {
|
|
28
|
+
expect(numberType.parse(" 77.7 ").value).to.equal(77.7);
|
|
29
|
+
});
|
|
30
|
+
});
|
|
31
|
+
describe("format", () => {
|
|
32
|
+
it("should format a number to string", () => {
|
|
33
|
+
expect(numberType.format(123.45)).to.equal("123.45");
|
|
34
|
+
});
|
|
35
|
+
it("should format zero", () => {
|
|
36
|
+
expect(numberType.format(0)).to.equal("0");
|
|
37
|
+
});
|
|
38
|
+
it("should format a negative number", () => {
|
|
39
|
+
expect(numberType.format(-99.99)).to.equal("-99.99");
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
describe("validate", () => {
|
|
43
|
+
it("should validate a valid number", async () => {
|
|
44
|
+
const result = await numberType.validate(123.45);
|
|
45
|
+
expect(result.criticality).to.equal(0); // Assuming 0 is Ok
|
|
46
|
+
});
|
|
47
|
+
it("should invalidate NaN", async () => {
|
|
48
|
+
const result = await numberType.validate(NaN);
|
|
49
|
+
expect(result.criticality).to.equal(ParseAndValidationCriticality.Error);
|
|
50
|
+
expect(result.messages).to.deep.include({ criticality: ParseAndValidationCriticality.Error, message: "Not a number" });
|
|
51
|
+
});
|
|
52
|
+
it("should invalidate number less than min", async () => {
|
|
53
|
+
numberType.min = 10;
|
|
54
|
+
const result = await numberType.validate(5);
|
|
55
|
+
expect(result.criticality).to.equal(ParseAndValidationCriticality.Error);
|
|
56
|
+
expect(result.messages).to.deep.include({ criticality: ParseAndValidationCriticality.Error, message: "Value is less than minimum 10" });
|
|
57
|
+
});
|
|
58
|
+
it("should invalidate number greater than max", async () => {
|
|
59
|
+
numberType.max = 100;
|
|
60
|
+
const result = await numberType.validate(150);
|
|
61
|
+
expect(result.criticality).to.equal(ParseAndValidationCriticality.Error);
|
|
62
|
+
expect(result.messages).to.deep.include({ criticality: ParseAndValidationCriticality.Error, message: "Value is greater than maximum 100" });
|
|
63
|
+
});
|
|
64
|
+
it("should validate number within min and max", async () => {
|
|
65
|
+
numberType.min = 10;
|
|
66
|
+
numberType.max = 100;
|
|
67
|
+
const result = await numberType.validate(50);
|
|
68
|
+
expect(result.criticality).to.equal(0); // Assuming 0 is Ok
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
});
|
|
72
|
+
//# sourceMappingURL=NumberType.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NumberType.spec.js","sourceRoot":"","sources":["../../../src/types/base/NumberType.spec.ts"],"names":[],"mappings":"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","sourcesContent":["import { expect } from \"chai\";\nimport { NumberType } from \"./NumberType.js\";\nimport { ParseAndValidationCriticality } from \"./AttributeType.js\";\n\ndescribe(\"NumberType\", () => {\n let numberType: NumberType;\n\n beforeEach(() => {\n numberType = new NumberType();\n // Optionally set a default value for testing\n numberType._defaultValue = 42;\n });\n\n describe(\"parse\", () => {\n it(\"should parse a valid number string\", () => {\n expect(numberType.parse(\"123.45\").value).to.equal(123.45);\n });\n\n it(\"should parse a negative number string\", () => {\n expect(numberType.parse(\"-99.99\").value).to.equal(-99.99);\n });\n\n it(\"should return defaultValue for invalid number string\", () => {\n expect(numberType.parse(\"abc\").value).to.equal(42);\n });\n\n it(\"should return defaultValue for empty string\", () => {\n expect(numberType.parse(\"\").value).to.equal(42);\n });\n\n it(\"should parse zero\", () => {\n expect(numberType.parse(\"0\").value).to.equal(0);\n });\n\n it(\"should parse string with leading/trailing spaces\", () => {\n expect(numberType.parse(\" 77.7 \").value).to.equal(77.7);\n });\n });\n\n describe(\"format\", () => {\n it(\"should format a number to string\", () => {\n expect(numberType.format(123.45)).to.equal(\"123.45\");\n });\n\n it(\"should format zero\", () => {\n expect(numberType.format(0)).to.equal(\"0\");\n });\n\n it(\"should format a negative number\", () => {\n expect(numberType.format(-99.99)).to.equal(\"-99.99\");\n });\n });\n describe(\"validate\", () => {\n it(\"should validate a valid number\", async () => {\n const result = await numberType.validate(123.45);\n expect(result.criticality).to.equal(0); // Assuming 0 is Ok\n });\n\n it(\"should invalidate NaN\", async () => {\n const result = await numberType.validate(NaN);\n expect(result.criticality).to.equal(ParseAndValidationCriticality.Error);\n expect(result.messages).to.deep.include({ criticality: ParseAndValidationCriticality.Error, message: \"Not a number\" });\n });\n\n it(\"should invalidate number less than min\", async () => {\n numberType.min = 10;\n const result = await numberType.validate(5);\n expect(result.criticality).to.equal(ParseAndValidationCriticality.Error); \n expect(result.messages).to.deep.include({ criticality: ParseAndValidationCriticality.Error, message: \"Value is less than minimum 10\" });\n });\n\n it(\"should invalidate number greater than max\", async () => {\n numberType.max = 100;\n const result = await numberType.validate(150);\n expect(result.criticality).to.equal(ParseAndValidationCriticality.Error); \n expect(result.messages).to.deep.include({ criticality: ParseAndValidationCriticality.Error, message: \"Value is greater than maximum 100\" });\n });\n\n it(\"should validate number within min and max\", async () => {\n numberType.min = 10;\n numberType.max = 100;\n const result = await numberType.validate(50);\n expect(result.criticality).to.equal(0); // Assuming 0 is Ok\n });\n });\n});"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StringArrayType.js","sourceRoot":"","sources":["../../../src/types/base/StringArrayType.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,MAAM,OAAO,eAAgB,SAAQ,SAAyB;IAC1D,IAAI,GAAG,IAAI,UAAU,EAAE,CAAA;CAC1B","sourcesContent":["import { ArrayType } from \"./ArrayType.js\";\nimport { StringType } from \"./StringType.js\";\n\nexport class StringArrayType extends ArrayType<string, string>{\n type = new StringType()\n}"]}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { AttributeType, AttributeTypeOptions, ParseAndValidationCriticality, ParseAndValidationResult, parseResult } from "./AttributeType.js";
|
|
2
|
+
export type StringTypeOptions = AttributeTypeOptions<string> & {
|
|
3
|
+
maxLength?: number;
|
|
4
|
+
minLength?: number;
|
|
5
|
+
matchPattern?: RegExp;
|
|
6
|
+
matchPatternMessage?: string;
|
|
7
|
+
parsePattern?: RegExp;
|
|
8
|
+
parseReplacement?: string;
|
|
9
|
+
parsePatternMessage?: string;
|
|
10
|
+
formatPattern?: RegExp;
|
|
11
|
+
formatReplacement?: string;
|
|
12
|
+
};
|
|
13
|
+
export declare class StringType<ExternalType extends string = string> extends AttributeType<string, ExternalType> {
|
|
14
|
+
maxLength: number;
|
|
15
|
+
minLength: number;
|
|
16
|
+
parsePattern: RegExp | null;
|
|
17
|
+
parseReplacement: string | null;
|
|
18
|
+
parsePatternMessage: string;
|
|
19
|
+
matchPattern: RegExp | null;
|
|
20
|
+
matchPatternMessage: string | null;
|
|
21
|
+
formatPattern: RegExp | null;
|
|
22
|
+
formatReplacement: string | null;
|
|
23
|
+
constructor(options?: StringTypeOptions);
|
|
24
|
+
parse(value: ExternalType): parseResult<string>;
|
|
25
|
+
validate(value: string, level?: ParseAndValidationCriticality): Promise<ParseAndValidationResult>;
|
|
26
|
+
format(value: string): ExternalType;
|
|
27
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { AttributeType, ParseAndValidationCriticality } from "./AttributeType.js";
|
|
2
|
+
export class StringType extends AttributeType {
|
|
3
|
+
maxLength;
|
|
4
|
+
minLength;
|
|
5
|
+
parsePattern;
|
|
6
|
+
parseReplacement;
|
|
7
|
+
parsePatternMessage;
|
|
8
|
+
matchPattern;
|
|
9
|
+
matchPatternMessage;
|
|
10
|
+
formatPattern;
|
|
11
|
+
formatReplacement;
|
|
12
|
+
constructor(options) {
|
|
13
|
+
options = options || {};
|
|
14
|
+
super(options);
|
|
15
|
+
this.maxLength = options.maxLength || 255;
|
|
16
|
+
this.minLength = options.minLength || 0;
|
|
17
|
+
this.parsePattern = options.parsePattern || null;
|
|
18
|
+
this.parseReplacement = options.parseReplacement || null;
|
|
19
|
+
this.parsePatternMessage = options.parsePatternMessage || `Parse pattern not matched: "${this.parsePattern}"`;
|
|
20
|
+
this.matchPattern = options.matchPattern || null;
|
|
21
|
+
this.matchPatternMessage = options.matchPatternMessage || null;
|
|
22
|
+
this.formatPattern = options.formatPattern || null;
|
|
23
|
+
this.formatReplacement = options.formatReplacement || null;
|
|
24
|
+
}
|
|
25
|
+
parse(value) {
|
|
26
|
+
if (!value)
|
|
27
|
+
return { value: this.defaultValue, deepResult: { criticality: ParseAndValidationCriticality.Info, messages: [{ criticality: ParseAndValidationCriticality.Info, message: 'No value given using default Value!' }] } };
|
|
28
|
+
if (this.parsePattern && this.parseReplacement) {
|
|
29
|
+
if (!this.parsePattern.test(value))
|
|
30
|
+
throw new Error(this.parsePatternMessage);
|
|
31
|
+
value = value.replace(this.parsePattern, this.parseReplacement);
|
|
32
|
+
}
|
|
33
|
+
return { value, deepResult: { criticality: ParseAndValidationCriticality.Ok, messages: [] } };
|
|
34
|
+
}
|
|
35
|
+
async validate(value, level) {
|
|
36
|
+
console.log("Validating string:", value);
|
|
37
|
+
let validationObject = await super.validate(value, level);
|
|
38
|
+
if (value && this.matchPattern && !this.matchPattern.test(value)) {
|
|
39
|
+
validationObject.messages.push({ criticality: ParseAndValidationCriticality.Error, message: this.matchPatternMessage || `Validierungsmuster nicht erfüllt: "${this.matchPattern}"` });
|
|
40
|
+
validationObject.criticality = Math.max(validationObject.criticality, ParseAndValidationCriticality.Error);
|
|
41
|
+
}
|
|
42
|
+
if (value && value.length < this.minLength) {
|
|
43
|
+
validationObject.messages.push({ criticality: ParseAndValidationCriticality.Error, message: `Es müssen mindesten ${this.minLength} Zeichen eingegeben werden.` });
|
|
44
|
+
validationObject.criticality = Math.max(validationObject.criticality, ParseAndValidationCriticality.Error);
|
|
45
|
+
}
|
|
46
|
+
if (value && value.length > this.maxLength) {
|
|
47
|
+
validationObject.messages.push({ criticality: ParseAndValidationCriticality.Error, message: `Es dürfen maximal ${this.maxLength} Zeichen eingegeben werden.` });
|
|
48
|
+
validationObject.criticality = Math.max(validationObject.criticality, ParseAndValidationCriticality.Error);
|
|
49
|
+
}
|
|
50
|
+
return validationObject;
|
|
51
|
+
}
|
|
52
|
+
format(value) {
|
|
53
|
+
if (this.formatPattern && this.formatReplacement) {
|
|
54
|
+
value = value.replace(this.formatPattern, this.formatReplacement);
|
|
55
|
+
}
|
|
56
|
+
return value;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=StringType.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StringType.js","sourceRoot":"","sources":["../../../src/types/base/StringType.ts"],"names":[],"mappings":"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","sourcesContent":["import { AttributeType, AttributeTypeOptions, ParseAndValidationCriticality, ParseAndValidationResult, parseResult } from \"./AttributeType.js\";\n\nexport type StringTypeOptions = AttributeTypeOptions<string> & {\n maxLength?: number\n minLength?: number\n matchPattern?: RegExp\n matchPatternMessage?: string\n parsePattern?: RegExp\n parseReplacement?: string\n parsePatternMessage?: string\n formatPattern?: RegExp\n formatReplacement?: string\n}\n\nexport class StringType<ExternalType extends string = string> extends AttributeType<string, ExternalType> {\n maxLength: number\n minLength: number\n parsePattern: RegExp | null\n parseReplacement: string | null\n parsePatternMessage: string \n matchPattern: RegExp | null\n matchPatternMessage: string | null\n formatPattern: RegExp | null \n formatReplacement: string | null \n constructor(options?: StringTypeOptions) {\n options = options || {}\n super(options)\n this.maxLength = options.maxLength || 255\n this.minLength = options.minLength || 0\n this.parsePattern = options.parsePattern || null\n this.parseReplacement = options.parseReplacement || null\n this.parsePatternMessage = options.parsePatternMessage || `Parse pattern not matched: \"${this.parsePattern}\"`\n this.matchPattern = options.matchPattern || null\n this.matchPatternMessage = options.matchPatternMessage || null\n this.formatPattern = options.formatPattern || null\n this.formatReplacement = options.formatReplacement || null\n }\n parse(value: ExternalType): parseResult<string> {\n if(!value) return {value: this.defaultValue, deepResult: { criticality: ParseAndValidationCriticality.Info, messages: [{criticality: ParseAndValidationCriticality.Info, message:'No value given using default Value!'}] }}\n if(this.parsePattern && this.parseReplacement){\n if(!this.parsePattern.test(value)) throw new Error(this.parsePatternMessage)\n value = value.replace(this.parsePattern, this.parseReplacement) as ExternalType\n }\n return {value, deepResult: { criticality: ParseAndValidationCriticality.Ok, messages: [] } } \n }\n async validate(value: string, level?: ParseAndValidationCriticality): Promise<ParseAndValidationResult> {\n console.log(\"Validating string:\", value)\n let validationObject = await super.validate(value, level)\n if(value && this.matchPattern && !this.matchPattern.test(value)){\n validationObject.messages.push({criticality:ParseAndValidationCriticality.Error, message: this.matchPatternMessage || `Validierungsmuster nicht erfüllt: \"${this.matchPattern}\"`})\n validationObject.criticality=Math.max(validationObject.criticality,ParseAndValidationCriticality.Error)\n }\n if(value && value.length < this.minLength){\n validationObject.messages.push({criticality:ParseAndValidationCriticality.Error, message: `Es müssen mindesten ${this.minLength} Zeichen eingegeben werden.`})\n validationObject.criticality=Math.max(validationObject.criticality,ParseAndValidationCriticality.Error)\n }\n if(value && value.length > this.maxLength){\n validationObject.messages.push({criticality:ParseAndValidationCriticality.Error, message: `Es dürfen maximal ${this.maxLength} Zeichen eingegeben werden.`})\n validationObject.criticality=Math.max(validationObject.criticality,ParseAndValidationCriticality.Error)\n }\n return validationObject\n }\n format(value: string): ExternalType {\n if(this.formatPattern && this.formatReplacement){\n value = value.replace(this.formatPattern, this.formatReplacement)\n }\n return value as ExternalType;\n }\n}"]}
|