diff --git a/jest.config.js b/jest.config.js index 832d1e17..38587bed 100644 --- a/jest.config.js +++ b/jest.config.js @@ -12,7 +12,16 @@ module.exports = { statements: 80, branches: 80, functions: 80, - lines: 80 - } - } + lines: 80, + }, + }, + transform: { + // Use swc to speed up ts-jest's sluggish compilation times. + // Using this cuts the initial time to compile from 6-12 seconds to + // ~1 second consistently. + // Inspiration from: https://github.com/kulshekhar/ts-jest/issues/259#issuecomment-1332269911 + // + // https://swc.rs/docs/usage/jest#usage + '^.+\\.(t|j)s?$': '@swc/jest', + }, } diff --git a/package.json b/package.json index 1b1d0aa3..cee00de0 100644 --- a/package.json +++ b/package.json @@ -51,6 +51,8 @@ "dependencies": { "@aws-sdk/client-s3": "^3.341.0", "@aws-sdk/client-sfn": "^3.341.0", + "@swc/core": "^1.3.101", + "@swc/jest": "^0.2.29", "@types/sinon": "^10.0.13", "@uniswap/uniswapx-sdk": "^1.4.0", "aws-cdk-lib": "2.85.0", diff --git a/test/handlers/post-order.test.ts b/test/handlers/post-order.test.ts index b6556f8d..4febe9f6 100644 --- a/test/handlers/post-order.test.ts +++ b/test/handlers/post-order.test.ts @@ -1,7 +1,7 @@ -const parserMock = jest.fn() - +/* eslint-disable @typescript-eslint/ban-ts-comment */ +// @ts-nocheck import { SFNClient, StartExecutionCommand } from '@aws-sdk/client-sfn' -import { OrderType, OrderValidation, REACTOR_ADDRESS_MAPPING } from '@uniswap/uniswapx-sdk' +import { DutchOrder, OrderType, OrderValidation, REACTOR_ADDRESS_MAPPING } from '@uniswap/uniswapx-sdk' import { mockClient } from 'aws-sdk-client-mock' import { ORDER_STATUS } from '../../lib/entities' import { ErrorCode } from '../../lib/handlers/base' @@ -45,9 +45,7 @@ jest.mock('@uniswap/uniswapx-sdk', () => { const originalSdk = jest.requireActual('@uniswap/uniswapx-sdk') return { ...originalSdk, - DutchOrder: { - parse: parserMock, - }, + DutchOrder: { parse: jest.fn() }, OrderType: { Dutch: 'Dutch' }, } }) @@ -140,7 +138,7 @@ describe('Testing post order handler.', () => { process.env['STATE_MACHINE_ARN_1'] = MOCK_ARN_1 process.env['STATE_MACHINE_ARN_5'] = MOCK_ARN_5 process.env['REGION'] = 'region' - parserMock.mockImplementation((_order: any, chainId: number) => ({ ...DECODED_ORDER, chainId })) + DutchOrder.parse.mockImplementation((_order: any, chainId: number) => ({ ...DECODED_ORDER, chainId })) }) afterEach(() => { @@ -223,7 +221,7 @@ describe('Testing post order handler.', () => { it('should allow more orders if in the high list', async () => { countOrdersByOffererAndStatusMock.mockReturnValueOnce(100) validatorMock.mockReturnValue({ valid: true }) - parserMock.mockReturnValueOnce( + DutchOrder.parse.mockReturnValueOnce( Object.assign({}, DECODED_ORDER, { info: Object.assign({}, ORDER_INFO, { swapper: '0xa7152fad7467857dc2d4060fecaadf9f6b8227d3', @@ -241,7 +239,7 @@ describe('Testing post order handler.', () => { it('should reject order submission for offerer in high list at higher order count', async () => { countOrdersByOffererAndStatusMock.mockReturnValueOnce(201) validatorMock.mockReturnValue({ valid: true }) - parserMock.mockReturnValueOnce( + DutchOrder.parse.mockReturnValueOnce( Object.assign({}, DECODED_ORDER, { info: Object.assign({}, ORDER_INFO, { offerer: '0xa7152fad7467857dc2d4060fecaadf9f6b8227d3', @@ -363,7 +361,7 @@ describe('Testing post order handler.', () => { }) it('on-chain validation failed; throws 400', async () => { - parserMock.mockReturnValue({ + DutchOrder.parse.mockReturnValue({ ...DECODED_ORDER, chainId: 137, }) diff --git a/test/repositories/dynamo-repository.test.ts b/test/repositories/dynamo-repository.test.ts index 5b83f2b7..f1cc64c6 100644 --- a/test/repositories/dynamo-repository.test.ts +++ b/test/repositories/dynamo-repository.test.ts @@ -3,11 +3,20 @@ import { DocumentClient } from 'aws-sdk/clients/dynamodb' import { ORDER_STATUS, SORT_FIELDS } from '../../lib/entities/Order' import { DynamoOrdersRepository } from '../../lib/repositories/orders-repository' -import * as nonceUtil from '../../lib/util/nonce' +import { generateRandomNonce } from '../../lib/util/nonce' import { currentTimestampInSeconds } from '../../lib/util/time' jest.mock('../../lib/util/time') +jest.mock('../../lib/util/nonce', () => { + const originalModule = jest.requireActual('../../lib/util/nonce') + + return { + ...originalModule, + generateRandomNonce: jest.fn(originalModule.generateRandomNonce), + } +}) + const dynamoConfig = { convertEmptyValues: true, endpoint: 'localhost:8000', @@ -486,10 +495,9 @@ describe('OrdersRepository get nonce test', () => { }) it('should generate random nonce for new address', async () => { - const spy = jest.spyOn(nonceUtil, 'generateRandomNonce') const res = await ordersRepository.getNonceByAddressAndChain('random.eth') expect(res).not.toBeUndefined() - expect(spy).toHaveBeenCalled() + expect(generateRandomNonce).toHaveBeenCalled() }) it('should track nonce for the same address on different chains separately', async () => { diff --git a/yarn.lock b/yarn.lock index f4a3904c..1059dda8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2452,6 +2452,13 @@ slash "^3.0.0" strip-ansi "^6.0.0" +"@jest/create-cache-key-function@^27.4.2": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/create-cache-key-function/-/create-cache-key-function-27.5.1.tgz#7448fae15602ea95c828f5eceed35c202a820b31" + integrity sha512-dmH1yW+makpTSURTy8VzdUwFnfQh1G8R+DxO2Ho2FFmBbKFEVm+3jWdvFhE2VqB/LATCTokkP0dotjyQyw5/AQ== + dependencies: + "@jest/types" "^27.5.1" + "@jest/environment@^29.5.0": version "29.5.0" resolved "https://registry.npmjs.org/@jest/environment/-/environment-29.5.0.tgz" @@ -2586,6 +2593,17 @@ slash "^3.0.0" write-file-atomic "^4.0.2" +"@jest/types@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-27.5.1.tgz#3c79ec4a8ba61c170bf937bcf9e98a9df175ec80" + integrity sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^16.0.0" + chalk "^4.0.0" + "@jest/types@^29.5.0": version "29.5.0" resolved "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz" @@ -2764,6 +2782,93 @@ dependencies: tslib "^2.5.0" +"@swc/core-darwin-arm64@1.3.101": + version "1.3.101" + resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.101.tgz#9ffdc0e77c31b20877fa7405c82905e0c76738d0" + integrity sha512-mNFK+uHNPRXSnfTOG34zJOeMl2waM4hF4a2NY7dkMXrPqw9CoJn4MwTXJcyMiSz1/BnNjjTCHF3Yhj0jPxmkzQ== + +"@swc/core-darwin-x64@1.3.101": + version "1.3.101" + resolved "https://registry.yarnpkg.com/@swc/core-darwin-x64/-/core-darwin-x64-1.3.101.tgz#e50130e21e3cfd3029fd6cea43e8309b58ad9fa6" + integrity sha512-B085j8XOx73Fg15KsHvzYWG262bRweGr3JooO1aW5ec5pYbz5Ew9VS5JKYS03w2UBSxf2maWdbPz2UFAxg0whw== + +"@swc/core-linux-arm-gnueabihf@1.3.101": + version "1.3.101" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.101.tgz#8cd36328e794b3c42b6c8e578bb1f42e59ba0231" + integrity sha512-9xLKRb6zSzRGPqdz52Hy5GuB1lSjmLqa0lST6MTFads3apmx4Vgs8Y5NuGhx/h2I8QM4jXdLbpqQlifpzTlSSw== + +"@swc/core-linux-arm64-gnu@1.3.101": + version "1.3.101" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.101.tgz#d15e3885eb13a1512ba62f00ce4f5bb19f710a0c" + integrity sha512-oE+r1lo7g/vs96Weh2R5l971dt+ZLuhaUX+n3BfDdPxNHfObXgKMjO7E+QS5RbGjv/AwiPCxQmbdCp/xN5ICJA== + +"@swc/core-linux-arm64-musl@1.3.101": + version "1.3.101" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.101.tgz#851d4cc1079b091fee36f5f64335232210749d7a" + integrity sha512-OGjYG3H4BMOTnJWJyBIovCez6KiHF30zMIu4+lGJTCrxRI2fAjGLml3PEXj8tC3FMcud7U2WUn6TdG0/te2k6g== + +"@swc/core-linux-x64-gnu@1.3.101": + version "1.3.101" + resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.101.tgz#3a2a7c584db2e05a798e28361440424914563fa3" + integrity sha512-/kBMcoF12PRO/lwa8Z7w4YyiKDcXQEiLvM+S3G9EvkoKYGgkkz4Q6PSNhF5rwg/E3+Hq5/9D2R+6nrkF287ihg== + +"@swc/core-linux-x64-musl@1.3.101": + version "1.3.101" + resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.101.tgz#45d1d53945994f08e93703b8de24ccac88538d0c" + integrity sha512-kDN8lm4Eew0u1p+h1l3JzoeGgZPQ05qDE0czngnjmfpsH2sOZxVj1hdiCwS5lArpy7ktaLu5JdRnx70MkUzhXw== + +"@swc/core-win32-arm64-msvc@1.3.101": + version "1.3.101" + resolved "https://registry.yarnpkg.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.101.tgz#b2610b8354e5fbca7cc5be3f728e61b046227fa8" + integrity sha512-9Wn8TTLWwJKw63K/S+jjrZb9yoJfJwCE2RV5vPCCWmlMf3U1AXj5XuWOLUX+Rp2sGKau7wZKsvywhheWm+qndQ== + +"@swc/core-win32-ia32-msvc@1.3.101": + version "1.3.101" + resolved "https://registry.yarnpkg.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.101.tgz#c919175bb4cd5e9fcfa56fbd3708167c1d445c68" + integrity sha512-onO5KvICRVlu2xmr4//V2je9O2XgS1SGKpbX206KmmjcJhXN5EYLSxW9qgg+kgV5mip+sKTHTAu7IkzkAtElYA== + +"@swc/core-win32-x64-msvc@1.3.101": + version "1.3.101" + resolved "https://registry.yarnpkg.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.101.tgz#17743fe425caffc596fde5965c9c4cf9a48aa26a" + integrity sha512-T3GeJtNQV00YmiVw/88/nxJ/H43CJvFnpvBHCVn17xbahiVUOPOduh3rc9LgAkKiNt/aV8vU3OJR+6PhfMR7UQ== + +"@swc/core@^1.3.101": + version "1.3.101" + resolved "https://registry.yarnpkg.com/@swc/core/-/core-1.3.101.tgz#4e8f1583094a73c410e48a0bebdeccdc6c66d4a5" + integrity sha512-w5aQ9qYsd/IYmXADAnkXPGDMTqkQalIi+kfFf/MHRKTpaOL7DHjMXwPp/n8hJ0qNjRvchzmPtOqtPBiER50d8A== + dependencies: + "@swc/counter" "^0.1.1" + "@swc/types" "^0.1.5" + optionalDependencies: + "@swc/core-darwin-arm64" "1.3.101" + "@swc/core-darwin-x64" "1.3.101" + "@swc/core-linux-arm-gnueabihf" "1.3.101" + "@swc/core-linux-arm64-gnu" "1.3.101" + "@swc/core-linux-arm64-musl" "1.3.101" + "@swc/core-linux-x64-gnu" "1.3.101" + "@swc/core-linux-x64-musl" "1.3.101" + "@swc/core-win32-arm64-msvc" "1.3.101" + "@swc/core-win32-ia32-msvc" "1.3.101" + "@swc/core-win32-x64-msvc" "1.3.101" + +"@swc/counter@^0.1.1": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@swc/counter/-/counter-0.1.2.tgz#bf06d0770e47c6f1102270b744e17b934586985e" + integrity sha512-9F4ys4C74eSTEUNndnER3VJ15oru2NumfQxS8geE+f3eB5xvfxpWyqE5XlVnxb/R14uoXi6SLbBwwiDSkv+XEw== + +"@swc/jest@^0.2.29": + version "0.2.29" + resolved "https://registry.yarnpkg.com/@swc/jest/-/jest-0.2.29.tgz#b27d647ec430c909f9bb567d1df2a47eaa3841f4" + integrity sha512-8reh5RvHBsSikDC3WGCd5ZTd2BXKkyOdK7QwynrCH58jk2cQFhhHhFBg/jvnWZehUQe/EoOImLENc9/DwbBFow== + dependencies: + "@jest/create-cache-key-function" "^27.4.2" + jsonc-parser "^3.2.0" + +"@swc/types@^0.1.5": + version "0.1.5" + resolved "https://registry.yarnpkg.com/@swc/types/-/types-0.1.5.tgz#043b731d4f56a79b4897a3de1af35e75d56bc63a" + integrity sha512-myfUej5naTBWnqOCc/MdVOLVjXUXtIA+NpDrDBKJtLLg2shUjBu3cZmB/85RyitKc55+lUUyl7oRfLOvkr2hsw== + "@tsconfig/node10@^1.0.7": version "1.0.9" resolved "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz" @@ -2956,6 +3061,13 @@ resolved "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz" integrity sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA== +"@types/yargs@^16.0.0": + version "16.0.9" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-16.0.9.tgz#ba506215e45f7707e6cbcaf386981155b7ab956e" + integrity sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA== + dependencies: + "@types/yargs-parser" "*" + "@types/yargs@^17.0.8": version "17.0.24" resolved "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz" @@ -5467,6 +5579,11 @@ json5@^2.2.1, json5@^2.2.2: resolved "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== +jsonc-parser@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.0.tgz#31ff3f4c2b9793f89c67212627c51c6394f88e76" + integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w== + jsonfile@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz"