@aws-lambda-powertools/jmespath
Version:
A type safe and modern jmespath module to parse and extract data from JSON documents using JMESPath
88 lines (87 loc) • 3.88 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.S3_EVENTBRIDGE_SQS = exports.S3_KINESIS_FIREHOSE = exports.S3_SNS_KINESIS_FIREHOSE = exports.S3_SQS = exports.S3_SNS_SQS = exports.CLOUDWATCH_LOGS = exports.KINESIS_DATA_STREAM = exports.CLOUDWATCH_EVENTS_SCHEDULED = exports.EVENTBRIDGE = exports.SNS = exports.SQS = exports.API_GATEWAY_HTTP = exports.API_GATEWAY_REST = exports.extractDataFromEnvelope = void 0;
const PowertoolsFunctions_js_1 = require("./PowertoolsFunctions.js");
const search_js_1 = require("./search.js");
/**
* Searches and extracts data using JMESPath
*
* Envelope being the JMESPath expression to extract the data you're after
*
* Built-in JMESPath functions include: `powertools_json`, `powertools_base64`, `powertools_base64_gzip`
*
* @example
* ```typescript
* import { extractDataFromEnvelope } from '@aws-lambda-powertools/jmespath/envelopes';
*
* type CustomEvent = {
* body: string; // "{\"customerId\":\"dd4649e6-2484-4993-acb8-0f9123103394\"}"
* };
*
* type EventBody = {
* customerId: string;
* };
*
* export const handler = async (event: CustomEvent): Promise<unknown> => {
* const payload = extractDataFromEnvelope<EventBody>(event, "powertools_json(body)");
* const { customerId } = payload; // now deserialized
* // ...
* };
* ```
*
* We provide built-in envelopes for popular AWS Lambda event sources to easily decode and/or deserialize JSON objects.
*
* @example
* ```typescript
* import {
* extractDataFromEnvelope,
* SQS,
* } from '@aws-lambda-powertools/jmespath/envelopes';
* import type { SQSEvent } from 'aws-lambda';
*
* type MessageBody = {
* customerId: string;
* };
*
* export const handler = async (event: SQSEvent): Promise<unknown> => {
* const records = extractDataFromEnvelope<Array<MessageBody>>(event, SQS);
* for (const record in records) { // records is now a list containing the deserialized body of each message
* const { customerId } = record;
* }
* };
* ```
*
* @param data The JSON object to search
* @param envelope The JMESPath expression to use
* @param options The parsing options to use
*/
const extractDataFromEnvelope = (data, envelope, options) => {
return (0, search_js_1.search)(envelope, data, options || { customFunctions: new PowertoolsFunctions_js_1.PowertoolsFunctions() });
};
exports.extractDataFromEnvelope = extractDataFromEnvelope;
const API_GATEWAY_REST = 'powertools_json(body)';
exports.API_GATEWAY_REST = API_GATEWAY_REST;
const API_GATEWAY_HTTP = 'powertools_json(body)';
exports.API_GATEWAY_HTTP = API_GATEWAY_HTTP;
const SQS = 'Records[*].powertools_json(body)';
exports.SQS = SQS;
const SNS = 'Records[0].Sns.Message | powertools_json(@)';
exports.SNS = SNS;
const EVENTBRIDGE = 'detail';
exports.EVENTBRIDGE = EVENTBRIDGE;
const CLOUDWATCH_EVENTS_SCHEDULED = 'detail';
exports.CLOUDWATCH_EVENTS_SCHEDULED = CLOUDWATCH_EVENTS_SCHEDULED;
const KINESIS_DATA_STREAM = 'Records[*].kinesis.powertools_json(powertools_base64(data))';
exports.KINESIS_DATA_STREAM = KINESIS_DATA_STREAM;
const CLOUDWATCH_LOGS = 'awslogs.powertools_base64_gzip(data) | powertools_json(@).logEvents[*]';
exports.CLOUDWATCH_LOGS = CLOUDWATCH_LOGS;
const S3_SNS_SQS = 'Records[*].powertools_json(body).powertools_json(Message).Records[0]';
exports.S3_SNS_SQS = S3_SNS_SQS;
const S3_SQS = 'Records[*].powertools_json(body).Records[0]';
exports.S3_SQS = S3_SQS;
const S3_SNS_KINESIS_FIREHOSE = 'records[*].powertools_json(powertools_base64(data)).powertools_json(Message).Records[0]';
exports.S3_SNS_KINESIS_FIREHOSE = S3_SNS_KINESIS_FIREHOSE;
const S3_KINESIS_FIREHOSE = 'records[*].powertools_json(powertools_base64(data)).Records[0]';
exports.S3_KINESIS_FIREHOSE = S3_KINESIS_FIREHOSE;
const S3_EVENTBRIDGE_SQS = 'Records[*].powertools_json(body).detail';
exports.S3_EVENTBRIDGE_SQS = S3_EVENTBRIDGE_SQS;