UNPKG

easy-api.ts

Version:

A powerful library to create your own API with ease.

1 lines 2.37 kB
Object.defineProperty(exports,"__esModule",{value:!0}),exports.Interpreter=void 0,exports.isStringToken=isStringToken,exports.isFunctionToken=isFunctionToken,exports.removeComments=removeComments;let tslib_1=require("tslib"),Error_1=require("../structures/Error"),Compiler_1=require("./Compiler"),CompiledFunction_1=require("../internal/CompiledFunction"),main_1=require("../../main"),colors_1=tslib_1.__importDefault(require("colors"));function isStringToken(e){return e.type&&"TEXT"===e.type}function isFunctionToken(e){return"name"in e&&"inside"in e&&"fields"in e&&"all"in e}function removeComments(e){return e.split("\n").map(e=>e.split("//")[0]).join("\n")}class Interpreter{async run(e,r){r.comments=r.comments??!1,r.reverse=r.reverse??!1,r.data.setStart(performance.now());var t,o=r.reverse,n=[];for(t of e=o?e.reverse():e){if(r.data.break)break;if(isStringToken(t))n.push(t.value);else{if(!r.data.functions.has(t.name.toLowerCase()))throw new Error_1.NotAFunctionError(t);var i=r.data.functions.get(t.name.toLowerCase()),a=[],s=i.parameters?.length??0,l=0<s?i.parameters.filter(e=>!0===e.required):[];if(0<s&&l.length>t.fields.length)throw new Error_1.MissingRequiredValuesError(t,l.length,t.fields.length);if(!0===r.debug&&console.log(`${colors_1.default.green((new Date).toLocaleString())} | ${colors_1.default.yellow("Parsing")}: `+colors_1.default.bold(i.name)),0<s&&!0===i.compile)for(let e=0;e<t.fields.length;e++){var u=t.fields[e],d=i.parameters[e];if(d?.rest&&e!==i.parameters.length-1)throw new Error_1.InvalidRestParameter;var p,u=(new Compiler_1.Compiler).remap(u,r.data.server.rs,!0),u=await this.run(u,r);if(r.data.break=u.break,a.push("string"!=typeof u.code?"":u.code),void 0!==d&&void 0!==d.allowedValues&&!d.allowedValues.includes(a.at(-1)))throw new Error_1.InvalidAllowedValue(t,e,d.allowedValues,a.at(-1));if(e===s&&d?.rest)for(p of t.fields.slice(e+1)){var m=(new Compiler_1.Compiler).remap(p,r.data.server.rs,!0),m=await this.run(m,r);r.data.break=m.break,a.push("string"!=typeof m.code?"":m.code)}}else 0<s&&!1===i.compile&&a.push(...t.fields.map(e=>(0,main_1.Unescape)(e)));r.data.function=new CompiledFunction_1.CompiledFunction(r.data,t),l=await i.run.call(r.data.function,r.data,a),n.push(void 0===l?"":"string"==typeof l?(0,main_1.Unescape)(l):l)}}return r.data.code=(o?n.reverse():n).join(""),r.data}}exports.Interpreter=Interpreter;