From b011f688332e8399135065f03590262799f98585 Mon Sep 17 00:00:00 2001 From: "Fernando G. Vilar" Date: Fri, 27 Dec 2019 12:09:15 +0700 Subject: [PATCH 1/2] feat(template): support for arbitrary replacements --- .../src/server/middleware/get_page_handler.ts | 26 ++++++++++++++----- 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/runtime/src/server/middleware/get_page_handler.ts b/runtime/src/server/middleware/get_page_handler.ts index 53f413640..db18c3c6c 100644 --- a/runtime/src/server/middleware/get_page_handler.ts +++ b/runtime/src/server/middleware/get_page_handler.ts @@ -320,12 +320,14 @@ export function get_page_handler( // users can set a CSP nonce using res.locals.nonce const nonce_attr = (res.locals && res.locals.nonce) ? ` nonce="${res.locals.nonce}"` : ''; - const body = template() - .replace('%sapper.base%', () => ``) - .replace('%sapper.scripts%', () => `${script}`) - .replace('%sapper.html%', () => html) - .replace('%sapper.head%', () => `${head}`) - .replace('%sapper.styles%', () => styles); + const body = replace(template(), { + ...res.replacers, + base: () => ``, + scripts: () => `${script}`, + html: () => html, + head: () => `${head}`, + styles: () => styles + }); res.statusCode = status; res.end(body); @@ -356,6 +358,18 @@ export function get_page_handler( }; } +function replace( + template: string, + replacers: Record +) { + for (const key in replacers) { + if (replacers.hasOwnProperty(key)) { + template = template.replace(`%sapper.${key}%`, replacers[key] as any); + } + } + return template; +} + function read_template(dir = build_dir) { return fs.readFileSync(`${dir}/template.html`, 'utf-8'); } From a87102f1e8e6a982afb6af59e38655e40778f663 Mon Sep 17 00:00:00 2001 From: "Fernando G. Vilar" Date: Fri, 27 Dec 2019 13:05:20 +0700 Subject: [PATCH 2/2] feat(template): allow multiple substitutions --- runtime/src/server/middleware/get_page_handler.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/runtime/src/server/middleware/get_page_handler.ts b/runtime/src/server/middleware/get_page_handler.ts index db18c3c6c..32cd6e93d 100644 --- a/runtime/src/server/middleware/get_page_handler.ts +++ b/runtime/src/server/middleware/get_page_handler.ts @@ -364,7 +364,7 @@ function replace( ) { for (const key in replacers) { if (replacers.hasOwnProperty(key)) { - template = template.replace(`%sapper.${key}%`, replacers[key] as any); + template = template.replace(new RegExp(`%sapper.${key}%`, 'g'), replacers[key] as any); } } return template;