@goldstack/utils-aws-lambda 0.1.3 → 0.1.7
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 +36 -1
- package/dist/src/generate/generateFunctionName.d.ts +6 -0
- package/dist/src/generate/generateFunctionName.d.ts.map +1 -0
- package/dist/src/generate/generateFunctionName.js +57 -0
- package/dist/src/generate/generateFunctionName.js.map +1 -0
- package/dist/src/utilsAwsLambda.d.ts +1 -0
- package/dist/src/utilsAwsLambda.d.ts.map +1 -1
- package/dist/src/utilsAwsLambda.js +3 -1
- package/dist/src/utilsAwsLambda.js.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -1,3 +1,38 @@
|
|
|
1
1
|
# Goldstack AWS Lambda Tools
|
|
2
2
|
|
|
3
|
-
This library provides a simple wrapper around the AWS CLI to deploy Lambdas.
|
|
3
|
+
This library provides a simple wrapper around the AWS CLI to deploy Lambdas and define Lambda infrastructure.
|
|
4
|
+
|
|
5
|
+
## deployFunction
|
|
6
|
+
|
|
7
|
+
This function will deploy an AWS lambda. Note this function will either need Docker to be available locally or the AWS cli.
|
|
8
|
+
|
|
9
|
+
```typescript
|
|
10
|
+
interface DeployFunctionParams {
|
|
11
|
+
lambdaPackageDir: string;
|
|
12
|
+
targetArchiveName?: string;
|
|
13
|
+
awsCredentials: AWS.Credentials;
|
|
14
|
+
region: string;
|
|
15
|
+
functionName: string;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
function async deployFunction(
|
|
19
|
+
params: DeployFunctionParams
|
|
20
|
+
): Promise<any> {}
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## readLambdaConfig
|
|
24
|
+
|
|
25
|
+
This function will generate a configuration for AWS HTTP API Gateway based on `.ts` files in a folder. For more information, see [Goldstack Documentation - Defining Routes](https://docs.goldstack.party/docs/modules/lambda-api#defining-routes-1)
|
|
26
|
+
|
|
27
|
+
```typescript
|
|
28
|
+
export interface LambdaConfig {
|
|
29
|
+
name: string;
|
|
30
|
+
type: RouteType;
|
|
31
|
+
absoluteFilePath: string;
|
|
32
|
+
relativeFilePath: string;
|
|
33
|
+
path: string;
|
|
34
|
+
route: string;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
function readLambdaConfig(dir: string): LambdaConfig[] {}
|
|
38
|
+
```
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { LambdaConfig } from './collectLambdasFromFiles';
|
|
2
|
+
/**
|
|
3
|
+
* Generates a valid function name for a route
|
|
4
|
+
*/
|
|
5
|
+
export declare const generateFunctionName: (prefix: string | undefined, config: LambdaConfig) => string;
|
|
6
|
+
//# sourceMappingURL=generateFunctionName.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generateFunctionName.d.ts","sourceRoot":"","sources":["../../../src/generate/generateFunctionName.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAgBzD;;GAEG;AACH,eAAO,MAAM,oBAAoB,WACvB,MAAM,GAAG,SAAS,UAClB,YAAY,KACnB,MAoCF,CAAC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
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.generateFunctionName = void 0;
|
|
7
|
+
const crypto_1 = __importDefault(require("crypto"));
|
|
8
|
+
const INDEX_MARKER = '__index';
|
|
9
|
+
const DEFAULT_MARKER = '__default';
|
|
10
|
+
const santiseFunctionName = (input) => {
|
|
11
|
+
return input
|
|
12
|
+
.replace(/\//g, '-')
|
|
13
|
+
.replace(/\$/g, '_')
|
|
14
|
+
.replace(/\{/g, '_')
|
|
15
|
+
.replace(/\}/g, '_')
|
|
16
|
+
.replace(/\+/g, '_')
|
|
17
|
+
.replace(/[^\w\-_]/gi, '_');
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Generates a valid function name for a route
|
|
21
|
+
*/
|
|
22
|
+
const generateFunctionName = (prefix, config) => {
|
|
23
|
+
let name = config.name;
|
|
24
|
+
if (name === '$default') {
|
|
25
|
+
// '$' is not a valid character in a lambda function name
|
|
26
|
+
name = DEFAULT_MARKER;
|
|
27
|
+
}
|
|
28
|
+
if (name === '$index') {
|
|
29
|
+
name = INDEX_MARKER;
|
|
30
|
+
}
|
|
31
|
+
name = santiseFunctionName(name);
|
|
32
|
+
let pathPrefix = '';
|
|
33
|
+
const segments = config.path.split('/');
|
|
34
|
+
if (segments.length === 2 && name === INDEX_MARKER) {
|
|
35
|
+
pathPrefix = `${segments[1]}-`;
|
|
36
|
+
}
|
|
37
|
+
if (segments.length > 2) {
|
|
38
|
+
segments.shift(); // remove first element since path starts with '/' and thus the first element is always ''
|
|
39
|
+
segments.pop(); // remove the last element since that is the name of the function in the route
|
|
40
|
+
pathPrefix = santiseFunctionName(segments.join('-'));
|
|
41
|
+
pathPrefix = `${pathPrefix}-`;
|
|
42
|
+
}
|
|
43
|
+
name = `${pathPrefix}${name}`;
|
|
44
|
+
name = (`${prefix}-` || '') + name;
|
|
45
|
+
// Lambda names cannot be larger than 64 characters
|
|
46
|
+
// in that case shorten name and append a hash
|
|
47
|
+
if (name.length > 64) {
|
|
48
|
+
name = `${name.substring(0, 40)}-${crypto_1.default
|
|
49
|
+
.createHash('md5')
|
|
50
|
+
.update(name)
|
|
51
|
+
.digest('hex')
|
|
52
|
+
.substring(0, 20)}`;
|
|
53
|
+
}
|
|
54
|
+
return name;
|
|
55
|
+
};
|
|
56
|
+
exports.generateFunctionName = generateFunctionName;
|
|
57
|
+
//# sourceMappingURL=generateFunctionName.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generateFunctionName.js","sourceRoot":"","sources":["../../../src/generate/generateFunctionName.ts"],"names":[],"mappings":";;;;;;AACA,oDAA4B;AAE5B,MAAM,YAAY,GAAG,SAAS,CAAC;AAC/B,MAAM,cAAc,GAAG,WAAW,CAAC;AAEnC,MAAM,mBAAmB,GAAG,CAAC,KAAa,EAAU,EAAE;IACpD,OAAO,KAAK;SACT,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;SACnB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;SACnB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;SACnB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;SACnB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;SACnB,OAAO,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;AAChC,CAAC,CAAC;AAEF;;GAEG;AACI,MAAM,oBAAoB,GAAG,CAClC,MAA0B,EAC1B,MAAoB,EACZ,EAAE;IACV,IAAI,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;IACvB,IAAI,IAAI,KAAK,UAAU,EAAE;QACvB,yDAAyD;QACzD,IAAI,GAAG,cAAc,CAAC;KACvB;IACD,IAAI,IAAI,KAAK,QAAQ,EAAE;QACrB,IAAI,GAAG,YAAY,CAAC;KACrB;IACD,IAAI,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAEjC,IAAI,UAAU,GAAG,EAAE,CAAC;IACpB,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACxC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,KAAK,YAAY,EAAE;QAClD,UAAU,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC;KAChC;IACD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;QACvB,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,0FAA0F;QAC5G,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,8EAA8E;QAC9F,UAAU,GAAG,mBAAmB,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QACrD,UAAU,GAAG,GAAG,UAAU,GAAG,CAAC;KAC/B;IAED,IAAI,GAAG,GAAG,UAAU,GAAG,IAAI,EAAE,CAAC;IAC9B,IAAI,GAAG,CAAC,GAAG,MAAM,GAAG,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;IAEnC,mDAAmD;IACnD,8CAA8C;IAC9C,IAAI,IAAI,CAAC,MAAM,GAAG,EAAE,EAAE;QACpB,IAAI,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,gBAAM;aACtC,UAAU,CAAC,KAAK,CAAC;aACjB,MAAM,CAAC,IAAI,CAAC;aACZ,MAAM,CAAC,KAAK,CAAC;aACb,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;KACvB;IACD,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAvCW,QAAA,oBAAoB,wBAuC/B"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export { readLambdaConfig } from './generate/collectLambdasFromFiles';
|
|
2
|
+
export { generateFunctionName } from './generate/generateFunctionName';
|
|
2
3
|
export type { LambdaConfig } from './generate/collectLambdasFromFiles';
|
|
3
4
|
import AWS from 'aws-sdk';
|
|
4
5
|
export interface DeployFunctionParams {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utilsAwsLambda.d.ts","sourceRoot":"","sources":["../../src/utilsAwsLambda.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AAEtE,YAAY,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAEvE,OAAO,GAAG,MAAM,SAAS,CAAC;AAE1B,MAAM,WAAW,oBAAoB;IACnC,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,cAAc,EAAE,GAAG,CAAC,WAAW,CAAC;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,eAAO,MAAM,cAAc,WACjB,oBAAoB,KAC3B,QAAQ,GAAG,CA2Cb,CAAC"}
|
|
1
|
+
{"version":3,"file":"utilsAwsLambda.d.ts","sourceRoot":"","sources":["../../src/utilsAwsLambda.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AAEtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AAEvE,YAAY,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAEvE,OAAO,GAAG,MAAM,SAAS,CAAC;AAE1B,MAAM,WAAW,oBAAoB;IACnC,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,cAAc,EAAE,GAAG,CAAC,WAAW,CAAC;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,eAAO,MAAM,cAAc,WACjB,oBAAoB,KAC3B,QAAQ,GAAG,CA2Cb,CAAC"}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.deployFunction = exports.readLambdaConfig = void 0;
|
|
3
|
+
exports.deployFunction = exports.generateFunctionName = exports.readLambdaConfig = void 0;
|
|
4
4
|
const utils_aws_cli_1 = require("@goldstack/utils-aws-cli");
|
|
5
5
|
const utils_sh_1 = require("@goldstack/utils-sh");
|
|
6
6
|
var collectLambdasFromFiles_1 = require("./generate/collectLambdasFromFiles");
|
|
7
7
|
Object.defineProperty(exports, "readLambdaConfig", { enumerable: true, get: function () { return collectLambdasFromFiles_1.readLambdaConfig; } });
|
|
8
|
+
var generateFunctionName_1 = require("./generate/generateFunctionName");
|
|
9
|
+
Object.defineProperty(exports, "generateFunctionName", { enumerable: true, get: function () { return generateFunctionName_1.generateFunctionName; } });
|
|
8
10
|
const deployFunction = async (params) => {
|
|
9
11
|
const targetArchive = params.targetArchiveName || `lambda-${new Date().getTime()}.zip`;
|
|
10
12
|
await (0, utils_sh_1.rmSafe)(targetArchive);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utilsAwsLambda.js","sourceRoot":"","sources":["../../src/utilsAwsLambda.ts"],"names":[],"mappings":";;;AAAA,4DAAkD;AAClD,kDAAkD;AAElD,8EAAsE;AAA7D,2HAAA,gBAAgB,OAAA;
|
|
1
|
+
{"version":3,"file":"utilsAwsLambda.js","sourceRoot":"","sources":["../../src/utilsAwsLambda.ts"],"names":[],"mappings":";;;AAAA,4DAAkD;AAClD,kDAAkD;AAElD,8EAAsE;AAA7D,2HAAA,gBAAgB,OAAA;AAEzB,wEAAuE;AAA9D,4HAAA,oBAAoB,OAAA;AActB,MAAM,cAAc,GAAG,KAAK,EACjC,MAA4B,EACd,EAAE;IAChB,MAAM,aAAa,GACjB,MAAM,CAAC,iBAAiB,IAAI,UAAU,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC;IAEnE,MAAM,IAAA,iBAAM,EAAC,aAAa,CAAC,CAAC;IAC5B,MAAM,IAAA,cAAG,EAAC;QACR,SAAS,EAAE,MAAM,CAAC,gBAAgB;QAClC,MAAM,EAAE,aAAa;QACrB,IAAI,EAAE,GAAG;KACV,CAAC,CAAC;IAEH,MAAM,YAAY,GAAG,MAAM,IAAA,sBAAM,EAAC;QAChC,WAAW,EAAE,MAAM,CAAC,cAAc;QAClC,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,OAAO,EAAE;YACP,MAAM,EAAE,IAAI;SACb;QACD,OAAO,EAAE,+CAA+C,MAAM,CAAC,YAAY,uBAAuB,aAAa,EAAE;KAClH,CAAC,CAAC;IACH,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE;QAC7B,MAAM,IAAA,iBAAM,EAAC,aAAa,CAAC,CAAC;KAC7B;IAED,mCAAmC;IACnC,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,KAAK,GAAG,EAAE,CAAC;IACf,OAAO,OAAO,GAAG,EAAE,IAAI,KAAK,KAAK,QAAQ,EAAE;QACzC,MAAM,GAAG,GAAG,MAAM,IAAA,sBAAM,EAAC;YACvB,WAAW,EAAE,MAAM,CAAC,cAAc;YAClC,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,OAAO,EAAE;gBACP,MAAM,EAAE,IAAI;aACb;YACD,OAAO,EAAE,uCAAuC,MAAM,CAAC,YAAY,EAAE;SACtE,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC7B,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;QACjC,OAAO,EAAE,CAAC;KACX;IACD,IAAI,OAAO,IAAI,EAAE,EAAE;QACjB,MAAM,IAAI,KAAK,CAAC,gCAAgC,KAAK,oBAAoB,CAAC,CAAC;KAC5E;IACD,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;AAClC,CAAC,CAAC;AA7CW,QAAA,cAAc,kBA6CzB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@goldstack/utils-aws-lambda",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.7",
|
|
4
4
|
"description": "Utilities for deploying AWS Lambda functions",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"goldstack",
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
"version:apply:force": "yarn version $@ && yarn version apply"
|
|
43
43
|
},
|
|
44
44
|
"dependencies": {
|
|
45
|
-
"@goldstack/utils-aws-cli": "0.3.
|
|
45
|
+
"@goldstack/utils-aws-cli": "0.3.36",
|
|
46
46
|
"@goldstack/utils-log": "0.2.9",
|
|
47
47
|
"@goldstack/utils-sh": "0.4.22",
|
|
48
48
|
"aws-sdk": "2.1001.0"
|