Code analyzer: find multiple hooks in single patch, add tests (#39566)

This commit is contained in:
Sam Seay 2023-08-09 09:05:00 +08:00 committed by GitHub
parent 4549bc82c5
commit 3a6c3cde9f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 39975 additions and 58 deletions

View File

@ -3486,6 +3486,9 @@ importers:
specifier: ^8.3.2
version: 8.3.2
devDependencies:
'@types/jest':
specifier: ^27.4.1
version: 27.4.1
'@types/node':
specifier: ^16.18.18
version: 16.18.21
@ -3495,6 +3498,12 @@ importers:
eslint:
specifier: ^8.32.0
version: 8.32.0
jest:
specifier: ^29.6.2
version: 29.6.2(@types/node@16.18.21)(ts-node@10.9.1)
ts-jest:
specifier: ^29.1.1
version: 29.1.1(@babel/core@7.21.3)(jest@29.6.2)(typescript@5.1.6)
ts-node:
specifier: ^10.2.1
version: 10.9.1(@types/node@16.18.21)(typescript@5.1.6)
@ -4182,7 +4191,7 @@ packages:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.21.3
'@jridgewell/trace-mapping': 0.3.17
'@jridgewell/trace-mapping': 0.3.16
commander: 4.1.1
convert-source-map: 1.8.0
fs-readdir-recursive: 1.1.0
@ -10847,6 +10856,18 @@ packages:
jest-util: 29.5.0
slash: 3.0.0
/@jest/console@29.6.2:
resolution: {integrity: sha512-0N0yZof5hi44HAR2pPS+ikJ3nzKNoZdVu8FffRf3wy47I7Dm7etk/3KetMdRUqzVd16V4O2m2ISpNTbnIuqy1w==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
dependencies:
'@jest/types': 29.6.1
'@types/node': 16.18.21
chalk: 4.1.2
jest-message-util: 29.6.2
jest-util: 29.6.2
slash: 3.0.0
dev: true
/@jest/core@24.9.0:
resolution: {integrity: sha512-Fogg3s4wlAr1VX7q+rhV9RVnUv5tD7VuWfYy1+whMiWUrvl7U3QJSJyWcDio9Lq2prqYsZaeTv2Rz24pWGkJ2A==}
engines: {node: '>= 6'}
@ -11050,6 +11071,49 @@ packages:
- ts-node
dev: true
/@jest/core@29.6.2(ts-node@10.9.1):
resolution: {integrity: sha512-Oj+5B+sDMiMWLhPFF+4/DvHOf+U10rgvCLGPHP8Xlsy/7QxS51aU/eBngudHlJXnaWD5EohAgJ4js+T6pa+zOg==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
peerDependencies:
node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0
peerDependenciesMeta:
node-notifier:
optional: true
dependencies:
'@jest/console': 29.6.2
'@jest/reporters': 29.6.2
'@jest/test-result': 29.6.2
'@jest/transform': 29.6.2
'@jest/types': 29.6.1
'@types/node': 16.18.21
ansi-escapes: 4.3.2
chalk: 4.1.2
ci-info: 3.2.0
exit: 0.1.2
graceful-fs: 4.2.9
jest-changed-files: 29.5.0
jest-config: 29.6.2(@types/node@16.18.21)(ts-node@10.9.1)
jest-haste-map: 29.6.2
jest-message-util: 29.6.2
jest-regex-util: 29.4.3
jest-resolve: 29.6.2
jest-resolve-dependencies: 29.6.2
jest-runner: 29.6.2
jest-runtime: 29.6.2
jest-snapshot: 29.6.2
jest-util: 29.6.2
jest-validate: 29.6.2
jest-watcher: 29.6.2
micromatch: 4.0.5
pretty-format: 29.6.2
slash: 3.0.0
strip-ansi: 6.0.1
transitivePeerDependencies:
- babel-plugin-macros
- supports-color
- ts-node
dev: true
/@jest/create-cache-key-function@27.5.1:
resolution: {integrity: sha512-dmH1yW+makpTSURTy8VzdUwFnfQh1G8R+DxO2Ho2FFmBbKFEVm+3jWdvFhE2VqB/LATCTokkP0dotjyQyw5/AQ==}
engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
@ -11105,12 +11169,29 @@ packages:
'@types/node': 16.18.21
jest-mock: 29.5.0
/@jest/environment@29.6.2:
resolution: {integrity: sha512-AEcW43C7huGd/vogTddNNTDRpO6vQ2zaQNrttvWV18ArBx9Z56h7BIsXkNFJVOO4/kblWEQz30ckw0+L3izc+Q==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
dependencies:
'@jest/fake-timers': 29.6.2
'@jest/types': 29.6.1
'@types/node': 16.18.21
jest-mock: 29.6.2
dev: true
/@jest/expect-utils@29.5.0:
resolution: {integrity: sha512-fmKzsidoXQT2KwnrwE0SQq3uj8Z763vzR8LnLBwC2qYWEFpjX8daRsk6rHUM1QvNlEW/UJXNXm59ztmJJWs2Mg==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
dependencies:
jest-get-type: 29.4.3
/@jest/expect-utils@29.6.2:
resolution: {integrity: sha512-6zIhM8go3RV2IG4aIZaZbxwpOzz3ZiM23oxAlkquOIole+G6TrbeXnykxWYlqF7kz2HlBjdKtca20x9atkEQYg==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
dependencies:
jest-get-type: 29.4.3
dev: true
/@jest/expect@29.5.0:
resolution: {integrity: sha512-PueDR2HGihN3ciUNGr4uelropW7rqUfTiOn+8u0leg/42UhblPxHkfoh0Ruu3I9Y1962P3u2DY4+h7GVTSVU6g==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
@ -11120,6 +11201,16 @@ packages:
transitivePeerDependencies:
- supports-color
/@jest/expect@29.6.2:
resolution: {integrity: sha512-m6DrEJxVKjkELTVAztTLyS/7C92Y2b0VYqmDROYKLLALHn8T/04yPs70NADUYPrV3ruI+H3J0iUIuhkjp7vkfg==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
dependencies:
expect: 29.6.2
jest-snapshot: 29.6.2
transitivePeerDependencies:
- supports-color
dev: true
/@jest/fake-timers@24.9.0:
resolution: {integrity: sha512-eWQcNa2YSwzXWIMC5KufBh3oWRIijrQFROsIqt6v/NS9Io/gknw1jsAC9c+ih/RQX4A3O7SeWAhQeN0goKhT9A==}
engines: {node: '>= 6'}
@ -11176,6 +11267,18 @@ packages:
jest-mock: 29.5.0
jest-util: 29.5.0
/@jest/fake-timers@29.6.2:
resolution: {integrity: sha512-euZDmIlWjm1Z0lJ1D0f7a0/y5Kh/koLFMUBE5SUYWrmy8oNhJpbTBDAP6CxKnadcMLDoDf4waRYCe35cH6G6PA==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
dependencies:
'@jest/types': 29.6.1
'@sinonjs/fake-timers': 10.0.2
'@types/node': 16.18.21
jest-message-util: 29.6.2
jest-mock: 29.6.2
jest-util: 29.6.2
dev: true
/@jest/globals@25.5.2:
resolution: {integrity: sha512-AgAS/Ny7Q2RCIj5kZ+0MuKM1wbF0WMLxbCVl/GOMoCNbODRdJ541IxJ98xnZdVSZXivKpJlNPIWa3QmY0l4CXA==}
engines: {node: '>= 8.3'}
@ -11213,6 +11316,18 @@ packages:
transitivePeerDependencies:
- supports-color
/@jest/globals@29.6.2:
resolution: {integrity: sha512-cjuJmNDjs6aMijCmSa1g2TNG4Lby/AeU7/02VtpW+SLcZXzOLK2GpN2nLqcFjmhy3B3AoPeQVx7BnyOf681bAw==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
dependencies:
'@jest/environment': 29.6.2
'@jest/expect': 29.6.2
'@jest/types': 29.6.1
jest-mock: 29.6.2
transitivePeerDependencies:
- supports-color
dev: true
/@jest/reporters@24.9.0:
resolution: {integrity: sha512-mu4X0yjaHrffOsWmVLzitKmmmWSQ3GGuefgNscUSWNiUNcEOSEQk9k3pERKEQVBb0Cnn88+UESIsZEMH3o88Gw==}
engines: {node: '>= 6'}
@ -11386,12 +11501,56 @@ packages:
- supports-color
dev: true
/@jest/reporters@29.6.2:
resolution: {integrity: sha512-sWtijrvIav8LgfJZlrGCdN0nP2EWbakglJY49J1Y5QihcQLfy7ovyxxjJBRXMNltgt4uPtEcFmIMbVshEDfFWw==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
peerDependencies:
node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0
peerDependenciesMeta:
node-notifier:
optional: true
dependencies:
'@bcoe/v8-coverage': 0.2.3
'@jest/console': 29.6.2
'@jest/test-result': 29.6.2
'@jest/transform': 29.6.2
'@jest/types': 29.6.1
'@jridgewell/trace-mapping': 0.3.19
'@types/node': 16.18.21
chalk: 4.1.2
collect-v8-coverage: 1.0.1
exit: 0.1.2
glob: 7.2.3
graceful-fs: 4.2.9
istanbul-lib-coverage: 3.2.0
istanbul-lib-instrument: 5.1.0
istanbul-lib-report: 3.0.0
istanbul-lib-source-maps: 4.0.1
istanbul-reports: 3.1.4
jest-message-util: 29.6.2
jest-util: 29.6.2
jest-worker: 29.6.2
slash: 3.0.0
string-length: 4.0.2
strip-ansi: 6.0.1
v8-to-istanbul: 9.1.0
transitivePeerDependencies:
- supports-color
dev: true
/@jest/schemas@29.4.3:
resolution: {integrity: sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
dependencies:
'@sinclair/typebox': 0.25.24
/@jest/schemas@29.6.0:
resolution: {integrity: sha512-rxLjXyJBTL4LQeJW3aKo0M/+GkCOXsO+8i9Iu7eDb6KwtP65ayoDsitrdPBtujxQ88k4wI2FNYfa6TOGwSn6cQ==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
dependencies:
'@sinclair/typebox': 0.27.8
dev: true
/@jest/source-map@24.9.0:
resolution: {integrity: sha512-/Xw7xGlsZb4MJzNDgB7PW5crou5JqWiBQaz6xyPd3ArOg2nfn/PunV8+olXbbEZzNl591o5rWKE9BRDaFAuIBg==}
engines: {node: '>= 6'}
@ -11435,6 +11594,15 @@ packages:
callsites: 3.1.0
graceful-fs: 4.2.9
/@jest/source-map@29.6.0:
resolution: {integrity: sha512-oA+I2SHHQGxDCZpbrsCQSoMLb3Bz547JnM+jUr9qEbuw0vQlWZfpPS7CO9J7XiwKicEz9OFn/IYoLkkiUD7bzA==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
dependencies:
'@jridgewell/trace-mapping': 0.3.19
callsites: 3.1.0
graceful-fs: 4.2.9
dev: true
/@jest/test-result@24.9.0:
resolution: {integrity: sha512-XEFrHbBonBJ8dGp2JmF8kP/nQI/ImPpygKHwQ/SY+es59Z3L5PI4Qb9TQQMAEeYsThG1xF0k6tmG0tIKATNiiA==}
engines: {node: '>= 6'}
@ -11482,6 +11650,16 @@ packages:
'@types/istanbul-lib-coverage': 2.0.3
collect-v8-coverage: 1.0.1
/@jest/test-result@29.6.2:
resolution: {integrity: sha512-3VKFXzcV42EYhMCsJQURptSqnyjqCGbtLuX5Xxb6Pm6gUf1wIRIl+mandIRGJyWKgNKYF9cnstti6Ls5ekduqw==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
dependencies:
'@jest/console': 29.6.2
'@jest/types': 29.6.1
'@types/istanbul-lib-coverage': 2.0.3
collect-v8-coverage: 1.0.1
dev: true
/@jest/test-sequencer@24.9.0:
resolution: {integrity: sha512-6qqsU4o0kW1dvA95qfNog8v8gkRN9ph6Lz7r96IvZpHdNipP2cBcb07J1Z45mz/VIS01OHJ3pY8T5fUY38tg4A==}
engines: {node: '>= 6'}
@ -11550,6 +11728,16 @@ packages:
slash: 3.0.0
dev: true
/@jest/test-sequencer@29.6.2:
resolution: {integrity: sha512-GVYi6PfPwVejO7slw6IDO0qKVum5jtrJ3KoLGbgBWyr2qr4GaxFV6su+ZAjdTX75Sr1DkMFRk09r2ZVa+wtCGw==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
dependencies:
'@jest/test-result': 29.6.2
graceful-fs: 4.2.9
jest-haste-map: 29.6.2
slash: 3.0.0
dev: true
/@jest/transform@24.9.0:
resolution: {integrity: sha512-TcQUmyNRxV94S0QpMOnZl0++6RMiqpbH/ZMccFB/amku6Uwvyb1cjYX7xkp5nGNkbX4QPH/FcB6q1HBTHynLmQ==}
engines: {node: '>= 6'}
@ -11664,6 +11852,29 @@ packages:
transitivePeerDependencies:
- supports-color
/@jest/transform@29.6.2:
resolution: {integrity: sha512-ZqCqEISr58Ce3U+buNFJYUktLJZOggfyvR+bZMaiV1e8B1SIvJbwZMrYz3gx/KAPn9EXmOmN+uB08yLCjWkQQg==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
dependencies:
'@babel/core': 7.21.3
'@jest/types': 29.6.1
'@jridgewell/trace-mapping': 0.3.19
babel-plugin-istanbul: 6.1.1
chalk: 4.1.2
convert-source-map: 2.0.0
fast-json-stable-stringify: 2.1.0
graceful-fs: 4.2.9
jest-haste-map: 29.6.2
jest-regex-util: 29.4.3
jest-util: 29.6.2
micromatch: 4.0.5
pirates: 4.0.5
slash: 3.0.0
write-file-atomic: 4.0.2
transitivePeerDependencies:
- supports-color
dev: true
/@jest/types@24.9.0:
resolution: {integrity: sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==}
engines: {node: '>= 6'}
@ -11714,6 +11925,18 @@ packages:
'@types/yargs': 17.0.24
chalk: 4.1.2
/@jest/types@29.6.1:
resolution: {integrity: sha512-tPKQNMPuXgvdOn2/Lg9HNfUvjYVGolt04Hp03f5hAk878uwOLikN+JzeLY0HcVgKgFl9Hs3EIqpu3WX27XNhnw==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
dependencies:
'@jest/schemas': 29.6.0
'@types/istanbul-lib-coverage': 2.0.3
'@types/istanbul-reports': 3.0.1
'@types/node': 16.18.21
'@types/yargs': 17.0.24
chalk: 4.1.2
dev: true
/@jridgewell/gen-mapping@0.1.1:
resolution: {integrity: sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==}
engines: {node: '>=6.0.0'}
@ -11745,7 +11968,6 @@ packages:
dependencies:
'@jridgewell/resolve-uri': 3.1.0
'@jridgewell/sourcemap-codec': 1.4.14
dev: true
/@jridgewell/trace-mapping@0.3.17:
resolution: {integrity: sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==}
@ -11753,6 +11975,13 @@ packages:
'@jridgewell/resolve-uri': 3.1.0
'@jridgewell/sourcemap-codec': 1.4.14
/@jridgewell/trace-mapping@0.3.19:
resolution: {integrity: sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==}
dependencies:
'@jridgewell/resolve-uri': 3.1.0
'@jridgewell/sourcemap-codec': 1.4.14
dev: true
/@jridgewell/trace-mapping@0.3.9:
resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==}
dependencies:
@ -13043,6 +13272,10 @@ packages:
/@sinclair/typebox@0.25.24:
resolution: {integrity: sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ==}
/@sinclair/typebox@0.27.8:
resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==}
dev: true
/@sindresorhus/is@4.6.0:
resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==}
engines: {node: '>=10'}
@ -21999,6 +22232,24 @@ packages:
- supports-color
dev: true
/babel-jest@29.6.2(@babel/core@7.21.3):
resolution: {integrity: sha512-BYCzImLos6J3BH/+HvUCHG1dTf2MzmAB4jaVxHV+29RZLjR29XuYTmsf2sdDwkrb+FczkGo3kOhE7ga6sI0P4A==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
peerDependencies:
'@babel/core': ^7.8.0
dependencies:
'@babel/core': 7.21.3
'@jest/transform': 29.6.2
'@types/babel__core': 7.1.16
babel-plugin-istanbul: 6.1.1
babel-preset-jest: 29.5.0(@babel/core@7.21.3)
chalk: 4.1.2
graceful-fs: 4.2.9
slash: 3.0.0
transitivePeerDependencies:
- supports-color
dev: true
/babel-loader@8.2.3(@babel/core@7.17.8)(webpack@5.70.0):
resolution: {integrity: sha512-n4Zeta8NC3QAsuyiizu0GkmRcQ6clkV9WFUnUf1iXP//IeSKbWjofW3UHyZVwlOB4y039YQKefawyTn64Zwbuw==}
engines: {node: '>= 8.9'}
@ -25455,6 +25706,15 @@ packages:
/dedent@0.7.0:
resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==}
/dedent@1.5.1:
resolution: {integrity: sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==}
peerDependencies:
babel-plugin-macros: ^3.1.0
peerDependenciesMeta:
babel-plugin-macros:
optional: true
dev: true
/deep-eql@3.0.1:
resolution: {integrity: sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==}
engines: {node: '>=0.12'}
@ -27534,6 +27794,18 @@ packages:
jest-message-util: 29.5.0
jest-util: 29.5.0
/expect@29.6.2:
resolution: {integrity: sha512-iAErsLxJ8C+S02QbLAwgSGSezLQK+XXRDt8IuFXFpwCNw2ECmzZSmjKcCaFVp5VRMk+WAvz6h6jokzEzBFZEuA==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
dependencies:
'@jest/expect-utils': 29.6.2
'@types/node': 16.18.21
jest-get-type: 29.4.3
jest-matcher-utils: 29.6.2
jest-message-util: 29.6.2
jest-util: 29.6.2
dev: true
/expose-loader@3.1.0(webpack@5.70.0):
resolution: {integrity: sha512-2RExSo0yJiqP+xiUue13jQa2IHE8kLDzTI7b6kn+vUlBVvlzNSiLDzo4e5Pp5J039usvTUnxZ8sUOhv0Kg15NA==}
engines: {node: '>= 12.13.0'}
@ -31337,6 +31609,35 @@ packages:
- supports-color
dev: true
/jest-circus@29.6.2:
resolution: {integrity: sha512-G9mN+KOYIUe2sB9kpJkO9Bk18J4dTDArNFPwoZ7WKHKel55eKIS/u2bLthxgojwlf9NLCVQfgzM/WsOVvoC6Fw==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
dependencies:
'@jest/environment': 29.6.2
'@jest/expect': 29.6.2
'@jest/test-result': 29.6.2
'@jest/types': 29.6.1
'@types/node': 16.18.21
chalk: 4.1.2
co: 4.6.0
dedent: 1.5.1
is-generator-fn: 2.1.0
jest-each: 29.6.2
jest-matcher-utils: 29.6.2
jest-message-util: 29.6.2
jest-runtime: 29.6.2
jest-snapshot: 29.6.2
jest-util: 29.6.2
p-limit: 3.1.0
pretty-format: 29.6.2
pure-rand: 6.0.1
slash: 3.0.0
stack-utils: 2.0.5
transitivePeerDependencies:
- babel-plugin-macros
- supports-color
dev: true
/jest-cli@24.9.0:
resolution: {integrity: sha512-+VLRKyitT3BWoMeSUIHRxV/2g8y9gw91Jh5z2UmXZzkZKpbC08CSehVxgHUwTpy+HwGcns/tqafQDJW7imYvGg==}
engines: {node: '>= 6'}
@ -31470,6 +31771,35 @@ packages:
- ts-node
dev: true
/jest-cli@29.6.2(@types/node@16.18.21)(ts-node@10.9.1):
resolution: {integrity: sha512-TT6O247v6dCEX2UGHGyflMpxhnrL0DNqP2fRTKYm3nJJpCTfXX3GCMQPGFjXDoj0i5/Blp3jriKXFgdfmbYB6Q==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
hasBin: true
peerDependencies:
node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0
peerDependenciesMeta:
node-notifier:
optional: true
dependencies:
'@jest/core': 29.6.2(ts-node@10.9.1)
'@jest/test-result': 29.6.2
'@jest/types': 29.6.1
chalk: 4.1.2
exit: 0.1.2
graceful-fs: 4.2.9
import-local: 3.0.3
jest-config: 29.6.2(@types/node@16.18.21)(ts-node@10.9.1)
jest-util: 29.6.2
jest-validate: 29.6.2
prompts: 2.4.2
yargs: 17.5.1
transitivePeerDependencies:
- '@types/node'
- babel-plugin-macros
- supports-color
- ts-node
dev: true
/jest-config@24.9.0:
resolution: {integrity: sha512-RATtQJtVYQrp7fvWg6f5y3pEFj9I+H8sWw4aKxnDZ96mob5i5SD6ZEGWgMLXQ4LE8UurrjbdlLWdUeo+28QpfQ==}
engines: {node: '>= 6'}
@ -31640,6 +31970,47 @@ packages:
- supports-color
dev: true
/jest-config@29.6.2(@types/node@16.18.21)(ts-node@10.9.1):
resolution: {integrity: sha512-VxwFOC8gkiJbuodG9CPtMRjBUNZEHxwfQXmIudSTzFWxaci3Qub1ddTRbFNQlD/zUeaifLndh/eDccFX4wCMQw==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
peerDependencies:
'@types/node': '*'
ts-node: '>=9.0.0'
peerDependenciesMeta:
'@types/node':
optional: true
ts-node:
optional: true
dependencies:
'@babel/core': 7.21.3
'@jest/test-sequencer': 29.6.2
'@jest/types': 29.6.1
'@types/node': 16.18.21
babel-jest: 29.6.2(@babel/core@7.21.3)
chalk: 4.1.2
ci-info: 3.2.0
deepmerge: 4.3.0
glob: 7.2.3
graceful-fs: 4.2.9
jest-circus: 29.6.2
jest-environment-node: 29.6.2
jest-get-type: 29.4.3
jest-regex-util: 29.4.3
jest-resolve: 29.6.2
jest-runner: 29.6.2
jest-util: 29.6.2
jest-validate: 29.6.2
micromatch: 4.0.5
parse-json: 5.2.0
pretty-format: 29.6.2
slash: 3.0.0
strip-json-comments: 3.1.1
ts-node: 10.9.1(@types/node@16.18.21)(typescript@5.1.6)
transitivePeerDependencies:
- babel-plugin-macros
- supports-color
dev: true
/jest-dev-server@4.4.0:
resolution: {integrity: sha512-STEHJ3iPSC8HbrQ3TME0ozGX2KT28lbT4XopPxUm2WimsX3fcB3YOptRh12YphQisMhfqNSNTZUmWyT3HEXS2A==}
dependencies:
@ -31730,6 +32101,16 @@ packages:
jest-get-type: 29.4.3
pretty-format: 29.5.0
/jest-diff@29.6.2:
resolution: {integrity: sha512-t+ST7CB9GX5F2xKwhwCf0TAR17uNDiaPTZnVymP9lw0lssa9vG+AFyDZoeIHStU3WowFFwT+ky+er0WVl2yGhA==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
dependencies:
chalk: 4.1.2
diff-sequences: 29.4.3
jest-get-type: 29.4.3
pretty-format: 29.6.2
dev: true
/jest-docblock@24.9.0:
resolution: {integrity: sha512-F1DjdpDMJMA1cN6He0FNYNZlo3yYmOtRUnktrT9Q37njYzC5WEaDdmbynIgy0L/IvXvvgsG8OsqhLPXTpfmZAA==}
engines: {node: '>= 6'}
@ -31819,6 +32200,17 @@ packages:
pretty-format: 29.5.0
dev: true
/jest-each@29.6.2:
resolution: {integrity: sha512-MsrsqA0Ia99cIpABBc3izS1ZYoYfhIy0NNWqPSE0YXbQjwchyt6B1HD2khzyPe1WiJA7hbxXy77ZoUQxn8UlSw==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
dependencies:
'@jest/types': 29.6.1
chalk: 4.1.2
jest-get-type: 29.4.3
jest-util: 29.6.2
pretty-format: 29.6.2
dev: true
/jest-environment-jsdom@24.9.0:
resolution: {integrity: sha512-Zv9FV9NBRzLuALXjvRijO2351DRQeLYXtpD4xNvfoVFw21IOKNhZAEUKcbiEtjTkm2GsJ3boMVgkaR7rN8qetA==}
engines: {node: '>= 6'}
@ -31968,6 +32360,18 @@ packages:
jest-mock: 29.5.0
jest-util: 29.5.0
/jest-environment-node@29.6.2:
resolution: {integrity: sha512-YGdFeZ3T9a+/612c5mTQIllvWkddPbYcN2v95ZH24oWMbGA4GGS2XdIF92QMhUhvrjjuQWYgUGW2zawOyH63MQ==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
dependencies:
'@jest/environment': 29.6.2
'@jest/fake-timers': 29.6.2
'@jest/types': 29.6.1
'@types/node': 16.18.21
jest-mock: 29.6.2
jest-util: 29.6.2
dev: true
/jest-environment-puppeteer@4.4.0:
resolution: {integrity: sha512-iV8S8+6qkdTM6OBR/M9gKywEk8GDSOe05hspCs5D8qKSwtmlUfdtHfB4cakdc68lC6YfK3AUsLirpfgodCHjzQ==}
dependencies:
@ -32116,6 +32520,25 @@ packages:
optionalDependencies:
fsevents: 2.3.2
/jest-haste-map@29.6.2:
resolution: {integrity: sha512-+51XleTDAAysvU8rT6AnS1ZJ+WHVNqhj1k6nTvN2PYP+HjU3kqlaKQ1Lnw3NYW3bm2r8vq82X0Z1nDDHZMzHVA==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
dependencies:
'@jest/types': 29.6.1
'@types/graceful-fs': 4.1.5
'@types/node': 16.18.21
anymatch: 3.1.2
fb-watchman: 2.0.1
graceful-fs: 4.2.9
jest-regex-util: 29.4.3
jest-util: 29.6.2
jest-worker: 29.6.2
micromatch: 4.0.5
walker: 1.0.8
optionalDependencies:
fsevents: 2.3.2
dev: true
/jest-jasmine2@24.9.0:
resolution: {integrity: sha512-Cq7vkAgaYKp+PsX+2/JbTarrk0DmNhsEtqBXNwUHkdlbrTBLtMJINADf2mf5FkowNsq8evbPc07/qFO0AdKTzw==}
engines: {node: '>= 6'}
@ -32260,6 +32683,14 @@ packages:
jest-get-type: 29.4.3
pretty-format: 29.5.0
/jest-leak-detector@29.6.2:
resolution: {integrity: sha512-aNqYhfp5uYEO3tdWMb2bfWv6f0b4I0LOxVRpnRLAeque2uqOVVMLh6khnTcE2qJ5wAKop0HcreM1btoysD6bPQ==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
dependencies:
jest-get-type: 29.4.3
pretty-format: 29.6.2
dev: true
/jest-matcher-utils@24.9.0:
resolution: {integrity: sha512-OZz2IXsu6eaiMAwe67c1T+5tUAtQyQx27/EMEkbFAGiw52tB9em+uGbzpcgYVpA8wl0hlxKPZxrly4CXU/GjHA==}
engines: {node: '>= 6'}
@ -32307,6 +32738,16 @@ packages:
jest-get-type: 29.4.3
pretty-format: 29.5.0
/jest-matcher-utils@29.6.2:
resolution: {integrity: sha512-4LiAk3hSSobtomeIAzFTe+N8kL6z0JtF3n6I4fg29iIW7tt99R7ZcIFW34QkX+DuVrf+CUe6wuVOpm7ZKFJzZQ==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
dependencies:
chalk: 4.1.2
jest-diff: 29.6.2
jest-get-type: 29.4.3
pretty-format: 29.6.2
dev: true
/jest-message-util@24.9.0:
resolution: {integrity: sha512-oCj8FiZ3U0hTP4aSui87P4L4jC37BtQwUMqk+zk/b11FR19BJDeZsZAvIHutWnmtw7r85UmR3CEWZ0HWU2mAlw==}
engines: {node: '>= 6'}
@ -32380,6 +32821,21 @@ packages:
slash: 3.0.0
stack-utils: 2.0.5
/jest-message-util@29.6.2:
resolution: {integrity: sha512-vnIGYEjoPSuRqV8W9t+Wow95SDp6KPX2Uf7EoeG9G99J2OVh7OSwpS4B6J0NfpEIpfkBNHlBZpA2rblEuEFhZQ==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
dependencies:
'@babel/code-frame': 7.18.6
'@jest/types': 29.6.1
'@types/stack-utils': 2.0.1
chalk: 4.1.2
graceful-fs: 4.2.9
micromatch: 4.0.5
pretty-format: 29.6.2
slash: 3.0.0
stack-utils: 2.0.5
dev: true
/jest-mock-extended@1.0.18(jest@27.5.1)(typescript@5.1.6):
resolution: {integrity: sha512-qf1n7lIa2dTxxPIBr+FlXrbj3hnV1sG9DPZsrr2H/8W+Jw0wt6OmeOQsPcjRuW8EXIECC9pDXsSIfEdn+HP7JQ==}
peerDependencies:
@ -32428,6 +32884,15 @@ packages:
'@types/node': 16.18.21
jest-util: 29.5.0
/jest-mock@29.6.2:
resolution: {integrity: sha512-hoSv3lb3byzdKfwqCuT6uTscan471GUECqgNYykg6ob0yiAw3zYc7OrPnI9Qv8Wwoa4lC7AZ9hyS4AiIx5U2zg==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
dependencies:
'@jest/types': 29.6.1
'@types/node': 16.18.21
jest-util: 29.6.2
dev: true
/jest-pnp-resolver@1.2.2(jest-resolve@24.9.0):
resolution: {integrity: sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==}
engines: {node: '>=6'}
@ -32486,6 +32951,18 @@ packages:
dependencies:
jest-resolve: 29.5.0
/jest-pnp-resolver@1.2.2(jest-resolve@29.6.2):
resolution: {integrity: sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==}
engines: {node: '>=6'}
peerDependencies:
jest-resolve: '*'
peerDependenciesMeta:
jest-resolve:
optional: true
dependencies:
jest-resolve: 29.6.2
dev: true
/jest-puppeteer@4.4.0(puppeteer-core@3.0.0):
resolution: {integrity: sha512-ZaiCTlPZ07B9HW0erAWNX6cyzBqbXMM7d2ugai4epBDKpKvRDpItlRQC6XjERoJELKZsPziFGS0OhhUvTvQAXA==}
peerDependencies:
@ -32584,6 +33061,16 @@ packages:
- supports-color
dev: true
/jest-resolve-dependencies@29.6.2:
resolution: {integrity: sha512-LGqjDWxg2fuQQm7ypDxduLu/m4+4Lb4gczc13v51VMZbVP5tSBILqVx8qfWcsdP8f0G7aIqByIALDB0R93yL+w==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
dependencies:
jest-regex-util: 29.4.3
jest-snapshot: 29.6.2
transitivePeerDependencies:
- supports-color
dev: true
/jest-resolve@24.9.0:
resolution: {integrity: sha512-TaLeLVL1l08YFZAt3zaPtjiVvyy4oSA6CRe+0AFPPVX3Q/VI0giIWWoAvoS5L96vj9Dqxj4fB5p2qrHCmTU/MQ==}
engines: {node: '>= 6'}
@ -32653,6 +33140,21 @@ packages:
resolve.exports: 2.0.2
slash: 3.0.0
/jest-resolve@29.6.2:
resolution: {integrity: sha512-G/iQUvZWI5e3SMFssc4ug4dH0aZiZpsDq9o1PtXTV1210Ztyb2+w+ZgQkB3iOiC5SmAEzJBOHWz6Hvrd+QnNPw==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
dependencies:
chalk: 4.1.2
graceful-fs: 4.2.9
jest-haste-map: 29.6.2
jest-pnp-resolver: 1.2.2(jest-resolve@29.6.2)
jest-util: 29.6.2
jest-validate: 29.6.2
resolve: 1.22.1
resolve.exports: 2.0.2
slash: 3.0.0
dev: true
/jest-runner-groups@2.2.0(jest-docblock@29.4.3)(jest-runner@29.5.0):
resolution: {integrity: sha512-Sp/B9ZX0CDAKa9dIkgH0sGyl2eDuScV4SVvOxqhBMxqWpsNAkmol/C58aTFmPWZj+C0ZTW1r1BSu66MTCN+voA==}
engines: {node: '>= 10.14.2'}
@ -32814,6 +33316,35 @@ packages:
transitivePeerDependencies:
- supports-color
/jest-runner@29.6.2:
resolution: {integrity: sha512-wXOT/a0EspYgfMiYHxwGLPCZfC0c38MivAlb2lMEAlwHINKemrttu1uSbcGbfDV31sFaPWnWJPmb2qXM8pqZ4w==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
dependencies:
'@jest/console': 29.6.2
'@jest/environment': 29.6.2
'@jest/test-result': 29.6.2
'@jest/transform': 29.6.2
'@jest/types': 29.6.1
'@types/node': 16.18.21
chalk: 4.1.2
emittery: 0.13.1
graceful-fs: 4.2.9
jest-docblock: 29.4.3
jest-environment-node: 29.6.2
jest-haste-map: 29.6.2
jest-leak-detector: 29.6.2
jest-message-util: 29.6.2
jest-resolve: 29.6.2
jest-runtime: 29.6.2
jest-util: 29.6.2
jest-watcher: 29.6.2
jest-worker: 29.6.2
p-limit: 3.1.0
source-map-support: 0.5.13
transitivePeerDependencies:
- supports-color
dev: true
/jest-runtime@24.9.0:
resolution: {integrity: sha512-8oNqgnmF3v2J6PVRM2Jfuj8oX3syKmaynlDMMKQ4iyzbQzIG6th5ub/lM2bCMTmoTKM3ykcUYI2Pw9xwNtjMnw==}
engines: {node: '>= 6'}
@ -32984,6 +33515,36 @@ packages:
transitivePeerDependencies:
- supports-color
/jest-runtime@29.6.2:
resolution: {integrity: sha512-2X9dqK768KufGJyIeLmIzToDmsN0m7Iek8QNxRSI/2+iPFYHF0jTwlO3ftn7gdKd98G/VQw9XJCk77rbTGZnJg==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
dependencies:
'@jest/environment': 29.6.2
'@jest/fake-timers': 29.6.2
'@jest/globals': 29.6.2
'@jest/source-map': 29.6.0
'@jest/test-result': 29.6.2
'@jest/transform': 29.6.2
'@jest/types': 29.6.1
'@types/node': 16.18.21
chalk: 4.1.2
cjs-module-lexer: 1.2.2
collect-v8-coverage: 1.0.1
glob: 7.2.3
graceful-fs: 4.2.9
jest-haste-map: 29.6.2
jest-message-util: 29.6.2
jest-mock: 29.6.2
jest-regex-util: 29.4.3
jest-resolve: 29.6.2
jest-snapshot: 29.6.2
jest-util: 29.6.2
slash: 3.0.0
strip-bom: 4.0.0
transitivePeerDependencies:
- supports-color
dev: true
/jest-serializer@24.9.0:
resolution: {integrity: sha512-DxYipDr8OvfrKH3Kel6NdED3OXxjvxXZ1uIY2I9OFbGg+vUkkg7AGvi65qbhbWNPvDckXmzMPbK3u3HaDO49bQ==}
engines: {node: '>= 6'}
@ -33135,6 +33696,34 @@ packages:
transitivePeerDependencies:
- supports-color
/jest-snapshot@29.6.2:
resolution: {integrity: sha512-1OdjqvqmRdGNvWXr/YZHuyhh5DeaLp1p/F8Tht/MrMw4Kr1Uu/j4lRG+iKl1DAqUJDWxtQBMk41Lnf/JETYBRA==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
dependencies:
'@babel/core': 7.21.3
'@babel/generator': 7.21.3
'@babel/plugin-syntax-jsx': 7.21.4(@babel/core@7.21.3)
'@babel/plugin-syntax-typescript': 7.18.6(@babel/core@7.21.3)
'@babel/types': 7.22.4
'@jest/expect-utils': 29.6.2
'@jest/transform': 29.6.2
'@jest/types': 29.6.1
babel-preset-current-node-syntax: 1.0.1(@babel/core@7.21.3)
chalk: 4.1.2
expect: 29.6.2
graceful-fs: 4.2.9
jest-diff: 29.6.2
jest-get-type: 29.4.3
jest-matcher-utils: 29.6.2
jest-message-util: 29.6.2
jest-util: 29.6.2
natural-compare: 1.4.0
pretty-format: 29.6.2
semver: 7.5.3
transitivePeerDependencies:
- supports-color
dev: true
/jest-util@24.9.0:
resolution: {integrity: sha512-x+cZU8VRmOJxbA1K5oDBdxQmdq0OIdADarLxk0Mq+3XS4jgvhG/oKGWcIDCtPG0HgjxOYvF+ilPJQsAyXfbNOg==}
engines: {node: '>= 6'}
@ -33199,6 +33788,18 @@ packages:
graceful-fs: 4.2.9
picomatch: 2.3.1
/jest-util@29.6.2:
resolution: {integrity: sha512-3eX1qb6L88lJNCFlEADKOkjpXJQyZRiavX1INZ4tRnrBVr2COd3RgcTLyUiEXMNBlDU/cgYq6taUS0fExrWW4w==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
dependencies:
'@jest/types': 29.6.1
'@types/node': 16.18.21
chalk: 4.1.2
ci-info: 3.2.0
graceful-fs: 4.2.9
picomatch: 2.3.1
dev: true
/jest-validate@24.9.0:
resolution: {integrity: sha512-HPIt6C5ACwiqSiwi+OfSSHbK8sG7akG8eATl+IPKaeIjtPOeBUd/g3J7DghugzxrGjI93qS/+RPKe1H6PqvhRQ==}
engines: {node: '>= 6'}
@ -33256,6 +33857,18 @@ packages:
leven: 3.1.0
pretty-format: 29.5.0
/jest-validate@29.6.2:
resolution: {integrity: sha512-vGz0yMN5fUFRRbpJDPwxMpgSXW1LDKROHfBopAvDcmD6s+B/s8WJrwi+4bfH4SdInBA5C3P3BI19dBtKzx1Arg==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
dependencies:
'@jest/types': 29.6.1
camelcase: 6.2.1
chalk: 4.1.2
jest-get-type: 29.4.3
leven: 3.1.0
pretty-format: 29.6.2
dev: true
/jest-watcher@24.9.0:
resolution: {integrity: sha512-+/fLOfKPXXYJDYlks62/4R4GoT+GU1tYZed99JSCOsmzkkF7727RqKrjNAxtfO4YpGv11wybgRvCjR73lK2GZw==}
engines: {node: '>= 6'}
@ -33321,6 +33934,20 @@ packages:
jest-util: 29.5.0
string-length: 4.0.2
/jest-watcher@29.6.2:
resolution: {integrity: sha512-GZitlqkMkhkefjfN/p3SJjrDaxPflqxEAv3/ik10OirZqJGYH5rPiIsgVcfof0Tdqg3shQGdEIxDBx+B4tuLzA==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
dependencies:
'@jest/test-result': 29.6.2
'@jest/types': 29.6.1
'@types/node': 16.18.21
ansi-escapes: 4.3.2
chalk: 4.1.2
emittery: 0.13.1
jest-util: 29.6.2
string-length: 4.0.2
dev: true
/jest-worker@24.9.0:
resolution: {integrity: sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==}
engines: {node: '>= 6'}
@ -33362,6 +33989,16 @@ packages:
merge-stream: 2.0.0
supports-color: 8.1.1
/jest-worker@29.6.2:
resolution: {integrity: sha512-l3ccBOabTdkng8I/ORCkADz4eSMKejTYv1vB/Z83UiubqhC1oQ5Li6dWCyqOIvSifGjUBxuvxvlm6KGK2DtuAQ==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
dependencies:
'@types/node': 16.18.21
jest-util: 29.6.2
merge-stream: 2.0.0
supports-color: 8.1.1
dev: true
/jest@24.9.0:
resolution: {integrity: sha512-YvkBL1Zm7d2B1+h5fHEOdyjCG+sGMz4f8D86/0HiqJ6MB4MnDc8FgP5vdWsGnemOQro7lnYo8UakZ3+5A0jxGw==}
engines: {node: '>= 6'}
@ -33446,6 +34083,27 @@ packages:
- ts-node
dev: true
/jest@29.6.2(@types/node@16.18.21)(ts-node@10.9.1):
resolution: {integrity: sha512-8eQg2mqFbaP7CwfsTpCxQ+sHzw1WuNWL5UUvjnWP4hx2riGz9fPSzYOaU5q8/GqWn1TfgZIVTqYJygbGbWAANg==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
hasBin: true
peerDependencies:
node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0
peerDependenciesMeta:
node-notifier:
optional: true
dependencies:
'@jest/core': 29.6.2(ts-node@10.9.1)
'@jest/types': 29.6.1
import-local: 3.0.3
jest-cli: 29.6.2(@types/node@16.18.21)(ts-node@10.9.1)
transitivePeerDependencies:
- '@types/node'
- babel-plugin-macros
- supports-color
- ts-node
dev: true
/jmespath@0.16.0:
resolution: {integrity: sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw==}
engines: {node: '>= 0.6.0'}
@ -38485,6 +39143,15 @@ packages:
ansi-styles: 5.2.0
react-is: 18.2.0
/pretty-format@29.6.2:
resolution: {integrity: sha512-1q0oC8eRveTg5nnBEWMXAU2qpv65Gnuf2eCQzSjxpWFkPaPARwqZZDGuNE0zPAZfTCHzIk3A8dIjwlQKKLphyg==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
dependencies:
'@jest/schemas': 29.6.0
ansi-styles: 5.2.0
react-is: 18.2.0
dev: true
/pretty-hrtime@1.0.3:
resolution: {integrity: sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=}
engines: {node: '>= 0.8'}
@ -43448,6 +44115,40 @@ packages:
yargs-parser: 21.1.1
dev: true
/ts-jest@29.1.1(@babel/core@7.21.3)(jest@29.6.2)(typescript@5.1.6):
resolution: {integrity: sha512-D6xjnnbP17cC85nliwGiL+tpoKN0StpgE0TeOjXQTU6MVCfsB4v7aW05CgQ/1OywGb0x/oy9hHFnN+sczTiRaA==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
hasBin: true
peerDependencies:
'@babel/core': '>=7.0.0-beta.0 <8'
'@jest/types': ^29.0.0
babel-jest: ^29.0.0
esbuild: '*'
jest: ^29.0.0
typescript: '>=4.3 <6'
peerDependenciesMeta:
'@babel/core':
optional: true
'@jest/types':
optional: true
babel-jest:
optional: true
esbuild:
optional: true
dependencies:
'@babel/core': 7.21.3
bs-logger: 0.2.6
fast-json-stable-stringify: 2.1.0
jest: 29.6.2(@types/node@16.18.21)(ts-node@10.9.1)
jest-util: 29.5.0
json5: 2.2.3
lodash.memoize: 4.1.2
make-error: 1.3.6
semver: 7.5.3
typescript: 5.1.6
yargs-parser: 21.1.1
dev: true
/ts-loader@9.4.1(typescript@5.1.6)(webpack@5.76.3):
resolution: {integrity: sha512-384TYAqGs70rn9F0VBnh6BPTfhga7yFNdC5gXbQpDrBj9/KsT4iRkGqKXhziofHOlE2j6YEaiTYVGKKvPhGWvw==}
engines: {node: '>=12.0.0'}

View File

@ -12,7 +12,7 @@ Currently there are 3 commands:
Here is an example `analyzer` command, run from this directory:
`pnpm run analyzer -- lint "release/6.8" "6.8.0" -b release/6.7`
`pnpm analyzer lint "release/6.8" "6.8.0" -b release/6.7`
In this command we compare the `release/6.7` and `release/6.8` branches to find differences, and we're looking for changes introduced since `6.8.0` (using the `@since` tag).
@ -22,7 +22,7 @@ To find out more about the other arguments to the command you can run `pnpm run
Here is an example `major-minor` command, run from this directory:
`pnpm run analyzer major-minor -- "release/6.8" "plugins/woocommerce/woocommerce.php"`
`pnpm analyzer major-minor "release/6.8" "plugins/woocommerce/woocommerce.php"`
In this command we checkout the branch `release/6.8` and check the version of the woocommerce.php mainfile located at the path passed. Note that at the time of
writing the main file in this particular branch reports `6.8.1` so the output of this command is `6.8.0`.

View File

@ -0,0 +1,5 @@
/** @type {import('ts-jest').JestConfigWithTsJest} */
module.exports = {
preset: 'ts-jest',
testEnvironment: 'node',
};

View File

@ -9,26 +9,30 @@
"dependencies": {
"@actions/core": "^1.10.0",
"@commander-js/extra-typings": "^10.0.3",
"@woocommerce/monorepo-utils": "workspace:*",
"@oclif/core": "^2.4.0",
"@tsconfig/node16": "^1.0.3",
"@types/uuid": "^8.3.4",
"@woocommerce/monorepo-utils": "workspace:*",
"commander": "^9.4.0",
"dotenv": "^10.0.0",
"simple-git": "^3.10.0",
"uuid": "^8.3.2"
},
"devDependencies": {
"@types/jest": "^27.4.1",
"@types/node": "^16.18.18",
"@woocommerce/eslint-plugin": "workspace:*",
"eslint": "^8.32.0",
"jest": "^29.6.2",
"ts-jest": "^29.1.1",
"ts-node": "^10.2.1",
"tslib": "^2.3.1",
"typescript": "^5.1.6"
},
"scripts": {
"lint": "eslint . --ext .ts",
"posttest": "pnpm lint",
"turbo:test": "jest",
"test": "pnpm -w exec turbo run turbo:test --filter=$npm_package_name",
"analyzer": "node -r ts-node/register ./src/commands/analyzer/index.ts"
},
"engines": {

View File

@ -0,0 +1,3 @@
// See https://stackoverflow.com/a/75924883/472987
const uuid = require( '../../../node_modules/uuid/dist' );
module.exports = uuid;

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,94 @@
/**
* External dependencies
*/
import fs from 'fs';
/**
* Internal dependencies
*/
import { scanForHookChanges } from '../hook-changes';
describe( 'scanForHookChages', () => {
it( 'should return a Map with multiple entries in patches with multiple hook changes for the same file.', async () => {
// load the text file as a string variable
const content = fs.readFileSync(
__dirname + '/fixtures/diff.txt',
'utf8'
);
// We don't need a repo path for this test, its just for generating github links
const result = await scanForHookChanges( content, '6.8.0', __dirname );
// Expect 2 entries in /plugins/woocommerce/includes/abstracts/abstract-wc-order.php
expect(
result.get(
'/plugins/woocommerce/includes/abstracts/abstract-wc-order.php'
)
).toBeDefined();
expect(
result.get(
'/plugins/woocommerce/includes/abstracts/abstract-wc-order.php'
)?.name
).toBe( 'woocommerce_apply_base_tax_for_local_pickup' );
expect(
result.get(
'/plugins/woocommerce/includes/abstracts/abstract-wc-order.php#2'
)
).toBeDefined();
expect(
result.get(
'/plugins/woocommerce/includes/abstracts/abstract-wc-order.php#2'
)?.name
).toBe( 'woocommerce_local_pickup_methods' );
// Expect 2 entries in /plugins/woocommerce/includes/emails/class-wc-email.php
expect(
result.get(
'/plugins/woocommerce/includes/emails/class-wc-email.php'
)
).toBeDefined();
expect(
result.get(
'/plugins/woocommerce/includes/emails/class-wc-email.php'
)?.name
).toBe( 'woocommerce_allow_switching_email_locale' );
expect(
result.get(
'/plugins/woocommerce/includes/emails/class-wc-email.php#2'
)
).toBeDefined();
expect(
result.get(
'/plugins/woocommerce/includes/emails/class-wc-email.php#2'
)?.name
).toBe( 'woocommerce_allow_restoring_email_locale' );
// Expect 1 entry in /plugins/woocommerce/includes/export/abstract-wc-csv-batch-exporter.php
expect(
result.get(
'/plugins/woocommerce/includes/export/abstract-wc-csv-batch-exporter.php'
)
).toBeDefined();
expect(
result.get(
'/plugins/woocommerce/includes/export/abstract-wc-csv-batch-exporter.php'
)?.name
).toBe( 'woocommerce_csv_exporter_fopen_mode' );
// Expect 1 entry in /plugins/woocommerce/src/Internal/DataStores/Orders/OrdersTableDataStore.php
expect(
result.get(
'/plugins/woocommerce/src/Internal/DataStores/Orders/OrdersTableDataStore.php'
)
).toBeDefined();
expect(
result.get(
'/plugins/woocommerce/src/Internal/DataStores/Orders/OrdersTableDataStore.php'
)?.name
).toBe( 'woocommerce_orders_table_datastore_extra_db_rows_for_order' );
expect( result.size ).toBe( 6 );
} );
} );

View File

@ -5,7 +5,7 @@ import {
getFilename,
getPatches,
} from '@woocommerce/monorepo-utils/src/core/git';
import fs from 'node:fs';
import fs, { existsSync } from 'node:fs';
/**
* Internal dependencies
@ -27,6 +27,22 @@ export type HookChangeDescription = {
ghLink: string;
};
const getUniqueKey = (
changes: Map< string, HookChangeDescription >,
filePath: string
) => {
let index = 1;
let uniqueKey = filePath;
// If the key already exists, append a number (#1, #2, etc.) until we find a unique key.
while ( changes.has( uniqueKey ) ) {
index++;
uniqueKey = `${ filePath }#${ index }`;
}
return uniqueKey;
};
export const scanForHookChanges = async (
content: string,
version: string,
@ -47,23 +63,25 @@ export const scanForHookChanges = async (
for ( const p in patches ) {
const patch = patches[ p ];
// Separate patches into bits beginning with a comment. If a bit does not have an action, disregard.
const patchWithHook = patch.split( '/**' ).find( ( s ) => {
// Separate patch into pieces beginning with a comment. If a piece does not have actions/filters discard it.
const patchesWithHooks = patch.split( '/**' ).filter( ( s ) => {
return s.includes( 'apply_filters' ) || s.includes( 'do_action' );
} );
if ( ! patchWithHook ) {
continue;
}
const results = patchWithHook.match( newRegEx );
if ( ! results ) {
if ( ! patchesWithHooks.length ) {
continue;
}
const lines = patch.split( '\n' );
const filePath = getFilename( lines[ 0 ] );
for ( const hookPatch of patchesWithHooks ) {
const results = hookPatch.match( newRegEx );
if ( ! results ) {
continue;
}
for ( const raw of results ) {
// Extract hook name and type.
const hookName = raw.match(
@ -86,6 +104,8 @@ export const scanForHookChanges = async (
let ghLink = '';
try {
// If path doesn't exist for some reason don't try create a link.
if ( existsSync( tmpRepoPath + filePath ) ) {
const data = await fs.promises.readFile(
tmpRepoPath + filePath,
'utf-8'
@ -103,8 +123,11 @@ export const scanForHookChanges = async (
) }#L${ lineNum }`;
}
} );
}
changes.set( filePath, {
const uniqueKey = getUniqueKey( changes, filePath );
changes.set( uniqueKey, {
filePath,
name,
hookType,
@ -122,6 +145,7 @@ export const scanForHookChanges = async (
}
}
}
}
return changes;
};

View File

@ -3,7 +3,7 @@
*/
import { Logger } from '@woocommerce/monorepo-utils/src/core/logger';
import {
cloneRepo,
cloneRepoShallow,
generateDiff,
} from '@woocommerce/monorepo-utils/src/core/git';
import { execSync } from 'child_process';
@ -28,7 +28,7 @@ const generateVersionDiff = async (
const tmpRepoPath =
typeof clonedPath !== 'undefined'
? clonedPath
: await cloneRepo( source );
: await cloneRepoShallow( source );
Logger.endTask();
@ -126,7 +126,7 @@ export const scanForChanges = async (
const tmpRepoPath =
typeof clonedPath !== 'undefined'
? clonedPath
: await cloneRepo( source );
: await cloneRepoShallow( source );
Logger.endTask();