@tremho/mist-lift 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +37 -0
- package/build/commands/actions/initQuestions.js +136 -0
- package/build/commands/actions/initQuestions.js.map +1 -0
- package/build/commands/actions/makePackageJson.js +2 -0
- package/build/commands/actions/makePackageJson.js.map +1 -0
- package/build/commands/actions/setupPackageJson.js +68 -0
- package/build/commands/actions/setupPackageJson.js.map +1 -0
- package/build/commands/build.js +191 -0
- package/build/commands/build.js.map +1 -0
- package/build/commands/builtin/ApiDocMaker.js +72 -0
- package/build/commands/builtin/ApiDocMaker.js.map +1 -0
- package/build/commands/builtin/BuiltInHandler.js +62 -0
- package/build/commands/builtin/BuiltInHandler.js.map +1 -0
- package/build/commands/builtin/DeployBuiltInZip.js +57 -0
- package/build/commands/builtin/DeployBuiltInZip.js.map +1 -0
- package/build/commands/builtin/StageWebrootZip.js +70 -0
- package/build/commands/builtin/StageWebrootZip.js.map +1 -0
- package/build/commands/builtin/prebuilt-zips/API.zip +0 -0
- package/build/commands/builtin/prebuilt-zips/FileServe.zip +0 -0
- package/build/commands/builtin/prebuilt-zips/Webroot.zip +0 -0
- package/build/commands/create.js +75 -0
- package/build/commands/create.js.map +1 -0
- package/build/commands/deploy.js +187 -0
- package/build/commands/deploy.js.map +1 -0
- package/build/commands/doctor.js +137 -0
- package/build/commands/doctor.js.map +1 -0
- package/build/commands/help.js +205 -0
- package/build/commands/help.js.map +1 -0
- package/build/commands/init.js +92 -0
- package/build/commands/init.js.map +1 -0
- package/build/commands/package.js +249 -0
- package/build/commands/package.js.map +1 -0
- package/build/commands/publish.js +344 -0
- package/build/commands/publish.js.map +1 -0
- package/build/commands/settings.js +95 -0
- package/build/commands/settings.js.map +1 -0
- package/build/commands/start.js +66 -0
- package/build/commands/start.js.map +1 -0
- package/build/commands/test.js +52 -0
- package/build/commands/test.js.map +1 -0
- package/build/commands/user.js +20 -0
- package/build/commands/user.js.map +1 -0
- package/build/expressRoutes/all.js +129 -0
- package/build/expressRoutes/all.js.map +1 -0
- package/build/expressRoutes/api.js +22 -0
- package/build/expressRoutes/api.js.map +1 -0
- package/build/expressRoutes/functionBinder.js +191 -0
- package/build/expressRoutes/functionBinder.js.map +1 -0
- package/build/lib/CaseUtils.js +57 -0
- package/build/lib/CaseUtils.js.map +1 -0
- package/build/lib/DirectoryUtils.js +37 -0
- package/build/lib/DirectoryUtils.js.map +1 -0
- package/build/lib/LiftConfig.js +83 -0
- package/build/lib/LiftConfig.js.map +1 -0
- package/build/lib/LiftVersion.js +117 -0
- package/build/lib/LiftVersion.js.map +1 -0
- package/build/lib/Tests/fileCompare.test.js +55 -0
- package/build/lib/Tests/fileCompare.test.js.map +1 -0
- package/build/lib/askQuestion.js +41 -0
- package/build/lib/askQuestion.js.map +1 -0
- package/build/lib/executeCommand.js +45 -0
- package/build/lib/executeCommand.js.map +1 -0
- package/build/lib/fileCompare.js +48 -0
- package/build/lib/fileCompare.js.map +1 -0
- package/build/lib/openAPI/ApiBuildCollector.js +58 -0
- package/build/lib/openAPI/ApiBuildCollector.js.map +1 -0
- package/build/lib/openAPI/WebrootFileSupport.js +44 -0
- package/build/lib/openAPI/WebrootFileSupport.js.map +1 -0
- package/build/lib/openAPI/openApiConstruction.js +203 -0
- package/build/lib/openAPI/openApiConstruction.js.map +1 -0
- package/build/lib/pathResolve.js +27 -0
- package/build/lib/pathResolve.js.map +1 -0
- package/build/lib/utils.js +76 -0
- package/build/lib/utils.js.map +1 -0
- package/build/lift.js +124 -0
- package/build/lift.js.map +1 -0
- package/package.json +69 -0
- package/src/commands/actions/initQuestions.ts +131 -0
- package/src/commands/actions/makePackageJson.ts +0 -0
- package/src/commands/actions/setupPackageJson.ts +36 -0
- package/src/commands/build.ts +165 -0
- package/src/commands/builtin/ApiDocMaker.ts +70 -0
- package/src/commands/builtin/BuiltInHandler.ts +51 -0
- package/src/commands/builtin/DeployBuiltInZip.ts +27 -0
- package/src/commands/builtin/StageWebrootZip.ts +39 -0
- package/src/commands/builtin/prebuilt-zips/API.zip +0 -0
- package/src/commands/builtin/prebuilt-zips/FileServe.zip +0 -0
- package/src/commands/builtin/prebuilt-zips/Webroot.zip +0 -0
- package/src/commands/create.ts +55 -0
- package/src/commands/deploy.ts +171 -0
- package/src/commands/doctor.ts +102 -0
- package/src/commands/help.ts +171 -0
- package/src/commands/init.ts +62 -0
- package/src/commands/package.ts +228 -0
- package/src/commands/publish.ts +350 -0
- package/src/commands/settings.ts +76 -0
- package/src/commands/start.ts +46 -0
- package/src/commands/test.ts +38 -0
- package/src/commands/user.ts +20 -0
- package/src/expressRoutes/all.ts +104 -0
- package/src/expressRoutes/api.ts +24 -0
- package/src/expressRoutes/functionBinder.ts +169 -0
- package/src/lib/CaseUtils.ts +68 -0
- package/src/lib/DirectoryUtils.ts +36 -0
- package/src/lib/LiftConfig.ts +83 -0
- package/src/lib/LiftVersion.ts +95 -0
- package/src/lib/Tests/dir1/file.1 +0 -0
- package/src/lib/Tests/dir1/file.2 +0 -0
- package/src/lib/Tests/dir2/file.1 +0 -0
- package/src/lib/Tests/fileCompare.test.ts +34 -0
- package/src/lib/askQuestion.ts +18 -0
- package/src/lib/executeCommand.ts +38 -0
- package/src/lib/fileCompare.ts +46 -0
- package/src/lib/openAPI/ApiBuildCollector.ts +47 -0
- package/src/lib/openAPI/WebrootFileSupport.ts +21 -0
- package/src/lib/openAPI/openApiConstruction.ts +202 -0
- package/src/lib/pathResolve.ts +32 -0
- package/src/lib/utils.ts +45 -0
- package/src/lift.ts +82 -0
- package/tsconfig.json +28 -0
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
|
+
};
|
|
28
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
+
exports.allBinder = void 0;
|
|
30
|
+
const path_1 = __importDefault(require("path"));
|
|
31
|
+
const fs_1 = __importDefault(require("fs"));
|
|
32
|
+
const ac = __importStar(require("ansi-colors"));
|
|
33
|
+
const pathResolve_1 = require("../lib/pathResolve");
|
|
34
|
+
const ApiBuildCollector_1 = require("../lib/openAPI/ApiBuildCollector");
|
|
35
|
+
const express_1 = __importDefault(require("express"));
|
|
36
|
+
const router = express_1.default.Router();
|
|
37
|
+
function allBinder() {
|
|
38
|
+
const projectPaths = (0, pathResolve_1.resolvePaths)();
|
|
39
|
+
const defs = (0, ApiBuildCollector_1.gatherFunctionDefinitions)();
|
|
40
|
+
/**
|
|
41
|
+
* @name /all
|
|
42
|
+
* @description
|
|
43
|
+
* Catch-all handler for URLs
|
|
44
|
+
* Provides some simple spam blocking and checks for file pass through at file root.
|
|
45
|
+
*
|
|
46
|
+
* ##### Filtering:
|
|
47
|
+
* - all .php extension references
|
|
48
|
+
*
|
|
49
|
+
* ##### File root:
|
|
50
|
+
* - file root is at service root + 'Public'
|
|
51
|
+
* - no path or path ending in / is appended with '/index.html' for folder root default behavior
|
|
52
|
+
* - File contents passed through using `sendFile` (will handle its own 404 if not found)
|
|
53
|
+
*
|
|
54
|
+
*/
|
|
55
|
+
router.all('*', (req, res, next) => {
|
|
56
|
+
// any PHP requests should be ignored
|
|
57
|
+
// ClogTrace('incoming: '+req.originalUrl)
|
|
58
|
+
if (req.originalUrl.indexOf('.php') !== -1) {
|
|
59
|
+
return res.send('');
|
|
60
|
+
}
|
|
61
|
+
if (req.originalUrl.indexOf('.env') !== -1) {
|
|
62
|
+
return res.send('');
|
|
63
|
+
}
|
|
64
|
+
let filepath = req.originalUrl || '/';
|
|
65
|
+
// match cloud behavior for docs because /api doesn't change cwd there
|
|
66
|
+
if (filepath.substring(0, 10) == '/api/docs/') {
|
|
67
|
+
filepath = filepath.replace('/api', '');
|
|
68
|
+
}
|
|
69
|
+
let funcFound = filepath === '/api'; // reserved "function"
|
|
70
|
+
if (!funcFound) {
|
|
71
|
+
if (filepath.charAt(0) === '/') {
|
|
72
|
+
let n = filepath.indexOf('/', 1);
|
|
73
|
+
if (n === -1)
|
|
74
|
+
n = filepath.length;
|
|
75
|
+
let rootEntity = filepath.substring(0, n);
|
|
76
|
+
n = rootEntity.indexOf('?');
|
|
77
|
+
if (n === -1)
|
|
78
|
+
n = rootEntity.length;
|
|
79
|
+
rootEntity = rootEntity.substring(0, n);
|
|
80
|
+
for (const entry of defs) {
|
|
81
|
+
let entryRoot = entry.pathMap;
|
|
82
|
+
let n = entryRoot.indexOf("/{");
|
|
83
|
+
if (n !== -1)
|
|
84
|
+
entryRoot = entryRoot.substring(0, n);
|
|
85
|
+
if (rootEntity === entryRoot) {
|
|
86
|
+
funcFound = true;
|
|
87
|
+
break;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
if (!funcFound) {
|
|
93
|
+
// check for '/' in path beyond the first one
|
|
94
|
+
if (filepath.indexOf('/', 1) !== -1) {
|
|
95
|
+
// console.log(ac.magenta.italic("Warning: / path delimiters will not be honored in a cloud deployment, use + instead ")+filepath)
|
|
96
|
+
}
|
|
97
|
+
// convert any incoming + to / to match cloud behavior
|
|
98
|
+
while (filepath.indexOf("+") !== -1)
|
|
99
|
+
filepath = filepath.replace("+", "/");
|
|
100
|
+
// Put any other filtering here
|
|
101
|
+
if (filepath.indexOf('?') !== -1) {
|
|
102
|
+
filepath = filepath.substring(0, filepath.indexOf('?'));
|
|
103
|
+
}
|
|
104
|
+
if (filepath.substring(filepath.length - 1) === '/')
|
|
105
|
+
filepath += 'index.html';
|
|
106
|
+
if (filepath.substring(0, 10) == '/api/docs/') {
|
|
107
|
+
filepath = filepath.replace('/api', '');
|
|
108
|
+
}
|
|
109
|
+
if (filepath.indexOf("/docs") !== -1) {
|
|
110
|
+
if (filepath.indexOf('.map') !== -1) {
|
|
111
|
+
return res.sendStatus(200);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
filepath = path_1.default.resolve(path_1.default.join(projectPaths.basePath, 'webroot', filepath)); // .. out of build
|
|
115
|
+
if (fs_1.default.existsSync(filepath)) {
|
|
116
|
+
return res.sendFile(filepath);
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
console.log(ac.red.bold("can't find " + filepath));
|
|
120
|
+
return res.sendStatus(404);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
// if none of the above, tickle enumerator so we can process other paths
|
|
124
|
+
next();
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
exports.allBinder = allBinder;
|
|
128
|
+
exports.default = router;
|
|
129
|
+
//# sourceMappingURL=all.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"all.js","sourceRoot":"","sources":["../../src/expressRoutes/all.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const express_1 = __importDefault(require("express"));
|
|
7
|
+
const router = express_1.default.Router();
|
|
8
|
+
const LiftVersion_1 = require("../lib/LiftVersion");
|
|
9
|
+
const openApiUI = require("openapi-ui");
|
|
10
|
+
router.get('/', function (req, res, next) {
|
|
11
|
+
res.send(generateApiDoc());
|
|
12
|
+
});
|
|
13
|
+
exports.default = router;
|
|
14
|
+
function generateApiDoc() {
|
|
15
|
+
console.log("---- Serving up api");
|
|
16
|
+
return openApiUI.generateIndex({
|
|
17
|
+
baseUrl: "docs",
|
|
18
|
+
title: `${(0, LiftVersion_1.getProjectName)()} ${(0, LiftVersion_1.getProjectVersion)()}`,
|
|
19
|
+
url: "docs/apidoc.yaml"
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=api.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/expressRoutes/api.ts"],"names":[],"mappings":";;;;;AAAA,sDAA6B;AAC7B,MAAM,MAAM,GAAG,iBAAO,CAAC,MAAM,EAAE,CAAC;AAEhC,oDAAqE;AAErE,MAAM,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;AAGxC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,UAAS,GAAG,EAAE,GAAG,EAAE,IAAI;IACrC,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAA;AAC5B,CAAC,CAAC,CAAC;AAEH,kBAAe,MAAM,CAAA;AAErB,SAAS,cAAc;IAErB,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAA;IAClC,OAAO,SAAS,CAAC,aAAa,CAAC;QAC7B,OAAO,EAAE,MAAM;QACf,KAAK,EAAE,GAAG,IAAA,4BAAc,GAAE,IAAI,IAAA,+BAAiB,GAAE,EAAE;QACnD,GAAG,EAAE,kBAAkB;KACxB,CAAC,CAAC;AAEL,CAAC"}
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
|
+
};
|
|
28
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
+
exports.functionBinder = void 0;
|
|
30
|
+
const path_1 = __importDefault(require("path"));
|
|
31
|
+
const clearModule = require('clear-module');
|
|
32
|
+
const ac = __importStar(require("ansi-colors"));
|
|
33
|
+
const pathResolve_1 = require("../lib/pathResolve");
|
|
34
|
+
const express_1 = __importDefault(require("express"));
|
|
35
|
+
const ApiBuildCollector_1 = require("../lib/openAPI/ApiBuildCollector");
|
|
36
|
+
const openApiConstruction_1 = require("../lib/openAPI/openApiConstruction");
|
|
37
|
+
const router = express_1.default.Router();
|
|
38
|
+
function functionBinder() {
|
|
39
|
+
const defs = (0, ApiBuildCollector_1.gatherFunctionDefinitions)();
|
|
40
|
+
(0, openApiConstruction_1.buildOpenApi)(defs).then(() => {
|
|
41
|
+
const projectPaths = (0, pathResolve_1.resolvePaths)();
|
|
42
|
+
for (let def of defs) {
|
|
43
|
+
const { name, pathMap, allowedMethods } = def;
|
|
44
|
+
const methods = allowedMethods.split(',');
|
|
45
|
+
for (let method of methods) {
|
|
46
|
+
method = method.trim().toLowerCase();
|
|
47
|
+
let rpath = path_1.default.join(projectPaths.buildPath, 'functions', name, 'src', 'main.js');
|
|
48
|
+
clearModule(rpath);
|
|
49
|
+
const { start } = require(rpath);
|
|
50
|
+
let entryRoot = pathMap;
|
|
51
|
+
let n = entryRoot.indexOf("/{");
|
|
52
|
+
if (n !== -1)
|
|
53
|
+
entryRoot = entryRoot.substring(0, n) + "/*";
|
|
54
|
+
const callNoBody = (pathMap, req, res) => {
|
|
55
|
+
const event = requestToEvent(pathMap, req);
|
|
56
|
+
Promise.resolve(start(event, null, null)).then(respOut => {
|
|
57
|
+
handleResponse(res, respOut);
|
|
58
|
+
});
|
|
59
|
+
};
|
|
60
|
+
const callWithBody = (pathMap, req, res) => {
|
|
61
|
+
const event = requestToEvent(pathMap, req);
|
|
62
|
+
event.body = req.body;
|
|
63
|
+
Promise.resolve(start(event, null, null)).then(respOut => {
|
|
64
|
+
handleResponse(res, respOut);
|
|
65
|
+
});
|
|
66
|
+
};
|
|
67
|
+
if (method === 'get') {
|
|
68
|
+
router.get(entryRoot, (req, res) => callNoBody(pathMap, req, res));
|
|
69
|
+
}
|
|
70
|
+
else if (method === 'post') {
|
|
71
|
+
router.get(entryRoot, (req, res) => callWithBody(pathMap, req, res));
|
|
72
|
+
}
|
|
73
|
+
else if (method === 'put') {
|
|
74
|
+
router.put(entryRoot, (req, res) => callWithBody(pathMap, req, res));
|
|
75
|
+
}
|
|
76
|
+
else if (method === 'patch') {
|
|
77
|
+
router.patch(entryRoot, (req, res) => callWithBody(pathMap, req, res));
|
|
78
|
+
}
|
|
79
|
+
else if (method === 'delete') {
|
|
80
|
+
router.delete(entryRoot, (req, res) => callNoBody(pathMap, req, res));
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
console.log(ac.red.bold("Cannot map method ") + ac.blue.bold(method));
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
exports.functionBinder = functionBinder;
|
|
90
|
+
function requestToEvent(template, req) {
|
|
91
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j;
|
|
92
|
+
let path = req.originalUrl;
|
|
93
|
+
const qi = path.indexOf('?');
|
|
94
|
+
if (qi !== -1)
|
|
95
|
+
path = path.substring(0, qi);
|
|
96
|
+
let ptci = path.indexOf("://") + 3;
|
|
97
|
+
let ei = path.indexOf("/", ptci);
|
|
98
|
+
let host = path.substring(0, ei);
|
|
99
|
+
if (ptci < 3) {
|
|
100
|
+
host = (_a = req.headers) === null || _a === void 0 ? void 0 : _a.origin;
|
|
101
|
+
if (!host) {
|
|
102
|
+
host = (_c = (_b = req.headers) === null || _b === void 0 ? void 0 : _b.referer) !== null && _c !== void 0 ? _c : "";
|
|
103
|
+
let ptci = path.indexOf("://") + 3;
|
|
104
|
+
let ei = path.indexOf("/", ptci);
|
|
105
|
+
host = ptci > 3 ? path.substring(0, ei) : "";
|
|
106
|
+
}
|
|
107
|
+
if (!host) {
|
|
108
|
+
// todo: http or https?
|
|
109
|
+
host = (_e = "http://" + ((_d = req.headers) === null || _d === void 0 ? void 0 : _d.host)) !== null && _e !== void 0 ? _e : "";
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
var cookies = {};
|
|
113
|
+
var cookieString = (_g = (_f = req.headers) === null || _f === void 0 ? void 0 : _f.cookie) !== null && _g !== void 0 ? _g : "";
|
|
114
|
+
var crumbs = cookieString.split(';');
|
|
115
|
+
for (let c of crumbs) {
|
|
116
|
+
const pair = c.split('=');
|
|
117
|
+
if (pair.length === 2)
|
|
118
|
+
cookies[pair[0]] = pair[1];
|
|
119
|
+
}
|
|
120
|
+
const parameters = {};
|
|
121
|
+
const tslots = template.split('/');
|
|
122
|
+
const pslots = path.split('/');
|
|
123
|
+
for (let i = 0; i < tslots.length; i++) {
|
|
124
|
+
const brknm = ((_h = tslots[i]) !== null && _h !== void 0 ? _h : "").trim();
|
|
125
|
+
if (brknm.charAt(0) === '{') {
|
|
126
|
+
const pn = brknm.substring(1, brknm.length - 1);
|
|
127
|
+
parameters[pn] = ((_j = pslots[i]) !== null && _j !== void 0 ? _j : "").trim();
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
for (let p of Object.getOwnPropertyNames(req.query)) {
|
|
131
|
+
parameters[p] = req.query[p];
|
|
132
|
+
}
|
|
133
|
+
const eventOut = {
|
|
134
|
+
requestContext: req,
|
|
135
|
+
request: {
|
|
136
|
+
originalUrl: host + req.originalUrl,
|
|
137
|
+
headers: req.headers
|
|
138
|
+
},
|
|
139
|
+
cookies,
|
|
140
|
+
parameters
|
|
141
|
+
};
|
|
142
|
+
return eventOut;
|
|
143
|
+
}
|
|
144
|
+
function handleResponse(res, resp) {
|
|
145
|
+
// console.log(">>>>>>>> Handling response >>>>>>>>>")
|
|
146
|
+
var _a;
|
|
147
|
+
if (resp) {
|
|
148
|
+
if (resp.cookies !== undefined) {
|
|
149
|
+
// console.log("--- see cookies", resp.cookies)
|
|
150
|
+
var cookies = [];
|
|
151
|
+
if (Array.isArray(resp.cookies)) {
|
|
152
|
+
cookies = resp.cookies;
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
var age = (_a = resp.cookies.expireSeconds) !== null && _a !== void 0 ? _a : 60; // 1 minute
|
|
156
|
+
delete resp.expireSeconds;
|
|
157
|
+
Object.getOwnPropertyNames(resp.cookies).forEach(name => {
|
|
158
|
+
var value = resp.cookies[name];
|
|
159
|
+
cookies.push(`${name}=${value}; Max-Age=${age}; `);
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
// console.log("cookies being set", cookies)
|
|
163
|
+
res.setHeader("set-cookie", cookies);
|
|
164
|
+
delete resp.cookies;
|
|
165
|
+
}
|
|
166
|
+
if (resp.headers !== undefined) {
|
|
167
|
+
// if (resp.statusCode === 301) ClogTrace("Redirecting...");
|
|
168
|
+
for (var hdr of Object.getOwnPropertyNames(resp.headers)) {
|
|
169
|
+
// ClogTrace("Setting header ", hdr, resp.headers[hdr]);
|
|
170
|
+
res.setHeader(hdr, resp.headers[hdr]);
|
|
171
|
+
}
|
|
172
|
+
delete resp.headers;
|
|
173
|
+
// console.log("past setting headers");
|
|
174
|
+
}
|
|
175
|
+
if (resp.statusCode !== undefined) {
|
|
176
|
+
res.statusCode = resp.statusCode;
|
|
177
|
+
delete resp.statusCode;
|
|
178
|
+
}
|
|
179
|
+
if (resp.contentType !== undefined) {
|
|
180
|
+
res.setHeader("Content-Type", resp.contentType);
|
|
181
|
+
delete resp.contentType;
|
|
182
|
+
}
|
|
183
|
+
if (resp.body)
|
|
184
|
+
resp = resp.body;
|
|
185
|
+
}
|
|
186
|
+
// console.log("headers to be sent", res.getHeaders())
|
|
187
|
+
// console.log("-- Sending response", resp)
|
|
188
|
+
res.send(resp);
|
|
189
|
+
}
|
|
190
|
+
exports.default = router;
|
|
191
|
+
//# sourceMappingURL=functionBinder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"functionBinder.js","sourceRoot":"","sources":["../../src/expressRoutes/functionBinder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.dashCase = exports.snakeCase = exports.pascalCase = exports.camelCase = exports.separated = void 0;
|
|
4
|
+
// separate a case-joined string into a string of space-separated words
|
|
5
|
+
function separated(instr) {
|
|
6
|
+
let outstr = '';
|
|
7
|
+
for (let i = 0; i < instr.length; i++) {
|
|
8
|
+
let c = instr.charAt(i);
|
|
9
|
+
if (!isAlphaNum(c) || isUpperCase(c)) {
|
|
10
|
+
outstr += ' ';
|
|
11
|
+
}
|
|
12
|
+
outstr += c.toLowerCase();
|
|
13
|
+
}
|
|
14
|
+
return outstr.trim();
|
|
15
|
+
}
|
|
16
|
+
exports.separated = separated;
|
|
17
|
+
function isUpperCase(instr) {
|
|
18
|
+
return (instr === null || instr === void 0 ? void 0 : instr.toUpperCase()) === instr;
|
|
19
|
+
}
|
|
20
|
+
function isAlphaNum(char) {
|
|
21
|
+
let alnum = false;
|
|
22
|
+
const cc = char.toUpperCase().charCodeAt(0);
|
|
23
|
+
if (cc >= 'A'.charCodeAt(0) && cc <= 'Z'.charCodeAt(0))
|
|
24
|
+
alnum = true;
|
|
25
|
+
if (cc >= '0'.charCodeAt(0) && cc <= '9'.charCodeAt(0))
|
|
26
|
+
alnum = true;
|
|
27
|
+
return alnum;
|
|
28
|
+
}
|
|
29
|
+
function camelCase(instr) {
|
|
30
|
+
const seps = separated(instr).split(' ');
|
|
31
|
+
for (let i = 1; i < seps.length; i++) {
|
|
32
|
+
seps[i] = seps[i].charAt(0).toUpperCase() + seps[i].substring(1);
|
|
33
|
+
}
|
|
34
|
+
return seps.join('');
|
|
35
|
+
}
|
|
36
|
+
exports.camelCase = camelCase;
|
|
37
|
+
function pascalCase(instr) {
|
|
38
|
+
const seps = separated(instr).split(' ');
|
|
39
|
+
for (let i = 0; i < seps.length; i++) {
|
|
40
|
+
seps[i] = seps[i].charAt(0).toUpperCase() + seps[i].substring(1);
|
|
41
|
+
}
|
|
42
|
+
return seps.join('');
|
|
43
|
+
}
|
|
44
|
+
exports.pascalCase = pascalCase;
|
|
45
|
+
function snakeCase(instr) {
|
|
46
|
+
return dashCase(instr, "_");
|
|
47
|
+
}
|
|
48
|
+
exports.snakeCase = snakeCase;
|
|
49
|
+
function dashCase(instr, dashChar = '-', allCaps = false) {
|
|
50
|
+
const seps = separated(instr).split(' ');
|
|
51
|
+
let out = seps.join(dashChar);
|
|
52
|
+
if (allCaps)
|
|
53
|
+
out = out.toUpperCase();
|
|
54
|
+
return out;
|
|
55
|
+
}
|
|
56
|
+
exports.dashCase = dashCase;
|
|
57
|
+
//# sourceMappingURL=CaseUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CaseUtils.js","sourceRoot":"","sources":["../../src/lib/CaseUtils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.latestModification = exports.recurseDirectory = void 0;
|
|
7
|
+
const fs_1 = __importDefault(require("fs"));
|
|
8
|
+
const path_1 = __importDefault(require("path"));
|
|
9
|
+
// Recurse a directory, calling back to a 'for-each' callback for all files in tree
|
|
10
|
+
function recurseDirectory(dirpath, callback) {
|
|
11
|
+
fs_1.default.readdirSync(dirpath).forEach((file) => {
|
|
12
|
+
const fpath = path_1.default.join(dirpath, file);
|
|
13
|
+
const stat = fs_1.default.lstatSync(fpath);
|
|
14
|
+
if (callback && !callback(fpath, stat)) {
|
|
15
|
+
if (stat.isDirectory()) {
|
|
16
|
+
recurseDirectory(fpath, callback);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
exports.recurseDirectory = recurseDirectory;
|
|
22
|
+
// find the latest mod time for matching files in this folder tree
|
|
23
|
+
function latestModification(dirpath, match) {
|
|
24
|
+
let latestTime = new Date(0);
|
|
25
|
+
if (fs_1.default.existsSync(dirpath)) {
|
|
26
|
+
recurseDirectory(dirpath, (filepath, stats) => {
|
|
27
|
+
let basefile = filepath.substring(filepath.lastIndexOf('/') + 1);
|
|
28
|
+
if (basefile.match(match)) {
|
|
29
|
+
if (stats.mtime > latestTime)
|
|
30
|
+
latestTime = stats.mtime;
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
return latestTime;
|
|
35
|
+
}
|
|
36
|
+
exports.latestModification = latestModification;
|
|
37
|
+
//# sourceMappingURL=DirectoryUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DirectoryUtils.js","sourceRoot":"","sources":["../../src/lib/DirectoryUtils.ts"],"names":[],"mappings":";;;;;;AACA,4CAAoB;AAEpB,gDAAuB;AAOvB,mFAAmF;AACnF,SAAgB,gBAAgB,CAAC,OAAc,EAAE,QAAkB;IAC/D,YAAE,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,IAAW,EAAE,EAAE;QAC5C,MAAM,KAAK,GAAG,cAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;QACtC,MAAM,IAAI,GAAG,YAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;QAChC,IAAG,QAAQ,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC;YACpC,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;gBACrB,gBAAgB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;YACrC,CAAC;QACL,CAAC;IACL,CAAC,CAAC,CAAA;AACN,CAAC;AAVD,4CAUC;AAED,kEAAkE;AAClE,SAAgB,kBAAkB,CAAC,OAAc,EAAE,KAAY;IAC3D,IAAI,UAAU,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;IAC7B,IAAG,YAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACxB,gBAAgB,CAAC,OAAO,EAAE,CAAC,QAAgB,EAAE,KAAY,EAAE,EAAE;YACzD,IAAI,QAAQ,GAAG,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;YAChE,IAAI,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;gBACxB,IAAI,KAAK,CAAC,KAAK,GAAG,UAAU;oBAAE,UAAU,GAAG,KAAK,CAAC,KAAK,CAAA;YAC1D,CAAC;QACL,CAAC,CAAC,CAAA;IACN,CAAC;IACD,OAAO,UAAU,CAAA;AACrB,CAAC;AAXD,gDAWC"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// configuration for setting cloud provider credentials
|
|
3
|
+
// may expand later for other MistLift settings/preferences
|
|
4
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
5
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
6
|
+
};
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.getAWSCredentials = exports.getSettings = exports.areSettingsAvailable = exports.resetLiftConfig = exports.LoadLiftConfig = exports.getUserHome = exports.LiftConfig = void 0;
|
|
9
|
+
const path_1 = __importDefault(require("path"));
|
|
10
|
+
const fs_1 = __importDefault(require("fs"));
|
|
11
|
+
const credential_providers_1 = require("@aws-sdk/credential-providers");
|
|
12
|
+
let s_liftConfigLoaded = null;
|
|
13
|
+
// Defines the structure of the .mistlft json file
|
|
14
|
+
// All relevant configuration for the cloud host goes here
|
|
15
|
+
class LiftConfig {
|
|
16
|
+
constructor() {
|
|
17
|
+
this.cloudHost = "AWS"; // all we support now
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
exports.LiftConfig = LiftConfig;
|
|
21
|
+
// Available for general use because, why not?
|
|
22
|
+
function getUserHome() {
|
|
23
|
+
var _a, _b, _c;
|
|
24
|
+
return (_c = (_b = (_a = process.env.HOME) !== null && _a !== void 0 ? _a : process.env.HOMEPATH) !== null && _b !== void 0 ? _b : process.env.USERPROFILE) !== null && _c !== void 0 ? _c : "~";
|
|
25
|
+
}
|
|
26
|
+
exports.getUserHome = getUserHome;
|
|
27
|
+
function LoadLiftConfig() {
|
|
28
|
+
if (!s_liftConfigLoaded) {
|
|
29
|
+
const mistlift = path_1.default.join(getUserHome(), ".mistlift");
|
|
30
|
+
let configJson = "{}";
|
|
31
|
+
if (fs_1.default.existsSync(mistlift)) {
|
|
32
|
+
try {
|
|
33
|
+
configJson = fs_1.default.readFileSync(mistlift).toString();
|
|
34
|
+
s_liftConfigLoaded = JSON.parse(configJson);
|
|
35
|
+
}
|
|
36
|
+
catch (e) {
|
|
37
|
+
//
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return s_liftConfigLoaded;
|
|
42
|
+
}
|
|
43
|
+
exports.LoadLiftConfig = LoadLiftConfig;
|
|
44
|
+
function resetLiftConfig() {
|
|
45
|
+
s_liftConfigLoaded = null;
|
|
46
|
+
}
|
|
47
|
+
exports.resetLiftConfig = resetLiftConfig;
|
|
48
|
+
function areSettingsAvailable() {
|
|
49
|
+
const mistlift = path_1.default.join(getUserHome(), ".mistlift");
|
|
50
|
+
return fs_1.default.existsSync(mistlift);
|
|
51
|
+
}
|
|
52
|
+
exports.areSettingsAvailable = areSettingsAvailable;
|
|
53
|
+
function getSettings() {
|
|
54
|
+
if (s_liftConfigLoaded == null)
|
|
55
|
+
LoadLiftConfig();
|
|
56
|
+
return s_liftConfigLoaded;
|
|
57
|
+
}
|
|
58
|
+
exports.getSettings = getSettings;
|
|
59
|
+
/**
|
|
60
|
+
* Return the credentials required for AWS based upon our config options.
|
|
61
|
+
*
|
|
62
|
+
* We will use the standard .aws config ini file, looked up by profile or default
|
|
63
|
+
* Prior attempts to have it do more than this failed, and resulted in a default profile choice anyway.
|
|
64
|
+
*/
|
|
65
|
+
function getAWSCredentials() {
|
|
66
|
+
var _a, _b;
|
|
67
|
+
let config = LoadLiftConfig();
|
|
68
|
+
if (!config) {
|
|
69
|
+
// console.error("No .mistlift configuration found - using AWS default profile");
|
|
70
|
+
config = { cloudHost: "AWS", awsIniProfile: "default" };
|
|
71
|
+
}
|
|
72
|
+
if (((_a = config.cloudHost) === null || _a === void 0 ? void 0 : _a.toUpperCase()) !== "AWS") {
|
|
73
|
+
throw Error("HostType Not Supported");
|
|
74
|
+
}
|
|
75
|
+
let credentials = {};
|
|
76
|
+
const profile = (_b = config.awsIniProfile) !== null && _b !== void 0 ? _b : "default";
|
|
77
|
+
if (profile) {
|
|
78
|
+
credentials = (0, credential_providers_1.fromIni)({ profile });
|
|
79
|
+
}
|
|
80
|
+
return credentials;
|
|
81
|
+
}
|
|
82
|
+
exports.getAWSCredentials = getAWSCredentials;
|
|
83
|
+
//# sourceMappingURL=LiftConfig.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LiftConfig.js","sourceRoot":"","sources":["../../src/lib/LiftConfig.ts"],"names":[],"mappings":";AAAA,uDAAuD;AACvD,2DAA2D;;;;;;AAE3D,gDAAwB;AACxB,4CAAoB;AACpB,wEAA2D;AAG3D,IAAI,kBAAkB,GAAmB,IAAI,CAAC;AAE9C,kDAAkD;AAClD,0DAA0D;AAC1D,MAAa,UAAU;IAAvB;QACW,cAAS,GAAW,KAAK,CAAA,CAAC,qBAAqB;IAK1D,CAAC;CAAA;AAND,gCAMC;AAGD,8CAA8C;AAC9C,SAAgB,WAAW;;IACvB,OAAO,MAAA,MAAA,MAAA,OAAO,CAAC,GAAG,CAAC,IAAI,mCAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,mCAAI,OAAO,CAAC,GAAG,CAAC,WAAW,mCAAI,GAAG,CAAC;AACtF,CAAC;AAFD,kCAEC;AAED,SAAgB,cAAc;IAE1B,IAAG,CAAC,kBAAkB,EAAE,CAAC;QAErB,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,WAAW,CAAC,CAAC;QACvD,IAAI,UAAU,GAAG,IAAI,CAAC;QACtB,IAAI,YAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1B,IAAI,CAAC;gBACD,UAAU,GAAG,YAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE,CAAC;gBAClD,kBAAkB,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YAChD,CAAC;YAAC,OAAO,CAAM,EAAE,CAAC;gBACd,EAAE;YACN,CAAC;QACL,CAAC;IACL,CAAC;IACD,OAAO,kBAAkB,CAAA;AAC7B,CAAC;AAhBD,wCAgBC;AACD,SAAgB,eAAe;IAE3B,kBAAkB,GAAG,IAAI,CAAC;AAC9B,CAAC;AAHD,0CAGC;AAED,SAAgB,oBAAoB;IAChC,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,WAAW,CAAC,CAAC;IACvD,OAAO,YAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AACnC,CAAC;AAHD,oDAGC;AAED,SAAgB,WAAW;IACvB,IAAI,kBAAkB,IAAI,IAAI;QAAE,cAAc,EAAE,CAAC;IACjD,OAAO,kBAAgC,CAAA;AAC3C,CAAC;AAHD,kCAGC;AAED;;;;;GAKG;AACH,SAAgB,iBAAiB;;IAE7B,IAAI,MAAM,GAAG,cAAc,EAAE,CAAA;IAC7B,IAAG,CAAC,MAAM,EAAE,CAAC;QACT,iFAAiF;QACjF,MAAM,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,CAAA;IAC3D,CAAC;IACD,IAAI,CAAA,MAAA,MAAM,CAAC,SAAS,0CAAE,WAAW,EAAE,MAAK,KAAK,EAC7C,CAAC;QACG,MAAM,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAC1C,CAAC;IACD,IAAI,WAAW,GAAG,EAAE,CAAC;IACrB,MAAM,OAAO,GAAG,MAAA,MAAM,CAAC,aAAa,mCAAI,SAAS,CAAA;IACjD,IAAG,OAAO,EAAE,CAAC;QACT,WAAW,GAAG,IAAA,8BAAO,EAAC,EAAC,OAAO,EAAC,CAAC,CAAA;IACpC,CAAC;IAED,OAAO,WAAW,CAAC;AACvB,CAAC;AAlBD,8CAkBC"}
|