From ee9801437c27a6cef8b7d373aa3feb229d40524a Mon Sep 17 00:00:00 2001 From: Tobias Bocanegra Date: Fri, 21 Jun 2019 11:50:22 +0900 Subject: [PATCH] fix(css): add customer loader for content css --- src/css.js | 44 ++++++++++++++++++++++++++++++++++++++++++++ src/js.js | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ src/utils.js | 7 ++++--- 3 files changed, 96 insertions(+), 3 deletions(-) create mode 100644 src/css.js create mode 100644 src/js.js diff --git a/src/css.js b/src/css.js new file mode 100644 index 00000000..6199e76f --- /dev/null +++ b/src/css.js @@ -0,0 +1,44 @@ +/* + * Copyright 2019 Adobe. All rights reserved. + * This file is licensed to you under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. You may obtain a copy + * of the License at http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS + * OF ANY KIND, either express or implied. See the License for the specific language + * governing permissions and limitations under the License. + */ + +/* eslint-disable import/no-unresolved */ + +const { computeSurrogateKey } = require('@adobe/helix-shared').utils; +const { preFetch } = require('./utils.js'); + +/** + * Tries to load the respective raw resource from the content repository. This is to + * workaround an issue in the order the Fastly logic executes the templates. + */ +async function main(context, action) { + await preFetch(context, action); + if (context.response && context.response.body) { + return { + response: { + status: 200, + body: context.response.body, + headers: { + 'Surrogate-Key': context.content.sources.map(computeSurrogateKey).join(' '), + 'Content-Type': 'text/css', + 'Cache-Control': 's-maxage=604800', + }, + }, + }; + } + return { + response: { + status: 404, + }, + }; +} + +module.exports.main = main; diff --git a/src/js.js b/src/js.js new file mode 100644 index 00000000..515b08d3 --- /dev/null +++ b/src/js.js @@ -0,0 +1,48 @@ +/* + * Copyright 2019 Adobe. All rights reserved. + * This file is licensed to you under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. You may obtain a copy + * of the License at http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS + * OF ANY KIND, either express or implied. See the License for the specific language + * governing permissions and limitations under the License. + */ + +/* eslint-disable import/no-unresolved */ + +const { computeSurrogateKey } = require('@adobe/helix-shared').utils; +const { runPipeline } = require('@adobe/helix-pipeline').OpenWhiskAction; +const { preFetch } = require('./utils.js'); + +/** + * Tries to load the respective raw resource from the content repository. This is to + * workaround an issue in the order the Fastly logic executes the templates. + */ +async function main(params) { + const pipe = async (cont, context, action) => { + await preFetch(context, action); + if (context.response && context.response.body) { + return { + response: { + status: 200, + body: context.response.body, + headers: { + 'Surrogate-Key': context.content.sources.map(computeSurrogateKey).join(' '), + 'Content-Type': 'text/javascript', + 'Cache-Control': 's-maxage=604800', + }, + }, + }; + } + return { + response: { + status: 404, + }, + }; + }; + return runPipeline(() => {}, pipe, params); +} + +module.exports.main = main; diff --git a/src/utils.js b/src/utils.js index f42391f2..adea9f48 100644 --- a/src/utils.js +++ b/src/utils.js @@ -19,7 +19,7 @@ const rp = require('request-promise-native'); * workaround an issue in the order the Fastly logic executes the templates. */ async function preFetch(context, { secrets = {}, request, logger }) { - logger.info(JSON.stringify(secrets, null, 2)); + // logger.info(JSON.stringify(secrets, null, 2)); const { owner, repo, path, ref, extension, selector, } = request.params; @@ -27,8 +27,8 @@ async function preFetch(context, { secrets = {}, request, logger }) { return; } const sel = selector ? `.${selector}` : ''; - const htmlPath = `${path.substring(0, path.length - 3)}${sel}.${extension}`.replace(/\/+/g, '/'); - const url = `${secrets.REPO_RAW_ROOT}${owner}/${repo}/${ref}/${htmlPath}`; + const htmlPath = `${owner}/${repo}/${ref}/${path.substring(0, path.length - 3)}${sel}.${extension}`.replace(/\/+/g, '/'); + const url = `${secrets.REPO_RAW_ROOT}${htmlPath}`; logger.info(`trying to load ${url}`); if (!context.response) { @@ -42,6 +42,7 @@ async function preFetch(context, { secrets = {}, request, logger }) { url, json: false, }); + context.content.sources = [url]; context.content.body = ''; } catch (e) { // ignore