remove garbage

This commit is contained in:
2023-08-10 13:20:33 +02:00
parent b6d280c031
commit 1ff0d46c8d
2 changed files with 1 additions and 77 deletions

View File

@ -1,6 +1,5 @@
import type { Editor } from './main'; import type { Editor } from './main';
import type { File } from './AppSettings'; import type { File } from './AppSettings';
import { parseUserCode } from './Walker';
const delay = (ms: number) => new Promise((_, reject) => setTimeout(() => reject(new Error('Operation took too long')), ms)); const delay = (ms: number) => new Promise((_, reject) => setTimeout(() => reject(new Error('Operation took too long')), ms));
@ -16,7 +15,7 @@ const tryCatchWrapper = (application: Editor, code: string): Promise<boolean> =>
*/ */
return new Promise((resolve, _) => { return new Promise((resolve, _) => {
try { try {
Function(`with (this) {try{${parseUserCode(code)}} catch (e) {console.log(e)}};`).call(application.api); Function(`with (this) {try{${code}} catch (e) {console.log(e)}};`).call(application.api);
resolve(true); resolve(true);
} catch (error) { } catch (error) {
console.log(error); console.log(error);

View File

@ -1,75 +0,0 @@
import * as acorn from 'acorn';
// import * as walk from 'acorn-walk';
import * as astring from 'astring';
// Create a custom Acorn plugin
function myPlugin(Parser: typeof acorn.Parser): any {
return class extends Parser {
// @ts-ignore
parseLiteral(...args: Parameters<acorn.Parser['parseLiteral']>) {
// @ts-ignore
const node = super.parseLiteral(...args);
// Check if the literal is a string and if it's wrapped in single quotes
if (typeof node.value === 'string' && this.input.slice(node.start, node.end).startsWith("'")) {
const transformed = this.transformMyString(node.value);
// Replace the Literal node with an ArrayExpression node
return {
type: 'ArrayExpression',
elements: transformed.map(value => ({
type: 'Literal',
value,
raw: value.toString()
})),
start: node.start,
end: node.end
};
}
return node;
}
transformMyString(string: string): number[] {
const matches = string.match(/\d+!*\d*/g);
const values: number[] = [];
matches?.forEach(match => {
const parts = match.split('!');
const number = parseInt(parts[0]);
const times = parts[1] ? parseInt(parts[1]) : 1;
for (let i = 0; i < times; i++) {
values.push(number);
}
});
matches?.forEach(match => {
const parts = match.split('~');
const begin = parseInt(parts[0])
const end = parseInt(parts[1])
values.push(Math.floor(Math.random() * (end) + begin))
})
return values;
}
};
}
export const MiniLanguage = acorn.Parser.extend(myPlugin);
export function parseUserCode(code: string): string {
let constructor = MiniLanguage.parse(code, { ecmaVersion: 2020 });
return astring.generate(constructor)
}
// Sample code
// const code = `const a = '3!4 5'; // This should become const a = [...[3,3,3,3,5]];`;
// Parse the code
// const ast = MiniLanguage.parse(code, { ecmaVersion: 2020 });
// Convert the transformed AST back into source code
// const newCode = astring.generate(ast);
// console.log(newCode);