From f26b20110a1eee96af353764dd560a9962a3041b Mon Sep 17 00:00:00 2001 From: Andrea Amorosi Date: Fri, 12 May 2023 00:41:41 +0200 Subject: [PATCH 1/2] style(docs): apply standardized formatting --- docs/snippets/.eslintrc.js | 71 +++++++++++++++++++ docs/snippets/logger/appendKeys.ts | 21 +++--- docs/snippets/logger/basicUsage.ts | 2 +- .../logger/bringYourOwnFormatterHandler.ts | 12 ++-- docs/snippets/logger/clearStateDecorator.ts | 13 ++-- docs/snippets/logger/clearStateMiddy.ts | 18 +++-- docs/snippets/logger/createChild.ts | 17 ++--- docs/snippets/logger/decorator.ts | 3 +- docs/snippets/logger/eventDecorator.ts | 3 +- docs/snippets/logger/eventMiddy.ts | 10 ++- docs/snippets/logger/extraData.ts | 30 ++++---- docs/snippets/logger/logError.ts | 13 ++-- docs/snippets/logger/logSampling.ts | 15 ++-- docs/snippets/logger/manual.ts | 6 +- docs/snippets/logger/middy.ts | 8 ++- docs/snippets/logger/sam.ts | 2 +- docs/snippets/logger/unitTesting.ts | 6 +- .../metrics/addHighResolutionMetric.ts | 23 ++++-- docs/snippets/metrics/addMetadata.ts | 19 +++-- docs/snippets/metrics/basicUsage.ts | 12 +++- .../captureColdStartMetricDecorator.ts | 8 ++- .../metrics/captureColdStartMetricMiddy.ts | 21 ++++-- docs/snippets/metrics/createMetrics.ts | 12 +++- docs/snippets/metrics/customDimensions.ts | 12 +++- docs/snippets/metrics/decorator.ts | 8 ++- docs/snippets/metrics/defaultDimensions.ts | 13 ++-- .../metrics/defaultDimensionsDecorator.ts | 9 ++- .../metrics/defaultDimensionsMiddy.ts | 24 +++++-- docs/snippets/metrics/manual.ts | 12 +++- docs/snippets/metrics/middy.ts | 19 +++-- docs/snippets/metrics/multiValueMetrics.ts | 12 +++- docs/snippets/metrics/sam.ts | 2 +- docs/snippets/metrics/setDefaultDimensions.ts | 14 ++-- .../singleMetricDifferentDimsDecorator.ts | 10 +-- .../metrics/singleMetricDifferentDimsMiddy.ts | 19 +++-- docs/snippets/metrics/throwOnEmptyMetrics.ts | 21 ++++-- docs/snippets/package.json | 6 +- docs/snippets/parameters/adjustingCacheTTL.ts | 12 ++-- docs/snippets/parameters/appConfigProvider.ts | 2 +- .../appConfigProviderCustomClient.ts | 6 +- docs/snippets/parameters/clientConfig.ts | 2 +- docs/snippets/parameters/dynamoDBProvider.ts | 2 +- .../dynamoDBProviderCustomClient.ts | 2 +- .../dynamoDBProviderCustomizeTable.ts | 10 +-- .../parameters/dynamoDBProviderLocal.ts | 10 +-- .../parameters/dynamoDBProviderMultiple.ts | 10 +-- docs/snippets/parameters/forceFetch.ts | 2 +- docs/snippets/parameters/getAppConfig.ts | 4 +- docs/snippets/parameters/getParameter.ts | 2 +- docs/snippets/parameters/getParameters.ts | 6 +- .../parameters/getParametersByName.ts | 13 ++-- ...etParametersByNameGracefulErrorHandling.ts | 22 +++--- docs/snippets/parameters/getSecret.ts | 2 +- docs/snippets/parameters/sdkOptions.ts | 4 +- docs/snippets/parameters/secretsProvider.ts | 4 +- .../parameters/secretsProviderCustomClient.ts | 6 +- docs/snippets/parameters/ssmProvider.ts | 4 +- .../parameters/ssmProviderCustomClient.ts | 2 +- .../ssmProviderDecryptAndRecursive.ts | 14 ++-- .../parameters/testingYourCodeClearCache.ts | 4 +- .../testingYourCodeClientHandler.ts | 11 +-- .../testingYourCodeClientJestMock.ts | 13 ++-- .../testingYourCodeFunctionsHandler.ts | 9 ++- .../testingYourCodeFunctionsJestMock.ts | 12 ++-- .../testingYourCodeProvidersHandler.ts | 9 ++- .../testingYourCodeProvidersJestMock.ts | 6 +- docs/snippets/parameters/transform.ts | 6 +- docs/snippets/parameters/transformAuto.ts | 8 ++- .../parameters/transformPartialFailures.ts | 12 ++-- docs/snippets/parameters/transformProvider.ts | 10 ++- docs/snippets/tracer/accessRootTraceId.ts | 10 +-- docs/snippets/tracer/basicUsage.ts | 2 +- docs/snippets/tracer/captureAWS.ts | 2 +- docs/snippets/tracer/captureAWSAll.ts | 2 +- docs/snippets/tracer/captureAWSv3.ts | 2 +- docs/snippets/tracer/captureHTTP.ts | 7 +- .../snippets/tracer/captureMethodDecorator.ts | 4 +- docs/snippets/tracer/captureMethodManual.ts | 8 ++- docs/snippets/tracer/decorator.ts | 4 +- .../tracer/disableCaptureResponseHandler.ts | 2 +- .../tracer/disableCaptureResponseMethod.ts | 2 +- .../tracer/disableCaptureResponseMiddy.ts | 11 +-- docs/snippets/tracer/escapeHatch.ts | 2 +- docs/snippets/tracer/manual.ts | 12 ++-- docs/snippets/tracer/middy.ts | 9 ++- docs/snippets/tracer/putAnnotation.ts | 7 +- docs/snippets/tracer/putMetadata.ts | 10 +-- docs/snippets/tracer/sam.ts | 2 +- docs/snippets/{parameters => }/tsconfig.json | 8 +-- 89 files changed, 562 insertions(+), 311 deletions(-) create mode 100644 docs/snippets/.eslintrc.js rename docs/snippets/{parameters => }/tsconfig.json (82%) diff --git a/docs/snippets/.eslintrc.js b/docs/snippets/.eslintrc.js new file mode 100644 index 0000000000..8e1dd1513f --- /dev/null +++ b/docs/snippets/.eslintrc.js @@ -0,0 +1,71 @@ +module.exports = { + env: { + browser: false, + es2020: true, + jest: true, + node: true, + }, + extends: [ + 'plugin:@typescript-eslint/recommended', + 'plugin:prettier/recommended', + ], + parser: '@typescript-eslint/parser', + plugins: ['@typescript-eslint', 'prettier'], + settings: { + 'import/resolver': { + node: {}, + typescript: { + project: './tsconfig.json', + alwaysTryTypes: true, + }, + }, + }, + rules: { + '@typescript-eslint/explicit-function-return-type': [ + 'error', + { allowExpressions: true }, + ], // Enforce return type definitions for functions + '@typescript-eslint/explicit-member-accessibility': 'error', // Enforce explicit accessibility modifiers on class properties and methods (public, private, protected) + '@typescript-eslint/member-ordering': [ + // Standardize the order of class members + 'error', + { + default: { + memberTypes: [ + 'signature', + 'public-field', + 'protected-field', + 'private-field', + 'constructor', + 'public-method', + 'protected-method', + 'private-method', + ], + order: 'alphabetically', + }, + }, + ], + '@typescript-eslint/no-explicit-any': 'error', // Disallow usage of the any type + '@typescript-eslint/no-unused-vars': ['error', { argsIgnorePattern: '^_' }], // Disallow unused variables, except for variables starting with an underscore + '@typescript-eslint/no-use-before-define': ['off'], // Check if this rule is needed + 'no-unused-vars': 'off', // Disable eslint core rule, since it's replaced by @typescript-eslint/no-unused-vars + // Rules from eslint core https://eslint.org/docs/latest/rules/ + 'array-bracket-spacing': ['error', 'never'], // Disallow spaces inside of array brackets + 'computed-property-spacing': ['error', 'never'], // Disallow spaces inside of computed properties + 'func-style': ['warn', 'expression'], // Enforce function expressions instead of function declarations + 'keyword-spacing': 'error', // Enforce spaces after keywords and before parenthesis, e.g. if (condition) instead of if(condition) + 'padding-line-between-statements': [ + // Require an empty line before return statements + 'error', + { blankLine: 'always', prev: '*', next: 'return' }, + ], + 'no-console': 0, // Allow console.log statements + 'no-multi-spaces': ['error', { ignoreEOLComments: false }], // Disallow multiple spaces except for comments + 'no-multiple-empty-lines': ['error', { max: 1, maxBOF: 0, maxEOF: 0 }], // Enforce no empty line at the beginning & end of files and max 1 empty line between consecutive statements + 'no-throw-literal': 'error', // Disallow throwing literals as exceptions, e.g. throw 'error' instead of throw new Error('error') + 'object-curly-spacing': ['error', 'always'], // Enforce spaces inside of curly braces in objects + 'prefer-arrow-callback': 'error', // Enforce arrow functions instead of anonymous functions for callbacks + quotes: ['error', 'single', { allowTemplateLiterals: true }], // Enforce single quotes except for template strings + semi: ['error', 'always'], // Require semicolons instead of ASI (automatic semicolon insertion) at the end of statements + }, +}; diff --git a/docs/snippets/logger/appendKeys.ts b/docs/snippets/logger/appendKeys.ts index d8d94541b6..ed779dab77 100644 --- a/docs/snippets/logger/appendKeys.ts +++ b/docs/snippets/logger/appendKeys.ts @@ -2,15 +2,15 @@ import { Logger } from '@aws-lambda-powertools/logger'; // Add persistent log keys via the constructor const logger = new Logger({ - persistentLogAttributes: { + persistentLogAttributes: { aws_account_id: '123456789012', aws_region: 'eu-west-1', logger: { name: '@aws-lambda-powertools/logger', version: '0.0.1', }, - extra_key: 'some-value' - } + extra_key: 'some-value', + }, }); // OR add persistent log keys to an existing Logger instance with the appendKeys method: @@ -22,10 +22,12 @@ const logger = new Logger({ // version: '0.0.1', // }, // extra_key: "some-value" -// }); - -export const handler = async (_event: unknown, _context: unknown): Promise => { +// }); +export const handler = async ( + _event: unknown, + _context: unknown +): Promise => { // If you don't want to log the "extra_key" attribute in your logs, you can remove it logger.removeKeys(['extra_key']); @@ -33,9 +35,8 @@ export const handler = async (_event: unknown, _context: unknown): Promise => { logger.info('Hello World'); -}; \ No newline at end of file +}; diff --git a/docs/snippets/logger/bringYourOwnFormatterHandler.ts b/docs/snippets/logger/bringYourOwnFormatterHandler.ts index b565708f9d..c374c4a255 100644 --- a/docs/snippets/logger/bringYourOwnFormatterHandler.ts +++ b/docs/snippets/logger/bringYourOwnFormatterHandler.ts @@ -10,15 +10,15 @@ const logger = new Logger({ awsAccountId: process.env.AWS_ACCOUNT_ID, logger: { name: '@aws-lambda-powertools/logger', - version: '0.0.1' - } + version: '0.0.1', + }, }, }); export const handler = async (event, context): Promise => { - logger.addContext(context); - logger.info('This is an INFO log', { correlationIds: { myCustomCorrelationId: 'foo-bar-baz' } }); - -}; \ No newline at end of file + logger.info('This is an INFO log', { + correlationIds: { myCustomCorrelationId: 'foo-bar-baz' }, + }); +}; diff --git a/docs/snippets/logger/clearStateDecorator.ts b/docs/snippets/logger/clearStateDecorator.ts index 359b63cc29..e31d66b190 100644 --- a/docs/snippets/logger/clearStateDecorator.ts +++ b/docs/snippets/logger/clearStateDecorator.ts @@ -1,14 +1,14 @@ import { Logger } from '@aws-lambda-powertools/logger'; import { LambdaInterface } from '@aws-lambda-powertools/commons'; -// Persistent attributes added outside the handler will be +// Persistent attributes added outside the handler will be // cached across invocations const logger = new Logger({ logLevel: 'DEBUG', persistentLogAttributes: { foo: 'bar', - biz: 'baz' - } + biz: 'baz', + }, }); class Lambda implements LambdaInterface { @@ -17,15 +17,14 @@ class Lambda implements LambdaInterface { public async handler(event: unknown, _context: unknown): Promise { // Persistent attributes added inside the handler will NOT be cached // across invocations - if (event['special_key'] === '123456'){ + if (event['special_key'] === '123456') { logger.appendKeys({ - details: { special_key: '123456' } + details: { special_key: '123456' }, }); } logger.debug('This is a DEBUG log'); } - } const myFunction = new Lambda(); -export const handler = myFunction.handler.bind(myFunction); // (1) \ No newline at end of file +export const handler = myFunction.handler.bind(myFunction); // (1) diff --git a/docs/snippets/logger/clearStateMiddy.ts b/docs/snippets/logger/clearStateMiddy.ts index f9e1f55ff7..7696c75b63 100644 --- a/docs/snippets/logger/clearStateMiddy.ts +++ b/docs/snippets/logger/clearStateMiddy.ts @@ -1,27 +1,31 @@ import { Logger, injectLambdaContext } from '@aws-lambda-powertools/logger'; import middy from '@middy/core'; -// Persistent attributes added outside the handler will be +// Persistent attributes added outside the handler will be // cached across invocations const logger = new Logger({ logLevel: 'DEBUG', persistentLogAttributes: { foo: 'bar', - biz: 'baz' - } + biz: 'baz', + }, }); -const lambdaHandler = async (event: { special_key: string }, _context: unknown): Promise => { +const lambdaHandler = async ( + event: { special_key: string }, + _context: unknown +): Promise => { // Persistent attributes added inside the handler will NOT be cached // across invocations if (event['special_key'] === '123456') { logger.appendKeys({ - details: { special_key: event['special_key'] } + details: { special_key: event['special_key'] }, }); } logger.debug('This is a DEBUG log'); }; // Enable the clear state flag -export const handler = middy(lambdaHandler) - .use(injectLambdaContext(logger, { clearState: true })); \ No newline at end of file +export const handler = middy(lambdaHandler).use( + injectLambdaContext(logger, { clearState: true }) +); diff --git a/docs/snippets/logger/createChild.ts b/docs/snippets/logger/createChild.ts index 3535c03336..351406c77b 100644 --- a/docs/snippets/logger/createChild.ts +++ b/docs/snippets/logger/createChild.ts @@ -5,24 +5,25 @@ import { Logger } from '@aws-lambda-powertools/logger'; const logger = new Logger({ serviceName: 'serverlessAirline', logLevel: 'INFO', - persistentLogAttributes: { + persistentLogAttributes: { aws_account_id: '123456789012', aws_region: 'eu-west-1', }, }); -// This other logger inherits all the parent's attributes +// This other logger inherits all the parent's attributes // but the log level, which is now set to ERROR const childLogger = logger.createChild({ - logLevel: 'ERROR' + logLevel: 'ERROR', }); -export const handler = async (_event: unknown, _context: unknown): Promise => { - +export const handler = async ( + _event: unknown, + _context: unknown +): Promise => { logger.info('This is an INFO log, from the parent logger'); logger.error('This is an ERROR log, from the parent logger'); - + childLogger.info('This is an INFO log, from the child logger'); childLogger.error('This is an ERROR log, from the child logger'); - -}; \ No newline at end of file +}; diff --git a/docs/snippets/logger/decorator.ts b/docs/snippets/logger/decorator.ts index 0e725bd517..0cd9be0cf4 100644 --- a/docs/snippets/logger/decorator.ts +++ b/docs/snippets/logger/decorator.ts @@ -9,8 +9,7 @@ class Lambda implements LambdaInterface { public async handler(_event: unknown, _context: unknown): Promise { logger.info('This is an INFO log with some context'); } - } const myFunction = new Lambda(); -export const handler = myFunction.handler.bind(myFunction); // (1) \ No newline at end of file +export const handler = myFunction.handler.bind(myFunction); // (1) diff --git a/docs/snippets/logger/eventDecorator.ts b/docs/snippets/logger/eventDecorator.ts index d99668a04b..9adf1518f1 100644 --- a/docs/snippets/logger/eventDecorator.ts +++ b/docs/snippets/logger/eventDecorator.ts @@ -9,8 +9,7 @@ class Lambda implements LambdaInterface { public async handler(_event: unknown, _context: unknown): Promise { logger.info('This is an INFO log with some context'); } - } const myFunction = new Lambda(); -export const handler = myFunction.handler.bind(myFunction); // (1) \ No newline at end of file +export const handler = myFunction.handler.bind(myFunction); // (1) diff --git a/docs/snippets/logger/eventMiddy.ts b/docs/snippets/logger/eventMiddy.ts index 4118903d33..a3648c734a 100644 --- a/docs/snippets/logger/eventMiddy.ts +++ b/docs/snippets/logger/eventMiddy.ts @@ -3,9 +3,13 @@ import middy from '@middy/core'; const logger = new Logger(); -const lambdaHandler = async (_event: unknown, _context: unknown): Promise => { +const lambdaHandler = async ( + _event: unknown, + _context: unknown +): Promise => { logger.info('This is an INFO log with some context'); }; -export const handler = middy(lambdaHandler) - .use(injectLambdaContext(logger, { logEvent: true })); \ No newline at end of file +export const handler = middy(lambdaHandler).use( + injectLambdaContext(logger, { logEvent: true }) +); diff --git a/docs/snippets/logger/extraData.ts b/docs/snippets/logger/extraData.ts index 5a536307d8..fbc6ea1771 100644 --- a/docs/snippets/logger/extraData.ts +++ b/docs/snippets/logger/extraData.ts @@ -2,19 +2,24 @@ import { Logger } from '@aws-lambda-powertools/logger'; const logger = new Logger(); -export const handler = async (event: unknown, _context: unknown): Promise => { - +export const handler = async ( + event: unknown, + _context: unknown +): Promise => { const myImportantVariable = { - foo: 'bar' + foo: 'bar', }; - + // Log additional data in single log items - + // As second parameter - logger.info('This is a log with an extra variable', { data: myImportantVariable }); - + logger.info('This is a log with an extra variable', { + data: myImportantVariable, + }); + // You can also pass multiple parameters containing arbitrary objects - logger.info('This is a log with 3 extra objects', + logger.info( + 'This is a log with 3 extra objects', { data: myImportantVariable }, { correlationIds: { myCustomCorrelationId: 'foo-bar-baz' } }, { lambdaEvent: event } @@ -26,13 +31,12 @@ export const handler = async (event: unknown, _context: unknown): Promise => { - +export const handler = async ( + _event: unknown, + _context: unknown +): Promise => { try { throw new Error('Unexpected error #1'); } catch (error) { @@ -15,7 +17,8 @@ export const handler = async (_event: unknown, _context: unknown): Promise throw new Error('Unexpected error #2'); } catch (error) { // Log information about the error using a custom "myCustomErrorKey" key - logger.error('This is the second error', { myCustomErrorKey: error as Error } ); + logger.error('This is the second error', { + myCustomErrorKey: error as Error, + }); } - -}; \ No newline at end of file +}; diff --git a/docs/snippets/logger/logSampling.ts b/docs/snippets/logger/logSampling.ts index 4b566f33ec..ea808f18ca 100644 --- a/docs/snippets/logger/logSampling.ts +++ b/docs/snippets/logger/logSampling.ts @@ -3,22 +3,23 @@ import { Logger } from '@aws-lambda-powertools/logger'; // Notice the log level set to 'ERROR' const logger = new Logger({ logLevel: 'ERROR', - sampleRateValue: 0.5 + sampleRateValue: 0.5, }); -export const handler = async (_event: unknown, _context: unknown): Promise => { - +export const handler = async ( + _event: unknown, + _context: unknown +): Promise => { // This log item (equal to log level 'ERROR') will be printed to standard output // in all Lambda invocations logger.error('This is an ERROR log'); - // These log items (below the log level 'ERROR') have ~50% chance + // These log items (below the log level 'ERROR') have ~50% chance // of being printed in a Lambda invocation logger.debug('This is a DEBUG log that has 50% chance of being printed'); logger.info('This is an INFO log that has 50% chance of being printed'); logger.warn('This is a WARN log that has 50% chance of being printed'); - + // Optional: refresh sample rate calculation on runtime // logger.refreshSampleRateCalculation(); - -}; \ No newline at end of file +}; diff --git a/docs/snippets/logger/manual.ts b/docs/snippets/logger/manual.ts index b7c271be35..00eaa38ac5 100644 --- a/docs/snippets/logger/manual.ts +++ b/docs/snippets/logger/manual.ts @@ -3,9 +3,7 @@ import { Logger } from '@aws-lambda-powertools/logger'; const logger = new Logger(); export const handler = async (_event, context): Promise => { - logger.addContext(context); - - logger.info('This is an INFO log with some context'); -}; \ No newline at end of file + logger.info('This is an INFO log with some context'); +}; diff --git a/docs/snippets/logger/middy.ts b/docs/snippets/logger/middy.ts index 83b723bf7f..f0dcbaa5aa 100644 --- a/docs/snippets/logger/middy.ts +++ b/docs/snippets/logger/middy.ts @@ -3,9 +3,11 @@ import middy from '@middy/core'; const logger = new Logger(); -const lambdaHandler = async (_event: unknown, _context: unknown): Promise => { +const lambdaHandler = async ( + _event: unknown, + _context: unknown +): Promise => { logger.info('This is an INFO log with some context'); }; -export const handler = middy(lambdaHandler) - .use(injectLambdaContext(logger)); \ No newline at end of file +export const handler = middy(lambdaHandler).use(injectLambdaContext(logger)); diff --git a/docs/snippets/logger/sam.ts b/docs/snippets/logger/sam.ts index 12cc9cc7eb..74247f5ad3 100644 --- a/docs/snippets/logger/sam.ts +++ b/docs/snippets/logger/sam.ts @@ -8,4 +8,4 @@ logger.info('Hello World'); // const logger = new Logger({ // logLevel: 'WARN', // serviceName: 'serverlessAirline' -// }); \ No newline at end of file +// }); diff --git a/docs/snippets/logger/unitTesting.ts b/docs/snippets/logger/unitTesting.ts index 4c09ab7285..d120be2858 100644 --- a/docs/snippets/logger/unitTesting.ts +++ b/docs/snippets/logger/unitTesting.ts @@ -1,12 +1,8 @@ import { ContextExamples as dummyContext } from '@aws-lambda-powertools/commons'; describe('MyUnitTest', () => { - test('Lambda invoked successfully', async () => { - const testEvent = { test: 'test' }; await handler(testEvent, dummyContext); - }); - -}); \ No newline at end of file +}); diff --git a/docs/snippets/metrics/addHighResolutionMetric.ts b/docs/snippets/metrics/addHighResolutionMetric.ts index 0e44bcbcbb..f2981b8514 100644 --- a/docs/snippets/metrics/addHighResolutionMetric.ts +++ b/docs/snippets/metrics/addHighResolutionMetric.ts @@ -1,7 +1,22 @@ -import { Metrics, MetricUnits, MetricResolution } from '@aws-lambda-powertools/metrics'; +import { + Metrics, + MetricUnits, + MetricResolution, +} from '@aws-lambda-powertools/metrics'; -const metrics = new Metrics({ namespace: 'serverlessAirline', serviceName: 'orders' }); +const metrics = new Metrics({ + namespace: 'serverlessAirline', + serviceName: 'orders', +}); -export const handler = async (_event: unknown, _context: unknown): Promise => { - metrics.addMetric('successfulBooking', MetricUnits.Count, 1, MetricResolution.High); +export const handler = async ( + _event: unknown, + _context: unknown +): Promise => { + metrics.addMetric( + 'successfulBooking', + MetricUnits.Count, + 1, + MetricResolution.High + ); }; diff --git a/docs/snippets/metrics/addMetadata.ts b/docs/snippets/metrics/addMetadata.ts index adbe592b90..6836191b91 100644 --- a/docs/snippets/metrics/addMetadata.ts +++ b/docs/snippets/metrics/addMetadata.ts @@ -1,12 +1,21 @@ -import { Metrics, MetricUnits, logMetrics } from '@aws-lambda-powertools/metrics'; +import { + Metrics, + MetricUnits, + logMetrics, +} from '@aws-lambda-powertools/metrics'; import middy from '@middy/core'; -const metrics = new Metrics({ namespace: 'serverlessAirline', serviceName: 'orders' }); +const metrics = new Metrics({ + namespace: 'serverlessAirline', + serviceName: 'orders', +}); -const lambdaHandler = async (_event: unknown, _context: unknown): Promise => { +const lambdaHandler = async ( + _event: unknown, + _context: unknown +): Promise => { metrics.addMetric('successfulBooking', MetricUnits.Count, 1); metrics.addMetadata('bookingId', '7051cd10-6283-11ec-90d6-0242ac120003'); }; -export const handler = middy(lambdaHandler) - .use(logMetrics(metrics)); \ No newline at end of file +export const handler = middy(lambdaHandler).use(logMetrics(metrics)); diff --git a/docs/snippets/metrics/basicUsage.ts b/docs/snippets/metrics/basicUsage.ts index ccd8606a01..868f5b67af 100644 --- a/docs/snippets/metrics/basicUsage.ts +++ b/docs/snippets/metrics/basicUsage.ts @@ -1,7 +1,13 @@ import { Metrics, MetricUnits } from '@aws-lambda-powertools/metrics'; -const metrics = new Metrics({ namespace: 'serverlessAirline', serviceName: 'orders' }); +const metrics = new Metrics({ + namespace: 'serverlessAirline', + serviceName: 'orders', +}); -export const handler = async (_event: unknown, _context: unknown): Promise => { +export const handler = async ( + _event: unknown, + _context: unknown +): Promise => { metrics.addMetric('successfulBooking', MetricUnits.Count, 1); -}; \ No newline at end of file +}; diff --git a/docs/snippets/metrics/captureColdStartMetricDecorator.ts b/docs/snippets/metrics/captureColdStartMetricDecorator.ts index 8817d6a799..d2e050224e 100644 --- a/docs/snippets/metrics/captureColdStartMetricDecorator.ts +++ b/docs/snippets/metrics/captureColdStartMetricDecorator.ts @@ -1,12 +1,14 @@ import { Metrics, MetricUnits } from '@aws-lambda-powertools/metrics'; import { LambdaInterface } from '@aws-lambda-powertools/commons'; -const metrics = new Metrics({ namespace: 'serverlessAirline', serviceName: 'orders' }); +const metrics = new Metrics({ + namespace: 'serverlessAirline', + serviceName: 'orders', +}); export class MyFunction implements LambdaInterface { - @metrics.logMetrics({ captureColdStartMetric: true }) public async handler(_event: unknown, _context: unknown): Promise { metrics.addMetric('successfulBooking', MetricUnits.Count, 1); } -} \ No newline at end of file +} diff --git a/docs/snippets/metrics/captureColdStartMetricMiddy.ts b/docs/snippets/metrics/captureColdStartMetricMiddy.ts index 3b84cb7194..c598a09e03 100644 --- a/docs/snippets/metrics/captureColdStartMetricMiddy.ts +++ b/docs/snippets/metrics/captureColdStartMetricMiddy.ts @@ -1,11 +1,22 @@ -import { Metrics, MetricUnits, logMetrics } from '@aws-lambda-powertools/metrics'; +import { + Metrics, + MetricUnits, + logMetrics, +} from '@aws-lambda-powertools/metrics'; import middy from '@middy/core'; -const metrics = new Metrics({ namespace: 'serverlessAirline', serviceName: 'orders' }); +const metrics = new Metrics({ + namespace: 'serverlessAirline', + serviceName: 'orders', +}); -const lambdaHandler = async (_event: unknown, _context: unknown): Promise => { +const lambdaHandler = async ( + _event: unknown, + _context: unknown +): Promise => { metrics.addMetric('successfulBooking', MetricUnits.Count, 1); }; -export const handler = middy(lambdaHandler) - .use(logMetrics(metrics, { captureColdStartMetric: true })); \ No newline at end of file +export const handler = middy(lambdaHandler).use( + logMetrics(metrics, { captureColdStartMetric: true }) +); diff --git a/docs/snippets/metrics/createMetrics.ts b/docs/snippets/metrics/createMetrics.ts index 640afe1ada..e7065e8f29 100644 --- a/docs/snippets/metrics/createMetrics.ts +++ b/docs/snippets/metrics/createMetrics.ts @@ -1,8 +1,14 @@ import { Metrics, MetricUnits } from '@aws-lambda-powertools/metrics'; -const metrics = new Metrics({ namespace: 'serverlessAirline', serviceName: 'orders' }); +const metrics = new Metrics({ + namespace: 'serverlessAirline', + serviceName: 'orders', +}); -export const handler = async (_event: unknown, _context: unknown): Promise => { +export const handler = async ( + _event: unknown, + _context: unknown +): Promise => { metrics.addMetric('successfulBooking', MetricUnits.Count, 1); metrics.publishStoredMetrics(); -}; \ No newline at end of file +}; diff --git a/docs/snippets/metrics/customDimensions.ts b/docs/snippets/metrics/customDimensions.ts index 95d25f9cab..8eeaebebda 100644 --- a/docs/snippets/metrics/customDimensions.ts +++ b/docs/snippets/metrics/customDimensions.ts @@ -1,9 +1,15 @@ import { Metrics, MetricUnits } from '@aws-lambda-powertools/metrics'; -const metrics = new Metrics({ namespace: 'serverlessAirline', serviceName: 'orders' }); +const metrics = new Metrics({ + namespace: 'serverlessAirline', + serviceName: 'orders', +}); -export const handler = async (_event: unknown, _context: unknown): Promise => { +export const handler = async ( + _event: unknown, + _context: unknown +): Promise => { metrics.addDimension('environment', 'prod'); metrics.addMetric('successfulBooking', MetricUnits.Count, 1); metrics.publishStoredMetrics(); -}; \ No newline at end of file +}; diff --git a/docs/snippets/metrics/decorator.ts b/docs/snippets/metrics/decorator.ts index f64d842d5e..9d69c5fa56 100644 --- a/docs/snippets/metrics/decorator.ts +++ b/docs/snippets/metrics/decorator.ts @@ -1,10 +1,12 @@ import { Metrics, MetricUnits } from '@aws-lambda-powertools/metrics'; import { LambdaInterface } from '@aws-lambda-powertools/commons'; -const metrics = new Metrics({ namespace: 'serverlessAirline', serviceName: 'orders' }); +const metrics = new Metrics({ + namespace: 'serverlessAirline', + serviceName: 'orders', +}); class Lambda implements LambdaInterface { - @metrics.logMetrics() public async handler(_event: unknown, _context: unknown): Promise { metrics.addMetric('successfulBooking', MetricUnits.Count, 1); @@ -12,4 +14,4 @@ class Lambda implements LambdaInterface { } const handlerClass = new Lambda(); -export const handler = handlerClass.handler.bind(handlerClass); // (1) \ No newline at end of file +export const handler = handlerClass.handler.bind(handlerClass); // (1) diff --git a/docs/snippets/metrics/defaultDimensions.ts b/docs/snippets/metrics/defaultDimensions.ts index 509bdda170..c0bc92b99b 100644 --- a/docs/snippets/metrics/defaultDimensions.ts +++ b/docs/snippets/metrics/defaultDimensions.ts @@ -1,11 +1,14 @@ import { Metrics, MetricUnits } from '@aws-lambda-powertools/metrics'; const metrics = new Metrics({ - namespace: 'serverlessAirline', - serviceName: 'orders', - defaultDimensions: { 'environment': 'prod', 'foo': 'bar' } + namespace: 'serverlessAirline', + serviceName: 'orders', + defaultDimensions: { environment: 'prod', foo: 'bar' }, }); -export const handler = async (_event: unknown, _context: unknown): Promise => { +export const handler = async ( + _event: unknown, + _context: unknown +): Promise => { metrics.addMetric('successfulBooking', MetricUnits.Count, 1); -}; \ No newline at end of file +}; diff --git a/docs/snippets/metrics/defaultDimensionsDecorator.ts b/docs/snippets/metrics/defaultDimensionsDecorator.ts index d31c8cde6b..23796a16fc 100644 --- a/docs/snippets/metrics/defaultDimensionsDecorator.ts +++ b/docs/snippets/metrics/defaultDimensionsDecorator.ts @@ -1,8 +1,11 @@ import { Metrics, MetricUnits } from '@aws-lambda-powertools/metrics'; import { LambdaInterface } from '@aws-lambda-powertools/commons'; -const metrics = new Metrics({ namespace: 'serverlessAirline', serviceName: 'orders' }); -const DEFAULT_DIMENSIONS = { 'environment': 'prod', 'foo': 'bar' }; +const metrics = new Metrics({ + namespace: 'serverlessAirline', + serviceName: 'orders', +}); +const DEFAULT_DIMENSIONS = { environment: 'prod', foo: 'bar' }; export class Lambda implements LambdaInterface { // Decorate your handler class method @@ -13,4 +16,4 @@ export class Lambda implements LambdaInterface { } const handlerClass = new Lambda(); -export const handler = handlerClass.handler.bind(handlerClass); // (1) \ No newline at end of file +export const handler = handlerClass.handler.bind(handlerClass); // (1) diff --git a/docs/snippets/metrics/defaultDimensionsMiddy.ts b/docs/snippets/metrics/defaultDimensionsMiddy.ts index dc9035e937..b75ed56a6b 100644 --- a/docs/snippets/metrics/defaultDimensionsMiddy.ts +++ b/docs/snippets/metrics/defaultDimensionsMiddy.ts @@ -1,13 +1,27 @@ -import { Metrics, MetricUnits, logMetrics } from '@aws-lambda-powertools/metrics'; +import { + Metrics, + MetricUnits, + logMetrics, +} from '@aws-lambda-powertools/metrics'; import middy from '@middy/core'; -const metrics = new Metrics({ namespace: 'serverlessAirline', serviceName: 'orders' }); +const metrics = new Metrics({ + namespace: 'serverlessAirline', + serviceName: 'orders', +}); -const lambdaHandler = async (_event: unknown, _context: unknown): Promise => { +const lambdaHandler = async ( + _event: unknown, + _context: unknown +): Promise => { metrics.addMetric('successfulBooking', MetricUnits.Count, 1); }; // Wrap the handler with middy export const handler = middy(lambdaHandler) -// Use the middleware by passing the Metrics instance as a parameter - .use(logMetrics(metrics, { defaultDimensions:{ 'environment': 'prod', 'foo': 'bar' } })); \ No newline at end of file + // Use the middleware by passing the Metrics instance as a parameter + .use( + logMetrics(metrics, { + defaultDimensions: { environment: 'prod', foo: 'bar' }, + }) + ); diff --git a/docs/snippets/metrics/manual.ts b/docs/snippets/metrics/manual.ts index 7df2301fdd..d64a3b5393 100644 --- a/docs/snippets/metrics/manual.ts +++ b/docs/snippets/metrics/manual.ts @@ -1,8 +1,14 @@ import { Metrics, MetricUnits } from '@aws-lambda-powertools/metrics'; -const metrics = new Metrics({ namespace: 'serverlessAirline', serviceName: 'orders' }); +const metrics = new Metrics({ + namespace: 'serverlessAirline', + serviceName: 'orders', +}); -export const handler = async (_event: unknown, _context: unknown): Promise => { +export const handler = async ( + _event: unknown, + _context: unknown +): Promise => { metrics.addMetric('successfulBooking', MetricUnits.Count, 10); metrics.publishStoredMetrics(); -}; \ No newline at end of file +}; diff --git a/docs/snippets/metrics/middy.ts b/docs/snippets/metrics/middy.ts index 088186002b..0a8330e931 100644 --- a/docs/snippets/metrics/middy.ts +++ b/docs/snippets/metrics/middy.ts @@ -1,11 +1,20 @@ -import { Metrics, MetricUnits, logMetrics } from '@aws-lambda-powertools/metrics'; +import { + Metrics, + MetricUnits, + logMetrics, +} from '@aws-lambda-powertools/metrics'; import middy from '@middy/core'; -const metrics = new Metrics({ namespace: 'serverlessAirline', serviceName: 'orders' }); +const metrics = new Metrics({ + namespace: 'serverlessAirline', + serviceName: 'orders', +}); -const lambdaHandler = async (_event: unknown, _context: unknown): Promise => { +const lambdaHandler = async ( + _event: unknown, + _context: unknown +): Promise => { metrics.addMetric('successfulBooking', MetricUnits.Count, 1); }; -export const handler = middy(lambdaHandler) - .use(logMetrics(metrics)); \ No newline at end of file +export const handler = middy(lambdaHandler).use(logMetrics(metrics)); diff --git a/docs/snippets/metrics/multiValueMetrics.ts b/docs/snippets/metrics/multiValueMetrics.ts index 6214940c39..6614e39409 100644 --- a/docs/snippets/metrics/multiValueMetrics.ts +++ b/docs/snippets/metrics/multiValueMetrics.ts @@ -1,9 +1,15 @@ import { Metrics, MetricUnits } from '@aws-lambda-powertools/metrics'; -const metrics = new Metrics({ namespace:'serverlessAirline', serviceName:'orders' }); +const metrics = new Metrics({ + namespace: 'serverlessAirline', + serviceName: 'orders', +}); -export const handler = async (_event: unknown, _context: unknown): Promise => { +export const handler = async ( + _event: unknown, + _context: unknown +): Promise => { metrics.addMetric('performedActionA', MetricUnits.Count, 2); // do something else... metrics.addMetric('performedActionA', MetricUnits.Count, 1); -}; \ No newline at end of file +}; diff --git a/docs/snippets/metrics/sam.ts b/docs/snippets/metrics/sam.ts index 8acd0b6ba5..79cb23e522 100644 --- a/docs/snippets/metrics/sam.ts +++ b/docs/snippets/metrics/sam.ts @@ -8,4 +8,4 @@ metrics.addMetric('successfulBooking', MetricUnits.Count, 1); // const metrics = new Metrics({ // namespace: 'serverlessAirline', // serviceName: 'orders' -// }); \ No newline at end of file +// }); diff --git a/docs/snippets/metrics/setDefaultDimensions.ts b/docs/snippets/metrics/setDefaultDimensions.ts index 1491d709ae..ddb54f7691 100644 --- a/docs/snippets/metrics/setDefaultDimensions.ts +++ b/docs/snippets/metrics/setDefaultDimensions.ts @@ -1,8 +1,14 @@ import { Metrics, MetricUnits } from '@aws-lambda-powertools/metrics'; -const metrics = new Metrics({ namespace: 'serverlessAirline', serviceName: 'orders' }); -metrics.setDefaultDimensions({ 'environment': 'prod', 'foo': 'bar' }); +const metrics = new Metrics({ + namespace: 'serverlessAirline', + serviceName: 'orders', +}); +metrics.setDefaultDimensions({ environment: 'prod', foo: 'bar' }); -export const handler = async (_event: unknown, _context: unknown): Promise => { +export const handler = async ( + _event: unknown, + _context: unknown +): Promise => { metrics.addMetric('successfulBooking', MetricUnits.Count, 1); -}; \ No newline at end of file +}; diff --git a/docs/snippets/metrics/singleMetricDifferentDimsDecorator.ts b/docs/snippets/metrics/singleMetricDifferentDimsDecorator.ts index 758a1aba2c..d7b811aa3b 100644 --- a/docs/snippets/metrics/singleMetricDifferentDimsDecorator.ts +++ b/docs/snippets/metrics/singleMetricDifferentDimsDecorator.ts @@ -1,16 +1,18 @@ import { Metrics, MetricUnits } from '@aws-lambda-powertools/metrics'; import { LambdaInterface } from '@aws-lambda-powertools/commons'; -const metrics = new Metrics({ namespace: 'serverlessAirline', serviceName: 'orders' }); +const metrics = new Metrics({ + namespace: 'serverlessAirline', + serviceName: 'orders', +}); class Lambda implements LambdaInterface { - @metrics.logMetrics() public async handler(_event: unknown, _context: unknown): Promise { metrics.addDimension('metricUnit', 'milliseconds'); // This metric will have the "metricUnit" dimension, and no "metricType" dimension: metrics.addMetric('latency', MetricUnits.Milliseconds, 56); - + const singleMetric = metrics.singleMetric(); // This metric will have the "metricType" dimension, and no "metricUnit" dimension: singleMetric.addDimension('metricType', 'business'); @@ -19,4 +21,4 @@ class Lambda implements LambdaInterface { } const handlerClass = new Lambda(); -export const handler = handlerClass.handler.bind(handlerClass); // (1) \ No newline at end of file +export const handler = handlerClass.handler.bind(handlerClass); // (1) diff --git a/docs/snippets/metrics/singleMetricDifferentDimsMiddy.ts b/docs/snippets/metrics/singleMetricDifferentDimsMiddy.ts index 62ed3863b7..66642078df 100644 --- a/docs/snippets/metrics/singleMetricDifferentDimsMiddy.ts +++ b/docs/snippets/metrics/singleMetricDifferentDimsMiddy.ts @@ -1,9 +1,19 @@ -import { Metrics, MetricUnits, logMetrics } from '@aws-lambda-powertools/metrics'; +import { + Metrics, + MetricUnits, + logMetrics, +} from '@aws-lambda-powertools/metrics'; import middy from '@middy/core'; -const metrics = new Metrics({ namespace: 'serverlessAirline', serviceName: 'orders' }); +const metrics = new Metrics({ + namespace: 'serverlessAirline', + serviceName: 'orders', +}); -const lambdaHandler = async (_event: unknown, _context: unknown): Promise => { +const lambdaHandler = async ( + _event: unknown, + _context: unknown +): Promise => { metrics.addDimension('metricUnit', 'milliseconds'); // This metric will have the "metricUnit" dimension, and no "metricType" dimension: metrics.addMetric('latency', MetricUnits.Milliseconds, 56); @@ -14,5 +24,4 @@ const lambdaHandler = async (_event: unknown, _context: unknown): Promise singleMetric.addMetric('orderSubmitted', MetricUnits.Count, 1); }; -export const handler = middy(lambdaHandler) - .use(logMetrics(metrics)); \ No newline at end of file +export const handler = middy(lambdaHandler).use(logMetrics(metrics)); diff --git a/docs/snippets/metrics/throwOnEmptyMetrics.ts b/docs/snippets/metrics/throwOnEmptyMetrics.ts index 3b9784f7b1..8fc01ae4b3 100644 --- a/docs/snippets/metrics/throwOnEmptyMetrics.ts +++ b/docs/snippets/metrics/throwOnEmptyMetrics.ts @@ -1,11 +1,22 @@ -import { Metrics, MetricUnits, logMetrics } from '@aws-lambda-powertools/metrics'; +import { + Metrics, + MetricUnits, + logMetrics, +} from '@aws-lambda-powertools/metrics'; import middy from '@middy/core'; -const metrics = new Metrics({ namespace: 'serverlessAirline', serviceName: 'orders' }); +const metrics = new Metrics({ + namespace: 'serverlessAirline', + serviceName: 'orders', +}); -const lambdaHandler = async (_event: unknown, _context: unknown): Promise => { +const lambdaHandler = async ( + _event: unknown, + _context: unknown +): Promise => { metrics.addMetric('successfulBooking', MetricUnits.Count, 1); }; -export const handler = middy(lambdaHandler) - .use(logMetrics(metrics, { throwOnEmptyMetrics: true })); \ No newline at end of file +export const handler = middy(lambdaHandler).use( + logMetrics(metrics, { throwOnEmptyMetrics: true }) +); diff --git a/docs/snippets/package.json b/docs/snippets/package.json index 5090cfada5..15b880f94e 100644 --- a/docs/snippets/package.json +++ b/docs/snippets/package.json @@ -11,8 +11,8 @@ "test:e2e": "echo 'Not Applicable'", "package": "echo 'Not applicable'", "build": "echo 'Not Applicable'", - "lint": "eslint --ext .ts --no-error-on-unmatched-pattern logger tracer metrics parameters", - "lint-fix": "eslint --fix --ext .ts --no-error-on-unmatched-pattern logger tracer metrics parameters" + "lint": "eslint --ext .ts,.js --no-error-on-unmatched-pattern .", + "lint-fix": "eslint --fix --ext .ts,.js --no-error-on-unmatched-pattern ." }, "lint-staged": { "*.ts": "npm run lint-fix" @@ -37,4 +37,4 @@ "aws-sdk-client-mock-jest": "^2.0.1", "axios": "^1.2.4" } -} +} \ No newline at end of file diff --git a/docs/snippets/parameters/adjustingCacheTTL.ts b/docs/snippets/parameters/adjustingCacheTTL.ts index 3207c76a44..50f89e1537 100644 --- a/docs/snippets/parameters/adjustingCacheTTL.ts +++ b/docs/snippets/parameters/adjustingCacheTTL.ts @@ -4,12 +4,16 @@ const parametersProvider = new SSMProvider(); export const handler = async (): Promise => { // Retrieve a single parameter and cache it for 1 minute - const parameter = await parametersProvider.get('/my/parameter', { maxAge: 60 }); // (1) + const parameter = await parametersProvider.get('/my/parameter', { + maxAge: 60, + }); // (1) console.log(parameter); // Retrieve multiple parameters from a path prefix and cache them for 2 minutes - const parameters = await parametersProvider.getMultiple('/my/path/prefix', { maxAge: 120 }); - for (const [ key, value ] of Object.entries(parameters || {})) { + const parameters = await parametersProvider.getMultiple('/my/path/prefix', { + maxAge: 120, + }); + for (const [key, value] of Object.entries(parameters || {})) { console.log(`${key}: ${value}`); } -}; \ No newline at end of file +}; diff --git a/docs/snippets/parameters/appConfigProvider.ts b/docs/snippets/parameters/appConfigProvider.ts index 048e49927e..32ef2a2b1e 100644 --- a/docs/snippets/parameters/appConfigProvider.ts +++ b/docs/snippets/parameters/appConfigProvider.ts @@ -12,4 +12,4 @@ export const handler = async (): Promise => { // Retrieve a config const config = await configsProvider.get('my-config'); console.log(config); -}; \ No newline at end of file +}; diff --git a/docs/snippets/parameters/appConfigProviderCustomClient.ts b/docs/snippets/parameters/appConfigProviderCustomClient.ts index 361d72dcc2..d4315fb58c 100644 --- a/docs/snippets/parameters/appConfigProviderCustomClient.ts +++ b/docs/snippets/parameters/appConfigProviderCustomClient.ts @@ -4,9 +4,11 @@ import { AppConfigDataClient } from '@aws-sdk/client-appconfigdata'; // construct your clients with any custom configuration const appConfigClient = new AppConfigDataClient({ region: 'us-east-1' }); // pass the client to the provider -const configsProvider = new AppConfigProvider({ awsSdkV3Client: appConfigClient }); +const configsProvider = new AppConfigProvider({ + awsSdkV3Client: appConfigClient, +}); export const handler = async (): Promise => { const config = await configsProvider.get('my-config'); console.log(config); -}; \ No newline at end of file +}; diff --git a/docs/snippets/parameters/clientConfig.ts b/docs/snippets/parameters/clientConfig.ts index 83a4560e73..da2353bf3d 100644 --- a/docs/snippets/parameters/clientConfig.ts +++ b/docs/snippets/parameters/clientConfig.ts @@ -8,4 +8,4 @@ export const handler = async (): Promise => { // Retrieve a single parameter const value = await parametersProvider.get('/my/parameter'); console.log(value); -}; \ No newline at end of file +}; diff --git a/docs/snippets/parameters/dynamoDBProvider.ts b/docs/snippets/parameters/dynamoDBProvider.ts index af8a323a73..da4516e139 100644 --- a/docs/snippets/parameters/dynamoDBProvider.ts +++ b/docs/snippets/parameters/dynamoDBProvider.ts @@ -6,4 +6,4 @@ export const handler = async (): Promise => { // Retrieve a value from DynamoDB const value = await dynamoDBProvider.get('my-parameter'); console.log(value); -}; \ No newline at end of file +}; diff --git a/docs/snippets/parameters/dynamoDBProviderCustomClient.ts b/docs/snippets/parameters/dynamoDBProviderCustomClient.ts index 16e610d3ac..2eb94ef190 100644 --- a/docs/snippets/parameters/dynamoDBProviderCustomClient.ts +++ b/docs/snippets/parameters/dynamoDBProviderCustomClient.ts @@ -10,4 +10,4 @@ export const handler = async (): Promise => { // Retrieve a single value const value = await valuesProvider.get('my-value'); console.log(value); -}; \ No newline at end of file +}; diff --git a/docs/snippets/parameters/dynamoDBProviderCustomizeTable.ts b/docs/snippets/parameters/dynamoDBProviderCustomizeTable.ts index 86bbdc1916..2f58806c44 100644 --- a/docs/snippets/parameters/dynamoDBProviderCustomizeTable.ts +++ b/docs/snippets/parameters/dynamoDBProviderCustomizeTable.ts @@ -1,13 +1,13 @@ import { DynamoDBProvider } from '@aws-lambda-powertools/parameters/dynamodb'; const dynamoDBProvider = new DynamoDBProvider({ - tableName:'my-table', - keyAttr:'key', - sortAttr:'sort', - valueAttr:'val' + tableName: 'my-table', + keyAttr: 'key', + sortAttr: 'sort', + valueAttr: 'val', }); export const handler = async (): Promise => { const value = await dynamoDBProvider.get('my-parameter'); console.log(value); -}; \ No newline at end of file +}; diff --git a/docs/snippets/parameters/dynamoDBProviderLocal.ts b/docs/snippets/parameters/dynamoDBProviderLocal.ts index 7cee7a0476..963b0fcc6a 100644 --- a/docs/snippets/parameters/dynamoDBProviderLocal.ts +++ b/docs/snippets/parameters/dynamoDBProviderLocal.ts @@ -1,14 +1,14 @@ import { DynamoDBProvider } from '@aws-lambda-powertools/parameters/dynamodb'; const dynamoDBProvider = new DynamoDBProvider({ - tableName: 'my-table', - clientConfig: { - endpoint: 'http://localhost:8000' - }, + tableName: 'my-table', + clientConfig: { + endpoint: 'http://localhost:8000', + }, }); export const handler = async (): Promise => { // Retrieve a value from DynamoDB const value = await dynamoDBProvider.get('my-parameter'); console.log(value); -}; \ No newline at end of file +}; diff --git a/docs/snippets/parameters/dynamoDBProviderMultiple.ts b/docs/snippets/parameters/dynamoDBProviderMultiple.ts index d7bcea66ba..53c48868ba 100644 --- a/docs/snippets/parameters/dynamoDBProviderMultiple.ts +++ b/docs/snippets/parameters/dynamoDBProviderMultiple.ts @@ -4,13 +4,13 @@ const dynamoDBProvider = new DynamoDBProvider({ tableName: 'my-table' }); export const handler = async (): Promise => { /** - * Retrieve multiple values by performing a Query on the DynamoDB table. - * This returns a dict with the sort key attribute as dict key. - */ + * Retrieve multiple values by performing a Query on the DynamoDB table. + * This returns a dict with the sort key attribute as dict key. + */ const values = await dynamoDBProvider.getMultiple('my-hash-key'); - for (const [ key, value ] of Object.entries(values || {})) { + for (const [key, value] of Object.entries(values || {})) { // key: param-a // value: my-value-a console.log(`${key}: ${value}`); } -}; \ No newline at end of file +}; diff --git a/docs/snippets/parameters/forceFetch.ts b/docs/snippets/parameters/forceFetch.ts index a7de4195ac..26188d1033 100644 --- a/docs/snippets/parameters/forceFetch.ts +++ b/docs/snippets/parameters/forceFetch.ts @@ -4,4 +4,4 @@ export const handler = async (): Promise => { // Retrieve a single parameter const parameter = await getParameter('/my/parameter', { forceFetch: true }); console.log(parameter); -}; \ No newline at end of file +}; diff --git a/docs/snippets/parameters/getAppConfig.ts b/docs/snippets/parameters/getAppConfig.ts index 37cfd38108..b71bc196e3 100644 --- a/docs/snippets/parameters/getAppConfig.ts +++ b/docs/snippets/parameters/getAppConfig.ts @@ -4,7 +4,7 @@ export const handler = async (): Promise => { // Retrieve a configuration, latest version const config = await getAppConfig('my-configuration', { environment: 'my-env', - application: 'my-app' + application: 'my-app', }); console.log(config); -}; \ No newline at end of file +}; diff --git a/docs/snippets/parameters/getParameter.ts b/docs/snippets/parameters/getParameter.ts index ed32576d93..4a2d1c8cc4 100644 --- a/docs/snippets/parameters/getParameter.ts +++ b/docs/snippets/parameters/getParameter.ts @@ -4,4 +4,4 @@ export const handler = async (): Promise => { // Retrieve a single parameter const parameter = await getParameter('/my/parameter'); console.log(parameter); -}; \ No newline at end of file +}; diff --git a/docs/snippets/parameters/getParameters.ts b/docs/snippets/parameters/getParameters.ts index 10484e13f6..bf38cdc31c 100644 --- a/docs/snippets/parameters/getParameters.ts +++ b/docs/snippets/parameters/getParameters.ts @@ -4,9 +4,9 @@ export const handler = async (): Promise => { /** * Retrieve multiple parameters from a path prefix recursively. * This returns an object with the parameter name as key - */ + */ const parameters = await getParameters('/my/path/prefix'); - for (const [ key, value ] of Object.entries(parameters || {})) { + for (const [key, value] of Object.entries(parameters || {})) { console.log(`${key}: ${value}`); } -}; \ No newline at end of file +}; diff --git a/docs/snippets/parameters/getParametersByName.ts b/docs/snippets/parameters/getParametersByName.ts index 9210d896da..17679aedfb 100644 --- a/docs/snippets/parameters/getParametersByName.ts +++ b/docs/snippets/parameters/getParametersByName.ts @@ -1,10 +1,11 @@ import { getParametersByName } from '@aws-lambda-powertools/parameters/ssm'; -import type { - SSMGetParametersByNameOptionsInterface -} from '@aws-lambda-powertools/parameters/ssm'; +import type { SSMGetParametersByNameOptionsInterface } from '@aws-lambda-powertools/parameters/ssm'; const props: Record = { - '/develop/service/commons/telemetry/config': { maxAge: 300, transform: 'json' }, + '/develop/service/commons/telemetry/config': { + maxAge: 300, + transform: 'json', + }, '/no_cache_param': { maxAge: 0 }, '/develop/service/payment/api/capture/url': {}, // When empty or undefined, it uses default values }; @@ -12,7 +13,7 @@ const props: Record = { export const handler = async (): Promise => { // This returns an object with the parameter name as key const parameters = await getParametersByName(props, { maxAge: 60 }); - for (const [ key, value ] of Object.entries(parameters)) { + for (const [key, value] of Object.entries(parameters)) { console.log(`${key}: ${value}`); } -}; \ No newline at end of file +}; diff --git a/docs/snippets/parameters/getParametersByNameGracefulErrorHandling.ts b/docs/snippets/parameters/getParametersByNameGracefulErrorHandling.ts index 5aee4277b4..a44a4e1db8 100644 --- a/docs/snippets/parameters/getParametersByNameGracefulErrorHandling.ts +++ b/docs/snippets/parameters/getParametersByNameGracefulErrorHandling.ts @@ -1,25 +1,25 @@ import { getParametersByName } from '@aws-lambda-powertools/parameters/ssm'; -import type { - SSMGetParametersByNameOptionsInterface -} from '@aws-lambda-powertools/parameters/ssm'; +import type { SSMGetParametersByNameOptionsInterface } from '@aws-lambda-powertools/parameters/ssm'; const props: Record = { - '/develop/service/commons/telemetry/config': { maxAge: 300, transform: 'json' }, + '/develop/service/commons/telemetry/config': { + maxAge: 300, + transform: 'json', + }, '/this/param/does/not/exist': {}, // <- Example of non-existent parameter }; export const handler = async (): Promise => { - const { - _errors: errors, - ...parameters - } = await getParametersByName(props, { throwOnError: false }); - + const { _errors: errors, ...parameters } = await getParametersByName(props, { + throwOnError: false, + }); + // Handle gracefully, since `/this/param/does/not/exist` will only be available in `_errors` if (errors && errors.length) { console.error(`Unable to retrieve parameters: ${errors.join(',')}`); } - for (const [ key, value ] of Object.entries(parameters)) { + for (const [key, value] of Object.entries(parameters)) { console.log(`${key}: ${value}`); } -}; \ No newline at end of file +}; diff --git a/docs/snippets/parameters/getSecret.ts b/docs/snippets/parameters/getSecret.ts index 417ed32572..58ce012ced 100644 --- a/docs/snippets/parameters/getSecret.ts +++ b/docs/snippets/parameters/getSecret.ts @@ -4,4 +4,4 @@ export const handler = async (): Promise => { // Retrieve a single secret const secret = await getSecret('my-secret'); console.log(secret); -}; \ No newline at end of file +}; diff --git a/docs/snippets/parameters/sdkOptions.ts b/docs/snippets/parameters/sdkOptions.ts index 60c4306b1d..87eba09c1a 100644 --- a/docs/snippets/parameters/sdkOptions.ts +++ b/docs/snippets/parameters/sdkOptions.ts @@ -5,7 +5,7 @@ const secretsProvider = new SecretsProvider(); export const handler = async (): Promise => { const sdkOptions: Partial = { - VersionId: 'e62ec170-6b01-48c7-94f3-d7497851a8d2' + VersionId: 'e62ec170-6b01-48c7-94f3-d7497851a8d2', }; /** * The 'VersionId' argument will be passed to the underlying @@ -13,4 +13,4 @@ export const handler = async (): Promise => { */ const secret = await secretsProvider.get('my-secret', { sdkOptions }); console.log(secret); -}; \ No newline at end of file +}; diff --git a/docs/snippets/parameters/secretsProvider.ts b/docs/snippets/parameters/secretsProvider.ts index 511b8b2c67..ca15e1ef08 100644 --- a/docs/snippets/parameters/secretsProvider.ts +++ b/docs/snippets/parameters/secretsProvider.ts @@ -1,5 +1,5 @@ import { SecretsProvider } from '@aws-lambda-powertools/parameters/secrets'; -import type { SecretsManagerClientConfig } from '@aws-sdk/client-secretsmanager'; +import type { SecretsManagerClientConfig } from '@aws-sdk/client-secrets-manager'; const clientConfig: SecretsManagerClientConfig = { region: 'us-east-1' }; const secretsProvider = new SecretsProvider({ clientConfig }); @@ -8,4 +8,4 @@ export const handler = async (): Promise => { // Retrieve a single secret const secret = await secretsProvider.get('my-secret'); console.log(secret); -}; \ No newline at end of file +}; diff --git a/docs/snippets/parameters/secretsProviderCustomClient.ts b/docs/snippets/parameters/secretsProviderCustomClient.ts index 3c5e1ed4ac..4fb008eb2b 100644 --- a/docs/snippets/parameters/secretsProviderCustomClient.ts +++ b/docs/snippets/parameters/secretsProviderCustomClient.ts @@ -4,10 +4,12 @@ import { SecretsManagerClient } from '@aws-sdk/client-secrets-manager'; // construct your clients with any custom configuration const secretsManagerClient = new SecretsManagerClient({ region: 'us-east-1' }); // pass the client to the provider -const secretsProvider = new SecretsProvider({ awsSdkV3Client: secretsManagerClient }); +const secretsProvider = new SecretsProvider({ + awsSdkV3Client: secretsManagerClient, +}); export const handler = async (): Promise => { // Retrieve a single secret const secret = await secretsProvider.get('my-secret'); console.log(secret); -}; \ No newline at end of file +}; diff --git a/docs/snippets/parameters/ssmProvider.ts b/docs/snippets/parameters/ssmProvider.ts index bda1379fee..172bc39d3e 100644 --- a/docs/snippets/parameters/ssmProvider.ts +++ b/docs/snippets/parameters/ssmProvider.ts @@ -11,7 +11,7 @@ export const handler = async (): Promise => { // Retrieve multiple parameters from a path prefix const parameters = await parametersProvider.getMultiple('/my/path/prefix'); - for (const [ key, value ] of Object.entries(parameters || {})) { + for (const [key, value] of Object.entries(parameters || {})) { console.log(`${key}: ${value}`); } -}; \ No newline at end of file +}; diff --git a/docs/snippets/parameters/ssmProviderCustomClient.ts b/docs/snippets/parameters/ssmProviderCustomClient.ts index 5110aa4a0f..ee30b13931 100644 --- a/docs/snippets/parameters/ssmProviderCustomClient.ts +++ b/docs/snippets/parameters/ssmProviderCustomClient.ts @@ -10,4 +10,4 @@ export const handler = async (): Promise => { // Retrieve a single parameter const parameter = await parametersProvider.get('/my/parameter'); console.log(parameter); -}; \ No newline at end of file +}; diff --git a/docs/snippets/parameters/ssmProviderDecryptAndRecursive.ts b/docs/snippets/parameters/ssmProviderDecryptAndRecursive.ts index 3824be82e3..9ffdb95f10 100644 --- a/docs/snippets/parameters/ssmProviderDecryptAndRecursive.ts +++ b/docs/snippets/parameters/ssmProviderDecryptAndRecursive.ts @@ -3,11 +3,17 @@ import { SSMProvider } from '@aws-lambda-powertools/parameters/ssm'; const parametersProvider = new SSMProvider(); export const handler = async (): Promise => { - const decryptedValue = await parametersProvider.get('/my/encrypted/parameter', { decrypt: true }); // (1) + const decryptedValue = await parametersProvider.get( + '/my/encrypted/parameter', + { decrypt: true } + ); // (1) console.log(decryptedValue); - const noRecursiveValues = await parametersProvider.getMultiple('/my/path/prefix', { recursive: false }); - for (const [ key, value ] of Object.entries(noRecursiveValues || {})) { + const noRecursiveValues = await parametersProvider.getMultiple( + '/my/path/prefix', + { recursive: false } + ); + for (const [key, value] of Object.entries(noRecursiveValues || {})) { console.log(`${key}: ${value}`); } -}; \ No newline at end of file +}; diff --git a/docs/snippets/parameters/testingYourCodeClearCache.ts b/docs/snippets/parameters/testingYourCodeClearCache.ts index a70e113324..beb2d1f53a 100644 --- a/docs/snippets/parameters/testingYourCodeClearCache.ts +++ b/docs/snippets/parameters/testingYourCodeClearCache.ts @@ -1,7 +1,6 @@ import { clearCaches } from '@aws-lambda-powertools/parameters'; describe('Function tests', () => { - beforeEach(() => { jest.clearAllMocks(); }); @@ -11,5 +10,4 @@ describe('Function tests', () => { }); // ... - -}); \ No newline at end of file +}); diff --git a/docs/snippets/parameters/testingYourCodeClientHandler.ts b/docs/snippets/parameters/testingYourCodeClientHandler.ts index dce84b04c1..9264d5eff3 100644 --- a/docs/snippets/parameters/testingYourCodeClientHandler.ts +++ b/docs/snippets/parameters/testingYourCodeClientHandler.ts @@ -1,15 +1,18 @@ import { getSecret } from '@aws-lambda-powertools/parameters/secrets'; -export const handler = async (_event: unknown, _context: unknown): Promise> => { +export const handler = async ( + _event: unknown, + _context: unknown +): Promise> => { try { const parameter = await getSecret('my-secret'); return { - value: parameter + value: parameter, }; } catch (error) { return { - message: 'Unable to retrieve secret', + message: 'Unable to retrieve secret', }; } -}; \ No newline at end of file +}; diff --git a/docs/snippets/parameters/testingYourCodeClientJestMock.ts b/docs/snippets/parameters/testingYourCodeClientJestMock.ts index 743488d72b..3fe93a696f 100644 --- a/docs/snippets/parameters/testingYourCodeClientJestMock.ts +++ b/docs/snippets/parameters/testingYourCodeClientJestMock.ts @@ -8,7 +8,6 @@ import { mockClient } from 'aws-sdk-client-mock'; import 'aws-sdk-client-mock-jest'; describe('Function tests', () => { - const client = mockClient(SecretsManagerClient); beforeEach(() => { @@ -20,22 +19,20 @@ describe('Function tests', () => { }); test('it returns the correct error message', async () => { - // Prepare - client.on(GetSecretValueCommand) - .rejectsOnce(new ResourceNotFoundException({ + client.on(GetSecretValueCommand).rejectsOnce( + new ResourceNotFoundException({ $metadata: { httpStatusCode: 404, }, message: 'Unable to retrieve secret', - })); + }) + ); // Act const result = await handler({}, {}); // Assess expect(result).toStrictEqual({ message: 'Unable to retrieve secret' }); - }); - -}); \ No newline at end of file +}); diff --git a/docs/snippets/parameters/testingYourCodeFunctionsHandler.ts b/docs/snippets/parameters/testingYourCodeFunctionsHandler.ts index bb440aef19..1b33075e1f 100644 --- a/docs/snippets/parameters/testingYourCodeFunctionsHandler.ts +++ b/docs/snippets/parameters/testingYourCodeFunctionsHandler.ts @@ -1,9 +1,12 @@ import { getParameter } from '@aws-lambda-powertools/parameters/ssm'; -export const handler = async (_event: unknown, _context: unknown): Promise> => { +export const handler = async ( + _event: unknown, + _context: unknown +): Promise> => { const parameter = await getParameter('my/param'); return { - value: parameter + value: parameter, }; -}; \ No newline at end of file +}; diff --git a/docs/snippets/parameters/testingYourCodeFunctionsJestMock.ts b/docs/snippets/parameters/testingYourCodeFunctionsJestMock.ts index de474fb15c..3b42aa9596 100644 --- a/docs/snippets/parameters/testingYourCodeFunctionsJestMock.ts +++ b/docs/snippets/parameters/testingYourCodeFunctionsJestMock.ts @@ -2,18 +2,18 @@ import { handler } from './testingYourCodeFunctionsHandler'; import { getParameter } from '@aws-lambda-powertools/parameters/ssm'; jest.mock('@aws-lambda-powertools/parameters/ssm', () => ({ - getParameter: jest.fn() + getParameter: jest.fn(), })); -const mockedGetParameter = getParameter as jest.MockedFunction; +const mockedGetParameter = getParameter as jest.MockedFunction< + typeof getParameter +>; describe('Function tests', () => { - beforeEach(() => { mockedGetParameter.mockClear(); }); test('it returns the correct response', async () => { - // Prepare mockedGetParameter.mockResolvedValue('my/param'); @@ -24,7 +24,5 @@ describe('Function tests', () => { expect(result).toEqual({ value: 'my/param', }); - }); - -}); \ No newline at end of file +}); diff --git a/docs/snippets/parameters/testingYourCodeProvidersHandler.ts b/docs/snippets/parameters/testingYourCodeProvidersHandler.ts index d733030381..3c631ba78f 100644 --- a/docs/snippets/parameters/testingYourCodeProvidersHandler.ts +++ b/docs/snippets/parameters/testingYourCodeProvidersHandler.ts @@ -5,10 +5,13 @@ const provider = new AppConfigProvider({ application: 'my-app', }); -export const handler = async (_event: unknown, _context: unknown): Promise> => { +export const handler = async ( + _event: unknown, + _context: unknown +): Promise> => { const config = await provider.get('my-config'); return { - value: config + value: config, }; -}; \ No newline at end of file +}; diff --git a/docs/snippets/parameters/testingYourCodeProvidersJestMock.ts b/docs/snippets/parameters/testingYourCodeProvidersJestMock.ts index cdaa0d5eae..96d4d025d9 100644 --- a/docs/snippets/parameters/testingYourCodeProvidersJestMock.ts +++ b/docs/snippets/parameters/testingYourCodeProvidersJestMock.ts @@ -2,7 +2,6 @@ import { handler } from './testingYourCodeFunctionsHandler'; import { AppConfigProvider } from '@aws-lambda-powertools/parameters/appconfig'; describe('Function tests', () => { - const providerSpy = jest.spyOn(AppConfigProvider.prototype, 'get'); beforeEach(() => { @@ -10,7 +9,6 @@ describe('Function tests', () => { }); test('it retrieves the config once and uses the correct name', async () => { - // Prepare const expectedConfig = { feature: { @@ -27,7 +25,5 @@ describe('Function tests', () => { expect(result).toStrictEqual({ value: expectedConfig }); expect(providerSpy).toHaveBeenCalledTimes(1); expect(providerSpy).toHaveBeenCalledWith('my-config'); - }); - -}); \ No newline at end of file +}); diff --git a/docs/snippets/parameters/transform.ts b/docs/snippets/parameters/transform.ts index c50159636e..1eb2288f5e 100644 --- a/docs/snippets/parameters/transform.ts +++ b/docs/snippets/parameters/transform.ts @@ -1,6 +1,8 @@ import { getParameter } from '@aws-lambda-powertools/parameters/ssm'; export const handler = async (): Promise => { - const valueFromJson = await getParameter('/my/json/parameter', { transform: 'json' }); + const valueFromJson = await getParameter('/my/json/parameter', { + transform: 'json', + }); console.log(valueFromJson); -}; \ No newline at end of file +}; diff --git a/docs/snippets/parameters/transformAuto.ts b/docs/snippets/parameters/transformAuto.ts index 6ee31047c7..f40a9f2f09 100644 --- a/docs/snippets/parameters/transformAuto.ts +++ b/docs/snippets/parameters/transformAuto.ts @@ -3,8 +3,10 @@ import { SSMProvider } from '@aws-lambda-powertools/parameters/ssm'; const parametersProvider = new SSMProvider(); export const handler = async (): Promise => { - const values = await parametersProvider.getMultiple('/param', { transform: 'auto' }); - for (const [ key, value ] of Object.entries(values || {})) { + const values = await parametersProvider.getMultiple('/param', { + transform: 'auto', + }); + for (const [key, value] of Object.entries(values || {})) { console.log(`${key}: ${value}`); } -}; \ No newline at end of file +}; diff --git a/docs/snippets/parameters/transformPartialFailures.ts b/docs/snippets/parameters/transformPartialFailures.ts index 975de75928..81a6a27815 100644 --- a/docs/snippets/parameters/transformPartialFailures.ts +++ b/docs/snippets/parameters/transformPartialFailures.ts @@ -9,8 +9,10 @@ export const handler = async (): Promise => { * /param/b: [some value] * /param/c: undefined */ - const parameters = await parametersProvider.getMultiple('/param', { transform: 'json' }); - for (const [ key, value ] of Object.entries(parameters || {})) { + const parameters = await parametersProvider.getMultiple('/param', { + transform: 'json', + }); + for (const [key, value] of Object.entries(parameters || {})) { console.log(`${key}: ${value}`); } @@ -18,12 +20,12 @@ export const handler = async (): Promise => { // This will throw a TransformParameterError const parameters2 = await parametersProvider.getMultiple('/param', { transform: 'json', - throwOnTransformError: true + throwOnTransformError: true, }); - for (const [ key, value ] of Object.entries(parameters2 || {})) { + for (const [key, value] of Object.entries(parameters2 || {})) { console.log(`${key}: ${value}`); } } catch (err) { console.error(err); } -}; \ No newline at end of file +}; diff --git a/docs/snippets/parameters/transformProvider.ts b/docs/snippets/parameters/transformProvider.ts index 417ac2b314..39e2e5b5be 100644 --- a/docs/snippets/parameters/transformProvider.ts +++ b/docs/snippets/parameters/transformProvider.ts @@ -4,10 +4,14 @@ const secretsProvider = new SecretsProvider(); export const handler = async (): Promise => { // Transform a JSON string - const json = await secretsProvider.get('my-secret-json', { transform: 'json' }); + const json = await secretsProvider.get('my-secret-json', { + transform: 'json', + }); console.log(json); // Transform a Base64 encoded string (e.g. binary) - const binary = await secretsProvider.getMultiple('my-secret-binary', { transform: 'binary' }); + const binary = await secretsProvider.getMultiple('my-secret-binary', { + transform: 'binary', + }); console.log(binary); -}; \ No newline at end of file +}; diff --git a/docs/snippets/tracer/accessRootTraceId.ts b/docs/snippets/tracer/accessRootTraceId.ts index f40b797346..f868d8b5e2 100644 --- a/docs/snippets/tracer/accessRootTraceId.ts +++ b/docs/snippets/tracer/accessRootTraceId.ts @@ -2,9 +2,11 @@ import { Tracer } from '@aws-lambda-powertools/tracer'; const tracer = new Tracer({ serviceName: 'serverlessAirline' }); -export const handler = async (_event: unknown, _context: unknown): Promise => { +export const handler = async ( + _event: unknown, + _context: unknown +): Promise => { try { - } catch (err) { const rootTraceId = tracer.getRootXrayTraceId(); @@ -12,7 +14,7 @@ export const handler = async (_event: unknown, _context: unknown): Promise return { statusCode: 500, body: `Internal Error - Please contact support and quote the following id: ${rootTraceId}`, - headers: { '_X_AMZN_TRACE_ID': rootTraceId }, + headers: { _X_AMZN_TRACE_ID: rootTraceId }, }; } -}; \ No newline at end of file +}; diff --git a/docs/snippets/tracer/basicUsage.ts b/docs/snippets/tracer/basicUsage.ts index b44814eb41..8f00dc4c7c 100644 --- a/docs/snippets/tracer/basicUsage.ts +++ b/docs/snippets/tracer/basicUsage.ts @@ -4,4 +4,4 @@ const tracer = new Tracer({ serviceName: 'serverlessAirline' }); export const handler = async (_event, _context): Promise => { tracer.getSegment(); -}; \ No newline at end of file +}; diff --git a/docs/snippets/tracer/captureAWS.ts b/docs/snippets/tracer/captureAWS.ts index 5155f569b9..0f86993e15 100644 --- a/docs/snippets/tracer/captureAWS.ts +++ b/docs/snippets/tracer/captureAWS.ts @@ -2,4 +2,4 @@ import { S3 } from 'aws-sdk'; import { Tracer } from '@aws-lambda-powertools/tracer'; const tracer = new Tracer({ serviceName: 'serverlessAirline' }); -tracer.captureAWSClient(new S3()); \ No newline at end of file +tracer.captureAWSClient(new S3()); diff --git a/docs/snippets/tracer/captureAWSAll.ts b/docs/snippets/tracer/captureAWSAll.ts index a5aca36989..bc4d4875e7 100644 --- a/docs/snippets/tracer/captureAWSAll.ts +++ b/docs/snippets/tracer/captureAWSAll.ts @@ -2,4 +2,4 @@ import { Tracer } from '@aws-lambda-powertools/tracer'; import AWS from 'aws-sdk'; const tracer = new Tracer({ serviceName: 'serverlessAirline' }); -tracer.captureAWS(AWS); \ No newline at end of file +tracer.captureAWS(AWS); diff --git a/docs/snippets/tracer/captureAWSv3.ts b/docs/snippets/tracer/captureAWSv3.ts index dd1ca6870a..f6f0d59a8f 100644 --- a/docs/snippets/tracer/captureAWSv3.ts +++ b/docs/snippets/tracer/captureAWSv3.ts @@ -2,4 +2,4 @@ import { SecretsManagerClient } from '@aws-sdk/client-secrets-manager'; import { Tracer } from '@aws-lambda-powertools/tracer'; const tracer = new Tracer({ serviceName: 'serverlessAirline' }); -tracer.captureAWSv3Client(new SecretsManagerClient({})); \ No newline at end of file +tracer.captureAWSv3Client(new SecretsManagerClient({})); diff --git a/docs/snippets/tracer/captureHTTP.ts b/docs/snippets/tracer/captureHTTP.ts index 15ca0adef4..61c9cc18ec 100644 --- a/docs/snippets/tracer/captureHTTP.ts +++ b/docs/snippets/tracer/captureHTTP.ts @@ -3,7 +3,10 @@ import axios from 'axios'; // (1) const tracer = new Tracer({ serviceName: 'serverlessAirline' }); -export const handler = async (_event: unknown, _context: unknown): Promise => { +export const handler = async ( + _event: unknown, + _context: unknown +): Promise => { const { data } = await axios.get('https://httpbin.org/status/200'); tracer.addResponseAsMetadata(data); -}; \ No newline at end of file +}; diff --git a/docs/snippets/tracer/captureMethodDecorator.ts b/docs/snippets/tracer/captureMethodDecorator.ts index 69b997b265..1b15cf44c7 100644 --- a/docs/snippets/tracer/captureMethodDecorator.ts +++ b/docs/snippets/tracer/captureMethodDecorator.ts @@ -15,6 +15,6 @@ class Lambda implements LambdaInterface { await this.getChargeId(); } } - + const handlerClass = new Lambda(); -export const handler = handlerClass.handler.bind(handlerClass); // (2) \ No newline at end of file +export const handler = handlerClass.handler.bind(handlerClass); // (2) diff --git a/docs/snippets/tracer/captureMethodManual.ts b/docs/snippets/tracer/captureMethodManual.ts index 8e8a6e07ed..491fae31d2 100644 --- a/docs/snippets/tracer/captureMethodManual.ts +++ b/docs/snippets/tracer/captureMethodManual.ts @@ -27,7 +27,9 @@ const getChargeId = async (): Promise => { return res; }; -export const handler = async (_event: unknown, _context: unknown): Promise => { +export const handler = async ( + _event: unknown, + _context: unknown +): Promise => { await getChargeId(); - -}; \ No newline at end of file +}; diff --git a/docs/snippets/tracer/decorator.ts b/docs/snippets/tracer/decorator.ts index 5373433f6f..616c3eb63d 100644 --- a/docs/snippets/tracer/decorator.ts +++ b/docs/snippets/tracer/decorator.ts @@ -10,6 +10,6 @@ class Lambda implements LambdaInterface { tracer.getSegment(); } } - + const handlerClass = new Lambda(); -export const handler = handlerClass.handler.bind(handlerClass); // (1) \ No newline at end of file +export const handler = handlerClass.handler.bind(handlerClass); // (1) diff --git a/docs/snippets/tracer/disableCaptureResponseHandler.ts b/docs/snippets/tracer/disableCaptureResponseHandler.ts index 0191f51b02..9a08a31dcc 100644 --- a/docs/snippets/tracer/disableCaptureResponseHandler.ts +++ b/docs/snippets/tracer/disableCaptureResponseHandler.ts @@ -11,4 +11,4 @@ class Lambda implements LambdaInterface { } const handlerClass = new Lambda(); -export const handler = handlerClass.handler.bind(handlerClass); \ No newline at end of file +export const handler = handlerClass.handler.bind(handlerClass); diff --git a/docs/snippets/tracer/disableCaptureResponseMethod.ts b/docs/snippets/tracer/disableCaptureResponseMethod.ts index 7828d3b264..26b6e2519a 100644 --- a/docs/snippets/tracer/disableCaptureResponseMethod.ts +++ b/docs/snippets/tracer/disableCaptureResponseMethod.ts @@ -16,4 +16,4 @@ class Lambda implements LambdaInterface { } const handlerClass = new Lambda(); -export const handler = handlerClass.handler.bind(handlerClass); \ No newline at end of file +export const handler = handlerClass.handler.bind(handlerClass); diff --git a/docs/snippets/tracer/disableCaptureResponseMiddy.ts b/docs/snippets/tracer/disableCaptureResponseMiddy.ts index 567b38036a..82aa1b345c 100644 --- a/docs/snippets/tracer/disableCaptureResponseMiddy.ts +++ b/docs/snippets/tracer/disableCaptureResponseMiddy.ts @@ -3,12 +3,15 @@ import middy from '@middy/core'; const tracer = new Tracer({ serviceName: 'serverlessAirline' }); -const lambdaHandler = async (_event: unknown, _context: unknown): Promise => { +const lambdaHandler = async ( + _event: unknown, + _context: unknown +): Promise => { /* ... */ }; // Wrap the handler with middy export const handler = middy(lambdaHandler) -// Use the middleware by passing the Tracer instance as a parameter, -// but specify the captureResponse option as false. - .use(captureLambdaHandler(tracer, { captureResponse: false })); \ No newline at end of file + // Use the middleware by passing the Tracer instance as a parameter, + // but specify the captureResponse option as false. + .use(captureLambdaHandler(tracer, { captureResponse: false })); diff --git a/docs/snippets/tracer/escapeHatch.ts b/docs/snippets/tracer/escapeHatch.ts index a1515582c2..b4b169cdec 100644 --- a/docs/snippets/tracer/escapeHatch.ts +++ b/docs/snippets/tracer/escapeHatch.ts @@ -4,4 +4,4 @@ import { Tracer } from '@aws-lambda-powertools/tracer'; const serviceName = 'serverlessAirline'; const logger = new Logger({ serviceName: serviceName }); const tracer = new Tracer({ serviceName: serviceName }); -tracer.provider.setLogger(logger); \ No newline at end of file +tracer.provider.setLogger(logger); diff --git a/docs/snippets/tracer/manual.ts b/docs/snippets/tracer/manual.ts index a17be6a900..0a06822340 100644 --- a/docs/snippets/tracer/manual.ts +++ b/docs/snippets/tracer/manual.ts @@ -2,7 +2,10 @@ import { Tracer } from '@aws-lambda-powertools/tracer'; const tracer = new Tracer({ serviceName: 'serverlessAirline' }); -export const handler = async (_event: unknown, _context: unknown): Promise => { +export const handler = async ( + _event: unknown, + _context: unknown +): Promise => { const segment = tracer.getSegment(); // This is the facade segment (the one that is created by AWS Lambda) // Create subsegment for the function & set it as active const subsegment = segment.addNewSubsegment(`## ${process.env._HANDLER}`); @@ -11,10 +14,9 @@ export const handler = async (_event: unknown, _context: unknown): Promise => { +const lambdaHandler = async ( + _event: unknown, + _context: unknown +): Promise => { tracer.putAnnotation('successfulBooking', true); }; // Wrap the handler with middy export const handler = middy(lambdaHandler) -// Use the middleware by passing the Tracer instance as a parameter - .use(captureLambdaHandler(tracer)); \ No newline at end of file + // Use the middleware by passing the Tracer instance as a parameter + .use(captureLambdaHandler(tracer)); diff --git a/docs/snippets/tracer/putAnnotation.ts b/docs/snippets/tracer/putAnnotation.ts index 399049046b..c83363417f 100644 --- a/docs/snippets/tracer/putAnnotation.ts +++ b/docs/snippets/tracer/putAnnotation.ts @@ -2,6 +2,9 @@ import { Tracer } from '@aws-lambda-powertools/tracer'; const tracer = new Tracer({ serviceName: 'serverlessAirline' }); -export const handler = async (_event: unknown, _context: unknown): Promise => { +export const handler = async ( + _event: unknown, + _context: unknown +): Promise => { tracer.putAnnotation('successfulBooking', true); -}; \ No newline at end of file +}; diff --git a/docs/snippets/tracer/putMetadata.ts b/docs/snippets/tracer/putMetadata.ts index e9d873a632..4458907925 100644 --- a/docs/snippets/tracer/putMetadata.ts +++ b/docs/snippets/tracer/putMetadata.ts @@ -2,9 +2,11 @@ import { Tracer } from '@aws-lambda-powertools/tracer'; const tracer = new Tracer({ serviceName: 'serverlessAirline' }); -export const handler = async (_event: unknown, _context: unknown): Promise => { - +export const handler = async ( + _event: unknown, + _context: unknown +): Promise => { tracer.putMetadata('paymentResponse', { - 'foo': 'bar' + foo: 'bar', }); -}; \ No newline at end of file +}; diff --git a/docs/snippets/tracer/sam.ts b/docs/snippets/tracer/sam.ts index 407c1ac863..9d84200b26 100644 --- a/docs/snippets/tracer/sam.ts +++ b/docs/snippets/tracer/sam.ts @@ -7,4 +7,4 @@ tracer.getSegment(); // You can also pass the parameter in the constructor // const tracer = new Tracer({ // serviceName: 'serverlessAirline' -// }); \ No newline at end of file +// }); diff --git a/docs/snippets/parameters/tsconfig.json b/docs/snippets/tsconfig.json similarity index 82% rename from docs/snippets/parameters/tsconfig.json rename to docs/snippets/tsconfig.json index 1530f2b93a..6f72111cb7 100644 --- a/docs/snippets/parameters/tsconfig.json +++ b/docs/snippets/tsconfig.json @@ -18,16 +18,16 @@ "baseUrl": ".", "paths": { "@aws-lambda-powertools/parameters/ssm": [ - "../../../packages/parameters/lib/ssm" + "../../packages/parameters/lib/ssm" ], "@aws-lambda-powertools/parameters/secrets": [ - "../../../packages/parameters/lib/secrets" + "../../packages/parameters/lib/secrets" ], "@aws-lambda-powertools/parameters/appconfig": [ - "../../../packages/parameters/lib/appconfig" + "../../packages/parameters/lib/appconfig" ], "@aws-lambda-powertools/parameters/dynamodb": [ - "../../../packages/parameters/lib/dynamodb" + "../../packages/parameters/lib/dynamodb" ], }, }, From 663a1ce92e7ba17a577f9ea511543ae75ef03724 Mon Sep 17 00:00:00 2001 From: Andrea Amorosi Date: Fri, 12 May 2023 11:15:18 +0200 Subject: [PATCH 2/2] style(docs): apply standardized formatting --- docs/core/logger.md | 47 +++++++++++---------- docs/core/metrics.md | 42 +++++++++--------- docs/core/tracer.md | 34 +++++++-------- docs/snippets/tracer/captureHTTP.ts | 5 +-- docs/snippets/tracer/captureMethodManual.ts | 19 ++++++--- docs/snippets/tracer/manual.ts | 19 ++++++--- docs/utilities/parameters.md | 24 +++++------ 7 files changed, 100 insertions(+), 90 deletions(-) diff --git a/docs/core/logger.md b/docs/core/logger.md index a36660baa3..1c76caab26 100644 --- a/docs/core/logger.md +++ b/docs/core/logger.md @@ -46,12 +46,12 @@ The library requires two settings. You can set them as environment variables, or These settings will be used across all logs emitted: -| Setting | Description | Environment variable | Default Value | Allowed Values | Example Value | Constructor parameter | -|-------------------------|------------------------------------------------------------------------------------------------------------------|---------------------------------|---------------------|-------------------------------------------|--------------------|-----------------------| -| **Service name** | Sets the name of service of which the Lambda function is part of, that will be present across all log statements | `POWERTOOLS_SERVICE_NAME` | `service_undefined` | Any string | `serverlessAirline`| `serviceName` | -| **Logging level** | Sets how verbose Logger should be, from the most verbose to the least verbose (no logs) | `LOG_LEVEL` | `info` |`DEBUG`, `INFO`, `WARN`, `ERROR`, `SILENT` | `ERROR` | `logLevel` | -| **Log incoming event** | Whether to log or not the incoming event when using the decorator or middleware | `POWERTOOLS_LOGGER_LOG_EVENT` | `false` | `true`, `false` | `false` | `logEvent` | -| **Debug log sampling** | Probability that a Lambda invocation will print all the log items regardless of the log level setting | `POWERTOOLS_LOGGER_SAMPLE_RATE` | `0` | `0.0` to `1` | `0.5` | `sampleRateValue` | +| Setting | Description | Environment variable | Default Value | Allowed Values | Example Value | Constructor parameter | +| ---------------------- | ---------------------------------------------------------------------------------------------------------------- | ------------------------------- | ------------------- | ------------------------------------------ | ------------------- | --------------------- | +| **Service name** | Sets the name of service of which the Lambda function is part of, that will be present across all log statements | `POWERTOOLS_SERVICE_NAME` | `service_undefined` | Any string | `serverlessAirline` | `serviceName` | +| **Logging level** | Sets how verbose Logger should be, from the most verbose to the least verbose (no logs) | `LOG_LEVEL` | `info` | `DEBUG`, `INFO`, `WARN`, `ERROR`, `SILENT` | `ERROR` | `logLevel` | +| **Log incoming event** | Whether to log or not the incoming event when using the decorator or middleware | `POWERTOOLS_LOGGER_LOG_EVENT` | `false` | `true`, `false` | `false` | `logEvent` | +| **Debug log sampling** | Probability that a Lambda invocation will print all the log items regardless of the log level setting | `POWERTOOLS_LOGGER_SAMPLE_RATE` | `0` | `0.0` to `1` | `0.5` | `sampleRateValue` | #### Example using AWS Serverless Application Model (SAM) @@ -80,7 +80,7 @@ These settings will be used across all logs emitted: Your Logger will include the following keys to your structured logging (default log formatter): | Key | Example | Note | -|-----------------------------|------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| --------------------------- | ---------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **level**: `string` | `INFO` | Logging level set for the Lambda function's invocation | | **message**: `string` | `Query performed to DynamoDB` | A descriptive, human-readable representation of this log item | | **sampling_rate**: `float` | `0.1` | When enabled, it prints all the logs of a percentage of invocations, e.g. 10% | @@ -98,13 +98,13 @@ You can enrich your structured logs with key Lambda context information in multi This functionality will include the following keys in your structured logs: -Key | Example -------------------------------------------------- | --------------------------------------------------------------------------------- -**cold_start**: `bool` | `false` -**function_name** `string` | `shopping-cart-api-lambda-prod-eu-west-1` -**function_memory_size**: `number` | `128` -**function_arn**: `string` | `arn:aws:lambda:eu-west-1:123456789012:function:shopping-cart-api-lambda-prod-eu-west-1` -**function_request_id**: `string` | `c6af9ac6-7b61-11e6-9a41-93e812345678` +| Key | Example | +| ---------------------------------- | ---------------------------------------------------------------------------------------- | +| **cold_start**: `bool` | `false` | +| **function_name** `string` | `shopping-cart-api-lambda-prod-eu-west-1` | +| **function_memory_size**: `number` | `128` | +| **function_arn**: `string` | `arn:aws:lambda:eu-west-1:123456789012:function:shopping-cart-api-lambda-prod-eu-west-1` | +| **function_request_id**: `string` | `c6af9ac6-7b61-11e6-9a41-93e812345678` | === "Middy Middleware" @@ -112,7 +112,7 @@ Key | Example You can install Middy by running `npm i @middy/core`. Learn more about [its usage and lifecycle in the official Middy documentation](https://middy.js.org/docs/intro/getting-started){target="_blank"}. - ```typescript hl_lines="1-2 10-11" + ```typescript hl_lines="1-2 13" --8<-- "docs/snippets/logger/middy.ts" ``` @@ -126,7 +126,7 @@ Key | Example === "Manual" - ```typescript hl_lines="7" + ```typescript hl_lines="6" --8<-- "docs/snippets/logger/manual.ts" ``` @@ -158,7 +158,7 @@ When debugging in non-production environments, you can instruct Logger to log th === "Middy Middleware" - ```typescript hl_lines="11" + ```typescript hl_lines="10" --8<-- "docs/snippets/logger/eventMiddy.ts" ``` @@ -182,7 +182,7 @@ To remove the keys you added, you can use the `removeKeys` method. === "handler.ts" - ```typescript hl_lines="5-13 17-25 30" + ```typescript hl_lines="5-13 17-25 32" --8<-- "docs/snippets/logger/appendKeys.ts" ``` === "Example CloudWatch Logs excerpt" @@ -229,7 +229,7 @@ If you want to make sure that persistent attributes added **inside the handler f === "Middy Middleware" - ```typescript hl_lines="27" + ```typescript hl_lines="30" --8<-- "docs/snippets/logger/clearStateMiddy.ts" ``` @@ -294,7 +294,7 @@ You can append additional data to a single log item by passing objects as additi === "handler.ts" - ```typescript hl_lines="14 18-20 24 32" + ```typescript hl_lines="16-18 23-25 37" --8<-- "docs/snippets/logger/extraData.ts" ``` === "Example CloudWatch Logs excerpt" @@ -347,7 +347,7 @@ The error will be logged with default key name `error`, but you can also pass yo === "handler.ts" - ```typescript hl_lines="11 18" + ```typescript hl_lines="13 20-22" --8<-- "docs/snippets/logger/logError.ts" ``` @@ -396,7 +396,7 @@ The `createChild` method allows you to create a child instance of the Logger, wh === "handler.ts" - ```typescript hl_lines="9-11 18-19" + ```typescript hl_lines="16-18" --8<-- "docs/snippets/logger/createChild.ts" ``` @@ -447,7 +447,8 @@ For example, by setting the "sample rate" to `0.5`, roughly 50% of your lambda i However, it might still be useful to print all the logs (including debug ones) of a very small percentage of invocations to have a better understanding of the behaviour of your code in production even when there are no errors. - Sampling decision happens at the Logger initialization. This means sampling may happen significantly more or less than depending on your traffic patterns, for example a steady low number of invocations and thus few cold starts. + **Sampling decision happens at the Logger initialization**. This means sampling may happen significantly more or less than depending on your traffic patterns, for example a steady low number of invocations and thus few cold starts. + If you want to reset the sampling decision and refresh it for each invocation, you can call the `logger.refreshSampleRateCalculation()` method at the beginning or end of your handler. === "handler.ts" diff --git a/docs/core/metrics.md b/docs/core/metrics.md index 12386521aa..a1d92c38fb 100644 --- a/docs/core/metrics.md +++ b/docs/core/metrics.md @@ -53,7 +53,7 @@ The `Metrics` utility must always be instantiated outside of the Lambda handler. === "handler.ts" - ```typescript hl_lines="1 3" + ```typescript hl_lines="1 3-6" --8<-- "docs/snippets/metrics/basicUsage.ts" ``` @@ -63,10 +63,10 @@ The library requires two settings. You can set them as environment variables, or These settings will be used across all metrics emitted: -| Setting | Description | Environment variable | Default | Allowed Values | Example | Constructor parameter | -|----------------------|-----------------------------------------------------------------|-------------------------------|--------------------|----------------|--------------------|-----------------------| -| **Service** | Optionally, sets **service** metric dimension across all metrics| `POWERTOOLS_SERVICE_NAME` | `service_undefined`| Any string | `serverlessAirline`| `serviceName` | -| **Metric namespace** | Logical container where all metrics will be placed | `POWERTOOLS_METRICS_NAMESPACE`| `default_namespace`| Any string | `serverlessAirline`| `default_namespace` | +| Setting | Description | Environment variable | Default | Allowed Values | Example | Constructor parameter | +| -------------------- | ---------------------------------------------------------------- | ------------------------------ | ------------------- | -------------- | ------------------- | --------------------- | +| **Service** | Optionally, sets **service** metric dimension across all metrics | `POWERTOOLS_SERVICE_NAME` | `service_undefined` | Any string | `serverlessAirline` | `serviceName` | +| **Metric namespace** | Logical container where all metrics will be placed | `POWERTOOLS_METRICS_NAMESPACE` | `default_namespace` | Any string | `serverlessAirline` | `default_namespace` | !!! tip Use your application name or main service as the metric namespace to easily group all metrics @@ -103,13 +103,13 @@ You can create metrics using the `addMetric` method, and you can create dimensio === "Metrics" - ```typescript hl_lines="6" + ```typescript hl_lines="12" --8<-- "docs/snippets/metrics/createMetrics.ts" ``` === "Metrics with custom dimensions" - ```typescript hl_lines="6-7" + ```typescript hl_lines="12-13" --8<-- "docs/snippets/metrics/customDimensions.ts" ``` @@ -131,7 +131,7 @@ You can create [high-resolution metrics](https://aws.amazon.com/about-aws/whats- === "Metrics with high resolution" - ```typescript hl_lines="6" + ```typescript hl_lines="4 20" --8<-- "docs/snippets/metrics/addHighResolutionMetric.ts" ``` @@ -144,7 +144,7 @@ You can call `addMetric()` with the same name multiple times. The values will be === "addMetric() with the same name" - ```typescript hl_lines="7 9" + ```typescript hl_lines="12 14" --8<-- "docs/snippets/metrics/multiValueMetrics.ts" ``` === "Example CloudWatch Logs excerpt" @@ -199,19 +199,19 @@ You can add default dimensions to your metrics by passing them as parameters in You can install Middy by running `npm i @middy/core`. Learn more about [its usage and lifecycle in the official Middy documentation](https://middy.js.org/docs/intro/getting-started){target="_blank"}. - ```typescript hl_lines="1-2 11 13" + ```typescript hl_lines="24-26" --8<-- "docs/snippets/metrics/defaultDimensionsMiddy.ts" ``` === "setDefaultDimensions method" - ```typescript hl_lines="4" + ```typescript hl_lines="7" --8<-- "docs/snippets/metrics/setDefaultDimensions.ts" ``` === "with logMetrics decorator" - ```typescript hl_lines="9" + ```typescript hl_lines="12" --8<-- "docs/snippets/metrics/defaultDimensionsDecorator.ts" ``` @@ -245,7 +245,7 @@ See below an example of how to automatically flush metrics with the Middy-compat === "handler.ts" - ```typescript hl_lines="1-2 7 10-11" + ```typescript hl_lines="20" --8<-- "docs/snippets/metrics/middy.ts" ``` @@ -285,7 +285,7 @@ The `logMetrics` decorator of the metrics utility can be used when your Lambda h === "handler.ts" - ```typescript hl_lines="8" + ```typescript hl_lines="10" --8<-- "docs/snippets/metrics/decorator.ts" ``` @@ -326,7 +326,7 @@ You can manually flush the metrics with `publishStoredMetrics` as follows: === "handler.ts" - ```typescript hl_lines="7" + ```typescript hl_lines="13" --8<-- "docs/snippets/metrics/manual.ts" ``` @@ -364,7 +364,7 @@ If you want to ensure that at least one metric is emitted before you flush them, === "handler.ts" - ```typescript hl_lines="11" + ```typescript hl_lines="21" --8<-- "docs/snippets/metrics/throwOnEmptyMetrics.ts" ``` @@ -374,13 +374,13 @@ You can optionally capture cold start metrics with the `logMetrics` middleware o === "Middy Middleware" - ```typescript hl_lines="11" + ```typescript hl_lines="21" --8<-- "docs/snippets/metrics/captureColdStartMetricMiddy.ts" ``` === "logMetrics decorator" - ```typescript hl_lines="8" + ```typescript hl_lines="10" --8<-- "docs/snippets/metrics/captureColdStartMetricDecorator.ts" ``` @@ -404,7 +404,7 @@ You can add high-cardinality data as part of your Metrics log with the `addMetad === "handler.ts" - ```typescript hl_lines="8" + ```typescript hl_lines="18" --8<-- "docs/snippets/metrics/addMetadata.ts" ``` @@ -456,13 +456,13 @@ CloudWatch EMF uses the same dimensions across all your metrics. Use `singleMetr === "Middy Middleware" - ```typescript hl_lines="11 13-14" + ```typescript hl_lines="21 23-24" --8<-- "docs/snippets/metrics/singleMetricDifferentDimsMiddy.ts" ``` === "logMetrics decorator" - ```typescript hl_lines="14 16-17" + ```typescript hl_lines="16 18-19" --8<-- "docs/snippets/metrics/singleMetricDifferentDimsDecorator.ts" ``` diff --git a/docs/core/tracer.md b/docs/core/tracer.md index e03e07c128..0f1fdfdaac 100644 --- a/docs/core/tracer.md +++ b/docs/core/tracer.md @@ -44,13 +44,13 @@ The `Tracer` utility must always be instantiated outside of the Lambda handler. The library has three optional settings. You can set them as environment variables, or pass them in the constructor: -| Setting | Description | Environment variable | Default | Allowed Values | Example | Constructor parameter | -|----------------------------|-----------------------------------------------------------------------| -------------------------------------------|--------------------|------------------|--------------------|------------------------| -| **Service name** | Sets an annotation with the **name of the service** across all traces | `POWERTOOLS_SERVICE_NAME` | `service_undefined`| Any string | `serverlessAirline`| `serviceName` | -| **Tracing enabled** | Enables or disables tracing. | `POWERTOOLS_TRACE_ENABLED` | `true `| `true` or `false`| `false` | `enabled` | -| **Capture HTTPs Requests** | Defines whether HTTPs requests will be traced or not | `POWERTOOLS_TRACER_CAPTURE_HTTPS_REQUESTS` | `true` | `true` or `false`| `false` | `captureHTTPsRequests` | -| **Capture Response** | Defines whether functions responses are serialized as metadata | `POWERTOOLS_TRACER_CAPTURE_RESPONSE` | `true` | `true` or `false`| `false` | `captureResult` | -| **Capture Errors** | Defines whether functions errors are serialized as metadata | `POWERTOOLS_TRACER_CAPTURE_ERROR` | `true` | `true` or `false`| `false` | N/A | +| Setting | Description | Environment variable | Default | Allowed Values | Example | Constructor parameter | +| -------------------------- | --------------------------------------------------------------------- | ------------------------------------------ | ------------------- | ----------------- | ------------------- | ---------------------- | +| **Service name** | Sets an annotation with the **name of the service** across all traces | `POWERTOOLS_SERVICE_NAME` | `service_undefined` | Any string | `serverlessAirline` | `serviceName` | +| **Tracing enabled** | Enables or disables tracing. | `POWERTOOLS_TRACE_ENABLED` | `true ` | `true` or `false` | `false` | `enabled` | +| **Capture HTTPs Requests** | Defines whether HTTPs requests will be traced or not | `POWERTOOLS_TRACER_CAPTURE_HTTPS_REQUESTS` | `true` | `true` or `false` | `false` | `captureHTTPsRequests` | +| **Capture Response** | Defines whether functions responses are serialized as metadata | `POWERTOOLS_TRACER_CAPTURE_RESPONSE` | `true` | `true` or `false` | `false` | `captureResult` | +| **Capture Errors** | Defines whether functions errors are serialized as metadata | `POWERTOOLS_TRACER_CAPTURE_ERROR` | `true` | `true` or `false` | `false` | N/A | !!! note Before your use this utility, your AWS Lambda function must have [Active Tracing enabled](https://docs.aws.amazon.com/lambda/latest/dg/services-xray.html) as well as [have permissions](https://docs.aws.amazon.com/lambda/latest/dg/services-xray.html#services-xray-permissions) to send traces to AWS X-Ray @@ -89,7 +89,7 @@ You can quickly start by importing the `Tracer` class, initialize it outside the You can install Middy by running `npm i @middy/core`. Learn more about [its usage and lifecycle in the official Middy documentation](https://middy.js.org/docs/intro/getting-started){target="_blank"}. - ```typescript hl_lines="1-2 11 13" + ```typescript hl_lines="1-2 14 16" --8<-- "docs/snippets/tracer/middy.ts" ``` @@ -110,7 +110,7 @@ You can quickly start by importing the `Tracer` class, initialize it outside the === "Manual" - ```typescript hl_lines="6 8-9 12-13 19 22 26 28" + ```typescript hl_lines="9-15 18-19 23 26 29-34" --8<-- "docs/snippets/tracer/manual.ts" ``` @@ -131,13 +131,13 @@ When using the `captureLambdaHandler` decorator or middleware, Tracer performs t === "Annotations" You can add annotations using `putAnnotation` method. - ```typescript hl_lines="6" + ```typescript hl_lines="9" --8<-- "docs/snippets/tracer/putAnnotation.ts" ``` === "Metadata" You can add metadata using `putMetadata` method. - ```typescript hl_lines="7" + ```typescript hl_lines="9-11" --8<-- "docs/snippets/tracer/putMetadata.ts" ``` @@ -161,7 +161,7 @@ You can trace other Class methods using the `captureMethod` decorator or any arb === "Manual" - ```typescript hl_lines="6 8-9 15 18 23 25" + ```typescript hl_lines="6-12 18 21 25-30" --8<-- "docs/snippets/tracer/captureMethodManual.ts" ``` @@ -188,7 +188,7 @@ You can patch all AWS SDK v2 clients by calling the `captureAWS` method: === "index.ts" - ```typescript hl_lines="4" + ```typescript hl_lines="5" --8<-- "docs/snippets/tracer/captureAWSAll.ts" ``` @@ -212,7 +212,7 @@ You can opt-out from this feature by setting the **`POWERTOOLS_TRACER_CAPTURE_HT === "index.ts" - ```typescript hl_lines="2 7" + ```typescript hl_lines="2" --8<-- "docs/snippets/tracer/captureHTTP.ts" ``` @@ -263,7 +263,7 @@ Alternatively, use the `captureResponse: false` option in both `tracer.captureLa === "method.ts" - ```typescript hl_lines="6" + ```typescript hl_lines="7" --8<-- "docs/snippets/tracer/disableCaptureResponseMethod.ts" ``` @@ -275,7 +275,7 @@ Alternatively, use the `captureResponse: false` option in both `tracer.captureLa === "middy.ts" - ```typescript hl_lines="14" + ```typescript hl_lines="17" --8<-- "docs/snippets/tracer/disableCaptureResponseMiddy.ts" ``` @@ -298,7 +298,7 @@ Tracer exposes a `getRootXrayTraceId()` method that allows you to retrieve the [ === "index.ts" - ```typescript hl_lines="9" + ```typescript hl_lines="11" --8<-- "docs/snippets/tracer/accessRootTraceId.ts" ``` diff --git a/docs/snippets/tracer/captureHTTP.ts b/docs/snippets/tracer/captureHTTP.ts index 61c9cc18ec..506fbb0778 100644 --- a/docs/snippets/tracer/captureHTTP.ts +++ b/docs/snippets/tracer/captureHTTP.ts @@ -1,12 +1,11 @@ import { Tracer } from '@aws-lambda-powertools/tracer'; import axios from 'axios'; // (1) -const tracer = new Tracer({ serviceName: 'serverlessAirline' }); +new Tracer({ serviceName: 'serverlessAirline' }); export const handler = async ( _event: unknown, _context: unknown ): Promise => { - const { data } = await axios.get('https://httpbin.org/status/200'); - tracer.addResponseAsMetadata(data); + await axios.get('https://httpbin.org/status/200'); }; diff --git a/docs/snippets/tracer/captureMethodManual.ts b/docs/snippets/tracer/captureMethodManual.ts index 491fae31d2..d4ad79a86b 100644 --- a/docs/snippets/tracer/captureMethodManual.ts +++ b/docs/snippets/tracer/captureMethodManual.ts @@ -4,9 +4,12 @@ const tracer = new Tracer({ serviceName: 'serverlessAirline' }); const getChargeId = async (): Promise => { const parentSubsegment = tracer.getSegment(); // This is the subsegment currently active - // Create subsegment for the function & set it as active - const subsegment = parentSubsegment.addNewSubsegment(`### chargeId`); - tracer.setSegment(subsegment); + let subsegment; + if (parentSubsegment) { + // Create subsegment for the function & set it as active + subsegment = parentSubsegment.addNewSubsegment(`### chargeId`); + tracer.setSegment(subsegment); + } let res; try { @@ -19,10 +22,12 @@ const getChargeId = async (): Promise => { throw err; } - // Close subsegment (the AWS Lambda one is closed automatically) - subsegment.close(); - // Set the facade segment as active again - tracer.setSegment(parentSubsegment); + if (parentSubsegment && subsegment) { + // Close subsegment (the AWS Lambda one is closed automatically) + subsegment.close(); + // Set the facade segment as active again + tracer.setSegment(parentSubsegment); + } return res; }; diff --git a/docs/snippets/tracer/manual.ts b/docs/snippets/tracer/manual.ts index 0a06822340..af56f12cff 100644 --- a/docs/snippets/tracer/manual.ts +++ b/docs/snippets/tracer/manual.ts @@ -7,9 +7,12 @@ export const handler = async ( _context: unknown ): Promise => { const segment = tracer.getSegment(); // This is the facade segment (the one that is created by AWS Lambda) - // Create subsegment for the function & set it as active - const subsegment = segment.addNewSubsegment(`## ${process.env._HANDLER}`); - tracer.setSegment(subsegment); + let subsegment; + if (segment) { + // Create subsegment for the function & set it as active + subsegment = segment.addNewSubsegment(`## ${process.env._HANDLER}`); + tracer.setSegment(subsegment); + } // Annotate the subsegment with the cold start & serviceName tracer.annotateColdStart(); @@ -23,10 +26,12 @@ export const handler = async ( tracer.addErrorAsMetadata(err as Error); throw err; } finally { - // Close subsegment (the AWS Lambda one is closed automatically) - subsegment.close(); - // Set back the facade segment as active again - tracer.setSegment(segment); + if (segment && subsegment) { + // Close subsegment (the AWS Lambda one is closed automatically) + subsegment.close(); + // Set back the facade segment as active again + tracer.setSegment(segment); + } } return {}; diff --git a/docs/utilities/parameters.md b/docs/utilities/parameters.md index 8663faed5d..b66a71a286 100644 --- a/docs/utilities/parameters.md +++ b/docs/utilities/parameters.md @@ -88,7 +88,7 @@ For multiple parameters, you can use either: === "getParametersByName" - ```typescript hl_lines="1-4 7-9 14" title="Fetching multiple parameters by names from SSM" + ```typescript hl_lines="1-2 4-11 15" title="Fetching multiple parameters by names from SSM" --8<-- "docs/snippets/parameters/getParametersByName.ts" ``` @@ -101,7 +101,7 @@ For multiple parameters, you can use either: * Keep only successful parameter names and their values in the response * Throw `GetParameterError` if any of your parameters is named `_errors` -```typescript hl_lines="1-4 7-8 13 15 18" +```typescript hl_lines="9 13-15 18" --8<-- "docs/snippets/parameters/getParametersByNameGracefulErrorHandling.ts" ``` @@ -134,7 +134,7 @@ You can adjust how long values should be kept in cache by using the param `maxAg ???+ tip If you want to set the same TTL for all parameters, you can set the `POWERTOOLS_PARAMETERS_MAX_AGE` environment variable. **This will override the default TTL of 5 seconds but can be overridden by the `maxAge` parameter**. -```typescript hl_lines="7 11" title="Caching parameters values in memory for longer than 5 seconds" +```typescript hl_lines="8 14" title="Caching parameters values in memory for longer than 5 seconds" --8<-- "docs/snippets/parameters/adjustingCacheTTL.ts" ``` @@ -174,7 +174,7 @@ The AWS Systems Manager Parameter Store provider supports two additional argumen ???+ tip If you want to always decrypt parameters, you can set the `POWERTOOLS_PARAMETERS_SSM_DECRYPT=true` environment variable. **This will override the default value of `false` but can be overridden by the `decrypt` parameter**. -```typescript hl_lines="6 9" title="Example with get() and getMultiple()" +```typescript hl_lines="6 12" title="Example with get() and getMultiple()" --8<-- "docs/snippets/parameters/ssmProviderDecryptAndRecursive.ts" ``` @@ -300,7 +300,7 @@ You can override this by setting the `throwOnTransformError` argument to `true`. For example, if you have three parameters, */param/a*, */param/b* and */param/c*, but */param/c* is malformed: -```typescript hl_lines="19-22" title="Throwing TransformParameterError at first malformed parameter" +```typescript hl_lines="23" title="Throwing TransformParameterError at first malformed parameter" --8<-- "docs/snippets/parameters/transformPartialFailures.ts" ``` @@ -313,7 +313,7 @@ You can do this with a single request by using `transform: 'auto'`. This will in ???+ info `transform: 'auto'` feature is available across all providers, including the high level functions. -```typescript hl_lines="6" title="Deserializing parameter values based on their suffix" +```typescript hl_lines="7" title="Deserializing parameter values based on their suffix" --8<-- "docs/snippets/parameters/transformAuto.ts" ``` @@ -380,12 +380,12 @@ You can use the `awsSdkV3Client` parameter via any of the available [Provider Cl ``` === "SecretsProvider" - ```typescript hl_lines="5 7" + ```typescript hl_lines="5 8" --8<-- "docs/snippets/parameters/secretsProviderCustomClient.ts" ``` === "AppConfigProvider" - ```typescript hl_lines="5 7" + ```typescript hl_lines="5 8" --8<-- "docs/snippets/parameters/appConfigProviderCustomClient.ts" ``` @@ -415,7 +415,7 @@ The **`clientConfig`** parameter enables you to pass in a custom [config object] For unit testing your applications, you can mock the calls to the parameters utility to avoid calling AWS APIs. This can be achieved in a number of ways - in this example, we use [Jest mock functions](https://jestjs.io/docs/es6-class-mocks#the-4-ways-to-create-an-es6-class-mock) to patch the `getParameters` function. === "handler.test.ts" - ```typescript hl_lines="2 4-7 12 18" + ```typescript hl_lines="2 4-9 13 18" --8<-- "docs/snippets/parameters/testingYourCodeFunctionsJestMock.ts" ``` @@ -429,7 +429,7 @@ With this pattern in place, you can customize the return values of the mocked fu A similar pattern can be applied also to any of the built-in provider classes - in this other example, we use [Jest spyOn method](https://jestjs.io/docs/es6-class-mocks#mocking-a-specific-method-of-a-class) to patch the `get` function of the `AppConfigProvider` class. This is useful also when you want to test that the correct arguments are being passed to the Parameters utility. === "handler.test.ts" - ```typescript hl_lines="2 6 9 21" + ```typescript hl_lines="2 5 8 19 26-27" --8<-- "docs/snippets/parameters/testingYourCodeProvidersJestMock.ts" ``` @@ -441,7 +441,7 @@ A similar pattern can be applied also to any of the built-in provider classes - In some other cases, you might want to mock the AWS SDK v3 client itself, in these cases we recommend using the [`aws-sdk-client-mock`](https://www.npmjs.com/package/aws-sdk-client-mock) and [`aws-sdk-client-mock-jest`](https://www.npmjs.com/package/aws-sdk-client-mock-jest) libraries. This is useful when you want to test how your code behaves when the AWS SDK v3 client throws an error or a specific response. === "handler.test.ts" - ```typescript hl_lines="2-8 12 19 25-31" + ```typescript hl_lines="2-8 11 14 18 23-30" --8<-- "docs/snippets/parameters/testingYourCodeClientJestMock.ts" ``` @@ -457,6 +457,6 @@ Parameters utility caches all parameter values for performance and cost reasons. Within your tests, you can use `clearCache` method available in [every provider](#built-in-provider-class). When using multiple providers or higher level functions like `getParameter`, use the `clearCaches` standalone function to clear cache globally. === "handler.test.ts" - ```typescript hl_lines="1 9-11" + ```typescript hl_lines="1 9" --8<-- "docs/snippets/parameters/testingYourCodeClearCache.ts" ``` \ No newline at end of file