Version: 0.0.4
Last Updated: Unknown
serverless: - express: name: hello-lift-express routes: - base
1# serverless.env.yml2dev:3 SOME_TOKEN: 'abc'
1#!/usr/bin/env node23const fs = require('fs-extra');4const ejs = require('ejs');5const dir = __dirname;6const path = process.cwd();7const appDir = path;8const storageDir = process.env.KRATOS_PATH;9const execa = require('execa');1011/**12 * Kratos install components13 *14 * @param {*} components15 */16const build = (components, folder, type) => {17 components.map((d, i) => {18 console.log(d);19 // 1. Does imported component exist20 const doesExist = fs.pathExistsSync(`${appDir}/${folder}/${d}`);21 if (!doesExist) {22 // 2. Is there a version in storage23 if (fs.pathExistsSync(`${storageDir}/${type}/${d}`)) {24 execa.shellSync(`kratos install ${type} ${d}`, {stdio: 'inherit'});25 } else {26 console.log('? Exists:', d);27 // app/components/<%= name %>/<%= name %>View.js Force override to everything28 // that exists29 /* execa.sync('hygen', ['react', 'component-promptless', `--name=${d}`, `--message="Generated by Lift"`, `--path=src`]); */30 }31 }32 });33}3435const buildMain = (data) => {36 ejs37 .renderFile(`${dir}/main.ejs`, data, {}, function (err, str) {38 // str => Rendered HTML string39 if (err) {40 console.log(err);41 throw err;42 }4344 fs.outputFileSync(`${appDir}/index.js`, str);45 console.log('\t- Express main server file generated');46 });47};4849const buildSls = (data) => {50 ejs51 .renderFile(`${dir}/sls.ejs`, data, {}, function (err, str) {52 // str => Rendered HTML string53 if (err) {54 console.log(err);55 throw err;56 }5758 fs.outputFileSync(`${appDir}/serverless.yml`, str);59 console.log('\t- Serverless yml file generated');60 });61};6263/**64 * Build out a Cloudfront file65 * for Cloudformation.66 *67 * @param {*} data68 */69const buildLocal = (data) => {70 ejs71 .renderFile(`${dir}/local.ejs`, data, {}, function (err, str) {72 // str => Rendered HTML string73 if (err) {74 console.log(err);75 throw err;76 }7778 fs.outputFileSync(`${appDir}/index.local.js`, str);79 console.log('\t- Express local server file generated');80 });81};8283/**84 * Build Lambda file.85 */86const buildLambda = () => {87 ejs88 .renderFile(`${dir}/lambda.ejs`, {}, {}, function (err, str) {89 // str => Rendered HTML string90 if (err) {91 console.log(err);92 throw err;93 }9495 fs.outputFileSync(`${appDir}/lambda.js`, str);96 console.log('\t- Express lambda function file generated');97 });98};99100/**101 * Build environments file.102 */103const buildEnv = () => {104 ejs105 .renderFile(`${dir}/env.ejs`, {}, {}, function (err, str) {106 // str => Rendered HTML string107 if (err) {108 console.log(err);109 throw err;110 }111112 fs.outputFileSync(`${appDir}/serverless.env.yml`, str);113 console.log('\t- Serverless environment variable file generated');114 });115};116117/**118 * Build out a Cloudfront file119 * for Cloudformation.120 *121 * @param {Array} data122 */123const buildRoutes = (data) => {124 ejs125 .renderFile(`${dir}/routes.ejs`, data, {}, function (err, str) {126 // str => Rendered HTML string127 if (err) {128 console.log(err);129 throw err;130 }131132 fs.outputFileSync(`${appDir}/routes/index.js`, str);133 console.log('\t- Express local server file generated');134 });135};136137/**138 * Bridge the Express local server file139 *140 * @example141 * lift up up.yml142 *143 * @param {*} data144 */145module.exports = function (data) {146 console.log('Bridging Express Server');147 try {148 // map the correct types across149 buildLocal(data);150 buildMain(data);151 buildSls(data);152 build(data.routes, 'routes', 'express-routes');153 buildRoutes(data);154 buildLambda();155 buildEnv();156 } catch (err) {157 console.error(err);158 }159};
1yarn add fs-extra execa ejs --dev2yarn add dotenv express body-parser morgan cors serverless-offline aws-serverless-express serverless-http
1const awsServerlessExpress = require('aws-serverless-express');2const app = require('./index');34const binaryMimeTypes = [5 'application/javascript',6 'application/json',7 'application/octet-stream',8 'application/xml',9 'font/eot',10 'font/opentype',11 'font/otf',12 'image/jpeg',13 'image/png',14 'image/svg+xml',15 'text/comma-separated-values',16 'text/css',17 'text/html',18 'text/javascript',19 'text/plain',20 'text/text',21 'text/xml'22];2324// const server = awsServerlessExpress.createServer(app, null, binaryMimeTypes);25const server = awsServerlessExpress.createServer(app);2627exports.handler = (event, context) => awsServerlessExpress.proxy(server, event, context);
1var fs = require('fs');2var dotenv = require('dotenv');3var envConfig = dotenv.parse(fs.readFileSync('.env'));4for (var k in envConfig) {5 process.env[k] = envConfig[k];6}78// Main starting point of the application9const express = require('express');10const http = require('http');11const bodyParser = require('body-parser');12const morgan = require('morgan');13const app = express();14const cors = require('cors');1516// Routes Setup17const routes = require('./routes');1819// App Setup20const morganFormat = process.env.NODE_ENV === 'production'21 ? 'combined'22 : 'dev';23app.use(morgan(morganFormat));24app.use(cors());25app.use(bodyParser.json());26app.use(bodyParser.urlencoded({extended: true}));2728routes(app);2930// Server Setup31const port = process.env.NODE_ENV == 'production'32 ? 8033 : 5000;34const server = http.createServer(app);35server.listen(port);36console.log('Server listening on:', port);
1var fs = require('fs');2var dotenv = require('dotenv');3var envConfig = dotenv.parse(fs.readFileSync('.env'));4for (var k in envConfig) {5 process.env[k] = envConfig[k]6}78// Main starting point of the application9const express = require('express');10const serverless = require('serverless-http');11const bodyParser = require('body-parser');12const morgan = require('morgan');13const app = express();14const cors = require('cors');1516// Routes Setup17const routes = require('./routes');18// const awsServerlessExpressMiddleware =19// require('aws-serverless-express/middleware') App Setup20const morganFormat = process.env.NODE_ENV === 'production'21 ? 'combined'22 : 'dev';23app.use(morgan(morganFormat));24app.use(cors());25app.use(bodyParser.json());26app.use(bodyParser.urlencoded({extended: true}))27// app.use(awsServerlessExpressMiddleware.eventContext()) Map routes to URL28routes(app);2930module.exports.handler = serverless(app);
1<% if (typeof routes !== 'undefined') routes.forEach(function(route){ %>2const <%= route %> = require('./<%= route %>');3<%_ }); _%>45module.exports = function (app) {6 <% if (typeof routes !== 'undefined') routes.forEach(function(route){ %>7 <%= route %>(app);8 <%_ }); _%>9};
1# serverless.yml2service: <%= name %>34provider:5 name: aws6 runtime: nodejs8.107 stage: dev8 region: ap-southeast-2910functions:11 app:12 handler: index.handler13 events:14 - http: ANY /15 - http: 'ANY {proxy+}'1617plugins:18 - serverless-offline