From ec91effe967bf632af464519aac9a06487c15778 Mon Sep 17 00:00:00 2001
From: Jed Fox <git@jedfox.com>
Date: Thu, 2 Mar 2023 12:04:55 -0500
Subject: [PATCH] Remove code in loot-core/src/server/spreadsheet that uses
 escodegen (#721)

---
 .../src/server/spreadsheet/interpreter.js     | 26 ------
 .../loot-core/src/server/spreadsheet/usage.js | 89 -------------------
 2 files changed, 115 deletions(-)
 delete mode 100644 packages/loot-core/src/server/spreadsheet/interpreter.js
 delete mode 100644 packages/loot-core/src/server/spreadsheet/usage.js

diff --git a/packages/loot-core/src/server/spreadsheet/interpreter.js b/packages/loot-core/src/server/spreadsheet/interpreter.js
deleted file mode 100644
index 38aecd702..000000000
--- a/packages/loot-core/src/server/spreadsheet/interpreter.js
+++ /dev/null
@@ -1,26 +0,0 @@
-const escodegen = require('@jlongster/escodegen');
-
-const globals = require('./globals');
-
-// Unfortunately we need to use eval to bypass babel's transform of
-// generators. iOS seems to support generators natively, but if it
-// doesn't that could be a problem.
-// const GeneratorFunction = Object.getPrototypeOf(eval('(function*(){})'))
-//   .constructor;
-
-function evaluate(ast) {
-  const code = escodegen.generate(ast);
-
-  const args = ['globals', 'return ' + code];
-
-  try {
-    // eslint-disable-next-line
-    const func = new Function(...args);
-    return func(globals);
-  } catch (e) {
-    console.log('Eval error:', code, e);
-    return e.message;
-  }
-}
-
-module.exports = { evaluate };
diff --git a/packages/loot-core/src/server/spreadsheet/usage.js b/packages/loot-core/src/server/spreadsheet/usage.js
deleted file mode 100644
index c1f176272..000000000
--- a/packages/loot-core/src/server/spreadsheet/usage.js
+++ /dev/null
@@ -1,89 +0,0 @@
-const escodegen = require('escodegen');
-const sqlite = require('sqlite3');
-
-const Spreadsheet = require('./spreadsheet');
-const sqlgen = require('./sqlgen');
-
-// Example usage:
-
-const db = new sqlite.Database(__dirname + '/../../db.sqlite');
-const sheet = new Spreadsheet({
-  plugins: {
-    runQuery: {
-      parse: ast => {
-        const queryAST = ast.arguments[0];
-        const code = 'return ' + escodegen.generate(queryAST);
-        // eslint-disable-next-line
-        const func = new Function(code);
-        const query = func();
-        const sql = sqlgen(query);
-
-        return {
-          data: {
-            type: 'query',
-            query: query,
-            sql: sql,
-          },
-
-          ast: {
-            type: 'CallExpression',
-            callee: {
-              type: 'Identifier',
-              name: 'runQuery',
-            },
-            arguments: [
-              {
-                type: 'Literal',
-                raw: sql,
-                value: sql,
-              },
-            ],
-          },
-        };
-      },
-      run: sql => {
-        return new Promise(resolve => {
-          db.all(sql, function (err, rows) {
-            if (err) {
-              throw new Error(err);
-            }
-            resolve(rows);
-          });
-        });
-      },
-    },
-  },
-});
-
-db.on('preupdate', function (type, dbname, table, old, _new, oldId, newId) {
-  sheet.resolve().then(() => {
-    const start = Date.now();
-    sheet.startTransaction();
-    sheet
-      .getNodesOfType('query')
-      .filter(node => node.data.query.table === table)
-      .forEach(q => {
-        sheet.signal(q.name);
-      });
-    sheet.endTransaction();
-
-    console.log('[preupdate]', Date.now() - start);
-  });
-});
-
-function insertRow() {
-  const start = Date.now();
-  console.log('[insertRow] started');
-  db.run(
-    'INSERT INTO transactions (acct, category, amount, description, date)' +
-      '  VALUES (3, 2, 944, "shirt", 1456808400000);',
-    function () {
-      console.log('[insertRow] fired', Date.now() - start);
-      const t = Math.random() * 100;
-      console.log('[insertRow] waiting', t);
-      setTimeout(insertRow, t);
-    },
-  );
-}
-
-insertRow();
-- 
GitLab