From 8c957b6500f8d60c222e514cb6a93c6107c4d1e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Denilson=20C=C3=A2mara=20Soares?= Date: Fri, 16 Jun 2023 11:33:51 -0300 Subject: [PATCH 1/9] [FEAT]: Add modifier to transform string into array (#185) * feat: add modifier to transform string into array * fix: remove decodeuri and white spaces --- __tests__/string/modifiers.test.ts | 43 ++++++++++++++++++++++++++++++ package-lock.json | 2 +- package.json | 2 +- src/string/index.ts | 1 + src/string/modifiers.ts | 4 +++ 5 files changed, 50 insertions(+), 2 deletions(-) create mode 100644 __tests__/string/modifiers.test.ts create mode 100644 src/string/modifiers.ts diff --git a/__tests__/string/modifiers.test.ts b/__tests__/string/modifiers.test.ts new file mode 100644 index 0000000..679e780 --- /dev/null +++ b/__tests__/string/modifiers.test.ts @@ -0,0 +1,43 @@ +import { stringToArray } from '../../src/string' + +describe('stringToArray', () => { + const data = [ + { + output: [] + }, + { + delimiter: ',', + output: [] + }, + { + input: 'id,style,appId', + output: ['id', 'style', 'appId'] + }, + { + input: 'id, style, appId', + output: ['id', 'style', 'appId'] + }, + { + input: '', + output: [] + }, + { + input: 'id', + output: ['id'] + }, + { + input: 'id', + delimiter: ',', + output: ['id'] + }, + { + input: 'id;style;appId', + delimiter: ';', + output: ['id', 'style', 'appId'] + } + ] + + test.each(data)('Should return array of string', (param) => { + expect(stringToArray(param.input ? param.input : undefined, param.delimiter ? param.delimiter : undefined)).toStrictEqual(param.output) + }) +}) diff --git a/package-lock.json b/package-lock.json index 4e8d4f3..6a97303 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "adapcon-utils-js", - "version": "0.15.1", + "version": "0.16.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index d50a5c5..c9c4c65 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "adapcon-utils-js", - "version": "0.15.1", + "version": "0.16.0", "description": "Utils library for Javascript", "keywords": [], "author": { diff --git a/src/string/index.ts b/src/string/index.ts index 372cf9a..c32cd24 100644 --- a/src/string/index.ts +++ b/src/string/index.ts @@ -1,2 +1,3 @@ export * from './validators' export * from './formatters' +export * from './modifiers' diff --git a/src/string/modifiers.ts b/src/string/modifiers.ts new file mode 100644 index 0000000..6996bbe --- /dev/null +++ b/src/string/modifiers.ts @@ -0,0 +1,4 @@ +export const stringToArray = (str = '', delimiter = ','): string[] => { + if (typeof str !== 'string' || str === '') return [] + return str.split(delimiter).map((value) => value.trim()) +} From feac2bf7073e437c3c455d5600e91279856c9f91 Mon Sep 17 00:00:00 2001 From: Marcos Rodrigo Jung Alves Date: Fri, 16 Jun 2023 13:47:56 -0300 Subject: [PATCH 2/9] [DOCS] :memo: add badges to unnexisting readme (#184) --- README.md | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..e00a98e --- /dev/null +++ b/README.md @@ -0,0 +1,2 @@ +[![DeepSource](https://app.deepsource.com/gh/Adapcon/adapcon-utils-js.svg/?label=active+issues&show_trend=true&token=z9o0q95BRMd2RWNUS_SdBYs0)](https://app.deepsource.com/gh/Adapcon/adapcon-utils-js/?ref=repository-badge) +[![DeepSource](https://app.deepsource.com/gh/Adapcon/adapcon-utils-js.svg/?label=resolved+issues&show_trend=true&token=z9o0q95BRMd2RWNUS_SdBYs0)](https://app.deepsource.com/gh/Adapcon/adapcon-utils-js/?ref=repository-badge) From f9937519090e027bfa6325e384e3c331e3003b97 Mon Sep 17 00:00:00 2001 From: Gabriel Rocha Date: Wed, 5 Jul 2023 14:29:45 -0300 Subject: [PATCH 3/9] feat: new precondition failed status code (#187) Adding new status code add HttpStatus enum that represents the 412 status. --- package-lock.json | 2 +- package.json | 2 +- src/http/enums.ts | 1 + 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6a97303..19b0941 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "adapcon-utils-js", - "version": "0.16.0", + "version": "0.16.1", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index c9c4c65..609b315 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "adapcon-utils-js", - "version": "0.16.0", + "version": "0.16.1", "description": "Utils library for Javascript", "keywords": [], "author": { diff --git a/src/http/enums.ts b/src/http/enums.ts index 884bda1..d1214cb 100644 --- a/src/http/enums.ts +++ b/src/http/enums.ts @@ -27,6 +27,7 @@ export enum HttpStatuses { notFound = 404, userNotFound = 404, integrationError = 406, + preconditionFailed = 412, teaPot = 418, unprocessableEntity = 422, internalError = 500, From d5f43baf4d354364e6ed842961a8e33c4affc7c3 Mon Sep 17 00:00:00 2001 From: Gabriel Rocha Date: Fri, 29 Sep 2023 10:38:19 -0300 Subject: [PATCH 4/9] chore: make package available for recent node versions (#190) --- package-lock.json | 2 +- package.json | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 19b0941..9fed888 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "adapcon-utils-js", - "version": "0.16.1", + "version": "0.16.2", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 609b315..b1c4a12 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "adapcon-utils-js", - "version": "0.16.1", + "version": "0.16.2", "description": "Utils library for Javascript", "keywords": [], "author": { @@ -57,6 +57,6 @@ "typescript": "^4.4.2" }, "engines": { - "node": "14.x" + "node": ">=14.x" } } From 738de49e3eef7e700ea78fd2bd91537b10ba38c5 Mon Sep 17 00:00:00 2001 From: Gabriel Rocha Date: Tue, 3 Oct 2023 11:14:42 -0300 Subject: [PATCH 5/9] feat: accept headers on lambdaRest and formatResponse (#193) * chore: bump package version and write tests * feat: change lambdaResp and formatResponse function to accept headers --- __tests__/lambda/formatters.test.ts | 14 ++++++++++++++ __tests__/lambda/lambdaResponses.test.ts | 14 +++++++++++++- package-lock.json | 2 +- package.json | 2 +- src/lambda/formatters.ts | 5 +++-- src/lambda/interfaces.ts | 4 ++++ src/lambda/lambdaResponses.ts | 7 ++++--- 7 files changed, 40 insertions(+), 8 deletions(-) diff --git a/__tests__/lambda/formatters.test.ts b/__tests__/lambda/formatters.test.ts index 51120b8..634235b 100644 --- a/__tests__/lambda/formatters.test.ts +++ b/__tests__/lambda/formatters.test.ts @@ -8,6 +8,20 @@ describe('invoke', () => { })).toEqual({ body: { error: 'Invalid Session' }, status: 401 }) }) + it('Should returns response formatted with headers', () => { + expect(formattedResponse({ + StatusCode: 200, + Payload: '{"headers":"{\\"total-count\\":\\"20\\"}"}' + })).toEqual({ headers: { 'total-count': '20' }, status: 200, body: {} }) + }) + + it('Should returns response formatted with headers and body', () => { + expect(formattedResponse({ + StatusCode: 200, + Payload: '{"headers": "{\\"total-count\\":\\"20\\"}","body": "{\\"name\\":\\"John Doe\\"}"}' + })).toEqual({ headers: { 'total-count': '20' }, status: 200, body: { name: 'John Doe' } }) + }) + it('Should returns response formatted with status code 200', () => { expect(formattedResponse({ StatusCode: 200, diff --git a/__tests__/lambda/lambdaResponses.test.ts b/__tests__/lambda/lambdaResponses.test.ts index 64eb0e8..6dd69d4 100644 --- a/__tests__/lambda/lambdaResponses.test.ts +++ b/__tests__/lambda/lambdaResponses.test.ts @@ -35,11 +35,23 @@ describe('lambdaResp', () => { statusCode: 404, body: 'not found!' } + }, + { + input: { + statusCode: 200, + body: '', + headers: { 'total-count': 42069 } + }, + output: { + statusCode: 200, + body: '', + headers: { 'total-count': 42069 } + } } ] test.each(data)('Should return an response Object, with statusCode and body props', (param) => { - expect(lambdaResp(param.input.statusCode, param.input.body)).toStrictEqual(param.output) + expect(lambdaResp(param.input.statusCode, param.input.body, param.input.headers)).toStrictEqual(param.output) }) }) diff --git a/package-lock.json b/package-lock.json index 9fed888..21db4af 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "adapcon-utils-js", - "version": "0.16.2", + "version": "0.16.3", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index b1c4a12..11e1a83 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "adapcon-utils-js", - "version": "0.16.2", + "version": "0.16.3", "description": "Utils library for Javascript", "keywords": [], "author": { diff --git a/src/lambda/formatters.ts b/src/lambda/formatters.ts index d9103be..322b001 100644 --- a/src/lambda/formatters.ts +++ b/src/lambda/formatters.ts @@ -2,12 +2,13 @@ import jsonBigInt from 'json-bigint' import { isObject } from '../object' -export const formattedResponse = ({ StatusCode, Payload }: { StatusCode?: any, Payload?: any }): object => { +export const formattedResponse = ({ StatusCode, Payload }: { StatusCode?: number, Payload?: any }): object => { const payloadFormatted = JSON.parse(Payload || '{}') return { status: payloadFormatted.statusCode || StatusCode, - body: payloadFormatted.body ? JSON.parse(payloadFormatted.body) : {} + body: payloadFormatted.body ? JSON.parse(payloadFormatted.body) : {}, + ...(payloadFormatted.headers ? { headers: JSON.parse(payloadFormatted.headers) } : null) } } diff --git a/src/lambda/interfaces.ts b/src/lambda/interfaces.ts index 48b3406..9f07f6a 100644 --- a/src/lambda/interfaces.ts +++ b/src/lambda/interfaces.ts @@ -7,6 +7,10 @@ export interface Error { message?: string } +export type Headers = { + [header: string]: string | number | boolean +} + export interface lambdaParameters { port?: string region?: string diff --git a/src/lambda/lambdaResponses.ts b/src/lambda/lambdaResponses.ts index 278dab8..22686ca 100644 --- a/src/lambda/lambdaResponses.ts +++ b/src/lambda/lambdaResponses.ts @@ -1,11 +1,12 @@ import { isNumber } from '../number' import { objToStr } from '../object' import { ProxyResult } from 'aws-lambda' -import type { Error } from './interfaces' +import type { Error, Headers } from './interfaces' -export const lambdaResp = (statusCode: number, body?: object | string): ProxyResult => ({ +export const lambdaResp = (statusCode: number, body?: object | string, headers?: Headers): ProxyResult => ({ statusCode, - ...(body ? { body: objToStr(body) } : { body: '' }) + ...(body ? { body: objToStr(body) } : { body: '' }), + ...(headers ? { headers } : null) }) export const lambdaRespError = (err: Error): ProxyResult => { From 080f6fbfbd775828a54ab0d16bae68a4bf86770d Mon Sep 17 00:00:00 2001 From: Gabriel Rocha Date: Tue, 3 Oct 2023 13:04:41 -0300 Subject: [PATCH 6/9] fix: does not parse json that is already a js object (#195) * fix: does not parse json that is already a js object * fix: correct test --- __tests__/lambda/formatters.test.ts | 4 ++-- package-lock.json | 2 +- package.json | 2 +- src/lambda/formatters.ts | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/__tests__/lambda/formatters.test.ts b/__tests__/lambda/formatters.test.ts index 634235b..09fc18b 100644 --- a/__tests__/lambda/formatters.test.ts +++ b/__tests__/lambda/formatters.test.ts @@ -11,14 +11,14 @@ describe('invoke', () => { it('Should returns response formatted with headers', () => { expect(formattedResponse({ StatusCode: 200, - Payload: '{"headers":"{\\"total-count\\":\\"20\\"}"}' + Payload: '{"headers": {"total-count":"20"}}' })).toEqual({ headers: { 'total-count': '20' }, status: 200, body: {} }) }) it('Should returns response formatted with headers and body', () => { expect(formattedResponse({ StatusCode: 200, - Payload: '{"headers": "{\\"total-count\\":\\"20\\"}","body": "{\\"name\\":\\"John Doe\\"}"}' + Payload: '{"headers": {"total-count":"20"},"body": "{\\"name\\":\\"John Doe\\"}"}' })).toEqual({ headers: { 'total-count': '20' }, status: 200, body: { name: 'John Doe' } }) }) diff --git a/package-lock.json b/package-lock.json index 21db4af..46b1170 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "adapcon-utils-js", - "version": "0.16.3", + "version": "0.16.4", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 11e1a83..f34bb0a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "adapcon-utils-js", - "version": "0.16.3", + "version": "0.16.4", "description": "Utils library for Javascript", "keywords": [], "author": { diff --git a/src/lambda/formatters.ts b/src/lambda/formatters.ts index 322b001..9204337 100644 --- a/src/lambda/formatters.ts +++ b/src/lambda/formatters.ts @@ -8,7 +8,7 @@ export const formattedResponse = ({ StatusCode, Payload }: { StatusCode?: number return { status: payloadFormatted.statusCode || StatusCode, body: payloadFormatted.body ? JSON.parse(payloadFormatted.body) : {}, - ...(payloadFormatted.headers ? { headers: JSON.parse(payloadFormatted.headers) } : null) + ...(payloadFormatted.headers ? { headers: payloadFormatted.headers } : null) } } From cb095f965b40ac50ec68d4f81b8a1a638f311359 Mon Sep 17 00:00:00 2001 From: Gabriel Rocha Date: Thu, 16 Nov 2023 13:54:14 -0300 Subject: [PATCH 7/9] feat: adding partial content status code (#197) * feat: adding partial content status code * feat: bump version --- package-lock.json | 2 +- package.json | 2 +- src/http/enums.ts | 1 + 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 46b1170..11b9bb5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "adapcon-utils-js", - "version": "0.16.4", + "version": "0.16.5", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index f34bb0a..585417d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "adapcon-utils-js", - "version": "0.16.4", + "version": "0.16.5", "description": "Utils library for Javascript", "keywords": [], "author": { diff --git a/src/http/enums.ts b/src/http/enums.ts index d1214cb..bc05872 100644 --- a/src/http/enums.ts +++ b/src/http/enums.ts @@ -20,6 +20,7 @@ export enum HttpStatuses { created = 201, accepted = 202, noContent = 204, + partialContent = 206, badRequest = 400, unauthorized = 401, invalidSession = 401, From 684eecb03bf4e22f96222d5193c914ae0a5c51c8 Mon Sep 17 00:00:00 2001 From: Marcos Rodrigo Jung Alves Date: Mon, 20 Nov 2023 15:02:40 -0300 Subject: [PATCH 8/9] [FIX] lambda get parameters (#199) * fix: :bug: allow the possibility to have null event params * fix: :rocket: increase patch version * refactor: :memo: deepsource code smell * refactor: :memo: better readability --- __tests__/lambda/lambdaGetParameters.test.ts | 18 ++++++++++++++++++ package-lock.json | 2 +- package.json | 2 +- src/lambda/lambdaGetParameters.ts | 3 ++- 4 files changed, 22 insertions(+), 3 deletions(-) diff --git a/__tests__/lambda/lambdaGetParameters.test.ts b/__tests__/lambda/lambdaGetParameters.test.ts index 85d250d..562502b 100644 --- a/__tests__/lambda/lambdaGetParameters.test.ts +++ b/__tests__/lambda/lambdaGetParameters.test.ts @@ -23,6 +23,24 @@ describe('lambdaGetParameters', () => { date: 1639423222426 } }, + { + event: { + pathParameters: { + auth: 'xyz', + app: 'theAppId' + }, + queryStringParameters: null + }, + eventParams: { + auth: 'pathParameters', + app: 'pathParameters', + date: 'queryStringParameters' + }, + output: { + auth: 'xyz', + app: 'theAppId' + } + }, { event: { pathParameters: { diff --git a/package-lock.json b/package-lock.json index 11b9bb5..163e5ce 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "adapcon-utils-js", - "version": "0.16.5", + "version": "0.16.6", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 585417d..2b658b4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "adapcon-utils-js", - "version": "0.16.5", + "version": "0.16.6", "description": "Utils library for Javascript", "keywords": [], "author": { diff --git a/src/lambda/lambdaGetParameters.ts b/src/lambda/lambdaGetParameters.ts index d327bd7..d753118 100644 --- a/src/lambda/lambdaGetParameters.ts +++ b/src/lambda/lambdaGetParameters.ts @@ -2,11 +2,12 @@ import { kebabCaseToCamelCase } from './../string/formatters' export const lambdaGetParameters = (event: object, eventParams: object): { [key: string]: any } => { const fedParams = {} - for (const element in eventParams) { + for (const element of Object.keys(eventParams)) { const path: string = eventParams[element] if (path in event) { const eventPathObject: object = event[path] + if (!eventPathObject) continue const fedParam: any = path === 'body' ? eventPathObject : eventPathObject[element] let paramKey: string = element if (path === 'headers') { From 022c2f9cca2a07d9b3fd5facb264e6f1ae342eb2 Mon Sep 17 00:00:00 2001 From: Gabriel Rocha Date: Fri, 8 Dec 2023 11:34:23 -0300 Subject: [PATCH 9/9] feat: add file extension enum and util to get extension from mimeType (#201) --- __tests__/files/index.test.ts | 11 +++++++++++ package-lock.json | 2 +- package.json | 2 +- src/files/extensions.ts | 28 ++++++++++++++++++++++++++++ src/files/index.ts | 2 ++ src/files/utils.ts | 5 +++++ src/index.ts | 1 + 7 files changed, 49 insertions(+), 2 deletions(-) create mode 100644 __tests__/files/index.test.ts create mode 100644 src/files/extensions.ts create mode 100644 src/files/index.ts create mode 100644 src/files/utils.ts diff --git a/__tests__/files/index.test.ts b/__tests__/files/index.test.ts new file mode 100644 index 0000000..fa45152 --- /dev/null +++ b/__tests__/files/index.test.ts @@ -0,0 +1,11 @@ +import { getExtensionFromMimeType } from '../../src/files' + +describe('Files', () => { + it('Should correct file extension from mimeType', () => { + expect(getExtensionFromMimeType('video/mp4')).toEqual('mp4') + }) + + it('Should return null as mimeType is unkown', () => { + expect(getExtensionFromMimeType('log/banana')).toBeNull() + }) +}) diff --git a/package-lock.json b/package-lock.json index 163e5ce..04e6b3b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "adapcon-utils-js", - "version": "0.16.6", + "version": "0.16.7", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 2b658b4..63cacdd 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "adapcon-utils-js", - "version": "0.16.6", + "version": "0.16.7", "description": "Utils library for Javascript", "keywords": [], "author": { diff --git a/src/files/extensions.ts b/src/files/extensions.ts new file mode 100644 index 0000000..9023aca --- /dev/null +++ b/src/files/extensions.ts @@ -0,0 +1,28 @@ +export enum FILE_EXTENSIONS { + 'video/mp4' = 'mp4', + 'audio/ogg; codecs=opus' = 'ogg', + 'image/gif' = 'gif', + 'image/jpeg' = 'jpg', + 'image/svg+xml' = 'svg', + 'image/tiff' = 'tiff', + 'image/png' = 'png', + 'image/bmp' = 'bmp', + 'text/html' = 'html', + 'text/csv' = 'csv', + 'text/css' = 'css', + 'text/plain' = 'txt', + 'text/xml' = 'xml', + 'text/tab-separated-values' = 'tsv', + 'application/pdf' = 'pdf', + 'application/xml' = 'xml', + 'application/zip' = 'zip', + 'application/x-compressed-zip' = 'zip', + 'application/vnd.ms-excel' = 'xls', + 'application/x-bzip2' = 'bz2', + 'application/msword' = 'doc', + 'application/x-gzip' = 'gz', + 'application/java-archive' = 'jar', + 'application/x-javascript' = 'js', + 'application/vnd.ms-powerpoint' = 'ppt', + 'application/x-tar' = 'tar.gz' +} diff --git a/src/files/index.ts b/src/files/index.ts new file mode 100644 index 0000000..6dc00d1 --- /dev/null +++ b/src/files/index.ts @@ -0,0 +1,2 @@ +export * from './extensions' +export * from './utils' diff --git a/src/files/utils.ts b/src/files/utils.ts new file mode 100644 index 0000000..7f15d2e --- /dev/null +++ b/src/files/utils.ts @@ -0,0 +1,5 @@ +import { FILE_EXTENSIONS } from '.' + +export function getExtensionFromMimeType (mimeType: string): string | null { + return FILE_EXTENSIONS[mimeType] || null +} diff --git a/src/index.ts b/src/index.ts index 9fea3da..93ffb34 100644 --- a/src/index.ts +++ b/src/index.ts @@ -4,6 +4,7 @@ export * from './date' export * from './dynamoose' export * from './email' export * from './error' +export * from './files' export * from './http' export * from './image' export * from './invoice'