UNPKG

@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
"use strict"; 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;