From 723e5fc26a978800631e50e2d42f4dc269de893c Mon Sep 17 00:00:00 2001 From: David Zemon Date: Fri, 21 Jan 2022 09:39:38 -0600 Subject: [PATCH] refactor: [#8920] Clean-up based on PR feedback Signed-off-by: David Zemon --- .../lib/templating/SecureTemplater.test.ts | 2 +- .../src/lib/templating/SecureTemplater.ts | 34 ++++++++----------- .../actions/builtin/fetch/template.ts | 2 +- .../tasks/NunjucksWorkflowRunner.ts | 4 +-- .../src/scaffolder/tasks/TaskWorker.ts | 2 +- 5 files changed, 20 insertions(+), 24 deletions(-) diff --git a/plugins/scaffolder-backend/src/lib/templating/SecureTemplater.test.ts b/plugins/scaffolder-backend/src/lib/templating/SecureTemplater.test.ts index ce524384c7..e3d7a55b87 100644 --- a/plugins/scaffolder-backend/src/lib/templating/SecureTemplater.test.ts +++ b/plugins/scaffolder-backend/src/lib/templating/SecureTemplater.test.ts @@ -104,7 +104,7 @@ describe('SecureTemplater', () => { const mockFilter2 = jest.fn((var1, var2) => `${var1} ${var2}`); const mockFilter3 = jest.fn((var1, var2) => ({ var1, var2 })); const renderWith = await SecureTemplater.loadRenderer({ - additionalFilters: { mockFilter1, mockFilter2, mockFilter3 }, + nunjucksFilters: { mockFilter1, mockFilter2, mockFilter3 }, }); const renderWithout = await SecureTemplater.loadRenderer(); diff --git a/plugins/scaffolder-backend/src/lib/templating/SecureTemplater.ts b/plugins/scaffolder-backend/src/lib/templating/SecureTemplater.ts index b3e99cf1dd..1c1e2639a3 100644 --- a/plugins/scaffolder-backend/src/lib/templating/SecureTemplater.ts +++ b/plugins/scaffolder-backend/src/lib/templating/SecureTemplater.ts @@ -58,14 +58,10 @@ const { render, renderCompat } = (() => { }); } - if (typeof additionalFilters !== "undefined") { - Object.entries(additionalFilters) - .forEach(([filterName, filterFunction]) => { - env.addFilter( - filterName, - (...args) => JSON.parse(filterFunction.apply(null, args)) - ); - }); + if (typeof nunjucksFilters !== 'undefined') { + for (const [filterName, filterFn] of Object.entries(nunjucksFilters)) { + env.addFilter(filterName, (...args) => JSON.parse(filterFn(...args))); + } } let uninstallCompat = undefined; @@ -109,7 +105,7 @@ export interface SecureTemplaterOptions { cookiecutterCompat?: boolean; /* Extra user-provided nunjucks filters */ - additionalFilters?: Record; + nunjucksFilters?: Record; } export type SecureTemplateRenderer = ( @@ -119,22 +115,22 @@ export type SecureTemplateRenderer = ( export class SecureTemplater { static async loadRenderer(options: SecureTemplaterOptions = {}) { - const { parseRepoUrl, cookiecutterCompat, additionalFilters } = options; + const { parseRepoUrl, cookiecutterCompat, nunjucksFilters } = options; const sandbox: Record = {}; if (parseRepoUrl) { sandbox.parseRepoUrl = (url: string) => JSON.stringify(parseRepoUrl(url)); } - if (additionalFilters) { - sandbox.additionalFilters = Object.entries(additionalFilters) - .filter(([_, filterFunction]) => !!filterFunction) - .reduce((safeFilters, [filterName, filterFunction]) => { - const newSafeFilters = { ...safeFilters }; - newSafeFilters[filterName] = (...args) => - JSON.stringify(filterFunction.apply(null, args)); - return newSafeFilters; - }, {} as Record); + if (nunjucksFilters) { + sandbox.nunjucksFilters = Object.fromEntries( + Object.entries(nunjucksFilters) + .filter(([_, filterFunction]) => !!filterFunction) + .map(([filterName, filterFunction]) => [ + filterName, + (...args: JsonValue[]) => JSON.stringify(filterFunction(...args)), + ]), + ); } const vm = new VM({ sandbox }); diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/template.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/template.ts index c4c666abc1..58e96f4164 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/template.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/template.ts @@ -186,7 +186,7 @@ export function createFetchTemplateAction(options: { const renderTemplate = await SecureTemplater.loadRenderer({ cookiecutterCompat: ctx.input.cookiecutterCompat, - additionalFilters: nunjucksFilters, + nunjucksFilters: nunjucksFilters, }); for (const location of allEntriesInTemplate) { diff --git a/plugins/scaffolder-backend/src/scaffolder/tasks/NunjucksWorkflowRunner.ts b/plugins/scaffolder-backend/src/scaffolder/tasks/NunjucksWorkflowRunner.ts index 5bcf83a231..41b605e2e2 100644 --- a/plugins/scaffolder-backend/src/scaffolder/tasks/NunjucksWorkflowRunner.ts +++ b/plugins/scaffolder-backend/src/scaffolder/tasks/NunjucksWorkflowRunner.ts @@ -45,7 +45,7 @@ type NunjucksWorkflowRunnerOptions = { actionRegistry: TemplateActionRegistry; integrations: ScmIntegrations; logger: winston.Logger; - additionalFilters?: Record; + nunjucksFilters?: Record; }; type TemplateContext = { @@ -192,7 +192,7 @@ export class NunjucksWorkflowRunner implements WorkflowRunner { parseRepoUrl(url: string) { return parseRepoUrl(url, integrations); }, - additionalFilters: this.options.additionalFilters, + nunjucksFilters: this.options.nunjucksFilters, }); try { diff --git a/plugins/scaffolder-backend/src/scaffolder/tasks/TaskWorker.ts b/plugins/scaffolder-backend/src/scaffolder/tasks/TaskWorker.ts index 8bf10b051a..8439c4ed8e 100644 --- a/plugins/scaffolder-backend/src/scaffolder/tasks/TaskWorker.ts +++ b/plugins/scaffolder-backend/src/scaffolder/tasks/TaskWorker.ts @@ -80,7 +80,7 @@ export class TaskWorker { integrations, logger, workingDirectory, - additionalFilters: nunjucksFilters, + nunjucksFilters: nunjucksFilters, }); return new TaskWorker({