├── .eslintignore
├── .eslintrc.json
├── .github
├── FUNDING.yml
├── dependabot.yml
└── workflows
│ └── node.js.yml
├── .gitignore
├── .lintstagedrc
├── .npmignore
├── .nvmrc
├── .prettierrc
├── .yarnrc
├── CHANGELOG.md
├── LICENSE
├── README.md
├── package.json
├── scripts
├── fix-gitmoji-changelog-node-preset
└── fix-gitmoji-preset.patch
├── src
├── aggregations.ts
├── errors.ts
├── helpers.ts
├── index.ts
├── mappers.ts
├── merger.ts
├── parseTable.ts
├── pipelineExecutor.ts
├── settings.ts
└── types.ts
├── test
├── assets
│ ├── 1.html
│ ├── 2.html
│ └── large-table.html
├── createServer.ts
├── helpers.test.ts
├── index.test.ts
├── merger.test.ts
└── pipelineExecutor.test.ts
├── tsconfig.build.json
├── tsconfig.json
├── tsup.config.ts
└── yarn.lock
/.eslintignore:
--------------------------------------------------------------------------------
1 | /lib
2 |
--------------------------------------------------------------------------------
/.eslintrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "root": true,
3 | "parser": "@typescript-eslint/parser",
4 | "parserOptions": {
5 | "project": "./tsconfig.json",
6 | "sourceType": "module"
7 | },
8 | "plugins": [
9 | "@typescript-eslint"
10 | ],
11 | "extends": [
12 | "eslint:recommended",
13 | "plugin:@typescript-eslint/eslint-recommended",
14 | "plugin:@typescript-eslint/recommended",
15 | "prettier"
16 | ],
17 | "rules": {
18 | "@typescript-eslint/no-non-null-assertion": "off",
19 | "@typescript-eslint/interface-name-prefix": "off",
20 | "@typescript-eslint/explicit-function-return-type": "off",
21 | "@typescript-eslint/explicit-module-boundary-types": "off",
22 | "@typescript-eslint/no-explicit-any": "off",
23 | "@typescript-eslint/ban-ts-comment": "off",
24 | "@typescript-eslint/no-empty-function": "off",
25 | "no-prototype-builtins": "off"
26 | },
27 | "ignorePatterns": ["tsup.config.ts"]
28 | }
29 |
--------------------------------------------------------------------------------
/.github/FUNDING.yml:
--------------------------------------------------------------------------------
1 | # These are supported funding model platforms
2 |
3 | github: [Tomas2D]
4 |
--------------------------------------------------------------------------------
/.github/dependabot.yml:
--------------------------------------------------------------------------------
1 | version: 2
2 | updates:
3 | - package-ecosystem: "npm"
4 | directory: "/"
5 | schedule:
6 | interval: "daily"
7 | time: "00:00"
8 |
--------------------------------------------------------------------------------
/.github/workflows/node.js.yml:
--------------------------------------------------------------------------------
1 | name: CI
2 |
3 | on:
4 | push:
5 | branches: [ master ]
6 | pull_request:
7 | branches: [ master ]
8 |
9 | jobs:
10 | build:
11 | runs-on: ubuntu-latest
12 | strategy:
13 | matrix:
14 | node: [16, 18]
15 | name: Node ${{ matrix.node }}
16 | steps:
17 | - uses: actions/checkout@v3
18 | - name: Setup node
19 | uses: actions/setup-node@v3
20 | with:
21 | node-version: ${{ matrix.node }}
22 | - name: 'install:linux:dep'
23 | run: sudo apt-get install -y libgbm-dev
24 | - name: 'yarn:install'
25 | run: yarn install --frozen-lockfile
26 | env:
27 | CI: true
28 | - name: build
29 | run: yarn build
30 | - name: test
31 | run: yarn test
32 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | dist/
2 | node_modules/
3 | *.log
4 | .idea/
5 |
--------------------------------------------------------------------------------
/.lintstagedrc:
--------------------------------------------------------------------------------
1 | {
2 | "(src|test)/**/*.(ts|tsx)": "yarn lint",
3 | "(src|test)/**/*.(ts|tsx)": "yarn prettier"
4 | }
5 |
--------------------------------------------------------------------------------
/.npmignore:
--------------------------------------------------------------------------------
1 | /src
2 | /test
3 | /scripts
4 | .idea/
5 |
--------------------------------------------------------------------------------
/.nvmrc:
--------------------------------------------------------------------------------
1 | 16.17.1
2 |
--------------------------------------------------------------------------------
/.prettierrc:
--------------------------------------------------------------------------------
1 | {
2 | "singleQuote": true,
3 | "trailingComma": "all",
4 | "printWidth": 100,
5 | "quoteProps": "consistent"
6 | }
7 |
--------------------------------------------------------------------------------
/.yarnrc:
--------------------------------------------------------------------------------
1 | version-git-message "🔖 Version %s"
2 |
--------------------------------------------------------------------------------
/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | # Changelog
2 |
3 |
4 | ## 2.2.0 (2024-04-05)
5 |
6 | ### Added
7 |
8 | - ✨ Performance, add custom cell selectors support [[80a8836](https://github.com/Tomas2D/puppeteer-table-parser/commit/80a8836f7aae3be2ff5bc02be1a7f5a4fe4087cc)]
9 | - 👷 add type check to do the build script [[681b7b9](https://github.com/Tomas2D/puppeteer-table-parser/commit/681b7b99c1a36463094275c80d1adf4f43fb9422)]
10 |
11 | ### Miscellaneous
12 |
13 | - Merge pull request [#354](https://github.com/Tomas2D/puppeteer-table-parser/issues/354) from Tomas2D/dependabot/npm_and_yarn/express-4.19.2 [[408583b](https://github.com/Tomas2D/puppeteer-table-parser/commit/408583b91f850d4b5acd8560e216f761abb7278e)]
14 | - Bump express from 4.19.1 to 4.19.2 [[43d347b](https://github.com/Tomas2D/puppeteer-table-parser/commit/43d347be35864a380b64a9671192130e66f948cd)]
15 | - Merge pull request [#350](https://github.com/Tomas2D/puppeteer-table-parser/issues/350) from Tomas2D/dependabot/npm_and_yarn/express-4.19.1 [[40d26f6](https://github.com/Tomas2D/puppeteer-table-parser/commit/40d26f6fcc769b4336abafd8f2e273153aa11348)]
16 | - Merge pull request [#351](https://github.com/Tomas2D/puppeteer-table-parser/issues/351) from Tomas2D/dependabot/npm_and_yarn/typescript-5.4.3 [[a646da1](https://github.com/Tomas2D/puppeteer-table-parser/commit/a646da1f2b3d8df9607f838d8c58298e54342147)]
17 | - Bump typescript from 5.4.2 to 5.4.3 [[9e0f87a](https://github.com/Tomas2D/puppeteer-table-parser/commit/9e0f87ae016e57689dcee0b529481ad466055b8a)]
18 | - Bump express from 4.18.3 to 4.19.1 [[3bdbf2d](https://github.com/Tomas2D/puppeteer-table-parser/commit/3bdbf2d890677d39527aea5a62173c2a47eb6bf2)]
19 |
20 |
21 |
22 | ## 2.1.3 (2024-03-08)
23 |
24 | ### Miscellaneous
25 |
26 | - Merge pull request [#347](https://github.com/Tomas2D/puppeteer-table-parser/issues/347) from Tomas2D/dependabot/npm_and_yarn/typescript-5.4.2 [[b48a771](https://github.com/Tomas2D/puppeteer-table-parser/commit/b48a771de44cf091979335c5b22d768ad84022fb)]
27 | - Bump typescript from 5.3.3 to 5.4.2 [[ad259ee](https://github.com/Tomas2D/puppeteer-table-parser/commit/ad259eed4e50d620bc098d9f6045ef174d4fcc42)]
28 | - Merge pull request [#345](https://github.com/Tomas2D/puppeteer-table-parser/issues/345) from Tomas2D/dependabot/npm_and_yarn/express-4.18.3 [[5a92ed9](https://github.com/Tomas2D/puppeteer-table-parser/commit/5a92ed90dcd38ba0ace4b38222e01f65be825993)]
29 | - Bump express from 4.18.2 to 4.18.3 [[30442dc](https://github.com/Tomas2D/puppeteer-table-parser/commit/30442dc5c6718dfdd45cf409c598266896b3136e)]
30 | - Merge pull request [#343](https://github.com/Tomas2D/puppeteer-table-parser/issues/343) from Tomas2D/dependabot/npm_and_yarn/eslint-8.57.0 [[d121ecf](https://github.com/Tomas2D/puppeteer-table-parser/commit/d121ecf98b0dec7a1b4215be7bada4614ce3f40a)]
31 | - Bump eslint from 8.56.0 to 8.57.0 [[04ac646](https://github.com/Tomas2D/puppeteer-table-parser/commit/04ac64623a124033a9f0aa8d219057eff9e5b9bb)]
32 | - Merge pull request [#341](https://github.com/Tomas2D/puppeteer-table-parser/issues/341) from Tomas2D/dependabot/npm_and_yarn/ip-1.1.9 [[8a82818](https://github.com/Tomas2D/puppeteer-table-parser/commit/8a82818fbdc52cbab25dff8ac0a21d5a1268bea0)]
33 | - Bump ip from 1.1.8 to 1.1.9 [[339c98a](https://github.com/Tomas2D/puppeteer-table-parser/commit/339c98ac89e248ec7442c6150a54d4a289fa05b7)]
34 | - Merge pull request [#335](https://github.com/Tomas2D/puppeteer-table-parser/issues/335) from Tomas2D/dependabot/npm_and_yarn/puppeteer-21.11.0 [[82bc0d9](https://github.com/Tomas2D/puppeteer-table-parser/commit/82bc0d92f71690896717ddd549b5007c8e67e9cd)]
35 | - Merge pull request [#336](https://github.com/Tomas2D/puppeteer-table-parser/issues/336) from Tomas2D/dependabot/npm_and_yarn/prettier-3.2.5 [[d285acc](https://github.com/Tomas2D/puppeteer-table-parser/commit/d285accd24ed9ee4dc6ed1e1b296b0bdcb67c197)]
36 | - Bump prettier from 3.2.4 to 3.2.5 [[7c954c8](https://github.com/Tomas2D/puppeteer-table-parser/commit/7c954c8a6ba48df7847933cfe6ce3446373de717)]
37 | - Bump puppeteer from 21.9.0 to 21.11.0 [[f3894eb](https://github.com/Tomas2D/puppeteer-table-parser/commit/f3894ebd6005736c661d302a45daa66df2abe418)]
38 | - Merge pull request [#333](https://github.com/Tomas2D/puppeteer-table-parser/issues/333) from Tomas2D/dependabot/npm_and_yarn/types/jest-29.5.12 [[854d00c](https://github.com/Tomas2D/puppeteer-table-parser/commit/854d00c4e147613db26d321a834d219b6384a972)]
39 | - Bump @types/jest from 29.5.11 to 29.5.12 [[66cd716](https://github.com/Tomas2D/puppeteer-table-parser/commit/66cd7162cb91e501441d7dc92df1a5660bc35b04)]
40 | - Merge pull request [#329](https://github.com/Tomas2D/puppeteer-table-parser/issues/329) from Tomas2D/dependabot/npm_and_yarn/puppeteer-21.9.0 [[95e7572](https://github.com/Tomas2D/puppeteer-table-parser/commit/95e75724957dff3059d678f9c39279ed62dedbbb)]
41 | - Bump puppeteer from 21.7.0 to 21.9.0 [[ac8379a](https://github.com/Tomas2D/puppeteer-table-parser/commit/ac8379ade456a81527c614363b247a15aa4e6b18)]
42 | - Merge pull request [#328](https://github.com/Tomas2D/puppeteer-table-parser/issues/328) from Tomas2D/dependabot/npm_and_yarn/ts-jest-29.1.2 [[1eec437](https://github.com/Tomas2D/puppeteer-table-parser/commit/1eec4376d92d200e4e5141ecd017772bd224777d)]
43 | - Bump ts-jest from 29.1.1 to 29.1.2 [[94fb37e](https://github.com/Tomas2D/puppeteer-table-parser/commit/94fb37e6cb1c9e908452bef789424fa6838bd5c8)]
44 | - Merge pull request [#327](https://github.com/Tomas2D/puppeteer-table-parser/issues/327) from Tomas2D/dependabot/npm_and_yarn/prettier-3.2.4 [[d5b31c8](https://github.com/Tomas2D/puppeteer-table-parser/commit/d5b31c87ba56fe45cb6ea47154c38aff9e829f01)]
45 | - Bump prettier from 3.2.2 to 3.2.4 [[be677df](https://github.com/Tomas2D/puppeteer-table-parser/commit/be677df8895f294f4db734e3cdcf5a255f89ca61)]
46 | - Merge pull request [#326](https://github.com/Tomas2D/puppeteer-table-parser/issues/326) from Tomas2D/dependabot/npm_and_yarn/prettier-3.2.2 [[1d51b61](https://github.com/Tomas2D/puppeteer-table-parser/commit/1d51b612c4a0810b4d7a6fac7bacaf9c05bb4381)]
47 | - Bump prettier from 3.1.1 to 3.2.2 [[e0b5152](https://github.com/Tomas2D/puppeteer-table-parser/commit/e0b51529838b46d869360456f0a23ff6b0dff9b2)]
48 | - Merge pull request [#325](https://github.com/Tomas2D/puppeteer-table-parser/issues/325) from Tomas2D/dependabot/npm_and_yarn/puppeteer-21.7.0 [[ba2cda2](https://github.com/Tomas2D/puppeteer-table-parser/commit/ba2cda2f4b83e048d2620876fe355ce72abffef7)]
49 | - Bump puppeteer from 21.6.1 to 21.7.0 [[c55c3ff](https://github.com/Tomas2D/puppeteer-table-parser/commit/c55c3ff14ea42730e83d49ed9de3089e8b79eefa)]
50 | - Merge pull request [#324](https://github.com/Tomas2D/puppeteer-table-parser/issues/324) from Tomas2D/dependabot/npm_and_yarn/eslint-8.56.0 [[0d059cb](https://github.com/Tomas2D/puppeteer-table-parser/commit/0d059cb2a6cb567ebdcfb03223df276505b1ff48)]
51 | - Bump eslint from 8.55.0 to 8.56.0 [[c0595ce](https://github.com/Tomas2D/puppeteer-table-parser/commit/c0595ce693a4ce68efce41426e1019a9e54b2f40)]
52 | - Merge pull request [#323](https://github.com/Tomas2D/puppeteer-table-parser/issues/323) from Tomas2D/dependabot/npm_and_yarn/puppeteer-21.6.1 [[ff1b441](https://github.com/Tomas2D/puppeteer-table-parser/commit/ff1b44138256b1fab43aac889784ff31f68de4d3)]
53 | - Bump puppeteer from 21.6.0 to 21.6.1 [[c315153](https://github.com/Tomas2D/puppeteer-table-parser/commit/c315153bbf49646b69ecf9f9bca3d5e265305e49)]
54 | - Merge pull request [#322](https://github.com/Tomas2D/puppeteer-table-parser/issues/322) from Tomas2D/dependabot/npm_and_yarn/prettier-3.1.1 [[4b68432](https://github.com/Tomas2D/puppeteer-table-parser/commit/4b6843288d4470a779dafe754c5ae9f5839af372)]
55 | - Bump prettier from 3.1.0 to 3.1.1 [[0c7b38e](https://github.com/Tomas2D/puppeteer-table-parser/commit/0c7b38e88ac6abfbaf489611fa20bf8ee1c75c42)]
56 | - Merge pull request [#320](https://github.com/Tomas2D/puppeteer-table-parser/issues/320) from Tomas2D/dependabot/npm_and_yarn/puppeteer-21.6.0 [[7545100](https://github.com/Tomas2D/puppeteer-table-parser/commit/7545100b8b29238e977497c4d8acde938c7ff9e1)]
57 | - Merge pull request [#319](https://github.com/Tomas2D/puppeteer-table-parser/issues/319) from Tomas2D/dependabot/npm_and_yarn/typescript-5.3.3 [[0656d98](https://github.com/Tomas2D/puppeteer-table-parser/commit/0656d9885567c89435b2ab2bb72192284017aa34)]
58 | - Merge pull request [#321](https://github.com/Tomas2D/puppeteer-table-parser/issues/321) from Tomas2D/dependabot/npm_and_yarn/types/jest-29.5.11 [[ee59448](https://github.com/Tomas2D/puppeteer-table-parser/commit/ee59448bfe04d1b6683e47c3c36b8a3aa9923a6a)]
59 | - Bump @types/jest from 29.5.10 to 29.5.11 [[cb20be2](https://github.com/Tomas2D/puppeteer-table-parser/commit/cb20be28e788abe14f5c7d053ed579611079a839)]
60 | - Bump puppeteer from 21.5.2 to 21.6.0 [[dafc8e3](https://github.com/Tomas2D/puppeteer-table-parser/commit/dafc8e34f73153f590044ddc9b6d5fd563b846eb)]
61 | - Bump typescript from 5.3.2 to 5.3.3 [[49345ce](https://github.com/Tomas2D/puppeteer-table-parser/commit/49345ce74abb16863d39b1d73d3fe6f7e5b4efd0)]
62 | - Merge pull request [#317](https://github.com/Tomas2D/puppeteer-table-parser/issues/317) from Tomas2D/dependabot/npm_and_yarn/eslint-8.55.0 [[0a9ac45](https://github.com/Tomas2D/puppeteer-table-parser/commit/0a9ac4548b250cbb4496fdd06d90c410168f71b2)]
63 | - Merge pull request [#318](https://github.com/Tomas2D/puppeteer-table-parser/issues/318) from Tomas2D/dependabot/npm_and_yarn/eslint-config-prettier-9.1.0 [[1983eee](https://github.com/Tomas2D/puppeteer-table-parser/commit/1983eee3db6a8757d0d79adbc24e3b64bce00a0f)]
64 | - Bump eslint from 8.54.0 to 8.55.0 [[438d942](https://github.com/Tomas2D/puppeteer-table-parser/commit/438d942ead440df606381e3231db6f4d74ac66be)]
65 | - Bump eslint-config-prettier from 9.0.0 to 9.1.0 [[2f186f2](https://github.com/Tomas2D/puppeteer-table-parser/commit/2f186f2d7d7cfb0d6047ab24a425f768433b557e)]
66 | - Merge pull request [#312](https://github.com/Tomas2D/puppeteer-table-parser/issues/312) from Tomas2D/dependabot/npm_and_yarn/eslint-8.54.0 [[32c2615](https://github.com/Tomas2D/puppeteer-table-parser/commit/32c2615caf97c2482e5e238b5d5a4334c477cce9)]
67 | - Merge pull request [#316](https://github.com/Tomas2D/puppeteer-table-parser/issues/316) from Tomas2D/dependabot/npm_and_yarn/types/jest-29.5.10 [[d311700](https://github.com/Tomas2D/puppeteer-table-parser/commit/d3117002a03ce55ef364dcb8edf662be48eb2f9e)]
68 | - Bump @types/jest from 29.5.9 to 29.5.10 [[5e6f9cb](https://github.com/Tomas2D/puppeteer-table-parser/commit/5e6f9cbeb4d8dae9dbfd3ebcc180094c3975195f)]
69 | - Merge pull request [#315](https://github.com/Tomas2D/puppeteer-table-parser/issues/315) from Tomas2D/dependabot/npm_and_yarn/types/jest-29.5.9 [[0290623](https://github.com/Tomas2D/puppeteer-table-parser/commit/029062371ec5c66ed8f177fee0d228583969c7af)]
70 | - Bump @types/jest from 29.5.8 to 29.5.9 [[92465ad](https://github.com/Tomas2D/puppeteer-table-parser/commit/92465ad197eb0c6decc60183993f5758ee999185)]
71 | - Merge pull request [#313](https://github.com/Tomas2D/puppeteer-table-parser/issues/313) from Tomas2D/dependabot/npm_and_yarn/typescript-5.3.2 [[bac0e92](https://github.com/Tomas2D/puppeteer-table-parser/commit/bac0e924cca02e33b75c173ee8bc2348f1eb9b4e)]
72 | - Bump typescript from 5.2.2 to 5.3.2 [[dda89c8](https://github.com/Tomas2D/puppeteer-table-parser/commit/dda89c859e024006f19e46eff2dfd8f68c4c82e6)]
73 | - Bump eslint from 8.53.0 to 8.54.0 [[cdf0ff0](https://github.com/Tomas2D/puppeteer-table-parser/commit/cdf0ff0aaf6ff460c8d1eab82c95abbc7879e16a)]
74 | - Merge pull request [#308](https://github.com/Tomas2D/puppeteer-table-parser/issues/308) from Tomas2D/dependabot/npm_and_yarn/prettier-3.1.0 [[727e13d](https://github.com/Tomas2D/puppeteer-table-parser/commit/727e13db15b7a58e7ba54281ea30ea4e447fec02)]
75 | - Merge pull request [#309](https://github.com/Tomas2D/puppeteer-table-parser/issues/309) from Tomas2D/dependabot/npm_and_yarn/puppeteer-21.5.2 [[48c5b8e](https://github.com/Tomas2D/puppeteer-table-parser/commit/48c5b8ee172c98095938e6c9348e9e5d46a4e3cc)]
76 | - Bump puppeteer from 21.5.1 to 21.5.2 [[0874a66](https://github.com/Tomas2D/puppeteer-table-parser/commit/0874a669c9e132add994eda2f53aec75a81a1477)]
77 | - Bump prettier from 3.0.3 to 3.1.0 [[bf59567](https://github.com/Tomas2D/puppeteer-table-parser/commit/bf595672ec2eaacde0e84e7ed91058f22a52aa89)]
78 | - Merge pull request [#303](https://github.com/Tomas2D/puppeteer-table-parser/issues/303) from Tomas2D/dependabot/npm_and_yarn/types/jest-29.5.8 [[fb0771b](https://github.com/Tomas2D/puppeteer-table-parser/commit/fb0771b6f8c8f335b683cc513b0621ec80323167)]
79 | - Merge pull request [#304](https://github.com/Tomas2D/puppeteer-table-parser/issues/304) from Tomas2D/dependabot/npm_and_yarn/types/express-4.17.21 [[e335387](https://github.com/Tomas2D/puppeteer-table-parser/commit/e335387062235233b8d9688069b44f775ed362cd)]
80 | - Bump @types/express from 4.17.20 to 4.17.21 [[f125a84](https://github.com/Tomas2D/puppeteer-table-parser/commit/f125a84dd1a190e42c51f67b7084e26f4f99e86c)]
81 | - Bump @types/jest from 29.5.7 to 29.5.8 [[8e526bd](https://github.com/Tomas2D/puppeteer-table-parser/commit/8e526bd3346c847336f7a9f3c7bee6676ef4dd7b)]
82 | - Merge pull request [#307](https://github.com/Tomas2D/puppeteer-table-parser/issues/307) from Tomas2D/dependabot/npm_and_yarn/puppeteer-21.5.1 [[ec1b992](https://github.com/Tomas2D/puppeteer-table-parser/commit/ec1b992711ef2c3c5112ae87177e9f149f758a66)]
83 | - Bump puppeteer from 21.5.0 to 21.5.1 [[9495e70](https://github.com/Tomas2D/puppeteer-table-parser/commit/9495e7083eb8612a80f459a7cbd5a6f78fa442af)]
84 | - Merge pull request [#305](https://github.com/Tomas2D/puppeteer-table-parser/issues/305) from Tomas2D/revert-298-dependabot/npm_and_yarn/lint-staged-15.0.1 [[2e214fc](https://github.com/Tomas2D/puppeteer-table-parser/commit/2e214fcd3dbbe41f7b7abcfec0d67ce1805cae9a)]
85 | - Revert "Bump lint-staged from 14.0.1 to 15.0.1" [[5953ef4](https://github.com/Tomas2D/puppeteer-table-parser/commit/5953ef4a1cd73d3ebdf6b72ed94813b789fa9372)]
86 | - Merge pull request [#301](https://github.com/Tomas2D/puppeteer-table-parser/issues/301) from Tomas2D/dependabot/npm_and_yarn/puppeteer-21.5.0 [[2707e2f](https://github.com/Tomas2D/puppeteer-table-parser/commit/2707e2f0f2f37fce782cce0b317b8ba8aa99e6ac)]
87 | - Merge pull request [#302](https://github.com/Tomas2D/puppeteer-table-parser/issues/302) from Tomas2D/dependabot/npm_and_yarn/eslint-8.53.0 [[bda263c](https://github.com/Tomas2D/puppeteer-table-parser/commit/bda263c75b2605dd8487754ad0b65b5e7658e2b5)]
88 | - Bump eslint from 8.52.0 to 8.53.0 [[3ccd6ef](https://github.com/Tomas2D/puppeteer-table-parser/commit/3ccd6ef82c5dd454328875b9d38ce90bf4a17321)]
89 | - Bump puppeteer from 21.4.1 to 21.5.0 [[b2f6284](https://github.com/Tomas2D/puppeteer-table-parser/commit/b2f62845c51947ea4c3abd82d3994a48fab74b98)]
90 | - Merge pull request [#300](https://github.com/Tomas2D/puppeteer-table-parser/issues/300) from Tomas2D/dependabot/npm_and_yarn/types/jest-29.5.7 [[cce1a34](https://github.com/Tomas2D/puppeteer-table-parser/commit/cce1a341acf0d89d67844e120de8c2ef13e4736e)]
91 | - Bump @types/jest from 29.5.6 to 29.5.7 [[c8f870a](https://github.com/Tomas2D/puppeteer-table-parser/commit/c8f870a4cb30037716797b4b6da04625783fc430)]
92 | - Merge pull request [#298](https://github.com/Tomas2D/puppeteer-table-parser/issues/298) from Tomas2D/dependabot/npm_and_yarn/lint-staged-15.0.1 [[baa6c4c](https://github.com/Tomas2D/puppeteer-table-parser/commit/baa6c4cd72ead6a9d488293c76c56c76aa042e13)]
93 | - Merge pull request [#299](https://github.com/Tomas2D/puppeteer-table-parser/issues/299) from Tomas2D/dependabot/npm_and_yarn/puppeteer-21.4.1 [[351041a](https://github.com/Tomas2D/puppeteer-table-parser/commit/351041a53336a5a5e8fda788117bd178743e9030)]
94 | - Bump puppeteer from 21.4.0 to 21.4.1 [[97cc72f](https://github.com/Tomas2D/puppeteer-table-parser/commit/97cc72f76c3624e62c33089f765b5d09c256a812)]
95 | - Bump lint-staged from 14.0.1 to 15.0.1 [[a1a3a93](https://github.com/Tomas2D/puppeteer-table-parser/commit/a1a3a93651ddc2acfaf9d25cd986f2dd05a19817)]
96 | - Merge pull request [#297](https://github.com/Tomas2D/puppeteer-table-parser/issues/297) from Tomas2D/revert-289-dependabot/npm_and_yarn/lint-staged-15.0.1 [[d976be9](https://github.com/Tomas2D/puppeteer-table-parser/commit/d976be9fe15cfa30a557f54ad4d399ead96fffa3)]
97 | - Revert "Bump lint-staged from 14.0.1 to 15.0.1" [[82ae0ae](https://github.com/Tomas2D/puppeteer-table-parser/commit/82ae0ae58f872c874277bf38f610fac73066002a)]
98 | - Merge pull request [#296](https://github.com/Tomas2D/puppeteer-table-parser/issues/296) from Tomas2D/revert-293-dependabot/npm_and_yarn/lint-staged-15.0.2 [[109a337](https://github.com/Tomas2D/puppeteer-table-parser/commit/109a33794a41872dd08703c4a5d4dea28307857c)]
99 | - Revert "Bump lint-staged from 15.0.1 to 15.0.2" [[8122af3](https://github.com/Tomas2D/puppeteer-table-parser/commit/8122af3e4127c57cf46265710775bb36dd1eb8c5)]
100 | - Merge pull request [#294](https://github.com/Tomas2D/puppeteer-table-parser/issues/294) from Tomas2D/dependabot/npm_and_yarn/puppeteer-21.4.0 [[09767d0](https://github.com/Tomas2D/puppeteer-table-parser/commit/09767d0c98c4af8ff9e24dfa237947e8bc33e961)]
101 | - Merge pull request [#295](https://github.com/Tomas2D/puppeteer-table-parser/issues/295) from Tomas2D/dependabot/npm_and_yarn/eslint-8.52.0 [[114dea4](https://github.com/Tomas2D/puppeteer-table-parser/commit/114dea4f566ee38eb80c7b18f34d9c0b186c9d37)]
102 | - Bump eslint from 8.51.0 to 8.52.0 [[cd0fe7a](https://github.com/Tomas2D/puppeteer-table-parser/commit/cd0fe7a945d7b118e6e31c34fdcf1238fdba3a5b)]
103 | - Bump puppeteer from 21.3.8 to 21.4.0 [[a7d61a3](https://github.com/Tomas2D/puppeteer-table-parser/commit/a7d61a39eff202f0add387ecbe39126c439e9104)]
104 | - Merge pull request [#293](https://github.com/Tomas2D/puppeteer-table-parser/issues/293) from Tomas2D/dependabot/npm_and_yarn/lint-staged-15.0.2 [[aeab4de](https://github.com/Tomas2D/puppeteer-table-parser/commit/aeab4de7581a9e023d87f5a32e2c6bcffb4ef2e7)]
105 | - Bump lint-staged from 15.0.1 to 15.0.2 [[7f87938](https://github.com/Tomas2D/puppeteer-table-parser/commit/7f879384a14868a41d7806bdeffe37c0f419b61c)]
106 | - Merge pull request [#290](https://github.com/Tomas2D/puppeteer-table-parser/issues/290) from Tomas2D/dependabot/npm_and_yarn/types/jest-29.5.6 [[4012ea3](https://github.com/Tomas2D/puppeteer-table-parser/commit/4012ea3749d2593736a9a034e448052e233c170a)]
107 | - Merge pull request [#292](https://github.com/Tomas2D/puppeteer-table-parser/issues/292) from Tomas2D/dependabot/npm_and_yarn/babel/traverse-7.23.2 [[93b4015](https://github.com/Tomas2D/puppeteer-table-parser/commit/93b40154c381f1bf3915a6c38c57d515cf0e163b)]
108 | - Merge pull request [#291](https://github.com/Tomas2D/puppeteer-table-parser/issues/291) from Tomas2D/dependabot/npm_and_yarn/types/express-4.17.20 [[87aaba9](https://github.com/Tomas2D/puppeteer-table-parser/commit/87aaba9bc6f0fa6870c1d7651ffc3f85a8acc586)]
109 | - Bump @babel/traverse from 7.22.4 to 7.23.2 [[b8c5ab7](https://github.com/Tomas2D/puppeteer-table-parser/commit/b8c5ab743a69ee88a943cdd4d8679b71ec09a8a2)]
110 | - Bump @types/express from 4.17.19 to 4.17.20 [[441a4de](https://github.com/Tomas2D/puppeteer-table-parser/commit/441a4de8d0a5bc2cbf41c16aed49868e40d7250c)]
111 | - Bump @types/jest from 29.5.5 to 29.5.6 [[9e81ce0](https://github.com/Tomas2D/puppeteer-table-parser/commit/9e81ce0237ef33680e06b2a7dcc596ea0179c9e6)]
112 | - Merge pull request [#289](https://github.com/Tomas2D/puppeteer-table-parser/issues/289) from Tomas2D/dependabot/npm_and_yarn/lint-staged-15.0.1 [[89c2dc2](https://github.com/Tomas2D/puppeteer-table-parser/commit/89c2dc2649d0bf95440be1c71b98d5e054756df7)]
113 | - Bump lint-staged from 14.0.1 to 15.0.1 [[13414b3](https://github.com/Tomas2D/puppeteer-table-parser/commit/13414b32ba9d72fe015072dfad40fca4b91d9b4b)]
114 | - Merge pull request [#288](https://github.com/Tomas2D/puppeteer-table-parser/issues/288) from Tomas2D/dependabot/npm_and_yarn/types/express-4.17.19 [[f431676](https://github.com/Tomas2D/puppeteer-table-parser/commit/f43167681c0162a4cbaabdbecf707532b0eb892d)]
115 | - Bump @types/express from 4.17.18 to 4.17.19 [[45943b3](https://github.com/Tomas2D/puppeteer-table-parser/commit/45943b3152e8fababba2756f0c35d5158f11c97c)]
116 | - Merge pull request [#286](https://github.com/Tomas2D/puppeteer-table-parser/issues/286) from Tomas2D/dependabot/npm_and_yarn/puppeteer-21.3.8 [[a719f7a](https://github.com/Tomas2D/puppeteer-table-parser/commit/a719f7a03332303d4e85bc3af520e59dd835f615)]
117 | - Merge pull request [#287](https://github.com/Tomas2D/puppeteer-table-parser/issues/287) from Tomas2D/dependabot/npm_and_yarn/eslint-8.51.0 [[e0497ad](https://github.com/Tomas2D/puppeteer-table-parser/commit/e0497adddd643f849ee14118cc76749ad31997ff)]
118 | - Bump eslint from 8.50.0 to 8.51.0 [[dd58c93](https://github.com/Tomas2D/puppeteer-table-parser/commit/dd58c937f77c3a63f14393f892c3a6306a634f14)]
119 | - Bump puppeteer from 21.3.7 to 21.3.8 [[2660cdb](https://github.com/Tomas2D/puppeteer-table-parser/commit/2660cdb70e1cf9cfa30a0ca6879a3534552326c2)]
120 | - Merge pull request [#285](https://github.com/Tomas2D/puppeteer-table-parser/issues/285) from Tomas2D/dependabot/npm_and_yarn/puppeteer-21.3.7 [[d5c8c66](https://github.com/Tomas2D/puppeteer-table-parser/commit/d5c8c662524b32fee3fd1ae2a2260f05861def78)]
121 | - Bump puppeteer from 21.3.6 to 21.3.7 [[c2daee1](https://github.com/Tomas2D/puppeteer-table-parser/commit/c2daee13b2584234d81e99ae2f2340c40b3d2662)]
122 | - Merge pull request [#284](https://github.com/Tomas2D/puppeteer-table-parser/issues/284) from Tomas2D/dependabot/npm_and_yarn/puppeteer-21.3.6 [[40c927c](https://github.com/Tomas2D/puppeteer-table-parser/commit/40c927ced7c2f5b8164c01e57c01953c5160b5ec)]
123 | - Bump puppeteer from 21.3.5 to 21.3.6 [[a5a930e](https://github.com/Tomas2D/puppeteer-table-parser/commit/a5a930e65fd5b6b6f65e5ed31cb666dc76dfd710)]
124 | - Merge pull request [#283](https://github.com/Tomas2D/puppeteer-table-parser/issues/283) from Tomas2D/dependabot/npm_and_yarn/puppeteer-21.3.5 [[6a535ba](https://github.com/Tomas2D/puppeteer-table-parser/commit/6a535bad7cc9a2050e27139adbc424b4599389c0)]
125 | - Bump puppeteer from 21.3.4 to 21.3.5 [[9c0c15d](https://github.com/Tomas2D/puppeteer-table-parser/commit/9c0c15d4400943788d09371c00d4d00664fe80e6)]
126 | - Merge pull request [#281](https://github.com/Tomas2D/puppeteer-table-parser/issues/281) from Tomas2D/dependabot/npm_and_yarn/types/express-4.17.18 [[7ac2a7a](https://github.com/Tomas2D/puppeteer-table-parser/commit/7ac2a7ad4bdc9bde3880070b72ae74749b180499)]
127 | - Merge pull request [#280](https://github.com/Tomas2D/puppeteer-table-parser/issues/280) from Tomas2D/dependabot/npm_and_yarn/puppeteer-21.3.4 [[f0f8563](https://github.com/Tomas2D/puppeteer-table-parser/commit/f0f8563d5d3789ebea24f2cd1ccb147f04e6b9ff)]
128 | - Merge pull request [#282](https://github.com/Tomas2D/puppeteer-table-parser/issues/282) from Tomas2D/dependabot/npm_and_yarn/eslint-8.50.0 [[d06cca7](https://github.com/Tomas2D/puppeteer-table-parser/commit/d06cca759d4a2f8865e1f3e739704ace1cea3682)]
129 | - Bump eslint from 8.49.0 to 8.50.0 [[d0b3a0d](https://github.com/Tomas2D/puppeteer-table-parser/commit/d0b3a0d88b6045e8a6976b33e45e62d6c07cf93f)]
130 | - Bump @types/express from 4.17.17 to 4.17.18 [[bcda7ec](https://github.com/Tomas2D/puppeteer-table-parser/commit/bcda7ec88ae6bcb18f20f8d2cd3b6cdab180db55)]
131 | - Bump puppeteer from 21.3.1 to 21.3.4 [[cd51a68](https://github.com/Tomas2D/puppeteer-table-parser/commit/cd51a68a23008eac43e4edd1ae418d6e39748f1a)]
132 | - 📝 Create FUNDING.yml [[bc820ef](https://github.com/Tomas2D/puppeteer-table-parser/commit/bc820ef2271b0d811cf7c8f29e31d2f878675b67)]
133 |
134 |
135 |
136 | ## 2.1.2 (2023-09-23)
137 |
138 | ### Added
139 |
140 | - ✨ Improve types [[eb4f4b0](https://github.com/Tomas2D/puppeteer-table-parser/commit/eb4f4b09e84e57c9433e3154be1d504e45db43d8)]
141 | - ✅ Close browser before server [[931d270](https://github.com/Tomas2D/puppeteer-table-parser/commit/931d270e2bc3d0af1e803ffb9ee81a80dd2f1055)]
142 |
143 | ### Fixed
144 |
145 | - 💚 Remove Node 14.x from workflow [[2d97f30](https://github.com/Tomas2D/puppeteer-table-parser/commit/2d97f30b7d2f7e7f7576630899d4f775b1bc4efc)]
146 |
147 | ### Miscellaneous
148 |
149 | - Merge pull request [#278](https://github.com/Tomas2D/puppeteer-table-parser/issues/278) from Tomas2D/dependabot/npm_and_yarn/puppeteer-21.3.1 [[58baa8f](https://github.com/Tomas2D/puppeteer-table-parser/commit/58baa8f8a22bb048c1648cd5c554b9837bbdecdc)]
150 | - Bump puppeteer from 21.2.1 to 21.3.1 [[645477f](https://github.com/Tomas2D/puppeteer-table-parser/commit/645477fbb1841d5ff71524312eeb9aced134712c)]
151 | - Merge pull request [#277](https://github.com/Tomas2D/puppeteer-table-parser/issues/277) from Tomas2D/dependabot/npm_and_yarn/types/jest-29.5.5 [[ed06688](https://github.com/Tomas2D/puppeteer-table-parser/commit/ed066888ce02df6fb6612259b6c65b5d920132a9)]
152 | - Bump @types/jest from 29.5.4 to 29.5.5 [[e09aff0](https://github.com/Tomas2D/puppeteer-table-parser/commit/e09aff002038baa510bdc7b811bdff2e4b4f04e6)]
153 | - Merge pull request [#275](https://github.com/Tomas2D/puppeteer-table-parser/issues/275) from Tomas2D/dependabot/npm_and_yarn/jest-29.7.0 [[05fe777](https://github.com/Tomas2D/puppeteer-table-parser/commit/05fe7778549daae77f9e86be7e6334af18f51072)]
154 | - Merge pull request [#276](https://github.com/Tomas2D/puppeteer-table-parser/issues/276) from Tomas2D/dependabot/npm_and_yarn/puppeteer-21.2.1 [[307dfcc](https://github.com/Tomas2D/puppeteer-table-parser/commit/307dfcc22b594ededf9a2654fa31cf51c29ed178)]
155 | - Bump puppeteer from 21.1.1 to 21.2.1 [[2fd7ff0](https://github.com/Tomas2D/puppeteer-table-parser/commit/2fd7ff0a63c478c611535413bdca97d475b895ee)]
156 | - Bump jest from 29.6.4 to 29.7.0 [[e70dd94](https://github.com/Tomas2D/puppeteer-table-parser/commit/e70dd9423d0d948c765cc776ad980baf06cb17fa)]
157 | - Merge pull request [#273](https://github.com/Tomas2D/puppeteer-table-parser/issues/273) from Tomas2D/dependabot/npm_and_yarn/eslint-8.49.0 [[91455e5](https://github.com/Tomas2D/puppeteer-table-parser/commit/91455e59fb403b9a1d14548abb0565318992a771)]
158 | - Bump eslint from 8.48.0 to 8.49.0 [[2becc87](https://github.com/Tomas2D/puppeteer-table-parser/commit/2becc87835d3a59cee78b8a79a130ff9246e22be)]
159 | - Merge pull request [#272](https://github.com/Tomas2D/puppeteer-table-parser/issues/272) from Tomas2D/dependabot/npm_and_yarn/prettier-3.0.3 [[f9e2e0b](https://github.com/Tomas2D/puppeteer-table-parser/commit/f9e2e0b995e3837c71857cac9d10777dada3982f)]
160 | - Bump prettier from 3.0.2 to 3.0.3 [[ae8c6e7](https://github.com/Tomas2D/puppeteer-table-parser/commit/ae8c6e7b2f44427e9db02a5d15aa212b653ca5a9)]
161 | - Merge pull request [#271](https://github.com/Tomas2D/puppeteer-table-parser/issues/271) from Tomas2D/dependabot/npm_and_yarn/puppeteer-21.1.1 [[a7c6ad3](https://github.com/Tomas2D/puppeteer-table-parser/commit/a7c6ad3c3841b7a01342d273c66e79e692b2ef54)]
162 | - Bump puppeteer from 21.1.0 to 21.1.1 [[5e44710](https://github.com/Tomas2D/puppeteer-table-parser/commit/5e447104dd12a362cf1e5eefc5e67c32b9c0e437)]
163 | - Merge pull request [#270](https://github.com/Tomas2D/puppeteer-table-parser/issues/270) from Tomas2D/dependabot/npm_and_yarn/eslint-8.48.0 [[c12ddce](https://github.com/Tomas2D/puppeteer-table-parser/commit/c12ddce1a69b133d185e135f4503821a2d2727c6)]
164 | - Bump eslint from 8.47.0 to 8.48.0 [[7d4b99a](https://github.com/Tomas2D/puppeteer-table-parser/commit/7d4b99ab6e398f6297b0992e66cd024021a9d22d)]
165 | - Merge pull request [#268](https://github.com/Tomas2D/puppeteer-table-parser/issues/268) from Tomas2D/dependabot/npm_and_yarn/typescript-5.2.2 [[bcd7959](https://github.com/Tomas2D/puppeteer-table-parser/commit/bcd795977f634e4a067087679c558f00c287a466)]
166 | - Merge pull request [#269](https://github.com/Tomas2D/puppeteer-table-parser/issues/269) from Tomas2D/dependabot/npm_and_yarn/jest-29.6.4 [[f762b22](https://github.com/Tomas2D/puppeteer-table-parser/commit/f762b2255fb76f92098b5ad71109b93029878177)]
167 | - Bump typescript from 5.1.6 to 5.2.2 [[cf1122d](https://github.com/Tomas2D/puppeteer-table-parser/commit/cf1122d9289b0ce62a0b3548d44716366bcd51cd)]
168 | - Bump jest from 29.6.3 to 29.6.4 [[1611331](https://github.com/Tomas2D/puppeteer-table-parser/commit/16113313c9551b005f7c0f580a9b211a9368d0bb)]
169 | - Merge pull request [#267](https://github.com/Tomas2D/puppeteer-table-parser/issues/267) from Tomas2D/dependabot/npm_and_yarn/types/jest-29.5.4 [[edb1388](https://github.com/Tomas2D/puppeteer-table-parser/commit/edb1388c6b11bea1a84b51755d690c35d7692912)]
170 | - Bump @types/jest from 29.5.3 to 29.5.4 [[052c1f8](https://github.com/Tomas2D/puppeteer-table-parser/commit/052c1f81df920959ce334ebb5b51363eb949791b)]
171 | - Merge pull request [#265](https://github.com/Tomas2D/puppeteer-table-parser/issues/265) from Tomas2D/dependabot/npm_and_yarn/lint-staged-14.0.1 [[d49e21b](https://github.com/Tomas2D/puppeteer-table-parser/commit/d49e21bc7b09f1f42187d608f525ddc2dd0a7c62)]
172 | - Merge pull request [#266](https://github.com/Tomas2D/puppeteer-table-parser/issues/266) from Tomas2D/dependabot/npm_and_yarn/jest-29.6.3 [[6d93df7](https://github.com/Tomas2D/puppeteer-table-parser/commit/6d93df750c094f480f2b5b0d654b91207ed6796a)]
173 | - Bump jest from 29.6.2 to 29.6.3 [[933a4bf](https://github.com/Tomas2D/puppeteer-table-parser/commit/933a4bf2c7576fd4a2571189ddfe28310900163d)]
174 | - Bump lint-staged from 14.0.0 to 14.0.1 [[eb87e3a](https://github.com/Tomas2D/puppeteer-table-parser/commit/eb87e3af7d53a2fe80506250785b27754cd93181)]
175 | - Merge pull request [#264](https://github.com/Tomas2D/puppeteer-table-parser/issues/264) from Tomas2D/dependabot/npm_and_yarn/puppeteer-21.1.0 [[e9938a3](https://github.com/Tomas2D/puppeteer-table-parser/commit/e9938a3f348bb73330a1eda49a961c3d0b7a12f4)]
176 | - Bump puppeteer from 21.0.3 to 21.1.0 [[054ea0e](https://github.com/Tomas2D/puppeteer-table-parser/commit/054ea0eafdf674401e8391de003accf93730acec)]
177 | - Merge pull request [#263](https://github.com/Tomas2D/puppeteer-table-parser/issues/263) from Tomas2D/dependabot/npm_and_yarn/prettier-3.0.2 [[2e40f04](https://github.com/Tomas2D/puppeteer-table-parser/commit/2e40f04d5ebf56c494928e349921588f7fd699c0)]
178 | - Bump prettier from 3.0.1 to 3.0.2 [[fb1aa31](https://github.com/Tomas2D/puppeteer-table-parser/commit/fb1aa31e7c69753282097f42b440daca910a6f86)]
179 | - Merge pull request [#260](https://github.com/Tomas2D/puppeteer-table-parser/issues/260) from Tomas2D/dependabot/npm_and_yarn/lint-staged-14.0.0 [[1ba5349](https://github.com/Tomas2D/puppeteer-table-parser/commit/1ba5349d9e4b016a4701f372193743bd3aa7edfe)]
180 | - Merge pull request [#261](https://github.com/Tomas2D/puppeteer-table-parser/issues/261) from Tomas2D/dependabot/npm_and_yarn/puppeteer-21.0.3 [[dc68c14](https://github.com/Tomas2D/puppeteer-table-parser/commit/dc68c14f0eb73d5bd54c6b9e690065c2fe7d9f37)]
181 | - Merge pull request [#262](https://github.com/Tomas2D/puppeteer-table-parser/issues/262) from Tomas2D/dependabot/npm_and_yarn/eslint-8.47.0 [[57af47c](https://github.com/Tomas2D/puppeteer-table-parser/commit/57af47c60f7fccb9118a2e51a23d0326d9a2b24b)]
182 | - Bump eslint from 8.46.0 to 8.47.0 [[dd16ff8](https://github.com/Tomas2D/puppeteer-table-parser/commit/dd16ff8d2d8bd56ba9282370f7572dd57e78f3af)]
183 | - Bump puppeteer from 21.0.2 to 21.0.3 [[e45f21f](https://github.com/Tomas2D/puppeteer-table-parser/commit/e45f21f3bc2d6e28e05bba28d94421f7cda7481d)]
184 | - Bump lint-staged from 13.2.3 to 14.0.0 [[b5a3285](https://github.com/Tomas2D/puppeteer-table-parser/commit/b5a3285e9e4c645d5a36863a6487479e70fa409e)]
185 | - Merge pull request [#254](https://github.com/Tomas2D/puppeteer-table-parser/issues/254) from Tomas2D/dependabot/npm_and_yarn/tsup-7.2.0 [[fde0a2c](https://github.com/Tomas2D/puppeteer-table-parser/commit/fde0a2c02cbbe7ab1f25481db7102352b762f553)]
186 | - Merge pull request [#259](https://github.com/Tomas2D/puppeteer-table-parser/issues/259) from Tomas2D/dependabot/npm_and_yarn/puppeteer-21.0.2 [[ff6aab7](https://github.com/Tomas2D/puppeteer-table-parser/commit/ff6aab7cf60f27178fe0ebdf49eaa205b66593d3)]
187 | - Bump puppeteer from 21.0.1 to 21.0.2 [[8c2927d](https://github.com/Tomas2D/puppeteer-table-parser/commit/8c2927d5fe9f2e4bc1b193b4ef154185d9848418)]
188 | - Merge pull request [#256](https://github.com/Tomas2D/puppeteer-table-parser/issues/256) from Tomas2D/dependabot/npm_and_yarn/puppeteer-21.0.1 [[9ede9e8](https://github.com/Tomas2D/puppeteer-table-parser/commit/9ede9e8208940ec62b9da7b7d4a7884d64e7f42d)]
189 | - Bump tsup from 7.1.0 to 7.2.0 [[c755c46](https://github.com/Tomas2D/puppeteer-table-parser/commit/c755c468c82d7eaf5b9003296f47268211061f39)]
190 | - Merge pull request [#257](https://github.com/Tomas2D/puppeteer-table-parser/issues/257) from Tomas2D/dependabot/npm_and_yarn/prettier-3.0.1 [[b5b51d1](https://github.com/Tomas2D/puppeteer-table-parser/commit/b5b51d12da28fa218646058d15cf31f597799a67)]
191 | - Merge pull request [#258](https://github.com/Tomas2D/puppeteer-table-parser/issues/258) from Tomas2D/dependabot/npm_and_yarn/eslint-config-prettier-9.0.0 [[57633ff](https://github.com/Tomas2D/puppeteer-table-parser/commit/57633ff1a79f2ec5982d8df97a8d0daf0b2d613f)]
192 | - Bump puppeteer from 20.9.0 to 21.0.1 [[abe374e](https://github.com/Tomas2D/puppeteer-table-parser/commit/abe374e536fd27542a22324eddbd6572f7c40408)]
193 | - Bump prettier from 2.8.8 to 3.0.1 [[d2e34a2](https://github.com/Tomas2D/puppeteer-table-parser/commit/d2e34a25546e8d495c3ae9579d7d10166ee248bc)]
194 | - Bump eslint-config-prettier from 8.9.0 to 9.0.0 [[fdd554e](https://github.com/Tomas2D/puppeteer-table-parser/commit/fdd554eec927527116abc3bc62323268afa5d05f)]
195 | - Merge pull request [#252](https://github.com/Tomas2D/puppeteer-table-parser/issues/252) from Tomas2D/dependabot/npm_and_yarn/eslint-8.46.0 [[21dd72f](https://github.com/Tomas2D/puppeteer-table-parser/commit/21dd72f6f459593f296aac3ab1489bc23f56bff5)]
196 | - Bump eslint from 8.45.0 to 8.46.0 [[b845394](https://github.com/Tomas2D/puppeteer-table-parser/commit/b845394bfcf033432202b60a61953d62261dfdad)]
197 | - Merge pull request [#250](https://github.com/Tomas2D/puppeteer-table-parser/issues/250) from Tomas2D/dependabot/npm_and_yarn/jest-29.6.2 [[0a628b5](https://github.com/Tomas2D/puppeteer-table-parser/commit/0a628b5956f0d822c49635635ecdb5a99a1baa10)]
198 | - Merge pull request [#251](https://github.com/Tomas2D/puppeteer-table-parser/issues/251) from Tomas2D/dependabot/npm_and_yarn/eslint-config-prettier-8.9.0 [[d460c91](https://github.com/Tomas2D/puppeteer-table-parser/commit/d460c917fa00acf676975fba528067c62c114115)]
199 | - Bump eslint-config-prettier from 8.8.0 to 8.9.0 [[5e28693](https://github.com/Tomas2D/puppeteer-table-parser/commit/5e28693bbdb1890e20ca8a57acc6fb88ac35ef79)]
200 | - Bump jest from 29.6.1 to 29.6.2 [[e3bdc76](https://github.com/Tomas2D/puppeteer-table-parser/commit/e3bdc76bcd6466225bc76763c34a319848935605)]
201 | - Merge pull request [#249](https://github.com/Tomas2D/puppeteer-table-parser/issues/249) from Tomas2D/dependabot/npm_and_yarn/puppeteer-20.9.0 [[998e1d1](https://github.com/Tomas2D/puppeteer-table-parser/commit/998e1d1070575610e50f959d72c6206ef20ca153)]
202 | - Bump puppeteer from 20.8.3 to 20.9.0 [[6e94113](https://github.com/Tomas2D/puppeteer-table-parser/commit/6e94113010dca863915b65b116b909bccd3ef23a)]
203 | - Merge pull request [#248](https://github.com/Tomas2D/puppeteer-table-parser/issues/248) from Tomas2D/dependabot/npm_and_yarn/puppeteer-20.8.3 [[b0a6774](https://github.com/Tomas2D/puppeteer-table-parser/commit/b0a67742fc273f02e5c4fb9236c29642a5bd4b4f)]
204 | - Bump puppeteer from 20.8.2 to 20.8.3 [[fcc0319](https://github.com/Tomas2D/puppeteer-table-parser/commit/fcc0319478f7e3c6428e6c98caf8ab20b01bc17a)]
205 | - Merge pull request [#247](https://github.com/Tomas2D/puppeteer-table-parser/issues/247) from Tomas2D/dependabot/npm_and_yarn/eslint-8.45.0 [[3746540](https://github.com/Tomas2D/puppeteer-table-parser/commit/3746540d69b2f3e0f25a86b900604c29d671e2d5)]
206 | - Bump eslint from 8.44.0 to 8.45.0 [[e339988](https://github.com/Tomas2D/puppeteer-table-parser/commit/e339988837ca2d671036e993a1f475f1b23d2f48)]
207 | - Merge pull request [#246](https://github.com/Tomas2D/puppeteer-table-parser/issues/246) from Tomas2D/dependabot/npm_and_yarn/puppeteer-20.8.2 [[f3960c7](https://github.com/Tomas2D/puppeteer-table-parser/commit/f3960c74678fceb0977c5715b252a9053cafb76a)]
208 | - Bump puppeteer from 20.8.1 to 20.8.2 [[8c8206e](https://github.com/Tomas2D/puppeteer-table-parser/commit/8c8206ea85a4775a0e34d944a40d5a9dd1e1214d)]
209 | - Merge pull request [#242](https://github.com/Tomas2D/puppeteer-table-parser/issues/242) from Tomas2D/dependabot/npm_and_yarn/types/jest-29.5.3 [[95adebf](https://github.com/Tomas2D/puppeteer-table-parser/commit/95adebf99e7ae647db7b9b8a03ea59c94a985d28)]
210 | - Merge pull request [#241](https://github.com/Tomas2D/puppeteer-table-parser/issues/241) from Tomas2D/dependabot/npm_and_yarn/typescript-eslint/eslint-plugin-5.62.0 [[0236316](https://github.com/Tomas2D/puppeteer-table-parser/commit/02363166b502ef8dcaaa31baec74dd0fe0a0050f)]
211 | - Merge pull request [#245](https://github.com/Tomas2D/puppeteer-table-parser/issues/245) from Tomas2D/dependabot/npm_and_yarn/puppeteer-20.8.1 [[775fcf3](https://github.com/Tomas2D/puppeteer-table-parser/commit/775fcf379e8911aa0bd54a8dc9bb689ae4be29da)]
212 | - Bump puppeteer from 20.8.0 to 20.8.1 [[c158da0](https://github.com/Tomas2D/puppeteer-table-parser/commit/c158da038066a78aa8dc3fcd9f725f8ba479bdce)]
213 | - Merge pull request [#243](https://github.com/Tomas2D/puppeteer-table-parser/issues/243) from Tomas2D/dependabot/npm_and_yarn/typescript-eslint/parser-5.62.0 [[2d7d215](https://github.com/Tomas2D/puppeteer-table-parser/commit/2d7d215af108f01329f2ba569b5055116bfcd0b0)]
214 | - Merge pull request [#244](https://github.com/Tomas2D/puppeteer-table-parser/issues/244) from Tomas2D/dependabot/npm_and_yarn/semver-6.3.1 [[a7e0a18](https://github.com/Tomas2D/puppeteer-table-parser/commit/a7e0a1822c5056d1035b4d04937095d712fd263b)]
215 | - Bump @typescript-eslint/eslint-plugin from 5.61.0 to 5.62.0 [[563920b](https://github.com/Tomas2D/puppeteer-table-parser/commit/563920b1b6b57abc728c0ea45376d6fadead7da5)]
216 | - Bump semver from 6.3.0 to 6.3.1 [[99174da](https://github.com/Tomas2D/puppeteer-table-parser/commit/99174da29024df5e5aef3a616103ddf9f8262a0c)]
217 | - Bump @typescript-eslint/parser from 5.61.0 to 5.62.0 [[cfc2a3e](https://github.com/Tomas2D/puppeteer-table-parser/commit/cfc2a3e844f4ed6856ac159a605be961783e3058)]
218 | - Bump @types/jest from 29.5.2 to 29.5.3 [[1745919](https://github.com/Tomas2D/puppeteer-table-parser/commit/17459196515df84a55beb44b4e911b3178601c28)]
219 | - Merge pull request [#239](https://github.com/Tomas2D/puppeteer-table-parser/issues/239) from Tomas2D/dependabot/npm_and_yarn/puppeteer-20.8.0 [[3a4af69](https://github.com/Tomas2D/puppeteer-table-parser/commit/3a4af69de22cfad82c4e7e077b486976d5c51509)]
220 | - Merge pull request [#235](https://github.com/Tomas2D/puppeteer-table-parser/issues/235) from Tomas2D/dependabot/npm_and_yarn/typescript-eslint/parser-5.61.0 [[4cc2538](https://github.com/Tomas2D/puppeteer-table-parser/commit/4cc253817c09a2fa72a091ce3bdd12e764b2723b)]
221 | - Merge pull request [#240](https://github.com/Tomas2D/puppeteer-table-parser/issues/240) from Tomas2D/dependabot/npm_and_yarn/jest-29.6.1 [[41dafb0](https://github.com/Tomas2D/puppeteer-table-parser/commit/41dafb04032f820a1dde3e2903f6cbcb456682b7)]
222 | - Bump jest from 29.6.0 to 29.6.1 [[addb342](https://github.com/Tomas2D/puppeteer-table-parser/commit/addb34292a955824889aba37e9b0b17db05490f3)]
223 | - Bump puppeteer from 20.7.4 to 20.8.0 [[71bc67f](https://github.com/Tomas2D/puppeteer-table-parser/commit/71bc67fa618ea70a4e51701044851d3d55aaae1d)]
224 | - Merge pull request [#237](https://github.com/Tomas2D/puppeteer-table-parser/issues/237) from Tomas2D/dependabot/npm_and_yarn/jest-29.6.0 [[d9db3ba](https://github.com/Tomas2D/puppeteer-table-parser/commit/d9db3bab75b37d0f76a00c5a56fe749db6f744a2)]
225 | - Bump jest from 29.5.0 to 29.6.0 [[267ea99](https://github.com/Tomas2D/puppeteer-table-parser/commit/267ea997e47a478067e76e136ab485eac65d5a2b)]
226 | - Merge pull request [#236](https://github.com/Tomas2D/puppeteer-table-parser/issues/236) from Tomas2D/dependabot/npm_and_yarn/typescript-eslint/eslint-plugin-5.61.0 [[ea9940b](https://github.com/Tomas2D/puppeteer-table-parser/commit/ea9940b8d45ca2dbdf5dd5b31eb8873ac4dd8b0d)]
227 | - Bump @typescript-eslint/parser from 5.60.1 to 5.61.0 [[94d724f](https://github.com/Tomas2D/puppeteer-table-parser/commit/94d724f8b2ff09c30b265ec5c2e9d8b0fcfa4b7d)]
228 | - Bump @typescript-eslint/eslint-plugin from 5.60.1 to 5.61.0 [[c95d6df](https://github.com/Tomas2D/puppeteer-table-parser/commit/c95d6dfd8fb1987a5049f4b687eb8f428ca0810e)]
229 | - Merge pull request [#233](https://github.com/Tomas2D/puppeteer-table-parser/issues/233) from Tomas2D/dependabot/npm_and_yarn/ts-jest-29.1.1 [[22464d6](https://github.com/Tomas2D/puppeteer-table-parser/commit/22464d6ccc486843a7d2dfcbbf5591a47bd28991)]
230 | - Merge pull request [#234](https://github.com/Tomas2D/puppeteer-table-parser/issues/234) from Tomas2D/dependabot/npm_and_yarn/eslint-8.44.0 [[9ac81d9](https://github.com/Tomas2D/puppeteer-table-parser/commit/9ac81d9e599026777b7533785f9d35d7a354b4c8)]
231 | - Bump eslint from 8.43.0 to 8.44.0 [[e5b6c45](https://github.com/Tomas2D/puppeteer-table-parser/commit/e5b6c4557ce4eb035c7ad25fd8101b5cae94ed73)]
232 | - Bump ts-jest from 29.1.0 to 29.1.1 [[9f0980e](https://github.com/Tomas2D/puppeteer-table-parser/commit/9f0980e38e36773ff5075526463726be948ea9ef)]
233 | - Merge pull request [#232](https://github.com/Tomas2D/puppeteer-table-parser/issues/232) from Tomas2D/dependabot/npm_and_yarn/puppeteer-20.7.4 [[7362a31](https://github.com/Tomas2D/puppeteer-table-parser/commit/7362a31c2201bcfbb47d04e894abf9d0d12ece20)]
234 | - Bump puppeteer from 20.7.3 to 20.7.4 [[85c6310](https://github.com/Tomas2D/puppeteer-table-parser/commit/85c6310fb3cbb51f1e782c59f3080007ed97882f)]
235 | - Merge pull request [#230](https://github.com/Tomas2D/puppeteer-table-parser/issues/230) from Tomas2D/dependabot/npm_and_yarn/typescript-5.1.6 [[1127700](https://github.com/Tomas2D/puppeteer-table-parser/commit/11277002ed4848f74b2a656dfb438d64f9365240)]
236 | - Merge pull request [#231](https://github.com/Tomas2D/puppeteer-table-parser/issues/231) from Tomas2D/dependabot/npm_and_yarn/lint-staged-13.2.3 [[b868a4a](https://github.com/Tomas2D/puppeteer-table-parser/commit/b868a4a789a9888c7d380605475334f8ab040567)]
237 | - Bump lint-staged from 13.2.2 to 13.2.3 [[fb79ca1](https://github.com/Tomas2D/puppeteer-table-parser/commit/fb79ca1b97dcccd613a6847faba0be95bf172546)]
238 | - Bump typescript from 5.1.5 to 5.1.6 [[a8705bd](https://github.com/Tomas2D/puppeteer-table-parser/commit/a8705bddaa425b8eafdbf5b739885a46640f43d7)]
239 | - Merge pull request [#226](https://github.com/Tomas2D/puppeteer-table-parser/issues/226) from Tomas2D/dependabot/npm_and_yarn/tsup-7.1.0 [[40a8226](https://github.com/Tomas2D/puppeteer-table-parser/commit/40a8226406eb152ebe2f7f1233c55cfa4a57c50b)]
240 | - Merge pull request [#227](https://github.com/Tomas2D/puppeteer-table-parser/issues/227) from Tomas2D/dependabot/npm_and_yarn/typescript-eslint/parser-5.60.1 [[272f533](https://github.com/Tomas2D/puppeteer-table-parser/commit/272f533345d7faa95541b733a71052327f75c0c8)]
241 | - Merge pull request [#228](https://github.com/Tomas2D/puppeteer-table-parser/issues/228) from Tomas2D/dependabot/npm_and_yarn/typescript-eslint/eslint-plugin-5.60.1 [[750c527](https://github.com/Tomas2D/puppeteer-table-parser/commit/750c5274299f9a8a4d36e28b0ca064e3628e022a)]
242 | - Merge pull request [#229](https://github.com/Tomas2D/puppeteer-table-parser/issues/229) from Tomas2D/dependabot/npm_and_yarn/typescript-5.1.5 [[5a4c7f4](https://github.com/Tomas2D/puppeteer-table-parser/commit/5a4c7f4ad7840ff61d15082f80c6f81330bac923)]
243 | - Bump @typescript-eslint/parser from 5.59.9 to 5.60.1 [[96d8e60](https://github.com/Tomas2D/puppeteer-table-parser/commit/96d8e602e698e63c5ce628721244ecdfd01adc69)]
244 | - Bump typescript from 5.1.3 to 5.1.5 [[b6b7eff](https://github.com/Tomas2D/puppeteer-table-parser/commit/b6b7eff8c6dd7401c2cd39c6f368cb20771508f8)]
245 | - Bump @typescript-eslint/eslint-plugin from 5.59.8 to 5.60.1 [[59da411](https://github.com/Tomas2D/puppeteer-table-parser/commit/59da4116b65e46713326570aafd2d1793535efff)]
246 | - Bump tsup from 6.7.0 to 7.1.0 [[26c4fa6](https://github.com/Tomas2D/puppeteer-table-parser/commit/26c4fa6efa63ede8a4bca38e4186d015d84938e2)]
247 | - Merge pull request [#225](https://github.com/Tomas2D/puppeteer-table-parser/issues/225) from Tomas2D/dependabot/npm_and_yarn/puppeteer-20.7.3 [[375891c](https://github.com/Tomas2D/puppeteer-table-parser/commit/375891c5bdbcb1b352717a45f70e44b23f3560d9)]
248 | - Bump puppeteer from 20.7.2 to 20.7.3 [[b803bf5](https://github.com/Tomas2D/puppeteer-table-parser/commit/b803bf5872ba27cca2041bfeade585ba1a8c58ef)]
249 | - Merge pull request [#221](https://github.com/Tomas2D/puppeteer-table-parser/issues/221) from Tomas2D/dependabot/npm_and_yarn/puppeteer-20.7.2 [[1861e6d](https://github.com/Tomas2D/puppeteer-table-parser/commit/1861e6d32e48ff187c42f160d67ea499edaa87f6)]
250 | - Merge pull request [#222](https://github.com/Tomas2D/puppeteer-table-parser/issues/222) from Tomas2D/dependabot/npm_and_yarn/eslint-8.43.0 [[780d96b](https://github.com/Tomas2D/puppeteer-table-parser/commit/780d96b1e80d56a3b97103c4346573daacde6583)]
251 | - Bump eslint from 8.42.0 to 8.43.0 [[3c6ad76](https://github.com/Tomas2D/puppeteer-table-parser/commit/3c6ad7668fffb58afadac4b827a3a0569a9a397c)]
252 | - Bump puppeteer from 20.5.0 to 20.7.2 [[7d902f4](https://github.com/Tomas2D/puppeteer-table-parser/commit/7d902f4eb2b414ae025a8f1698d1f9ac6fea7e90)]
253 | - Merge pull request [#215](https://github.com/Tomas2D/puppeteer-table-parser/issues/215) from Tomas2D/dependabot/npm_and_yarn/typescript-eslint/parser-5.59.9 [[853d773](https://github.com/Tomas2D/puppeteer-table-parser/commit/853d7730cf82e931afa5fe3caab6553a73c4d80d)]
254 | - Bump @typescript-eslint/parser from 5.59.8 to 5.59.9 [[291d254](https://github.com/Tomas2D/puppeteer-table-parser/commit/291d254827b65540705346037878901d1a123e53)]
255 |
256 |
257 |
258 | ## 2.1.1 (2023-06-04)
259 |
260 | ### Added
261 |
262 | - ✅ Update types in tests [[f5b7068](https://github.com/Tomas2D/puppeteer-table-parser/commit/f5b706893947c5a882eea9b18e953f6186037880)]
263 | - ✅ Returns only header if no rows found [[3f287f8](https://github.com/Tomas2D/puppeteer-table-parser/commit/3f287f8a8000b671436e56c6e9d86182e96bc30f)]
264 |
265 | ### Changed
266 |
267 | - ⬆️ Update dependencies [[f3c6eef](https://github.com/Tomas2D/puppeteer-table-parser/commit/f3c6eefdea5f87c1d88d178916aaae1fd9965a94)]
268 | - ⬆️ Update deps [[afd652a](https://github.com/Tomas2D/puppeteer-table-parser/commit/afd652adec4b68b55228303d94742293b26b44a7)]
269 |
270 | ### Miscellaneous
271 |
272 | - Merge pull request [#188](https://github.com/Tomas2D/puppeteer-table-parser/issues/188) from Tomas2D/dependabot/npm_and_yarn/prettier-2.8.8 [[d33d0f3](https://github.com/Tomas2D/puppeteer-table-parser/commit/d33d0f37170b21403287eccc0288d654505da50e)]
273 | - Merge pull request [#211](https://github.com/Tomas2D/puppeteer-table-parser/issues/211) from Tomas2D/dependabot/npm_and_yarn/puppeteer-20.5.0 [[9b40634](https://github.com/Tomas2D/puppeteer-table-parser/commit/9b4063469c354e2285f8aa8b1665e1eb67a2f212)]
274 | - Merge pull request [#212](https://github.com/Tomas2D/puppeteer-table-parser/issues/212) from Tomas2D/dependabot/npm_and_yarn/types/jest-29.5.2 [[c0f4d0d](https://github.com/Tomas2D/puppeteer-table-parser/commit/c0f4d0d9c7cfbc6b1c39c4e99ebf6e4f7b509175)]
275 | - Bump @types/jest from 29.5.0 to 29.5.2 [[0532e9a](https://github.com/Tomas2D/puppeteer-table-parser/commit/0532e9aebbb482df6dbba5a960004c42247c433a)]
276 | - Bump puppeteer from 19.11.0 to 20.5.0 [[98792e7](https://github.com/Tomas2D/puppeteer-table-parser/commit/98792e7ed5bc00af464005b07e4c60003158c447)]
277 | - Merge pull request [#200](https://github.com/Tomas2D/puppeteer-table-parser/issues/200) from Tomas2D/dependabot/npm_and_yarn/typescript-eslint/parser-5.59.5 [[f0b5956](https://github.com/Tomas2D/puppeteer-table-parser/commit/f0b5956bd69d0767b371ec98001c0daac2bfe9a2)]
278 | - Bump @typescript-eslint/parser from 5.59.0 to 5.59.5 [[425c2de](https://github.com/Tomas2D/puppeteer-table-parser/commit/425c2decbaa3893b3e75ccb2d7215061729d78b1)]
279 | - Merge pull request [#191](https://github.com/Tomas2D/puppeteer-table-parser/issues/191) from Tomas2D/dependabot/npm_and_yarn/puppeteer-19.11.0 [[f5cce86](https://github.com/Tomas2D/puppeteer-table-parser/commit/f5cce86dbc1ee8a28d151540028f85ee0d916582)]
280 | - Merge pull request [#192](https://github.com/Tomas2D/puppeteer-table-parser/issues/192) from Tomas2D/dependabot/npm_and_yarn/typescript-eslint/eslint-plugin-5.59.1 [[6d96e0a](https://github.com/Tomas2D/puppeteer-table-parser/commit/6d96e0af5185c77a62869074f4a26c87e496f9f6)]
281 | - Bump @typescript-eslint/eslint-plugin from 5.59.0 to 5.59.1 [[25cff75](https://github.com/Tomas2D/puppeteer-table-parser/commit/25cff75ab6ee2fdb34bf1e592d08462017282331)]
282 | - Bump puppeteer from 19.10.0 to 19.11.0 [[bb11ade](https://github.com/Tomas2D/puppeteer-table-parser/commit/bb11adea59e157a4923a881772dd28386243be29)]
283 | - Bump prettier from 2.8.7 to 2.8.8 [[7da1304](https://github.com/Tomas2D/puppeteer-table-parser/commit/7da1304ee0ed0ae28f6d6d0a2c937873e9903049)]
284 | - Merge pull request [#187](https://github.com/Tomas2D/puppeteer-table-parser/issues/187) from Tomas2D/dependabot/npm_and_yarn/puppeteer-19.10.0 [[90dee10](https://github.com/Tomas2D/puppeteer-table-parser/commit/90dee10f48d5ffb7da5228b5b86c21aeba28c64d)]
285 | - Bump puppeteer from 19.9.1 to 19.10.0 [[6e3e4de](https://github.com/Tomas2D/puppeteer-table-parser/commit/6e3e4dec05eae90748af5261a16dc4001193264c)]
286 | - Merge pull request [#184](https://github.com/Tomas2D/puppeteer-table-parser/issues/184) from Tomas2D/dependabot/npm_and_yarn/typescript-eslint/eslint-plugin-5.59.0 [[64bf4d9](https://github.com/Tomas2D/puppeteer-table-parser/commit/64bf4d98f2bf369dafa6d1c7bf9f6c89d77dba46)]
287 | - Merge pull request [#181](https://github.com/Tomas2D/puppeteer-table-parser/issues/181) from Tomas2D/dependabot/npm_and_yarn/lint-staged-13.2.1 [[aae2b49](https://github.com/Tomas2D/puppeteer-table-parser/commit/aae2b49b61182f7a313eaca22217974144b52618)]
288 | - Merge pull request [#183](https://github.com/Tomas2D/puppeteer-table-parser/issues/183) from Tomas2D/dependabot/npm_and_yarn/puppeteer-19.9.1 [[ba4e22e](https://github.com/Tomas2D/puppeteer-table-parser/commit/ba4e22e38ee9717ede67bba6606a620e97cc4fe5)]
289 | - Merge pull request [#185](https://github.com/Tomas2D/puppeteer-table-parser/issues/185) from Tomas2D/dependabot/npm_and_yarn/typescript-eslint/parser-5.59.0 [[1e01517](https://github.com/Tomas2D/puppeteer-table-parser/commit/1e01517656e0c5da698701ec15df12f4af09211d)]
290 | - Merge pull request [#178](https://github.com/Tomas2D/puppeteer-table-parser/issues/178) from Tomas2D/dependabot/npm_and_yarn/eslint-8.38.0 [[45761ca](https://github.com/Tomas2D/puppeteer-table-parser/commit/45761ca103cc1bdde3dd7d73c48c6941e614aa07)]
291 | - Bump @typescript-eslint/eslint-plugin from 5.57.0 to 5.59.0 [[f0a0977](https://github.com/Tomas2D/puppeteer-table-parser/commit/f0a0977c633d32e35048409494257655535a8fac)]
292 | - Bump @typescript-eslint/parser from 5.58.0 to 5.59.0 [[fba25d6](https://github.com/Tomas2D/puppeteer-table-parser/commit/fba25d6152886f385c4dcf7748725c996aa1ffab)]
293 | - Bump puppeteer from 19.8.5 to 19.9.1 [[54b787a](https://github.com/Tomas2D/puppeteer-table-parser/commit/54b787a9157036816823476a2fb671edf71782e8)]
294 | - Bump lint-staged from 13.2.0 to 13.2.1 [[1a5e2a1](https://github.com/Tomas2D/puppeteer-table-parser/commit/1a5e2a1364a3a02217338b93fb22a1c6f553561c)]
295 | - Bump eslint from 8.36.0 to 8.38.0 [[3321362](https://github.com/Tomas2D/puppeteer-table-parser/commit/3321362f9576b2aec1b06abac140e6274664269b)]
296 | - Merge pull request [#172](https://github.com/Tomas2D/puppeteer-table-parser/issues/172) from Tomas2D/dependabot/npm_and_yarn/ts-jest-29.1.0 [[bf468f1](https://github.com/Tomas2D/puppeteer-table-parser/commit/bf468f1277c1a81936a343cc52b30836f349aeaf)]
297 | - Merge pull request [#176](https://github.com/Tomas2D/puppeteer-table-parser/issues/176) from Tomas2D/dependabot/npm_and_yarn/puppeteer-19.8.5 [[2691c1b](https://github.com/Tomas2D/puppeteer-table-parser/commit/2691c1bf5ac22fcbd5738ad450ed7c288e528f6f)]
298 | - Merge pull request [#177](https://github.com/Tomas2D/puppeteer-table-parser/issues/177) from Tomas2D/dependabot/npm_and_yarn/typescript-5.0.4 [[5ecd311](https://github.com/Tomas2D/puppeteer-table-parser/commit/5ecd311729a63e7440c512911c065c65e2ea29d0)]
299 | - Merge pull request [#179](https://github.com/Tomas2D/puppeteer-table-parser/issues/179) from Tomas2D/dependabot/npm_and_yarn/typescript-eslint/parser-5.58.0 [[ed5ba3b](https://github.com/Tomas2D/puppeteer-table-parser/commit/ed5ba3bed3bc6a096499f04f15ac34d762844602)]
300 | - Bump typescript from 4.9.5 to 5.0.4 [[ea70080](https://github.com/Tomas2D/puppeteer-table-parser/commit/ea70080a07ad9ba87423b33e866acddec4b5b7b2)]
301 | - Bump @typescript-eslint/parser from 5.55.0 to 5.58.0 [[7499d60](https://github.com/Tomas2D/puppeteer-table-parser/commit/7499d60009bffca8affef00c617f968242ad2eaf)]
302 | - Bump puppeteer from 19.7.5 to 19.8.5 [[a8ea830](https://github.com/Tomas2D/puppeteer-table-parser/commit/a8ea8307600a1f3588a70ffca84bca6eed2aabab)]
303 | - Bump ts-jest from 29.0.5 to 29.1.0 [[28e024f](https://github.com/Tomas2D/puppeteer-table-parser/commit/28e024fde9c116d50a9b39da764ff6bc01c1ac42)]
304 | - Merge pull request [#168](https://github.com/Tomas2D/puppeteer-table-parser/issues/168) from Tomas2D/dependabot/npm_and_yarn/typescript-eslint/eslint-plugin-5.57.0 [[cfbf502](https://github.com/Tomas2D/puppeteer-table-parser/commit/cfbf502d868609b2441ede3d1a5ad2e2ab7b18a2)]
305 | - Merge pull request [#167](https://github.com/Tomas2D/puppeteer-table-parser/issues/167) from Tomas2D/dependabot/npm_and_yarn/prettier-2.8.7 [[dee32d5](https://github.com/Tomas2D/puppeteer-table-parser/commit/dee32d5b5001718042b7879e0ead07ee34b70bc5)]
306 | - Merge pull request [#162](https://github.com/Tomas2D/puppeteer-table-parser/issues/162) from Tomas2D/dependabot/npm_and_yarn/tsup-6.7.0 [[1add941](https://github.com/Tomas2D/puppeteer-table-parser/commit/1add941641d1d38d83fe36af43193b51844711eb)]
307 | - Merge pull request [#165](https://github.com/Tomas2D/puppeteer-table-parser/issues/165) from Tomas2D/dependabot/npm_and_yarn/eslint-config-prettier-8.8.0 [[1fc8dc3](https://github.com/Tomas2D/puppeteer-table-parser/commit/1fc8dc36d8f85d73898698f5b07e34019c4f2810)]
308 | - Bump @typescript-eslint/eslint-plugin from 5.54.1 to 5.57.0 [[e88082c](https://github.com/Tomas2D/puppeteer-table-parser/commit/e88082ca45b3c2ba0be302203ab72f396da7059f)]
309 | - Bump prettier from 2.8.4 to 2.8.7 [[46e2585](https://github.com/Tomas2D/puppeteer-table-parser/commit/46e2585b5d8e64436c659ebd743e339105ad36aa)]
310 | - Bump eslint-config-prettier from 8.7.0 to 8.8.0 [[7ab3c38](https://github.com/Tomas2D/puppeteer-table-parser/commit/7ab3c386210812bd9a24e8c994d914e3c207b167)]
311 | - Bump tsup from 6.6.3 to 6.7.0 [[8646f68](https://github.com/Tomas2D/puppeteer-table-parser/commit/8646f68f10a1a263b0e9e842cf2fb4ec4d7ce40f)]
312 | - Merge pull request [#153](https://github.com/Tomas2D/puppeteer-table-parser/issues/153) from Tomas2D/dependabot/npm_and_yarn/eslint-8.36.0 [[cbe9fbc](https://github.com/Tomas2D/puppeteer-table-parser/commit/cbe9fbc9ba0e79b146ad524b1b5d3067ed239985)]
313 | - Merge pull request [#154](https://github.com/Tomas2D/puppeteer-table-parser/issues/154) from Tomas2D/dependabot/npm_and_yarn/lint-staged-13.2.0 [[e870c75](https://github.com/Tomas2D/puppeteer-table-parser/commit/e870c75b659552f325403a0e2fc6ad0a211f4649)]
314 | - Merge pull request [#158](https://github.com/Tomas2D/puppeteer-table-parser/issues/158) from Tomas2D/dependabot/npm_and_yarn/puppeteer-19.7.5 [[4446626](https://github.com/Tomas2D/puppeteer-table-parser/commit/44466266d9ed9e70c13a8a1f2455f58f66509b92)]
315 | - Merge pull request [#160](https://github.com/Tomas2D/puppeteer-table-parser/issues/160) from Tomas2D/dependabot/npm_and_yarn/types/jest-29.5.0 [[7f53573](https://github.com/Tomas2D/puppeteer-table-parser/commit/7f53573f225118ba949da7b93b746597ab8fb41d)]
316 | - Merge pull request [#152](https://github.com/Tomas2D/puppeteer-table-parser/issues/152) from Tomas2D/dependabot/npm_and_yarn/eslint-config-prettier-8.7.0 [[67059f6](https://github.com/Tomas2D/puppeteer-table-parser/commit/67059f6476ceb38e0d864c662f7d89d882e12ccd)]
317 | - Bump @types/jest from 29.4.0 to 29.5.0 [[d9564bf](https://github.com/Tomas2D/puppeteer-table-parser/commit/d9564bf0164ffde5e84988a6122492ccea65b91d)]
318 | - Bump puppeteer from 19.7.3 to 19.7.5 [[9774e90](https://github.com/Tomas2D/puppeteer-table-parser/commit/9774e906e94927eb8bf3b48f086f78f3f5a0b47e)]
319 | - Merge pull request [#156](https://github.com/Tomas2D/puppeteer-table-parser/issues/156) from Tomas2D/dependabot/npm_and_yarn/typescript-eslint/parser-5.55.0 [[40cc526](https://github.com/Tomas2D/puppeteer-table-parser/commit/40cc526ed95cdd098d0212e8e9a35c5a3fcaa8c2)]
320 | - Bump eslint from 8.35.0 to 8.36.0 [[b15e071](https://github.com/Tomas2D/puppeteer-table-parser/commit/b15e07128b1bf3c091f027e50a1d643947977d15)]
321 | - Bump @typescript-eslint/parser from 5.53.0 to 5.55.0 [[13dd152](https://github.com/Tomas2D/puppeteer-table-parser/commit/13dd152ba123fa21ffbc7147bb40149dd88f3bdc)]
322 | - Bump lint-staged from 13.1.2 to 13.2.0 [[04b9649](https://github.com/Tomas2D/puppeteer-table-parser/commit/04b9649130395414747a36914ed550cbeef29d86)]
323 | - Bump eslint-config-prettier from 8.6.0 to 8.7.0 [[59611e9](https://github.com/Tomas2D/puppeteer-table-parser/commit/59611e9f38115764a31b834282937c8fefcfe68d)]
324 | - Merge pull request [#144](https://github.com/Tomas2D/puppeteer-table-parser/issues/144) from Tomas2D/dependabot/npm_and_yarn/eslint-8.35.0 [[c0a557d](https://github.com/Tomas2D/puppeteer-table-parser/commit/c0a557df2686b7e7386b408f754af896e7237a5d)]
325 | - Merge pull request [#148](https://github.com/Tomas2D/puppeteer-table-parser/issues/148) from Tomas2D/dependabot/npm_and_yarn/typescript-eslint/eslint-plugin-5.54.1 [[2d6bcd1](https://github.com/Tomas2D/puppeteer-table-parser/commit/2d6bcd1733c138808cef076f78595c355acf3a66)]
326 | - Merge pull request [#149](https://github.com/Tomas2D/puppeteer-table-parser/issues/149) from Tomas2D/dependabot/npm_and_yarn/puppeteer-19.7.3 [[7327e75](https://github.com/Tomas2D/puppeteer-table-parser/commit/7327e75e99bec312db55d49325bcb3159a1d4375)]
327 | - Merge pull request [#150](https://github.com/Tomas2D/puppeteer-table-parser/issues/150) from Tomas2D/dependabot/npm_and_yarn/jest-29.5.0 [[18eb051](https://github.com/Tomas2D/puppeteer-table-parser/commit/18eb051ab90f71df10cb08efa240a73391c53758)]
328 | - Merge pull request [#137](https://github.com/Tomas2D/puppeteer-table-parser/issues/137) from Tomas2D/dependabot/npm_and_yarn/lint-staged-13.1.2 [[f24b1b3](https://github.com/Tomas2D/puppeteer-table-parser/commit/f24b1b33f6b6527806a18d033999c8da4d30eb99)]
329 | - Bump jest from 29.4.1 to 29.5.0 [[4095889](https://github.com/Tomas2D/puppeteer-table-parser/commit/4095889c2feb4a17463ffdb4c9942ed7648c8af5)]
330 | - Bump puppeteer from 19.7.1 to 19.7.3 [[126a914](https://github.com/Tomas2D/puppeteer-table-parser/commit/126a914cd705fe9a406c437f907de74d0dc123b2)]
331 | - Bump @typescript-eslint/eslint-plugin from 5.54.0 to 5.54.1 [[0d57798](https://github.com/Tomas2D/puppeteer-table-parser/commit/0d577989d1e2c4557ec0d05ed090f8f2c339db96)]
332 | - Merge pull request [#147](https://github.com/Tomas2D/puppeteer-table-parser/issues/147) from Tomas2D/dependabot/npm_and_yarn/typescript-eslint/eslint-plugin-5.54.0 [[7d2b08f](https://github.com/Tomas2D/puppeteer-table-parser/commit/7d2b08f480c7a4a7aea388692840a464d42fe528)]
333 | - Bump eslint from 8.33.0 to 8.35.0 [[984b608](https://github.com/Tomas2D/puppeteer-table-parser/commit/984b60865a2d4903f47148a8b90f170ff8786333)]
334 | - Bump @typescript-eslint/eslint-plugin from 5.51.0 to 5.54.0 [[570d7cf](https://github.com/Tomas2D/puppeteer-table-parser/commit/570d7cf4f0d562ef692c53080897791dbe0c0fe7)]
335 | - Merge pull request [#142](https://github.com/Tomas2D/puppeteer-table-parser/issues/142) from Tomas2D/dependabot/npm_and_yarn/tsup-6.6.3 [[ab9f174](https://github.com/Tomas2D/puppeteer-table-parser/commit/ab9f174c148dae854298ee4e8af47bb9326ea5f3)]
336 | - Merge pull request [#143](https://github.com/Tomas2D/puppeteer-table-parser/issues/143) from Tomas2D/dependabot/npm_and_yarn/typescript-eslint/parser-5.53.0 [[3bbf89f](https://github.com/Tomas2D/puppeteer-table-parser/commit/3bbf89f971188d2314b2b49f72b8300d19f08234)]
337 | - Bump @typescript-eslint/parser from 5.51.0 to 5.53.0 [[6d471da](https://github.com/Tomas2D/puppeteer-table-parser/commit/6d471da44f486cf60527a6f66959a64773270fae)]
338 | - Bump tsup from 6.6.2 to 6.6.3 [[f13cee4](https://github.com/Tomas2D/puppeteer-table-parser/commit/f13cee444ce1622dc183bdab569f11c702eae4aa)]
339 | - Merge pull request [#140](https://github.com/Tomas2D/puppeteer-table-parser/issues/140) from Tomas2D/dependabot/npm_and_yarn/puppeteer-19.7.1 [[aa7b892](https://github.com/Tomas2D/puppeteer-table-parser/commit/aa7b892763365b9628402b088897078143a7839c)]
340 | - Bump puppeteer from 19.6.2 to 19.7.1 [[0d6b446](https://github.com/Tomas2D/puppeteer-table-parser/commit/0d6b446eac7dae38710a5e4b8afb3b67e7667cde)]
341 | - Bump lint-staged from 13.1.0 to 13.1.2 [[7cacb6b](https://github.com/Tomas2D/puppeteer-table-parser/commit/7cacb6bf6183275fa568ca10be14ca5da96e7573)]
342 | - Merge pull request [#135](https://github.com/Tomas2D/puppeteer-table-parser/issues/135) from Tomas2D/dependabot/npm_and_yarn/tsup-6.6.2 [[a86c095](https://github.com/Tomas2D/puppeteer-table-parser/commit/a86c09577c0564a2e838711a566282e118e1e333)]
343 | - Bump tsup from 6.5.0 to 6.6.2 [[781bf71](https://github.com/Tomas2D/puppeteer-table-parser/commit/781bf717a2265cb6d77a48e4c790c8e558974cf8)]
344 | - Merge pull request [#134](https://github.com/Tomas2D/puppeteer-table-parser/issues/134) from Tomas2D/dependabot/npm_and_yarn/prettier-2.8.4 [[fbf8068](https://github.com/Tomas2D/puppeteer-table-parser/commit/fbf806816987c87a790a23f898ab66d52cf277f9)]
345 | - Bump prettier from 2.8.3 to 2.8.4 [[6fdf265](https://github.com/Tomas2D/puppeteer-table-parser/commit/6fdf265d4934e8d3a58aba3b547423cc4a50eea6)]
346 | - Merge pull request [#130](https://github.com/Tomas2D/puppeteer-table-parser/issues/130) from Tomas2D/dependabot/npm_and_yarn/typescript-eslint/eslint-plugin-5.51.0 [[ce591f0](https://github.com/Tomas2D/puppeteer-table-parser/commit/ce591f0020550e6f244d5ee6e646faedee41a262)]
347 | - Merge pull request [#128](https://github.com/Tomas2D/puppeteer-table-parser/issues/128) from Tomas2D/dependabot/npm_and_yarn/types/express-4.17.17 [[d513122](https://github.com/Tomas2D/puppeteer-table-parser/commit/d513122ba44ac96f7f4c61c7b4eb9dbc4573358d)]
348 | - Merge pull request [#129](https://github.com/Tomas2D/puppeteer-table-parser/issues/129) from Tomas2D/dependabot/npm_and_yarn/typescript-eslint/parser-5.51.0 [[e5d1755](https://github.com/Tomas2D/puppeteer-table-parser/commit/e5d1755223a010745b778dafa99cd679d2a7ba83)]
349 | - Bump @typescript-eslint/eslint-plugin from 5.50.0 to 5.51.0 [[2f6e8cd](https://github.com/Tomas2D/puppeteer-table-parser/commit/2f6e8cd894e7bd6642716dfa6fb2848d25d3fa47)]
350 | - Bump @typescript-eslint/parser from 5.50.0 to 5.51.0 [[42e5a0a](https://github.com/Tomas2D/puppeteer-table-parser/commit/42e5a0a0195c3516dd532d70e8928c143c5d3707)]
351 | - Bump @types/express from 4.17.16 to 4.17.17 [[10fd828](https://github.com/Tomas2D/puppeteer-table-parser/commit/10fd8280d7c0a1354b88dc4975283bce6f5615fc)]
352 | - Merge pull request [#122](https://github.com/Tomas2D/puppeteer-table-parser/issues/122) from Tomas2D/dependabot/npm_and_yarn/typescript-eslint/parser-5.50.0 [[30ec48d](https://github.com/Tomas2D/puppeteer-table-parser/commit/30ec48d32e9b66912cfffcf9272235b71d958666)]
353 | - Merge pull request [#123](https://github.com/Tomas2D/puppeteer-table-parser/issues/123) from Tomas2D/dependabot/npm_and_yarn/jest-29.4.1 [[00404db](https://github.com/Tomas2D/puppeteer-table-parser/commit/00404db123b3d2f6969c141c04212c4ee74b8826)]
354 | - Merge pull request [#124](https://github.com/Tomas2D/puppeteer-table-parser/issues/124) from Tomas2D/dependabot/npm_and_yarn/typescript-eslint/eslint-plugin-5.50.0 [[1bb6115](https://github.com/Tomas2D/puppeteer-table-parser/commit/1bb6115d6876987be69df601b9efc8a9320080bf)]
355 | - Merge pull request [#126](https://github.com/Tomas2D/puppeteer-table-parser/issues/126) from Tomas2D/dependabot/npm_and_yarn/eslint-8.33.0 [[acfe17a](https://github.com/Tomas2D/puppeteer-table-parser/commit/acfe17a0d51c80f2fd754b33e785551f9974f153)]
356 | - Merge pull request [#125](https://github.com/Tomas2D/puppeteer-table-parser/issues/125) from Tomas2D/dependabot/npm_and_yarn/typescript-4.9.5 [[fc0be27](https://github.com/Tomas2D/puppeteer-table-parser/commit/fc0be2795ed404019bd9bc1a898843ecb94a6fd3)]
357 | - Bump @typescript-eslint/parser from 5.48.2 to 5.50.0 [[eb5e94e](https://github.com/Tomas2D/puppeteer-table-parser/commit/eb5e94e08644c490a9ac025c47659c9477fdc8ac)]
358 | - Bump eslint from 8.32.0 to 8.33.0 [[431cf1f](https://github.com/Tomas2D/puppeteer-table-parser/commit/431cf1fa1c98ca04b4fc83b4c0fc3445a17b30ee)]
359 | - Bump typescript from 4.9.4 to 4.9.5 [[9dae91c](https://github.com/Tomas2D/puppeteer-table-parser/commit/9dae91cfdfdd6a5500cd7efb4d5eca7b235dc26d)]
360 | - Bump @typescript-eslint/eslint-plugin from 5.49.0 to 5.50.0 [[a0ca152](https://github.com/Tomas2D/puppeteer-table-parser/commit/a0ca152d00d47499949944c31f968058b89f9e48)]
361 | - Bump jest from 29.4.0 to 29.4.1 [[ff26082](https://github.com/Tomas2D/puppeteer-table-parser/commit/ff2608262dfdd0db7b3834ad56e33edc02b38750)]
362 | - Merge pull request [#116](https://github.com/Tomas2D/puppeteer-table-parser/issues/116) from Tomas2D/dependabot/npm_and_yarn/types/express-4.17.16 [[59fe49b](https://github.com/Tomas2D/puppeteer-table-parser/commit/59fe49b807b72dfa5747fa17c49730f5a428de5e)]
363 | - Merge pull request [#117](https://github.com/Tomas2D/puppeteer-table-parser/issues/117) from Tomas2D/dependabot/npm_and_yarn/typescript-eslint/eslint-plugin-5.49.0 [[5d8cc6d](https://github.com/Tomas2D/puppeteer-table-parser/commit/5d8cc6de012b56498f17f8d959cd0d8439ad140e)]
364 | - Merge pull request [#119](https://github.com/Tomas2D/puppeteer-table-parser/issues/119) from Tomas2D/dependabot/npm_and_yarn/types/jest-29.4.0 [[023f078](https://github.com/Tomas2D/puppeteer-table-parser/commit/023f078d488f02b7fa055659de76d3e758764b9a)]
365 | - Merge pull request [#121](https://github.com/Tomas2D/puppeteer-table-parser/issues/121) from Tomas2D/dependabot/npm_and_yarn/puppeteer-19.6.2 [[a84ea0a](https://github.com/Tomas2D/puppeteer-table-parser/commit/a84ea0a09d039c005cac6c630d6c02bdc93fe5ed)]
366 | - Bump puppeteer from 19.5.2 to 19.6.2 [[8d92a52](https://github.com/Tomas2D/puppeteer-table-parser/commit/8d92a5292bc72afa0c247be58a08a02d81a420ba)]
367 | - Bump @types/jest from 29.2.6 to 29.4.0 [[ae4524b](https://github.com/Tomas2D/puppeteer-table-parser/commit/ae4524b878f10c04c149d975230f7a97faff1e8e)]
368 | - Merge pull request [#118](https://github.com/Tomas2D/puppeteer-table-parser/issues/118) from Tomas2D/dependabot/npm_and_yarn/jest-29.4.0 [[878fbcf](https://github.com/Tomas2D/puppeteer-table-parser/commit/878fbcf2f5fcfbfac74a1640280ed0fca40d5545)]
369 | - Bump jest from 29.3.1 to 29.4.0 [[4abdcde](https://github.com/Tomas2D/puppeteer-table-parser/commit/4abdcdef8d24ff2da4804e542a68d1a0ffef80ec)]
370 | - Bump @typescript-eslint/eslint-plugin from 5.48.1 to 5.49.0 [[e434f17](https://github.com/Tomas2D/puppeteer-table-parser/commit/e434f1793cc20a967cdedbcd9ed516e0c1c4923d)]
371 | - Bump @types/express from 4.17.15 to 4.17.16 [[ecc9790](https://github.com/Tomas2D/puppeteer-table-parser/commit/ecc9790ae271ab5aa7628c256b74a35c09db7695)]
372 | - Merge pull request [#107](https://github.com/Tomas2D/puppeteer-table-parser/issues/107) from Tomas2D/dependabot/npm_and_yarn/puppeteer-19.5.2 [[fcfe1f1](https://github.com/Tomas2D/puppeteer-table-parser/commit/fcfe1f1c18920d67162786323d54082671eb91f7)]
373 | - Merge pull request [#108](https://github.com/Tomas2D/puppeteer-table-parser/issues/108) from Tomas2D/dependabot/npm_and_yarn/eslint-8.32.0 [[e599154](https://github.com/Tomas2D/puppeteer-table-parser/commit/e599154846200e23cd5819c0f6fb135e473a65ad)]
374 | - Merge pull request [#109](https://github.com/Tomas2D/puppeteer-table-parser/issues/109) from Tomas2D/dependabot/npm_and_yarn/prettier-2.8.3 [[224181b](https://github.com/Tomas2D/puppeteer-table-parser/commit/224181b6c9c1b68a3e535c5a7e973a93c780b462)]
375 | - Merge pull request [#110](https://github.com/Tomas2D/puppeteer-table-parser/issues/110) from Tomas2D/dependabot/npm_and_yarn/ts-jest-29.0.5 [[3226067](https://github.com/Tomas2D/puppeteer-table-parser/commit/3226067f72caacf5112044c1135e93dbdaae8a0c)]
376 | - Merge pull request [#112](https://github.com/Tomas2D/puppeteer-table-parser/issues/112) from Tomas2D/dependabot/npm_and_yarn/types/jest-29.2.6 [[ac76a25](https://github.com/Tomas2D/puppeteer-table-parser/commit/ac76a2528a466bb33978577b41e2d7fde32bb26d)]
377 | - Bump @types/jest from 29.2.5 to 29.2.6 [[b1a362b](https://github.com/Tomas2D/puppeteer-table-parser/commit/b1a362bfe8416ec490f06f9207d2cafdeec162ce)]
378 | - Merge pull request [#111](https://github.com/Tomas2D/puppeteer-table-parser/issues/111) from Tomas2D/dependabot/npm_and_yarn/typescript-eslint/parser-5.48.2 [[7814755](https://github.com/Tomas2D/puppeteer-table-parser/commit/781475509aa0c3faffe920700b5e7d2b0561b778)]
379 | - Bump eslint from 8.31.0 to 8.32.0 [[79e8217](https://github.com/Tomas2D/puppeteer-table-parser/commit/79e821787f8f3f27271418426eae2f38b3e94f3c)]
380 | - Bump @typescript-eslint/parser from 5.48.1 to 5.48.2 [[60b5d6a](https://github.com/Tomas2D/puppeteer-table-parser/commit/60b5d6a078762516f88031bc8a7814d441779cee)]
381 | - Bump ts-jest from 29.0.3 to 29.0.5 [[ba90990](https://github.com/Tomas2D/puppeteer-table-parser/commit/ba90990d7c526a203cc8359e12d8f133e661c82d)]
382 | - Bump prettier from 2.8.2 to 2.8.3 [[d79a29b](https://github.com/Tomas2D/puppeteer-table-parser/commit/d79a29b954b800a643edbf96f72974339e5513bd)]
383 | - Bump puppeteer from 19.5.0 to 19.5.2 [[5eba3f6](https://github.com/Tomas2D/puppeteer-table-parser/commit/5eba3f6d17cbd633c538860077ffb68e2436a538)]
384 | - Merge pull request [#102](https://github.com/Tomas2D/puppeteer-table-parser/issues/102) from Tomas2D/dependabot/npm_and_yarn/typescript-eslint/parser-5.48.1 [[2e06153](https://github.com/Tomas2D/puppeteer-table-parser/commit/2e0615382f899bead7d40f4aa31f70a1171795d5)]
385 | - Merge pull request [#104](https://github.com/Tomas2D/puppeteer-table-parser/issues/104) from Tomas2D/dependabot/npm_and_yarn/puppeteer-19.5.0 [[894ad4f](https://github.com/Tomas2D/puppeteer-table-parser/commit/894ad4f63468b4f87354f64082040bce843dcded)]
386 | - Merge pull request [#103](https://github.com/Tomas2D/puppeteer-table-parser/issues/103) from Tomas2D/dependabot/npm_and_yarn/typescript-eslint/eslint-plugin-5.48.1 [[65a8e8d](https://github.com/Tomas2D/puppeteer-table-parser/commit/65a8e8d7e6f46c3ec1bf68dbe1696c11928d1c33)]
387 | - Bump @typescript-eslint/parser from 5.47.1 to 5.48.1 [[4136864](https://github.com/Tomas2D/puppeteer-table-parser/commit/4136864f74111084637d4934a7aee73a4d6a3b72)]
388 | - Bump puppeteer from 19.4.1 to 19.5.0 [[f8b49b7](https://github.com/Tomas2D/puppeteer-table-parser/commit/f8b49b7358ae7bce9bbd5c43d97e086011b2353e)]
389 | - Bump @typescript-eslint/eslint-plugin from 5.48.0 to 5.48.1 [[256fff2](https://github.com/Tomas2D/puppeteer-table-parser/commit/256fff2abd19242669802f2cb962d2c19cb3f77f)]
390 | - Merge pull request [#101](https://github.com/Tomas2D/puppeteer-table-parser/issues/101) from Tomas2D/dependabot/npm_and_yarn/prettier-2.8.2 [[cea8a2b](https://github.com/Tomas2D/puppeteer-table-parser/commit/cea8a2b16990728e26a9666a21ce00b2460b223b)]
391 | - Bump prettier from 2.8.1 to 2.8.2 [[1228ecf](https://github.com/Tomas2D/puppeteer-table-parser/commit/1228ecff290d9e03b44931b117a57c70d616b231)]
392 | - Merge pull request [#98](https://github.com/Tomas2D/puppeteer-table-parser/issues/98) from Tomas2D/dependabot/npm_and_yarn/eslint-config-prettier-8.6.0 [[58240f2](https://github.com/Tomas2D/puppeteer-table-parser/commit/58240f2f1bd546e1c958e3d575442b7daa970e3d)]
393 | - Merge pull request [#97](https://github.com/Tomas2D/puppeteer-table-parser/issues/97) from Tomas2D/dependabot/npm_and_yarn/typescript-eslint/eslint-plugin-5.48.0 [[d856ba0](https://github.com/Tomas2D/puppeteer-table-parser/commit/d856ba07a6f30a806ff1201d52fc3cea8524c4b7)]
394 | - Merge pull request [#100](https://github.com/Tomas2D/puppeteer-table-parser/issues/100) from Tomas2D/dependabot/npm_and_yarn/husky-8.0.3 [[adaa711](https://github.com/Tomas2D/puppeteer-table-parser/commit/adaa71166cb411b309aa536451a3d1791bba278b)]
395 | - Bump husky from 8.0.2 to 8.0.3 [[22f0b5d](https://github.com/Tomas2D/puppeteer-table-parser/commit/22f0b5dcd3de13dc346629782fc32772d1a41ac5)]
396 | - Bump eslint-config-prettier from 8.5.0 to 8.6.0 [[1f493e8](https://github.com/Tomas2D/puppeteer-table-parser/commit/1f493e8d0dffa80c6c46aad622d2fc9e4cc975ae)]
397 | - Bump @typescript-eslint/eslint-plugin from 5.47.1 to 5.48.0 [[9217e37](https://github.com/Tomas2D/puppeteer-table-parser/commit/9217e37237577393e6c9f65b589a7428a07b07f2)]
398 | - Merge pull request [#96](https://github.com/Tomas2D/puppeteer-table-parser/issues/96) from Tomas2D/dependabot/npm_and_yarn/types/jest-29.2.5 [[b122094](https://github.com/Tomas2D/puppeteer-table-parser/commit/b1220942a7c4121507e6eb0a61ea098b53f5ecb1)]
399 | - Merge pull request [#95](https://github.com/Tomas2D/puppeteer-table-parser/issues/95) from Tomas2D/dependabot/npm_and_yarn/eslint-8.31.0 [[1eb88b4](https://github.com/Tomas2D/puppeteer-table-parser/commit/1eb88b43ade4fec40e35029f27bd6e2e4edb6a95)]
400 | - Bump @types/jest from 29.2.4 to 29.2.5 [[8c7eb48](https://github.com/Tomas2D/puppeteer-table-parser/commit/8c7eb480e652229661cfd7a89f1bbf6af9aacb6e)]
401 | - Bump eslint from 8.30.0 to 8.31.0 [[a51d858](https://github.com/Tomas2D/puppeteer-table-parser/commit/a51d8587a1b2cbeb48cedd8b89913ef92b6a8f5a)]
402 | - Merge pull request [#92](https://github.com/Tomas2D/puppeteer-table-parser/issues/92) from Tomas2D/dependabot/npm_and_yarn/typescript-eslint/parser-5.47.1 [[359452f](https://github.com/Tomas2D/puppeteer-table-parser/commit/359452f4b57041d414d8ff4a10d341053a8810b2)]
403 | - Merge pull request [#94](https://github.com/Tomas2D/puppeteer-table-parser/issues/94) from Tomas2D/dependabot/npm_and_yarn/json5-2.2.3 [[7f9e6dd](https://github.com/Tomas2D/puppeteer-table-parser/commit/7f9e6dd2ed43bb370ea5a22a0a4adc40e567e236)]
404 | - Merge pull request [#93](https://github.com/Tomas2D/puppeteer-table-parser/issues/93) from Tomas2D/dependabot/npm_and_yarn/typescript-eslint/eslint-plugin-5.47.1 [[811c849](https://github.com/Tomas2D/puppeteer-table-parser/commit/811c849e7f6f40081a555bebc6403ffae64bd958)]
405 | - Bump @typescript-eslint/parser from 5.47.0 to 5.47.1 [[3739c19](https://github.com/Tomas2D/puppeteer-table-parser/commit/3739c19ef3b1205391ee7102f43d7fba4bb89fdf)]
406 | - Bump json5 from 2.2.1 to 2.2.3 [[eb2c2f1](https://github.com/Tomas2D/puppeteer-table-parser/commit/eb2c2f10ca8ee85fcb0c8741c67eae33df4d4a82)]
407 | - Bump @typescript-eslint/eslint-plugin from 5.46.1 to 5.47.1 [[cf6d238](https://github.com/Tomas2D/puppeteer-table-parser/commit/cf6d2385da2efa342be847e75f17dd17edbe8e8d)]
408 | - Merge pull request [#80](https://github.com/Tomas2D/puppeteer-table-parser/issues/80) from Tomas2D/dependabot/npm_and_yarn/prettier-2.8.1 [[92b7fe4](https://github.com/Tomas2D/puppeteer-table-parser/commit/92b7fe455bb036a1060a9fcdaeae3a929d7af6f8)]
409 | - Merge pull request [#88](https://github.com/Tomas2D/puppeteer-table-parser/issues/88) from Tomas2D/dependabot/npm_and_yarn/eslint-8.30.0 [[e598496](https://github.com/Tomas2D/puppeteer-table-parser/commit/e598496f4dfedc2d138f36ebabcc1e798a02b498)]
410 | - Merge pull request [#89](https://github.com/Tomas2D/puppeteer-table-parser/issues/89) from Tomas2D/dependabot/npm_and_yarn/puppeteer-19.4.1 [[7feefda](https://github.com/Tomas2D/puppeteer-table-parser/commit/7feefda68c940ef44227829fb1231f57a2eb1acf)]
411 | - Merge pull request [#90](https://github.com/Tomas2D/puppeteer-table-parser/issues/90) from Tomas2D/dependabot/npm_and_yarn/typescript-eslint/parser-5.47.0 [[10c7c47](https://github.com/Tomas2D/puppeteer-table-parser/commit/10c7c47e794e2c72d80f19517ae48a7d6a95dc0a)]
412 | - Merge pull request [#78](https://github.com/Tomas2D/puppeteer-table-parser/issues/78) from Tomas2D/dependabot/npm_and_yarn/types/jest-29.2.4 [[53c3fd1](https://github.com/Tomas2D/puppeteer-table-parser/commit/53c3fd100c882fdae9c124bf8413a65c5bb72a04)]
413 | - Bump @typescript-eslint/parser from 5.46.1 to 5.47.0 [[b7b82e8](https://github.com/Tomas2D/puppeteer-table-parser/commit/b7b82e8ba7be3e40d40a02b433cb78dccf9679c5)]
414 | - Bump puppeteer from 19.3.0 to 19.4.1 [[4c1c9ec](https://github.com/Tomas2D/puppeteer-table-parser/commit/4c1c9ec1e2f90d658697ab8cd1e4bfd4d87ed89b)]
415 | - Bump eslint from 8.29.0 to 8.30.0 [[c07d36d](https://github.com/Tomas2D/puppeteer-table-parser/commit/c07d36d3eda7909c193da460e34f1590c948bada)]
416 | - Merge pull request [#86](https://github.com/Tomas2D/puppeteer-table-parser/issues/86) from Tomas2D/dependabot/npm_and_yarn/types/express-4.17.15 [[6269676](https://github.com/Tomas2D/puppeteer-table-parser/commit/6269676b1a4f72506c17a2840608f6ca8c227b05)]
417 | - Merge pull request [#87](https://github.com/Tomas2D/puppeteer-table-parser/issues/87) from Tomas2D/dependabot/npm_and_yarn/typescript-eslint/eslint-plugin-5.46.1 [[ce919b0](https://github.com/Tomas2D/puppeteer-table-parser/commit/ce919b07f7d182ae837d7a4ce709b5cd7c027d8a)]
418 | - Bump @typescript-eslint/eslint-plugin from 5.46.0 to 5.46.1 [[873b568](https://github.com/Tomas2D/puppeteer-table-parser/commit/873b568d79448854a6365e45bbf50c28be2fbb98)]
419 | - Bump @types/express from 4.17.14 to 4.17.15 [[65ba673](https://github.com/Tomas2D/puppeteer-table-parser/commit/65ba67357f2e2303e8f738b89e6c764ced6d5168)]
420 | - Merge pull request [#85](https://github.com/Tomas2D/puppeteer-table-parser/issues/85) from Tomas2D/dependabot/npm_and_yarn/typescript-eslint/parser-5.46.1 [[47a4630](https://github.com/Tomas2D/puppeteer-table-parser/commit/47a46302ae2954d1b4b2a431003631128625e22e)]
421 | - Merge pull request [#84](https://github.com/Tomas2D/puppeteer-table-parser/issues/84) from Tomas2D/dependabot/npm_and_yarn/typescript-4.9.4 [[31c26ce](https://github.com/Tomas2D/puppeteer-table-parser/commit/31c26ce00ad8a5fffaac40f10d4cd8ee92172a33)]
422 | - Bump @typescript-eslint/parser from 5.46.0 to 5.46.1 [[c822fd9](https://github.com/Tomas2D/puppeteer-table-parser/commit/c822fd9b976c017da12054cd4fb99783b485a96f)]
423 | - Bump typescript from 4.9.3 to 4.9.4 [[a3cf5a3](https://github.com/Tomas2D/puppeteer-table-parser/commit/a3cf5a34d6a0bc0bd81e1bdf62fdc8b9e6489fc0)]
424 | - Merge pull request [#82](https://github.com/Tomas2D/puppeteer-table-parser/issues/82) from Tomas2D/dependabot/npm_and_yarn/typescript-eslint/parser-5.46.0 [[6e108c2](https://github.com/Tomas2D/puppeteer-table-parser/commit/6e108c2f8c64eda6c6b8085b325a9da26571d715)]
425 | - Merge pull request [#83](https://github.com/Tomas2D/puppeteer-table-parser/issues/83) from Tomas2D/dependabot/npm_and_yarn/typescript-eslint/eslint-plugin-5.46.0 [[0fc6fd8](https://github.com/Tomas2D/puppeteer-table-parser/commit/0fc6fd8b3c518f067f0597cca905a1593f0b5237)]
426 | - Bump @typescript-eslint/parser from 5.45.0 to 5.46.0 [[d3e9932](https://github.com/Tomas2D/puppeteer-table-parser/commit/d3e9932ff4fe324f98e0d7b5e2649225bf2b39b1)]
427 | - Bump @typescript-eslint/eslint-plugin from 5.45.0 to 5.46.0 [[3222258](https://github.com/Tomas2D/puppeteer-table-parser/commit/32222589243830b8e5b15fc3e21786217dde26d0)]
428 | - Bump prettier from 2.8.0 to 2.8.1 [[10dee08](https://github.com/Tomas2D/puppeteer-table-parser/commit/10dee083318fd15c9643b72eef7e45bc6945afb8)]
429 | - Merge pull request [#75](https://github.com/Tomas2D/puppeteer-table-parser/issues/75) from Tomas2D/dependabot/npm_and_yarn/lint-staged-13.1.0 [[bc3d0d0](https://github.com/Tomas2D/puppeteer-table-parser/commit/bc3d0d090a58c722831129b7067b2e25d2aae773)]
430 | - Merge pull request [#76](https://github.com/Tomas2D/puppeteer-table-parser/issues/76) from Tomas2D/dependabot/npm_and_yarn/eslint-8.29.0 [[c3aab0c](https://github.com/Tomas2D/puppeteer-table-parser/commit/c3aab0c139cb3a7487ae7b8e41f5687a98f08063)]
431 | - Bump @types/jest from 29.2.3 to 29.2.4 [[648d3b4](https://github.com/Tomas2D/puppeteer-table-parser/commit/648d3b40d0a8365691a9cc47c2e9db1b7635b253)]
432 | - Bump eslint from 8.28.0 to 8.29.0 [[74bd30d](https://github.com/Tomas2D/puppeteer-table-parser/commit/74bd30d16d5182aa48d72a047e6fb928d76b0806)]
433 | - Bump lint-staged from 13.0.4 to 13.1.0 [[75a60bd](https://github.com/Tomas2D/puppeteer-table-parser/commit/75a60bda126658771a6fa590570f9cec52d6f6fe)]
434 | - Merge pull request [#73](https://github.com/Tomas2D/puppeteer-table-parser/issues/73) from Tomas2D/dependabot/npm_and_yarn/typescript-eslint/parser-5.45.0 [[52fe60a](https://github.com/Tomas2D/puppeteer-table-parser/commit/52fe60a215aaa0d238a3ee3f46e8d4e0dabc13b1)]
435 | - Merge pull request [#74](https://github.com/Tomas2D/puppeteer-table-parser/issues/74) from Tomas2D/dependabot/npm_and_yarn/typescript-eslint/eslint-plugin-5.45.0 [[5090bd1](https://github.com/Tomas2D/puppeteer-table-parser/commit/5090bd107db0b034698322b67f66bb8f817e872c)]
436 | - Bump @typescript-eslint/parser from 5.44.0 to 5.45.0 [[505dd1f](https://github.com/Tomas2D/puppeteer-table-parser/commit/505dd1f1c5538821e659517273b11d3730548390)]
437 | - Bump @typescript-eslint/eslint-plugin from 5.44.0 to 5.45.0 [[1af8f3a](https://github.com/Tomas2D/puppeteer-table-parser/commit/1af8f3ae93165aa98a724c2f307fce7900a55253)]
438 | - Merge pull request [#72](https://github.com/Tomas2D/puppeteer-table-parser/issues/72) from Tomas2D/dependabot/npm_and_yarn/puppeteer-19.3.0 [[984b442](https://github.com/Tomas2D/puppeteer-table-parser/commit/984b442806eb2183c226b24c7cdc403648c11ab4)]
439 | - Merge pull request [#71](https://github.com/Tomas2D/puppeteer-table-parser/issues/71) from Tomas2D/dependabot/npm_and_yarn/prettier-2.8.0 [[aace2cd](https://github.com/Tomas2D/puppeteer-table-parser/commit/aace2cd2d6e5fe4a6f24fda399aefcb27f498ec6)]
440 | - Bump puppeteer from 19.2.2 to 19.3.0 [[bc707ac](https://github.com/Tomas2D/puppeteer-table-parser/commit/bc707ac9f8e0c1ac63e3d908ea0ea883e574560c)]
441 | - Bump prettier from 2.7.1 to 2.8.0 [[d8e3697](https://github.com/Tomas2D/puppeteer-table-parser/commit/d8e36974daf019c4e4a1b8daf7d237bb8b7b7255)]
442 | - Merge pull request [#69](https://github.com/Tomas2D/puppeteer-table-parser/issues/69) from Tomas2D/dependabot/npm_and_yarn/typescript-eslint/parser-5.44.0 [[408adc5](https://github.com/Tomas2D/puppeteer-table-parser/commit/408adc5184273aee27a18def01ccf7eecae6e85b)]
443 | - Merge pull request [#70](https://github.com/Tomas2D/puppeteer-table-parser/issues/70) from Tomas2D/dependabot/npm_and_yarn/typescript-eslint/eslint-plugin-5.44.0 [[7065d06](https://github.com/Tomas2D/puppeteer-table-parser/commit/7065d0679947628bf2d2a4931e3be97a2d27a59d)]
444 | - Bump @typescript-eslint/parser from 5.43.0 to 5.44.0 [[9c3bf9d](https://github.com/Tomas2D/puppeteer-table-parser/commit/9c3bf9dd3e4685f9d4dd2a35763275de2efedba6)]
445 | - Bump @typescript-eslint/eslint-plugin from 5.43.0 to 5.44.0 [[4c6e499](https://github.com/Tomas2D/puppeteer-table-parser/commit/4c6e49946f599e5dec6c51ffa23d3baac7b3b693)]
446 | - Merge pull request [#68](https://github.com/Tomas2D/puppeteer-table-parser/issues/68) from Tomas2D/dependabot/npm_and_yarn/eslint-8.28.0 [[e7c2fe3](https://github.com/Tomas2D/puppeteer-table-parser/commit/e7c2fe3016b7adefcd257918cd84bbeb88ee5a72)]
447 | - Bump eslint from 8.27.0 to 8.28.0 [[f7291d2](https://github.com/Tomas2D/puppeteer-table-parser/commit/f7291d2e2743f68110885bd1b957118ed513ab80)]
448 | - Merge pull request [#64](https://github.com/Tomas2D/puppeteer-table-parser/issues/64) from Tomas2D/dependabot/npm_and_yarn/typescript-eslint/parser-5.43.0 [[1cd7231](https://github.com/Tomas2D/puppeteer-table-parser/commit/1cd723109153d07c4a8b95fdb8090b070089c9fd)]
449 | - Merge pull request [#67](https://github.com/Tomas2D/puppeteer-table-parser/issues/67) from Tomas2D/dependabot/npm_and_yarn/typescript-4.9.3 [[9113a1c](https://github.com/Tomas2D/puppeteer-table-parser/commit/9113a1cad82d4d3936f93056424f061ed9881665)]
450 | - Bump typescript from 4.8.4 to 4.9.3 [[6da5d9a](https://github.com/Tomas2D/puppeteer-table-parser/commit/6da5d9a1e501f0841ae82e0034239ad5dce2eb83)]
451 | - Merge pull request [#63](https://github.com/Tomas2D/puppeteer-table-parser/issues/63) from Tomas2D/dependabot/npm_and_yarn/tsup-6.5.0 [[5a58ad5](https://github.com/Tomas2D/puppeteer-table-parser/commit/5a58ad5d25fdbaae9ed9674a2d9b358608a666d4)]
452 | - Merge pull request [#65](https://github.com/Tomas2D/puppeteer-table-parser/issues/65) from Tomas2D/dependabot/npm_and_yarn/types/jest-29.2.3 [[31cc1e9](https://github.com/Tomas2D/puppeteer-table-parser/commit/31cc1e9d8b6ce2853552b2edf9b5abf14c97f7e5)]
453 | - Merge pull request [#66](https://github.com/Tomas2D/puppeteer-table-parser/issues/66) from Tomas2D/dependabot/npm_and_yarn/typescript-eslint/eslint-plugin-5.43.0 [[c3b16f2](https://github.com/Tomas2D/puppeteer-table-parser/commit/c3b16f20f80719dc25ca3f886852ce17553ad675)]
454 | - Bump @typescript-eslint/parser from 5.42.1 to 5.43.0 [[30d0479](https://github.com/Tomas2D/puppeteer-table-parser/commit/30d0479e9046ce6f664eb564ed6979f977dd060d)]
455 | - Bump @typescript-eslint/eslint-plugin from 5.42.1 to 5.43.0 [[e33eb48](https://github.com/Tomas2D/puppeteer-table-parser/commit/e33eb48c4fac862b64f05e124d86f64d9ffa1bbd)]
456 | - Bump @types/jest from 29.2.2 to 29.2.3 [[791d600](https://github.com/Tomas2D/puppeteer-table-parser/commit/791d600dbd9a03ea5043225fd5a6d802fc25e3f8)]
457 | - Bump tsup from 6.4.0 to 6.5.0 [[e5a71f8](https://github.com/Tomas2D/puppeteer-table-parser/commit/e5a71f8335e6c65552a9ee5579ce2a3edf282254)]
458 | - Merge pull request [#58](https://github.com/Tomas2D/puppeteer-table-parser/issues/58) from Tomas2D/dependabot/npm_and_yarn/eslint-8.27.0 [[6fbc82d](https://github.com/Tomas2D/puppeteer-table-parser/commit/6fbc82d547646dd7bec7bf270b5d0179918e68ae)]
459 | - Merge pull request [#61](https://github.com/Tomas2D/puppeteer-table-parser/issues/61) from Tomas2D/dependabot/npm_and_yarn/jest-29.3.1 [[1615c39](https://github.com/Tomas2D/puppeteer-table-parser/commit/1615c39d90a58697ff0bd8eb9ff65b55d6de7704)]
460 | - Merge pull request [#59](https://github.com/Tomas2D/puppeteer-table-parser/issues/59) from Tomas2D/dependabot/npm_and_yarn/tsup-6.4.0 [[53aa552](https://github.com/Tomas2D/puppeteer-table-parser/commit/53aa552dcf00f1aad997eb9921090907bd78092c)]
461 | - Merge pull request [#62](https://github.com/Tomas2D/puppeteer-table-parser/issues/62) from Tomas2D/dependabot/npm_and_yarn/typescript-eslint/eslint-plugin-5.42.1 [[0b51e76](https://github.com/Tomas2D/puppeteer-table-parser/commit/0b51e7608111b236024fb68f78af3d351c50a022)]
462 | - Bump eslint from 8.26.0 to 8.27.0 [[5ecfef5](https://github.com/Tomas2D/puppeteer-table-parser/commit/5ecfef5b7f862b90295115e5a920ef3b2a479621)]
463 | - Merge pull request [#55](https://github.com/Tomas2D/puppeteer-table-parser/issues/55) from Tomas2D/dependabot/npm_and_yarn/typescript-eslint/parser-5.42.1 [[54edc66](https://github.com/Tomas2D/puppeteer-table-parser/commit/54edc66612be8341a4d08f42110925704450293f)]
464 | - Bump @typescript-eslint/eslint-plugin from 5.42.0 to 5.42.1 [[74dbc4e](https://github.com/Tomas2D/puppeteer-table-parser/commit/74dbc4e040fb17b11940e6ce8bb56d3ee2f6198c)]
465 | - Merge pull request [#60](https://github.com/Tomas2D/puppeteer-table-parser/issues/60) from Tomas2D/dependabot/npm_and_yarn/husky-8.0.2 [[df02d85](https://github.com/Tomas2D/puppeteer-table-parser/commit/df02d853eb5f42f95b1c34fca70d764e113f11f1)]
466 | - Bump jest from 29.2.2 to 29.3.1 [[414dde8](https://github.com/Tomas2D/puppeteer-table-parser/commit/414dde8d7513240d8f65c2dd67db904c5b81fa10)]
467 | - Bump husky from 8.0.1 to 8.0.2 [[99e1619](https://github.com/Tomas2D/puppeteer-table-parser/commit/99e16194ac3af6db93e398723d4b907e43167363)]
468 | - Merge pull request [#57](https://github.com/Tomas2D/puppeteer-table-parser/issues/57) from Tomas2D/dependabot/npm_and_yarn/puppeteer-19.2.2 [[0ce7c27](https://github.com/Tomas2D/puppeteer-table-parser/commit/0ce7c2735398154ace00d40051bb79b36d6edd0d)]
469 | - Bump tsup from 6.3.0 to 6.4.0 [[fa2edc8](https://github.com/Tomas2D/puppeteer-table-parser/commit/fa2edc8b185921d18bd87d101ab1c634940816e0)]
470 | - Bump puppeteer from 19.2.1 to 19.2.2 [[8a81495](https://github.com/Tomas2D/puppeteer-table-parser/commit/8a814953ad161d6f7f4a3384992ae8a15a542198)]
471 | - Bump @typescript-eslint/parser from 5.42.0 to 5.42.1 [[f893c52](https://github.com/Tomas2D/puppeteer-table-parser/commit/f893c525f275b4212ac43521844ffca05c0497b7)]
472 | - Merge pull request [#54](https://github.com/Tomas2D/puppeteer-table-parser/issues/54) from Tomas2D/dependabot/npm_and_yarn/puppeteer-19.2.1 [[055768b](https://github.com/Tomas2D/puppeteer-table-parser/commit/055768bb2acfe328a51ac1040b8327b51a4c1f3b)]
473 | - Bump puppeteer from 19.2.0 to 19.2.1 [[15bf343](https://github.com/Tomas2D/puppeteer-table-parser/commit/15bf343c0b4cb56f86b3d7678d56b586f1f34770)]
474 | - Merge pull request [#53](https://github.com/Tomas2D/puppeteer-table-parser/issues/53) from Tomas2D/dependabot/npm_and_yarn/types/jest-29.2.1 [[d50c02e](https://github.com/Tomas2D/puppeteer-table-parser/commit/d50c02e7fe749ec484fac2021caeb0ffb5a835fe)]
475 | - Bump @types/jest from 29.2.0 to 29.2.1 [[7024a57](https://github.com/Tomas2D/puppeteer-table-parser/commit/7024a57402f0eb9fd8a261e92c8aebd22ff596cc)]
476 | - Merge pull request [#51](https://github.com/Tomas2D/puppeteer-table-parser/issues/51) from Tomas2D/dependabot/npm_and_yarn/typescript-eslint/eslint-plugin-5.42.0 [[b76fe76](https://github.com/Tomas2D/puppeteer-table-parser/commit/b76fe76dda6ad29df4936133b2e7d41569e30dff)]
477 | - Merge pull request [#52](https://github.com/Tomas2D/puppeteer-table-parser/issues/52) from Tomas2D/dependabot/npm_and_yarn/typescript-eslint/parser-5.42.0 [[c1b3ec3](https://github.com/Tomas2D/puppeteer-table-parser/commit/c1b3ec3bd0adb5a032a952845735c36648094756)]
478 | - Bump @typescript-eslint/eslint-plugin from 5.41.0 to 5.42.0 [[eaea731](https://github.com/Tomas2D/puppeteer-table-parser/commit/eaea7312281fda95a167d28cb0d47870509fe087)]
479 | - Bump @typescript-eslint/parser from 5.41.0 to 5.42.0 [[a943646](https://github.com/Tomas2D/puppeteer-table-parser/commit/a9436460115a0f5908308852f9afcd4d0e0cafa4)]
480 | - Merge pull request [#50](https://github.com/Tomas2D/puppeteer-table-parser/issues/50) from Tomas2D/dependabot/npm_and_yarn/puppeteer-19.2.0 [[9ac5caf](https://github.com/Tomas2D/puppeteer-table-parser/commit/9ac5caf481ad2a98f59887c79818948e2b00b4c3)]
481 | - Bump puppeteer from 19.1.2 to 19.2.0 [[88ce736](https://github.com/Tomas2D/puppeteer-table-parser/commit/88ce736a980edd773b2f5634a25de50da2b1a2a6)]
482 | - Merge pull request [#49](https://github.com/Tomas2D/puppeteer-table-parser/issues/49) from Tomas2D/dependabot/npm_and_yarn/puppeteer-19.1.2 [[fb3b9e4](https://github.com/Tomas2D/puppeteer-table-parser/commit/fb3b9e465917245a4af4d2f77c99ae4b5af66d47)]
483 | - Bump puppeteer from 19.1.1 to 19.1.2 [[75da349](https://github.com/Tomas2D/puppeteer-table-parser/commit/75da349aa82b5247a556562400526b87be31c201)]
484 | - Merge pull request [#48](https://github.com/Tomas2D/puppeteer-table-parser/issues/48) from Tomas2D/dependabot/npm_and_yarn/puppeteer-19.1.1 [[a5cdcd1](https://github.com/Tomas2D/puppeteer-table-parser/commit/a5cdcd133e87a7238e991619c553558f594e5eb5)]
485 | - Merge pull request [#47](https://github.com/Tomas2D/puppeteer-table-parser/issues/47) from Tomas2D/dependabot/npm_and_yarn/typescript-eslint/eslint-plugin-5.41.0 [[7688391](https://github.com/Tomas2D/puppeteer-table-parser/commit/76883917c0926620ef63048b61b3fb19739589ed)]
486 | - Merge pull request [#46](https://github.com/Tomas2D/puppeteer-table-parser/issues/46) from Tomas2D/dependabot/npm_and_yarn/typescript-eslint/parser-5.41.0 [[1fc22de](https://github.com/Tomas2D/puppeteer-table-parser/commit/1fc22de66a23a467834a18e5cb78b43a90c71de1)]
487 | - Merge pull request [#45](https://github.com/Tomas2D/puppeteer-table-parser/issues/45) from Tomas2D/dependabot/npm_and_yarn/jest-29.2.2 [[138cc25](https://github.com/Tomas2D/puppeteer-table-parser/commit/138cc25e416a731cd785d8a983dc006d78f2c617)]
488 | - Bump @typescript-eslint/eslint-plugin from 5.40.1 to 5.41.0 [[173e6ff](https://github.com/Tomas2D/puppeteer-table-parser/commit/173e6ff5896867d219af0dc36bd948c96147d893)]
489 | - Bump puppeteer from 19.1.0 to 19.1.1 [[042480b](https://github.com/Tomas2D/puppeteer-table-parser/commit/042480be077e2dfdc27a8637e85517a6c92b94d2)]
490 | - Bump @typescript-eslint/parser from 5.40.1 to 5.41.0 [[c239972](https://github.com/Tomas2D/puppeteer-table-parser/commit/c23997270ee3cce52029110c70f6b30aeb5f00d8)]
491 | - Bump jest from 29.2.1 to 29.2.2 [[9a2d7c7](https://github.com/Tomas2D/puppeteer-table-parser/commit/9a2d7c7a985d2a425a71bc5e49e5f602b4a0513c)]
492 | - Merge pull request [#43](https://github.com/Tomas2D/puppeteer-table-parser/issues/43) from Tomas2D/dependabot/npm_and_yarn/puppeteer-19.1.0 [[47fdac5](https://github.com/Tomas2D/puppeteer-table-parser/commit/47fdac5412697b1ebb531308bc55e90341a3a36e)]
493 | - Merge pull request [#44](https://github.com/Tomas2D/puppeteer-table-parser/issues/44) from Tomas2D/dependabot/npm_and_yarn/eslint-8.26.0 [[a490da5](https://github.com/Tomas2D/puppeteer-table-parser/commit/a490da517309858893539e9ec19db8edccf47ddf)]
494 | - Bump eslint from 8.25.0 to 8.26.0 [[bc1eea8](https://github.com/Tomas2D/puppeteer-table-parser/commit/bc1eea8bb3fd5a60c8d627a6c71c63628b6c07eb)]
495 | - Bump puppeteer from 19.0.0 to 19.1.0 [[0327c15](https://github.com/Tomas2D/puppeteer-table-parser/commit/0327c15a31495bf3d3e5567d21df5f99ae666366)]
496 |
497 |
498 |
499 | ## 2.1.0 (2022-10-22)
500 |
501 | ### Added
502 |
503 | - ✨ Add an option for returning rows as objects [[9ea0aea](https://github.com/Tomas2D/puppeteer-table-parser/commit/9ea0aea03a607d6b5f66ffceda372a0ebb8bdb3b)]
504 |
505 | ### Miscellaneous
506 |
507 | - Merge pull request [#42](https://github.com/Tomas2D/puppeteer-table-parser/issues/42) from Tomas2D/feat/rows-as-objects [[1197bc2](https://github.com/Tomas2D/puppeteer-table-parser/commit/1197bc20aac79b59f2c012897d99f4c9cf67cb70)]
508 |
509 |
510 |
511 | ## 2.0.0 (2022-10-20)
512 |
513 | ### Breaking change
514 | - no more `default` export, only named one
515 |
516 | ### Added
517 |
518 | - ✅ Add a test case for large HTML table [[565fad3](https://github.com/Tomas2D/puppeteer-table-parser/commit/565fad3a5840763cadb9c5e8fd54c8e2074aa1d8)]
519 |
520 | ### Changed
521 |
522 | - 💬 Update README [[a2494be](https://github.com/Tomas2D/puppeteer-table-parser/commit/a2494be41d163ac83f2bf95ea45644e29a1a488a)]
523 | - 📌 Pin Node version to 16.17.1 [[0553428](https://github.com/Tomas2D/puppeteer-table-parser/commit/05534286423f7d7cb0eb576bebff7f0219522dbc)]
524 | - ⬆️ Jest 29.x, Puppeteer 19.x [[4955aae](https://github.com/Tomas2D/puppeteer-table-parser/commit/4955aae2f7da2d489ab6c3ffd103b1e4f4f62699)]
525 |
526 | ### Miscellaneous
527 |
528 | - Merge pull request [#41](https://github.com/Tomas2D/puppeteer-table-parser/issues/41) from Tomas2D/feat/esm-cjs-bundle [[c8e85f3](https://github.com/Tomas2D/puppeteer-table-parser/commit/c8e85f35711b6d94338daf9c187e8a39e32b43c2)]
529 | - 📦 Support ESM/CJS bundles [[a69e123](https://github.com/Tomas2D/puppeteer-table-parser/commit/a69e123900011fc4f6cdfe0913b53ff6bd9abc4d)]
530 | - 👷 Add Node version matrix to pipeline [[96b4e46](https://github.com/Tomas2D/puppeteer-table-parser/commit/96b4e461d0c5300ebca03f02108a9d29aec7555f)]
531 | - Merge pull request [#40](https://github.com/Tomas2D/puppeteer-table-parser/issues/40) from Tomas2D/dependabot/npm_and_yarn/jest-29.2.1 [[7512abe](https://github.com/Tomas2D/puppeteer-table-parser/commit/7512abed21c06d4362966180554da7293c89bbb3)]
532 | - Bump jest from 29.2.0 to 29.2.1 [[54566c3](https://github.com/Tomas2D/puppeteer-table-parser/commit/54566c322d04f0645623ad664f1f11535530880e)]
533 | - Merge pull request [#39](https://github.com/Tomas2D/puppeteer-table-parser/issues/39) from Tomas2D/dependabot/npm_and_yarn/typescript-eslint/parser-5.40.1 [[3f6a787](https://github.com/Tomas2D/puppeteer-table-parser/commit/3f6a78787ca20591837207c64600be8078b29037)]
534 | - Merge pull request [#38](https://github.com/Tomas2D/puppeteer-table-parser/issues/38) from Tomas2D/dependabot/npm_and_yarn/typescript-eslint/eslint-plugin-5.40.1 [[37b98f2](https://github.com/Tomas2D/puppeteer-table-parser/commit/37b98f2d665b26db76d43462a6f448e082511b7c)]
535 | - Bump @typescript-eslint/parser from 5.40.0 to 5.40.1 [[1163ccd](https://github.com/Tomas2D/puppeteer-table-parser/commit/1163ccd36978587d01d9f70cf01351c0cd77945c)]
536 | - Bump @typescript-eslint/eslint-plugin from 5.40.0 to 5.40.1 [[8f5378c](https://github.com/Tomas2D/puppeteer-table-parser/commit/8f5378c3cb71046d7ceadba12a425788042fa1dc)]
537 | - Merge pull request [#36](https://github.com/Tomas2D/puppeteer-table-parser/issues/36) from Tomas2D/dependabot/npm_and_yarn/typescript-eslint/parser-5.40.0 [[fd45b85](https://github.com/Tomas2D/puppeteer-table-parser/commit/fd45b858fd264cb76ea0c8f83b6ff332b870cc52)]
538 | - Merge pull request [#33](https://github.com/Tomas2D/puppeteer-table-parser/issues/33) from Tomas2D/dependabot/npm_and_yarn/eslint-8.25.0 [[3eabade](https://github.com/Tomas2D/puppeteer-table-parser/commit/3eabade42144fa6dd78f318ade2f94e3163c5360)]
539 | - Merge pull request [#35](https://github.com/Tomas2D/puppeteer-table-parser/issues/35) from Tomas2D/dependabot/npm_and_yarn/typescript-eslint/eslint-plugin-5.40.0 [[7a622fb](https://github.com/Tomas2D/puppeteer-table-parser/commit/7a622fb5b8017a423bea643fbf1b2f24368264cf)]
540 | - Bump eslint from 8.24.0 to 8.25.0 [[7571254](https://github.com/Tomas2D/puppeteer-table-parser/commit/7571254e47e355482f98d52c69ed82b0b565d95b)]
541 | - Bump @typescript-eslint/parser from 5.39.0 to 5.40.0 [[6a3e092](https://github.com/Tomas2D/puppeteer-table-parser/commit/6a3e0921120e0fd1fa1d912460599ac3920f7f56)]
542 | - Bump @typescript-eslint/eslint-plugin from 5.39.0 to 5.40.0 [[97b5593](https://github.com/Tomas2D/puppeteer-table-parser/commit/97b5593934ac265111c13d1c537f6c543351c32d)]
543 | - Merge pull request [#34](https://github.com/Tomas2D/puppeteer-table-parser/issues/34) from Tomas2D/dependabot/npm_and_yarn/express-4.18.2 [[212a49a](https://github.com/Tomas2D/puppeteer-table-parser/commit/212a49a310e4cf476ef60d914dca1caba81741d0)]
544 | - Bump express from 4.18.1 to 4.18.2 [[9a52e81](https://github.com/Tomas2D/puppeteer-table-parser/commit/9a52e81e037c11f21bf20d035d15b522900d092c)]
545 |
546 |
547 |
548 | ## 1.9.0 (2022-10-08)
549 |
550 | ### Added
551 |
552 | - ✨ Add custom aggregations support [[5ff578c](https://github.com/Tomas2D/puppeteer-table-parser/commit/5ff578cf6d4bb02061fe38e54b76f021332c5f9a)]
553 |
554 | ### Changed
555 |
556 | - ⚡ Improve performance by aggregating pipeline transformations [[dd5eb36](https://github.com/Tomas2D/puppeteer-table-parser/commit/dd5eb3624b06c2733a1dd1edcbd16726a3c29885)]
557 |
558 | ### Miscellaneous
559 |
560 | - Merge pull request [#30](https://github.com/Tomas2D/puppeteer-table-parser/issues/30) from Tomas2D/dependabot/npm_and_yarn/typescript-4.8.4 [[b01417b](https://github.com/Tomas2D/puppeteer-table-parser/commit/b01417bbb0936deecf1d88876d140ee00f53d3d7)]
561 | - 📝 Mention rowValidationPolicy in README [[f61c599](https://github.com/Tomas2D/puppeteer-table-parser/commit/f61c599e4e886a1fbe4e3be5c7744b794376bafb)]
562 | - Bump typescript from 4.8.3 to 4.8.4 [[cf8998c](https://github.com/Tomas2D/puppeteer-table-parser/commit/cf8998c84662d177a53a0f9a5d913b1cdb66d1c4)]
563 |
564 |
565 |
566 | ## 1.8.0 (2022-10-05)
567 |
568 | ### Added
569 |
570 | - ✨ Add row structure validator [[2e50f49](https://github.com/Tomas2D/puppeteer-table-parser/commit/2e50f49d4f6b6826b6936186fe0141a62002c917)]
571 |
572 | ### Changed
573 |
574 | - ⬆️ Upgrade ESLint [[25e5a8d](https://github.com/Tomas2D/puppeteer-table-parser/commit/25e5a8dccfd6a65a6597f387cf05e3861bfc587c)]
575 |
576 | ### Fixed
577 |
578 | - 🐛 Handles multiple extra columns with implicit position [[a3960e5](https://github.com/Tomas2D/puppeteer-table-parser/commit/a3960e54b9f0545d5d55c4456cba590f9484fe9c)]
579 |
580 | ### Miscellaneous
581 |
582 | - Merge pull request [#29](https://github.com/Tomas2D/puppeteer-table-parser/issues/29) from Tomas2D/dependabot/npm_and_yarn/puppeteer-18.0.5 [[a35e7c9](https://github.com/Tomas2D/puppeteer-table-parser/commit/a35e7c96b5a9959a132c87a4c9b930384171b331)]
583 | - Bump puppeteer from 18.0.4 to 18.0.5 [[d46ab26](https://github.com/Tomas2D/puppeteer-table-parser/commit/d46ab264b63f5e20aa537023b272d9a6ea97e3d4)]
584 | - Merge pull request [#28](https://github.com/Tomas2D/puppeteer-table-parser/issues/28) from Tomas2D/dependabot/npm_and_yarn/puppeteer-18.0.4 [[9cc757e](https://github.com/Tomas2D/puppeteer-table-parser/commit/9cc757ec3c83a453f3b69d907025e3425c93505c)]
585 | - Bump puppeteer from 18.0.3 to 18.0.4 [[76c09da](https://github.com/Tomas2D/puppeteer-table-parser/commit/76c09da9e7ffae8e77e3514dfd9ea8cafe89a6b3)]
586 | - Merge pull request [#27](https://github.com/Tomas2D/puppeteer-table-parser/issues/27) from Tomas2D/dependabot/npm_and_yarn/puppeteer-18.0.3 [[951905b](https://github.com/Tomas2D/puppeteer-table-parser/commit/951905b0cfd70a7cdf289015b3af6d74b2c93be0)]
587 | - Bump puppeteer from 17.1.3 to 18.0.3 [[7fce5a5](https://github.com/Tomas2D/puppeteer-table-parser/commit/7fce5a5ba0e07c76297defce643e12fe5c857e33)]
588 | - Merge pull request [#26](https://github.com/Tomas2D/puppeteer-table-parser/issues/26) from Tomas2D/dependabot/npm_and_yarn/types/express-4.17.14 [[de4f86b](https://github.com/Tomas2D/puppeteer-table-parser/commit/de4f86b6341a3d2f0b63311fabfbaf2687f6272c)]
589 | - Bump @types/express from 4.17.13 to 4.17.14 [[f552215](https://github.com/Tomas2D/puppeteer-table-parser/commit/f55221557386c1ec37620bb1cd4c911d8db980ee)]
590 | - Merge pull request [#24](https://github.com/Tomas2D/puppeteer-table-parser/issues/24) from Tomas2D/dependabot/npm_and_yarn/typescript-4.8.3 [[1ac6ab9](https://github.com/Tomas2D/puppeteer-table-parser/commit/1ac6ab971ab9809410655cb81cd6f9092049ffff)]
591 | - Merge pull request [#25](https://github.com/Tomas2D/puppeteer-table-parser/issues/25) from Tomas2D/dependabot/npm_and_yarn/puppeteer-17.1.3 [[9f02d0f](https://github.com/Tomas2D/puppeteer-table-parser/commit/9f02d0fde1cd34bf603f1d668e912b71a621d9f0)]
592 | - Bump puppeteer from 17.1.2 to 17.1.3 [[914732e](https://github.com/Tomas2D/puppeteer-table-parser/commit/914732e659bf4f08ff6ac76e2a61f83c3f345f77)]
593 | - Bump typescript from 4.8.2 to 4.8.3 [[4818638](https://github.com/Tomas2D/puppeteer-table-parser/commit/4818638de48ca2e98528cd2e9e005658289497e1)]
594 |
595 |
596 |
597 | ## 1.7.1 (2022-09-08)
598 |
599 | ### Changed
600 |
601 | - 🔧 Use the newest 16.x Node version [[0b4dd57](https://github.com/Tomas2D/puppeteer-table-parser/commit/0b4dd5702e8df5ba77fdb80a513aec9600deb7d5)]
602 | - ⬆️ Upgrade puppeteer [[94aaf0e](https://github.com/Tomas2D/puppeteer-table-parser/commit/94aaf0ea443aa7b324df10ec7a5e0283c64119c5)]
603 |
604 | ### Miscellaneous
605 |
606 | - 👷 Use node version from .nvmrc [[eb83e14](https://github.com/Tomas2D/puppeteer-table-parser/commit/eb83e149ba2b8570d9b48732d21c961825993708)]
607 | - Merge pull request [#23](https://github.com/Tomas2D/puppeteer-table-parser/issues/23) from Tomas2D/dependabot/npm_and_yarn/puppeteer-17.1.2 [[6a67714](https://github.com/Tomas2D/puppeteer-table-parser/commit/6a67714336f9eb10867be996eefcd3416c4f89fd)]
608 | - Bump puppeteer from 17.1.1 to 17.1.2 [[afd8c24](https://github.com/Tomas2D/puppeteer-table-parser/commit/afd8c24f0fba2c9b1e220cfc703ecc839a29577f)]
609 | - Merge pull request [#22](https://github.com/Tomas2D/puppeteer-table-parser/issues/22) from Tomas2D/dependabot/npm_and_yarn/puppeteer-17.1.1 [[d100655](https://github.com/Tomas2D/puppeteer-table-parser/commit/d1006550e75e4efc45298a86f963834c81575e9e)]
610 | - Bump puppeteer from 17.0.0 to 17.1.1 [[cc55696](https://github.com/Tomas2D/puppeteer-table-parser/commit/cc55696ae6831eb7ca656b24a8df28fc13c282d0)]
611 | - Merge pull request [#20](https://github.com/Tomas2D/puppeteer-table-parser/issues/20) from Tomas2D/dependabot/npm_and_yarn/puppeteer-17.0.0 [[6323698](https://github.com/Tomas2D/puppeteer-table-parser/commit/632369861c754fe666cfb3694afc0c82b45cff92)]
612 | - Bump puppeteer from 16.2.0 to 17.0.0 [[178999a](https://github.com/Tomas2D/puppeteer-table-parser/commit/178999ae46e7efc5f2819609e9c42428e4e1fbc4)]
613 | - Merge pull request [#18](https://github.com/Tomas2D/puppeteer-table-parser/issues/18) from Tomas2D/dependabot/npm_and_yarn/puppeteer-16.2.0 [[5b96ccf](https://github.com/Tomas2D/puppeteer-table-parser/commit/5b96ccf8b48155c3529806001e46737f19970de7)]
614 | - Merge pull request [#19](https://github.com/Tomas2D/puppeteer-table-parser/issues/19) from Tomas2D/dependabot/npm_and_yarn/typescript-4.8.2 [[b6f0c8a](https://github.com/Tomas2D/puppeteer-table-parser/commit/b6f0c8a646fb906533d5e6c7ad8930747998a767)]
615 | - Bump puppeteer from 16.1.1 to 16.2.0 [[9f1bdd9](https://github.com/Tomas2D/puppeteer-table-parser/commit/9f1bdd9e0f7e3b73e828ad61af39715816714b78)]
616 | - Bump typescript from 4.7.4 to 4.8.2 [[5c0adba](https://github.com/Tomas2D/puppeteer-table-parser/commit/5c0adbae6987435654de9b4ae658d73d085ed463)]
617 | - Merge pull request [#17](https://github.com/Tomas2D/puppeteer-table-parser/issues/17) from Tomas2D/dependabot/npm_and_yarn/puppeteer-16.1.1 [[244f412](https://github.com/Tomas2D/puppeteer-table-parser/commit/244f412817e640e505fb8e57cb031bc807f62b63)]
618 | - Bump puppeteer from 16.1.0 to 16.1.1 [[3800d40](https://github.com/Tomas2D/puppeteer-table-parser/commit/3800d40049537c1e4c147d499ea230338a09798b)]
619 | - Merge pull request [#16](https://github.com/Tomas2D/puppeteer-table-parser/issues/16) from Tomas2D/dependabot/npm_and_yarn/puppeteer-16.1.0 [[1cc2564](https://github.com/Tomas2D/puppeteer-table-parser/commit/1cc256475f6bc0deee1430fceb9ac4c7e51df605)]
620 | - Bump puppeteer from 16.0.0 to 16.1.0 [[991c6ad](https://github.com/Tomas2D/puppeteer-table-parser/commit/991c6ad811f579140dcb0aad76321767755c162d)]
621 | - Merge pull request [#15](https://github.com/Tomas2D/puppeteer-table-parser/issues/15) from Tomas2D/dependabot/npm_and_yarn/puppeteer-16.0.0 [[45a7645](https://github.com/Tomas2D/puppeteer-table-parser/commit/45a76454f0690e9af0663d4f4e625dc9e7079740)]
622 | - Bump puppeteer from 15.5.0 to 16.0.0 [[c95cdfa](https://github.com/Tomas2D/puppeteer-table-parser/commit/c95cdfa1f5d343320c158d19d488056d8de440ce)]
623 | - Merge pull request [#14](https://github.com/Tomas2D/puppeteer-table-parser/issues/14) from Tomas2D/dependabot/npm_and_yarn/puppeteer-15.5.0 [[ffcd0d6](https://github.com/Tomas2D/puppeteer-table-parser/commit/ffcd0d6207d78db5e603b1788f1d7c9edeb802b2)]
624 | - Bump puppeteer from 15.4.0 to 15.5.0 [[c23c4f9](https://github.com/Tomas2D/puppeteer-table-parser/commit/c23c4f94634eb37db3b90decb3b41b666c65066f)]
625 | - Merge pull request [#13](https://github.com/Tomas2D/puppeteer-table-parser/issues/13) from Tomas2D/dependabot/npm_and_yarn/puppeteer-15.4.0 [[bd75e42](https://github.com/Tomas2D/puppeteer-table-parser/commit/bd75e4217010817f4718fb8926a2cfffced29012)]
626 | - Bump puppeteer from 15.3.2 to 15.4.0 [[92e5410](https://github.com/Tomas2D/puppeteer-table-parser/commit/92e541036723b1212c43191a52736f09689dbd8a)]
627 |
628 |
629 |
630 | ## 1.7.0 (2022-07-13)
631 |
632 | ### Added
633 |
634 | - ✨ Scroll table into view during parsing [[4661c22](https://github.com/Tomas2D/puppeteer-table-parser/commit/4661c22b444911373575b8d29589871531062456)]
635 |
636 | ### Changed
637 |
638 | - 🔧 Setup Dependabot auto updates [[8124a34](https://github.com/Tomas2D/puppeteer-table-parser/commit/8124a3431309f4fb3c2184ec09323fc0234d2bfe)]
639 |
640 | ### Miscellaneous
641 |
642 | - Merge pull request [#10](https://github.com/Tomas2D/puppeteer-table-parser/issues/10) from Tomas2D/dependabot/npm_and_yarn/lint-staged-13.0.3 [[ae23cbf](https://github.com/Tomas2D/puppeteer-table-parser/commit/ae23cbfd95cf4fff15465d86a7bdb424d60aa149)]
643 | - Merge pull request [#11](https://github.com/Tomas2D/puppeteer-table-parser/issues/11) from Tomas2D/dependabot/npm_and_yarn/typescript-4.7.4 [[10b65ae](https://github.com/Tomas2D/puppeteer-table-parser/commit/10b65aea9ba480bd6095bb91644dc895e3fddc2a)]
644 | - Merge pull request [#8](https://github.com/Tomas2D/puppeteer-table-parser/issues/8) from Tomas2D/dependabot/npm_and_yarn/husky-8.0.1 [[0e3b4b3](https://github.com/Tomas2D/puppeteer-table-parser/commit/0e3b4b3554fa08d0980abe5a89ea3e8d03c4b337)]
645 | - Merge pull request [#9](https://github.com/Tomas2D/puppeteer-table-parser/issues/9) from Tomas2D/dependabot/npm_and_yarn/prettier-2.7.1 [[6cd9faf](https://github.com/Tomas2D/puppeteer-table-parser/commit/6cd9faf56f6cc883bfd91816a1e3d15f4674068e)]
646 | - Merge pull request [#12](https://github.com/Tomas2D/puppeteer-table-parser/issues/12) from Tomas2D/dependabot/npm_and_yarn/puppeteer-15.3.2 [[58875f1](https://github.com/Tomas2D/puppeteer-table-parser/commit/58875f102c1db9636159d396b4f83f6d9b2ec2b0)]
647 | - Bump lint-staged from 10.5.4 to 13.0.3 [[67f34b1](https://github.com/Tomas2D/puppeteer-table-parser/commit/67f34b12e4ea09962099cebd79201556f104cefb)]
648 | - Bump puppeteer from 15.3.1 to 15.3.2 [[4b2a77a](https://github.com/Tomas2D/puppeteer-table-parser/commit/4b2a77a7d8b0e44afaae64f56b4f49e586a5a04b)]
649 | - Bump typescript from 4.6.4 to 4.7.4 [[613c538](https://github.com/Tomas2D/puppeteer-table-parser/commit/613c538380b8dcf795ecce45a7747b8b69933ad9)]
650 | - Bump prettier from 2.6.0 to 2.7.1 [[d47a7e9](https://github.com/Tomas2D/puppeteer-table-parser/commit/d47a7e95f6a86353fd460a68e775dcf717591352)]
651 | - Bump husky from 7.0.4 to 8.0.1 [[931e394](https://github.com/Tomas2D/puppeteer-table-parser/commit/931e39456ebf2ba134650740884a9129722ad2ea)]
652 |
653 |
654 |
655 | ## 1.6.0 (2022-07-06)
656 |
657 | ### Added
658 |
659 | - ✨ Add rows and body selector, refactor codebase, migrate to Node 16 [[70256ba](https://github.com/Tomas2D/puppeteer-table-parser/commit/70256ba377f726d424233a7933756f4e1f7b11b2)]
660 | - ✨ Add custom error classes, refactor settings and exports [[ba9c726](https://github.com/Tomas2D/puppeteer-table-parser/commit/ba9c726f61f15893b57633a67cba7fde7830d19d)]
661 |
662 | ### Fixed
663 |
664 | - 🐛 Fix asynchronous filtering of invalid HTMl elements [[473a69e](https://github.com/Tomas2D/puppeteer-table-parser/commit/473a69e74d08476b2cd55f34cae1d6385ef6afab)]
665 |
666 |
667 |
668 | ## 1.5.1 (2022-07-04)
669 |
670 | ### Changed
671 |
672 | - 🔧 Update repository info in package.json [[edd194d](https://github.com/Tomas2D/puppeteer-table-parser/commit/edd194d1828e82b0d46695f1c37836534723b20e)]
673 |
674 |
675 |
676 | ## 1.5.0 (2022-07-02)
677 |
678 | ### Added
679 |
680 | - ✨ Add support for reverse table traversal [[9cfff80](https://github.com/Tomas2D/puppeteer-table-parser/commit/9cfff8052d9344030ad48143b0b48884eb96f2e8)]
681 |
682 | ### Changed
683 |
684 | - 🔧 Remove JS comments from output [[d9e01d0](https://github.com/Tomas2D/puppeteer-table-parser/commit/d9e01d0d132042793929514b74f7ceda83278713)]
685 |
686 |
687 |
688 | ## 1.4.2 (2022-07-02)
689 |
690 | ### Added
691 |
692 | - ✨ Omit properties from settings with `undefined` value [[65237aa](https://github.com/Tomas2D/puppeteer-table-parser/commit/65237aa15c1b5fefd2aef97b369156b51cdfeb4e)]
693 |
694 | ### Changed
695 |
696 | - 💬 Update README [[56b351a](https://github.com/Tomas2D/puppeteer-table-parser/commit/56b351a8885d3b35284a2b813232da4fb0a6b127)]
697 |
698 | ### Miscellaneous
699 |
700 | - Merge pull request [#7](https://github.com/Tomas2D/puppeteer-table-parser/issues/7) from Tomas2D/dependabot/npm_and_yarn/minimist-1.2.6 [[52003c4](https://github.com/Tomas2D/puppeteer-table-parser/commit/52003c457bf0fe63b2fb78c67f9a277e1455a3a5)]
701 | - Bump minimist from 1.2.5 to 1.2.6 [[565cb1c](https://github.com/Tomas2D/puppeteer-table-parser/commit/565cb1c4a88bf3a48696fb99824fde7bb763bbfc)]
702 |
703 |
704 |
705 | ## 1.4.1 (2022-03-19)
706 |
707 | ### Changed
708 |
709 | - ⬆️ Upgrade dependencies to fix security audit [[d98fc13](https://github.com/Tomas2D/puppeteer-table-parser/commit/d98fc133512f58a6ca3e9d49e51942fabed3afd2)]
710 |
711 |
712 |
713 | ## 1.4.0 (2022-01-07)
714 |
715 | ### Added
716 |
717 | - ✨ Add support for optional columns [[ae6ea88](https://github.com/Tomas2D/puppeteer-table-parser/commit/ae6ea8829d2ad7d883056c35a149066712ca1896)]
718 |
719 | ### Changed
720 |
721 | - 💬 Update error message with duplicated column name [[0f16626](https://github.com/Tomas2D/puppeteer-table-parser/commit/0f166268fb3709d7edb2c5fc9da6ef2d3858da51)]
722 |
723 |
724 |
725 | ## 1.3.0 (2021-12-13)
726 |
727 | ### Added
728 |
729 | - ✨ Add support for returning row values as array [[4dbd821](https://github.com/Tomas2D/puppeteer-table-parser/commit/4dbd821bcf1b3f85f74496e5d1cfd7aa16827a84)]
730 |
731 | ### Changed
732 |
733 | - 🔧 Run prettier on lint-staged [[1e9fdfe](https://github.com/Tomas2D/puppeteer-table-parser/commit/1e9fdfeb1a59360bd2a98a1d349574d3f552ecbd)]
734 |
735 | ### Miscellaneous
736 |
737 | - 📝 Update README [[1eeeb98](https://github.com/Tomas2D/puppeteer-table-parser/commit/1eeeb98e19b06027108a5eb2f82fa75527e3b764)]
738 | - 💡 Remove unused comments [[5451be3](https://github.com/Tomas2D/puppeteer-table-parser/commit/5451be3ed63252cfe52f6139ebf8ad1ff3c6dbde)]
739 |
740 |
741 |
742 | ## 1.2.0 (2021-11-04)
743 |
744 | ### Added
745 |
746 | - ✨ Handle duplicated column names [[1dfc2ac](https://github.com/Tomas2D/puppeteer-table-parser/commit/1dfc2ace2f6fda271acb4f24fcbfa4f04fb6c840)]
747 | - ✅ Fix launching Puppeteer in Jest TS needs to be fixed on 4.3.x [[061fe87](https://github.com/Tomas2D/puppeteer-table-parser/commit/061fe871b9146a4544c850a5f27b5665f2c4b962)]
748 |
749 | ### Changed
750 |
751 | - ♻️ Separate logic for mutating row values Add rowTransform function to options [[f380d3d](https://github.com/Tomas2D/puppeteer-table-parser/commit/f380d3daf0f4f90f603dec21b16d1f0964dc90e2)]
752 | - 🔧 Update eslint config [[d08fecf](https://github.com/Tomas2D/puppeteer-table-parser/commit/d08fecf4a7bebb2d4a1b4db9ac50ff586bf2daf2)]
753 |
754 |
755 |
756 | ## 1.1.5 (2021-10-15)
757 |
758 | ### Added
759 |
760 | - ✨ Add getColumnIndex support to colParser [[c4cef1a](https://github.com/Tomas2D/puppeteer-table-parser/commit/c4cef1a98660983fcec2589365b5a29090b4ae70)]
761 |
762 |
763 |
764 | ## 1.1.4 (2021-10-11)
765 |
766 | ### Added
767 |
768 | - ✅ Run test in non-headless mode [[887eb2c](https://github.com/Tomas2D/puppeteer-table-parser/commit/887eb2c7b399a1f87f9dfd70c0d44a10da21c841)]
769 |
770 | ### Changed
771 |
772 | - ⬆️ Upgrade deps to fix audit [[a0486ed](https://github.com/Tomas2D/puppeteer-table-parser/commit/a0486edfb3f06d6bd4436183a6cd01c7e688cc63)]
773 | - ⬆️ Upgrade deps to pass audit [[d6adf53](https://github.com/Tomas2D/puppeteer-table-parser/commit/d6adf53fd22c308692e682b55256e6a7ca4c920e)]
774 | - ⬆️ Upgrade deps [[a73ecbc](https://github.com/Tomas2D/puppeteer-table-parser/commit/a73ecbc43dc430e152a51b083fdf890b650de5f2)]
775 | - ⬆️ Upgrade deps [[8f3bc03](https://github.com/Tomas2D/puppeteer-table-parser/commit/8f3bc032cca092149fed962f1b572271070fdfaf)]
776 |
777 | ### Fixed
778 |
779 | - 💚 Disable running tests in CI [[aa9b073](https://github.com/Tomas2D/puppeteer-table-parser/commit/aa9b073f0d106b5fefe6b2268fbc851857f25793)]
780 |
781 | ### Security
782 |
783 | - 🔒 Fix prototype Pollution in set-value [[a737edf](https://github.com/Tomas2D/puppeteer-table-parser/commit/a737edf63effc21b0f9778f4a1f7d7c5dc780ca1)]
784 |
785 | ### Miscellaneous
786 |
787 | - 👷 Add GitHub workflow [[4b59fb9](https://github.com/Tomas2D/puppeteer-table-parser/commit/4b59fb9ce3a71c4bf85ec997da76a980f13855ac)]
788 |
789 |
790 |
791 | ## 1.1.3 (2021-08-09)
792 |
793 | ### Changed
794 |
795 | - ⬆️ Update dependencies [[3014809](https://github.com/Tomas2D/puppeteer-table-parser/commit/3014809fce5279d5676b067526ffe74b89c04eb7)]
796 | - ⬆️ Bump browserslist from 4.16.3 to 4.16.7 [[77c73fe](https://github.com/Tomas2D/puppeteer-table-parser/commit/77c73fe1d84f08cba6089e567da692e992dadf62)]
797 | - ⬆️ Bump ssri from 6.0.1 to 6.0.2 [[8a1ad0b](https://github.com/Tomas2D/puppeteer-table-parser/commit/8a1ad0be1a019275011a130e485904e3b79ac414)]
798 | - ⬆️ Bump ws from 7.4.4 to 7.5.3 [[89bdfda](https://github.com/Tomas2D/puppeteer-table-parser/commit/89bdfda75bce633c467e8d390a6be61c948e8d52)]
799 | - ⬆️ Bump tar from 4.4.13 to 4.4.15 [[a5faafc](https://github.com/Tomas2D/puppeteer-table-parser/commit/a5faafc8aa860b45dc2fb6b58388a8fffbb39fc0)]
800 | - ⬆️ Bump hosted-git-info from 2.8.8 to 2.8.9 [[4e10107](https://github.com/Tomas2D/puppeteer-table-parser/commit/4e10107cac67b834d612cad7255f29a14a6f6456)]
801 |
802 |
803 |
804 | ## 1.1.2 (2021-07-04)
805 |
806 | ### Changed
807 |
808 | - 🔧 Update peer dependencies [[71f0d8e](https://github.com/Tomas2D/puppeteer-table-parser/commit/71f0d8edb89db3014fe7eb5df633c3957f9163e3)]
809 |
810 |
811 |
812 | ## 1.1.1 (2021-06-11)
813 |
814 | ### Changed
815 |
816 | - 🎨 Add export for mergeParserSettings [[43c40e5](https://github.com/Tomas2D/puppeteer-table-parser/commit/43c40e546b08ca85288107785bd01393fed926b7)]
817 |
818 |
819 |
820 | ## 1.1.0 (2021-03-20)
821 |
822 | ### Added
823 |
824 | - ✅ Add test for merger util [[12126a1](https://github.com/Tomas2D/puppeteer-table-parser/commit/12126a1f35dd695802a2877f3b03987eee68c655)]
825 | - ✨ Add merger parser settings util [[a7c5f5f](https://github.com/Tomas2D/puppeteer-table-parser/commit/a7c5f5f60c1b2c5d67ec1fbb66b4a126e6704daa)]
826 |
827 | ### Changed
828 |
829 | - 💬 Update README [[bb4bf5e](https://github.com/Tomas2D/puppeteer-table-parser/commit/bb4bf5e9af647131b33b17f530b24c3b9e9d621d)]
830 |
831 |
832 |
833 | ## 1.0.3 (2021-03-20)
834 |
835 | ### Fixed
836 |
837 | - 💚 Update package.json to correct publishing [[2aaa3e2](https://github.com/Tomas2D/puppeteer-table-parser/commit/2aaa3e2f5564f902d9a989bb2a3bd49ea2660cf2)]
838 |
839 |
840 |
841 | ## 1.0.2 (2021-03-19)
842 |
843 | ### Changed
844 |
845 | - 🔧 Update package.json scripts [[aa3b6e3](https://github.com/Tomas2D/puppeteer-table-parser/commit/aa3b6e3fd5a80613154d9ad32081f8b1f65fc040)]
846 | - 🔧 Update build script [[7796494](https://github.com/Tomas2D/puppeteer-table-parser/commit/77964940840ddea7683b9ffabb0686c56010116b)]
847 |
848 |
849 |
850 | ## 1.0.0 (2021-03-19)
851 |
852 | ### Added
853 |
854 | - ✅ Update advanced test [[1b99973](https://github.com/Tomas2D/puppeteer-table-parser/commit/1b999736cd29fac491fab3c482995badc99de5f2)]
855 | - ✅ Add tests [[60401c1](https://github.com/Tomas2D/puppeteer-table-parser/commit/60401c147dd061297f623af8a2fc3d0993eb2088)]
856 | - 🎉 Initial commit [[f5b90d3](https://github.com/Tomas2D/puppeteer-table-parser/commit/f5b90d366383e061ad9d149837574ed06a5109ba)]
857 |
858 | ### Changed
859 |
860 | - 💬 Update README [[888acda](https://github.com/Tomas2D/puppeteer-table-parser/commit/888acda89685274df81acbc12f5606f767f60c24)]
861 | - ♻️ Update alg. to work correct with complex queries [[e70299f](https://github.com/Tomas2D/puppeteer-table-parser/commit/e70299fbbd0623e5f3706e869459df83fd2773e3)]
862 |
863 | ### Miscellaneous
864 |
865 | - 📝 Update README.md [[e284d88](https://github.com/Tomas2D/puppeteer-table-parser/commit/e284d88175e3ccf2d585061f8cd19a54a80dc9a8)]
866 | - ✨ Add base code structure [[3c6c0e9](https://github.com/Tomas2D/puppeteer-table-parser/commit/3c6c0e94189b9a40da6c7f1e9029d0905dd3a2dc)]
867 |
868 |
869 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) [year] [fullname]
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # 🕸 🕷 puppeteer-table-parser
2 |
3 | Library to make parsing website tables much easier!
4 | When you are using `puppeteer` for scrapping websites and web application, you will find out that parsing tables consistently is not that easy.
5 | This library brings you abstraction between `puppeteer` and `page context`.
6 |
7 | ## This library solves the following issues:
8 |
9 | - ✨ Parsing columns by their name.
10 | - ✨ Respect the defined order of columns.
11 | - ✨ Appending custom columns with custom data.
12 | - ✨ Custom sanitization of data in cells.
13 | - ✨ Group and Aggregate data by your own function.
14 | - ✨ Merge data from two independent tables into one structure.
15 | - ✨ Handles invalid HTML structure.
16 | - ✨ Retrieve results as CSV or array of plain JS objects.
17 | - ✨ And much more!
18 |
19 | ## Installation
20 |
21 | ```shell
22 | yarn add puppeteer-table-parser
23 | ```
24 | ```shell
25 | npm install puppeteer-table-parser
26 | ```
27 |
28 | ```typescript
29 | // CommonJS
30 | const { tableParser } = require('puppeteer-table-parser')
31 |
32 | // ESM / Typescript
33 | import { tableParser } from 'puppeteer-table-parser'
34 | ```
35 |
36 | ## API
37 |
38 | ```typescript
39 | interface ParserSettings {
40 | selector: string; // CSS selector
41 | allowedColNames: Record; // key = input name, value = output name)
42 |
43 | headerRowsSelector?: string | null; // (default: 'thead tr', null ignores table's header selection)
44 | headerRowsCellSelector?: string; // (default: 'td,th')
45 | bodyRowsSelector?: string; // (default: 'tbody tr')
46 | bodyRowsCellSelector?: string; // (default: 'td')
47 | reverseTraversal?: boolean // (default: false)
48 | temporaryColNames?: string[]; // (default: [])
49 | extraCols?: ExtraCol[]; // (default: [])
50 | withHeader?: boolean; // (default: true)
51 | csvSeparator?: string; // (default: ';')
52 | newLine?: string; // (default: '\n')
53 | rowValidationPolicy?: RowValidationPolicy; // (default: 'NON_EMPTY')
54 | groupBy?: {
55 | cols: string[];
56 | handler?: (rows: string[][], getColumnIndex: GetColumnIndexType) => string[];
57 | }
58 | rowValidator: (
59 | row: string[],
60 | getColumnIndex: GetColumnIndexType,
61 | rowIndex: number,
62 | rows: Readonly,
63 | ) => boolean;
64 | rowTransform?: (row: string[], getColumnIndex: GetColumnIndexType) => void;
65 | asArray?: boolean; // (default: false)
66 | rowValuesAsArray?: boolean; // (default: false)
67 | rowValuesAsObject?: boolean; // (default: false)
68 | colFilter?: (elText: string[], index: number) => string; // (default: (txt: string) => txt.join(' '))
69 | colParser?: (value: string, formattedIndex: number, getColumnIndex: GetColumnIndexType) => string; // (default: (txt: string) => txt.trim())
70 | optionalColNames?: string[]; // (default: [])
71 | };
72 | ```
73 |
74 | ## Parsing workflow
75 |
76 | 1. Find table(s) by provided CSS selector.
77 | 2. Find associated columns by applying `colFilter` on their text and verify their count.
78 | 3. Filter rows based on `rowValidationPolicy`
79 | 4. Add extra columns specified in `extraCols` property in settings.
80 | 5. Run `rowValidator` function for every table row.
81 | 6. Run `colParser` for every cell in a row.
82 | 7. Run `rowTransform` function for each row.
83 | 8. Group results into buckets (`groupBy.cols`) property and pick the aggregated rows.
84 | 9. Add processed row to a temp array result.
85 | 10. Add `header` column if `withHeader` property is `true`.
86 | 11. Merge partial results and return them.
87 |
88 | ## Examples
89 |
90 | > All data came from the HTML page, which you can find in `test/assets/1.html`.
91 |
92 | **Basic example** (the simple table where we want to parse three columns without editing)
93 |
94 | ```typescript
95 | import { tableParser } from 'puppeteer-table-parser'
96 |
97 | await tableParser(page, {
98 | selector: 'table',
99 | allowedColNames: {
100 | 'Car Name': 'car',
101 | 'Horse Powers': 'hp',
102 | 'Manufacture Year': 'year',
103 | },
104 | });
105 | ```
106 |
107 | ```csv
108 | car;hp;year
109 | Audi S5;332;2015
110 | Alfa Romeo Giulia;500;2020
111 | BMW X3;215;2017
112 | Skoda Octavia;120;2012
113 | ```
114 |
115 | **Basic example** with custom column name parsing:
116 |
117 | ```typescript
118 | import { tableParser } from 'puppeteer-table-parser'
119 |
120 | await tableParser(page, {
121 | selector: 'table',
122 | colFilter: (value: string[]) => {
123 | return value.join(' ').replace(' ', '-').toLowerCase();
124 | },
125 | colParser: (value: string) => {
126 | return value.trim();
127 | },
128 | allowedColNames: {
129 | 'car-name': 'car',
130 | 'horse-powers': 'hp',
131 | 'manufacture-year': 'year',
132 | },
133 | })
134 | ```
135 |
136 | ```csv
137 | car;hp;year
138 | Audi S5;332;2015
139 | Alfa Romeo Giulia;500;2020
140 | BMW X3;215;2017
141 | Skoda Octavia;120;2012
142 | ```
143 |
144 | **Basic example** with row validation and using temporary column.
145 |
146 | ```typescript
147 | import { tableParser } from 'puppeteer-table-parser'
148 |
149 | await tableParser(page, {
150 | selector: 'table',
151 | allowedColNames: {
152 | 'Car Name': 'car',
153 | 'Manufacture Year': 'year',
154 | 'Horse Powers': 'hp',
155 | },
156 | temporaryColNames: ['Horse Powers'],
157 | rowValidator: (row: string[], getColumnIndex) => {
158 | const powerIndex = getColumnIndex('hp');
159 | return Number(row[powerIndex]) < 250;
160 | },
161 | });
162 | ```
163 |
164 | ```csv
165 | car;year
166 | BMW X3;2017
167 | Skoda Octavia;2012
168 | ```
169 |
170 | **Advanced example:**
171 |
172 | Uses custom temporary column for filtering. It uses an extra column with custom
173 | position to be filled on a fly.
174 |
175 | ```typescript
176 | import { tableParser } from 'puppeteer-table-parser'
177 |
178 | await tableParser(page, {
179 | selector: 'table',
180 | allowedColNames: {
181 | 'Manufacture Year': 'year',
182 | 'Horse Powers': 'hp',
183 | 'Car Name': 'car',
184 | },
185 | temporaryColNames: ['Horse Powers'],
186 | extraCols: [
187 | {
188 | colName: 'favorite',
189 | data: '',
190 | position: 0,
191 | },
192 | ],
193 | rowValidator: (row: string[], getColumnIndex) => {
194 | const horsePowerIndex = getColumnIndex('hp');
195 | return Number(row[horsePowerIndex]) > 150;
196 | },
197 | rowTransform: (row: string[], getColumnIndex) => {
198 | const nameIndex = getColumnIndex('car');
199 | const favoriteIndex = getColumnIndex('favorite');
200 |
201 | if (row[nameIndex].includes('Alfa Romeo')) {
202 | row[favoriteIndex] = 'YES';
203 | } else {
204 | row[favoriteIndex] = 'NO';
205 | }
206 | },
207 | asArray: false,
208 | rowValuesAsArray: false
209 | });
210 | ```
211 |
212 | ```csv
213 | favorite;year;car
214 | NO;2015;Audi S5
215 | YES;2020;Alfa Romeo Giulia
216 | NO;2017;BMW X3
217 | ```
218 |
219 | **Optional columns**
220 |
221 | Sometimes you can be in a situation where some if
222 | your columns are desired, but they are not available in a table.
223 | You can easily add an exception for them via `optionalColNames` property.
224 |
225 | ```typescript
226 | import { tableParser } from 'puppeteer-table-parser'
227 |
228 | await tableParser(page, {
229 | selector: 'table',
230 | allowedColNames: {
231 | 'Car Name': 'car',
232 | 'Rating': 'rating',
233 | },
234 | optionalColNames: ['rating']
235 | });
236 | ```
237 |
238 | **Grouping and Aggregating**
239 | ```typescript
240 | import { tableParser } from 'puppeteer-table-parser'
241 |
242 | await tableParser(page, {
243 | selector: '#my-table',
244 | allowedColNames: {
245 | 'Employee Name': 'name',
246 | 'Age': 'age',
247 | },
248 | groupBy: {
249 | cols: ['name'],
250 | handler: (rows: string[][], getColumnIndex) => {
251 | const ageIndex = getColumnIndex('age');
252 |
253 | // select one with the minimal age
254 | return rows.reduce((previous, current) =>
255 | previous[ageIndex] < current[ageIndex] ? previous : current,
256 | );
257 | },
258 | }
259 | });
260 | ```
261 |
262 | For more, look at the `test` folder! 🙈
263 |
264 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "puppeteer-table-parser",
3 | "description": "Library to make parsing website tables much easier!",
4 | "keywords": [
5 | "puppeteer",
6 | "puppeteer table parser",
7 | "parsing html tables"
8 | ],
9 | "version": "2.2.0",
10 | "type": "module",
11 | "main": "./dist/index.cjs",
12 | "module": "./dist/index.js",
13 | "types": "./dist/index.d.ts",
14 | "exports": {
15 | ".": {
16 | "require": "./dist/index.cjs",
17 | "default": "./dist/index.js",
18 | "import": "./dist/index.js"
19 | }
20 | },
21 | "files": [
22 | "dist"
23 | ],
24 | "homepage": "https://github.com/Tomas2D/puppeteer-table-parser#readme",
25 | "repository": {
26 | "type": "git",
27 | "url": "git+https://github.com/Tomas2D/puppeteer-table-parser.git"
28 | },
29 | "bugs": {
30 | "url": "https://github.com/Tomas2D/puppeteer-table-parser/issues"
31 | },
32 | "author": "Tomáš Dvořák ",
33 | "license": "MIT",
34 | "private": false,
35 | "scripts": {
36 | "build": "rm -Rf dist; tsc --noEmit --project tsconfig.build.json && tsup",
37 | "watch": "yarn build -- --watch src",
38 | "lint": "eslint \"{src,test}/**/*.ts\" --fix",
39 | "format": "prettier --write \"src/**/*.ts\"",
40 | "changelog": "npx gitmoji-changelog",
41 | "release": "yarn version",
42 | "version": "yarn changelog && code --wait CHANGELOG.md && git add README.md CHANGELOG.md",
43 | "prepublishOnly": "yarn build",
44 | "test": "jest"
45 | },
46 | "peerDependencies": {
47 | "puppeteer": ">=10.0.0"
48 | },
49 | "devDependencies": {
50 | "@types/express": "^5.0.0",
51 | "@types/jest": "^29.1.2",
52 | "@typescript-eslint/eslint-plugin": "^5.39.0",
53 | "@typescript-eslint/parser": "^5.39.0",
54 | "eslint": "^8.24.0",
55 | "eslint-config-prettier": "^9.0.0",
56 | "express": "^4.18.1",
57 | "husky": "^8.0.1",
58 | "jest": "^29.2.0",
59 | "lint-staged": "^14.0.0",
60 | "prettier": "^3.0.1",
61 | "puppeteer": "^21.0.1",
62 | "ts-jest": "^29.0.3",
63 | "tsup": "^7.1.0",
64 | "typescript": "^5.0.4"
65 | },
66 | "resolutions": {
67 | "set-value": ">=4.0.1"
68 | },
69 | "jest": {
70 | "preset": "ts-jest",
71 | "moduleFileExtensions": [
72 | "js",
73 | "json",
74 | "ts"
75 | ],
76 | "testTimeout": 15000,
77 | "testRegex": ".test.ts$",
78 | "transform": {
79 | "^.+\\.(t|j)s$": "ts-jest"
80 | },
81 | "testEnvironment": "node"
82 | },
83 | "husky": {
84 | "hooks": {
85 | "pre-commit": "lint-staged"
86 | }
87 | },
88 | "lint-staged": {
89 | "*.{js,ts,tsx}": [
90 | "eslint --fix",
91 | "prettier --write"
92 | ]
93 | }
94 | }
95 |
--------------------------------------------------------------------------------
/scripts/fix-gitmoji-changelog-node-preset:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | # Patching gitmoji-changelog preset is needed from two reasons:
4 | # 1. There is a bug at usage of read-pkg-up (https://github.com/frinyvonnick/gitmoji-changelog/pull/192)
5 | # 2. Tool currently does not support monorepos
6 | patch --forward --silent node_modules/gitmoji-changelog/src/presets/node.js scripts/fix-gitmoji-preset.patch
7 |
--------------------------------------------------------------------------------
/scripts/fix-gitmoji-preset.patch:
--------------------------------------------------------------------------------
1 | 5c6,7
2 | < const packageInfo = await readPkgUp()
3 | ---
4 | > const cwd = require('path').resolve(__dirname, '../../../../packages/lokse');
5 | > const packageInfo = await readPkgUp({cwd })
6 | 7c9
7 | < if (!packageInfo.pkg) throw Error('Empty package.json')
8 | ---
9 | > if (!packageInfo.packageJson) throw Error('Empty package.json')
10 | 10,12c12,14
11 | < name: packageInfo.pkg.name,
12 | < version: packageInfo.pkg.version,
13 | < description: packageInfo.pkg.description,
14 | ---
15 | > name: packageInfo.packageJson.name,
16 | > version: packageInfo.packageJson.version,
17 | > description: packageInfo.packageJson.description,
18 |
--------------------------------------------------------------------------------
/src/aggregations.ts:
--------------------------------------------------------------------------------
1 | import { GetColumnIndexType, GroupByOptions } from './types';
2 |
3 | const takeFirstHandler = (rows: string[][]) => rows[0];
4 |
5 | export function groupBy(
6 | rows: string[][],
7 | { cols, handler = takeFirstHandler }: GroupByOptions,
8 | getColumnIndex: GetColumnIndexType,
9 | ): string[][] {
10 | const rowsByKey = new Map();
11 |
12 | rows.forEach((row) => {
13 | const key = cols.map((col) => row[getColumnIndex(col)]).join('-');
14 | if (!rowsByKey.has(key)) {
15 | rowsByKey.set(key, []);
16 | }
17 | rowsByKey.get(key)!.push(row);
18 | });
19 |
20 | return Array.from(rowsByKey.values()).map((rows) => {
21 | if (rows.length > 1) {
22 | return handler(rows, getColumnIndex);
23 | }
24 | return rows[0];
25 | });
26 | }
27 |
--------------------------------------------------------------------------------
/src/errors.ts:
--------------------------------------------------------------------------------
1 | export class GeneralError extends Error {}
2 |
3 | export class NoTablesFoundError extends GeneralError {}
4 |
5 | export class InvalidSettingsError extends GeneralError {}
6 |
7 | export class MissingRequiredColumnsError extends GeneralError {}
8 |
9 | export class InvalidColumnError extends GeneralError {}
10 |
--------------------------------------------------------------------------------
/src/helpers.ts:
--------------------------------------------------------------------------------
1 | import type { ExtraCol, ExtraColsMapper } from './types';
2 | import type { FullParserSettings } from './types';
3 | import { ElementHandle } from 'puppeteer';
4 | import { InvalidColumnError, MissingRequiredColumnsError } from './errors';
5 |
6 | export const identity = (value: T): T => value;
7 |
8 | export const extraColsMapperFactory = (extraCols: ExtraCol[]): ExtraColsMapper => {
9 | if (extraCols.length === 0) {
10 | return identity;
11 | }
12 |
13 | const withPos = extraCols
14 | .filter((extraCol): extraCol is Required => extraCol.position !== undefined)
15 | .sort((a, b) => {
16 | return a.position! - b.position!;
17 | });
18 |
19 | // Append columns without a concrete position
20 | const withoutPos = extraCols.filter((extraCol) => extraCol.position === undefined);
21 |
22 | return (row: string[], key: keyof ExtraCol = 'data') => {
23 | const newRow = row.slice();
24 |
25 | withPos.forEach((extraCol) => {
26 | newRow.splice(extraCol.position, 0, String(extraCol[key]));
27 | });
28 |
29 | return newRow.concat(withoutPos.map((extraCol) => String(extraCol[key])));
30 | };
31 | };
32 |
33 | export async function getColumnsInfo(
34 | settings: FullParserSettings,
35 | headerRow: ElementHandle,
36 | extraColsMapper: ReturnType,
37 | ) {
38 | const allowedColNamesKeys = Object.keys(settings.allowedColNames);
39 |
40 | // Will be updated during parsing and not found columns will be deleted
41 | const missingColNames = { ...settings.allowedColNames };
42 |
43 | // Sorted by finding which was first visited
44 | // is index in which we traverse the table, second is final position
45 | const allowedIndexes: Record = (
46 | await headerRow.$$eval(
47 | settings.headerRowsCellSelector,
48 | (cells: Element[], newLine: string) => {
49 | return cells.map((cell) => (cell as HTMLTableCellElement).innerText.split(newLine));
50 | },
51 | settings.newLine,
52 | )
53 | ).reduce((acc, text: string[], realIndex: number) => {
54 | const colName = String(settings.colFilter(text, realIndex));
55 |
56 | if (settings.allowedColNames.hasOwnProperty(colName)) {
57 | delete missingColNames[colName];
58 |
59 | const desiredIndex = allowedColNamesKeys.findIndex((key) => key === colName);
60 | Object.assign(acc, { [realIndex]: desiredIndex });
61 | }
62 |
63 | return acc;
64 | }, {});
65 |
66 | const missingRequiredColumns = diffFromSource(
67 | Object.values(missingColNames),
68 | settings.optionalColNames,
69 | );
70 | if (missingRequiredColumns.length > 0) {
71 | console.warn(`Not matched columns are following entries: `, missingRequiredColumns);
72 | throw new MissingRequiredColumnsError(
73 | 'Number of filtered columns does not match to required columns count!',
74 | );
75 | }
76 |
77 | const excludedKeyIndexes: number[] = [];
78 | const colKeyToIndexWithExcluded = new Map();
79 | const colIndexToKeyWithExcluded = new Map();
80 | extraColsMapper(allowedColNamesKeys, 'colName').forEach((key, index) => {
81 | colKeyToIndexWithExcluded.set(key, index);
82 | colIndexToKeyWithExcluded.set(index, key);
83 |
84 | const value = settings.allowedColNames[key] || key;
85 | colKeyToIndexWithExcluded.set(value, index);
86 | colIndexToKeyWithExcluded.set(index, value);
87 |
88 | if (settings.temporaryColNames.includes(key)) {
89 | excludedKeyIndexes.push(index);
90 | }
91 | });
92 |
93 | const getColumnIndex = (colName: string): number => {
94 | const index = colKeyToIndexWithExcluded.get(colName);
95 | if (index === undefined) {
96 | throw new InvalidColumnError(`Invalid column name! '${colName}'`);
97 | }
98 |
99 | return index;
100 | };
101 |
102 | const getColumnName = (colIndex: number) => {
103 | const value = colIndexToKeyWithExcluded.get(colIndex);
104 | if (value === undefined) {
105 | throw new InvalidColumnError(`Column with index '${colIndex}' does not exist!`);
106 | }
107 |
108 | return value;
109 | };
110 |
111 | return {
112 | indexes: {
113 | allowed: allowedIndexes,
114 | excluded: excludedKeyIndexes,
115 | },
116 | missingColNames: Object.values(missingColNames),
117 | getColumnIndex,
118 | getColumnName,
119 | };
120 | }
121 |
122 | export const diffFromSource = (source: T[], target: T[]): T[] => {
123 | return source.filter((x) => !target.includes(x));
124 | };
125 |
126 | export const omitUndefined = >(source: T): Exclude => {
127 | const definedPairs = Object.entries(source).filter(([, val]) => val !== undefined);
128 | return Object.fromEntries(definedPairs) as Exclude;
129 | };
130 |
--------------------------------------------------------------------------------
/src/index.ts:
--------------------------------------------------------------------------------
1 | import { ElementHandle, Page } from 'puppeteer';
2 | import {
3 | ParserSettings,
4 | FullParserSettings,
5 | OmitOrFalsy,
6 | ExtraCol,
7 | RowTransformFn,
8 | RowValidatorFn,
9 | } from './types';
10 | import { parseTableFactory } from './parseTable';
11 | import { mergeParserSettings } from './merger';
12 | import { preprocessSettings } from './settings';
13 | import { NoTablesFoundError } from './errors';
14 |
15 | async function retrieveTables(page: Page, selector: string) {
16 | await page.waitForSelector(selector);
17 |
18 | const elements: ElementHandle[] = await page.$$(selector);
19 | const elementsTypes: string[] = await Promise.all(
20 | elements.map((elHandle) => elHandle.evaluate((el) => el.tagName)),
21 | );
22 |
23 | return elements.filter((el, index) => {
24 | const elType: string = elementsTypes[index];
25 | if (elType !== 'TABLE') {
26 | console.warn('Invalid selector! Element is not a table!');
27 | return false;
28 | }
29 | return true;
30 | });
31 | }
32 |
33 | export async function tableParser(
34 | page: Page,
35 | settings: Omit & {
36 | asArray: true;
37 | rowValuesAsArray?: false;
38 | rowValuesAsObject?: false;
39 | },
40 | ): Promise;
41 | export async function tableParser(
42 | page: Page,
43 | settings: Omit & {
44 | asArray: true;
45 | rowValuesAsArray: true;
46 | rowValuesAsObject?: false;
47 | },
48 | ): Promise;
49 | export async function tableParser(
50 | page: Page,
51 | settings: Omit<
52 | ParserSettings,
53 | | 'asArray'
54 | | 'rowValuesAsArray'
55 | | 'rowValuesAsObject'
56 | | 'allowedColNames'
57 | | 'extraCols'
58 | | 'rowTransform'
59 | | 'rowValidator'
60 | | 'temporaryColNames'
61 | > & {
62 | asArray: boolean;
63 | rowValuesAsObject: true;
64 | rowValuesAsArray?: false;
65 | allowedColNames: Record;
66 | extraCols?: Array>;
67 | rowTransform?: RowTransformFn;
68 | rowValidator?: RowValidatorFn;
69 | temporaryColNames?: Array;
70 | },
71 | ): Promise>>;
72 | export async function tableParser(
73 | page: Page,
74 | options: OmitOrFalsy,
75 | ): Promise;
76 | export async function tableParser(page: Page, options: T) {
77 | const settings: FullParserSettings = preprocessSettings(options);
78 |
79 | const tables: ElementHandle[] = await retrieveTables(page, settings.selector);
80 |
81 | if (tables.length === 0) {
82 | throw new NoTablesFoundError('No tables found! Probably wrong table selector!');
83 | }
84 |
85 | const parseTable = parseTableFactory(settings);
86 |
87 | const tableResults: Array>> = [];
88 | let headerFound = false;
89 |
90 | for (const table of tables) {
91 | const withHeader = settings.withHeader && !settings.rowValuesAsObject && !headerFound;
92 | const data = await parseTable(table, withHeader);
93 |
94 | if (data.length > 0 && withHeader) {
95 | headerFound = true;
96 | }
97 | tableResults.push(data);
98 | }
99 |
100 | const filteredDataTables = tableResults.flat().filter(Boolean);
101 |
102 | if (!settings.asArray) {
103 | return filteredDataTables.join(settings.newLine);
104 | }
105 |
106 | return filteredDataTables;
107 | }
108 |
109 | export { mergeParserSettings };
110 | export * from './types';
111 | export * from './errors';
112 |
--------------------------------------------------------------------------------
/src/mappers.ts:
--------------------------------------------------------------------------------
1 | export const asObject =
2 | (getColumnName: (i: number) => T) =>
3 | (row: string[]): Record => {
4 | return row.reduce((acc, value, index) => {
5 | const key = getColumnName(index);
6 | acc[key] = value;
7 | return acc;
8 | }, {} as Record);
9 | };
10 |
11 | export const asCsv = (separator: string) => (row: string[]) => {
12 | return row.join(separator);
13 | };
14 |
15 | export const asArray = () => (row: string[]) => {
16 | return row;
17 | };
18 |
--------------------------------------------------------------------------------
/src/merger.ts:
--------------------------------------------------------------------------------
1 | import type { MergeParserSettings } from './types';
2 |
3 | export const mergeParserSettings = (
4 | to: MergeParserSettings,
5 | from: MergeParserSettings,
6 | ignoredAllowedColumns: string[] = [],
7 | ): MergeParserSettings => {
8 | const newConfig: MergeParserSettings = {
9 | temporaryColNames: to.temporaryColNames.slice(),
10 | extraCols: to.extraCols.slice(),
11 | allowedColNames: Object.assign({}, to.allowedColNames),
12 | };
13 |
14 | newConfig.extraCols.unshift(
15 | ...from.extraCols.map((extraCol) => {
16 | extraCol.data = extraCol.data || '';
17 | return extraCol;
18 | }),
19 | );
20 | from.temporaryColNames
21 | .filter((tempCol) => !newConfig.temporaryColNames.includes(tempCol))
22 | .forEach((tempCol) => newConfig.temporaryColNames.push(tempCol));
23 |
24 | // Get columns from general table
25 | const generalColNames = Object.entries(from.allowedColNames);
26 |
27 | // Merge them together
28 | generalColNames.reverse().forEach(([key, val], index) => {
29 | const realPosition = generalColNames.length - index - 1;
30 |
31 | // If column does not exist yet and is not excluded
32 | if (!newConfig.allowedColNames.hasOwnProperty(key) && !ignoredAllowedColumns.includes(key)) {
33 | const searchEntry = newConfig.extraCols.find((col) => col.colName === key);
34 |
35 | // Column already exists, just update position to match
36 | if (searchEntry) {
37 | searchEntry.position = realPosition;
38 | return;
39 | }
40 |
41 | // Insert new column
42 | newConfig.extraCols.unshift({
43 | colName: val,
44 | data: '',
45 | position: realPosition,
46 | });
47 | }
48 | });
49 |
50 | return newConfig;
51 | };
52 |
--------------------------------------------------------------------------------
/src/parseTable.ts:
--------------------------------------------------------------------------------
1 | import { FullParserSettings, RowValidationPolicy } from './types';
2 | import { extraColsMapperFactory, getColumnsInfo } from './helpers';
3 | import { ElementHandle } from 'puppeteer';
4 | import { InvalidSettingsError } from './errors';
5 | import { PipelineExecutor } from './pipelineExecutor';
6 | import { groupBy } from './aggregations';
7 | import * as mappers from './mappers';
8 |
9 | export function parseTableFactory(settings: FullParserSettings) {
10 | const extraColsMapper = extraColsMapperFactory(settings.extraCols);
11 |
12 | const findHeaderRow = async (
13 | table: ElementHandle,
14 | ): Promise<{ el: ElementHandle; bodyRowsOffset: number } | null> => {
15 | const headerRow = settings.headerRowsSelector
16 | ? await table.$(settings.headerRowsSelector)
17 | : null;
18 |
19 | if (headerRow) {
20 | return {
21 | bodyRowsOffset: 0,
22 | el: headerRow,
23 | };
24 | }
25 |
26 | const bodyRow = await table.$(settings.bodyRowsSelector);
27 | if (bodyRow) {
28 | return {
29 | bodyRowsOffset: 1,
30 | el: bodyRow,
31 | };
32 | }
33 |
34 | return null;
35 | };
36 |
37 | const getOutputHeaderRow = (missingColNames: string[]) => {
38 | const headerRowRaw = Object.values(settings.allowedColNames);
39 | const sortedHeader = extraColsMapper(headerRowRaw, 'colName');
40 |
41 | return sortedHeader.filter((key) => !missingColNames.includes(key));
42 | };
43 |
44 | const getRowStructureValidator = (allowedIndexes: Record) => {
45 | if (settings.rowValidationPolicy === RowValidationPolicy.NONE) {
46 | return () => true;
47 | }
48 | if (settings.rowValidationPolicy === RowValidationPolicy.NON_EMPTY) {
49 | return (rows: string[]) => rows.length > 0;
50 | }
51 | if (settings.rowValidationPolicy === RowValidationPolicy.EXACT_MATCH) {
52 | return (rows: string[]) => rows.length === Object.keys(allowedIndexes).length;
53 | }
54 | throw new InvalidSettingsError('Unknown mode for the "rowValidationPolicy"');
55 | };
56 |
57 | const getRowsData = async (
58 | table: ElementHandle,
59 | rowsOffset: number,
60 | allowedIndexes: Record,
61 | ): Promise => {
62 | return await table.evaluate(
63 | (
64 | el,
65 | { reverseTraversal, allowedIndexes, bodyRowsSelector, rowsOffset, bodyRowsCellSelector },
66 | ) => {
67 | const rows = Array.from(el.querySelectorAll(bodyRowsSelector));
68 | rows.splice(0, rowsOffset);
69 | if (reverseTraversal) {
70 | rows.reverse();
71 | }
72 |
73 | const allowedIndexesMap = new Map(
74 | Object.entries(allowedIndexes).map(([k, v]) => [Number(k), v]),
75 | );
76 | return rows.map((row) =>
77 | Array.from(row.querySelectorAll(bodyRowsCellSelector))
78 | .map((cell, realIndex): [Element, number] => [cell, realIndex])
79 | .filter((_, realIndex) => allowedIndexesMap.has(realIndex))
80 | .sort((a, b) => {
81 | const indexA = allowedIndexesMap.get(a[1]);
82 | const indexB = allowedIndexesMap.get(b[1]);
83 |
84 | return indexA - indexB;
85 | })
86 | .map(([cell]): string => (cell as HTMLElement)?.innerText ?? cell?.textContent),
87 | );
88 | },
89 | {
90 | reverseTraversal: settings.reverseTraversal,
91 | bodyRowsSelector: settings.bodyRowsSelector,
92 | bodyRowsCellSelector: settings.bodyRowsCellSelector,
93 | allowedIndexes,
94 | rowsOffset,
95 | },
96 | );
97 | };
98 |
99 | return async (table: ElementHandle, addHeader: boolean) => {
100 | await table.evaluate((el) => el.scrollIntoView());
101 |
102 | const header = await findHeaderRow(table);
103 | if (!header) {
104 | return [];
105 | }
106 |
107 | const { indexes, getColumnIndex, getColumnName, missingColNames } = await getColumnsInfo(
108 | settings,
109 | header.el,
110 | extraColsMapper,
111 | );
112 |
113 | let parsedRows = await new PipelineExecutor(
114 | await getRowsData(table, header.bodyRowsOffset, indexes.allowed),
115 | )
116 | .addFilter(getRowStructureValidator(indexes.allowed))
117 | .addMap((row) => extraColsMapper(row, 'data'))
118 | .addFilter((row, index, rows) => settings.rowValidator(row, getColumnIndex, index, rows))
119 | .addMap((row) => row.map((cell, index) => settings.colParser(cell, index, getColumnIndex)))
120 | .addTransform((row) => settings.rowTransform(row, getColumnIndex))
121 | .execute();
122 |
123 | if (settings.groupBy) {
124 | parsedRows = groupBy(parsedRows, settings.groupBy, getColumnIndex);
125 | }
126 |
127 | if (addHeader) {
128 | const headerRow = getOutputHeaderRow(missingColNames);
129 | parsedRows.unshift(headerRow);
130 | }
131 |
132 | const rowOutputMapper = settings.rowValuesAsObject
133 | ? mappers.asObject(getColumnName)
134 | : settings.rowValuesAsArray
135 | ? mappers.asArray()
136 | : mappers.asCsv(settings.csvSeparator);
137 |
138 | return new PipelineExecutor[]>(parsedRows)
139 | .addMap((row) => row.filter((_, index) => !indexes.excluded.includes(index)))
140 | .addMap(rowOutputMapper)
141 | .execute();
142 | };
143 | }
144 |
--------------------------------------------------------------------------------
/src/pipelineExecutor.ts:
--------------------------------------------------------------------------------
1 | enum OperationType {
2 | FILTER,
3 | MAP,
4 | TRANSFORM,
5 | }
6 |
7 | type IFilterOperation = {
8 | type: OperationType.FILTER;
9 | callback: (item: T, index: number, arr: T[]) => boolean;
10 | };
11 |
12 | type IMapOperation = {
13 | type: OperationType.MAP;
14 | callback: (item: T, index: number, arr: T[]) => any;
15 | };
16 |
17 | type ITransformOperation = {
18 | type: OperationType.TRANSFORM;
19 | callback: (item: T, index: number, arr: T[]) => void;
20 | };
21 |
22 | type Unwrapped = T extends Array ? R : T;
23 |
24 | export type IOperation = IFilterOperation | IMapOperation | ITransformOperation;
25 |
26 | export class PipelineExecutor {
27 | private readonly operations: IOperation[] = [];
28 | constructor(private _input?: Promise | T) {}
29 |
30 | public execute(input?: Promise | T) {
31 | this._input = input || this._input || ([] as T);
32 |
33 | function isPromise(p: unknown): p is Promise> {
34 | return p && Object.prototype.toString.call(p) === '[object Promise]';
35 | }
36 |
37 | if (isPromise(this._input)) {
38 | return this._input.then((x) => this._execute(x));
39 | } else {
40 | return this._execute(this._input as Awaited);
41 | }
42 | }
43 |
44 | private _execute(input: T): R {
45 | const acc: unknown[] = [];
46 |
47 | for (let index = 0; index < input.length; index++) {
48 | let value = input[index];
49 | let isValid = true;
50 |
51 | for (const { type, callback } of this.operations) {
52 | if (type === OperationType.FILTER) {
53 | if (!callback(value, index, acc)) {
54 | isValid = false;
55 | break;
56 | }
57 | } else if (type === OperationType.MAP) {
58 | value = callback(value, index, acc);
59 | } else if (type === OperationType.TRANSFORM) {
60 | callback(value, index, acc);
61 | } else {
62 | throw new Error('Unknown executor operation!');
63 | }
64 | }
65 |
66 | if (isValid) {
67 | acc.push(value);
68 | }
69 | }
70 |
71 | return acc as R;
72 | }
73 |
74 | private addOperation(operation: IOperation) {
75 | this.operations.push(operation);
76 | return this;
77 | }
78 |
79 | public clear() {
80 | this.operations.length = 0;
81 | return this;
82 | }
83 |
84 | public addFilter>(callback: IFilterOperation['callback']) {
85 | return this.addOperation({
86 | type: OperationType.FILTER,
87 | callback,
88 | });
89 | }
90 |
91 | public addMap>(callback: IMapOperation['callback']) {
92 | return this.addOperation({
93 | type: OperationType.MAP,
94 | callback,
95 | });
96 | }
97 |
98 | public addTransform>(callback: ITransformOperation['callback']) {
99 | return this.addOperation({
100 | type: OperationType.TRANSFORM,
101 | callback,
102 | });
103 | }
104 | }
105 |
--------------------------------------------------------------------------------
/src/settings.ts:
--------------------------------------------------------------------------------
1 | import {
2 | FullParserSettings,
3 | ParserSettings,
4 | ParserSettingsOptional,
5 | RowValidationPolicy,
6 | } from './types';
7 | import { InvalidSettingsError } from './errors';
8 | import { omitUndefined } from './helpers';
9 |
10 | export const defaultSettings: ParserSettingsOptional = {
11 | extraCols: [],
12 | withHeader: true,
13 | csvSeparator: ';',
14 | newLine: '\n',
15 | rowValidationPolicy: RowValidationPolicy.NON_EMPTY,
16 | groupBy: undefined,
17 | rowValidator: () => true,
18 | rowTransform: () => {},
19 | asArray: false,
20 | rowValuesAsObject: false,
21 | rowValuesAsArray: false,
22 | temporaryColNames: [],
23 | colFilter: (elText) => elText.join(' '),
24 | colParser: (value) => value.trim(),
25 | optionalColNames: [],
26 | reverseTraversal: false,
27 | headerRowsSelector: 'thead tr',
28 | headerRowsCellSelector: 'td,th',
29 | bodyRowsSelector: 'tbody tr',
30 | bodyRowsCellSelector: 'td',
31 | };
32 |
33 | export function preprocessSettings(options: ParserSettings): FullParserSettings {
34 | const settings: FullParserSettings = {
35 | ...defaultSettings,
36 | ...omitUndefined(options),
37 | };
38 |
39 | if (!settings.asArray && (settings.rowValuesAsObject || settings.rowValuesAsArray)) {
40 | settings.asArray = false;
41 | }
42 |
43 | validateSettings(settings);
44 | return settings;
45 | }
46 |
47 | export function validateSettings(
48 | settings: FullParserSettings,
49 | ): asserts settings is FullParserSettings {
50 | const { extraCols, temporaryColNames, allowedColNames } = settings;
51 |
52 | const hasConflict = extraCols
53 | .filter((col) => col.position !== undefined)
54 | .some((a) => extraCols.find((b) => a !== b && a.position === b.position));
55 |
56 | if (hasConflict) {
57 | throw new InvalidSettingsError('One or more `extraCols` have same position!');
58 | }
59 |
60 | for (const colName of temporaryColNames) {
61 | if (!Object.prototype.hasOwnProperty.call(allowedColNames, colName)) {
62 | throw new InvalidSettingsError(
63 | `Entry ${colName} in 'temporaryColNames' must exists in 'allowedColNames'!`,
64 | );
65 | }
66 | }
67 |
68 | const allowedColNamesValues = Object.values(allowedColNames);
69 | for (const { colName } of extraCols) {
70 | if (allowedColNamesValues.includes(colName)) {
71 | throw new InvalidSettingsError(
72 | `'${colName}' in 'extraCols' has same name as column in 'allowedColNames'!`,
73 | );
74 | }
75 | }
76 |
77 | if (!settings.asArray && settings.rowValuesAsArray) {
78 | throw new InvalidSettingsError(
79 | `'rowValuesAsArray' can be set to true only and only if 'asArray' is also true!`,
80 | );
81 | }
82 |
83 | if (!Array.isArray(settings.optionalColNames)) {
84 | throw new InvalidSettingsError(`'optionalColNames' must be an "array"`);
85 | }
86 | for (const optionalColName of settings.optionalColNames) {
87 | if (!allowedColNamesValues.includes(optionalColName)) {
88 | throw new InvalidSettingsError(
89 | `'${optionalColName}' in 'optionalColNames' does not exists in 'allowedColNames'!`,
90 | );
91 | }
92 | }
93 |
94 | if (settings.groupBy) {
95 | if (!Array.isArray(settings.groupBy.cols)) {
96 | throw new InvalidSettingsError(`Columns in "groupBy" field must be typeof array`);
97 | }
98 | if (settings.groupBy.handler && typeof settings.groupBy.handler !== 'function') {
99 | throw new InvalidSettingsError(`Passed handler to the "groupBy" is not a function`);
100 | }
101 | }
102 |
103 | if (settings.rowValuesAsObject && settings.rowValuesAsArray) {
104 | throw new InvalidSettingsError(
105 | `Cannot combine "rowValuesAsObject" with "rowValuesAsArray" options!`,
106 | );
107 | }
108 | }
109 |
--------------------------------------------------------------------------------
/src/types.ts:
--------------------------------------------------------------------------------
1 | export interface ExtraCol {
2 | colName: T;
3 | data: string;
4 | position?: number;
5 | }
6 |
7 | export type GetColumnIndexType = (colName: T) => number;
8 |
9 | export enum RowValidationPolicy {
10 | NONE = 'NONE',
11 | NON_EMPTY = 'NON_EMPTY',
12 | EXACT_MATCH = 'EXACT_MATCH',
13 | }
14 |
15 | export type GroupByOptions = {
16 | cols: string[];
17 | handler?: (rows: string[][], getColumnIndex: GetColumnIndexType) => string[];
18 | };
19 |
20 | export type ColParserFn = (
21 | value: string,
22 | formattedIndex: number,
23 | getColumnIndex: GetColumnIndexType,
24 | ) => string;
25 |
26 | export type RowTransformFn = (
27 | row: string[],
28 | getColumnIndex: GetColumnIndexType,
29 | ) => void;
30 |
31 | export type RowValidatorFn = (
32 | row: string[],
33 | getColumnIndex: GetColumnIndexType,
34 | rowIndex: number,
35 | rows: Readonly,
36 | ) => boolean;
37 |
38 | export type ParserSettingsOptional = {
39 | temporaryColNames: string[];
40 | extraCols: ExtraCol[];
41 | withHeader: boolean;
42 | csvSeparator: string;
43 | newLine: string;
44 | rowValidationPolicy: RowValidationPolicy;
45 | groupBy: GroupByOptions;
46 | rowValidator: RowValidatorFn;
47 | rowTransform: RowTransformFn;
48 | asArray: boolean;
49 | rowValuesAsObject: boolean;
50 | rowValuesAsArray: boolean;
51 | colFilter: (elText: string[], index: number) => string;
52 | colParser: ColParserFn;
53 | optionalColNames: string[];
54 | reverseTraversal: boolean;
55 | headerRowsSelector: string | null;
56 | headerRowsCellSelector: string;
57 | bodyRowsSelector: string;
58 | bodyRowsCellSelector: string;
59 | };
60 |
61 | export interface ParserSettings extends Partial {
62 | selector: string;
63 | readonly allowedColNames: Record;
64 | }
65 |
66 | export type FullParserSettings = Required;
67 |
68 | export type ExtraColsMapper = (row: string[], key: keyof ExtraCol) => string[];
69 |
70 | export interface MergeParserSettings {
71 | allowedColNames: FullParserSettings['allowedColNames'];
72 | extraCols: FullParserSettings['extraCols'];
73 | temporaryColNames: FullParserSettings['temporaryColNames'];
74 | }
75 |
76 | export type OmitOrFalsy = Omit & {
77 | [key in K]?: undefined | false;
78 | };
79 |
--------------------------------------------------------------------------------
/test/assets/1.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Example #1
5 |
6 |
7 |
8 |
9 |
10 |
11 | Car Name |
12 | Horse Powers |
13 | Manufacture Year |
14 |
15 |
16 |
17 |
18 | Audi S5 |
19 | 332 |
20 | 2015 |
21 |
22 |
23 |
24 | Alfa Romeo Giulia |
25 | 500 |
26 | 2020 |
27 |
28 |
29 | BMW X3 |
30 | 215 |
31 | 2017 |
32 |
33 |
34 | Skoda Octavia |
35 | 120 |
36 | 2012 |
37 |
38 |
39 | |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
--------------------------------------------------------------------------------
/test/assets/2.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Example #2
5 |
6 |
7 |
8 |
9 |
10 |
11 | Employee Name |
12 | Age |
13 |
14 |
15 |
16 |
17 | John M. Bolduc |
18 | 32 |
19 |
20 |
21 | Allan Meron |
22 | 40 |
23 |
24 |
25 | John M. Bolduc |
26 | 29 |
27 |
28 |
29 | Milan Lukeš |
30 | 33 |
31 |
32 |
33 | John M. Bolduc |
34 | 34 |
35 |
/tr>
36 |
37 | Allan Meron |
38 | 90 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
--------------------------------------------------------------------------------
/test/assets/large-table.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Large table
6 |
24 |
47 |
48 |
49 |
50 |
54 |
55 |
56 |
57 |
--------------------------------------------------------------------------------
/test/createServer.ts:
--------------------------------------------------------------------------------
1 | import { Server } from 'http';
2 | import * as path from 'path';
3 | import express from 'express';
4 |
5 | const port = 7588;
6 |
7 | export const getBaseUrl = () => {
8 | return `http://localhost:${port}`;
9 | };
10 |
11 | export const createServer = async (): Promise => {
12 | const app = express();
13 |
14 | app.use(express.static(path.join(__dirname, 'assets')));
15 |
16 | return new Promise((resolve) => {
17 | app.listen(port, function () {
18 | // @ts-ignore
19 | resolve(this);
20 | });
21 | });
22 | };
23 |
--------------------------------------------------------------------------------
/test/helpers.test.ts:
--------------------------------------------------------------------------------
1 | import { omitUndefined } from '../src/helpers';
2 | import type { ParserSettingsOptional } from '../src/types';
3 |
4 | describe('Helper utils', () => {
5 | it('Removes undefined properties', () => {
6 | const settings: Partial = {
7 | temporaryColNames: [],
8 | asArray: true,
9 | colFilter: undefined,
10 | };
11 |
12 | expect(omitUndefined(settings)).toMatchInlineSnapshot(`
13 | {
14 | "asArray": true,
15 | "temporaryColNames": [],
16 | }
17 | `);
18 | });
19 | });
20 |
--------------------------------------------------------------------------------
/test/index.test.ts:
--------------------------------------------------------------------------------
1 | import { Server } from 'http';
2 | import { promisify } from 'util';
3 | import { createServer, getBaseUrl } from './createServer';
4 | import { Browser, launch, Page } from 'puppeteer';
5 | import { tableParser, RowValidationPolicy } from '../src';
6 |
7 | jest.setTimeout(60 * 1000 * 1000);
8 |
9 | describe('Basic parsing', () => {
10 | let server: Server;
11 | let browser: Browser;
12 | let page: Page;
13 |
14 | beforeAll(async () => {
15 | server = await createServer();
16 | browser = await launch({
17 | headless: 'new',
18 | });
19 | page = await browser.newPage();
20 | });
21 |
22 | afterAll(async () => {
23 | await browser.close();
24 | await promisify(server.close).bind(server)();
25 | });
26 |
27 | it('Parse no filters', async () => {
28 | await page.goto(`${getBaseUrl()}/1.html`);
29 |
30 | const data = await tableParser(page, {
31 | selector: 'table',
32 | allowedColNames: {
33 | 'Car Name': 'car',
34 | 'Horse Powers': 'hp',
35 | 'Manufacture Year': 'year',
36 | },
37 | });
38 |
39 | expect(data).toMatchInlineSnapshot(`
40 | "car;hp;year
41 | Audi S5;332;2015
42 | Alfa Romeo Giulia;500;2020
43 | BMW X3;215;2017
44 | Skoda Octavia;120;2012"
45 | `);
46 | });
47 |
48 | it('Parse in reverse order', async () => {
49 | await page.goto(`${getBaseUrl()}/1.html`);
50 |
51 | const data = await tableParser(page, {
52 | selector: 'table',
53 | reverseTraversal: true,
54 | allowedColNames: {
55 | 'Car Name': 'car',
56 | },
57 | });
58 |
59 | expect(data).toMatchInlineSnapshot(`
60 | "car
61 | Skoda Octavia
62 | BMW X3
63 | Alfa Romeo Giulia
64 | Audi S5"
65 | `);
66 | });
67 |
68 | it('Return data as array with strings inside', async () => {
69 | await page.goto(`${getBaseUrl()}/1.html`);
70 |
71 | const data: string[] = await tableParser(page, {
72 | asArray: true,
73 | selector: 'table',
74 | allowedColNames: {
75 | 'Car Name': 'car',
76 | 'Horse Powers': 'hp',
77 | 'Manufacture Year': 'year',
78 | },
79 | });
80 |
81 | expect(data).toMatchInlineSnapshot(`
82 | [
83 | "car;hp;year",
84 | "Audi S5;332;2015",
85 | "Alfa Romeo Giulia;500;2020",
86 | "BMW X3;215;2017",
87 | "Skoda Octavia;120;2012",
88 | ]
89 | `);
90 | });
91 |
92 | it('Return data as array with arrays inside', async () => {
93 | await page.goto(`${getBaseUrl()}/1.html`);
94 |
95 | const data: string[][] = await tableParser(page, {
96 | asArray: true,
97 | rowValuesAsArray: true,
98 | selector: 'table',
99 | allowedColNames: {
100 | 'Car Name': 'car',
101 | 'Horse Powers': 'hp',
102 | 'Manufacture Year': 'year',
103 | },
104 | });
105 |
106 | expect(data).toMatchInlineSnapshot(`
107 | [
108 | [
109 | "car",
110 | "hp",
111 | "year",
112 | ],
113 | [
114 | "Audi S5",
115 | "332",
116 | "2015",
117 | ],
118 | [
119 | "Alfa Romeo Giulia",
120 | "500",
121 | "2020",
122 | ],
123 | [
124 | "BMW X3",
125 | "215",
126 | "2017",
127 | ],
128 | [
129 | "Skoda Octavia",
130 | "120",
131 | "2012",
132 | ],
133 | [
134 | "",
135 | ],
136 | ]
137 | `);
138 | });
139 |
140 | it('Throw error with invalid options', () => {
141 | expect(
142 | tableParser(page, {
143 | selector: 'table',
144 | asArray: false,
145 | // @ts-expect-error intended
146 | rowValuesAsArray: true,
147 | allowedColNames: {
148 | 'car-name': 'car',
149 | },
150 | }),
151 | ).rejects.toThrowError();
152 |
153 | expect(
154 | tableParser(page, {
155 | selector: 'table',
156 | // @ts-expect-error intended
157 | rowValuesAsObject: true,
158 | // @ts-expect-error intended
159 | rowValuesAsArray: true,
160 | allowedColNames: {
161 | 'car-name': 'car',
162 | },
163 | }),
164 | ).rejects.toThrowError();
165 |
166 | expect(
167 | tableParser(page, {
168 | selector: 'table',
169 | rowValuesAsObject: false,
170 | // @ts-expect-error intended
171 | rowValuesAsArray: true,
172 | allowedColNames: {
173 | 'car-name': 'car',
174 | },
175 | }),
176 | ).rejects.toThrowError();
177 | });
178 |
179 | it('Throw error when specified optional column which does not exists', () => {
180 | expect(
181 | tableParser(page, {
182 | selector: 'table',
183 | allowedColNames: {
184 | 'car-name': 'car',
185 | },
186 | optionalColNames: ['xcar'],
187 | }),
188 | ).rejects.toThrowError();
189 | });
190 |
191 | it('Parse webalize', async () => {
192 | await page.goto(`${getBaseUrl()}/1.html`);
193 |
194 | const data = await tableParser(page, {
195 | selector: 'table',
196 | colFilter: (value: string[]) => {
197 | return value.join(' ').replace(' ', '-').toLowerCase();
198 | },
199 | colParser: (value: string) => {
200 | return value.trim();
201 | },
202 | allowedColNames: {
203 | 'car-name': 'car',
204 | 'horse-powers': 'hp',
205 | 'manufacture-year': 'year',
206 | },
207 | });
208 |
209 | expect(data).toMatchInlineSnapshot(`
210 | "car;hp;year
211 | Audi S5;332;2015
212 | Alfa Romeo Giulia;500;2020
213 | BMW X3;215;2017
214 | Skoda Octavia;120;2012"
215 | `);
216 | });
217 |
218 | it('Parse and preserver order', async () => {
219 | await page.goto(`${getBaseUrl()}/1.html`);
220 |
221 | const data = await tableParser(page, {
222 | selector: 'table',
223 | allowedColNames: {
224 | 'Manufacture Year': 'year', // is last normally
225 | 'Car Name': 'car',
226 | 'Horse Powers': 'hp',
227 | },
228 | });
229 |
230 | expect(data).toMatchInlineSnapshot(`
231 | "year;car;hp
232 | 2015;Audi S5;332
233 | 2020;Alfa Romeo Giulia;500
234 | 2017;BMW X3;215
235 | 2012;Skoda Octavia;120"
236 | `);
237 | });
238 |
239 | it('Apply filter to rows', async () => {
240 | await page.goto(`${getBaseUrl()}/1.html`);
241 |
242 | const data = await tableParser(page, {
243 | selector: 'table',
244 | allowedColNames: {
245 | 'Car Name': 'car',
246 | 'Horse Powers': 'hp',
247 | 'Manufacture Year': 'year',
248 | },
249 | rowValidator: (row: string[], getColumnIndex) => {
250 | const indexByVal = getColumnIndex('year');
251 | const indexByKey = getColumnIndex('Manufacture Year');
252 |
253 | expect(indexByVal).toStrictEqual(indexByKey);
254 |
255 | return Number(row[indexByVal]) >= 2018;
256 | },
257 | });
258 |
259 | expect(data).toMatchInlineSnapshot(`
260 | "car;hp;year
261 | Alfa Romeo Giulia;500;2020"
262 | `);
263 | });
264 |
265 | it('Use temporary columns', async () => {
266 | await page.goto(`${getBaseUrl()}/1.html`);
267 |
268 | const data = await tableParser(page, {
269 | selector: 'table',
270 | allowedColNames: {
271 | 'Car Name': 'car',
272 | 'Manufacture Year': 'year',
273 | 'Horse Powers': 'hp',
274 | },
275 | temporaryColNames: ['Horse Powers'],
276 | rowValidator: (row: string[], getColumnIndex) => {
277 | const powerIndex = getColumnIndex('hp');
278 |
279 | return Number(row[powerIndex]) < 250;
280 | },
281 | });
282 |
283 | expect(data).toMatchInlineSnapshot(`
284 | "car;year
285 | BMW X3;2017
286 | Skoda Octavia;2012"
287 | `);
288 | });
289 |
290 | it('Use extra columns', async () => {
291 | await page.goto(`${getBaseUrl()}/1.html`);
292 |
293 | const data = await tableParser(page, {
294 | selector: 'table',
295 | allowedColNames: {
296 | 'Car Name': 'car',
297 | },
298 | extraCols: [
299 | {
300 | colName: 'date',
301 | data: '2021-03-15',
302 | position: 0,
303 | },
304 | ],
305 | });
306 |
307 | expect(data).toMatchInlineSnapshot(`
308 | "date;car
309 | 2021-03-15;Audi S5
310 | 2021-03-15;Alfa Romeo Giulia
311 | 2021-03-15;BMW X3
312 | 2021-03-15;Skoda Octavia
313 | 2021-03-15;"
314 | `);
315 | });
316 |
317 | it('Use dynamic extra columns', async () => {
318 | await page.goto(`${getBaseUrl()}/1.html`);
319 |
320 | const data = await tableParser(page, {
321 | selector: 'table',
322 | allowedColNames: {
323 | 'Manufacture Year': 'year',
324 | 'Horse Powers': 'hp',
325 | 'Car Name': 'car',
326 | },
327 | temporaryColNames: ['Horse Powers'],
328 | extraCols: [
329 | {
330 | colName: 'favorite',
331 | data: '',
332 | position: 0,
333 | },
334 | ],
335 | rowValidator: (row: string[], getColumnIndex) => {
336 | const horsePowerIndex = getColumnIndex('hp');
337 | return Number(row[horsePowerIndex]) > 150;
338 | },
339 | rowTransform: (row: string[], getColumnIndex) => {
340 | const nameIndex = getColumnIndex('car');
341 | const favoriteIndex = getColumnIndex('favorite');
342 |
343 | if (row[nameIndex].includes('Alfa Romeo')) {
344 | row[favoriteIndex] = 'YES';
345 | } else {
346 | row[favoriteIndex] = 'NO';
347 | }
348 | },
349 | });
350 |
351 | expect(data).toMatchInlineSnapshot(`
352 | "favorite;year;car
353 | NO;2015;Audi S5
354 | YES;2020;Alfa Romeo Giulia
355 | NO;2017;BMW X3"
356 | `);
357 | });
358 |
359 | it('Parse if column was not found, but was optional', async () => {
360 | await page.goto(`${getBaseUrl()}/1.html`);
361 |
362 | const data = await tableParser(page, {
363 | selector: 'table',
364 | rowValidationPolicy: RowValidationPolicy.EXACT_MATCH,
365 | allowedColNames: {
366 | 'Car Name': 'car',
367 | 'Some non existing column': 'non-existing',
368 | 'Horse Powers': 'hp',
369 | 'Manufacture Year': 'year',
370 | },
371 | extraCols: [
372 | {
373 | colName: 'ex',
374 | data: 'ex',
375 | position: 1,
376 | },
377 | ],
378 | optionalColNames: ['car', 'non-existing'],
379 | });
380 |
381 | expect(data).toMatchInlineSnapshot(`
382 | "car;ex;hp;year
383 | Audi S5;ex;332;2015
384 | Alfa Romeo Giulia;ex;500;2020
385 | BMW X3;ex;215;2017
386 | Skoda Octavia;ex;120;2012"
387 | `);
388 | });
389 |
390 | it('Handles multiple extra columns', async () => {
391 | await page.goto(`${getBaseUrl()}/1.html`);
392 |
393 | const data = await tableParser(page, {
394 | selector: 'table',
395 | allowedColNames: {
396 | 'Car Name': 'car',
397 | 'Horse Powers': 'hp',
398 | },
399 | extraCols: [
400 | {
401 | colName: 'ex1',
402 | data: 'ex1',
403 | },
404 | {
405 | colName: 'ex2',
406 | data: 'ex2',
407 | },
408 | ],
409 | });
410 |
411 | expect(data).toMatchInlineSnapshot(`
412 | "car;hp;ex1;ex2
413 | Audi S5;332;ex1;ex2
414 | Alfa Romeo Giulia;500;ex1;ex2
415 | BMW X3;215;ex1;ex2
416 | Skoda Octavia;120;ex1;ex2
417 | ;ex1;ex2"
418 | `);
419 | });
420 |
421 | it('Handles filtering partial rows', async () => {
422 | await page.goto(`${getBaseUrl()}/1.html`);
423 |
424 | const data = await tableParser(page, {
425 | selector: 'table',
426 | rowValidationPolicy: RowValidationPolicy.EXACT_MATCH,
427 | allowedColNames: {
428 | 'Car Name': 'car',
429 | 'Horse Powers': 'hp',
430 | 'Manufacture Year': 'year',
431 | },
432 | extraCols: [
433 | {
434 | colName: 'sellerId',
435 | data: '123',
436 | },
437 | ],
438 | });
439 |
440 | expect(data).toMatchInlineSnapshot(`
441 | "car;hp;year;sellerId
442 | Audi S5;332;2015;123
443 | Alfa Romeo Giulia;500;2020;123
444 | BMW X3;215;2017;123
445 | Skoda Octavia;120;2012;123"
446 | `);
447 | });
448 |
449 | it('Handles aggregation', async () => {
450 | await page.goto(`${getBaseUrl()}/2.html`);
451 |
452 | const data = await tableParser(page, {
453 | selector: '#employee-overview',
454 | asArray: false,
455 | allowedColNames: {
456 | 'Employee Name': 'name',
457 | 'Age': 'age',
458 | },
459 | groupBy: {
460 | cols: ['name'],
461 | },
462 | });
463 |
464 | expect(data).toMatchInlineSnapshot(`
465 | "name;age
466 | John M. Bolduc;32
467 | Allan Meron;40
468 | Milan Lukeš;33"
469 | `);
470 | });
471 |
472 | it('Handles aggregation with custom handler', async () => {
473 | await page.goto(`${getBaseUrl()}/2.html`);
474 |
475 | const data = await tableParser(page, {
476 | selector: '#employee-overview',
477 | asArray: false,
478 | allowedColNames: {
479 | 'Employee Name': 'name',
480 | 'Age': 'age',
481 | },
482 | groupBy: {
483 | cols: ['name'],
484 | handler: (rows: string[][], getColumnIndex) => {
485 | const ageIndex = getColumnIndex('age');
486 |
487 | // select one with the minimal age
488 | return rows.reduce((previous, current) =>
489 | previous[ageIndex] < current[ageIndex] ? previous : current,
490 | );
491 | },
492 | },
493 | });
494 |
495 | expect(data).toMatchInlineSnapshot(`
496 | "name;age
497 | John M. Bolduc;29
498 | Allan Meron;40
499 | Milan Lukeš;33"
500 | `);
501 | });
502 |
503 | it('Parses a large HTML table', async () => {
504 | await page.goto(`${getBaseUrl()}/large-table.html`);
505 |
506 | const data = await tableParser(page, {
507 | selector: 'table',
508 | asArray: false,
509 | allowedColNames: {
510 | A: 'first',
511 | B: 'second',
512 | },
513 | });
514 |
515 | expect(data).toBeTruthy();
516 | });
517 |
518 | it('Returns data as a object', async () => {
519 | await page.goto(`${getBaseUrl()}/2.html`);
520 |
521 | const data = await tableParser(page, {
522 | selector: '#employee-overview',
523 | rowValuesAsObject: true,
524 | asArray: true,
525 | allowedColNames: {
526 | 'Employee Name': 'name',
527 | 'Age': 'age',
528 | },
529 | });
530 |
531 | expect(data).toBeInstanceOf(Array);
532 | data.forEach((row) => {
533 | expect(row).toHaveProperty('age');
534 | expect(row).toHaveProperty('name');
535 | });
536 | });
537 |
538 | it('Returns only header because no rows passed filter', async () => {
539 | await page.goto(`${getBaseUrl()}/2.html`);
540 |
541 | const data = await tableParser(page, {
542 | selector: '#employee-overview',
543 | rowValidator: () => false,
544 | asArray: true,
545 | csvSeparator: ',',
546 | allowedColNames: {
547 | 'Employee Name': 'name',
548 | 'Age': 'age',
549 | },
550 | });
551 |
552 | expect(data).toBeInstanceOf(Array);
553 | expect(data.length).toBe(1);
554 | expect(data[0]).toBe('name,age');
555 | });
556 | });
557 |
--------------------------------------------------------------------------------
/test/merger.test.ts:
--------------------------------------------------------------------------------
1 | import { MergeParserSettings } from '../src/types';
2 | import { mergeParserSettings } from '../src/merger';
3 |
4 | describe('Basic parsing', () => {
5 | it('Merge allowedColNames', () => {
6 | const configExample: MergeParserSettings = {
7 | allowedColNames: {
8 | 'car-name': 'car',
9 | 'horse-powers': 'hp',
10 | },
11 | extraCols: [],
12 | temporaryColNames: [],
13 | };
14 |
15 | const configPartial: MergeParserSettings = {
16 | allowedColNames: {
17 | 'manufacture-year': 'year',
18 | },
19 | extraCols: [],
20 | temporaryColNames: [],
21 | };
22 |
23 | const merged = mergeParserSettings(configPartial, configExample);
24 | expect(merged).toMatchInlineSnapshot(`
25 | {
26 | "allowedColNames": {
27 | "manufacture-year": "year",
28 | },
29 | "extraCols": [
30 | {
31 | "colName": "car",
32 | "data": "",
33 | "position": 0,
34 | },
35 | {
36 | "colName": "hp",
37 | "data": "",
38 | "position": 1,
39 | },
40 | ],
41 | "temporaryColNames": [],
42 | }
43 | `);
44 | });
45 |
46 | it('Merge extraCols', () => {
47 | const configExample: MergeParserSettings = {
48 | allowedColNames: {
49 | 'car-name': 'car',
50 | },
51 | extraCols: [
52 | {
53 | colName: 'year',
54 | data: '2021',
55 | },
56 | ],
57 | temporaryColNames: [],
58 | };
59 |
60 | const configPartial: MergeParserSettings = {
61 | allowedColNames: {
62 | 'car-name': 'car',
63 | },
64 | extraCols: [],
65 | temporaryColNames: [],
66 | };
67 |
68 | const merged = mergeParserSettings(configPartial, configExample);
69 | expect(merged).toMatchInlineSnapshot(`
70 | {
71 | "allowedColNames": {
72 | "car-name": "car",
73 | },
74 | "extraCols": [
75 | {
76 | "colName": "year",
77 | "data": "2021",
78 | },
79 | ],
80 | "temporaryColNames": [],
81 | }
82 | `);
83 | });
84 |
85 | it('ignores appending column if it exists in ignoredAllowedColumns', () => {
86 | const configExample: MergeParserSettings = {
87 | allowedColNames: {
88 | 'car-name': 'car',
89 | 'horse-powers': 'hp',
90 | },
91 | extraCols: [],
92 | temporaryColNames: [],
93 | };
94 |
95 | const configPartial: MergeParserSettings = {
96 | allowedColNames: {
97 | 'car-name': 'car',
98 | 'horse-powers-hp': 'hp',
99 | },
100 | extraCols: [],
101 | temporaryColNames: [],
102 | };
103 |
104 | const merged = mergeParserSettings(configPartial, configExample, ['horse-powers']);
105 | expect(merged).toMatchInlineSnapshot(`
106 | {
107 | "allowedColNames": {
108 | "car-name": "car",
109 | "horse-powers-hp": "hp",
110 | },
111 | "extraCols": [],
112 | "temporaryColNames": [],
113 | }
114 | `);
115 | });
116 | });
117 |
--------------------------------------------------------------------------------
/test/pipelineExecutor.test.ts:
--------------------------------------------------------------------------------
1 | import { PipelineExecutor } from '../src/pipelineExecutor';
2 |
3 | describe('PipelineExecutor class', () => {
4 | it('Empty case', () => {
5 | const executor = new PipelineExecutor();
6 | expect(executor.execute([])).toStrictEqual([]);
7 | });
8 |
9 | it('Clear works', () => {
10 | const executor = new PipelineExecutor().addMap((r) => r + 1);
11 | expect(executor.execute([1])).toStrictEqual([2]);
12 | executor.clear();
13 | expect(executor.execute([1])).toStrictEqual([1]);
14 | });
15 |
16 | it('Correctly handle simples map', () => {
17 | const executor = new PipelineExecutor()
18 | .addMap((r) => r + 2)
19 | .addMap((r) => r * 2);
20 |
21 | expect(executor.execute([2, 2, 2])).toStrictEqual([8, 8, 8]);
22 | });
23 |
24 | it('Correctly handle simple filter operation', () => {
25 | const executor = new PipelineExecutor()
26 | .addFilter((r) => r >= 5)
27 | .addFilter((r) => r >= 10);
28 |
29 | expect(executor.execute([2, 5, 10])).toStrictEqual([10]);
30 | });
31 |
32 | it('Complex queries', () => {
33 | const input = [
34 | ['10', 'a', 'b'],
35 | [],
36 | ['11', 'c', 'd'],
37 | ['12', 'e', 'd'],
38 | ['13', 'a', 'c'],
39 | ['14', 'a', 'c'],
40 | ];
41 |
42 | const executor = new PipelineExecutor(input);
43 | executor.addFilter((row) => row.length > 0);
44 | executor.addMap((row) => row.join(';'));
45 | executor.addFilter((row) => row.includes('a'));
46 | expect(executor.execute()).toMatchInlineSnapshot(`
47 | [
48 | "10;a;b",
49 | "13;a;c",
50 | "14;a;c",
51 | ]
52 | `);
53 | });
54 | });
55 |
--------------------------------------------------------------------------------
/tsconfig.build.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "./tsconfig.json",
3 | "exclude": ["test"]
4 | }
5 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "ESNext",
4 | "module": "ESNext",
5 | "moduleResolution": "Node",
6 | "lib": [
7 | "ES2020",
8 | "dom",
9 | "dom.iterable"
10 | ],
11 | "declaration": true,
12 | "declarationMap": true,
13 | "sourceMap": true,
14 | "outDir": "lib",
15 | "removeComments": true,
16 | "strict": true,
17 | "allowSyntheticDefaultImports": true,
18 | "esModuleInterop": true,
19 | "strictNullChecks": false,
20 | "skipLibCheck": true,
21 | "forceConsistentCasingInFileNames": true
22 | },
23 | "include": ["src", "test"],
24 | }
25 |
--------------------------------------------------------------------------------
/tsup.config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'tsup';
2 |
3 | export default defineConfig({
4 | entry: ['src/index.ts'],
5 | sourcemap: true,
6 | dts: true,
7 | format: ['esm', 'cjs'],
8 | treeshake: true,
9 | shims: true,
10 | legacyOutput: false,
11 | bundle: true,
12 | splitting: true,
13 | });
14 |
--------------------------------------------------------------------------------