diff --git a/.changeset/dull-foxes-wave.md b/.changeset/dull-foxes-wave.md new file mode 100644 index 0000000..e5ff71a --- /dev/null +++ b/.changeset/dull-foxes-wave.md @@ -0,0 +1,5 @@ +--- +'@driimus/sqs-permanent-failure-dlq': minor +--- + +refactor: use native iterator helpers diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index daf2144..d3d4fae 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -4,12 +4,7 @@ on: jobs: test: - strategy: - matrix: - node-version: [18, 20, 22] uses: driimus/shared-workflows/.github/workflows/test.yml@main - with: - node-version: ${{ matrix.node-version }} secrets: turbo_token: ${{ secrets.TURBO_TOKEN }} turbo_team: ${{ secrets.TURBO_TEAM }} diff --git a/.node-version b/.node-version index deed13c..b03f408 100644 --- a/.node-version +++ b/.node-version @@ -1 +1 @@ -lts/jod +lts/krypton diff --git a/eslint.config.js b/eslint.config.js index 80d7ced..bc0d4f8 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -49,6 +49,7 @@ export default tsEslint.config( 'prefer-const': ['error', { destructuring: 'all' }], 'unicorn/filename-case': ['warn', { case: 'camelCase' }], 'unicorn/no-null': 'off', + 'unicorn/no-array-callback-reference': 'off', 'unicorn/no-useless-switch-case': 'error', 'unicorn/prevent-abbreviations': 'warn', '@typescript-eslint/consistent-type-imports': 'error', diff --git a/package.json b/package.json index 332cbdd..d162d95 100644 --- a/package.json +++ b/package.json @@ -21,8 +21,8 @@ "@changesets/cli": "^2.27.1", "@eslint/js": "^9.22.0", "@faker-js/faker": "^9.6.0", - "@tsconfig/node-lts": "^22.0.1", - "@tsconfig/strictest": "^2.0.5", + "@tsconfig/node-lts": "^24.0.0", + "@tsconfig/strictest": "^2.0.8", "@types/aws-lambda": "^8.10.146", "@types/node": "^22.10.2", "@typescript-eslint/eslint-plugin": "^8.23.0", @@ -39,12 +39,12 @@ "fishery": "^2.2.2", "prettier": "^3.2.4", "turbo": "^2.0.1", - "typescript": "^5.7.3", + "typescript": "^5.9.3", "typescript-eslint": "^8.23.0", "vitest": "^3.0.0" }, - "packageManager": "pnpm@10.6.4+sha256.0a3574244b6d2bea5b5d530c0901fbc5dafa593c2e9962a421d57b839f97063f", + "packageManager": "pnpm@10.25.0+sha256.0f3726654b0b5e52e5800904de168afc3c667e2abf84bdb06d9ac1386104bd90", "engines": { - "node": ">=18.18.2" + "node": ">=24.11.0" } } diff --git a/packages/lambda-batch-processor/package.json b/packages/lambda-batch-processor/package.json index 2e52d4f..a162309 100644 --- a/packages/lambda-batch-processor/package.json +++ b/packages/lambda-batch-processor/package.json @@ -59,6 +59,6 @@ } }, "engines": { - "node": ">=18" + "node": ">=24" } } diff --git a/packages/sqs-permanent-failure-dlq/package.json b/packages/sqs-permanent-failure-dlq/package.json index 68b87d9..0237921 100644 --- a/packages/sqs-permanent-failure-dlq/package.json +++ b/packages/sqs-permanent-failure-dlq/package.json @@ -52,5 +52,8 @@ "@types/aws-lambda": { "optional": true } + }, + "engines": { + "node": ">=24" } } diff --git a/packages/sqs-permanent-failure-dlq/src/index.ts b/packages/sqs-permanent-failure-dlq/src/index.ts index ed172c4..8348bdd 100644 --- a/packages/sqs-permanent-failure-dlq/src/index.ts +++ b/packages/sqs-permanent-failure-dlq/src/index.ts @@ -13,8 +13,6 @@ import type { import type { ProcessableRecord } from '@driimus/lambda-batch-processor/types/index.js'; import type { SQSEvent, SQSRecord } from 'aws-lambda'; -import { map, take } from './iteratorHelpers.js'; - /** * SQS batch actions can only manipulate up to 10 messages. * @@ -74,10 +72,10 @@ export class PermanentFailureDLQHandler implements PermanentFailureHandler>) { + *toMessageBatch(iterator: IteratorObject>) { let chunk: ReturnType[]; while (true) { - chunk = [...map(take(iterator, MAX_BATCH_SIZE), Failure.toEntry)]; + chunk = iterator.take(MAX_BATCH_SIZE).map(Failure.toEntry).toArray(); if (chunk.length === 0) return; yield chunk; } diff --git a/packages/sqs-permanent-failure-dlq/src/iteratorHelpers.ts b/packages/sqs-permanent-failure-dlq/src/iteratorHelpers.ts deleted file mode 100644 index 4c68195..0000000 --- a/packages/sqs-permanent-failure-dlq/src/iteratorHelpers.ts +++ /dev/null @@ -1,13 +0,0 @@ -export function* take(iterator: IterableIterator, n: number) { - while (n-- > 0) { - const element = iterator.next(); - if (element.done) return; - yield element.value; - } -} - -export function* map(iterable: Iterable, mapper: (element: T) => V): IterableIterator { - for (const value of iterable) { - yield mapper(value); - } -} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e5c3a8c..963b888 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -21,11 +21,11 @@ importers: specifier: ^9.6.0 version: 9.6.0 '@tsconfig/node-lts': - specifier: ^22.0.1 - version: 22.0.1 + specifier: ^24.0.0 + version: 24.0.0 '@tsconfig/strictest': - specifier: ^2.0.5 - version: 2.0.5 + specifier: ^2.0.8 + version: 2.0.8 '@types/aws-lambda': specifier: ^8.10.146 version: 8.10.147 @@ -34,16 +34,16 @@ importers: version: 22.13.1 '@typescript-eslint/eslint-plugin': specifier: ^8.23.0 - version: 8.23.0(@typescript-eslint/parser@8.23.0(eslint@9.19.0)(typescript@5.7.3))(eslint@9.19.0)(typescript@5.7.3) + version: 8.23.0(@typescript-eslint/parser@8.23.0(eslint@9.19.0)(typescript@5.9.3))(eslint@9.19.0)(typescript@5.9.3) '@typescript-eslint/parser': specifier: ^8.23.0 - version: 8.23.0(eslint@9.19.0)(typescript@5.7.3) + version: 8.23.0(eslint@9.19.0)(typescript@5.9.3) '@vitest/coverage-v8': specifier: ^3.0.0 version: 3.0.5(vitest@3.0.5(@types/node@22.13.1)) '@vitest/eslint-plugin': specifier: ^1.1.16 - version: 1.1.25(@typescript-eslint/utils@8.23.0(eslint@9.19.0)(typescript@5.7.3))(eslint@9.19.0)(typescript@5.7.3)(vitest@3.0.5(@types/node@22.13.1)) + version: 1.1.25(@typescript-eslint/utils@8.23.0(eslint@9.19.0)(typescript@5.9.3))(eslint@9.19.0)(typescript@5.9.3)(vitest@3.0.5(@types/node@22.13.1)) eslint: specifier: ^9.19.0 version: 9.19.0 @@ -52,7 +52,7 @@ importers: version: 10.0.1(eslint@9.19.0) eslint-plugin-import-x: specifier: ^4.6.1 - version: 4.6.1(eslint@9.19.0)(typescript@5.7.3) + version: 4.6.1(eslint@9.19.0)(typescript@5.9.3) eslint-plugin-prettier: specifier: ^5.2.3 version: 5.2.3(eslint-config-prettier@10.0.1(eslint@9.19.0))(eslint@9.19.0)(prettier@3.4.2) @@ -75,11 +75,11 @@ importers: specifier: ^2.0.1 version: 2.4.0 typescript: - specifier: ^5.7.3 - version: 5.7.3 + specifier: ^5.9.3 + version: 5.9.3 typescript-eslint: specifier: ^8.23.0 - version: 8.23.0(eslint@9.19.0)(typescript@5.7.3) + version: 8.23.0(eslint@9.19.0)(typescript@5.9.3) vitest: specifier: ^3.0.0 version: 3.0.5(@types/node@22.13.1) @@ -869,11 +869,11 @@ packages: resolution: {integrity: sha512-b+zebfKCfRdgNJDknHCob3O7FpeYQN6ZG6YLExMcasDHsCXlsXCEuiPZeLnJLpwa5dvPetGlnGCiMHuLwGvFow==} engines: {node: '>=18.0.0'} - '@tsconfig/node-lts@22.0.1': - resolution: {integrity: sha512-BwlbLiYurZKrj+Pa6etSE1jXmr3VEDdgJto1jEYKcpBVwZZSWVkCPyFEFYbHdIOaFMlSTtV206DYPlT109aqug==} + '@tsconfig/node-lts@24.0.0': + resolution: {integrity: sha512-8mSTqWwCd6aQpvxSrpQlMoA9RiUZSs7bYhL5qsLXIIaN9HQaINeoydrRu/Y7/fws4bvfuyhs0BRnW9/NI8tySg==} - '@tsconfig/strictest@2.0.5': - resolution: {integrity: sha512-ec4tjL2Rr0pkZ5hww65c+EEPYwxOi4Ryv+0MtjeaSQRJyq322Q27eOQiFbuNgw2hpL4hB1/W/HBGk3VKS43osg==} + '@tsconfig/strictest@2.0.8': + resolution: {integrity: sha512-XnQ7vNz5HRN0r88GYf1J9JJjqtZPiHt2woGJOo2dYqyHGGcd6OLGqSlBB6p1j9mpzja6Oe5BoPqWmeDx6X9rLw==} '@types/aws-lambda@8.10.147': resolution: {integrity: sha512-nD0Z9fNIZcxYX5Mai2CTmFD7wX7UldCkW2ezCF8D1T5hdiLsnTWDGRpfRYntU6VjTdLQjOvyszru7I1c1oCQew==} @@ -2060,8 +2060,8 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.8.0' - typescript@5.7.3: - resolution: {integrity: sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==} + typescript@5.9.3: + resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} engines: {node: '>=14.17'} hasBin: true @@ -3269,9 +3269,9 @@ snapshots: '@smithy/util-buffer-from': 4.0.0 tslib: 2.8.1 - '@tsconfig/node-lts@22.0.1': {} + '@tsconfig/node-lts@24.0.0': {} - '@tsconfig/strictest@2.0.5': {} + '@tsconfig/strictest@2.0.8': {} '@types/aws-lambda@8.10.147': {} @@ -3295,32 +3295,32 @@ snapshots: '@types/sinonjs__fake-timers@8.1.5': {} - '@typescript-eslint/eslint-plugin@8.23.0(@typescript-eslint/parser@8.23.0(eslint@9.19.0)(typescript@5.7.3))(eslint@9.19.0)(typescript@5.7.3)': + '@typescript-eslint/eslint-plugin@8.23.0(@typescript-eslint/parser@8.23.0(eslint@9.19.0)(typescript@5.9.3))(eslint@9.19.0)(typescript@5.9.3)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.23.0(eslint@9.19.0)(typescript@5.7.3) + '@typescript-eslint/parser': 8.23.0(eslint@9.19.0)(typescript@5.9.3) '@typescript-eslint/scope-manager': 8.23.0 - '@typescript-eslint/type-utils': 8.23.0(eslint@9.19.0)(typescript@5.7.3) - '@typescript-eslint/utils': 8.23.0(eslint@9.19.0)(typescript@5.7.3) + '@typescript-eslint/type-utils': 8.23.0(eslint@9.19.0)(typescript@5.9.3) + '@typescript-eslint/utils': 8.23.0(eslint@9.19.0)(typescript@5.9.3) '@typescript-eslint/visitor-keys': 8.23.0 eslint: 9.19.0 graphemer: 1.4.0 ignore: 5.3.2 natural-compare: 1.4.0 - ts-api-utils: 2.0.1(typescript@5.7.3) - typescript: 5.7.3 + ts-api-utils: 2.0.1(typescript@5.9.3) + typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.23.0(eslint@9.19.0)(typescript@5.7.3)': + '@typescript-eslint/parser@8.23.0(eslint@9.19.0)(typescript@5.9.3)': dependencies: '@typescript-eslint/scope-manager': 8.23.0 '@typescript-eslint/types': 8.23.0 - '@typescript-eslint/typescript-estree': 8.23.0(typescript@5.7.3) + '@typescript-eslint/typescript-estree': 8.23.0(typescript@5.9.3) '@typescript-eslint/visitor-keys': 8.23.0 debug: 4.4.0 eslint: 9.19.0 - typescript: 5.7.3 + typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -3329,20 +3329,20 @@ snapshots: '@typescript-eslint/types': 8.23.0 '@typescript-eslint/visitor-keys': 8.23.0 - '@typescript-eslint/type-utils@8.23.0(eslint@9.19.0)(typescript@5.7.3)': + '@typescript-eslint/type-utils@8.23.0(eslint@9.19.0)(typescript@5.9.3)': dependencies: - '@typescript-eslint/typescript-estree': 8.23.0(typescript@5.7.3) - '@typescript-eslint/utils': 8.23.0(eslint@9.19.0)(typescript@5.7.3) + '@typescript-eslint/typescript-estree': 8.23.0(typescript@5.9.3) + '@typescript-eslint/utils': 8.23.0(eslint@9.19.0)(typescript@5.9.3) debug: 4.4.0 eslint: 9.19.0 - ts-api-utils: 2.0.1(typescript@5.7.3) - typescript: 5.7.3 + ts-api-utils: 2.0.1(typescript@5.9.3) + typescript: 5.9.3 transitivePeerDependencies: - supports-color '@typescript-eslint/types@8.23.0': {} - '@typescript-eslint/typescript-estree@8.23.0(typescript@5.7.3)': + '@typescript-eslint/typescript-estree@8.23.0(typescript@5.9.3)': dependencies: '@typescript-eslint/types': 8.23.0 '@typescript-eslint/visitor-keys': 8.23.0 @@ -3351,19 +3351,19 @@ snapshots: is-glob: 4.0.3 minimatch: 9.0.5 semver: 7.7.1 - ts-api-utils: 2.0.1(typescript@5.7.3) - typescript: 5.7.3 + ts-api-utils: 2.0.1(typescript@5.9.3) + typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.23.0(eslint@9.19.0)(typescript@5.7.3)': + '@typescript-eslint/utils@8.23.0(eslint@9.19.0)(typescript@5.9.3)': dependencies: '@eslint-community/eslint-utils': 4.4.1(eslint@9.19.0) '@typescript-eslint/scope-manager': 8.23.0 '@typescript-eslint/types': 8.23.0 - '@typescript-eslint/typescript-estree': 8.23.0(typescript@5.7.3) + '@typescript-eslint/typescript-estree': 8.23.0(typescript@5.9.3) eslint: 9.19.0 - typescript: 5.7.3 + typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -3390,12 +3390,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@vitest/eslint-plugin@1.1.25(@typescript-eslint/utils@8.23.0(eslint@9.19.0)(typescript@5.7.3))(eslint@9.19.0)(typescript@5.7.3)(vitest@3.0.5(@types/node@22.13.1))': + '@vitest/eslint-plugin@1.1.25(@typescript-eslint/utils@8.23.0(eslint@9.19.0)(typescript@5.9.3))(eslint@9.19.0)(typescript@5.9.3)(vitest@3.0.5(@types/node@22.13.1))': dependencies: - '@typescript-eslint/utils': 8.23.0(eslint@9.19.0)(typescript@5.7.3) + '@typescript-eslint/utils': 8.23.0(eslint@9.19.0)(typescript@5.9.3) eslint: 9.19.0 optionalDependencies: - typescript: 5.7.3 + typescript: 5.9.3 vitest: 3.0.5(@types/node@22.13.1) '@vitest/expect@3.0.5': @@ -3652,11 +3652,11 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-import-x@4.6.1(eslint@9.19.0)(typescript@5.7.3): + eslint-plugin-import-x@4.6.1(eslint@9.19.0)(typescript@5.9.3): dependencies: '@types/doctrine': 0.0.9 '@typescript-eslint/scope-manager': 8.23.0 - '@typescript-eslint/utils': 8.23.0(eslint@9.19.0)(typescript@5.7.3) + '@typescript-eslint/utils': 8.23.0(eslint@9.19.0)(typescript@5.9.3) debug: 4.4.0 doctrine: 3.0.0 enhanced-resolve: 5.18.1 @@ -4404,9 +4404,9 @@ snapshots: tr46@0.0.3: {} - ts-api-utils@2.0.1(typescript@5.7.3): + ts-api-utils@2.0.1(typescript@5.9.3): dependencies: - typescript: 5.7.3 + typescript: 5.9.3 tslib@2.8.1: {} @@ -4447,17 +4447,17 @@ snapshots: type-fest@4.37.0: {} - typescript-eslint@8.23.0(eslint@9.19.0)(typescript@5.7.3): + typescript-eslint@8.23.0(eslint@9.19.0)(typescript@5.9.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.23.0(@typescript-eslint/parser@8.23.0(eslint@9.19.0)(typescript@5.7.3))(eslint@9.19.0)(typescript@5.7.3) - '@typescript-eslint/parser': 8.23.0(eslint@9.19.0)(typescript@5.7.3) - '@typescript-eslint/utils': 8.23.0(eslint@9.19.0)(typescript@5.7.3) + '@typescript-eslint/eslint-plugin': 8.23.0(@typescript-eslint/parser@8.23.0(eslint@9.19.0)(typescript@5.9.3))(eslint@9.19.0)(typescript@5.9.3) + '@typescript-eslint/parser': 8.23.0(eslint@9.19.0)(typescript@5.9.3) + '@typescript-eslint/utils': 8.23.0(eslint@9.19.0)(typescript@5.9.3) eslint: 9.19.0 - typescript: 5.7.3 + typescript: 5.9.3 transitivePeerDependencies: - supports-color - typescript@5.7.3: {} + typescript@5.9.3: {} undici-types@6.20.0: {}