From 84b413bbee7efc84cf7c0830753a9247a9ac1fd1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maciej=20Urba=C5=84czyk?= Date: Tue, 5 Jan 2021 13:07:16 +0100 Subject: [PATCH 1/3] fix: reimport file on each render --- src/renderer/template.ts | 30 +++++++++++++++++++++++++----- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/src/renderer/template.ts b/src/renderer/template.ts index d7ef1755..f814975c 100644 --- a/src/renderer/template.ts +++ b/src/renderer/template.ts @@ -13,7 +13,14 @@ export async function renderTemplate(filepath: string, context: TemplateContext) if (!isJsFile(filepath)) { return undefined; } - const data = await importComponent(filepath, context); + + let data = undefined; + try { + data = await importComponent(filepath, context); + } catch(err) { + console.error(err); + return undefined; + } // undefined, null etc. cases if (!data) { @@ -28,10 +35,23 @@ export async function renderTemplate(filepath: string, context: TemplateContext) * @private * @param filepath to import */ -function importComponent(filepath: string, context: TemplateContext): Promise { - return new Promise((resolve) => { - import(filepath).then(component => { resolve(component.default !== undefined ? component.default(context) : undefined) }) - }) +function importComponent(filepath: string, context: TemplateContext): Promise { + return new Promise((resolve, reject) => { + try { + // we should import component only in NodeJS + if (require === undefined) resolve(undefined); + // remove from cache imported file + delete require.cache[require.resolve(filepath)]; + + const component = require(filepath); + if (!component) resolve(undefined); + if (typeof component === "function") resolve(component(context)); + if (typeof component.default === "function") resolve(component.default(context)); + resolve(undefined); + } catch(err) { + reject(err); + } + }); } /** From 9a7d5b3b5dac2eb78305fb79f0518b714c5e989a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maciej=20Urba=C5=84czyk?= Date: Tue, 5 Jan 2021 14:10:09 +0100 Subject: [PATCH 2/3] remove unnecessary code --- src/renderer/template.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/renderer/template.ts b/src/renderer/template.ts index f814975c..49dcd29d 100644 --- a/src/renderer/template.ts +++ b/src/renderer/template.ts @@ -44,7 +44,6 @@ function importComponent(filepath: string, context: TemplateContext): Promise Date: Tue, 5 Jan 2021 14:32:19 +0100 Subject: [PATCH 3/3] throw error --- src/renderer/template.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/renderer/template.ts b/src/renderer/template.ts index 49dcd29d..322b5ed9 100644 --- a/src/renderer/template.ts +++ b/src/renderer/template.ts @@ -18,8 +18,7 @@ export async function renderTemplate(filepath: string, context: TemplateContext) try { data = await importComponent(filepath, context); } catch(err) { - console.error(err); - return undefined; + throw err; } // undefined, null etc. cases