skuba 8.1.0-test-20240430085832 → 8.1.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/lib/api/git/index.d.ts +1 -0
- package/lib/api/git/index.js +3 -0
- package/lib/api/git/index.js.map +2 -2
- package/lib/api/git/isFileGitIgnored.d.ts +4 -0
- package/lib/api/git/isFileGitIgnored.js +49 -0
- package/lib/api/git/isFileGitIgnored.js.map +7 -0
- package/lib/api/git/pull.js.map +2 -2
- package/lib/api/git/push.d.ts +10 -1
- package/lib/api/git/push.js.map +2 -2
- package/lib/api/github/environment.d.ts +0 -1
- package/lib/api/github/push.d.ts +7 -1
- package/lib/api/github/push.js.map +2 -2
- package/lib/api/jest/index.d.ts +1 -1
- package/lib/cli/adapter/eslint.d.ts +1 -1
- package/lib/cli/adapter/prettier.d.ts +2 -2
- package/lib/cli/configure/ensureTemplateCompletion.js +18 -2
- package/lib/cli/configure/ensureTemplateCompletion.js.map +2 -2
- package/lib/cli/configure/index.js +6 -3
- package/lib/cli/configure/index.js.map +2 -2
- package/lib/cli/configure/processing/configFile.d.ts +1 -1
- package/lib/cli/configure/processing/package.d.ts +56 -58
- package/lib/cli/init/getConfig.d.ts +2 -1
- package/lib/cli/init/getConfig.js +7 -1
- package/lib/cli/init/getConfig.js.map +2 -2
- package/lib/cli/init/index.js +15 -1
- package/lib/cli/init/index.js.map +2 -2
- package/lib/cli/init/prompts.d.ts +0 -1
- package/lib/cli/init/types.d.ts +22 -5
- package/lib/cli/lint/external.d.ts +0 -2
- package/lib/cli/lint/index.d.ts +0 -1
- package/lib/cli/lint/internal.d.ts +1 -1
- package/lib/cli/lint/internalLints/noSkubaTemplateJs.d.ts +1 -1
- package/lib/cli/lint/internalLints/patchRenovateConfig.d.ts +1 -1
- package/lib/cli/lint/internalLints/patchRenovateConfig.js +4 -1
- package/lib/cli/lint/internalLints/patchRenovateConfig.js.map +2 -2
- package/lib/cli/lint/internalLints/refreshConfigFiles.d.ts +2 -2
- package/lib/cli/lint/internalLints/refreshConfigFiles.js +14 -3
- package/lib/cli/lint/internalLints/refreshConfigFiles.js.map +2 -2
- package/lib/cli/lint/internalLints/upgrade/index.d.ts +10 -2
- package/lib/cli/lint/internalLints/upgrade/index.js +15 -5
- package/lib/cli/lint/internalLints/upgrade/index.js.map +2 -2
- package/lib/cli/lint/internalLints/upgrade/patches/7.3.1/addEmptyExports.js +1 -1
- package/lib/cli/lint/internalLints/upgrade/patches/7.3.1/addEmptyExports.js.map +2 -2
- package/lib/cli/lint/internalLints/upgrade/patches/7.3.1/moveNpmrcOutOfIgnoreManagedSection.d.ts +1 -1
- package/lib/cli/lint/internalLints/upgrade/patches/7.3.1/moveNpmrcOutOfIgnoreManagedSection.js +1 -1
- package/lib/cli/lint/internalLints/upgrade/patches/7.3.1/moveNpmrcOutOfIgnoreManagedSection.js.map +2 -2
- package/lib/cli/lint/internalLints/upgrade/patches/7.3.1/patchDockerfile.js +4 -1
- package/lib/cli/lint/internalLints/upgrade/patches/7.3.1/patchDockerfile.js.map +2 -2
- package/lib/cli/lint/internalLints/upgrade/patches/7.3.1/patchServerListener.js +4 -1
- package/lib/cli/lint/internalLints/upgrade/patches/7.3.1/patchServerListener.js.map +2 -2
- package/lib/cli/lint/internalLints/upgrade/patches/8.0.0/index.d.ts +2 -0
- package/lib/cli/lint/internalLints/upgrade/patches/8.0.0/index.js +35 -0
- package/lib/cli/lint/internalLints/upgrade/patches/8.0.0/index.js.map +7 -0
- package/lib/cli/lint/internalLints/upgrade/patches/8.0.0/patchPnpmPackageManager.d.ts +2 -0
- package/lib/cli/lint/internalLints/upgrade/patches/8.0.0/patchPnpmPackageManager.js +147 -0
- package/lib/cli/lint/internalLints/upgrade/patches/8.0.0/patchPnpmPackageManager.js.map +7 -0
- package/lib/cli/lint/types.d.ts +0 -1
- package/lib/utils/args.d.ts +0 -1
- package/lib/utils/copy.d.ts +1 -1
- package/lib/utils/env.d.ts +0 -1
- package/lib/utils/error.d.ts +0 -1
- package/lib/utils/exec.d.ts +0 -1
- package/lib/utils/template.d.ts +3 -3
- package/lib/wrapper/http.d.ts +0 -1
- package/package.json +21 -20
- package/template/base/.vscode/extensions.json +3 -0
- package/template/base/_.gitignore +1 -0
- package/template/express-rest-api/.gantry/dev.yml +0 -2
- package/template/express-rest-api/.gantry/prod.yml +0 -2
- package/template/express-rest-api/Dockerfile.dev-deps +1 -1
- package/template/express-rest-api/docker-compose.yml +0 -2
- package/template/express-rest-api/gantry.apply.yml +0 -7
- package/template/express-rest-api/package.json +5 -2
- package/template/express-rest-api/src/config.ts +14 -6
- package/template/express-rest-api/src/framework/logging.ts +1 -1
- package/template/express-rest-api/src/framework/metrics.ts +11 -0
- package/template/express-rest-api/src/listen.ts +2 -2
- package/template/greeter/Dockerfile +1 -1
- package/template/greeter/docker-compose.yml +0 -2
- package/template/greeter/package.json +2 -1
- package/template/koa-rest-api/.gantry/dev.yml +0 -2
- package/template/koa-rest-api/.gantry/prod.yml +0 -2
- package/template/koa-rest-api/Dockerfile.dev-deps +1 -1
- package/template/koa-rest-api/docker-compose.yml +0 -2
- package/template/koa-rest-api/gantry.apply.yml +0 -7
- package/template/koa-rest-api/package.json +12 -12
- package/template/koa-rest-api/src/config.ts +14 -4
- package/template/lambda-sqs-worker/Dockerfile +1 -1
- package/template/lambda-sqs-worker/docker-compose.yml +0 -2
- package/template/lambda-sqs-worker/package.json +3 -2
- package/template/lambda-sqs-worker/src/config.ts +9 -4
- package/template/lambda-sqs-worker-cdk/Dockerfile +1 -1
- package/template/lambda-sqs-worker-cdk/docker-compose.yml +0 -2
- package/template/lambda-sqs-worker-cdk/infra/__snapshots__/appStack.test.ts.snap +12 -0
- package/template/lambda-sqs-worker-cdk/infra/config.ts +14 -6
- package/template/lambda-sqs-worker-cdk/package.json +4 -1
- package/template/lambda-sqs-worker-cdk/src/app.ts +14 -2
- package/template/lambda-sqs-worker-cdk/src/config.ts +47 -0
- package/template/oss-npm-package/.github/workflows/validate.yml +1 -0
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { StatsD } from 'hot-shots';
|
|
2
|
+
import { createStatsDClient } from 'seek-datadog-custom-metrics';
|
|
3
|
+
|
|
4
|
+
import { config } from 'src/config';
|
|
5
|
+
|
|
6
|
+
import { logger } from './logging';
|
|
7
|
+
|
|
8
|
+
/* istanbul ignore next: StatsD client is not our responsibility */
|
|
9
|
+
export const metricsClient = createStatsDClient(StatsD, config, (err) =>
|
|
10
|
+
logger.error({ err }, 'StatsD error'),
|
|
11
|
+
);
|
|
@@ -2,7 +2,7 @@ import './register';
|
|
|
2
2
|
|
|
3
3
|
import app from './app';
|
|
4
4
|
import { config } from './config';
|
|
5
|
-
import {
|
|
5
|
+
import { logger } from './framework/logging';
|
|
6
6
|
|
|
7
7
|
// If your application is deployed with more than 1 vCPU you can delete this
|
|
8
8
|
// file and use a clustering utility to run `lib/app`.
|
|
@@ -11,7 +11,7 @@ const listener = app.listen(config.port, () => {
|
|
|
11
11
|
const address = listener.address();
|
|
12
12
|
|
|
13
13
|
if (typeof address === 'object' && address) {
|
|
14
|
-
|
|
14
|
+
logger.debug(`listening on port ${address.port}`);
|
|
15
15
|
}
|
|
16
16
|
});
|
|
17
17
|
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
+
"name": "@seek/greeter",
|
|
2
3
|
"private": true,
|
|
3
4
|
"license": "UNLICENSED",
|
|
4
5
|
"scripts": {
|
|
@@ -18,7 +19,7 @@
|
|
|
18
19
|
"@types/node": "^20.9.0",
|
|
19
20
|
"skuba": "*"
|
|
20
21
|
},
|
|
21
|
-
"packageManager": "pnpm@9.0
|
|
22
|
+
"packageManager": "pnpm@9.4.0",
|
|
22
23
|
"engines": {
|
|
23
24
|
"node": ">=20"
|
|
24
25
|
}
|
|
@@ -9,17 +9,10 @@ owner: '{{values "owner"}}'
|
|
|
9
9
|
image: '{{values "image"}}'
|
|
10
10
|
|
|
11
11
|
env:
|
|
12
|
-
# https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/node-reusing-connections.html
|
|
13
|
-
AWS_NODEJS_CONNECTION_REUSE_ENABLED: '1'
|
|
14
|
-
|
|
15
12
|
ENVIRONMENT: '{{values "environment"}}'
|
|
16
13
|
OPENTELEMETRY_ENABLED: '{{.Values.openTelemetry.enabled | default false}}'
|
|
17
14
|
SERVICE: '{{values "service"}}'
|
|
18
15
|
|
|
19
|
-
{{range $key, $value := .Values.env}}
|
|
20
|
-
{{$key}}: {{$value}}
|
|
21
|
-
{{end}}
|
|
22
|
-
|
|
23
16
|
{{if .Values.cloudwatchDashboardDisabled}}
|
|
24
17
|
cloudwatchDashboardDisabled: {{values "cloudwatchDashboardDisabled"}}
|
|
25
18
|
{{end}}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
+
"name": "@seek/<%- serviceName %>",
|
|
2
3
|
"private": true,
|
|
3
4
|
"license": "UNLICENSED",
|
|
4
5
|
"scripts": {
|
|
@@ -13,20 +14,19 @@
|
|
|
13
14
|
},
|
|
14
15
|
"dependencies": {
|
|
15
16
|
"@koa/router": "^12.0.0",
|
|
16
|
-
"@opentelemetry/api": "^1.
|
|
17
|
-
"@opentelemetry/core": "^1.
|
|
18
|
-
"@opentelemetry/exporter-trace-otlp-grpc": "^0.
|
|
19
|
-
"@opentelemetry/instrumentation-aws-sdk": "^0.
|
|
20
|
-
"@opentelemetry/instrumentation-http": "^0.
|
|
21
|
-
"@opentelemetry/propagator-b3": "^1.
|
|
22
|
-
"@opentelemetry/sdk-node": "^0.
|
|
17
|
+
"@opentelemetry/api": "^1.9.0",
|
|
18
|
+
"@opentelemetry/core": "^1.25.0",
|
|
19
|
+
"@opentelemetry/exporter-trace-otlp-grpc": "^0.52.0",
|
|
20
|
+
"@opentelemetry/instrumentation-aws-sdk": "^0.42.0",
|
|
21
|
+
"@opentelemetry/instrumentation-http": "^0.52.0",
|
|
22
|
+
"@opentelemetry/propagator-b3": "^1.25.0",
|
|
23
|
+
"@opentelemetry/sdk-node": "^0.52.0",
|
|
23
24
|
"@seek/logger": "^6.0.0",
|
|
24
|
-
"aws-sdk": "^2.1039.0",
|
|
25
25
|
"hot-shots": "^10.0.0",
|
|
26
26
|
"koa": "^2.13.4",
|
|
27
27
|
"koa-bodyparser": "^4.3.0",
|
|
28
|
-
"koa-compose": "^4.
|
|
29
|
-
"seek-datadog-custom-metrics": "^4.
|
|
28
|
+
"koa-compose": "^4.1.0",
|
|
29
|
+
"seek-datadog-custom-metrics": "^4.6.3",
|
|
30
30
|
"seek-koala": "^7.0.0",
|
|
31
31
|
"skuba-dive": "^2.0.0",
|
|
32
32
|
"zod": "^3.19.1"
|
|
@@ -42,9 +42,9 @@
|
|
|
42
42
|
"mime": "^4.0.1",
|
|
43
43
|
"pino-pretty": "^11.0.0",
|
|
44
44
|
"skuba": "*",
|
|
45
|
-
"supertest": "^
|
|
45
|
+
"supertest": "^7.0.0"
|
|
46
46
|
},
|
|
47
|
-
"packageManager": "pnpm@9.0
|
|
47
|
+
"packageManager": "pnpm@9.4.0",
|
|
48
48
|
"engines": {
|
|
49
49
|
"node": ">=20"
|
|
50
50
|
}
|
|
@@ -7,8 +7,8 @@ interface Config {
|
|
|
7
7
|
name: string;
|
|
8
8
|
version: string;
|
|
9
9
|
|
|
10
|
-
metricsServer
|
|
11
|
-
port
|
|
10
|
+
metricsServer: string | null;
|
|
11
|
+
port: number | null;
|
|
12
12
|
}
|
|
13
13
|
|
|
14
14
|
type Environment = (typeof environments)[number];
|
|
@@ -26,19 +26,29 @@ const configs: Record<Environment, () => Omit<Config, 'environment'>> = {
|
|
|
26
26
|
logLevel: 'debug',
|
|
27
27
|
name: '<%- serviceName %>',
|
|
28
28
|
version: 'local',
|
|
29
|
+
|
|
30
|
+
metricsServer: null,
|
|
31
|
+
port: null,
|
|
29
32
|
}),
|
|
30
33
|
|
|
31
34
|
test: () => ({
|
|
32
|
-
...configs.local(),
|
|
33
|
-
|
|
34
35
|
logLevel: Env.string('LOG_LEVEL', { default: 'silent' }),
|
|
36
|
+
name: '<%- serviceName %>',
|
|
35
37
|
version: 'test',
|
|
38
|
+
|
|
39
|
+
metricsServer: null,
|
|
40
|
+
port: null,
|
|
36
41
|
}),
|
|
37
42
|
|
|
38
43
|
[dev]: () => ({
|
|
39
44
|
...configs[prod](),
|
|
40
45
|
|
|
41
46
|
logLevel: 'debug',
|
|
47
|
+
name: Env.string('SERVICE'),
|
|
48
|
+
version: Env.string('VERSION'),
|
|
49
|
+
|
|
50
|
+
metricsServer: 'localhost',
|
|
51
|
+
port: Env.nonNegativeInteger('PORT'),
|
|
42
52
|
}),
|
|
43
53
|
|
|
44
54
|
[prod]: () => ({
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
+
"name": "@seek/<%- serviceName %>",
|
|
2
3
|
"private": true,
|
|
3
4
|
"license": "UNLICENSED",
|
|
4
5
|
"scripts": {
|
|
@@ -31,13 +32,13 @@
|
|
|
31
32
|
"aws-sdk-client-mock-jest": "^4.0.0",
|
|
32
33
|
"chance": "^1.1.8",
|
|
33
34
|
"pino-pretty": "^11.0.0",
|
|
34
|
-
"serverless": "^3.
|
|
35
|
+
"serverless": "^3.39.0",
|
|
35
36
|
"serverless-plugin-canary-deployments": "^0.8.0",
|
|
36
37
|
"serverless-plugin-datadog": "^5.12.0",
|
|
37
38
|
"serverless-prune-plugin": "^2.0.0",
|
|
38
39
|
"skuba": "*"
|
|
39
40
|
},
|
|
40
|
-
"packageManager": "pnpm@9.0
|
|
41
|
+
"packageManager": "pnpm@9.4.0",
|
|
41
42
|
"engines": {
|
|
42
43
|
"node": ">=20"
|
|
43
44
|
}
|
|
@@ -29,16 +29,21 @@ const configs: Record<Environment, () => Omit<Config, 'environment'>> = {
|
|
|
29
29
|
}),
|
|
30
30
|
|
|
31
31
|
test: () => ({
|
|
32
|
-
...configs.local(),
|
|
33
|
-
|
|
34
32
|
logLevel: Env.string('LOG_LEVEL', { default: 'silent' }),
|
|
33
|
+
metrics: false,
|
|
34
|
+
name: '<%- serviceName %>',
|
|
35
35
|
version: 'test',
|
|
36
|
+
|
|
37
|
+
destinationSnsTopicArn: 'arn:aws:sns:us-east-2:123456789012:destination',
|
|
36
38
|
}),
|
|
37
39
|
|
|
38
40
|
dev: () => ({
|
|
39
|
-
...configs.prod(),
|
|
40
|
-
|
|
41
41
|
logLevel: 'debug',
|
|
42
|
+
metrics: true,
|
|
43
|
+
name: Env.string('SERVICE'),
|
|
44
|
+
version: Env.string('VERSION'),
|
|
45
|
+
|
|
46
|
+
destinationSnsTopicArn: Env.string('DESTINATION_SNS_TOPIC_ARN'),
|
|
42
47
|
}),
|
|
43
48
|
|
|
44
49
|
prod: () => ({
|
|
@@ -451,6 +451,8 @@ exports[`returns expected CloudFormation stack for dev 1`] = `
|
|
|
451
451
|
"ENVIRONMENT": "dev",
|
|
452
452
|
"NODE_ENV": "production",
|
|
453
453
|
"NODE_OPTIONS": "--enable-source-maps",
|
|
454
|
+
"SERVICE": "serviceName",
|
|
455
|
+
"VERSION": "local",
|
|
454
456
|
},
|
|
455
457
|
},
|
|
456
458
|
"FunctionName": "serviceName",
|
|
@@ -644,6 +646,8 @@ exports[`returns expected CloudFormation stack for dev 1`] = `
|
|
|
644
646
|
},
|
|
645
647
|
"NODE_ENV": "production",
|
|
646
648
|
"NODE_OPTIONS": "--enable-source-maps",
|
|
649
|
+
"SERVICE": "serviceName",
|
|
650
|
+
"VERSION": "local",
|
|
647
651
|
},
|
|
648
652
|
},
|
|
649
653
|
"FunctionName": "serviceName-post-hook",
|
|
@@ -796,6 +800,8 @@ exports[`returns expected CloudFormation stack for dev 1`] = `
|
|
|
796
800
|
},
|
|
797
801
|
"NODE_ENV": "production",
|
|
798
802
|
"NODE_OPTIONS": "--enable-source-maps",
|
|
803
|
+
"SERVICE": "serviceName",
|
|
804
|
+
"VERSION": "local",
|
|
799
805
|
},
|
|
800
806
|
},
|
|
801
807
|
"FunctionName": "serviceName-pre-hook",
|
|
@@ -1493,6 +1499,8 @@ exports[`returns expected CloudFormation stack for prod 1`] = `
|
|
|
1493
1499
|
"ENVIRONMENT": "prod",
|
|
1494
1500
|
"NODE_ENV": "production",
|
|
1495
1501
|
"NODE_OPTIONS": "--enable-source-maps",
|
|
1502
|
+
"SERVICE": "serviceName",
|
|
1503
|
+
"VERSION": "local",
|
|
1496
1504
|
},
|
|
1497
1505
|
},
|
|
1498
1506
|
"FunctionName": "serviceName",
|
|
@@ -1686,6 +1694,8 @@ exports[`returns expected CloudFormation stack for prod 1`] = `
|
|
|
1686
1694
|
},
|
|
1687
1695
|
"NODE_ENV": "production",
|
|
1688
1696
|
"NODE_OPTIONS": "--enable-source-maps",
|
|
1697
|
+
"SERVICE": "serviceName",
|
|
1698
|
+
"VERSION": "local",
|
|
1689
1699
|
},
|
|
1690
1700
|
},
|
|
1691
1701
|
"FunctionName": "serviceName-post-hook",
|
|
@@ -1838,6 +1848,8 @@ exports[`returns expected CloudFormation stack for prod 1`] = `
|
|
|
1838
1848
|
},
|
|
1839
1849
|
"NODE_ENV": "production",
|
|
1840
1850
|
"NODE_OPTIONS": "--enable-source-maps",
|
|
1851
|
+
"SERVICE": "serviceName",
|
|
1852
|
+
"VERSION": "local",
|
|
1841
1853
|
},
|
|
1842
1854
|
},
|
|
1843
1855
|
"FunctionName": "serviceName-pre-hook",
|
|
@@ -1,27 +1,33 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Env } from 'skuba-dive';
|
|
2
2
|
|
|
3
|
-
const
|
|
3
|
+
const ENVIRONMENTS = ['dev', 'prod'] as const;
|
|
4
4
|
|
|
5
|
-
type Environment = typeof
|
|
5
|
+
type Environment = (typeof ENVIRONMENTS)[number];
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
const environment = Env.oneOf(ENVIRONMENTS)('ENVIRONMENT');
|
|
8
|
+
|
|
9
|
+
interface Config {
|
|
8
10
|
appName: string;
|
|
9
11
|
workerLambda: {
|
|
10
12
|
reservedConcurrency: number;
|
|
11
13
|
environment: {
|
|
12
14
|
ENVIRONMENT: Environment;
|
|
15
|
+
SERVICE: string;
|
|
16
|
+
VERSION: string;
|
|
13
17
|
};
|
|
14
18
|
};
|
|
15
19
|
sourceSnsTopicArn: string;
|
|
16
20
|
}
|
|
17
21
|
|
|
18
|
-
|
|
22
|
+
const configs: Record<Environment, Config> = {
|
|
19
23
|
dev: {
|
|
20
24
|
appName: '<%- serviceName %>',
|
|
21
25
|
workerLambda: {
|
|
22
26
|
reservedConcurrency: 2,
|
|
23
27
|
environment: {
|
|
24
28
|
ENVIRONMENT: 'dev',
|
|
29
|
+
SERVICE: '<%- serviceName %>',
|
|
30
|
+
VERSION: Env.string('VERSION', { default: 'local' }),
|
|
25
31
|
},
|
|
26
32
|
},
|
|
27
33
|
sourceSnsTopicArn: 'TODO: sourceSnsTopicArn',
|
|
@@ -32,10 +38,12 @@ export const configs: Record<Environment, Config> = {
|
|
|
32
38
|
reservedConcurrency: 20,
|
|
33
39
|
environment: {
|
|
34
40
|
ENVIRONMENT: 'prod',
|
|
41
|
+
SERVICE: '<%- serviceName %>',
|
|
42
|
+
VERSION: Env.string('VERSION', { default: 'local' }),
|
|
35
43
|
},
|
|
36
44
|
},
|
|
37
45
|
sourceSnsTopicArn: 'TODO: sourceSnsTopicArn',
|
|
38
46
|
},
|
|
39
47
|
};
|
|
40
48
|
|
|
41
|
-
export const config = configs[environment];
|
|
49
|
+
export const config: Config = configs[environment];
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
+
"name": "@seek/<%- serviceName %>",
|
|
2
3
|
"private": true,
|
|
3
4
|
"license": "UNLICENSED",
|
|
4
5
|
"scripts": {
|
|
@@ -16,6 +17,7 @@
|
|
|
16
17
|
"@aws-sdk/client-lambda": "^3.363.0",
|
|
17
18
|
"@aws-sdk/client-sns": "^3.363.0",
|
|
18
19
|
"@seek/logger": "^6.0.0",
|
|
20
|
+
"skuba-dive": "^2.0.0",
|
|
19
21
|
"zod": "^3.19.1"
|
|
20
22
|
},
|
|
21
23
|
"devDependencies": {
|
|
@@ -24,9 +26,10 @@
|
|
|
24
26
|
"aws-cdk": "^2.109.0",
|
|
25
27
|
"aws-cdk-lib": "^2.109.0",
|
|
26
28
|
"constructs": "^10.0.17",
|
|
29
|
+
"pino-pretty": "^11.0.0",
|
|
27
30
|
"skuba": "*"
|
|
28
31
|
},
|
|
29
|
-
"packageManager": "pnpm@9.0
|
|
32
|
+
"packageManager": "pnpm@9.4.0",
|
|
30
33
|
"engines": {
|
|
31
34
|
"node": ">=20"
|
|
32
35
|
}
|
|
@@ -1,8 +1,20 @@
|
|
|
1
1
|
import createLogger from '@seek/logger';
|
|
2
2
|
import type { SQSEvent, SQSHandler } from 'aws-lambda';
|
|
3
3
|
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
import { config } from './config';
|
|
5
|
+
|
|
6
|
+
export const logger = createLogger({
|
|
7
|
+
base: {
|
|
8
|
+
environment: config.environment,
|
|
9
|
+
version: config.version,
|
|
10
|
+
},
|
|
11
|
+
|
|
12
|
+
level: config.logLevel,
|
|
13
|
+
|
|
14
|
+
name: config.name,
|
|
15
|
+
|
|
16
|
+
transport:
|
|
17
|
+
config.environment === 'local' ? { target: 'pino-pretty' } : undefined,
|
|
6
18
|
});
|
|
7
19
|
|
|
8
20
|
/**
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { Env } from 'skuba-dive';
|
|
2
|
+
|
|
3
|
+
interface Config {
|
|
4
|
+
environment: Environment;
|
|
5
|
+
|
|
6
|
+
logLevel: string;
|
|
7
|
+
name: string;
|
|
8
|
+
version: string;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
type Environment = (typeof environments)[number];
|
|
12
|
+
|
|
13
|
+
const environments = ['local', 'test', 'dev', 'prod'] as const;
|
|
14
|
+
|
|
15
|
+
const environment = Env.oneOf(environments)('ENVIRONMENT');
|
|
16
|
+
|
|
17
|
+
/* istanbul ignore next: config verification makes more sense in a smoke test */
|
|
18
|
+
const configs: Record<Environment, () => Omit<Config, 'environment'>> = {
|
|
19
|
+
local: () => ({
|
|
20
|
+
logLevel: 'debug',
|
|
21
|
+
name: '<%- serviceName %>',
|
|
22
|
+
version: 'local',
|
|
23
|
+
}),
|
|
24
|
+
|
|
25
|
+
test: () => ({
|
|
26
|
+
logLevel: Env.string('LOG_LEVEL', { default: 'silent' }),
|
|
27
|
+
name: '<%- serviceName %>',
|
|
28
|
+
version: 'test',
|
|
29
|
+
}),
|
|
30
|
+
|
|
31
|
+
dev: () => ({
|
|
32
|
+
logLevel: 'debug',
|
|
33
|
+
name: Env.string('SERVICE'),
|
|
34
|
+
version: Env.string('VERSION'),
|
|
35
|
+
}),
|
|
36
|
+
|
|
37
|
+
prod: () => ({
|
|
38
|
+
logLevel: 'info',
|
|
39
|
+
name: Env.string('SERVICE'),
|
|
40
|
+
version: Env.string('VERSION'),
|
|
41
|
+
}),
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
export const config: Config = {
|
|
45
|
+
...configs[environment](),
|
|
46
|
+
environment,
|
|
47
|
+
};
|