You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by bd...@apache.org on 2019/07/25 15:27:58 UTC
[sling-whiteboard] 01/04: Default renderers
This is an automated email from the ASF dual-hosted git repository.
bdelacretaz pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sling-whiteboard.git
commit 625b57c580c42e93ad6da06f577f02e135a88f45
Author: Bertrand Delacretaz <bd...@apache.org>
AuthorDate: Thu Jul 25 11:24:18 2019 +0200
Default renderers
---
serverless-microsling/lib/render.js | 57 ++++++++++++++++++++++++----
serverless-microsling/lib/resolve-content.js | 6 ++-
serverless-microsling/microsling.js | 13 ++++---
3 files changed, 61 insertions(+), 15 deletions(-)
diff --git a/serverless-microsling/lib/render.js b/serverless-microsling/lib/render.js
index 74f6c3f..72cb2eb 100644
--- a/serverless-microsling/lib/render.js
+++ b/serverless-microsling/lib/render.js
@@ -16,10 +16,33 @@
/* eslint-disable no-console */
-async function render(context) {
- const resource = context.content.resource.content;
- console.log(resource);
- const markup = `
+const defaultTextRenderer = {
+ contentType: 'text/plain',
+ appliesTo : (resourceType, extension) => {
+ return extension == 'txt';
+ },
+ render : (resource) => {
+ return `${resource.title}\n${resource.body}\n`;
+ },
+}
+
+const defaultJsonRenderer = {
+ contentType: 'application/json',
+ appliesTo : (resourceType, extension) => {
+ return extension == 'json';
+ },
+ render : (resource) => {
+ return JSON.stringify(resource, 2, null);
+ },
+}
+
+const defaultHtmlRenderer = {
+ contentType: 'text/html',
+ appliesTo : (resourceType, extension) => {
+ return extension == 'html';
+ },
+ render : (resource) => {
+ return `
<html>
<head>
<title>${resource.title}</title>
@@ -32,10 +55,28 @@ async function render(context) {
</body>
</html>
`;
- context.response.body = markup;
- context.response.headers = {
- 'Content-Type': 'text/html',
- };
+ },
+}
+
+const renderers = [
+ defaultTextRenderer,
+ defaultHtmlRenderer,
+ defaultJsonRenderer
+];
+
+async function render(context) {
+ const resource = context.content.resource.content;
+ if(context.debug) {
+ console.log(`rendering for resourceType ${resource.resourceType} extension ${context.request.extension}`);
+ }
+ renderers
+ .filter(r => r.appliesTo(resource.resourceType, context.request.extension))
+ .forEach(r => {
+ context.response.body = r.render(resource);
+ context.response.headers = {
+ 'Content-Type': r.contentType
+ };
+ });
return context;
}
diff --git a/serverless-microsling/lib/resolve-content.js b/serverless-microsling/lib/resolve-content.js
index d40a894..dc1ad3c 100644
--- a/serverless-microsling/lib/resolve-content.js
+++ b/serverless-microsling/lib/resolve-content.js
@@ -17,9 +17,13 @@
/* eslint-disable no-console */
const fs = require('fs');
+const localFileSuffix = '.json';
async function resolveContent(context) {
- const filePath = `../content${context.request.path}`;
+ const parts = context.request.path.split('.');
+ context.request.extension = parts.pop();
+ context.request.resourcePath = parts.join('.');
+ const filePath = `../content${context.request.resourcePath}${localFileSuffix}`;
return new Promise(resolve => {
try {
fs.readFile(require.resolve(filePath), (err, text) => {
diff --git a/serverless-microsling/microsling.js b/serverless-microsling/microsling.js
index cb7943c..c9de1b9 100644
--- a/serverless-microsling/microsling.js
+++ b/serverless-microsling/microsling.js
@@ -20,24 +20,24 @@ const { resolveContent } = require('./lib/resolve-content.js');
const { render } = require('./lib/render.js');
function main (params) {
- const { debug } = params;
const context = {
request : {
path: params.__ow_path,
},
response: {},
- content: {}
+ content: {},
+ debug: params.debug
};
return new Promise(function (resolvePromise) {
- if(debug) console.log(`start: ${JSON.stringify(context, 2, null)}`);
+ if(context.debug) console.log(`start: ${JSON.stringify(context, 2, null)}`);
resolveContent(context)
.then(context => {
- if(debug) console.log(`pre-render: ${JSON.stringify(context, 2, null)}`);
+ if(context.debug) console.log(`pre-render: ${JSON.stringify(context, 2, null)}`);
return render(context);
})
.then(context => {
- if(debug) console.log(`pre-resolve: ${JSON.stringify(context, 2, null)}`);
+ if(context.debug) console.log(`pre-resolve: ${JSON.stringify(context, 2, null)}`);
return resolvePromise(context.response);
})
.catch(e => {
@@ -60,9 +60,10 @@ const shellExec= async (input) => {
if (require.main === module) {
shellExec({
// eslint-disable-next-line no-undef
+ debug: process.argv[3] || false,
+ // eslint-disable-next-line no-undef
__ow_path: process.argv[2],
__ow_method: 'get',
- debug: false
});
}