Bug fixed and improvements
This commit is contained in:
		
							
								
								
									
										92
									
								
								lib/jrpc.js
									
									
									
									
									
								
							
							
						
						
									
										92
									
								
								lib/jrpc.js
									
									
									
									
									
								
							@ -7531,8 +7531,8 @@ var TypescriptTarget = class extends CompileTarget {
 | 
			
		||||
`;
 | 
			
		||||
  }
 | 
			
		||||
  generateImports(a, def) {
 | 
			
		||||
    a(0, this.generateImport(`{ VerificationError, verify_number, verify_string, verify_boolean, verify_void, strip_number, strip_string, strip_boolean, strip_void }`, `./ts_base`));
 | 
			
		||||
    a(0, def.depends.map((dep) => this.generateImport(`${dep}, { verify_${dep}, strip_${dep} }`, "./" + dep)));
 | 
			
		||||
    a(0, this.generateImport(`{ VerificationError, apply_number, apply_string, apply_boolean, apply_void }`, `./ts_base`));
 | 
			
		||||
    a(0, def.depends.map((dep) => this.generateImport(`${dep}, { apply_${dep} }`, "./" + dep)));
 | 
			
		||||
  }
 | 
			
		||||
  getFileName(typename) {
 | 
			
		||||
    return typename + ".ts";
 | 
			
		||||
@ -7572,68 +7572,35 @@ var TypescriptTarget = class extends CompileTarget {
 | 
			
		||||
    a(1, `}`);
 | 
			
		||||
    a(0, ``);
 | 
			
		||||
    a(0, ``);
 | 
			
		||||
    a(1, `static verify(data: ${def.name}) {`);
 | 
			
		||||
    a(2, `verify_${def.name}(data);`);
 | 
			
		||||
    a(1, `static apply(data: ${def.name}) {`);
 | 
			
		||||
    a(2, `apply_${def.name}(data);`);
 | 
			
		||||
    a(1, `}`);
 | 
			
		||||
    a(0, `}`);
 | 
			
		||||
    a(0, ``);
 | 
			
		||||
    a(0, `export function strip_${def.name}(data: ${def.name}): ${def.name} {`);
 | 
			
		||||
    a(0, `export function apply_${def.name}(data: ${def.name}): ${def.name} {`);
 | 
			
		||||
    {
 | 
			
		||||
      a(1, `if(typeof data !== "object") throw new VerificationError("${def.name}", undefined, data);`);
 | 
			
		||||
      a(1, `let res = {} as any;`);
 | 
			
		||||
      def.fields.forEach((field) => {
 | 
			
		||||
        a(1, `if(data["${field.name}"] !== null && data["${field.name}"] !== undefined) {`);
 | 
			
		||||
        if (field.array) {
 | 
			
		||||
          a(1, `res["${field.name}"] = data["${field.name}"].map(elm=>`);
 | 
			
		||||
          a(2, `strip_${field.type}(elm)`);
 | 
			
		||||
          a(1, `)`);
 | 
			
		||||
          a(2, `if(!Array.isArray(data["${field.name}"])) throw new VerificationError("array", "${field.name}", data["${field.name}"]);`);
 | 
			
		||||
          a(2, `res["${field.name}"] = data["${field.name}"].map(elm=>`);
 | 
			
		||||
          a(3, `apply_${field.type}(elm)`);
 | 
			
		||||
          a(2, `)`);
 | 
			
		||||
        } else if (field.map) {
 | 
			
		||||
          a(1, `res["${field.name}"] = {}`);
 | 
			
		||||
          a(1, `Object.entries(data["${field.name}"]).forEach(([key, val]) => res["${field.name}"][key] = strip_${field.type}(val))`);
 | 
			
		||||
          a(2, `if(typeof data["${field.name}"] !== "object") throw new VerificationError("map", "${field.name}", data["${field.name}"]);`);
 | 
			
		||||
          a(2, `res["${field.name}"] = {}`);
 | 
			
		||||
          a(2, `Object.entries(data["${field.name}"]).forEach(([key, val]) => res["${field.name}"][key] = apply_${field.type}(val))`);
 | 
			
		||||
        } else {
 | 
			
		||||
          a(1, `res["${field.name}"] = strip_${field.type}(data["${field.name}"])`);
 | 
			
		||||
          a(2, `res["${field.name}"] = apply_${field.type}(data["${field.name}"])`);
 | 
			
		||||
        }
 | 
			
		||||
        a(1, `}`);
 | 
			
		||||
      });
 | 
			
		||||
      a(1, `return res;`);
 | 
			
		||||
    }
 | 
			
		||||
    a(0, `}`);
 | 
			
		||||
    a(0, ``);
 | 
			
		||||
    a(0, `export function verify_${def.name}(data: ${def.name}) {`);
 | 
			
		||||
    {
 | 
			
		||||
      def.fields.forEach((field) => {
 | 
			
		||||
        a(1, `if(data["${field.name}"] !== null && data["${field.name}"] !== undefined ) {`);
 | 
			
		||||
        const verifyType = (varName, off = 0) => {
 | 
			
		||||
          switch (field.type) {
 | 
			
		||||
            case "string":
 | 
			
		||||
              a(2 + off, `if(typeof ${varName} !== "string") throw new VerificationError("string", "${field.name}", ${varName});`);
 | 
			
		||||
              break;
 | 
			
		||||
            case "number":
 | 
			
		||||
              a(2 + off, `if(typeof ${varName} !== "number") throw new VerificationError("number", "${field.name}", ${varName});`);
 | 
			
		||||
              break;
 | 
			
		||||
            case "boolean":
 | 
			
		||||
              a(2 + off, `if(typeof ${varName} !== "boolean") throw new VerificationError("boolean", "${field.name}", ${varName});`);
 | 
			
		||||
              break;
 | 
			
		||||
            default:
 | 
			
		||||
              a(2 + off, `verify_${field.type}(${varName});`);
 | 
			
		||||
          }
 | 
			
		||||
        };
 | 
			
		||||
        if (field.array) {
 | 
			
		||||
          a(2, `if(!Array.isArray(data["${field.name}"])) throw new VerificationError("array", "${field.name}", data["${field.name}"]);`);
 | 
			
		||||
          a(2, `for(const elm of data["${field.name}"]) {`);
 | 
			
		||||
          verifyType("elm", 1);
 | 
			
		||||
          a(2, `}`);
 | 
			
		||||
        } else if (field.map) {
 | 
			
		||||
          a(2, `if(typeof data["${field.name}"] !== "object") throw new VerificationError("object", "${field.name}", data["${field.name}"]);`);
 | 
			
		||||
          a(2, `for(const key in data["${field.name}"]) {`);
 | 
			
		||||
          verifyType(`data["${field.name}"][key]`, 1);
 | 
			
		||||
          a(2, `}`);
 | 
			
		||||
        } else {
 | 
			
		||||
          verifyType(`data["${field.name}"]`);
 | 
			
		||||
        }
 | 
			
		||||
        a(1, "}");
 | 
			
		||||
        a(0, ``);
 | 
			
		||||
      });
 | 
			
		||||
      a(1, `return data`);
 | 
			
		||||
    }
 | 
			
		||||
    a(0, `}`);
 | 
			
		||||
    this.writeFormattedFile(this.getFileName(def.name), lines.join("\n"));
 | 
			
		||||
  }
 | 
			
		||||
  generateEnum(def) {
 | 
			
		||||
@ -7653,13 +7620,10 @@ var TypescriptTarget = class extends CompileTarget {
 | 
			
		||||
    a(0, ``);
 | 
			
		||||
    a(0, `export default ${def.name}`);
 | 
			
		||||
    a(0, ``);
 | 
			
		||||
    a(0, `export function strip_${def.name} (data: ${def.name}): ${def.name} {`);
 | 
			
		||||
    a(1, `return data;`);
 | 
			
		||||
    a(0, `}`);
 | 
			
		||||
    a(0, ``);
 | 
			
		||||
    a(0, `export function verify_${def.name} (data: ${def.name}) {`);
 | 
			
		||||
    a(0, `export function apply_${def.name} (data: ${def.name}): ${def.name} {`);
 | 
			
		||||
    a(1, `data = Number(data);`);
 | 
			
		||||
    a(1, `if(${def.name}[data] == undefined) throw new VerificationError("${def.name}", undefined, data);`);
 | 
			
		||||
    a(1, `return data`);
 | 
			
		||||
    a(1, `return data;`);
 | 
			
		||||
    a(0, `}`);
 | 
			
		||||
    this.writeFormattedFile(this.getFileName(def.name), lines.join("\n"));
 | 
			
		||||
  }
 | 
			
		||||
@ -7709,10 +7673,10 @@ var TypescriptTarget = class extends CompileTarget {
 | 
			
		||||
        a(2, `}).then(result => {`);
 | 
			
		||||
        if (fnc.return.array) {
 | 
			
		||||
          a(2, `for(const elm of result) {`);
 | 
			
		||||
          a(3, `verify_${fnc.return.type}(elm);`);
 | 
			
		||||
          a(3, `apply_${fnc.return.type}(elm);`);
 | 
			
		||||
          a(2, `}`);
 | 
			
		||||
        } else {
 | 
			
		||||
          a(3, `verify_${fnc.return.type}(result);`);
 | 
			
		||||
          a(3, `apply_${fnc.return.type}(result);`);
 | 
			
		||||
        }
 | 
			
		||||
        a(3, `return result;`);
 | 
			
		||||
        a(2, `});`);
 | 
			
		||||
@ -7771,16 +7735,16 @@ var TypescriptTarget = class extends CompileTarget {
 | 
			
		||||
        a(2, `if(p[${i}] !== null && p[${i}] !== undefined) {`);
 | 
			
		||||
        if (fnc.inputs[i].array) {
 | 
			
		||||
          a(2, `for(const elm of p[${i}]) {`);
 | 
			
		||||
          a(3, `verify_${fnc.inputs[i].type}(elm)`);
 | 
			
		||||
          a(3, `apply_${fnc.inputs[i].type}(elm)`);
 | 
			
		||||
          a(2, `}`);
 | 
			
		||||
        } else {
 | 
			
		||||
          a(2, `verify_${fnc.inputs[i].type}(p[${i}])`);
 | 
			
		||||
          a(2, `apply_${fnc.inputs[i].type}(p[${i}])`);
 | 
			
		||||
        }
 | 
			
		||||
        a(2, `}`);
 | 
			
		||||
      }
 | 
			
		||||
      a(2, ``);
 | 
			
		||||
      a(2, `p.push(ctx);`);
 | 
			
		||||
      a(2, `return this.${fnc.name}.call(this, ...p)` + (fnc.return ? `.then(${((_a = fnc.return) == null ? void 0 : _a.array) ? `res => res.map(e => verify_${fnc.return.type}(strip_${fnc.return.type}(e)))` : `res => verify_${fnc.return.type}(strip_${fnc.return.type}(res))`});` : ""));
 | 
			
		||||
      a(2, `return this.${fnc.name}.call(this, ...p)` + (fnc.return ? `.then(${((_a = fnc.return) == null ? void 0 : _a.array) ? `res => res.map(e => apply_${fnc.return.type}(e))` : `res => apply_${fnc.return.type}(res)`});` : ""));
 | 
			
		||||
      a(1, `}`);
 | 
			
		||||
      a(0, ``);
 | 
			
		||||
    }
 | 
			
		||||
@ -7818,14 +7782,14 @@ var TypescriptTarget = class extends CompileTarget {
 | 
			
		||||
    steps.forEach(([type, def]) => {
 | 
			
		||||
      switch (type) {
 | 
			
		||||
        case "type":
 | 
			
		||||
          a(0, this.generateImport(`${def.name}, { verify_${def.name}, strip_${def.name} }`, "./" + def.name));
 | 
			
		||||
          a(0, `export { verify_${def.name}, strip_${def.name} }`);
 | 
			
		||||
          a(0, this.generateImport(`${def.name}, { apply_${def.name} }`, "./" + def.name));
 | 
			
		||||
          a(0, `export { apply_${def.name} }`);
 | 
			
		||||
          a(0, `export type { ${def.name} }`);
 | 
			
		||||
          a(0, ``);
 | 
			
		||||
          break;
 | 
			
		||||
        case "enum":
 | 
			
		||||
          a(0, this.generateImport(`${def.name}, { verify_${def.name}, strip_${def.name} }`, "./" + def.name));
 | 
			
		||||
          a(0, `export { ${def.name}, verify_${def.name}, strip_${def.name} }`);
 | 
			
		||||
          a(0, this.generateImport(`${def.name}, { apply_${def.name} }`, "./" + def.name));
 | 
			
		||||
          a(0, `export { ${def.name}, apply_${def.name} }`);
 | 
			
		||||
          a(0, ``);
 | 
			
		||||
          break;
 | 
			
		||||
        case "service":
 | 
			
		||||
 | 
			
		||||
@ -1,6 +1,6 @@
 | 
			
		||||
{
 | 
			
		||||
   "name": "@hibas123/jrpcgen",
 | 
			
		||||
   "version": "1.0.10",
 | 
			
		||||
   "version": "1.0.13",
 | 
			
		||||
   "main": "lib/index.js",
 | 
			
		||||
   "license": "MIT",
 | 
			
		||||
   "packageManager": "yarn@3.1.1",
 | 
			
		||||
 | 
			
		||||
@ -44,7 +44,7 @@ export class TypescriptTarget extends CompileTarget {
 | 
			
		||||
      a(
 | 
			
		||||
         0,
 | 
			
		||||
         this.generateImport(
 | 
			
		||||
            `{ VerificationError, verify_number, verify_string, verify_boolean, verify_void, strip_number, strip_string, strip_boolean, strip_void }`,
 | 
			
		||||
            `{ VerificationError, apply_number, apply_string, apply_boolean, apply_void }`,
 | 
			
		||||
            `./ts_base`
 | 
			
		||||
         )
 | 
			
		||||
      );
 | 
			
		||||
@ -52,7 +52,7 @@ export class TypescriptTarget extends CompileTarget {
 | 
			
		||||
         0,
 | 
			
		||||
         def.depends.map((dep) =>
 | 
			
		||||
            this.generateImport(
 | 
			
		||||
               `${dep}, { verify_${dep}, strip_${dep} }`,
 | 
			
		||||
               `${dep}, { apply_${dep} }`,
 | 
			
		||||
               "./" + dep
 | 
			
		||||
            )
 | 
			
		||||
         )
 | 
			
		||||
@ -115,8 +115,8 @@ export class TypescriptTarget extends CompileTarget {
 | 
			
		||||
 | 
			
		||||
      a(0, ``);
 | 
			
		||||
 | 
			
		||||
      a(1, `static verify(data: ${def.name}) {`);
 | 
			
		||||
      a(2, `verify_${def.name}(data);`);
 | 
			
		||||
      a(1, `static apply(data: ${def.name}) {`);
 | 
			
		||||
      a(2, `apply_${def.name}(data);`);
 | 
			
		||||
      a(1, `}`);
 | 
			
		||||
      a(0, `}`);
 | 
			
		||||
 | 
			
		||||
@ -124,27 +124,32 @@ export class TypescriptTarget extends CompileTarget {
 | 
			
		||||
 | 
			
		||||
      a(
 | 
			
		||||
         0,
 | 
			
		||||
         `export function strip_${def.name}(data: ${def.name}): ${def.name} {`
 | 
			
		||||
         `export function apply_${def.name}(data: ${def.name}): ${def.name} {`
 | 
			
		||||
      );
 | 
			
		||||
      {
 | 
			
		||||
         a(1, `if(typeof data !== "object") throw new VerificationError("${def.name}", undefined, data);`)
 | 
			
		||||
         a(1, `let res = {} as any;`);
 | 
			
		||||
         def.fields.forEach((field) => {
 | 
			
		||||
            a(1, `if(data["${field.name}"] !== null && data["${field.name}"] !== undefined) {`)
 | 
			
		||||
            if (field.array) {
 | 
			
		||||
               a(1, `res["${field.name}"] = data["${field.name}"].map(elm=>`);
 | 
			
		||||
               a(2, `strip_${field.type}(elm)`);
 | 
			
		||||
               a(1, `)`);
 | 
			
		||||
               a(2, `if(!Array.isArray(data["${field.name}"])) throw new VerificationError("array", "${field.name}", data["${field.name}"]);`)
 | 
			
		||||
               a(2, `res["${field.name}"] = data["${field.name}"].map(elm=>`);
 | 
			
		||||
               a(3, `apply_${field.type}(elm)`);
 | 
			
		||||
               a(2, `)`);
 | 
			
		||||
            } else if (field.map) {
 | 
			
		||||
               a(1, `res["${field.name}"] = {}`);
 | 
			
		||||
               a(2, `if(typeof data["${field.name}"] !== "object") throw new VerificationError("map", "${field.name}", data["${field.name}"]);`)
 | 
			
		||||
               a(2, `res["${field.name}"] = {}`);
 | 
			
		||||
               a(
 | 
			
		||||
                  1,
 | 
			
		||||
                  `Object.entries(data["${field.name}"]).forEach(([key, val]) => res["${field.name}"][key] = strip_${field.type}(val))`
 | 
			
		||||
                  2,
 | 
			
		||||
                  `Object.entries(data["${field.name}"]).forEach(([key, val]) => res["${field.name}"][key] = apply_${field.type}(val))`
 | 
			
		||||
               );
 | 
			
		||||
            } else {
 | 
			
		||||
               a(
 | 
			
		||||
                  1,
 | 
			
		||||
                  `res["${field.name}"] = strip_${field.type}(data["${field.name}"])`
 | 
			
		||||
                  2,
 | 
			
		||||
                  `res["${field.name}"] = apply_${field.type}(data["${field.name}"])`
 | 
			
		||||
               );
 | 
			
		||||
            }
 | 
			
		||||
            a(1, `}`);
 | 
			
		||||
         });
 | 
			
		||||
         a(1, `return res;`);
 | 
			
		||||
      }
 | 
			
		||||
@ -152,67 +157,67 @@ export class TypescriptTarget extends CompileTarget {
 | 
			
		||||
 | 
			
		||||
      a(0, ``);
 | 
			
		||||
 | 
			
		||||
      a(0, `export function verify_${def.name}(data: ${def.name}) {`);
 | 
			
		||||
      {
 | 
			
		||||
         def.fields.forEach((field) => {
 | 
			
		||||
            a(
 | 
			
		||||
               1,
 | 
			
		||||
               `if(data["${field.name}"] !== null && data["${field.name}"] !== undefined ) {`
 | 
			
		||||
            );
 | 
			
		||||
      // a(0, `export function verify_${def.name}(data: ${def.name}) {`);
 | 
			
		||||
      // {
 | 
			
		||||
      //    def.fields.forEach((field) => {
 | 
			
		||||
      //       a(
 | 
			
		||||
      //          1,
 | 
			
		||||
      //          `if(data["${field.name}"] !== null && data["${field.name}"] !== undefined ) {`
 | 
			
		||||
      //       );
 | 
			
		||||
 | 
			
		||||
            const verifyType = (varName: string, off = 0) => {
 | 
			
		||||
               switch (field.type) {
 | 
			
		||||
                  case "string":
 | 
			
		||||
                     a(
 | 
			
		||||
                        2 + off,
 | 
			
		||||
                        `if(typeof ${varName} !== "string") throw new VerificationError("string", "${field.name}", ${varName});`
 | 
			
		||||
                     );
 | 
			
		||||
                     break;
 | 
			
		||||
                  case "number":
 | 
			
		||||
                     a(
 | 
			
		||||
                        2 + off,
 | 
			
		||||
                        `if(typeof ${varName} !== "number") throw new VerificationError("number", "${field.name}", ${varName});`
 | 
			
		||||
                     );
 | 
			
		||||
                     break;
 | 
			
		||||
                  case "boolean":
 | 
			
		||||
                     a(
 | 
			
		||||
                        2 + off,
 | 
			
		||||
                        `if(typeof ${varName} !== "boolean") throw new VerificationError("boolean", "${field.name}", ${varName});`
 | 
			
		||||
                     );
 | 
			
		||||
                     break;
 | 
			
		||||
                  default:
 | 
			
		||||
                     a(
 | 
			
		||||
                        2 + off,
 | 
			
		||||
                        `verify_${field.type}(${varName});`
 | 
			
		||||
                     );
 | 
			
		||||
               }
 | 
			
		||||
            };
 | 
			
		||||
      //       const verifyType = (varName: string, off = 0) => {
 | 
			
		||||
      //          switch (field.type) {
 | 
			
		||||
      //             case "string":
 | 
			
		||||
      //                a(
 | 
			
		||||
      //                   2 + off,
 | 
			
		||||
      //                   `if(typeof ${varName} !== "string") throw new VerificationError("string", "${field.name}", ${varName});`
 | 
			
		||||
      //                );
 | 
			
		||||
      //                break;
 | 
			
		||||
      //             case "number":
 | 
			
		||||
      //                a(
 | 
			
		||||
      //                   2 + off,
 | 
			
		||||
      //                   `if(typeof ${varName} !== "number") throw new VerificationError("number", "${field.name}", ${varName});`
 | 
			
		||||
      //                );
 | 
			
		||||
      //                break;
 | 
			
		||||
      //             case "boolean":
 | 
			
		||||
      //                a(
 | 
			
		||||
      //                   2 + off,
 | 
			
		||||
      //                   `if(typeof ${varName} !== "boolean") throw new VerificationError("boolean", "${field.name}", ${varName});`
 | 
			
		||||
      //                );
 | 
			
		||||
      //                break;
 | 
			
		||||
      //             default:
 | 
			
		||||
      //                a(
 | 
			
		||||
      //                   2 + off,
 | 
			
		||||
      //                   `verify_${field.type}(${varName});`
 | 
			
		||||
      //                );
 | 
			
		||||
      //          }
 | 
			
		||||
      //       };
 | 
			
		||||
 | 
			
		||||
            if (field.array) {
 | 
			
		||||
               a(
 | 
			
		||||
                  2,
 | 
			
		||||
                  `if(!Array.isArray(data["${field.name}"])) throw new VerificationError("array", "${field.name}", data["${field.name}"]);`
 | 
			
		||||
               );
 | 
			
		||||
               a(2, `for(const elm of data["${field.name}"]) {`);
 | 
			
		||||
               verifyType("elm", 1);
 | 
			
		||||
               a(2, `}`);
 | 
			
		||||
            } else if (field.map) {
 | 
			
		||||
               a(
 | 
			
		||||
                  2,
 | 
			
		||||
                  `if(typeof data["${field.name}"] !== "object") throw new VerificationError("object", "${field.name}", data["${field.name}"]);`
 | 
			
		||||
               );
 | 
			
		||||
               a(2, `for(const key in data["${field.name}"]) {`);
 | 
			
		||||
               verifyType(`data["${field.name}"][key]`, 1);
 | 
			
		||||
               a(2, `}`);
 | 
			
		||||
            } else {
 | 
			
		||||
               verifyType(`data["${field.name}"]`);
 | 
			
		||||
            }
 | 
			
		||||
            a(1, "}");
 | 
			
		||||
            a(0, ``);
 | 
			
		||||
         });
 | 
			
		||||
         a(1, `return data`);
 | 
			
		||||
      }
 | 
			
		||||
      a(0, `}`);
 | 
			
		||||
      //       if (field.array) {
 | 
			
		||||
      //          a(
 | 
			
		||||
      //             2,
 | 
			
		||||
      //             ``
 | 
			
		||||
      //          );
 | 
			
		||||
      //          a(2, `for(const elm of data["${field.name}"]) {`);
 | 
			
		||||
      //          verifyType("elm", 1);
 | 
			
		||||
      //          a(2, `}`);
 | 
			
		||||
      //       } else if (field.map) {
 | 
			
		||||
      //          a(
 | 
			
		||||
      //             2,
 | 
			
		||||
      //             `if(typeof data["${field.name}"] !== "object") throw new VerificationError("object", "${field.name}", data["${field.name}"]);`
 | 
			
		||||
      //          );
 | 
			
		||||
      //          a(2, `for(const key in data["${field.name}"]) {`);
 | 
			
		||||
      //          verifyType(`data["${field.name}"][key]`, 1);
 | 
			
		||||
      //          a(2, `}`);
 | 
			
		||||
      //       } else {
 | 
			
		||||
      //          verifyType(`data["${field.name}"]`);
 | 
			
		||||
      //       }
 | 
			
		||||
      //       a(1, "}");
 | 
			
		||||
      //       a(0, ``);
 | 
			
		||||
      //    });
 | 
			
		||||
      //    a(1, `return data`);
 | 
			
		||||
      // }
 | 
			
		||||
      // a(0, `}`);
 | 
			
		||||
 | 
			
		||||
      this.writeFormattedFile(this.getFileName(def.name), lines.join("\n"));
 | 
			
		||||
   }
 | 
			
		||||
@ -241,17 +246,14 @@ export class TypescriptTarget extends CompileTarget {
 | 
			
		||||
 | 
			
		||||
      a(
 | 
			
		||||
         0,
 | 
			
		||||
         `export function strip_${def.name} (data: ${def.name}): ${def.name} {`
 | 
			
		||||
         `export function apply_${def.name} (data: ${def.name}): ${def.name} {`
 | 
			
		||||
      );
 | 
			
		||||
      a(1, `return data;`);
 | 
			
		||||
      a(0, `}`);
 | 
			
		||||
      a(0, ``);
 | 
			
		||||
      a(0, `export function verify_${def.name} (data: ${def.name}) {`);
 | 
			
		||||
      a(1, `data = Number(data);`);
 | 
			
		||||
      a(
 | 
			
		||||
         1,
 | 
			
		||||
         `if(${def.name}[data] == undefined) throw new VerificationError("${def.name}", undefined, data);`
 | 
			
		||||
      );
 | 
			
		||||
      a(1, `return data`);
 | 
			
		||||
      a(1, `return data;`);
 | 
			
		||||
      a(0, `}`);
 | 
			
		||||
 | 
			
		||||
      this.writeFormattedFile(this.getFileName(def.name), lines.join("\n"));
 | 
			
		||||
@ -333,10 +335,10 @@ export class TypescriptTarget extends CompileTarget {
 | 
			
		||||
            a(2, `}).then(result => {`);
 | 
			
		||||
            if (fnc.return.array) {
 | 
			
		||||
               a(2, `for(const elm of result) {`);
 | 
			
		||||
               a(3, `verify_${fnc.return.type}(elm);`);
 | 
			
		||||
               a(3, `apply_${fnc.return.type}(elm);`);
 | 
			
		||||
               a(2, `}`);
 | 
			
		||||
            } else {
 | 
			
		||||
               a(3, `verify_${fnc.return.type}(result);`);
 | 
			
		||||
               a(3, `apply_${fnc.return.type}(result);`);
 | 
			
		||||
            }
 | 
			
		||||
            a(3, `return result;`);
 | 
			
		||||
            a(2, `});`);
 | 
			
		||||
@ -426,10 +428,10 @@ export class TypescriptTarget extends CompileTarget {
 | 
			
		||||
            a(2, `if(p[${i}] !== null && p[${i}] !== undefined) {`);
 | 
			
		||||
            if (fnc.inputs[i].array) {
 | 
			
		||||
               a(2, `for(const elm of p[${i}]) {`);
 | 
			
		||||
               a(3, `verify_${fnc.inputs[i].type}(elm)`);
 | 
			
		||||
               a(3, `apply_${fnc.inputs[i].type}(elm)`);
 | 
			
		||||
               a(2, `}`);
 | 
			
		||||
            } else {
 | 
			
		||||
               a(2, `verify_${fnc.inputs[i].type}(p[${i}])`);
 | 
			
		||||
               a(2, `apply_${fnc.inputs[i].type}(p[${i}])`);
 | 
			
		||||
            }
 | 
			
		||||
            a(2, `}`);
 | 
			
		||||
         }
 | 
			
		||||
@ -443,8 +445,8 @@ export class TypescriptTarget extends CompileTarget {
 | 
			
		||||
               (fnc.return
 | 
			
		||||
                  ? `.then(${
 | 
			
		||||
                       fnc.return?.array
 | 
			
		||||
                          ? `res => res.map(e => verify_${fnc.return.type}(strip_${fnc.return.type}(e)))`
 | 
			
		||||
                          : `res => verify_${fnc.return.type}(strip_${fnc.return.type}(res))`
 | 
			
		||||
                          ? `res => res.map(e => apply_${fnc.return.type}(e))`
 | 
			
		||||
                          : `res => apply_${fnc.return.type}(res)`
 | 
			
		||||
                    });`
 | 
			
		||||
                  : "")
 | 
			
		||||
         );
 | 
			
		||||
@ -502,12 +504,12 @@ export class TypescriptTarget extends CompileTarget {
 | 
			
		||||
               a(
 | 
			
		||||
                  0,
 | 
			
		||||
                  this.generateImport(
 | 
			
		||||
                     `${def.name}, { verify_${def.name}, strip_${def.name} }`,
 | 
			
		||||
                     `${def.name}, { apply_${def.name} }`,
 | 
			
		||||
                     "./" + def.name
 | 
			
		||||
                  )
 | 
			
		||||
               );
 | 
			
		||||
 | 
			
		||||
               a(0, `export { verify_${def.name}, strip_${def.name} }`);
 | 
			
		||||
               a(0, `export { apply_${def.name} }`);
 | 
			
		||||
               a(0, `export type { ${def.name} }`);
 | 
			
		||||
               a(0, ``);
 | 
			
		||||
               break;
 | 
			
		||||
@ -515,13 +517,13 @@ export class TypescriptTarget extends CompileTarget {
 | 
			
		||||
               a(
 | 
			
		||||
                  0,
 | 
			
		||||
                  this.generateImport(
 | 
			
		||||
                     `${def.name}, { verify_${def.name}, strip_${def.name} }`,
 | 
			
		||||
                     `${def.name}, { apply_${def.name} }`,
 | 
			
		||||
                     "./" + def.name
 | 
			
		||||
                  )
 | 
			
		||||
               );
 | 
			
		||||
               a(
 | 
			
		||||
                  0,
 | 
			
		||||
                  `export { ${def.name}, verify_${def.name}, strip_${def.name} }`
 | 
			
		||||
                  `export { ${def.name}, apply_${def.name} }`
 | 
			
		||||
               );
 | 
			
		||||
               a(0, ``);
 | 
			
		||||
               break;
 | 
			
		||||
 | 
			
		||||
@ -4,40 +4,22 @@ export class VerificationError extends Error {
 | 
			
		||||
      public readonly field?: string,
 | 
			
		||||
      public readonly value?: any
 | 
			
		||||
   ) {
 | 
			
		||||
      super("Parameter verification failed!");
 | 
			
		||||
      super("Parameter verification failed! " +(type ? "Expected " + type + "! " :"") + (field ? "At: " + field + "! " : ""));
 | 
			
		||||
   }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export function verify_number(data: any) {
 | 
			
		||||
   if (typeof data !== "number") throw new VerificationError("number", undefined, data);
 | 
			
		||||
export function apply_number(data: any) {
 | 
			
		||||
   data = Number(data);
 | 
			
		||||
   if(Number.isNaN(data)) throw new VerificationError("number", undefined, data);
 | 
			
		||||
   return data;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export function strip_number(data: any) {
 | 
			
		||||
   return data;
 | 
			
		||||
export function apply_string(data: any) {
 | 
			
		||||
   return String(data);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export function verify_string(data: any) {
 | 
			
		||||
   if (typeof data !== "string") throw new VerificationError("string", undefined, data);
 | 
			
		||||
   return data;
 | 
			
		||||
export function apply_boolean(data: any) {
 | 
			
		||||
   return Boolean(data);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export function strip_string(data: any) {
 | 
			
		||||
   return data;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export function verify_boolean(data: any) {
 | 
			
		||||
   if (typeof data !== "boolean") throw new VerificationError("boolean", undefined, data);
 | 
			
		||||
   return data;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export function strip_boolean(data: any) {
 | 
			
		||||
   return data;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//TODO: Should it return data? it is kinda undefined actually...
 | 
			
		||||
export function verify_void(data: any) {}
 | 
			
		||||
 | 
			
		||||
export function strip_void(data: any) {
 | 
			
		||||
   return undefined;
 | 
			
		||||
}
 | 
			
		||||
export function apply_void(data: any) {}
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user