@tremho/mist-lift 2.2.9 → 2.4.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/README.md +9 -1
- package/build/commands/actions/updateDeployedPermissions.js +109 -0
- package/build/commands/actions/updateDeployedPermissions.js.map +1 -0
- package/build/commands/builtin/ApiDocMaker.js +18 -10
- package/build/commands/builtin/ApiDocMaker.js.map +1 -1
- package/build/commands/builtin/BuiltInHandler.js +6 -3
- package/build/commands/builtin/BuiltInHandler.js.map +1 -1
- package/build/commands/builtin/ExportWebroot.js +242 -0
- package/build/commands/builtin/ExportWebroot.js.map +1 -0
- package/build/commands/builtin/StageWebrootZip.js +10 -6
- package/build/commands/builtin/StageWebrootZip.js.map +1 -1
- 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/builtin/webroot-export/s3webroot.js +117 -0
- package/build/commands/builtin/webroot-export/s3webroot.js.map +1 -0
- package/build/commands/deploy.js +6 -4
- package/build/commands/deploy.js.map +1 -1
- package/build/commands/package.js +31 -1
- package/build/commands/package.js.map +1 -1
- package/build/commands/publish.js +40 -13
- package/build/commands/publish.js.map +1 -1
- package/build/commands/start.js +2 -1
- package/build/commands/start.js.map +1 -1
- package/build/commands/update.js +1 -0
- package/build/commands/update.js.map +1 -1
- package/build/expressRoutes/all.js +1 -0
- package/build/expressRoutes/all.js.map +1 -1
- package/build/expressRoutes/functionBinder.js +159 -17
- package/build/expressRoutes/functionBinder.js.map +1 -1
- package/build/lib/DirectoryUtils.js +2 -1
- package/build/lib/DirectoryUtils.js.map +1 -1
- package/build/lib/IdSrc.js +29 -5
- package/build/lib/IdSrc.js.map +1 -1
- package/build/lib/TypeCheck.js +1204 -0
- package/build/lib/TypeCheck.js.map +1 -0
- package/build/lib/executeCommand.js +1 -1
- package/build/lib/executeCommand.js.map +1 -1
- package/build/lib/openAPI/openApiConstruction.js +238 -54
- package/build/lib/openAPI/openApiConstruction.js.map +1 -1
- package/build/lift.js +1 -1
- package/build/lift.js.map +1 -1
- package/package.json +5 -2
- package/src/commands/actions/updateDeployedPermissions.ts +80 -0
- package/src/commands/builtin/ApiDocMaker.ts +17 -10
- package/src/commands/builtin/BuiltInHandler.ts +7 -2
- package/src/commands/builtin/ExportWebroot.ts +195 -0
- package/src/commands/builtin/StageWebrootZip.ts +13 -5
- 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/builtin/webroot-export/s3webroot.ts +78 -0
- package/src/commands/deploy.ts +6 -4
- package/src/commands/package.ts +33 -2
- package/src/commands/publish.ts +37 -12
- package/src/commands/start.ts +2 -1
- package/src/commands/update.ts +1 -0
- package/src/expressRoutes/all.ts +1 -0
- package/src/expressRoutes/functionBinder.ts +152 -16
- package/src/lib/DirectoryUtils.ts +2 -1
- package/src/lib/IdSrc.ts +17 -4
- package/src/lib/TypeCheck.ts +1168 -0
- package/src/lib/executeCommand.ts +1 -1
- package/src/lib/openAPI/openApiConstruction.ts +225 -41
- package/src/lift.ts +1 -1
- package/templateData/function-main-ts +8 -1
package/README.md
CHANGED
|
@@ -69,7 +69,15 @@ If you would like to support my late night efforts, please consider a contributi
|
|
|
69
69
|
|
|
70
70
|
## Changelog
|
|
71
71
|
|
|
72
|
-
### 2.
|
|
72
|
+
### 2.4.0
|
|
73
|
+
- maintenance update
|
|
74
|
+
|
|
75
|
+
### 2.3.0
|
|
76
|
+
__New feature for S3-based webroot static files__
|
|
77
|
+
Please see [Webroot redirect documentation](https://github.com/tremho/MistLift/blob/main/doc/Webroot%20S3%20exports.md)
|
|
78
|
+
for information on this new feature that improves support for larger apps and assets.
|
|
79
|
+
|
|
80
|
+
### 2.2.6, 2.2.7, 2.2.8, 2.2.9, 2.2.10
|
|
73
81
|
- package updates
|
|
74
82
|
|
|
75
83
|
### 2.2.5
|
|
@@ -0,0 +1,109 @@
|
|
|
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 __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
26
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
27
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
28
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
29
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
30
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
31
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
32
|
+
});
|
|
33
|
+
};
|
|
34
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
35
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
36
|
+
};
|
|
37
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
38
|
+
exports.generateSourceArnForApiGateway = void 0;
|
|
39
|
+
const ac = __importStar(require("ansi-colors"));
|
|
40
|
+
const path_1 = __importDefault(require("path"));
|
|
41
|
+
const fs_1 = __importDefault(require("fs"));
|
|
42
|
+
const DirectoryUtils_1 = require("../../lib/DirectoryUtils");
|
|
43
|
+
const IdSrc_1 = require("../../lib/IdSrc");
|
|
44
|
+
const LiftConfig_1 = require("../../lib/LiftConfig");
|
|
45
|
+
const pathResolve_1 = require("../../lib/pathResolve");
|
|
46
|
+
const client_lambda_1 = require("@aws-sdk/client-lambda");
|
|
47
|
+
// let projectPaths: { basePath: string, buildPath: string, functionPath: string, packagePath: string, verified: boolean }
|
|
48
|
+
function updateDeployedPermissions(apiId) {
|
|
49
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
50
|
+
var _a;
|
|
51
|
+
const projectPaths = (0, pathResolve_1.resolvePaths)();
|
|
52
|
+
if (!projectPaths.verified) {
|
|
53
|
+
console.log(ac.bold.magenta('current directory is not at project root'));
|
|
54
|
+
return -1;
|
|
55
|
+
}
|
|
56
|
+
const funcsToDeploy = [];
|
|
57
|
+
let firstDepth = 0;
|
|
58
|
+
(0, DirectoryUtils_1.recurseDirectory)(projectPaths.functionPath, (filepath, stats) => {
|
|
59
|
+
const depth = filepath.split(path_1.default.sep).length;
|
|
60
|
+
if (firstDepth === 0)
|
|
61
|
+
firstDepth = depth;
|
|
62
|
+
if (stats.isDirectory() && depth === firstDepth) {
|
|
63
|
+
funcsToDeploy.push(path_1.default.basename(filepath));
|
|
64
|
+
}
|
|
65
|
+
return false;
|
|
66
|
+
});
|
|
67
|
+
const accountId = yield (0, IdSrc_1.getAccountId)();
|
|
68
|
+
const region = (_a = (0, LiftConfig_1.getSettings)().awsPreferredRegion) !== null && _a !== void 0 ? _a : '';
|
|
69
|
+
const client = new client_lambda_1.LambdaClient((0, LiftConfig_1.getAWSCredentials)());
|
|
70
|
+
for (const funcName of funcsToDeploy) {
|
|
71
|
+
// read the def file and get the method from there
|
|
72
|
+
const defPath = path_1.default.join(projectPaths.functionPath, funcName, 'src', 'definition.json');
|
|
73
|
+
const def = JSON.parse(fs_1.default.readFileSync(defPath).toString());
|
|
74
|
+
const method = def.method;
|
|
75
|
+
const pathMap = def.pathMap;
|
|
76
|
+
const arn = generateSourceArnForApiGateway(region, accountId, apiId, method, pathMap);
|
|
77
|
+
const dname = (0, IdSrc_1.decoratedName)(funcName);
|
|
78
|
+
console.log(ac.grey.italic('update permissions for resource ' + arn));
|
|
79
|
+
const command = new client_lambda_1.AddPermissionCommand({
|
|
80
|
+
FunctionName: dname,
|
|
81
|
+
StatementId: 'InvokePermission',
|
|
82
|
+
Action: 'lambda:invokeFunction',
|
|
83
|
+
Principal: 'apigateway.amazonaws.com',
|
|
84
|
+
SourceArn: arn
|
|
85
|
+
});
|
|
86
|
+
yield client.send(command);
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
exports.default = updateDeployedPermissions;
|
|
91
|
+
/**
|
|
92
|
+
* Generates the correct SourceArn to authorize API Gateway to invoke a Lambda function.
|
|
93
|
+
*
|
|
94
|
+
* @param region - The AWS region, e.g., 'us-west-1'
|
|
95
|
+
* @param accountId - Your AWS account ID
|
|
96
|
+
* @param apiId - The API Gateway ID, e.g., 'sfr7yltmc3'
|
|
97
|
+
* @param method - The HTTP method, e.g., 'POST'
|
|
98
|
+
* @param routePath - The API route path, e.g., '/upstart/{artistId}/{id}'
|
|
99
|
+
* @returns The complete SourceArn string
|
|
100
|
+
*/
|
|
101
|
+
function generateSourceArnForApiGateway(region, accountId, apiId, method, routePath) {
|
|
102
|
+
// Clean leading slashes and replace path params with wildcards
|
|
103
|
+
const cleanedPath = routePath
|
|
104
|
+
.replace(/^\/+/, '') // remove leading slashes
|
|
105
|
+
.replace(/{[^}]+}/g, '*'); // replace path params with *
|
|
106
|
+
return `arn:aws:execute-api:${region}:${accountId}:${apiId}/*/${method.toUpperCase()}/${cleanedPath}`;
|
|
107
|
+
}
|
|
108
|
+
exports.generateSourceArnForApiGateway = generateSourceArnForApiGateway;
|
|
109
|
+
//# sourceMappingURL=updateDeployedPermissions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"updateDeployedPermissions.js","sourceRoot":"","sources":["../../../src/commands/actions/updateDeployedPermissions.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,6 +19,7 @@ const WebrootFileSupport_1 = require("../../lib/openAPI/WebrootFileSupport");
|
|
|
19
19
|
const path_1 = __importDefault(require("path"));
|
|
20
20
|
// import * as ac from 'ansi-colors'
|
|
21
21
|
const IdSrc_1 = require("../../lib/IdSrc");
|
|
22
|
+
const ExportWebroot_1 = require("./ExportWebroot");
|
|
22
23
|
function MakePublicApiDoc() {
|
|
23
24
|
return __awaiter(this, void 0, void 0, function* () {
|
|
24
25
|
const defs = (0, ApiBuildCollector_1.gatherFunctionDefinitions)();
|
|
@@ -28,33 +29,37 @@ function MakePublicApiDoc() {
|
|
|
28
29
|
exports.MakePublicApiDoc = MakePublicApiDoc;
|
|
29
30
|
function MakeBuiltinApiDoc(yamlFile) {
|
|
30
31
|
return __awaiter(this, void 0, void 0, function* () {
|
|
32
|
+
var _a;
|
|
31
33
|
// console.log(ac.gray.dim('>>> gatherFunctionDefinitions '))
|
|
32
34
|
const defs = (0, ApiBuildCollector_1.gatherFunctionDefinitions)();
|
|
33
35
|
// console.log(ac.gray.dim('>> after gatherfunctions'), defs)
|
|
34
36
|
// console.log(ac.gray.dim('>>> addBuiltInDefinitions '))
|
|
35
|
-
|
|
37
|
+
const wrs = yield (0, ExportWebroot_1.getWebrootSettings)();
|
|
38
|
+
const withWebroot = ((_a = wrs.webrootMethod) !== null && _a !== void 0 ? _a : 'SELF') === 'SELF';
|
|
39
|
+
// console.log("wrs.webrootMethod=",wrs.webrootMethod)
|
|
40
|
+
addBuiltInDefinitions(defs, withWebroot);
|
|
36
41
|
// console.log(ac.gray.dim('>> after addBuiltIns'), defs)
|
|
37
42
|
// console.log(ac.gray.dim('>>> buildOpenApi '))
|
|
38
|
-
return yield (0, openApiConstruction_1.buildOpenApi)(defs,
|
|
43
|
+
return yield (0, openApiConstruction_1.buildOpenApi)(defs, true, true, yamlFile);
|
|
39
44
|
});
|
|
40
45
|
}
|
|
41
46
|
exports.MakeBuiltinApiDoc = MakeBuiltinApiDoc;
|
|
42
|
-
function addBuiltInDefinitions(defs) {
|
|
47
|
+
function addBuiltInDefinitions(defs, withWebroot) {
|
|
43
48
|
// console.warn("NOT ADDING ANY BUILTIN API INTEGRATIONS")
|
|
44
49
|
// console.log("ADDING apiDef");
|
|
45
50
|
// console.log(ac.gray.dim('>>>> pushing apiDef '), apiDef)
|
|
46
51
|
defs.push(apiDef);
|
|
52
|
+
// console.log("withWebroot = "+withWebroot)
|
|
47
53
|
// console.log(ac.gray.dim('>>>> pushing webrootDef '), webrootDef)
|
|
48
|
-
defs.push(webrootDef);
|
|
54
|
+
defs.push(webrootDef); // we need to do this to support index or anything else.
|
|
49
55
|
// console.log(ac.gray.dim('>>>> Adding webroot literals '))
|
|
50
56
|
// console.warn("Adding webroot literals");
|
|
51
57
|
// do just /docs and see how that goes
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
fsdef.
|
|
55
|
-
fsdef
|
|
56
|
-
|
|
57
|
-
*/
|
|
58
|
+
// const fsdef = Object.assign({}, fileServeDef) // copy
|
|
59
|
+
// fsdef.name = decoratedName('fileserve_docs')
|
|
60
|
+
// fsdef.pathMap = '/docs/{path}'
|
|
61
|
+
// defs.push(fsdef)
|
|
62
|
+
// }
|
|
58
63
|
const roots = (0, WebrootFileSupport_1.GetWebrootServePaths)();
|
|
59
64
|
// console.log("roots", roots)
|
|
60
65
|
// console.log(ac.gray.dim('>>>> roots here: '), roots)
|
|
@@ -66,6 +71,9 @@ function addBuiltInDefinitions(defs) {
|
|
|
66
71
|
// console.log(ac.gray.dim('>> rootName = '+rootName))
|
|
67
72
|
while (rootName.includes('/'))
|
|
68
73
|
rootName = rootName.replace('/', '').toLowerCase().trim();
|
|
74
|
+
// TODO: Trying to exclude here seems to remove our ability to get anything from root (webroot, should be there already)
|
|
75
|
+
// console.log('fileserve '+ rootName)
|
|
76
|
+
// if(!withWebroot && rootName !== 'docs') continue; // only copy docs for non-self export types
|
|
69
77
|
// console.log(ac.gray.dim('>> past stupid error = '+rootName))
|
|
70
78
|
const fileserve = Object.assign({}, fileServeDef); // copy
|
|
71
79
|
fileserve.name = (0, IdSrc_1.decoratedName)('fileserve_' + rootName);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ApiDocMaker.js","sourceRoot":"","sources":["../../../src/commands/builtin/ApiDocMaker.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2EAA+E;AAC/E,+EAAoE;AACpE,6EAA2E;AAE3E,gDAAuB;AACvB,oCAAoC;AACpC,2CAA+C;
|
|
1
|
+
{"version":3,"file":"ApiDocMaker.js","sourceRoot":"","sources":["../../../src/commands/builtin/ApiDocMaker.ts"],"names":[],"mappings":"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"}
|
|
@@ -44,11 +44,14 @@ const IdSrc_1 = require("../../lib/IdSrc");
|
|
|
44
44
|
const fs_1 = __importDefault(require("fs"));
|
|
45
45
|
const path_1 = __importDefault(require("path"));
|
|
46
46
|
function DeployWebrootBuiltIn() {
|
|
47
|
-
return __awaiter(this,
|
|
47
|
+
return __awaiter(this, arguments, void 0, function* (externalizedFolders = true) {
|
|
48
48
|
// console.warn(">> DeployWebrootBuiltIn")
|
|
49
|
+
// const withRoot = externalizedFolders
|
|
50
|
+
// const withFolders = true
|
|
49
51
|
const wrZip = yield (0, StageWebrootZip_1.StageWebrootZip)();
|
|
50
|
-
|
|
51
|
-
|
|
52
|
+
const wrName = (0, IdSrc_1.decoratedName)('Webroot');
|
|
53
|
+
// console.log(">> Deploy Webroot Builtin from "+wrZip+" as "+wrName)
|
|
54
|
+
yield (0, DeployBuiltInZip_1.DeployBuiltInZip)(wrName, wrZip);
|
|
52
55
|
// remove temp zip when done
|
|
53
56
|
// console.warn("a.zip is left behind")
|
|
54
57
|
fs_1.default.rmSync(wrZip, { recursive: true });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BuiltInHandler.js","sourceRoot":"","sources":["../../../src/commands/builtin/BuiltInHandler.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uDAAmD;AACnD,yDAAqD;AACrD,6EAA2E;AAC3E,gDAAiC;AACjC,2CAA+C;AAE/C,4CAAmB;AACnB,gDAAuB;AAEvB,SAAsB,oBAAoB
|
|
1
|
+
{"version":3,"file":"BuiltInHandler.js","sourceRoot":"","sources":["../../../src/commands/builtin/BuiltInHandler.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uDAAmD;AACnD,yDAAqD;AACrD,6EAA2E;AAC3E,gDAAiC;AACjC,2CAA+C;AAE/C,4CAAmB;AACnB,gDAAuB;AAEvB,SAAsB,oBAAoB;yDAExC,sBAA+B,IAAI;QAEnC,0CAA0C;QAC1C,uCAAuC;QACvC,2BAA2B;QAC3B,MAAM,KAAK,GAAG,MAAM,IAAA,iCAAe,GAAE,CAAA;QACrC,MAAM,MAAM,GAAG,IAAA,qBAAa,EAAC,SAAS,CAAC,CAAA;QACvC,qEAAqE;QAErE,MAAM,IAAA,mCAAgB,EAAC,MAAM,EAAE,KAAK,CAAC,CAAA;QACrC,4BAA4B;QAC5B,uCAAuC;QACvC,YAAE,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IACvC,CAAC;CAAA;AAfD,oDAeC;AAED,SAAsB,oBAAoB;;QAGxC,iBAAiB;QACjB,MAAM,KAAK,GAAG,IAAA,yCAAoB,GAAE,CAAA;QACpC,0CAA0C;QAC1C,MAAM,YAAY,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,eAAe,EAAE,eAAe,CAAC,CAAA;QAC3E,MAAM,GAAG,GAAwB,EAAE,CAAA;QACnC,KAAK,IAAI,IAAI,IAAI,KAAK,EAAE,CAAC;YACvB,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAA;YAClB,IAAI,IAAI,GAAG,IAAA,qBAAa,EAAC,YAAY,GAAG,IAAI,CAAC,CAAA;YAC7C,kDAAkD;YAClD,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC1B,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA;YAC9B,CAAC;YACD,gDAAgD;YAChD,GAAG,CAAC,IAAI,CAAC,IAAA,mCAAgB,EAAC,IAAI,EAAE,YAAY,CAAC,CAAC,CAAA;QAChD,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,aAAa,GAAG,CAAC,MAAM,iBAAiB,CAAC,CAAC,CAAA;QACtE,MAAM,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QACtB,+BAA+B;IACjC,CAAC;CAAA;AArBD,oDAqBC;AAED,SAAsB,gBAAgB;;QAGpC,gCAAgC;QAChC,MAAM,MAAM,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,eAAe,EAAE,SAAS,CAAC,CAAA;QAC/D,MAAM,IAAA,mCAAgB,EAAC,KAAK,EAAE,MAAM,CAAC,CAAA;IACvC,CAAC;CAAA;AAND,4CAMC"}
|
|
@@ -0,0 +1,242 @@
|
|
|
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 __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
26
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
27
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
28
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
29
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
30
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
31
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
32
|
+
});
|
|
33
|
+
};
|
|
34
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
35
|
+
exports.getWebrootSettings = exports.ExportWebroot = exports.WebrootExportConfig = exports.WebrootExportType = exports.WebrootDefaultOptions = exports.WebrootS3Options = exports.WebrootScriptOptions = void 0;
|
|
36
|
+
const path = __importStar(require("path"));
|
|
37
|
+
const fs = __importStar(require("fs"));
|
|
38
|
+
const ac = __importStar(require("ansi-colors"));
|
|
39
|
+
const pathResolve_1 = require("../../lib/pathResolve");
|
|
40
|
+
const DirectoryUtils_1 = require("../../lib/DirectoryUtils");
|
|
41
|
+
// import { isNewer } from '../../lib/fileCompare'
|
|
42
|
+
const executeCommand_1 = require("../../lib/executeCommand");
|
|
43
|
+
// import { mkdirSync } from 'fs'
|
|
44
|
+
const BuiltInHandler_1 = require("./BuiltInHandler");
|
|
45
|
+
// import { ServiceSettingsData } from '@tremho/inverse-y'
|
|
46
|
+
const s3webroot_1 = require("./webroot-export/s3webroot");
|
|
47
|
+
/*
|
|
48
|
+
Here we want to handle exporting the webroot to other serving sources according to configuration.
|
|
49
|
+
|
|
50
|
+
- Read the config options
|
|
51
|
+
- enumerate the webroot and find recent changes
|
|
52
|
+
- write these file paths to a temp file
|
|
53
|
+
- per config, call the handler that will do this
|
|
54
|
+
- to S3
|
|
55
|
+
- to script
|
|
56
|
+
later:
|
|
57
|
+
- to Blob ?
|
|
58
|
+
-
|
|
59
|
+
|
|
60
|
+
*/
|
|
61
|
+
/*
|
|
62
|
+
Script will be called with comma delimited list of files as arg 1, and options (string) as arg2
|
|
63
|
+
*/
|
|
64
|
+
class WebrootScriptOptions {
|
|
65
|
+
constructor() {
|
|
66
|
+
this.scriptName = ''; // name of script to call (relative to project root)
|
|
67
|
+
this.options = ''; // options passed as second parameter to script (see comment above)
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
exports.WebrootScriptOptions = WebrootScriptOptions;
|
|
71
|
+
class WebrootS3Options {
|
|
72
|
+
constructor() {
|
|
73
|
+
this.unused = ''; // empty (lint)
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
exports.WebrootS3Options = WebrootS3Options;
|
|
77
|
+
class WebrootDefaultOptions {
|
|
78
|
+
constructor() {
|
|
79
|
+
this.unused = ''; // empty (lint)
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
exports.WebrootDefaultOptions = WebrootDefaultOptions;
|
|
83
|
+
/*
|
|
84
|
+
For non-SELF types, only the files *not* in subdirectories will be packaged to the deployed webroot
|
|
85
|
+
*/
|
|
86
|
+
var WebrootExportType;
|
|
87
|
+
(function (WebrootExportType) {
|
|
88
|
+
WebrootExportType["SELF"] = "SELF";
|
|
89
|
+
WebrootExportType["SCRIPT"] = "SCRIPT";
|
|
90
|
+
WebrootExportType["S3"] = "S3"; // built-in function (instead of script) is called for an S3 target
|
|
91
|
+
})(WebrootExportType || (exports.WebrootExportType = WebrootExportType = {}));
|
|
92
|
+
/*
|
|
93
|
+
This is what webrootConfig.json looks like
|
|
94
|
+
*/
|
|
95
|
+
class WebrootExportConfig {
|
|
96
|
+
constructor() {
|
|
97
|
+
this.type = WebrootExportType.SELF;
|
|
98
|
+
this.options = new WebrootDefaultOptions();
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
exports.WebrootExportConfig = WebrootExportConfig;
|
|
102
|
+
let basePath = '';
|
|
103
|
+
/**
|
|
104
|
+
* Exports the webroot according to configuration
|
|
105
|
+
*/
|
|
106
|
+
function ExportWebroot() {
|
|
107
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
108
|
+
const projectPaths = (0, pathResolve_1.resolvePaths)();
|
|
109
|
+
basePath = projectPaths.basePath;
|
|
110
|
+
const webrootConfig = readWebrootConfig(path.join(basePath, 'webrootConfig.json'));
|
|
111
|
+
// console.log(">> ExportWebroot", {webrootConfig})
|
|
112
|
+
const fla = yield getUpdatedExportFileList();
|
|
113
|
+
switch (webrootConfig.type) {
|
|
114
|
+
case WebrootExportType.SELF:
|
|
115
|
+
yield exportSelf();
|
|
116
|
+
break;
|
|
117
|
+
case WebrootExportType.S3:
|
|
118
|
+
yield (0, s3webroot_1.exportWebrootToS3)(fla, webrootConfig.options);
|
|
119
|
+
break;
|
|
120
|
+
case WebrootExportType.SCRIPT:
|
|
121
|
+
yield exportScript(fla, webrootConfig.options);
|
|
122
|
+
break;
|
|
123
|
+
default: {
|
|
124
|
+
throw new Error(`UNSUPPORTED WEBROOT EXPORT ${WebrootExportType[webrootConfig.type]}`);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
exports.ExportWebroot = ExportWebroot;
|
|
130
|
+
function getWebrootSettings() {
|
|
131
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
132
|
+
const projectPaths = (0, pathResolve_1.resolvePaths)();
|
|
133
|
+
basePath = projectPaths.basePath;
|
|
134
|
+
const webrootConfig = readWebrootConfig(path.join(basePath, 'webrootConfig.json'));
|
|
135
|
+
let baseUrl = '';
|
|
136
|
+
switch (webrootConfig.type) {
|
|
137
|
+
case WebrootExportType.SELF:
|
|
138
|
+
baseUrl = '';
|
|
139
|
+
break;
|
|
140
|
+
case WebrootExportType.S3:
|
|
141
|
+
baseUrl = yield (0, s3webroot_1.getS3Prefix)();
|
|
142
|
+
break;
|
|
143
|
+
case WebrootExportType.SCRIPT: {
|
|
144
|
+
const options = webrootConfig.options;
|
|
145
|
+
const scriptPath = path.join(basePath, options.scriptName);
|
|
146
|
+
const out = yield (0, executeCommand_1.executeCommand)(scriptPath, ['--prefix'], basePath, false);
|
|
147
|
+
baseUrl = out.stdStr.trim();
|
|
148
|
+
break;
|
|
149
|
+
}
|
|
150
|
+
default: {
|
|
151
|
+
const unreachable = webrootConfig.type;
|
|
152
|
+
throw new Error(`UNSUPPORTED WEBROOT EXPORT ${unreachable}`);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
return {
|
|
156
|
+
webrootMethod: webrootConfig.type.toString(),
|
|
157
|
+
webrootBaseUrl: baseUrl
|
|
158
|
+
};
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
exports.getWebrootSettings = getWebrootSettings;
|
|
162
|
+
let warned = false;
|
|
163
|
+
function readWebrootConfig(configPath) {
|
|
164
|
+
let conf = new WebrootExportConfig();
|
|
165
|
+
let content = '';
|
|
166
|
+
// console.log("... reading from "+configPath)
|
|
167
|
+
try {
|
|
168
|
+
// console.log(" >> readWebrootConfig")
|
|
169
|
+
content = fs.readFileSync(configPath).toString();
|
|
170
|
+
conf = JSON.parse(content);
|
|
171
|
+
}
|
|
172
|
+
catch (e) {
|
|
173
|
+
if (!warned) {
|
|
174
|
+
warned = true;
|
|
175
|
+
console.error(ac.yellow.bold('Warning: Failed to read or parse ' + configPath));
|
|
176
|
+
console.warn(ac.yellow.bold.dim("Falling back to 'self' publish mode"));
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
return conf;
|
|
180
|
+
}
|
|
181
|
+
function exportSelf() {
|
|
182
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
183
|
+
// zip up everything
|
|
184
|
+
// console.log(">> exportSelf")
|
|
185
|
+
// console.log(" >> deployWebrootBuiltIn")
|
|
186
|
+
yield (0, BuiltInHandler_1.DeployWebrootBuiltIn)(false);
|
|
187
|
+
// console.log(" >> deployRootFileserves")
|
|
188
|
+
yield (0, BuiltInHandler_1.DeployRootFileserves)();
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
function exportScript(fla, options) {
|
|
192
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
193
|
+
// console.log(">> exportScript")
|
|
194
|
+
// console.log(" >> DeployWebrootBuiltIn")
|
|
195
|
+
// await DeployWebrootBuiltIn(true)
|
|
196
|
+
console.log(ac.bold.green(`calling webroot exportScript ${options.scriptName}`));
|
|
197
|
+
// console.log("files", fla)
|
|
198
|
+
const fl = fla.join(',');
|
|
199
|
+
const args = [fl];
|
|
200
|
+
// args.unshift(options.options)
|
|
201
|
+
// console.log("args", args)
|
|
202
|
+
const scriptPath = path.join(basePath, options.scriptName);
|
|
203
|
+
// console.log("Executing script", scriptPath)
|
|
204
|
+
yield (0, executeCommand_1.executeCommand)(scriptPath, args, basePath, true);
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
function getUpdatedExportFileList() {
|
|
208
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
209
|
+
// console.log(">> getUpdatedExportFileList")
|
|
210
|
+
// find the last published time from .published file
|
|
211
|
+
let lastPublished = 0;
|
|
212
|
+
try {
|
|
213
|
+
const pubjson = JSON.parse(fs.readFileSync(path.join(basePath, '.published')).toString());
|
|
214
|
+
lastPublished = pubjson.time;
|
|
215
|
+
// console.log("last published ", lastPublished)
|
|
216
|
+
}
|
|
217
|
+
catch (e) {
|
|
218
|
+
console.warn(ac.yellow.italic.dim('no .published information available - full export'));
|
|
219
|
+
}
|
|
220
|
+
const outbin = [];
|
|
221
|
+
// enumerate at webroot and files from all non-root directories
|
|
222
|
+
const folder = path.join(basePath, 'webroot');
|
|
223
|
+
const rootpathsteps = folder.split(path.sep).length;
|
|
224
|
+
const enumerating = true;
|
|
225
|
+
function gatherFiles(filepath, stats) {
|
|
226
|
+
// console.log(filepath, {steps:filepath.split(path.sep).length, rootpathsteps, isDir:stats.isDirectory()})
|
|
227
|
+
if (filepath.split(path.sep).length > rootpathsteps + 1) {
|
|
228
|
+
// console.log({filepath, mtime:stats.mtime.getTime(), lastPublished})
|
|
229
|
+
if (stats.mtime.getTime() >= lastPublished) {
|
|
230
|
+
filepath = '+' + filepath;
|
|
231
|
+
// console.log("will update "+filepath)
|
|
232
|
+
}
|
|
233
|
+
outbin.push(filepath);
|
|
234
|
+
}
|
|
235
|
+
return false;
|
|
236
|
+
}
|
|
237
|
+
// console.log("recursing folder ", folder)
|
|
238
|
+
yield (0, DirectoryUtils_1.recurseDirectory)(folder, gatherFiles);
|
|
239
|
+
return outbin;
|
|
240
|
+
});
|
|
241
|
+
}
|
|
242
|
+
//# sourceMappingURL=ExportWebroot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ExportWebroot.js","sourceRoot":"","sources":["../../../src/commands/builtin/ExportWebroot.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAA4B;AAC5B,uCAAwB;AACxB,gDAAiC;AACjC,uDAAoD;AACpD,6DAA2D;AAC3D,kDAAkD;AAClD,6DAAyD;AACzD,iCAAiC;AACjC,qDAA6E;AAC7E,0DAA0D;AAC1D,0DAA2E;AAE3E;;;;;;;;;;;;;GAaG;AAEH;;GAEG;AACH,MAAa,oBAAoB;IAAjC;QACS,eAAU,GAAG,EAAE,CAAA,CAAC,oDAAoD;QACpE,YAAO,GAAG,EAAE,CAAA,CAAC,mEAAmE;IACzF,CAAC;CAAA;AAHD,oDAGC;AACD,MAAa,gBAAgB;IAA7B;QACS,WAAM,GAAG,EAAE,CAAA,CAAC,eAAe;IACpC,CAAC;CAAA;AAFD,4CAEC;AACD,MAAa,qBAAqB;IAAlC;QACS,WAAM,GAAG,EAAE,CAAA,CAAC,eAAe;IACpC,CAAC;CAAA;AAFD,sDAEC;AAID;;GAEG;AACH,IAAY,iBAIX;AAJD,WAAY,iBAAiB;IAC3B,kCAAa,CAAA;IACb,sCAAiB,CAAA;IACjB,8BAAS,CAAA,CAAC,mEAAmE;AAC/E,CAAC,EAJW,iBAAiB,iCAAjB,iBAAiB,QAI5B;AAED;;GAEG;AACH,MAAa,mBAAmB;IAAhC;QACS,SAAI,GAAsB,iBAAiB,CAAC,IAAI,CAAA;QAChD,YAAO,GAAmB,IAAI,qBAAqB,EAAE,CAAA;IAC9D,CAAC;CAAA;AAHD,kDAGC;AAED,IAAI,QAAQ,GAAG,EAAE,CAAA;AAEjB;;GAEG;AACH,SAAsB,aAAa;;QACjC,MAAM,YAAY,GAAG,IAAA,0BAAY,GAAE,CAAA;QACnC,QAAQ,GAAG,YAAY,CAAC,QAAQ,CAAA;QAChC,MAAM,aAAa,GAAG,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,oBAAoB,CAAC,CAAC,CAAA;QAClF,mDAAmD;QAEnD,MAAM,GAAG,GAAG,MAAM,wBAAwB,EAAE,CAAA;QAC5C,QAAQ,aAAa,CAAC,IAAI,EAAE,CAAC;YAC3B,KAAK,iBAAiB,CAAC,IAAI;gBACzB,MAAM,UAAU,EAAE,CAAA;gBAClB,MAAK;YACP,KAAK,iBAAiB,CAAC,EAAE;gBACvB,MAAM,IAAA,6BAAiB,EAAC,GAAG,EAAE,aAAa,CAAC,OAA2B,CAAC,CAAA;gBACvE,MAAK;YACP,KAAK,iBAAiB,CAAC,MAAM;gBAC3B,MAAM,YAAY,CAAC,GAAG,EAAE,aAAa,CAAC,OAA+B,CAAC,CAAA;gBACtE,MAAK;YACP,OAAO,CAAC,CAAC,CAAC;gBACR,MAAM,IAAI,KAAK,CAAC,8BAA8B,iBAAiB,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;YACxF,CAAC;QACH,CAAC;IACH,CAAC;CAAA;AArBD,sCAqBC;AACD,SAAsB,kBAAkB;;QACtC,MAAM,YAAY,GAAG,IAAA,0BAAY,GAAE,CAAA;QACnC,QAAQ,GAAG,YAAY,CAAC,QAAQ,CAAA;QAChC,MAAM,aAAa,GAAG,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,oBAAoB,CAAC,CAAC,CAAA;QAClF,IAAI,OAAO,GAAG,EAAE,CAAA;QAChB,QAAQ,aAAa,CAAC,IAAI,EAAE,CAAC;YAC3B,KAAK,iBAAiB,CAAC,IAAI;gBACzB,OAAO,GAAG,EAAE,CAAA;gBACZ,MAAK;YACP,KAAK,iBAAiB,CAAC,EAAE;gBACvB,OAAO,GAAG,MAAM,IAAA,uBAAW,GAAE,CAAA;gBAC7B,MAAK;YACP,KAAK,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC;gBAC9B,MAAM,OAAO,GAAG,aAAa,CAAC,OAA+B,CAAA;gBAC7D,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,UAAU,CAAC,CAAA;gBAC1D,MAAM,GAAG,GAAG,MAAM,IAAA,+BAAc,EAAC,UAAU,EAAE,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAA;gBAC3E,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAA;gBAC3B,MAAK;YACP,CAAC;YACD,OAAO,CAAC,CAAC,CAAC;gBACR,MAAM,WAAW,GAAU,aAAa,CAAC,IAAI,CAAA;gBAC7C,MAAM,IAAI,KAAK,CAAC,8BAA8B,WAAW,EAAE,CAAC,CAAA;YAC9D,CAAC;QACH,CAAC;QACD,OAAO;YACL,aAAa,EAAE,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE;YAC5C,cAAc,EAAE,OAAO;SACxB,CAAA;IACH,CAAC;CAAA;AA5BD,gDA4BC;AAED,IAAI,MAAM,GAAG,KAAK,CAAA;AAClB,SAAS,iBAAiB,CAAE,UAAkB;IAC5C,IAAI,IAAI,GAAG,IAAI,mBAAmB,EAAE,CAAA;IACpC,IAAI,OAAO,GAAG,EAAE,CAAA;IAChB,8CAA8C;IAC9C,IAAI,CAAC;QACH,wCAAwC;QACxC,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,QAAQ,EAAE,CAAA;QAChD,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;IAC5B,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QAChB,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,GAAG,IAAI,CAAA;YACb,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,mCAAmC,GAAG,UAAU,CAAC,CAAC,CAAA;YAC/E,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC,CAAA;QACzE,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC;AAED,SAAe,UAAU;;QACvB,oBAAoB;QACpB,+BAA+B;QAC/B,2CAA2C;QAC3C,MAAM,IAAA,qCAAoB,EAAC,KAAK,CAAC,CAAA;QACjC,2CAA2C;QAC3C,MAAM,IAAA,qCAAoB,GAAE,CAAA;IAC9B,CAAC;CAAA;AAED,SAAe,YAAY,CAAE,GAAa,EAAE,OAA6B;;QACvE,iCAAiC;QACjC,2CAA2C;QAC3C,mCAAmC;QACnC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,gCAAgC,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC,CAAA;QAChF,4BAA4B;QAC5B,MAAM,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QACxB,MAAM,IAAI,GAAG,CAAC,EAAE,CAAC,CAAA;QACjB,gCAAgC;QAChC,4BAA4B;QAE5B,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,UAAU,CAAC,CAAA;QAC1D,8CAA8C;QAC9C,MAAM,IAAA,+BAAc,EAAC,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAA;IACxD,CAAC;CAAA;AAED,SAAe,wBAAwB;;QACrC,6CAA6C;QAC7C,oDAAoD;QACpD,IAAI,aAAa,GAAG,CAAC,CAAA;QACrB,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAA;YACzF,aAAa,GAAG,OAAO,CAAC,IAAI,CAAA;YAC5B,gDAAgD;QAClD,CAAC;QAAC,OAAO,CAAM,EAAE,CAAC;YAChB,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC,CAAA;QACzF,CAAC;QACD,MAAM,MAAM,GAAa,EAAE,CAAA;QAC3B,+DAA+D;QAC/D,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAA;QAC7C,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAA;QACnD,MAAM,WAAW,GAAG,IAAI,CAAA;QAExB,SAAS,WAAW,CAAE,QAAgB,EAAE,KAAe;YACrD,2GAA2G;YAC3G,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,aAAa,GAAG,CAAC,EAAE,CAAC;gBACxD,sEAAsE;gBACtE,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,aAAa,EAAE,CAAC;oBAC3C,QAAQ,GAAG,GAAG,GAAG,QAAQ,CAAA;oBACzB,uCAAuC;gBACzC,CAAC;gBACD,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;YACvB,CAAC;YACD,OAAO,KAAK,CAAA;QACd,CAAC;QACD,2CAA2C;QAC3C,MAAM,IAAA,iCAAgB,EAAC,MAAM,EAAE,WAAW,CAAC,CAAA;QAC3C,OAAO,MAAM,CAAA;IACf,CAAC;CAAA"}
|
|
@@ -43,7 +43,7 @@ const utils_1 = require("../../lib/utils");
|
|
|
43
43
|
const fs_1 = require("fs");
|
|
44
44
|
// import * as ac from 'ansi-colors'
|
|
45
45
|
function StageWebrootZip() {
|
|
46
|
-
return __awaiter(this,
|
|
46
|
+
return __awaiter(this, arguments, void 0, function* (withRoot = true, withFolders = true) {
|
|
47
47
|
// console.log(">>>> staging webroot to zip")
|
|
48
48
|
const projectPaths = (0, pathResolve_1.resolvePaths)();
|
|
49
49
|
const webroot = path.join(projectPaths.basePath, 'webroot');
|
|
@@ -90,6 +90,7 @@ function StageWebrootZip() {
|
|
|
90
90
|
// console.log(">>>> making zipFilesPath "+zipFilesPath)
|
|
91
91
|
yield fs.mkdirSync(zipFilesPath);
|
|
92
92
|
// todo: read the redirects.json file
|
|
93
|
+
// todo: Document as deprecated
|
|
93
94
|
let redirected = [];
|
|
94
95
|
try {
|
|
95
96
|
const redir = JSON.parse(fs.readFileSync(path.join(webroot, 'redirects.json')).toString());
|
|
@@ -102,14 +103,17 @@ function StageWebrootZip() {
|
|
|
102
103
|
// console.log(">>>> enumerating "+webroot)
|
|
103
104
|
yield (0, DirectoryUtils_1.recurseDirectory)(webroot, (filepath, stats) => {
|
|
104
105
|
const relPath = filepath.substring(webroot.length);
|
|
105
|
-
if (stats.isDirectory()) {
|
|
106
|
+
if (stats.isDirectory() && withFolders) {
|
|
106
107
|
fs.mkdirSync(zipFilesPath + relPath, { recursive: true });
|
|
107
108
|
}
|
|
108
109
|
else {
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
//
|
|
112
|
-
|
|
110
|
+
if ((relPath.includes(path.sep) && withFolders) ||
|
|
111
|
+
((!relPath.includes(path.sep)) && withRoot)) {
|
|
112
|
+
// TODO: Deprecate redirection. we'll continue to supoort it here, though for now
|
|
113
|
+
if (!redirected.includes(relPath.substring(1))) {
|
|
114
|
+
// console.log(ac.grey.dim('>> copying...'))
|
|
115
|
+
fs.copyFileSync(filepath, zipFilesPath + relPath); // copy only if not in redirected list
|
|
116
|
+
}
|
|
113
117
|
}
|
|
114
118
|
}
|
|
115
119
|
return false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StageWebrootZip.js","sourceRoot":"","sources":["../../../src/commands/builtin/StageWebrootZip.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+CAAgD;AAEhD,2CAA4B;AAC5B,uCAAwB;AACxB,uDAAoD;AACpD,6DAA2D;AAC3D,2CAA4D;AAC5D,4DAA4D;AAC5D,2BAA2B;AAC3B,oCAAoC;AAEpC,SAAsB,eAAe
|
|
1
|
+
{"version":3,"file":"StageWebrootZip.js","sourceRoot":"","sources":["../../../src/commands/builtin/StageWebrootZip.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+CAAgD;AAEhD,2CAA4B;AAC5B,uCAAwB;AACxB,uDAAoD;AACpD,6DAA2D;AAC3D,2CAA4D;AAC5D,4DAA4D;AAC5D,2BAA2B;AAC3B,oCAAoC;AAEpC,SAAsB,eAAe;yDAEnC,WAAoB,IAAI,EACxB,cAAuB,IAAI;QAE3B,6CAA6C;QAC7C,MAAM,YAAY,GAAG,IAAA,0BAAY,GAAE,CAAA;QACnC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAA;QAC3D,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAA;QACrE,MAAM,mBAAmB,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,CAAA;QAC7D,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,WAAW,CAAC,CAAA;QAChE,uFAAuF;QACvF,IAAI,EAAE,CAAC,UAAU,CAAC,mBAAmB,CAAC;YAAE,IAAA,WAAM,EAAC,mBAAmB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QACxF,MAAM,EAAE,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAA;QACvC,qBAAqB;QACrB,MAAM,IAAA,8BAAgB,GAAE,CAAA,CAAC,6BAA6B;QACtD,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,eAAe,EAAE,aAAa,CAAC,CAAA;QACxE,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAA;QAC/D,+DAA+D;QAC/D,MAAM,IAAA,qBAAa,EAAC,WAAW,EAAE,KAAK,CAAC,CAAA;QAEvC,IAAI,CAAC;YAAC,MAAM,IAAA,WAAM,EAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,aAAa,CAAC,CAAC,CAAA;QAAC,CAAC;QAAC,OAAO,CAAM,EAAE,CAAC,CAAA,CAAC;QACrF,IAAI,CAAC;YAAC,MAAM,IAAA,WAAM,EAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,iBAAiB,CAAC,CAAC,CAAA;QAAC,CAAC;QAAC,OAAO,CAAM,EAAE,CAAC,CAAA,CAAC;QACzF,IAAI,CAAC;YAAC,MAAM,IAAA,WAAM,EAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,mBAAmB,CAAC,CAAC,CAAA;QAAC,CAAC;QAAC,OAAO,CAAM,EAAE,CAAC,CAAA,CAAC;QAC3F,IAAI,CAAC;YAAC,MAAM,IAAA,WAAM,EAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,uBAAuB,CAAC,CAAC,CAAA;QAAC,CAAC;QAAC,OAAO,CAAM,EAAE,CAAC,CAAA,CAAC;QAC/F,IAAI,CAAC;YAAC,MAAM,IAAA,WAAM,EAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,iBAAiB,CAAC,CAAC,CAAA;QAAC,CAAC;QAAC,OAAO,CAAM,EAAE,CAAC,CAAA,CAAC;QACzF,IAAI,CAAC;YAAC,MAAM,IAAA,WAAM,EAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,qBAAqB,CAAC,CAAC,CAAA;QAAC,CAAC;QAAC,OAAO,CAAM,EAAE,CAAC,CAAA,CAAC;QAE7F,qGAAqG;QACrG,uEAAuE;QACvE,qEAAqE;QAErE,wDAAwD;QACxD,MAAM,EAAE,CAAC,SAAS,CAAC,YAAY,CAAC,CAAA;QAEhC,qCAAqC;QACrC,+BAA+B;QAC/B,IAAI,UAAU,GAAa,EAAE,CAAA;QAC7B,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAA;YAC1F,UAAU,GAAG,MAAM,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAA;YAC9C,+DAA+D;QACjE,CAAC;QAAC,OAAO,CAAM,EAAE,CAAC;YAChB,qEAAqE;QACvE,CAAC;QAED,2CAA2C;QAC3C,MAAM,IAAA,iCAAgB,EAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE;YAClD,MAAM,OAAO,GAAG,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;YAClD,IAAI,KAAK,CAAC,WAAW,EAAE,IAAI,WAAW,EAAE,CAAC;gBACvC,EAAE,CAAC,SAAS,CAAC,YAAY,GAAG,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;YAC3D,CAAC;iBAAM,CAAC;gBACN,IACE,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,WAAW,CAAC;oBAC1C,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,QAAQ,CAAC,EAC5C,CAAC;oBACD,kFAAkF;oBAClF,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;wBAC/C,4CAA4C;wBAC5C,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,CAAA,CAAC,sCAAsC;oBAC1F,CAAC;gBACH,CAAC;YACH,CAAC;YACD,OAAO,KAAK,CAAA;QACd,CAAC,CAAC,CAAA;QACF,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;QAC5D,sEAAsE;QACtE,kFAAkF;QAElF,MAAM,IAAA,mBAAW,EAAC,mBAAmB,EAAE,UAAU,CAAC,CAAA;QAClD,0BAA0B;QAC1B,OAAO,UAAU,CAAA;IACnB,CAAC;CAAA;AAxED,0CAwEC"}
|
|
Binary file
|
|
Binary file
|
|
Binary file
|