@goldstack/utils-aws-lambda 0.1.2 → 0.1.6

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 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,6 @@
1
- export { readLambdaConfig, LambdaConfig, } from './generate/collectLambdasFromFiles';
1
+ export { readLambdaConfig } from './generate/collectLambdasFromFiles';
2
+ export { generateFunctionName } from './generate/generateFunctionName';
3
+ export type { LambdaConfig } from './generate/collectLambdasFromFiles';
2
4
  import AWS from 'aws-sdk';
3
5
  export interface DeployFunctionParams {
4
6
  lambdaPackageDir: string;
@@ -1 +1 @@
1
- {"version":3,"file":"utilsAwsLambda.d.ts","sourceRoot":"","sources":["../../src/utilsAwsLambda.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,gBAAgB,EAChB,YAAY,GACb,MAAM,oCAAoC,CAAC;AAE5C,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,8EAG4C;AAF1C,2HAAA,gBAAgB,OAAA;AAcX,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"}
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.2",
3
+ "version": "0.1.6",
4
4
  "description": "Utilities for deploying AWS Lambda functions",
5
5
  "keywords": [
6
6
  "goldstack",