From effbf64913868cf69006dcbd3fa10930ead9f3b0 Mon Sep 17 00:00:00 2001 From: vgphoenixcampos <111440293+vgphoenixcampos@users.noreply.github.com> Date: Fri, 2 Sep 2022 17:42:53 +0000 Subject: [PATCH 01/19] feat: initial configuration for idempotency package --- packages/idempotency/LICENSE-THIRD-PARTY | 189 +++++++++++++++++++++++ packages/idempotency/README.md | 83 ++++++++++ packages/idempotency/jest.config.js | 45 ++++++ packages/idempotency/package.json | 57 +++++++ packages/idempotency/tsconfig-dev.json | 30 ++++ packages/idempotency/tsconfig.es.json | 30 ++++ packages/idempotency/tsconfig.json | 30 ++++ 7 files changed, 464 insertions(+) create mode 100644 packages/idempotency/LICENSE-THIRD-PARTY create mode 100644 packages/idempotency/README.md create mode 100644 packages/idempotency/jest.config.js create mode 100644 packages/idempotency/package.json create mode 100644 packages/idempotency/tsconfig-dev.json create mode 100644 packages/idempotency/tsconfig.es.json create mode 100644 packages/idempotency/tsconfig.json diff --git a/packages/idempotency/LICENSE-THIRD-PARTY b/packages/idempotency/LICENSE-THIRD-PARTY new file mode 100644 index 0000000000..628bcd5982 --- /dev/null +++ b/packages/idempotency/LICENSE-THIRD-PARTY @@ -0,0 +1,189 @@ +@aws-lambda-powertools/commons +0.0.2 +license: MIT* +authors: Amazon Web Services + +****************************** + +@types/aws-lambda +8.10.87 + MIT License + + Copyright (c) Microsoft Corporation. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE + + +****************************** + +lodash +4.17.21 +Copyright OpenJS Foundation and other contributors + +Based on Underscore.js, copyright Jeremy Ashkenas, +DocumentCloud and Investigative Reporters & Editors + +This software consists of voluntary contributions made by many +individuals. For exact contribution history, see the revision history +available at https://github.com/lodash/lodash + +The following license applies to all parts of this software except as +documented below: + +==== + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +==== + +Copyright and related rights for sample code are waived via CC0. Sample +code is defined as all source code displayed within the prose of the +documentation. + +CC0: http://creativecommons.org/publicdomain/zero/1.0/ + +==== + +Files located in the node_modules and vendor directories are externally +maintained libraries used by this software which have their own +licenses; we recommend you read them, as their terms may differ from the +terms above. + + +****************************** + +lodash.clonedeep +4.5.0 +Copyright jQuery Foundation and other contributors + +Based on Underscore.js, copyright Jeremy Ashkenas, +DocumentCloud and Investigative Reporters & Editors + +This software consists of voluntary contributions made by many +individuals. For exact contribution history, see the revision history +available at https://github.com/lodash/lodash + +The following license applies to all parts of this software except as +documented below: + +==== + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +==== + +Copyright and related rights for sample code are waived via CC0. Sample +code is defined as all source code displayed within the prose of the +documentation. + +CC0: http://creativecommons.org/publicdomain/zero/1.0/ + +==== + +Files located in the node_modules and vendor directories are externally +maintained libraries used by this software which have their own +licenses; we recommend you read them, as their terms may differ from the +terms above. + + +****************************** + +lodash.merge +4.6.2 +Copyright OpenJS Foundation and other contributors + +Based on Underscore.js, copyright Jeremy Ashkenas, +DocumentCloud and Investigative Reporters & Editors + +This software consists of voluntary contributions made by many +individuals. For exact contribution history, see the revision history +available at https://github.com/lodash/lodash + +The following license applies to all parts of this software except as +documented below: + +==== + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +==== + +Copyright and related rights for sample code are waived via CC0. Sample +code is defined as all source code displayed within the prose of the +documentation. + +CC0: http://creativecommons.org/publicdomain/zero/1.0/ + +==== + +Files located in the node_modules and vendor directories are externally +maintained libraries used by this software which have their own +licenses; we recommend you read them, as their terms may differ from the +terms above. diff --git a/packages/idempotency/README.md b/packages/idempotency/README.md new file mode 100644 index 0000000000..848588fe31 --- /dev/null +++ b/packages/idempotency/README.md @@ -0,0 +1,83 @@ +# AWS Lambda Powertools for TypeScript + +A suite of utilities for AWS Lambda functions to ease the adoption of best practices such as tracing, structured logging, custom metrics, and more. + +You can use the library in both TypeScript and JavaScript code bases. + +AWS Lambda Powertools for [Python](https://github.com/awslabs/aws-lambda-powertools-python) and AWS Lambda Powertools for [Java](https://github.com/awslabs/aws-lambda-powertools-java) are also available. + +**[📜 Documentation](https://awslabs.github.io/aws-lambda-powertools-typescript/)** | **[NPM](https://www.npmjs.com/org/aws-lambda-powertools)** | **[Roadmap](https://github.com/awslabs/aws-lambda-powertools-roadmap/projects/1)** | **[Examples](https://github.com/awslabs/aws-lambda-powertools-typescript/tree/main/examples)** | **[Serverless TypeScript Demo](https://github.com/aws-samples/serverless-typescript-demo)** + +## Table of contents + +- [Features](#features) +- [Getting started](#getting-started) + - [Installation](#installation) + - [Examples](#examples) + - [Serverless TypeScript Demo](#serverless-typescript-demo-application) +- [Contribute](#contribute) +- [Roadmap](#roadmap) +- [Connect](#connect) +- [Credits](#credits) +- [License](#license) + +## Features + +* **[Tracer](https://awslabs.github.io/aws-lambda-powertools-typescript/latest/core/tracer/)** - Utilities to trace Lambda function handlers, and both synchronous and asynchronous functions +* **[Logger](https://awslabs.github.io/aws-lambda-powertools-typescript/latest/core/logger/)** - Structured logging made easier, and a middleware to enrich log items with key details of the Lambda context +* **[Metrics](https://awslabs.github.io/aws-lambda-powertools-typescript/latest/core/metrics/)** - Custom Metrics created asynchronously via CloudWatch Embedded Metric Format (EMF) + +## Getting started + +Find the complete project's [documentation here](https://awslabs.github.io/aws-lambda-powertools-typescript). + +### Installation + +The AWS Lambda Powertools for TypeScript utilities follow a modular approach, similar to the official [AWS SDK v3 for JavaScript](https://github.com/aws/aws-sdk-js-v3). +Each TypeScript utility is installed as standalone NPM package. + +Install all three core utilities at once with this single command: + +```shell +npm install @aws-lambda-powertools/logger @aws-lambda-powertools/tracer @aws-lambda-powertools/metrics +``` + +Or refer to the installation guide of each utility: + +👉 [Installation guide for the **Tracer** utility](https://awslabs.github.io/aws-lambda-powertools-typescript/latest/core/tracer#getting-started) + +👉 [Installation guide for the **Logger** utility](https://awslabs.github.io/aws-lambda-powertools-typescript/latest/core/logger#getting-started) + +👉 [Installation guide for the **Metrics** utility](https://awslabs.github.io/aws-lambda-powertools-typescript/latest/core/metrics#getting-started) + +### Examples + +* [CDK](https://github.com/awslabs/aws-lambda-powertools-typescript/tree/main/examples/cdk) +* [SAM](https://github.com/awslabs/aws-lambda-powertools-typescript/tree/main/examples/sam) + +### Serverless TypeScript Demo application + +The [Serverless TypeScript Demo](https://github.com/aws-samples/serverless-typescript-demo) shows how to use Lambda Powertools for TypeScript. +You can find instructions on how to deploy and load test this application in the [repository](https://github.com/aws-samples/serverless-typescript-demo). + +## Contribute + +If you are interested in contributing to this project, please refer to our [Contributing Guidelines](https://github.com/awslabs/aws-lambda-powertools-typescript/blob/main/CONTRIBUTING.md). + +## Roadmap + +The roadmap of Powertools is driven by customers’ demand. +Help us prioritize upcoming functionalities or utilities by [upvoting existing RFCs and feature requests](https://github.com/awslabs/aws-lambda-powertools-typescript/issues), or [creating new ones](https://github.com/awslabs/aws-lambda-powertools-typescript/issues/new/choose), in this GitHub repository. + +## Connect + +* **AWS Lambda Powertools on Discord**: `#typescript` - **[Invite link](https://discord.gg/B8zZKbbyET)** +* **Email**: aws-lambda-powertools-feedback@amazon.com + +## Credits + +Credits for the Lambda Powertools idea go to [DAZN](https://github.com/getndazn) and their [DAZN Lambda Powertools](https://github.com/getndazn/dazn-lambda-powertools/). + +## License + +This library is licensed under the MIT-0 License. See the LICENSE file. \ No newline at end of file diff --git a/packages/idempotency/jest.config.js b/packages/idempotency/jest.config.js new file mode 100644 index 0000000000..dd0e63cc41 --- /dev/null +++ b/packages/idempotency/jest.config.js @@ -0,0 +1,45 @@ +module.exports = { + displayName: { + name: 'AWS Lambda Powertools utility: IDEMPOTENCY', + color: 'cyan', + }, + 'runner': 'groups', + 'preset': 'ts-jest', + 'transform': { + '^.+\\.ts?$': 'ts-jest', + }, + moduleFileExtensions: [ 'js', 'ts' ], + 'collectCoverageFrom': [ + '**/src/**/*.ts', + '!**/node_modules/**', + ], + 'testMatch': ['**/?(*.)+(spec|test).ts'], + 'roots': [ + '/src', + '/tests', + ], + 'testPathIgnorePatterns': [ + '/node_modules/', + ], + 'testEnvironment': 'node', + 'coveragePathIgnorePatterns': [ + '/node_modules/', + '/types/', + ], + 'coverageThreshold': { + 'global': { + 'statements': 100, + 'branches': 100, + 'functions': 100, + 'lines': 100, + }, + }, + 'coverageReporters': [ + 'json-summary', + 'text', + 'lcov' + ], + 'setupFiles': [ + '/tests/helpers/populateEnvironmentVariables.ts' + ] +}; \ No newline at end of file diff --git a/packages/idempotency/package.json b/packages/idempotency/package.json new file mode 100644 index 0000000000..fc03dbd523 --- /dev/null +++ b/packages/idempotency/package.json @@ -0,0 +1,57 @@ +{ + "name": "@aws-lambda-powertools/idempotency", + "version": "0.0.11", + "description": "TBD", + "author": { + "name": "Amazon Web Services", + "url": "https://aws.amazon.com" + }, + "publishConfig": { + "access": "public" + }, + "scripts": { + "commit": "commit", + "test": "npm run test:unit", + "test:unit": "jest --group=unit --detectOpenHandles --coverage --verbose", + "test:e2e:nodejs12x": "RUNTIME=nodejs12x jest --group=e2e", + "test:e2e:nodejs14x": "RUNTIME=nodejs14x jest --group=e2e", + "test:e2e:nodejs16x": "RUNTIME=nodejs16x jest --group=e2e", + "test:e2e": "jest --group=e2e", + "watch": "jest --watch --group=unit", + "build": "tsc", + "lint": "eslint --ext .ts --fix --no-error-on-unmatched-pattern src tests", + "format": "eslint --fix --ext .ts --fix --no-error-on-unmatched-pattern src tests", + "package": "mkdir -p dist/ && npm pack && mv *.tgz dist/", + "package-bundle": "../../package-bundler.sh logger-bundle ./dist", + "prepare": "npm run build", + "prepublishOnly": "npm test && npm run lint", + "preversion": "npm run lint", + "version": "npm run format && git add -A src", + "postversion": "git push && git push --tags" + }, + "homepage": "https://github.com/awslabs/aws-lambda-powertools-typescript/tree/master/packages/idempotency#readme", + "license": "MIT", + "main": "./lib/index.js", + "types": "./lib/index.d.ts", + "typedocMain": "src/index.ts", + "files": [ + "lib" + ], + "repository": { + "type": "git", + "url": "git+https://github.com/awslabs/aws-lambda-powertools-typescript.git" + }, + "bugs": { + "url": "https://github.com/awslabs/aws-lambda-powertools-typescript/issues" + }, + "dependencies": { + "@aws-lambda-powertools/commons": "^1.2.1" + }, + "keywords": [ + "aws", + "lambda", + "powertools", + "serverless", + "nodejs" + ] +} diff --git a/packages/idempotency/tsconfig-dev.json b/packages/idempotency/tsconfig-dev.json new file mode 100644 index 0000000000..be716f5f11 --- /dev/null +++ b/packages/idempotency/tsconfig-dev.json @@ -0,0 +1,30 @@ +{ + "compilerOptions": { + "experimentalDecorators": true, + "noImplicitAny": true, + "target": "ES2019", + "module": "commonjs", + "declaration": true, + "declarationMap": true, + "outDir": "lib", + "strict": true, + "inlineSourceMap": true, + "moduleResolution": "node", + "resolveJsonModule": true, + "pretty": true, + "baseUrl": "src/", + "rootDirs": [ "src/" ] + }, + "include": [ "src/**/*", "examples/**/*", "**/tests/**/*" ], + "exclude": [ "./node_modules"], + "watchOptions": { + "watchFile": "useFsEvents", + "watchDirectory": "useFsEvents", + "fallbackPolling": "dynamicPriority" + }, + "lib": [ "es2019" ], + "types": [ + "jest", + "node" + ] +} \ No newline at end of file diff --git a/packages/idempotency/tsconfig.es.json b/packages/idempotency/tsconfig.es.json new file mode 100644 index 0000000000..be716f5f11 --- /dev/null +++ b/packages/idempotency/tsconfig.es.json @@ -0,0 +1,30 @@ +{ + "compilerOptions": { + "experimentalDecorators": true, + "noImplicitAny": true, + "target": "ES2019", + "module": "commonjs", + "declaration": true, + "declarationMap": true, + "outDir": "lib", + "strict": true, + "inlineSourceMap": true, + "moduleResolution": "node", + "resolveJsonModule": true, + "pretty": true, + "baseUrl": "src/", + "rootDirs": [ "src/" ] + }, + "include": [ "src/**/*", "examples/**/*", "**/tests/**/*" ], + "exclude": [ "./node_modules"], + "watchOptions": { + "watchFile": "useFsEvents", + "watchDirectory": "useFsEvents", + "fallbackPolling": "dynamicPriority" + }, + "lib": [ "es2019" ], + "types": [ + "jest", + "node" + ] +} \ No newline at end of file diff --git a/packages/idempotency/tsconfig.json b/packages/idempotency/tsconfig.json new file mode 100644 index 0000000000..30faed1c11 --- /dev/null +++ b/packages/idempotency/tsconfig.json @@ -0,0 +1,30 @@ +{ + "compilerOptions": { + "experimentalDecorators": true, + "noImplicitAny": true, + "target": "ES2019", + "module": "commonjs", + "declaration": true, + "outDir": "lib", + "strict": true, + "inlineSourceMap": true, + "moduleResolution": "node", + "resolveJsonModule": true, + "pretty": true, + "baseUrl": "src/", + "rootDirs": [ "src/" ], + "esModuleInterop": true + }, + "include": [ "src/**/*" ], + "exclude": [ "./node_modules"], + "watchOptions": { + "watchFile": "useFsEvents", + "watchDirectory": "useFsEvents", + "fallbackPolling": "dynamicPriority" + }, + "lib": [ "es2019" ], + "types": [ + "jest", + "node" + ] +} \ No newline at end of file From 12b1d03268df4f99a370e91e3a0d9dd40a30667f Mon Sep 17 00:00:00 2001 From: vgphoenixcampos <111440293+vgphoenixcampos@users.noreply.github.com> Date: Fri, 2 Sep 2022 17:45:03 +0000 Subject: [PATCH 02/19] feat: initial idempotency classes --- packages/idempotency/src/IdempotencyConfig.ts | 3 ++ .../idempotency/src/IdempotencyOptions.ts | 10 +++++++ packages/idempotency/src/PersistenceLayer.ts | 28 +++++++++++++++++++ .../src/PersistenceLayerInterface.ts | 11 ++++++++ .../idempotency/src/makeFunctionIdempotent.ts | 9 ++++++ 5 files changed, 61 insertions(+) create mode 100644 packages/idempotency/src/IdempotencyConfig.ts create mode 100644 packages/idempotency/src/IdempotencyOptions.ts create mode 100644 packages/idempotency/src/PersistenceLayer.ts create mode 100644 packages/idempotency/src/PersistenceLayerInterface.ts create mode 100644 packages/idempotency/src/makeFunctionIdempotent.ts diff --git a/packages/idempotency/src/IdempotencyConfig.ts b/packages/idempotency/src/IdempotencyConfig.ts new file mode 100644 index 0000000000..51c87de117 --- /dev/null +++ b/packages/idempotency/src/IdempotencyConfig.ts @@ -0,0 +1,3 @@ +export class IdempotencyConfig{ + +} diff --git a/packages/idempotency/src/IdempotencyOptions.ts b/packages/idempotency/src/IdempotencyOptions.ts new file mode 100644 index 0000000000..c19eb9efbc --- /dev/null +++ b/packages/idempotency/src/IdempotencyOptions.ts @@ -0,0 +1,10 @@ +import { IdempotencyConfig } from './IdempotencyConfig'; +import { PersistenceLayer } from './PersistenceLayer'; + +type IdempotencyOptions = { + dataKeywordArgument: string + config: IdempotencyConfig + persistenceStore: PersistenceLayer +}; + +export { IdempotencyOptions }; diff --git a/packages/idempotency/src/PersistenceLayer.ts b/packages/idempotency/src/PersistenceLayer.ts new file mode 100644 index 0000000000..e1b537a104 --- /dev/null +++ b/packages/idempotency/src/PersistenceLayer.ts @@ -0,0 +1,28 @@ +/* eslint-disable @typescript-eslint/no-empty-function */ +import { IdempotencyConfig } from './IdempotencyConfig'; +import { PersistenceLayerInterface } from './PersistenceLayerInterface'; + +abstract class PersistenceLayer implements PersistenceLayerInterface { + public configure(_config: IdempotencyConfig): void {} + public deleteRecord(): void {} + public getRecord(): void {} + public saveInProgress(): void {} + public saveSuccess(): void {} + + protected abstract _deleteRecord(): void; + protected abstract _getRecord(): void; + protected abstract _putRecord(): void; + protected abstract _updateRecord(): void; +} + +class DynamoDBPersistenceLayer extends PersistenceLayer { + protected _deleteRecord(): void {} + protected _getRecord(): void {} + protected _putRecord(): void {} + protected _updateRecord(): void {} +} + +export { + DynamoDBPersistenceLayer, + PersistenceLayer +}; \ No newline at end of file diff --git a/packages/idempotency/src/PersistenceLayerInterface.ts b/packages/idempotency/src/PersistenceLayerInterface.ts new file mode 100644 index 0000000000..b28c10ba53 --- /dev/null +++ b/packages/idempotency/src/PersistenceLayerInterface.ts @@ -0,0 +1,11 @@ +import { IdempotencyConfig } from './IdempotencyConfig'; + +interface PersistenceLayerInterface { + configure(config: IdempotencyConfig): void + saveInProgress(): void + saveSuccess(): void + deleteRecord(): void + getRecord(): void +} + +export { PersistenceLayerInterface }; diff --git a/packages/idempotency/src/makeFunctionIdempotent.ts b/packages/idempotency/src/makeFunctionIdempotent.ts new file mode 100644 index 0000000000..0dfd6b57cb --- /dev/null +++ b/packages/idempotency/src/makeFunctionIdempotent.ts @@ -0,0 +1,9 @@ +/* eslint-disable @typescript-eslint/no-empty-function */ +import { IdempotencyOptions } from './IdempotencyOptions'; + +const makeFunctionIdempotent = ( + _fn: () => T, + _options: IdempotencyOptions +): void => {}; + +export { makeFunctionIdempotent }; From 8bc66e397f08d6eb3dfbcf1f76d888f4aaee6bff Mon Sep 17 00:00:00 2001 From: vgphoenixcampos <111440293+vgphoenixcampos@users.noreply.github.com> Date: Thu, 8 Sep 2022 14:09:22 -0400 Subject: [PATCH 03/19] feat: inherit tsconfig from base --- packages/idempotency/tsconfig-dev.json | 25 +++---------------------- packages/idempotency/tsconfig.es.json | 25 +++---------------------- packages/idempotency/tsconfig.json | 1 - 3 files changed, 6 insertions(+), 45 deletions(-) diff --git a/packages/idempotency/tsconfig-dev.json b/packages/idempotency/tsconfig-dev.json index be716f5f11..6f766859ea 100644 --- a/packages/idempotency/tsconfig-dev.json +++ b/packages/idempotency/tsconfig-dev.json @@ -1,30 +1,11 @@ { + "extends": "./tsconfig.json", "compilerOptions": { - "experimentalDecorators": true, - "noImplicitAny": true, - "target": "ES2019", - "module": "commonjs", - "declaration": true, "declarationMap": true, - "outDir": "lib", - "strict": true, - "inlineSourceMap": true, - "moduleResolution": "node", - "resolveJsonModule": true, - "pretty": true, - "baseUrl": "src/", - "rootDirs": [ "src/" ] + "esModuleInterop": false }, "include": [ "src/**/*", "examples/**/*", "**/tests/**/*" ], - "exclude": [ "./node_modules"], - "watchOptions": { - "watchFile": "useFsEvents", - "watchDirectory": "useFsEvents", - "fallbackPolling": "dynamicPriority" - }, - "lib": [ "es2019" ], "types": [ - "jest", - "node" + "jest" ] } \ No newline at end of file diff --git a/packages/idempotency/tsconfig.es.json b/packages/idempotency/tsconfig.es.json index be716f5f11..6f766859ea 100644 --- a/packages/idempotency/tsconfig.es.json +++ b/packages/idempotency/tsconfig.es.json @@ -1,30 +1,11 @@ { + "extends": "./tsconfig.json", "compilerOptions": { - "experimentalDecorators": true, - "noImplicitAny": true, - "target": "ES2019", - "module": "commonjs", - "declaration": true, "declarationMap": true, - "outDir": "lib", - "strict": true, - "inlineSourceMap": true, - "moduleResolution": "node", - "resolveJsonModule": true, - "pretty": true, - "baseUrl": "src/", - "rootDirs": [ "src/" ] + "esModuleInterop": false }, "include": [ "src/**/*", "examples/**/*", "**/tests/**/*" ], - "exclude": [ "./node_modules"], - "watchOptions": { - "watchFile": "useFsEvents", - "watchDirectory": "useFsEvents", - "fallbackPolling": "dynamicPriority" - }, - "lib": [ "es2019" ], "types": [ - "jest", - "node" + "jest" ] } \ No newline at end of file diff --git a/packages/idempotency/tsconfig.json b/packages/idempotency/tsconfig.json index 30faed1c11..555c42c9e8 100644 --- a/packages/idempotency/tsconfig.json +++ b/packages/idempotency/tsconfig.json @@ -24,7 +24,6 @@ }, "lib": [ "es2019" ], "types": [ - "jest", "node" ] } \ No newline at end of file From ea5548d483f655922042a82b9dc43c139a8d42e2 Mon Sep 17 00:00:00 2001 From: vgphoenixcampos <111440293+vgphoenixcampos@users.noreply.github.com> Date: Thu, 8 Sep 2022 14:19:15 -0400 Subject: [PATCH 04/19] feat: refactor persistence layer classes into their own folder --- packages/idempotency/src/IdempotencyOptions.ts | 2 +- .../src/persistence/DynamoDbPersistenceLayer.ts | 13 +++++++++++++ .../src/{ => persistence}/PersistenceLayer.ts | 10 +--------- .../{ => persistence}/PersistenceLayerInterface.ts | 2 +- 4 files changed, 16 insertions(+), 11 deletions(-) create mode 100644 packages/idempotency/src/persistence/DynamoDbPersistenceLayer.ts rename packages/idempotency/src/{ => persistence}/PersistenceLayer.ts (67%) rename packages/idempotency/src/{ => persistence}/PersistenceLayerInterface.ts (78%) diff --git a/packages/idempotency/src/IdempotencyOptions.ts b/packages/idempotency/src/IdempotencyOptions.ts index c19eb9efbc..e7d3454721 100644 --- a/packages/idempotency/src/IdempotencyOptions.ts +++ b/packages/idempotency/src/IdempotencyOptions.ts @@ -1,5 +1,5 @@ import { IdempotencyConfig } from './IdempotencyConfig'; -import { PersistenceLayer } from './PersistenceLayer'; +import { PersistenceLayer } from './persistence/PersistenceLayer'; type IdempotencyOptions = { dataKeywordArgument: string diff --git a/packages/idempotency/src/persistence/DynamoDbPersistenceLayer.ts b/packages/idempotency/src/persistence/DynamoDbPersistenceLayer.ts new file mode 100644 index 0000000000..dba1823e80 --- /dev/null +++ b/packages/idempotency/src/persistence/DynamoDbPersistenceLayer.ts @@ -0,0 +1,13 @@ +/* eslint-disable @typescript-eslint/no-empty-function */ +import { PersistenceLayer } from './PersistenceLayer'; + +class DynamoDBPersistenceLayer extends PersistenceLayer { + protected _deleteRecord(): void {} + protected _getRecord(): void {} + protected _putRecord(): void {} + protected _updateRecord(): void {} +} + +export { + DynamoDBPersistenceLayer +}; \ No newline at end of file diff --git a/packages/idempotency/src/PersistenceLayer.ts b/packages/idempotency/src/persistence/PersistenceLayer.ts similarity index 67% rename from packages/idempotency/src/PersistenceLayer.ts rename to packages/idempotency/src/persistence/PersistenceLayer.ts index e1b537a104..e8dd1c6c20 100644 --- a/packages/idempotency/src/PersistenceLayer.ts +++ b/packages/idempotency/src/persistence/PersistenceLayer.ts @@ -1,5 +1,5 @@ /* eslint-disable @typescript-eslint/no-empty-function */ -import { IdempotencyConfig } from './IdempotencyConfig'; +import { IdempotencyConfig } from '../IdempotencyConfig'; import { PersistenceLayerInterface } from './PersistenceLayerInterface'; abstract class PersistenceLayer implements PersistenceLayerInterface { @@ -15,14 +15,6 @@ abstract class PersistenceLayer implements PersistenceLayerInterface { protected abstract _updateRecord(): void; } -class DynamoDBPersistenceLayer extends PersistenceLayer { - protected _deleteRecord(): void {} - protected _getRecord(): void {} - protected _putRecord(): void {} - protected _updateRecord(): void {} -} - export { - DynamoDBPersistenceLayer, PersistenceLayer }; \ No newline at end of file diff --git a/packages/idempotency/src/PersistenceLayerInterface.ts b/packages/idempotency/src/persistence/PersistenceLayerInterface.ts similarity index 78% rename from packages/idempotency/src/PersistenceLayerInterface.ts rename to packages/idempotency/src/persistence/PersistenceLayerInterface.ts index b28c10ba53..3783b70719 100644 --- a/packages/idempotency/src/PersistenceLayerInterface.ts +++ b/packages/idempotency/src/persistence/PersistenceLayerInterface.ts @@ -1,4 +1,4 @@ -import { IdempotencyConfig } from './IdempotencyConfig'; +import { IdempotencyConfig } from '../IdempotencyConfig'; interface PersistenceLayerInterface { configure(config: IdempotencyConfig): void From 238d6fe7224c10d6565827d05f073a56236fc5da Mon Sep 17 00:00:00 2001 From: vgphoenixcampos <111440293+vgphoenixcampos@users.noreply.github.com> Date: Thu, 8 Sep 2022 14:39:02 -0400 Subject: [PATCH 05/19] feat: added async types to persistence layer --- .../persistence/DynamoDbPersistenceLayer.ts | 12 ++++--- .../src/persistence/PersistenceLayer.ts | 36 ++++++++++++++----- .../persistence/PersistenceLayerInterface.ts | 9 ++--- 3 files changed, 40 insertions(+), 17 deletions(-) diff --git a/packages/idempotency/src/persistence/DynamoDbPersistenceLayer.ts b/packages/idempotency/src/persistence/DynamoDbPersistenceLayer.ts index dba1823e80..92602476df 100644 --- a/packages/idempotency/src/persistence/DynamoDbPersistenceLayer.ts +++ b/packages/idempotency/src/persistence/DynamoDbPersistenceLayer.ts @@ -1,11 +1,13 @@ /* eslint-disable @typescript-eslint/no-empty-function */ -import { PersistenceLayer } from './PersistenceLayer'; +import { IdempotencyRecord, PersistenceLayer } from './PersistenceLayer'; class DynamoDBPersistenceLayer extends PersistenceLayer { - protected _deleteRecord(): void {} - protected _getRecord(): void {} - protected _putRecord(): void {} - protected _updateRecord(): void {} + protected async _deleteRecord(): Promise {} + protected async _getRecord(): Promise { + return Promise.resolve({} as IdempotencyRecord); + } + protected async _putRecord(): Promise {} + protected async _updateRecord(): Promise {} } export { diff --git a/packages/idempotency/src/persistence/PersistenceLayer.ts b/packages/idempotency/src/persistence/PersistenceLayer.ts index e8dd1c6c20..637b34851c 100644 --- a/packages/idempotency/src/persistence/PersistenceLayer.ts +++ b/packages/idempotency/src/persistence/PersistenceLayer.ts @@ -2,19 +2,39 @@ import { IdempotencyConfig } from '../IdempotencyConfig'; import { PersistenceLayerInterface } from './PersistenceLayerInterface'; +class IdempotencyRecord{ + public constructor(){} + + public isExpired(): boolean{ + return false; + } + + public responseJsonAsObject(): Record | undefined{ + return; + } + + public status(): string{ + return ''; + } +} + abstract class PersistenceLayer implements PersistenceLayerInterface { + public constructor(){} public configure(_config: IdempotencyConfig): void {} - public deleteRecord(): void {} - public getRecord(): void {} - public saveInProgress(): void {} - public saveSuccess(): void {} + public async deleteRecord(): Promise {} + public async getRecord(): Promise { + return Promise.resolve({} as IdempotencyRecord); + } + public async saveInProgress(): Promise {} + public async saveSuccess(): Promise {} - protected abstract _deleteRecord(): void; - protected abstract _getRecord(): void; - protected abstract _putRecord(): void; - protected abstract _updateRecord(): void; + protected abstract _deleteRecord(): Promise; + protected abstract _getRecord(): Promise; + protected abstract _putRecord(): Promise; + protected abstract _updateRecord(): Promise; } export { + IdempotencyRecord, PersistenceLayer }; \ No newline at end of file diff --git a/packages/idempotency/src/persistence/PersistenceLayerInterface.ts b/packages/idempotency/src/persistence/PersistenceLayerInterface.ts index 3783b70719..d9c7fbe8b0 100644 --- a/packages/idempotency/src/persistence/PersistenceLayerInterface.ts +++ b/packages/idempotency/src/persistence/PersistenceLayerInterface.ts @@ -1,11 +1,12 @@ import { IdempotencyConfig } from '../IdempotencyConfig'; +import { IdempotencyRecord } from './PersistenceLayer'; interface PersistenceLayerInterface { configure(config: IdempotencyConfig): void - saveInProgress(): void - saveSuccess(): void - deleteRecord(): void - getRecord(): void + saveInProgress(): Promise + saveSuccess(): Promise + deleteRecord(): Promise + getRecord(): Promise } export { PersistenceLayerInterface }; From 11d5633e20f67b5d50e6e0073c102ff03ea65808 Mon Sep 17 00:00:00 2001 From: vgphoenixcampos <111440293+vgphoenixcampos@users.noreply.github.com> Date: Thu, 8 Sep 2022 14:44:39 -0400 Subject: [PATCH 06/19] feat: rename idempotency config to differentiate from idempotency options --- packages/idempotency/src/IdempotencyConfig.ts | 3 --- packages/idempotency/src/IdempotencyOptions.ts | 4 ++-- packages/idempotency/src/IdempotencyPersistenceConfig.ts | 3 +++ packages/idempotency/src/persistence/PersistenceLayer.ts | 4 ++-- .../idempotency/src/persistence/PersistenceLayerInterface.ts | 4 ++-- 5 files changed, 9 insertions(+), 9 deletions(-) delete mode 100644 packages/idempotency/src/IdempotencyConfig.ts create mode 100644 packages/idempotency/src/IdempotencyPersistenceConfig.ts diff --git a/packages/idempotency/src/IdempotencyConfig.ts b/packages/idempotency/src/IdempotencyConfig.ts deleted file mode 100644 index 51c87de117..0000000000 --- a/packages/idempotency/src/IdempotencyConfig.ts +++ /dev/null @@ -1,3 +0,0 @@ -export class IdempotencyConfig{ - -} diff --git a/packages/idempotency/src/IdempotencyOptions.ts b/packages/idempotency/src/IdempotencyOptions.ts index e7d3454721..59701f6a21 100644 --- a/packages/idempotency/src/IdempotencyOptions.ts +++ b/packages/idempotency/src/IdempotencyOptions.ts @@ -1,9 +1,9 @@ -import { IdempotencyConfig } from './IdempotencyConfig'; +import { IdempotencyPersistenceConfig } from './IdempotencyPersistenceConfig'; import { PersistenceLayer } from './persistence/PersistenceLayer'; type IdempotencyOptions = { dataKeywordArgument: string - config: IdempotencyConfig + config: IdempotencyPersistenceConfig persistenceStore: PersistenceLayer }; diff --git a/packages/idempotency/src/IdempotencyPersistenceConfig.ts b/packages/idempotency/src/IdempotencyPersistenceConfig.ts new file mode 100644 index 0000000000..37bd50f0e9 --- /dev/null +++ b/packages/idempotency/src/IdempotencyPersistenceConfig.ts @@ -0,0 +1,3 @@ +export class IdempotencyPersistenceConfig{ + +} diff --git a/packages/idempotency/src/persistence/PersistenceLayer.ts b/packages/idempotency/src/persistence/PersistenceLayer.ts index 637b34851c..92d329fc51 100644 --- a/packages/idempotency/src/persistence/PersistenceLayer.ts +++ b/packages/idempotency/src/persistence/PersistenceLayer.ts @@ -1,5 +1,5 @@ /* eslint-disable @typescript-eslint/no-empty-function */ -import { IdempotencyConfig } from '../IdempotencyConfig'; +import { IdempotencyPersistenceConfig } from '../IdempotencyPersistenceConfig'; import { PersistenceLayerInterface } from './PersistenceLayerInterface'; class IdempotencyRecord{ @@ -20,7 +20,7 @@ class IdempotencyRecord{ abstract class PersistenceLayer implements PersistenceLayerInterface { public constructor(){} - public configure(_config: IdempotencyConfig): void {} + public configure(_config: IdempotencyPersistenceConfig): void {} public async deleteRecord(): Promise {} public async getRecord(): Promise { return Promise.resolve({} as IdempotencyRecord); diff --git a/packages/idempotency/src/persistence/PersistenceLayerInterface.ts b/packages/idempotency/src/persistence/PersistenceLayerInterface.ts index d9c7fbe8b0..f2d30c4c06 100644 --- a/packages/idempotency/src/persistence/PersistenceLayerInterface.ts +++ b/packages/idempotency/src/persistence/PersistenceLayerInterface.ts @@ -1,8 +1,8 @@ -import { IdempotencyConfig } from '../IdempotencyConfig'; +import { IdempotencyPersistenceConfig } from '../IdempotencyPersistenceConfig'; import { IdempotencyRecord } from './PersistenceLayer'; interface PersistenceLayerInterface { - configure(config: IdempotencyConfig): void + configure(config: IdempotencyPersistenceConfig): void saveInProgress(): Promise saveSuccess(): Promise deleteRecord(): Promise From b0f70c7845ed22e3bc427b99a144b4f23b4c32d3 Mon Sep 17 00:00:00 2001 From: vgphoenixcampos <111440293+vgphoenixcampos@users.noreply.github.com> Date: Thu, 8 Sep 2022 15:31:17 -0400 Subject: [PATCH 07/19] feat: added type for a generic function --- packages/idempotency/src/makeFunctionIdempotent.ts | 10 +++++----- packages/idempotency/src/types/AnyFunction.ts | 5 +++++ 2 files changed, 10 insertions(+), 5 deletions(-) create mode 100644 packages/idempotency/src/types/AnyFunction.ts diff --git a/packages/idempotency/src/makeFunctionIdempotent.ts b/packages/idempotency/src/makeFunctionIdempotent.ts index 0dfd6b57cb..6a46bd6139 100644 --- a/packages/idempotency/src/makeFunctionIdempotent.ts +++ b/packages/idempotency/src/makeFunctionIdempotent.ts @@ -1,9 +1,9 @@ -/* eslint-disable @typescript-eslint/no-empty-function */ +import { AnyFunction } from 'types/AnyFunction'; import { IdempotencyOptions } from './IdempotencyOptions'; -const makeFunctionIdempotent = ( - _fn: () => T, +const makeFunctionIdempotent = ( + fn: AnyFunction, _options: IdempotencyOptions -): void => {}; +): AnyFunction => fn; -export { makeFunctionIdempotent }; +export { makeFunctionIdempotent }; \ No newline at end of file diff --git a/packages/idempotency/src/types/AnyFunction.ts b/packages/idempotency/src/types/AnyFunction.ts new file mode 100644 index 0000000000..4209d6f45e --- /dev/null +++ b/packages/idempotency/src/types/AnyFunction.ts @@ -0,0 +1,5 @@ +type AnyFunction = , U>(...args: T) => U; + +export { + AnyFunction +}; \ No newline at end of file From 83aae62f754f41780c73e937e660e12b3d48ec3c Mon Sep 17 00:00:00 2001 From: vgphoenixcampos <111440293+vgphoenixcampos@users.noreply.github.com> Date: Thu, 8 Sep 2022 16:06:00 -0400 Subject: [PATCH 08/19] feat: modified AnyFunction to accept void functions --- packages/idempotency/src/types/AnyFunction.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/idempotency/src/types/AnyFunction.ts b/packages/idempotency/src/types/AnyFunction.ts index 4209d6f45e..2883cf6a25 100644 --- a/packages/idempotency/src/types/AnyFunction.ts +++ b/packages/idempotency/src/types/AnyFunction.ts @@ -1,4 +1,4 @@ -type AnyFunction = , U>(...args: T) => U; +type AnyFunction = (...args: Array) => U | void; export { AnyFunction From fe5547e3a3cdbd4653f155aa24bc5ba7001a96eb Mon Sep 17 00:00:00 2001 From: vgphoenixcampos <111440293+vgphoenixcampos@users.noreply.github.com> Date: Thu, 8 Sep 2022 16:33:02 -0400 Subject: [PATCH 09/19] feat: defined member variables of record --- .../src/persistence/PersistenceLayer.ts | 27 +++++++++++-------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/packages/idempotency/src/persistence/PersistenceLayer.ts b/packages/idempotency/src/persistence/PersistenceLayer.ts index 92d329fc51..5a81456f9a 100644 --- a/packages/idempotency/src/persistence/PersistenceLayer.ts +++ b/packages/idempotency/src/persistence/PersistenceLayer.ts @@ -2,31 +2,36 @@ import { IdempotencyPersistenceConfig } from '../IdempotencyPersistenceConfig'; import { PersistenceLayerInterface } from './PersistenceLayerInterface'; -class IdempotencyRecord{ - public constructor(){} +class IdempotencyRecord { + public constructor(public idempotencyKey: string, + private _status: string = '', + public expiryTimestamp: number | undefined, + public inProgressExpiryTimestamp: number | undefined, + public responseData: string = '', + public payloadHash: string | undefined) {} - public isExpired(): boolean{ + public isExpired(): boolean { return false; } - - public responseJsonAsObject(): Record | undefined{ + + public responseJsonAsObject(): Record | undefined { return; } - public status(): string{ + public status(): string { return ''; } } abstract class PersistenceLayer implements PersistenceLayerInterface { - public constructor(){} - public configure(_config: IdempotencyPersistenceConfig): void {} - public async deleteRecord(): Promise {} + public constructor() { } + public configure(_config: IdempotencyPersistenceConfig): void { } + public async deleteRecord(): Promise { } public async getRecord(): Promise { return Promise.resolve({} as IdempotencyRecord); } - public async saveInProgress(): Promise {} - public async saveSuccess(): Promise {} + public async saveInProgress(): Promise { } + public async saveSuccess(): Promise { } protected abstract _deleteRecord(): Promise; protected abstract _getRecord(): Promise; From dc2382ea58b624bba8165e3ec263dd267d4f253d Mon Sep 17 00:00:00 2001 From: vgphoenixcampos <111440293+vgphoenixcampos@users.noreply.github.com> Date: Thu, 8 Sep 2022 16:56:25 -0400 Subject: [PATCH 10/19] feat: remove idempotency configuration for this FR --- packages/idempotency/src/IdempotencyPersistenceConfig.ts | 3 --- packages/idempotency/src/persistence/PersistenceLayer.ts | 3 +-- .../idempotency/src/persistence/PersistenceLayerInterface.ts | 3 +-- 3 files changed, 2 insertions(+), 7 deletions(-) delete mode 100644 packages/idempotency/src/IdempotencyPersistenceConfig.ts diff --git a/packages/idempotency/src/IdempotencyPersistenceConfig.ts b/packages/idempotency/src/IdempotencyPersistenceConfig.ts deleted file mode 100644 index 37bd50f0e9..0000000000 --- a/packages/idempotency/src/IdempotencyPersistenceConfig.ts +++ /dev/null @@ -1,3 +0,0 @@ -export class IdempotencyPersistenceConfig{ - -} diff --git a/packages/idempotency/src/persistence/PersistenceLayer.ts b/packages/idempotency/src/persistence/PersistenceLayer.ts index 5a81456f9a..72efc97e6a 100644 --- a/packages/idempotency/src/persistence/PersistenceLayer.ts +++ b/packages/idempotency/src/persistence/PersistenceLayer.ts @@ -1,5 +1,4 @@ /* eslint-disable @typescript-eslint/no-empty-function */ -import { IdempotencyPersistenceConfig } from '../IdempotencyPersistenceConfig'; import { PersistenceLayerInterface } from './PersistenceLayerInterface'; class IdempotencyRecord { @@ -25,7 +24,7 @@ class IdempotencyRecord { abstract class PersistenceLayer implements PersistenceLayerInterface { public constructor() { } - public configure(_config: IdempotencyPersistenceConfig): void { } + public configure(_functionName: string = ''): void {} public async deleteRecord(): Promise { } public async getRecord(): Promise { return Promise.resolve({} as IdempotencyRecord); diff --git a/packages/idempotency/src/persistence/PersistenceLayerInterface.ts b/packages/idempotency/src/persistence/PersistenceLayerInterface.ts index f2d30c4c06..4b2da46b38 100644 --- a/packages/idempotency/src/persistence/PersistenceLayerInterface.ts +++ b/packages/idempotency/src/persistence/PersistenceLayerInterface.ts @@ -1,8 +1,7 @@ -import { IdempotencyPersistenceConfig } from '../IdempotencyPersistenceConfig'; import { IdempotencyRecord } from './PersistenceLayer'; interface PersistenceLayerInterface { - configure(config: IdempotencyPersistenceConfig): void + configure(functionName: string): void saveInProgress(): Promise saveSuccess(): Promise deleteRecord(): Promise From 1218fabc2e26931950a6b52733cc1b8d42cb819a Mon Sep 17 00:00:00 2001 From: vgphoenixcampos <111440293+vgphoenixcampos@users.noreply.github.com> Date: Thu, 8 Sep 2022 17:03:56 -0400 Subject: [PATCH 11/19] feat: removing unused params from options --- packages/idempotency/src/IdempotencyOptions.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/idempotency/src/IdempotencyOptions.ts b/packages/idempotency/src/IdempotencyOptions.ts index 59701f6a21..53893cfe42 100644 --- a/packages/idempotency/src/IdempotencyOptions.ts +++ b/packages/idempotency/src/IdempotencyOptions.ts @@ -1,9 +1,7 @@ -import { IdempotencyPersistenceConfig } from './IdempotencyPersistenceConfig'; import { PersistenceLayer } from './persistence/PersistenceLayer'; type IdempotencyOptions = { dataKeywordArgument: string - config: IdempotencyPersistenceConfig persistenceStore: PersistenceLayer }; From a8371eb6b54834f9596add0cdd281757c7be5dd8 Mon Sep 17 00:00:00 2001 From: vgphoenixcampos <111440293+vgphoenixcampos@users.noreply.github.com> Date: Thu, 8 Sep 2022 18:32:32 -0400 Subject: [PATCH 12/19] feat: refactored type of function to accept any combo of parameters --- packages/idempotency/src/makeFunctionIdempotent.ts | 11 ++++++----- packages/idempotency/src/types/AnyFunction.ts | 3 ++- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/packages/idempotency/src/makeFunctionIdempotent.ts b/packages/idempotency/src/makeFunctionIdempotent.ts index 6a46bd6139..dc851396d6 100644 --- a/packages/idempotency/src/makeFunctionIdempotent.ts +++ b/packages/idempotency/src/makeFunctionIdempotent.ts @@ -1,9 +1,10 @@ -import { AnyFunction } from 'types/AnyFunction'; +/* eslint-disable @typescript-eslint/no-explicit-any */ +import { AnyFunction } from './types/AnyFunction'; import { IdempotencyOptions } from './IdempotencyOptions'; -const makeFunctionIdempotent = ( - fn: AnyFunction, +const makeFunctionIdempotent = ( + fn: AnyFunction, _options: IdempotencyOptions -): AnyFunction => fn; +): (...args: Array) => Promise => (...args) => fn(...args); -export { makeFunctionIdempotent }; \ No newline at end of file +export { makeFunctionIdempotent }; diff --git a/packages/idempotency/src/types/AnyFunction.ts b/packages/idempotency/src/types/AnyFunction.ts index 2883cf6a25..bddcd8fc15 100644 --- a/packages/idempotency/src/types/AnyFunction.ts +++ b/packages/idempotency/src/types/AnyFunction.ts @@ -1,4 +1,5 @@ -type AnyFunction = (...args: Array) => U | void; +// eslint-disable-next-line @typescript-eslint/no-explicit-any +type AnyFunction = (...args: Array) => Promise; export { AnyFunction From ff331d7338ec395fe658763f9de26d6ee1881498 Mon Sep 17 00:00:00 2001 From: Keven Date: Thu, 8 Sep 2022 21:01:04 -0400 Subject: [PATCH 13/19] feat: add type for update and add functions for dynamo --- .../idempotency/src/persistence/DynamoDbPersistenceLayer.ts | 2 +- packages/idempotency/src/persistence/PersistenceLayer.ts | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/idempotency/src/persistence/DynamoDbPersistenceLayer.ts b/packages/idempotency/src/persistence/DynamoDbPersistenceLayer.ts index 92602476df..920c4deadb 100644 --- a/packages/idempotency/src/persistence/DynamoDbPersistenceLayer.ts +++ b/packages/idempotency/src/persistence/DynamoDbPersistenceLayer.ts @@ -6,7 +6,7 @@ class DynamoDBPersistenceLayer extends PersistenceLayer { protected async _getRecord(): Promise { return Promise.resolve({} as IdempotencyRecord); } - protected async _putRecord(): Promise {} + protected async _putRecord(_record: IdempotencyRecord): Promise {} protected async _updateRecord(): Promise {} } diff --git a/packages/idempotency/src/persistence/PersistenceLayer.ts b/packages/idempotency/src/persistence/PersistenceLayer.ts index 72efc97e6a..aea564faa7 100644 --- a/packages/idempotency/src/persistence/PersistenceLayer.ts +++ b/packages/idempotency/src/persistence/PersistenceLayer.ts @@ -3,7 +3,7 @@ import { PersistenceLayerInterface } from './PersistenceLayerInterface'; class IdempotencyRecord { public constructor(public idempotencyKey: string, - private _status: string = '', + private status: string = '', public expiryTimestamp: number | undefined, public inProgressExpiryTimestamp: number | undefined, public responseData: string = '', @@ -17,7 +17,7 @@ class IdempotencyRecord { return; } - public status(): string { + public getStatus(): string { return ''; } } @@ -34,7 +34,7 @@ abstract class PersistenceLayer implements PersistenceLayerInterface { protected abstract _deleteRecord(): Promise; protected abstract _getRecord(): Promise; - protected abstract _putRecord(): Promise; + protected abstract _putRecord(record: IdempotencyRecord): Promise; protected abstract _updateRecord(): Promise; } From 608adac5f14dc2c9e704b625ffc3b94077e72221 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CKevenFuentes9=E2=80=9D?= <“keven_fuentes@vanguard.com”> Date: Thu, 8 Sep 2022 21:11:35 -0400 Subject: [PATCH 14/19] feat: add table name for dynamo constructor --- .../idempotency/src/persistence/DynamoDbPersistenceLayer.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/idempotency/src/persistence/DynamoDbPersistenceLayer.ts b/packages/idempotency/src/persistence/DynamoDbPersistenceLayer.ts index 920c4deadb..d7be950684 100644 --- a/packages/idempotency/src/persistence/DynamoDbPersistenceLayer.ts +++ b/packages/idempotency/src/persistence/DynamoDbPersistenceLayer.ts @@ -2,6 +2,9 @@ import { IdempotencyRecord, PersistenceLayer } from './PersistenceLayer'; class DynamoDBPersistenceLayer extends PersistenceLayer { + constructor(_tableName: string) { + super() + } protected async _deleteRecord(): Promise {} protected async _getRecord(): Promise { return Promise.resolve({} as IdempotencyRecord); From 7d82affb403e54a5cbd86db2a719b8bda68697e3 Mon Sep 17 00:00:00 2001 From: KevenFuentes9 Date: Thu, 8 Sep 2022 21:17:57 -0400 Subject: [PATCH 15/19] feat: add key attribute for dynamo record --- .../idempotency/src/persistence/DynamoDbPersistenceLayer.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/idempotency/src/persistence/DynamoDbPersistenceLayer.ts b/packages/idempotency/src/persistence/DynamoDbPersistenceLayer.ts index d7be950684..0384271af7 100644 --- a/packages/idempotency/src/persistence/DynamoDbPersistenceLayer.ts +++ b/packages/idempotency/src/persistence/DynamoDbPersistenceLayer.ts @@ -2,7 +2,7 @@ import { IdempotencyRecord, PersistenceLayer } from './PersistenceLayer'; class DynamoDBPersistenceLayer extends PersistenceLayer { - constructor(_tableName: string) { + constructor(_tableName: string, _key_attr: string = 'id') { super() } protected async _deleteRecord(): Promise {} From a25e11bd654c4b9b076377bf097f96a4fba0e28f Mon Sep 17 00:00:00 2001 From: KevenFuentes9 Date: Thu, 8 Sep 2022 21:22:51 -0400 Subject: [PATCH 16/19] feat: add type for update and add functions for dynamo --- .../idempotency/src/persistence/DynamoDbPersistenceLayer.ts | 2 +- packages/idempotency/src/persistence/PersistenceLayer.ts | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/idempotency/src/persistence/DynamoDbPersistenceLayer.ts b/packages/idempotency/src/persistence/DynamoDbPersistenceLayer.ts index 92602476df..920c4deadb 100644 --- a/packages/idempotency/src/persistence/DynamoDbPersistenceLayer.ts +++ b/packages/idempotency/src/persistence/DynamoDbPersistenceLayer.ts @@ -6,7 +6,7 @@ class DynamoDBPersistenceLayer extends PersistenceLayer { protected async _getRecord(): Promise { return Promise.resolve({} as IdempotencyRecord); } - protected async _putRecord(): Promise {} + protected async _putRecord(_record: IdempotencyRecord): Promise {} protected async _updateRecord(): Promise {} } diff --git a/packages/idempotency/src/persistence/PersistenceLayer.ts b/packages/idempotency/src/persistence/PersistenceLayer.ts index 72efc97e6a..aea564faa7 100644 --- a/packages/idempotency/src/persistence/PersistenceLayer.ts +++ b/packages/idempotency/src/persistence/PersistenceLayer.ts @@ -3,7 +3,7 @@ import { PersistenceLayerInterface } from './PersistenceLayerInterface'; class IdempotencyRecord { public constructor(public idempotencyKey: string, - private _status: string = '', + private status: string = '', public expiryTimestamp: number | undefined, public inProgressExpiryTimestamp: number | undefined, public responseData: string = '', @@ -17,7 +17,7 @@ class IdempotencyRecord { return; } - public status(): string { + public getStatus(): string { return ''; } } @@ -34,7 +34,7 @@ abstract class PersistenceLayer implements PersistenceLayerInterface { protected abstract _deleteRecord(): Promise; protected abstract _getRecord(): Promise; - protected abstract _putRecord(): Promise; + protected abstract _putRecord(record: IdempotencyRecord): Promise; protected abstract _updateRecord(): Promise; } From 430971313e8c28a6145eb828160bc8dd28d99abb Mon Sep 17 00:00:00 2001 From: KevenFuentes9 Date: Thu, 8 Sep 2022 21:22:57 -0400 Subject: [PATCH 17/19] feat: add table name for dynamo constructor --- .../idempotency/src/persistence/DynamoDbPersistenceLayer.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/idempotency/src/persistence/DynamoDbPersistenceLayer.ts b/packages/idempotency/src/persistence/DynamoDbPersistenceLayer.ts index 920c4deadb..d7be950684 100644 --- a/packages/idempotency/src/persistence/DynamoDbPersistenceLayer.ts +++ b/packages/idempotency/src/persistence/DynamoDbPersistenceLayer.ts @@ -2,6 +2,9 @@ import { IdempotencyRecord, PersistenceLayer } from './PersistenceLayer'; class DynamoDBPersistenceLayer extends PersistenceLayer { + constructor(_tableName: string) { + super() + } protected async _deleteRecord(): Promise {} protected async _getRecord(): Promise { return Promise.resolve({} as IdempotencyRecord); From 916a2526e52e9cedbcb133cf10366a8f7e32fe99 Mon Sep 17 00:00:00 2001 From: KevenFuentes9 Date: Thu, 8 Sep 2022 21:23:04 -0400 Subject: [PATCH 18/19] feat: add key attribute for dynamo record --- .../idempotency/src/persistence/DynamoDbPersistenceLayer.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/idempotency/src/persistence/DynamoDbPersistenceLayer.ts b/packages/idempotency/src/persistence/DynamoDbPersistenceLayer.ts index d7be950684..0384271af7 100644 --- a/packages/idempotency/src/persistence/DynamoDbPersistenceLayer.ts +++ b/packages/idempotency/src/persistence/DynamoDbPersistenceLayer.ts @@ -2,7 +2,7 @@ import { IdempotencyRecord, PersistenceLayer } from './PersistenceLayer'; class DynamoDBPersistenceLayer extends PersistenceLayer { - constructor(_tableName: string) { + constructor(_tableName: string, _key_attr: string = 'id') { super() } protected async _deleteRecord(): Promise {} From 2d9d37779738b4cd81f4ac89ea9e10cd8d265079 Mon Sep 17 00:00:00 2001 From: Phoenix Campos Date: Fri, 9 Sep 2022 15:52:59 -0400 Subject: [PATCH 19/19] feat: fixing linting issues --- .../src/persistence/DynamoDbPersistenceLayer.ts | 4 ++-- .../idempotency/src/persistence/PersistenceLayer.ts | 11 ++++++----- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/packages/idempotency/src/persistence/DynamoDbPersistenceLayer.ts b/packages/idempotency/src/persistence/DynamoDbPersistenceLayer.ts index 0384271af7..6592841b3f 100644 --- a/packages/idempotency/src/persistence/DynamoDbPersistenceLayer.ts +++ b/packages/idempotency/src/persistence/DynamoDbPersistenceLayer.ts @@ -2,8 +2,8 @@ import { IdempotencyRecord, PersistenceLayer } from './PersistenceLayer'; class DynamoDBPersistenceLayer extends PersistenceLayer { - constructor(_tableName: string, _key_attr: string = 'id') { - super() + public constructor(_tableName: string, _key_attr: string = 'id') { + super(); } protected async _deleteRecord(): Promise {} protected async _getRecord(): Promise { diff --git a/packages/idempotency/src/persistence/PersistenceLayer.ts b/packages/idempotency/src/persistence/PersistenceLayer.ts index aea564faa7..c7a1b30c63 100644 --- a/packages/idempotency/src/persistence/PersistenceLayer.ts +++ b/packages/idempotency/src/persistence/PersistenceLayer.ts @@ -8,18 +8,19 @@ class IdempotencyRecord { public inProgressExpiryTimestamp: number | undefined, public responseData: string = '', public payloadHash: string | undefined) {} - + + public getStatus(): string { + return ''; + } + public isExpired(): boolean { return false; } - + public responseJsonAsObject(): Record | undefined { return; } - public getStatus(): string { - return ''; - } } abstract class PersistenceLayer implements PersistenceLayerInterface {