From 6cca59c666e47cc4bc22f44a947fe12788957da2 Mon Sep 17 00:00:00 2001 From: Zaid Abdulla Date: Sun, 24 Jan 2021 14:17:31 -0800 Subject: [PATCH] Better syntax error message when saving script --- lib/ui/db.ts | 28 ++++++++++++++++++++++------ ui/provisions-page.ts | 8 +++++++- ui/virtual-parameters-page.ts | 8 +++++++- 3 files changed, 36 insertions(+), 8 deletions(-) diff --git a/lib/ui/db.ts b/lib/ui/db.ts index d452367..4eec1ce 100644 --- a/lib/ui/db.ts +++ b/lib/ui/db.ts @@ -226,9 +226,17 @@ export function putProvision( ): Promise { if (!object.script) object.script = ""; try { - new Script(`"use strict";(function(){\n${object.script}\n})();`); - } catch (error) { - return Promise.reject(error); + new Script(`"use strict";(function(){\n${object.script}\n})();`, { + filename: id, + lineOffset: -1, + }); + } catch (err) { + if (err.stack && err.stack.startsWith(`${id}:`)) { + return Promise.reject( + new Error(`${err.name} at ${err.stack.split("\n", 1)[0]}`) + ); + } + return Promise.reject(err); } return putResource("provisions", id, object); } @@ -243,9 +251,17 @@ export function putVirtualParameter( ): Promise { if (!object.script) object.script = ""; try { - new Script(`"use strict";(function(){\n${object.script}\n})();`); - } catch (error) { - return Promise.reject(error); + new Script(`"use strict";(function(){\n${object.script}\n})();`, { + filename: id, + lineOffset: -1, + }); + } catch (err) { + if (err.stack && err.stack.startsWith(`${id}:`)) { + return Promise.reject( + new Error(`${err.name} at ${err.stack.split("\n", 1)[0]}`) + ); + } + return Promise.reject(err); } return putResource("virtualParameters", id, object); } diff --git a/ui/provisions-page.ts b/ui/provisions-page.ts index 30b7b5d..98a9952 100644 --- a/ui/provisions-page.ts +++ b/ui/provisions-page.ts @@ -85,7 +85,13 @@ function putActionHandler(action, _object, isNew): Promise { store.fulfill(0, Date.now()); resolve(); }) - .catch(reject); + .catch((err) => { + if (err["code"] === 400 && err["response"]) { + reject(new Error(err["response"])); + return; + } + reject(err); + }); }) .catch(reject); } else if (action === "delete") { diff --git a/ui/virtual-parameters-page.ts b/ui/virtual-parameters-page.ts index 94e3dfb..742d5db 100644 --- a/ui/virtual-parameters-page.ts +++ b/ui/virtual-parameters-page.ts @@ -85,7 +85,13 @@ function putActionHandler(action, _object, isNew): Promise { store.fulfill(0, Date.now()); resolve(); }) - .catch(reject); + .catch((err) => { + if (err["code"] === 400 && err["response"]) { + reject(new Error(err["response"])); + return; + } + reject(err); + }); }) .catch(reject); } else if (action === "delete") {