fogui-common 0.0.1 → 0.0.2

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,7 +1,7 @@
1
1
  import { AttributeType, ParseAndValidationCriticality, ParseAndValidationResult, parseResult } from "../../types/base/AttributeType.js";
2
2
  import { InferType } from "../../util/InferType.js";
3
3
  export declare const required: true;
4
- interface PropertyOptions {
4
+ export interface PropertyOptions {
5
5
  required?: boolean;
6
6
  type: AttributeType<any, any>;
7
7
  }
@@ -12,4 +12,3 @@ export declare class Model extends AttributeType<object, Record<string, any>> {
12
12
  [key: string]: any;
13
13
  }, level?: ParseAndValidationCriticality): Promise<ParseAndValidationResult>;
14
14
  }
15
- export {};
@@ -1 +1 @@
1
- {"version":3,"file":"Model.js","sourceRoot":"","sources":["../../../src/model/base/Model.ts"],"names":[],"mappings":"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","sourcesContent":["import { AttributeType, ParseAndValidationCriticality, ParseAndValidationResult, parseResult } from \"../../types/base/AttributeType.js\";\nimport { InferType } from \"../../util/InferType.js\";\n\nexport const required = true as const\n\n\ninterface PropertyOptions {\n required?: boolean;\n type: AttributeType<any, any>;\n}\n\n\nexport class Model extends AttributeType<object,Record<string, any>> {\n properties: Record<string, PropertyOptions> = {};\n parse(value: Record<string, any>): parseResult<InferType<this>> {\n const obj: any = {};\n let validationObject:ParseAndValidationResult = {criticality:ParseAndValidationCriticality.Ok,messages:[]}\n validationObject.subValidationResults={}\n for (const key in this.properties) {\n if (this.properties[key].required || value[key] !== undefined) {\n let result = this.properties[key].type.parse(value[key]);\n obj[key] = result.value;\n validationObject.subValidationResults[key]=result.deepResult\n validationObject.criticality=Math.max(validationObject.criticality,result.deepResult.criticality)\n }\n }\n for(let objectProperty in value){\n if(this.properties[objectProperty]===undefined)\n validationObject.messages.push({criticality:ParseAndValidationCriticality.Error, message:`Property \"${objectProperty}\" nicht erlaubt.` })\n }\n return {value: obj, deepResult: validationObject};\n }\n async validate(value: { [key: string]: any}, level?: ParseAndValidationCriticality): Promise<ParseAndValidationResult> {\n let validationObject:ParseAndValidationResult = {criticality:ParseAndValidationCriticality.Ok,messages:[]}\n validationObject.subValidationResults={}\n for(let propertyName in this.properties){\n let property = this.properties[propertyName]\n if(value[propertyName]===undefined ){\n if(property.required){\n validationObject.messages.push({criticality:ParseAndValidationCriticality.Error, message:`Property \"${propertyName}\" is required.`})\n validationObject.criticality=Math.max(validationObject.criticality,ParseAndValidationCriticality.Error)\n }\n continue\n }\n let validationResult = await property.type.validate(value[propertyName])\n validationObject.subValidationResults[propertyName]=validationResult\n validationObject.criticality=Math.max(validationObject.criticality,validationResult.criticality)\n }\n for(let objectProperty in value){\n if(this.properties[objectProperty]===undefined)\n validationObject.messages.push({criticality:ParseAndValidationCriticality.Error, message:`Property \"${objectProperty}\" nicht erlaubt.` })\n }\n return validationObject\n }\n}"]}
1
+ {"version":3,"file":"Model.js","sourceRoot":"","sources":["../../../src/model/base/Model.ts"],"names":[],"mappings":"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","sourcesContent":["import { AttributeType, ParseAndValidationCriticality, ParseAndValidationResult, parseResult } from \"../../types/base/AttributeType.js\";\nimport { InferType } from \"../../util/InferType.js\";\n\nexport const required = true as const\n\n\nexport interface PropertyOptions {\n required?: boolean;\n type: AttributeType<any, any>;\n}\n\n\nexport class Model extends AttributeType<object,Record<string, any>> {\n properties: Record<string, PropertyOptions> = {};\n parse(value: Record<string, any>): parseResult<InferType<this>> {\n const obj: any = {};\n let validationObject:ParseAndValidationResult = {criticality:ParseAndValidationCriticality.Ok,messages:[]}\n validationObject.subValidationResults={}\n for (const key in this.properties) {\n if (this.properties[key].required || value[key] !== undefined) {\n let result = this.properties[key].type.parse(value[key]);\n obj[key] = result.value;\n validationObject.subValidationResults[key]=result.deepResult\n validationObject.criticality=Math.max(validationObject.criticality,result.deepResult.criticality)\n }\n }\n for(let objectProperty in value){\n if(this.properties[objectProperty]===undefined)\n validationObject.messages.push({criticality:ParseAndValidationCriticality.Error, message:`Property \"${objectProperty}\" nicht erlaubt.` })\n }\n return {value: obj, deepResult: validationObject};\n }\n async validate(value: { [key: string]: any}, level?: ParseAndValidationCriticality): Promise<ParseAndValidationResult> {\n let validationObject:ParseAndValidationResult = {criticality:ParseAndValidationCriticality.Ok,messages:[]}\n validationObject.subValidationResults={}\n for(let propertyName in this.properties){\n let property = this.properties[propertyName]\n if(value[propertyName]===undefined ){\n if(property.required){\n validationObject.messages.push({criticality:ParseAndValidationCriticality.Error, message:`Property \"${propertyName}\" is required.`})\n validationObject.criticality=Math.max(validationObject.criticality,ParseAndValidationCriticality.Error)\n }\n continue\n }\n let validationResult = await property.type.validate(value[propertyName])\n validationObject.subValidationResults[propertyName]=validationResult\n validationObject.criticality=Math.max(validationObject.criticality,validationResult.criticality)\n }\n for(let objectProperty in value){\n if(this.properties[objectProperty]===undefined)\n validationObject.messages.push({criticality:ParseAndValidationCriticality.Error, message:`Property \"${objectProperty}\" nicht erlaubt.` })\n }\n return validationObject\n }\n}"]}
@@ -1,11 +1,12 @@
1
+ import { InferExternalType, InferType } from "../../util/InferType.js";
1
2
  import { AttributeType, AttributeTypeOptions, ParseAndValidationCriticality, ParseAndValidationResult, parseResult } from "./AttributeType.js";
2
- export type ArrayTypeOptions = AttributeTypeOptions<any[]> & {
3
- type: AttributeType<any, any>;
3
+ export type ArrayTypeOptions<T> = AttributeTypeOptions<any[]> & {
4
+ type: T;
4
5
  };
5
- export declare abstract class ArrayType<InternalType, ExternalType> extends AttributeType<InternalType[], ExternalType[]> {
6
- abstract type: AttributeType<InternalType, ExternalType>;
7
- constructor(options?: ArrayTypeOptions);
8
- parse(value: ExternalType[]): parseResult<InternalType[]>;
9
- validate(value: InternalType[], level?: ParseAndValidationCriticality): Promise<ParseAndValidationResult>;
10
- format(value: InternalType[]): ExternalType[];
6
+ export declare class ArrayType<T extends AttributeType<any, any>> extends AttributeType<InferType<T>[], InferExternalType<T>[]> {
7
+ type: T;
8
+ constructor(options?: ArrayTypeOptions<T>);
9
+ parse(value: InferExternalType<T>[]): parseResult<InferType<T>[]>;
10
+ validate(value: InferType<T>[], level?: ParseAndValidationCriticality): Promise<ParseAndValidationResult>;
11
+ format(value: InferType<T>[]): InferExternalType<T>[];
11
12
  }
@@ -1,7 +1,9 @@
1
1
  import { AttributeType, ParseAndValidationCriticality } from "./AttributeType.js";
2
2
  export class ArrayType extends AttributeType {
3
+ type;
3
4
  constructor(options) {
4
5
  super(options);
6
+ this.type = options?.type ? options.type : new AttributeType();
5
7
  }
6
8
  parse(value) {
7
9
  let resultObject = { criticality: ParseAndValidationCriticality.Ok, messages: [] };
@@ -1 +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}"]}
1
+ {"version":3,"file":"ArrayType.js","sourceRoot":"","sources":["../../../src/types/base/ArrayType.ts"],"names":[],"mappings":"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","sourcesContent":["import { InferExternalType, InferType } from \"../../util/InferType.js\";\nimport { AttributeType, AttributeTypeOptions, ParseAndValidationCriticality, ParseAndValidationResult, parseResult } from \"./AttributeType.js\";\n\n\nexport type ArrayTypeOptions<T> = AttributeTypeOptions<any[]> &{\n type: T \n} \n\n\nexport class ArrayType<T extends AttributeType<any, any>> extends AttributeType<InferType<T>[],InferExternalType<T>[]> {\n type: T \n constructor(options?: ArrayTypeOptions<T>) {\n super(options)\n this.type = options?.type ? options.type : new AttributeType() as T\n }\n parse(value: InferExternalType<T>[]): parseResult<InferType<T>[]> {\n let resultObject:ParseAndValidationResult = {criticality:ParseAndValidationCriticality.Ok,messages:[]}\n resultObject.subValidationResults={}\n let returnObject:InferType<T>[] = []\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 InferType<T>)\n }\n return {value: returnObject, deepResult: resultObject} \n }\n async validate(value: InferType<T>[], 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: InferType<T>[]): InferExternalType<T>[] {\n if(!value) return []\n return value.map(v=>this.type.format(v) as InferExternalType<T>)\n }\n}"]}
@@ -3,7 +3,9 @@ import { ArrayType } from "./ArrayType.js";
3
3
  import { ParseAndValidationCriticality } from "./AttributeType.js";
4
4
  import { NumberType } from "./NumberType.js";
5
5
  class NumberArrayType extends ArrayType {
6
- type = new NumberType();
6
+ constructor() {
7
+ super({ type: new NumberType(), defaultValue: [] });
8
+ }
7
9
  }
8
10
  describe("ArrayType", () => {
9
11
  let arrayType;
@@ -1 +1 @@
1
- {"version":3,"file":"ArrayType.spec.js","sourceRoot":"","sources":["../../../src/types/base/ArrayType.spec.ts"],"names":[],"mappings":"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","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});"]}
1
+ {"version":3,"file":"ArrayType.spec.js","sourceRoot":"","sources":["../../../src/types/base/ArrayType.spec.ts"],"names":[],"mappings":"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","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<NumberType> {\n constructor() {\n super({type: new NumberType(), defaultValue: []})\n }\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});"]}
@@ -1,5 +1,5 @@
1
1
  import { ArrayType } from "./ArrayType.js";
2
2
  import { StringType } from "./StringType.js";
3
- export declare class StringArrayType extends ArrayType<string, string> {
3
+ export declare class StringArrayType extends ArrayType<StringType> {
4
4
  type: StringType<string>;
5
5
  }
@@ -1 +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}"]}
1
+ {"version":3,"file":"StringArrayType.js","sourceRoot":"","sources":["../../../src/types/base/StringArrayType.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAoB,MAAM,gBAAgB,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,MAAM,OAAO,eAAgB,SAAQ,SAAqB;IACtD,IAAI,GAAG,IAAI,UAAU,EAAE,CAAA;CAM1B","sourcesContent":["import { ArrayType, ArrayTypeOptions } from \"./ArrayType.js\";\nimport { StringType } from \"./StringType.js\";\n\nexport class StringArrayType extends ArrayType<StringType>{\n type = new StringType()\n /*constructor(options?:ArrayTypeOptions<StringType>) {\n options = options || {type: new StringType()}\n options.type = options.type || new StringType()\n super({type: new StringType()})\n }*/\n}"]}
@@ -11,5 +11,8 @@ type PartialPartial<T, K extends keyof T> = Partial<Pick<T, K>> & Omit<T, K> ext
11
11
  } : never;
12
12
  export type InferType<T> = T extends Model ? PartialPartial<{
13
13
  [K in keyof T["properties"]]: InferType<T["properties"][K]["type"]>;
14
- }, OptionalKeys<T["properties"]>> : T extends ArrayType<infer U, infer V> ? InferType<T["type"]>[] : T extends AttributeType<infer U> ? U : never;
14
+ }, OptionalKeys<T["properties"]>> : T extends ArrayType<infer U> ? InferType<T["type"]>[] : T extends AttributeType<infer U> ? U : never;
15
+ export type InferExternalType<T> = T extends Model ? PartialPartial<{
16
+ [K in keyof T["properties"]]: InferExternalType<T["properties"][K]["type"]>;
17
+ }, OptionalKeys<T["properties"]>> : T extends ArrayType<infer U> ? InferExternalType<T["type"]>[] : T extends AttributeType<any, infer U> ? U : never;
15
18
  export {};
@@ -1,2 +1,4 @@
1
1
  export {};
2
+ // type Test = InferType<Config>
3
+ // type Test2 = InferExternalType<Config>
2
4
  //# sourceMappingURL=InferType.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"InferType.js","sourceRoot":"","sources":["../../src/util/InferType.ts"],"names":[],"mappings":"","sourcesContent":["import { Model } from \"../model/base/Model.js\";\nimport { ArrayType } from \"../types/base/ArrayType.js\";\nimport { AttributeType } from \"../types/base/AttributeType.js\";\n\n\ntype RequriedKeys<T> = {\n [K in keyof T]: T[K] extends { required: true } ? K : never;\n}[keyof T];\n\ntype OptionalKeys<T> = {\n [K in keyof T]: T[K] extends { required: true } ? never : K;\n}[keyof T];\n\ntype PartialPartial<T, K extends keyof T> = Partial<Pick<T, K>> & Omit<T, K> extends\n infer O ? { [P in keyof O]: O[P] } : never;\n\nexport type InferType<T> = T extends Model\n ? \n PartialPartial<{[K in keyof T[\"properties\"]]: InferType<T[\"properties\"][K][\"type\"]>},\n OptionalKeys<T[\"properties\"]>>\n \n : T extends ArrayType<infer U, infer V>\n ? InferType<T[\"type\"]>[]\n : \n T extends AttributeType<infer U>\n ? U\n : never;"]}
1
+ {"version":3,"file":"InferType.js","sourceRoot":"","sources":["../../src/util/InferType.ts"],"names":[],"mappings":";AAwCA,gCAAgC;AAChC,yCAAyC","sourcesContent":["import { Model } from \"../model/base/Model.js\";\nimport { ArrayType } from \"../types/base/ArrayType.js\";\nimport { AttributeType } from \"../types/base/AttributeType.js\";\n\n\ntype RequriedKeys<T> = {\n [K in keyof T]: T[K] extends { required: true } ? K : never;\n}[keyof T];\n\ntype OptionalKeys<T> = {\n [K in keyof T]: T[K] extends { required: true } ? never : K;\n}[keyof T];\n\ntype PartialPartial<T, K extends keyof T> = Partial<Pick<T, K>> & Omit<T, K> extends\n infer O ? { [P in keyof O]: O[P] } : never;\n\nexport type InferType<T> = T extends Model\n ? \n PartialPartial<{[K in keyof T[\"properties\"]]: InferType<T[\"properties\"][K][\"type\"]>},\n OptionalKeys<T[\"properties\"]>>\n \n : T extends ArrayType<infer U>\n ? InferType<T[\"type\"]>[]\n : \n T extends AttributeType<infer U>\n ? U\n : never;\n\nexport type InferExternalType<T> = T extends Model\n ? \n PartialPartial<{[K in keyof T[\"properties\"]]: InferExternalType<T[\"properties\"][K][\"type\"]>},\n OptionalKeys<T[\"properties\"]>>\n \n : T extends ArrayType<infer U>\n ? InferExternalType<T[\"type\"]>[]\n : \n T extends AttributeType<any, infer U>\n ? U\n : never;\n\n// type Test = InferType<Config>\n// type Test2 = InferExternalType<Config>"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fogui-common",
3
- "version": "0.0.1",
3
+ "version": "0.0.2",
4
4
  "description": "FogUi common files",
5
5
  "keywords": [
6
6
  "fogui"
@@ -4,7 +4,7 @@ import { InferType } from "../../util/InferType.js";
4
4
  export const required = true as const
5
5
 
6
6
 
7
- interface PropertyOptions {
7
+ export interface PropertyOptions {
8
8
  required?: boolean;
9
9
  type: AttributeType<any, any>;
10
10
  }
@@ -5,8 +5,10 @@ import { NumberType } from "./NumberType.js";
5
5
 
6
6
 
7
7
 
8
- class NumberArrayType extends ArrayType<number, string> {
9
- type = new NumberType();
8
+ class NumberArrayType extends ArrayType<NumberType> {
9
+ constructor() {
10
+ super({type: new NumberType()})
11
+ }
10
12
  }
11
13
 
12
14
  describe("ArrayType", () => {
@@ -1,31 +1,33 @@
1
+ import { InferExternalType, InferType } from "../../util/InferType.js";
1
2
  import { AttributeType, AttributeTypeOptions, ParseAndValidationCriticality, ParseAndValidationResult, parseResult } from "./AttributeType.js";
2
3
 
3
4
 
4
- export type ArrayTypeOptions = AttributeTypeOptions<any[]> &{
5
- type: AttributeType<any, any>
5
+ export type ArrayTypeOptions<T> = AttributeTypeOptions<any[]> &{
6
+ type: T
6
7
  }
7
8
 
8
9
 
9
- export abstract class ArrayType<InternalType,ExternalType> extends AttributeType<InternalType[],ExternalType[]> {
10
- abstract type: AttributeType<InternalType,ExternalType>
11
- constructor(options?: ArrayTypeOptions) {
10
+ export class ArrayType<T extends AttributeType<any, any>> extends AttributeType<InferType<T>[],InferExternalType<T>[]> {
11
+ type: T
12
+ constructor(options?: ArrayTypeOptions<T>) {
12
13
  super(options)
14
+ this.type = options?.type ? options.type : new AttributeType() as T
13
15
  }
14
- parse(value: ExternalType[]): parseResult<InternalType[]> {
16
+ parse(value: InferExternalType<T>[]): parseResult<InferType<T>[]> {
15
17
  let resultObject:ParseAndValidationResult = {criticality:ParseAndValidationCriticality.Ok,messages:[]}
16
18
  resultObject.subValidationResults={}
17
- let returnObject:InternalType[] = []
19
+ let returnObject:InferType<T>[] = []
18
20
  if(!value) return {value: this.defaultValue, deepResult: { criticality: ParseAndValidationCriticality.Info, messages: [{criticality: ParseAndValidationCriticality.Info, message:'No value given using default Value!'}] }}
19
21
  if(!Array.isArray(value)) return {value: this.defaultValue, deepResult: { criticality: ParseAndValidationCriticality.Error, messages: [{criticality: ParseAndValidationCriticality.Error, message:'Value is not an array'}] }}
20
22
  for(let i=0; i< value.length; i++){
21
23
  const result = this.type.parse(value[i])
22
24
  resultObject.criticality = Math.max(resultObject.criticality, result.deepResult.criticality)
23
25
  resultObject.subValidationResults[i] = resultObject
24
- returnObject.push(result.value as InternalType)
26
+ returnObject.push(result.value as InferType<T>)
25
27
  }
26
28
  return {value: returnObject, deepResult: resultObject}
27
29
  }
28
- async validate(value: InternalType[], level?: ParseAndValidationCriticality): Promise<ParseAndValidationResult> {
30
+ async validate(value: InferType<T>[], level?: ParseAndValidationCriticality): Promise<ParseAndValidationResult> {
29
31
  let validationObject:ParseAndValidationResult = {
30
32
  criticality: ParseAndValidationCriticality.Ok, messages: [], subValidationResults: {}
31
33
  }
@@ -37,8 +39,8 @@ export abstract class ArrayType<InternalType,ExternalType> extends AttributeType
37
39
  }
38
40
  return validationObject
39
41
  }
40
- format(value: InternalType[]): ExternalType[] {
42
+ format(value: InferType<T>[]): InferExternalType<T>[] {
41
43
  if(!value) return []
42
- return value.map(v=>this.type.format(v) as ExternalType)
44
+ return value.map(v=>this.type.format(v) as InferExternalType<T>)
43
45
  }
44
46
  }
@@ -1,6 +1,11 @@
1
- import { ArrayType } from "./ArrayType.js";
1
+ import { ArrayType, ArrayTypeOptions } from "./ArrayType.js";
2
2
  import { StringType } from "./StringType.js";
3
3
 
4
- export class StringArrayType extends ArrayType<string, string>{
4
+ export class StringArrayType extends ArrayType<StringType>{
5
5
  type = new StringType()
6
+ /*constructor(options?:ArrayTypeOptions<StringType>) {
7
+ options = options || {type: new StringType()}
8
+ options.type = options.type || new StringType()
9
+ super({type: new StringType()})
10
+ }*/
6
11
  }
@@ -19,9 +19,24 @@ export type InferType<T> = T extends Model
19
19
  PartialPartial<{[K in keyof T["properties"]]: InferType<T["properties"][K]["type"]>},
20
20
  OptionalKeys<T["properties"]>>
21
21
 
22
- : T extends ArrayType<infer U, infer V>
22
+ : T extends ArrayType<infer U>
23
23
  ? InferType<T["type"]>[]
24
24
  :
25
25
  T extends AttributeType<infer U>
26
26
  ? U
27
- : never;
27
+ : never;
28
+
29
+ export type InferExternalType<T> = T extends Model
30
+ ?
31
+ PartialPartial<{[K in keyof T["properties"]]: InferExternalType<T["properties"][K]["type"]>},
32
+ OptionalKeys<T["properties"]>>
33
+
34
+ : T extends ArrayType<infer U>
35
+ ? InferExternalType<T["type"]>[]
36
+ :
37
+ T extends AttributeType<any, infer U>
38
+ ? U
39
+ : never;
40
+
41
+ // type Test = InferType<Config>
42
+ // type Test2 = InferExternalType<Config>