From 9511b7475aa4cee07f4f809e46aea215fbd5e658 Mon Sep 17 00:00:00 2001 From: EternalHeart Date: Mon, 11 Mar 2024 14:20:03 +0800 Subject: [PATCH 001/111] chore: add hook to update changelog and update changelog --- .release-it.json | 3 +- CHANGELOG.md | 188 +++++++++++++++++++++++------------------------ 2 files changed, 92 insertions(+), 99 deletions(-) diff --git a/.release-it.json b/.release-it.json index a9c4073..8b5d728 100644 --- a/.release-it.json +++ b/.release-it.json @@ -5,6 +5,7 @@ "autoGenerate": true }, "git": { + "commitMessage": "feat: v${version}", "tagName": "cli-v${version}", "tag": true, @@ -15,7 +16,7 @@ "publish": false }, "hooks": { - "after:bump": "echo 更新版本成功" + "after:bump": "git add CHANGELOG.md && git commit -m 'chore: update changelog' && echo 更新版本成功!添加changelog的commit成功!" }, "plugins": { "@release-it/bumper": { diff --git a/CHANGELOG.md b/CHANGELOG.md index 65fee24..e48c542 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,133 +1,125 @@ - - ## 1.0.5 (2024-03-11) - ### Bug Fixes -* add break before default ([08094b4](https://github.com/wh131462/leetcode-practice/commit/08094b4389a3fd1e442615dd687a55a08bd5ac62)) -* change ([1eb6e3c](https://github.com/wh131462/leetcode-practice/commit/1eb6e3c5ba35b22d7d3ef6893b6ace2d80050d6e)) -* change ([0801a1d](https://github.com/wh131462/leetcode-practice/commit/0801a1d6c63fef76d570ed7d943bd0d6f85c70e6)) -* change template ([872e867](https://github.com/wh131462/leetcode-practice/commit/872e867021c347e1fe4236e94cbd67aed47010a9)) -* console table text length verflow dislocation error ([3a563a2](https://github.com/wh131462/leetcode-practice/commit/3a563a2169bae2dd0ef26fb16e9bdedce21c8be2)) -* correct packageManager's format (fix [#7](https://github.com/wh131462/leetcode-practice/issues/7)) ([faa2280](https://github.com/wh131462/leetcode-practice/commit/faa2280746facefd2bd11d45d85cc70026821c0c)) -* delete src ([a932ce4](https://github.com/wh131462/leetcode-practice/commit/a932ce42227a8fab5d83d8bbe7a2add78c0d26a6)) -* delete src file ([2a53e63](https://github.com/wh131462/leetcode-practice/commit/2a53e634bbb7da7f0bf9df129901bb4c7839ba57)) -* find question by keyword error ([69da517](https://github.com/wh131462/leetcode-practice/commit/69da51740ff7f78a89c05ea534f80cc56f588d7f)) -* find question list ([6f78bfa](https://github.com/wh131462/leetcode-practice/commit/6f78bfa8fbab5d375f48d541c1b50bbfec55f9aa)) -* fix all lint error ([e99e76b](https://github.com/wh131462/leetcode-practice/commit/e99e76b2e1c7c9d387ab658a4c1f4057bf1a60da)) -* format readme form ([f002d77](https://github.com/wh131462/leetcode-practice/commit/f002d77f6e3f9e9a1259de2a5fee4b1858768620)) -* format readme form ([df5e45c](https://github.com/wh131462/leetcode-practice/commit/df5e45c9d55fc98dbe6bbc5b7fc80d6716d5bd34)) -* format readme form ([2f182ca](https://github.com/wh131462/leetcode-practice/commit/2f182ca85575fa8d2963fc0e657ee425b2215153)) -* format readme lint ([85b97f6](https://github.com/wh131462/leetcode-practice/commit/85b97f64258eadf4dcf1b29747e0ed0c3d161440)) -* getTestCase ([4ac7f65](https://github.com/wh131462/leetcode-practice/commit/4ac7f6505a47ab60d4ea74c659bb49c0d19667e6)) -* **headers:** remove useless header configuration ([105c841](https://github.com/wh131462/leetcode-practice/commit/105c84141206dfcf11d6a4ea46775f7546150acd)) -* **headers:** remove useless header configuration ([3ba1a98](https://github.com/wh131462/leetcode-practice/commit/3ba1a982a5e1d4c3b29d09af40df910f9d9dd3a5)) -* ignore lint ([46a9135](https://github.com/wh131462/leetcode-practice/commit/46a91358376a387b1e395e99424012685c21e09b)) -* ignore lint ([d376299](https://github.com/wh131462/leetcode-practice/commit/d376299a7f7e20453aaee978bba4178079b1e931)) -* lint ([cc63e57](https://github.com/wh131462/leetcode-practice/commit/cc63e572de4afa50b82791e1e896234b8d6b8ee4)) -* listnode check ([b8b3b47](https://github.com/wh131462/leetcode-practice/commit/b8b3b475637647035ac3eb9bfc5b27b61bde9a49)) -* log ([bd1d01b](https://github.com/wh131462/leetcode-practice/commit/bd1d01b4a440f8f80dfc67b04180dde29bac9da9)) -* memory calc error ([c09b344](https://github.com/wh131462/leetcode-practice/commit/c09b3440f81d0a3d6bf740aec06b320e00574b2c)) -* perfect version for cli install ([5a257f4](https://github.com/wh131462/leetcode-practice/commit/5a257f43fe897be40dd64a8ff8532387290a15fa)) -* readme_cn ([63dab20](https://github.com/wh131462/leetcode-practice/commit/63dab20f3956ae5f2abbc5df721c4ccc61d90bd2)) -* rename README ([2b8c294](https://github.com/wh131462/leetcode-practice/commit/2b8c294b0259d3476285ca985b8ad1e3fb2c6c2b)) -* rewrite log ([53d15b4](https://github.com/wh131462/leetcode-practice/commit/53d15b491c57d9e36a6fd6c36193517edb915425)) -* search ([5bb93dd](https://github.com/wh131462/leetcode-practice/commit/5bb93dd323c0786a17b1a4e4eae1ae3e1ba9625b)) -* **store:** fix the bug for create dir outside ([7254f29](https://github.com/wh131462/leetcode-practice/commit/7254f2988a656c28c0e7fbc685e16ff85cc1cbe6)) -* **store:** fix the bug for create dir outside ([1c66484](https://github.com/wh131462/leetcode-practice/commit/1c664846431448410ce3ddfc68ca29161c8e2683)) -* **tempate:** 修复空格导致字符串匹配失效问题 ([07bdbdc](https://github.com/wh131462/leetcode-practice/commit/07bdbdc88b1e50c781a65863dd1ba45c98eb5d79)) -* **test:** 修复挂掉的测试用例 ([4593058](https://github.com/wh131462/leetcode-practice/commit/4593058a065accc9e55e916352013de7bc6d4533)) -* update view for cli ([0b8ecf0](https://github.com/wh131462/leetcode-practice/commit/0b8ecf0ac7b2567168e35a6513308825aa514070)) -* 优化代码 ([da6aa6d](https://github.com/wh131462/leetcode-practice/commit/da6aa6d5ab87c4ecb626f1762033062a9ac432e4)) -* 修复原始创建不中止问题 ([ddb0ea1](https://github.com/wh131462/leetcode-practice/commit/ddb0ea11ca02abe73ee80ec8b0130466efbce457)) -* 模版文件路径错误 ([e46c94c](https://github.com/wh131462/leetcode-practice/commit/e46c94c85583b367d831326e4e873512b6ccf504)) - +- add break before default ([08094b4](https://github.com/wh131462/leetcode-practice/commit/08094b4389a3fd1e442615dd687a55a08bd5ac62)) +- change ([1eb6e3c](https://github.com/wh131462/leetcode-practice/commit/1eb6e3c5ba35b22d7d3ef6893b6ace2d80050d6e)) +- change ([0801a1d](https://github.com/wh131462/leetcode-practice/commit/0801a1d6c63fef76d570ed7d943bd0d6f85c70e6)) +- change template ([872e867](https://github.com/wh131462/leetcode-practice/commit/872e867021c347e1fe4236e94cbd67aed47010a9)) +- console table text length verflow dislocation error ([3a563a2](https://github.com/wh131462/leetcode-practice/commit/3a563a2169bae2dd0ef26fb16e9bdedce21c8be2)) +- correct packageManager's format (fix [#7](https://github.com/wh131462/leetcode-practice/issues/7)) ([faa2280](https://github.com/wh131462/leetcode-practice/commit/faa2280746facefd2bd11d45d85cc70026821c0c)) +- delete src ([a932ce4](https://github.com/wh131462/leetcode-practice/commit/a932ce42227a8fab5d83d8bbe7a2add78c0d26a6)) +- delete src file ([2a53e63](https://github.com/wh131462/leetcode-practice/commit/2a53e634bbb7da7f0bf9df129901bb4c7839ba57)) +- find question by keyword error ([69da517](https://github.com/wh131462/leetcode-practice/commit/69da51740ff7f78a89c05ea534f80cc56f588d7f)) +- find question list ([6f78bfa](https://github.com/wh131462/leetcode-practice/commit/6f78bfa8fbab5d375f48d541c1b50bbfec55f9aa)) +- fix all lint error ([e99e76b](https://github.com/wh131462/leetcode-practice/commit/e99e76b2e1c7c9d387ab658a4c1f4057bf1a60da)) +- format readme form ([f002d77](https://github.com/wh131462/leetcode-practice/commit/f002d77f6e3f9e9a1259de2a5fee4b1858768620)) +- format readme form ([df5e45c](https://github.com/wh131462/leetcode-practice/commit/df5e45c9d55fc98dbe6bbc5b7fc80d6716d5bd34)) +- format readme form ([2f182ca](https://github.com/wh131462/leetcode-practice/commit/2f182ca85575fa8d2963fc0e657ee425b2215153)) +- format readme lint ([85b97f6](https://github.com/wh131462/leetcode-practice/commit/85b97f64258eadf4dcf1b29747e0ed0c3d161440)) +- getTestCase ([4ac7f65](https://github.com/wh131462/leetcode-practice/commit/4ac7f6505a47ab60d4ea74c659bb49c0d19667e6)) +- **headers:** remove useless header configuration ([105c841](https://github.com/wh131462/leetcode-practice/commit/105c84141206dfcf11d6a4ea46775f7546150acd)) +- **headers:** remove useless header configuration ([3ba1a98](https://github.com/wh131462/leetcode-practice/commit/3ba1a982a5e1d4c3b29d09af40df910f9d9dd3a5)) +- ignore lint ([46a9135](https://github.com/wh131462/leetcode-practice/commit/46a91358376a387b1e395e99424012685c21e09b)) +- ignore lint ([d376299](https://github.com/wh131462/leetcode-practice/commit/d376299a7f7e20453aaee978bba4178079b1e931)) +- lint ([cc63e57](https://github.com/wh131462/leetcode-practice/commit/cc63e572de4afa50b82791e1e896234b8d6b8ee4)) +- listnode check ([b8b3b47](https://github.com/wh131462/leetcode-practice/commit/b8b3b475637647035ac3eb9bfc5b27b61bde9a49)) +- log ([bd1d01b](https://github.com/wh131462/leetcode-practice/commit/bd1d01b4a440f8f80dfc67b04180dde29bac9da9)) +- memory calc error ([c09b344](https://github.com/wh131462/leetcode-practice/commit/c09b3440f81d0a3d6bf740aec06b320e00574b2c)) +- perfect version for cli install ([5a257f4](https://github.com/wh131462/leetcode-practice/commit/5a257f43fe897be40dd64a8ff8532387290a15fa)) +- readme_cn ([63dab20](https://github.com/wh131462/leetcode-practice/commit/63dab20f3956ae5f2abbc5df721c4ccc61d90bd2)) +- rename README ([2b8c294](https://github.com/wh131462/leetcode-practice/commit/2b8c294b0259d3476285ca985b8ad1e3fb2c6c2b)) +- rewrite log ([53d15b4](https://github.com/wh131462/leetcode-practice/commit/53d15b491c57d9e36a6fd6c36193517edb915425)) +- search ([5bb93dd](https://github.com/wh131462/leetcode-practice/commit/5bb93dd323c0786a17b1a4e4eae1ae3e1ba9625b)) +- **store:** fix the bug for create dir outside ([7254f29](https://github.com/wh131462/leetcode-practice/commit/7254f2988a656c28c0e7fbc685e16ff85cc1cbe6)) +- **store:** fix the bug for create dir outside ([1c66484](https://github.com/wh131462/leetcode-practice/commit/1c664846431448410ce3ddfc68ca29161c8e2683)) +- **tempate:** 修复空格导致字符串匹配失效问题 ([07bdbdc](https://github.com/wh131462/leetcode-practice/commit/07bdbdc88b1e50c781a65863dd1ba45c98eb5d79)) +- **test:** 修复挂掉的测试用例 ([4593058](https://github.com/wh131462/leetcode-practice/commit/4593058a065accc9e55e916352013de7bc6d4533)) +- update view for cli ([0b8ecf0](https://github.com/wh131462/leetcode-practice/commit/0b8ecf0ac7b2567168e35a6513308825aa514070)) +- 优化代码 ([da6aa6d](https://github.com/wh131462/leetcode-practice/commit/da6aa6d5ab87c4ecb626f1762033062a9ac432e4)) +- 修复原始创建不中止问题 ([ddb0ea1](https://github.com/wh131462/leetcode-practice/commit/ddb0ea11ca02abe73ee80ec8b0130466efbce457)) +- 模版文件路径错误 ([e46c94c](https://github.com/wh131462/leetcode-practice/commit/e46c94c85583b367d831326e4e873512b6ccf504)) ### Code Refactoring -* directory refactor ([7a3a948](https://github.com/wh131462/leetcode-practice/commit/7a3a94806a1843e1c4bb86ece65d4e19ef9817fa)) - - -* cli finish basically (#5) ([5af52e3](https://github.com/wh131462/leetcode-practice/commit/5af52e31b466517d2fdea9443376d27bff646bdf)), closes [#5](https://github.com/wh131462/leetcode-practice/issues/5) +- directory refactor ([7a3a948](https://github.com/wh131462/leetcode-practice/commit/7a3a94806a1843e1c4bb86ece65d4e19ef9817fa)) +- cli finish basically (#5) ([5af52e3](https://github.com/wh131462/leetcode-practice/commit/5af52e31b466517d2fdea9443376d27bff646bdf)), closes [#5](https://github.com/wh131462/leetcode-practice/issues/5) ### Features -* add ([fb3fadc](https://github.com/wh131462/leetcode-practice/commit/fb3fadc7fca166be0eefe51a817899466ab48b27)) -* add cz plugin ([4fd5af1](https://github.com/wh131462/leetcode-practice/commit/4fd5af151ac32d3daabcdc862505962fcd32f129)) -* add eslint ([be523ea](https://github.com/wh131462/leetcode-practice/commit/be523ea0f3085e003a2e0b5fb1c568b65cc21714)) -* add get question ([e5572b6](https://github.com/wh131462/leetcode-practice/commit/e5572b6357c8c056aa32eab53476736561261ebe)) -* add get question by keyword function ([097302a](https://github.com/wh131462/leetcode-practice/commit/097302afe095ad70d1c58942dc8ac8fb516e1eed)) -* add getQuestionChineseName function to get chinese name ([9520e75](https://github.com/wh131462/leetcode-practice/commit/9520e757741ff008439affd20db582458a37b674)) -* add getQuestionCode ([dbdb255](https://github.com/wh131462/leetcode-practice/commit/dbdb2553a2c47c9ee40fada33bfec7458ae4ccb6)) -* add memory calculate ([e6c315a](https://github.com/wh131462/leetcode-practice/commit/e6c315ab1524327697278e3b41c622fb22928896)) -* add memory demo ([8065924](https://github.com/wh131462/leetcode-practice/commit/8065924ca451e043f80644a31eb5d9543946f026)) -* add open process ([80dc9f5](https://github.com/wh131462/leetcode-practice/commit/80dc9f530eaae98e5449b3ebdf5c9e69ec452a17)) -* add prettier and commitlint ([608f4df](https://github.com/wh131462/leetcode-practice/commit/608f4dfdc4c0aebb9ead3e46abcde71fcc962b39)) -* change git push rules ([ee3e558](https://github.com/wh131462/leetcode-practice/commit/ee3e558496ef72f2daee071b88e79ddd06503e7c)) -* **cli:** 简化命令 使得命令可以在任何路径下运行 ([26fcffb](https://github.com/wh131462/leetcode-practice/commit/26fcffb8daa0e0a70e78c47772ef5059c1c825d1)) -* **commit:** finish set question range tag in file and get code in file by range tag ([61e2924](https://github.com/wh131462/leetcode-practice/commit/61e2924d2607e96bbd37947f05e718a10ac9edd6)) -* **commit:** finish set question range tag in file and get code in file by range tag ([b7eccdd](https://github.com/wh131462/leetcode-practice/commit/b7eccddb725ef460d04e8574ce5e02db533ccfd9)) -* **create:** can log file path and func start line number after create ([3b1365c](https://github.com/wh131462/leetcode-practice/commit/3b1365cbf9e86d4c0959817cbb845dd3495a12ab)) -* eslint忽略文件 ([f91889c](https://github.com/wh131462/leetcode-practice/commit/f91889c8348766a63136ada6fcd49e79a0e54378)) -* finish the view create & check ([9e96e0a](https://github.com/wh131462/leetcode-practice/commit/9e96e0a24f0232827196ce2bdb6c3d04966f42bd)) -* get js code ([b1fd6bb](https://github.com/wh131462/leetcode-practice/commit/b1fd6bb8d85d080c1f89a53cd99416c84e3abd10)) -* hot100合并代码 ([3ddd7c6](https://github.com/wh131462/leetcode-practice/commit/3ddd7c6237bd43655c4e3d0e490bd997afb1df5a)) -* node vm执行index.js脚本 ([f894e30](https://github.com/wh131462/leetcode-practice/commit/f894e3096c15d9939e0b93688f37c4272775d300)) -* publish config & build config ([1affd2a](https://github.com/wh131462/leetcode-practice/commit/1affd2ab7b1e1ad942d5dc3fbe5c300b5a92f240)) -* sucess log with green and fail log with red ([1eccefb](https://github.com/wh131462/leetcode-practice/commit/1eccefb023d28ca734c1886e0dc64a576d03f860)) -* update function basic ([a01c873](https://github.com/wh131462/leetcode-practice/commit/a01c8738aa060221421f2f17158c92a9069929a0)) -* update project using github ([a879d29](https://github.com/wh131462/leetcode-practice/commit/a879d29f9686f5c71d02bfe5c9122bc6fc90dc81)) -* version 1.0.2 ([4afe55e](https://github.com/wh131462/leetcode-practice/commit/4afe55e35ecea82dedbba3e6a3d9a2738365aa79)) -* **忽略测试覆盖率文件:** 忽略测试覆盖率文件 ([b05e380](https://github.com/wh131462/leetcode-practice/commit/b05e380ef84384f5f1ebbfb64628bd689933f755)) -* 新增填充markdown功能 ([1b8324d](https://github.com/wh131462/leetcode-practice/commit/1b8324d212898e8d0b7b2edc15244da31157a3c9)) -* 新增无向连通图数据结构 parse toArray实现,补充测试用例等 fix: 优化了转换逻辑 ([08f3787](https://github.com/wh131462/leetcode-practice/commit/08f3787f70de41d82610c1ce940f35c878dbf0d1)) -* 新增测试覆盖率 ([2627ecd](https://github.com/wh131462/leetcode-practice/commit/2627ecd00105d4af59e5c2fa59608da1144f17a8)) -* 测试用例中补充树和链表的数据结构以及转换逻辑,新增单元测试模块 ([ac9ccd1](https://github.com/wh131462/leetcode-practice/commit/ac9ccd155358306f667e9ffaa0aac9f16d58988a)) -* 统一数据结构 ([f15a8da](https://github.com/wh131462/leetcode-practice/commit/f15a8dad2500cef476e1340b93053be48364bf3e)) - +- add ([fb3fadc](https://github.com/wh131462/leetcode-practice/commit/fb3fadc7fca166be0eefe51a817899466ab48b27)) +- add cz plugin ([4fd5af1](https://github.com/wh131462/leetcode-practice/commit/4fd5af151ac32d3daabcdc862505962fcd32f129)) +- add eslint ([be523ea](https://github.com/wh131462/leetcode-practice/commit/be523ea0f3085e003a2e0b5fb1c568b65cc21714)) +- add get question ([e5572b6](https://github.com/wh131462/leetcode-practice/commit/e5572b6357c8c056aa32eab53476736561261ebe)) +- add get question by keyword function ([097302a](https://github.com/wh131462/leetcode-practice/commit/097302afe095ad70d1c58942dc8ac8fb516e1eed)) +- add getQuestionChineseName function to get chinese name ([9520e75](https://github.com/wh131462/leetcode-practice/commit/9520e757741ff008439affd20db582458a37b674)) +- add getQuestionCode ([dbdb255](https://github.com/wh131462/leetcode-practice/commit/dbdb2553a2c47c9ee40fada33bfec7458ae4ccb6)) +- add memory calculate ([e6c315a](https://github.com/wh131462/leetcode-practice/commit/e6c315ab1524327697278e3b41c622fb22928896)) +- add memory demo ([8065924](https://github.com/wh131462/leetcode-practice/commit/8065924ca451e043f80644a31eb5d9543946f026)) +- add open process ([80dc9f5](https://github.com/wh131462/leetcode-practice/commit/80dc9f530eaae98e5449b3ebdf5c9e69ec452a17)) +- add prettier and commitlint ([608f4df](https://github.com/wh131462/leetcode-practice/commit/608f4dfdc4c0aebb9ead3e46abcde71fcc962b39)) +- change git push rules ([ee3e558](https://github.com/wh131462/leetcode-practice/commit/ee3e558496ef72f2daee071b88e79ddd06503e7c)) +- **cli:** 简化命令 使得命令可以在任何路径下运行 ([26fcffb](https://github.com/wh131462/leetcode-practice/commit/26fcffb8daa0e0a70e78c47772ef5059c1c825d1)) +- **commit:** finish set question range tag in file and get code in file by range tag ([61e2924](https://github.com/wh131462/leetcode-practice/commit/61e2924d2607e96bbd37947f05e718a10ac9edd6)) +- **commit:** finish set question range tag in file and get code in file by range tag ([b7eccdd](https://github.com/wh131462/leetcode-practice/commit/b7eccddb725ef460d04e8574ce5e02db533ccfd9)) +- **create:** can log file path and func start line number after create ([3b1365c](https://github.com/wh131462/leetcode-practice/commit/3b1365cbf9e86d4c0959817cbb845dd3495a12ab)) +- eslint忽略文件 ([f91889c](https://github.com/wh131462/leetcode-practice/commit/f91889c8348766a63136ada6fcd49e79a0e54378)) +- finish the view create & check ([9e96e0a](https://github.com/wh131462/leetcode-practice/commit/9e96e0a24f0232827196ce2bdb6c3d04966f42bd)) +- get js code ([b1fd6bb](https://github.com/wh131462/leetcode-practice/commit/b1fd6bb8d85d080c1f89a53cd99416c84e3abd10)) +- hot100合并代码 ([3ddd7c6](https://github.com/wh131462/leetcode-practice/commit/3ddd7c6237bd43655c4e3d0e490bd997afb1df5a)) +- node vm执行index.js脚本 ([f894e30](https://github.com/wh131462/leetcode-practice/commit/f894e3096c15d9939e0b93688f37c4272775d300)) +- publish config & build config ([1affd2a](https://github.com/wh131462/leetcode-practice/commit/1affd2ab7b1e1ad942d5dc3fbe5c300b5a92f240)) +- sucess log with green and fail log with red ([1eccefb](https://github.com/wh131462/leetcode-practice/commit/1eccefb023d28ca734c1886e0dc64a576d03f860)) +- update function basic ([a01c873](https://github.com/wh131462/leetcode-practice/commit/a01c8738aa060221421f2f17158c92a9069929a0)) +- update project using github ([a879d29](https://github.com/wh131462/leetcode-practice/commit/a879d29f9686f5c71d02bfe5c9122bc6fc90dc81)) +- version 1.0.2 ([4afe55e](https://github.com/wh131462/leetcode-practice/commit/4afe55e35ecea82dedbba3e6a3d9a2738365aa79)) +- **忽略测试覆盖率文件:** 忽略测试覆盖率文件 ([b05e380](https://github.com/wh131462/leetcode-practice/commit/b05e380ef84384f5f1ebbfb64628bd689933f755)) +- 新增填充markdown功能 ([1b8324d](https://github.com/wh131462/leetcode-practice/commit/1b8324d212898e8d0b7b2edc15244da31157a3c9)) +- 新增无向连通图数据结构 parse toArray实现,补充测试用例等 fix: 优化了转换逻辑 ([08f3787](https://github.com/wh131462/leetcode-practice/commit/08f3787f70de41d82610c1ce940f35c878dbf0d1)) +- 新增测试覆盖率 ([2627ecd](https://github.com/wh131462/leetcode-practice/commit/2627ecd00105d4af59e5c2fa59608da1144f17a8)) +- 测试用例中补充树和链表的数据结构以及转换逻辑,新增单元测试模块 ([ac9ccd1](https://github.com/wh131462/leetcode-practice/commit/ac9ccd155358306f667e9ffaa0aac9f16d58988a)) +- 统一数据结构 ([f15a8da](https://github.com/wh131462/leetcode-practice/commit/f15a8dad2500cef476e1340b93053be48364bf3e)) ### Performance Improvements -* better scripts and easy mode to create question in project ([ffd9e29](https://github.com/wh131462/leetcode-practice/commit/ffd9e29ca35d9f4b8b6b2f8b94516e8f053261a5)) -* http dir structure and functions modify ([553ad58](https://github.com/wh131462/leetcode-practice/commit/553ad5861aa67423c1092f798f39b2bd4faf68f6)) - +- better scripts and easy mode to create question in project ([ffd9e29](https://github.com/wh131462/leetcode-practice/commit/ffd9e29ca35d9f4b8b6b2f8b94516e8f053261a5)) +- http dir structure and functions modify ([553ad58](https://github.com/wh131462/leetcode-practice/commit/553ad5861aa67423c1092f798f39b2bd4faf68f6)) ### BREAKING CHANGES -* srcipts即将废弃,视图交互性代码完善1/3 +- srcipts即将废弃,视图交互性代码完善1/3 -* feat: finish the view create & check +- feat: finish the view create & check -* feat:完成lc&lk指令 +- feat:完成lc&lk指令 -* fix: 优化代码 +- fix: 优化代码 -* feat: add getQuestionChineseName function to get chinese name +- feat: add getQuestionChineseName function to get chinese name -* chore: del scripts and .vscode files & ignore .vscode +- chore: del scripts and .vscode files & ignore .vscode -* docs: update todo & achive +- docs: update todo & achive -* perf: better scripts and easy mode to create question in project +- perf: better scripts and easy mode to create question in project -* feat: publish config & build config +- feat: publish config & build config -* chore: del src +- chore: del src -* fix: perfect version for cli install +- fix: perfect version for cli install -* fix:指令打包完善 +- fix:指令打包完善 -* fix:easy mode script +- fix:easy mode script -* docs:todo 拆分成单独文件 +- docs:todo 拆分成单独文件 -* chore:路径调整成全局路径 +- chore:路径调整成全局路径 -* docs: add CHANGELOG and TO-DO -* srcipts即将废弃,视图交互性代码完善1/3 +- docs: add CHANGELOG and TO-DO +- srcipts即将废弃,视图交互性代码完善1/3 ## [1.0.5-bera.0](https://github.com/wh131462/leetcode-practice/compare/cli-v1.0.4-beta...cli-v1.0.5-bera.0) (2024-03-11) From 6a1e060d660011fb5ec7f1527dd9a2f2ded1ed7f Mon Sep 17 00:00:00 2001 From: EternalHeart <48346853+wh131462@users.noreply.github.com> Date: Mon, 11 Mar 2024 14:20:47 +0800 Subject: [PATCH 002/111] feat:v1.0.5 (#24) * perf:prefer template showLogs performance * chore(finder.view): modify code to apply prettier * feat(commit): finish set question range tag in file and get code in file by range tag * chore(commit): some modified files changes on last commit * fix(store): fix the bug for create dir outside * feat(create): can log file path and func start line number after create * chore: modify code * chore: modify changelog * chore: hide lf filter entry and hide update project * feat: v1.0.5 * chore: add hook to update changelog and update changelog --- .release-it.json | 3 +- CHANGELOG.md | 121 +++++++++++++++++++- common/utils/create-check/createUtil.js | 4 +- common/utils/file/getLineNumberByContent.js | 36 ++++++ common/utils/update/updateByEnv.js | 2 + common/view/finder.view.js | 4 +- common/view/update.view.js | 2 +- package.json | 2 +- 8 files changed, 167 insertions(+), 7 deletions(-) create mode 100644 common/utils/file/getLineNumberByContent.js diff --git a/.release-it.json b/.release-it.json index a9c4073..8b5d728 100644 --- a/.release-it.json +++ b/.release-it.json @@ -5,6 +5,7 @@ "autoGenerate": true }, "git": { + "commitMessage": "feat: v${version}", "tagName": "cli-v${version}", "tag": true, @@ -15,7 +16,7 @@ "publish": false }, "hooks": { - "after:bump": "echo 更新版本成功" + "after:bump": "git add CHANGELOG.md && git commit -m 'chore: update changelog' && echo 更新版本成功!添加changelog的commit成功!" }, "plugins": { "@release-it/bumper": { diff --git a/CHANGELOG.md b/CHANGELOG.md index 47ff5e1..e48c542 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,125 @@ +## 1.0.5 (2024-03-11) +### Bug Fixes + +- add break before default ([08094b4](https://github.com/wh131462/leetcode-practice/commit/08094b4389a3fd1e442615dd687a55a08bd5ac62)) +- change ([1eb6e3c](https://github.com/wh131462/leetcode-practice/commit/1eb6e3c5ba35b22d7d3ef6893b6ace2d80050d6e)) +- change ([0801a1d](https://github.com/wh131462/leetcode-practice/commit/0801a1d6c63fef76d570ed7d943bd0d6f85c70e6)) +- change template ([872e867](https://github.com/wh131462/leetcode-practice/commit/872e867021c347e1fe4236e94cbd67aed47010a9)) +- console table text length verflow dislocation error ([3a563a2](https://github.com/wh131462/leetcode-practice/commit/3a563a2169bae2dd0ef26fb16e9bdedce21c8be2)) +- correct packageManager's format (fix [#7](https://github.com/wh131462/leetcode-practice/issues/7)) ([faa2280](https://github.com/wh131462/leetcode-practice/commit/faa2280746facefd2bd11d45d85cc70026821c0c)) +- delete src ([a932ce4](https://github.com/wh131462/leetcode-practice/commit/a932ce42227a8fab5d83d8bbe7a2add78c0d26a6)) +- delete src file ([2a53e63](https://github.com/wh131462/leetcode-practice/commit/2a53e634bbb7da7f0bf9df129901bb4c7839ba57)) +- find question by keyword error ([69da517](https://github.com/wh131462/leetcode-practice/commit/69da51740ff7f78a89c05ea534f80cc56f588d7f)) +- find question list ([6f78bfa](https://github.com/wh131462/leetcode-practice/commit/6f78bfa8fbab5d375f48d541c1b50bbfec55f9aa)) +- fix all lint error ([e99e76b](https://github.com/wh131462/leetcode-practice/commit/e99e76b2e1c7c9d387ab658a4c1f4057bf1a60da)) +- format readme form ([f002d77](https://github.com/wh131462/leetcode-practice/commit/f002d77f6e3f9e9a1259de2a5fee4b1858768620)) +- format readme form ([df5e45c](https://github.com/wh131462/leetcode-practice/commit/df5e45c9d55fc98dbe6bbc5b7fc80d6716d5bd34)) +- format readme form ([2f182ca](https://github.com/wh131462/leetcode-practice/commit/2f182ca85575fa8d2963fc0e657ee425b2215153)) +- format readme lint ([85b97f6](https://github.com/wh131462/leetcode-practice/commit/85b97f64258eadf4dcf1b29747e0ed0c3d161440)) +- getTestCase ([4ac7f65](https://github.com/wh131462/leetcode-practice/commit/4ac7f6505a47ab60d4ea74c659bb49c0d19667e6)) +- **headers:** remove useless header configuration ([105c841](https://github.com/wh131462/leetcode-practice/commit/105c84141206dfcf11d6a4ea46775f7546150acd)) +- **headers:** remove useless header configuration ([3ba1a98](https://github.com/wh131462/leetcode-practice/commit/3ba1a982a5e1d4c3b29d09af40df910f9d9dd3a5)) +- ignore lint ([46a9135](https://github.com/wh131462/leetcode-practice/commit/46a91358376a387b1e395e99424012685c21e09b)) +- ignore lint ([d376299](https://github.com/wh131462/leetcode-practice/commit/d376299a7f7e20453aaee978bba4178079b1e931)) +- lint ([cc63e57](https://github.com/wh131462/leetcode-practice/commit/cc63e572de4afa50b82791e1e896234b8d6b8ee4)) +- listnode check ([b8b3b47](https://github.com/wh131462/leetcode-practice/commit/b8b3b475637647035ac3eb9bfc5b27b61bde9a49)) +- log ([bd1d01b](https://github.com/wh131462/leetcode-practice/commit/bd1d01b4a440f8f80dfc67b04180dde29bac9da9)) +- memory calc error ([c09b344](https://github.com/wh131462/leetcode-practice/commit/c09b3440f81d0a3d6bf740aec06b320e00574b2c)) +- perfect version for cli install ([5a257f4](https://github.com/wh131462/leetcode-practice/commit/5a257f43fe897be40dd64a8ff8532387290a15fa)) +- readme_cn ([63dab20](https://github.com/wh131462/leetcode-practice/commit/63dab20f3956ae5f2abbc5df721c4ccc61d90bd2)) +- rename README ([2b8c294](https://github.com/wh131462/leetcode-practice/commit/2b8c294b0259d3476285ca985b8ad1e3fb2c6c2b)) +- rewrite log ([53d15b4](https://github.com/wh131462/leetcode-practice/commit/53d15b491c57d9e36a6fd6c36193517edb915425)) +- search ([5bb93dd](https://github.com/wh131462/leetcode-practice/commit/5bb93dd323c0786a17b1a4e4eae1ae3e1ba9625b)) +- **store:** fix the bug for create dir outside ([7254f29](https://github.com/wh131462/leetcode-practice/commit/7254f2988a656c28c0e7fbc685e16ff85cc1cbe6)) +- **store:** fix the bug for create dir outside ([1c66484](https://github.com/wh131462/leetcode-practice/commit/1c664846431448410ce3ddfc68ca29161c8e2683)) +- **tempate:** 修复空格导致字符串匹配失效问题 ([07bdbdc](https://github.com/wh131462/leetcode-practice/commit/07bdbdc88b1e50c781a65863dd1ba45c98eb5d79)) +- **test:** 修复挂掉的测试用例 ([4593058](https://github.com/wh131462/leetcode-practice/commit/4593058a065accc9e55e916352013de7bc6d4533)) +- update view for cli ([0b8ecf0](https://github.com/wh131462/leetcode-practice/commit/0b8ecf0ac7b2567168e35a6513308825aa514070)) +- 优化代码 ([da6aa6d](https://github.com/wh131462/leetcode-practice/commit/da6aa6d5ab87c4ecb626f1762033062a9ac432e4)) +- 修复原始创建不中止问题 ([ddb0ea1](https://github.com/wh131462/leetcode-practice/commit/ddb0ea11ca02abe73ee80ec8b0130466efbce457)) +- 模版文件路径错误 ([e46c94c](https://github.com/wh131462/leetcode-practice/commit/e46c94c85583b367d831326e4e873512b6ccf504)) + +### Code Refactoring + +- directory refactor ([7a3a948](https://github.com/wh131462/leetcode-practice/commit/7a3a94806a1843e1c4bb86ece65d4e19ef9817fa)) + +- cli finish basically (#5) ([5af52e3](https://github.com/wh131462/leetcode-practice/commit/5af52e31b466517d2fdea9443376d27bff646bdf)), closes [#5](https://github.com/wh131462/leetcode-practice/issues/5) + +### Features + +- add ([fb3fadc](https://github.com/wh131462/leetcode-practice/commit/fb3fadc7fca166be0eefe51a817899466ab48b27)) +- add cz plugin ([4fd5af1](https://github.com/wh131462/leetcode-practice/commit/4fd5af151ac32d3daabcdc862505962fcd32f129)) +- add eslint ([be523ea](https://github.com/wh131462/leetcode-practice/commit/be523ea0f3085e003a2e0b5fb1c568b65cc21714)) +- add get question ([e5572b6](https://github.com/wh131462/leetcode-practice/commit/e5572b6357c8c056aa32eab53476736561261ebe)) +- add get question by keyword function ([097302a](https://github.com/wh131462/leetcode-practice/commit/097302afe095ad70d1c58942dc8ac8fb516e1eed)) +- add getQuestionChineseName function to get chinese name ([9520e75](https://github.com/wh131462/leetcode-practice/commit/9520e757741ff008439affd20db582458a37b674)) +- add getQuestionCode ([dbdb255](https://github.com/wh131462/leetcode-practice/commit/dbdb2553a2c47c9ee40fada33bfec7458ae4ccb6)) +- add memory calculate ([e6c315a](https://github.com/wh131462/leetcode-practice/commit/e6c315ab1524327697278e3b41c622fb22928896)) +- add memory demo ([8065924](https://github.com/wh131462/leetcode-practice/commit/8065924ca451e043f80644a31eb5d9543946f026)) +- add open process ([80dc9f5](https://github.com/wh131462/leetcode-practice/commit/80dc9f530eaae98e5449b3ebdf5c9e69ec452a17)) +- add prettier and commitlint ([608f4df](https://github.com/wh131462/leetcode-practice/commit/608f4dfdc4c0aebb9ead3e46abcde71fcc962b39)) +- change git push rules ([ee3e558](https://github.com/wh131462/leetcode-practice/commit/ee3e558496ef72f2daee071b88e79ddd06503e7c)) +- **cli:** 简化命令 使得命令可以在任何路径下运行 ([26fcffb](https://github.com/wh131462/leetcode-practice/commit/26fcffb8daa0e0a70e78c47772ef5059c1c825d1)) +- **commit:** finish set question range tag in file and get code in file by range tag ([61e2924](https://github.com/wh131462/leetcode-practice/commit/61e2924d2607e96bbd37947f05e718a10ac9edd6)) +- **commit:** finish set question range tag in file and get code in file by range tag ([b7eccdd](https://github.com/wh131462/leetcode-practice/commit/b7eccddb725ef460d04e8574ce5e02db533ccfd9)) +- **create:** can log file path and func start line number after create ([3b1365c](https://github.com/wh131462/leetcode-practice/commit/3b1365cbf9e86d4c0959817cbb845dd3495a12ab)) +- eslint忽略文件 ([f91889c](https://github.com/wh131462/leetcode-practice/commit/f91889c8348766a63136ada6fcd49e79a0e54378)) +- finish the view create & check ([9e96e0a](https://github.com/wh131462/leetcode-practice/commit/9e96e0a24f0232827196ce2bdb6c3d04966f42bd)) +- get js code ([b1fd6bb](https://github.com/wh131462/leetcode-practice/commit/b1fd6bb8d85d080c1f89a53cd99416c84e3abd10)) +- hot100合并代码 ([3ddd7c6](https://github.com/wh131462/leetcode-practice/commit/3ddd7c6237bd43655c4e3d0e490bd997afb1df5a)) +- node vm执行index.js脚本 ([f894e30](https://github.com/wh131462/leetcode-practice/commit/f894e3096c15d9939e0b93688f37c4272775d300)) +- publish config & build config ([1affd2a](https://github.com/wh131462/leetcode-practice/commit/1affd2ab7b1e1ad942d5dc3fbe5c300b5a92f240)) +- sucess log with green and fail log with red ([1eccefb](https://github.com/wh131462/leetcode-practice/commit/1eccefb023d28ca734c1886e0dc64a576d03f860)) +- update function basic ([a01c873](https://github.com/wh131462/leetcode-practice/commit/a01c8738aa060221421f2f17158c92a9069929a0)) +- update project using github ([a879d29](https://github.com/wh131462/leetcode-practice/commit/a879d29f9686f5c71d02bfe5c9122bc6fc90dc81)) +- version 1.0.2 ([4afe55e](https://github.com/wh131462/leetcode-practice/commit/4afe55e35ecea82dedbba3e6a3d9a2738365aa79)) +- **忽略测试覆盖率文件:** 忽略测试覆盖率文件 ([b05e380](https://github.com/wh131462/leetcode-practice/commit/b05e380ef84384f5f1ebbfb64628bd689933f755)) +- 新增填充markdown功能 ([1b8324d](https://github.com/wh131462/leetcode-practice/commit/1b8324d212898e8d0b7b2edc15244da31157a3c9)) +- 新增无向连通图数据结构 parse toArray实现,补充测试用例等 fix: 优化了转换逻辑 ([08f3787](https://github.com/wh131462/leetcode-practice/commit/08f3787f70de41d82610c1ce940f35c878dbf0d1)) +- 新增测试覆盖率 ([2627ecd](https://github.com/wh131462/leetcode-practice/commit/2627ecd00105d4af59e5c2fa59608da1144f17a8)) +- 测试用例中补充树和链表的数据结构以及转换逻辑,新增单元测试模块 ([ac9ccd1](https://github.com/wh131462/leetcode-practice/commit/ac9ccd155358306f667e9ffaa0aac9f16d58988a)) +- 统一数据结构 ([f15a8da](https://github.com/wh131462/leetcode-practice/commit/f15a8dad2500cef476e1340b93053be48364bf3e)) + +### Performance Improvements + +- better scripts and easy mode to create question in project ([ffd9e29](https://github.com/wh131462/leetcode-practice/commit/ffd9e29ca35d9f4b8b6b2f8b94516e8f053261a5)) +- http dir structure and functions modify ([553ad58](https://github.com/wh131462/leetcode-practice/commit/553ad5861aa67423c1092f798f39b2bd4faf68f6)) + +### BREAKING CHANGES + +- srcipts即将废弃,视图交互性代码完善1/3 + +- feat: finish the view create & check + +- feat:完成lc&lk指令 + +- fix: 优化代码 + +- feat: add getQuestionChineseName function to get chinese name + +- chore: del scripts and .vscode files & ignore .vscode + +- docs: update todo & achive + +- perf: better scripts and easy mode to create question in project + +- feat: publish config & build config -## [1.0.5-beta.0](https://github.com/wh131462/leetcode-practice/compare/cli-v1.0.5-bera.0...cli-v1.0.5-beta.0) (2024-03-11) +- chore: del src + +- fix: perfect version for cli install + +- fix:指令打包完善 + +- fix:easy mode script + +- docs:todo 拆分成单独文件 + +- chore:路径调整成全局路径 + +- docs: add CHANGELOG and TO-DO +- srcipts即将废弃,视图交互性代码完善1/3 ## [1.0.5-bera.0](https://github.com/wh131462/leetcode-practice/compare/cli-v1.0.4-beta...cli-v1.0.5-bera.0) (2024-03-11) diff --git a/common/utils/create-check/createUtil.js b/common/utils/create-check/createUtil.js index edce24a..3322dd6 100644 --- a/common/utils/create-check/createUtil.js +++ b/common/utils/create-check/createUtil.js @@ -6,6 +6,7 @@ import { setQuestion } from '#common/utils/store/controller/question.js' import { getQuestionChineseName } from '#common/utils/question-handler/getQuestionChineseName.js' import { getQuestionById } from '#common/utils/question-getter/getQuestionById.js' import { getQuestionIdBySlug } from '#common/utils/question-handler/getQuestionIdBySlug.js' +import { getLineNumberByContent } from '#common/utils/file/getLineNumberByContent.js' export function create(mode, question, baseDir) { console.log(`MODE: ${mode}`) @@ -14,8 +15,9 @@ export function create(mode, question, baseDir) { const questionDir = path.join(baseDir, getQuestionFileName(question)) createQuestion(question, questionDir).then(async (path) => { if (!path) path = await createQuestionCopy(question, questionDir) + const line = (await getLineNumberByContent(path, '@QUESTION_START')) + 1 console.log( - `题目[${getQuestionChineseName(question)}]获取成功!\n题目文件地址为:${path}` + `题目[${getQuestionChineseName(question)}]获取成功!\n题目文件地址为:file://${path}:${line}` ) resolve(true) }) diff --git a/common/utils/file/getLineNumberByContent.js b/common/utils/file/getLineNumberByContent.js new file mode 100644 index 0000000..06ea9ce --- /dev/null +++ b/common/utils/file/getLineNumberByContent.js @@ -0,0 +1,36 @@ +import fs from 'node:fs' + +/** + * 通过给入的文件地址和内容 给出对应的行号 + * @param filePath + * @param searchString + * @returns {Promise} + */ +export function getLineNumberByContent(filePath, searchString) { + return new Promise((resolve) => { + let lineNumber = 0 + const readStream = fs.createReadStream(filePath, { encoding: 'utf-8' }) + + readStream.on('data', (chunk) => { + const lines = chunk.split('\n') + for (const line of lines) { + lineNumber++ + if (line.includes(searchString)) { + readStream.close() + resolve(lineNumber) + return + } + } + }) + + readStream.on('end', () => { + console.warn(`"${searchString}" not found in file: ${filePath}`) + resolve(0) + }) + + readStream.on('error', () => { + console.warn(`"${searchString}" not found in file: ${filePath}`) + resolve(0) + }) + }) +} diff --git a/common/utils/update/updateByEnv.js b/common/utils/update/updateByEnv.js index b054264..b2409e4 100644 --- a/common/utils/update/updateByEnv.js +++ b/common/utils/update/updateByEnv.js @@ -37,6 +37,8 @@ export function updateCli() { * @returns {Promise} */ export async function updateProject() { + console.log('脚本升级中,请等待后续版本更新...') + return // todo 更新项目 // 0. 询问是否存在自己修改过的内容 // 0.1 如果有过更改,终止更新脚本,并给出提示建议 diff --git a/common/view/finder.view.js b/common/view/finder.view.js index e8659ea..b190155 100644 --- a/common/view/finder.view.js +++ b/common/view/finder.view.js @@ -65,8 +65,8 @@ export async function easyFinderView(baseDir = process.cwd()) { name: 'hot 100列表查询', value: 'hot', description: '最受欢迎的100道题目' - }, - { name: '筛选模式', value: 'select', description: '筛选题目' } + } + // { name: '筛选模式', value: 'select', description: '筛选题目' } ] const modeQuestion = { diff --git a/common/view/update.view.js b/common/view/update.view.js index d7e520a..65cde1e 100644 --- a/common/view/update.view.js +++ b/common/view/update.view.js @@ -35,7 +35,7 @@ export async function easyUpdateView() { break case 'cli': isUpdate = isCliUpdate - version = remoteVersion + version = npmVersion break default: console.log('未知环境:', choseEnv) diff --git a/package.json b/package.json index 9456a1e..1ce9f95 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "leetcode-practice", "type": "module", - "version": "1.0.5-beta.0", + "version": "1.0.5", "packageManager": "yarn@1.22.0", "description": "A powerful practice platform for leetcode.Using any way you want to create questions.", "author": { From fd67658969ddd17ef7a653feae464902db9c180f Mon Sep 17 00:00:00 2001 From: EternalHeart Date: Mon, 11 Mar 2024 14:24:40 +0800 Subject: [PATCH 003/111] chore: modify release it json --- .release-it.json | 1 - 1 file changed, 1 deletion(-) diff --git a/.release-it.json b/.release-it.json index 8b5d728..8f5b802 100644 --- a/.release-it.json +++ b/.release-it.json @@ -5,7 +5,6 @@ "autoGenerate": true }, "git": { - "commitMessage": "feat: v${version}", "tagName": "cli-v${version}", "tag": true, From 9d7a22fde8cc72264766f707ea3f51e81956c111 Mon Sep 17 00:00:00 2001 From: SmallTeddy Date: Mon, 11 Mar 2024 14:56:57 +0800 Subject: [PATCH 004/111] fix: delete hot100 add study plan list --- .../question-getter/getPlanQuestionList.js | 10 +++++ .../question-getter/getQuestionListHot100.js | 10 ----- .../utils/question-getter/getStudyPlanList.js | 10 +++++ .../getHot100QuestionListCode.js | 4 +- common/view/finder.view.js | 38 ++++++++++++------- ...tHot100Json.js => planQuestionListJson.js} | 4 +- resources/headers/studyPlanListJson.js | 7 ++++ test/getHot100List.spec.js | 2 +- 8 files changed, 56 insertions(+), 29 deletions(-) create mode 100644 common/utils/question-getter/getPlanQuestionList.js delete mode 100644 common/utils/question-getter/getQuestionListHot100.js create mode 100644 common/utils/question-getter/getStudyPlanList.js rename resources/headers/{questionListHot100Json.js => planQuestionListJson.js} (69%) create mode 100644 resources/headers/studyPlanListJson.js diff --git a/common/utils/question-getter/getPlanQuestionList.js b/common/utils/question-getter/getPlanQuestionList.js new file mode 100644 index 0000000..0b5e54f --- /dev/null +++ b/common/utils/question-getter/getPlanQuestionList.js @@ -0,0 +1,10 @@ +import { graphql } from '#common/utils/http/graphql.js' +import { getPlanQuestionListJson } from '#resources/headers/planQuestionListJson.js' + +export async function getPlanQuestionList(slug) { + const res = await graphql(getPlanQuestionListJson(slug)) + const { + data: { studyPlanV2Detail } + } = res + return studyPlanV2Detail +} diff --git a/common/utils/question-getter/getQuestionListHot100.js b/common/utils/question-getter/getQuestionListHot100.js deleted file mode 100644 index 2c1f32b..0000000 --- a/common/utils/question-getter/getQuestionListHot100.js +++ /dev/null @@ -1,10 +0,0 @@ -import { graphql } from '#common/utils/http/graphql.js' -import { getQuestionListHot100Json } from '#resources/headers/questionListHot100Json.js' - -export async function getQuestionListHot100() { - const res = await graphql(getQuestionListHot100Json()) - const { - data: { studyPlanV2Detail } - } = res - return studyPlanV2Detail -} diff --git a/common/utils/question-getter/getStudyPlanList.js b/common/utils/question-getter/getStudyPlanList.js new file mode 100644 index 0000000..e1cc5fd --- /dev/null +++ b/common/utils/question-getter/getStudyPlanList.js @@ -0,0 +1,10 @@ +import { graphql } from '#common/utils/http/graphql.js' +import { getStudyPlanListJson } from '#resources/headers/studyPlanListJson.js' + +export async function getStudyPlanList() { + const res = await graphql(getStudyPlanListJson()) + const { + data: { studyPlansV2AdQuestionPage } + } = res + return studyPlansV2AdQuestionPage +} diff --git a/common/utils/question-handler/getHot100QuestionListCode.js b/common/utils/question-handler/getHot100QuestionListCode.js index 752f88b..d3a6d8b 100644 --- a/common/utils/question-handler/getHot100QuestionListCode.js +++ b/common/utils/question-handler/getHot100QuestionListCode.js @@ -1,10 +1,10 @@ import path from 'node:path' import { createQuestionByTitleSlug } from '../create-check/createUtil.js' -import { getQuestionListHot100 } from '#common/utils/question-getter/getQuestionListHot100.js' +import { getPlanQuestionList } from '#common/utils/question-getter/getPlanQuestionList.js' // 获取题目列表 export async function getTitleSlugList() { - const res = await getQuestionListHot100() + const res = await getPlanQuestionList() const { planSubGroups } = res return planSubGroups.reduce((acc, cur) => { acc.push(...cur.questions.map((res) => res.titleSlug)) diff --git a/common/view/finder.view.js b/common/view/finder.view.js index e8659ea..ccd0a33 100644 --- a/common/view/finder.view.js +++ b/common/view/finder.view.js @@ -1,17 +1,25 @@ import select from '@inquirer/select' import input from '@inquirer/input' -import { - getHot100QuestionListCode, - getTitleSlugList -} from '#common/utils/question-handler/getHot100QuestionListCode.js' +// import { getHot100QuestionListCode } from '#common/utils/question-handler/getHot100QuestionListCode.js' import { createQuestionById, createQuestionByTitleSlug } from '#common/utils/create-check/createUtil.js' import { getQuestionByKeyword } from '#common/utils/question-getter/getQuestionByKeyword.js' +import { getStudyPlanList } from '#common/utils/question-getter/getStudyPlanList.js' +import { getPlanQuestionList } from '#common/utils/question-getter/getPlanQuestionList.js' -async function hotMode(baseDir = process.cwd()) { +async function studyMode(baseDir = process.cwd()) { + const questionList = await getStudyPlanList() + const planListMode = { + message: '请选择学习计划', + choices: questionList.map((item) => ({ + name: `${item.name}${item.premiumOnly ? '(VIP)' : ''}`, + value: item.slug + })) + } + const planSlug = await select(planListMode) const createMode = await select({ message: '拉题模式', choices: [ @@ -20,10 +28,14 @@ async function hotMode(baseDir = process.cwd()) { ] }) if (createMode === 'single') { - const titleSlugList = await getTitleSlugList() + const { planSubGroups } = await getPlanQuestionList(planSlug) + const planList = planSubGroups.reduce((acc, cur) => { + acc.push(...cur.questions.map((res) => res.titleSlug)) + return acc + }, []) const singleMode = { message: '请选择题目?', - choices: titleSlugList.map((res) => ({ + choices: planList.map((res) => ({ name: res, value: res })) @@ -32,7 +44,7 @@ async function hotMode(baseDir = process.cwd()) { await createQuestionByTitleSlug(singleChoice, baseDir) } - if (createMode === 'all') await getHot100QuestionListCode() + // if (createMode === 'all') await getHot100QuestionListCode() } async function keywordMode(baseDir = process.cwd()) { @@ -54,18 +66,16 @@ async function keywordMode(baseDir = process.cwd()) { console.log(chooseQuestion) await createQuestionById(chooseQuestion, baseDir) } + async function selectMode(baseDir) { + console.log(baseDir) } export async function easyFinderView(baseDir = process.cwd()) { const choices = [ { name: '关键词搜索', value: 'keyword', description: '关键词描述' }, - { - name: 'hot 100列表查询', - value: 'hot', - description: '最受欢迎的100道题目' - }, + { name: '学习计划', value: 'study', description: '企业和经典面试题目列表' }, { name: '筛选模式', value: 'select', description: '筛选题目' } ] @@ -76,7 +86,7 @@ export async function easyFinderView(baseDir = process.cwd()) { const mode = await select(modeQuestion) const modeMap = { - hot: hotMode, + study: studyMode, keyword: keywordMode, select: selectMode } diff --git a/resources/headers/questionListHot100Json.js b/resources/headers/planQuestionListJson.js similarity index 69% rename from resources/headers/questionListHot100Json.js rename to resources/headers/planQuestionListJson.js index 2d3707d..39ce7b2 100644 --- a/resources/headers/questionListHot100Json.js +++ b/resources/headers/planQuestionListJson.js @@ -2,10 +2,10 @@ * 获取hot 100 的请求header * @returns {{headers: {"content-type": string}, method: string, body: string}} */ -export function getQuestionListHot100Json() { +export function getPlanQuestionListJson(slug) { return { headers: { 'content-type': 'application/json' }, - body: '{"query":"\\n query studyPlanPastSolved($slug: String!) {\\n studyPlanV2Detail(planSlug: $slug) {\\n planSubGroups {\\n slug\\n questions {\\n titleSlug\\n status\\n }\\n }\\n }\\n}\\n ","variables":{"slug":"top-100-liked"},"operationName":"studyPlanPastSolved"}', + body: `{"query":"\\n query studyPlanPastSolved($slug: String!) {\\n studyPlanV2Detail(planSlug: $slug) {\\n planSubGroups {\\n slug\\n questions {\\n titleSlug\\n status\\n }\\n }\\n }\\n}\\n ","variables":{"slug":"${slug}"},"operationName":"studyPlanPastSolved"}`, method: 'POST' } } diff --git a/resources/headers/studyPlanListJson.js b/resources/headers/studyPlanListJson.js new file mode 100644 index 0000000..7c19c23 --- /dev/null +++ b/resources/headers/studyPlanListJson.js @@ -0,0 +1,7 @@ +export function getStudyPlanListJson() { + return { + headers: { 'content-type': 'application/json' }, + body: "{\"query\":\"\\n query GetProblemSetStudyPlanAds {\\n studyPlansV2AdQuestionPage {\\n cover\\n highlight\\n name\\n onGoing\\n premiumOnly\\n questionNum\\n slug\\n }\\n}\\n \",\"variables\":{},\"operationName\":\"GetProblemSetStudyPlanAds\"}", + method: 'POST' + } +} diff --git a/test/getHot100List.spec.js b/test/getHot100List.spec.js index 8b74225..defd31e 100644 --- a/test/getHot100List.spec.js +++ b/test/getHot100List.spec.js @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import { getQuestionListHot100 } from '#common/utils/question-getter/getQuestionListHot100.js' +import { getQuestionListHot100 } from '#common/utils/question-getter/getPlanQuestionList.js' describe('hot 100获取数据测试', () => { it('是否正确获取了hot 100合集', async () => { From e94aaa166e80e7e54f3ce5b570352cb798799b77 Mon Sep 17 00:00:00 2001 From: SmallTeddy Date: Mon, 11 Mar 2024 14:57:11 +0800 Subject: [PATCH 005/111] fix: delete hot100 add study plan list --- common/view/finder.view.js | 1 - resources/headers/studyPlanListJson.js | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/common/view/finder.view.js b/common/view/finder.view.js index ccd0a33..dffb2af 100644 --- a/common/view/finder.view.js +++ b/common/view/finder.view.js @@ -68,7 +68,6 @@ async function keywordMode(baseDir = process.cwd()) { } async function selectMode(baseDir) { - console.log(baseDir) } diff --git a/resources/headers/studyPlanListJson.js b/resources/headers/studyPlanListJson.js index 7c19c23..ef910a7 100644 --- a/resources/headers/studyPlanListJson.js +++ b/resources/headers/studyPlanListJson.js @@ -1,7 +1,7 @@ export function getStudyPlanListJson() { return { headers: { 'content-type': 'application/json' }, - body: "{\"query\":\"\\n query GetProblemSetStudyPlanAds {\\n studyPlansV2AdQuestionPage {\\n cover\\n highlight\\n name\\n onGoing\\n premiumOnly\\n questionNum\\n slug\\n }\\n}\\n \",\"variables\":{},\"operationName\":\"GetProblemSetStudyPlanAds\"}", + body: '{"query":"\\n query GetProblemSetStudyPlanAds {\\n studyPlansV2AdQuestionPage {\\n cover\\n highlight\\n name\\n onGoing\\n premiumOnly\\n questionNum\\n slug\\n }\\n}\\n ","variables":{},"operationName":"GetProblemSetStudyPlanAds"}', method: 'POST' } } From cb6fbfd4cd783f57d031abe3add9d85f3e271a4c Mon Sep 17 00:00:00 2001 From: SmallTeddy Date: Mon, 11 Mar 2024 15:22:29 +0800 Subject: [PATCH 006/111] fix: change plan list question title to cn --- common/view/finder.view.js | 11 ++++++++--- resources/headers/planQuestionListJson.js | 2 +- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/common/view/finder.view.js b/common/view/finder.view.js index dffb2af..e8fe54d 100644 --- a/common/view/finder.view.js +++ b/common/view/finder.view.js @@ -30,14 +30,19 @@ async function studyMode(baseDir = process.cwd()) { if (createMode === 'single') { const { planSubGroups } = await getPlanQuestionList(planSlug) const planList = planSubGroups.reduce((acc, cur) => { - acc.push(...cur.questions.map((res) => res.titleSlug)) + acc.push(...cur.questions.map((res) => { + return { + cnTitle: res.translatedTitle, + enTitle: res.titleSlug + } + })) return acc }, []) const singleMode = { message: '请选择题目?', choices: planList.map((res) => ({ - name: res, - value: res + name: res.cnTitle, + value: res.enTitle })) } const singleChoice = await select(singleMode) diff --git a/resources/headers/planQuestionListJson.js b/resources/headers/planQuestionListJson.js index 39ce7b2..e08d174 100644 --- a/resources/headers/planQuestionListJson.js +++ b/resources/headers/planQuestionListJson.js @@ -5,7 +5,7 @@ export function getPlanQuestionListJson(slug) { return { headers: { 'content-type': 'application/json' }, - body: `{"query":"\\n query studyPlanPastSolved($slug: String!) {\\n studyPlanV2Detail(planSlug: $slug) {\\n planSubGroups {\\n slug\\n questions {\\n titleSlug\\n status\\n }\\n }\\n }\\n}\\n ","variables":{"slug":"${slug}"},"operationName":"studyPlanPastSolved"}`, + body: `{"query":"\\n query studyPlanPastSolved($slug: String!) {\\n studyPlanV2Detail(planSlug: $slug) {\\n planSubGroups {\\n slug\\n questions {\\n titleSlug\\n translatedTitle\\n status\\n }\\n }\\n }\\n}\\n ","variables":{"slug":"${slug}"},"operationName":"studyPlanPastSolved"}`, method: 'POST' } } From 57f15d5befc23d11ce6211c30e3ee7a7e8bbe52d Mon Sep 17 00:00:00 2001 From: SmallTeddy Date: Mon, 11 Mar 2024 15:22:38 +0800 Subject: [PATCH 007/111] fix: change plan list question title to cn --- common/view/finder.view.js | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/common/view/finder.view.js b/common/view/finder.view.js index e8fe54d..7deff1f 100644 --- a/common/view/finder.view.js +++ b/common/view/finder.view.js @@ -30,12 +30,14 @@ async function studyMode(baseDir = process.cwd()) { if (createMode === 'single') { const { planSubGroups } = await getPlanQuestionList(planSlug) const planList = planSubGroups.reduce((acc, cur) => { - acc.push(...cur.questions.map((res) => { - return { - cnTitle: res.translatedTitle, - enTitle: res.titleSlug - } - })) + acc.push( + ...cur.questions.map((res) => { + return { + cnTitle: res.translatedTitle, + enTitle: res.titleSlug + } + }) + ) return acc }, []) const singleMode = { From 3f5bfef7857e6c9869c40e3d12a60d50b14be2cd Mon Sep 17 00:00:00 2001 From: SmallTeddy Date: Mon, 11 Mar 2024 15:39:51 +0800 Subject: [PATCH 008/111] fix: get all is not success --- common/view/finder.view.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/common/view/finder.view.js b/common/view/finder.view.js index 7deff1f..317b77f 100644 --- a/common/view/finder.view.js +++ b/common/view/finder.view.js @@ -24,7 +24,7 @@ async function studyMode(baseDir = process.cwd()) { message: '拉题模式', choices: [ { name: '单个选择', value: 'single' }, - { name: '全部拉取', value: 'all' } + { name: '全部拉取(暂不支持)', value: 'all' } ] }) if (createMode === 'single') { @@ -51,7 +51,10 @@ async function studyMode(baseDir = process.cwd()) { await createQuestionByTitleSlug(singleChoice, baseDir) } - // if (createMode === 'all') await getHot100QuestionListCode() + if (createMode === 'all') { + console.log('暂不支持') + // await getHot100QuestionListCode() + } } async function keywordMode(baseDir = process.cwd()) { From 91082196dc005b0b23314966a09304ba948416b8 Mon Sep 17 00:00:00 2001 From: SmallTeddy Date: Mon, 11 Mar 2024 15:40:06 +0800 Subject: [PATCH 009/111] fix: get all is not success --- common/view/finder.view.js | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/common/view/finder.view.js b/common/view/finder.view.js index 317b77f..c10ef78 100644 --- a/common/view/finder.view.js +++ b/common/view/finder.view.js @@ -51,10 +51,8 @@ async function studyMode(baseDir = process.cwd()) { await createQuestionByTitleSlug(singleChoice, baseDir) } - if (createMode === 'all') { - console.log('暂不支持') - // await getHot100QuestionListCode() - } + if (createMode === 'all') console.log('暂不支持') + // await getHot100QuestionListCode() } async function keywordMode(baseDir = process.cwd()) { From d6de0a5ca438b4981b986f1dc3716b2faf182006 Mon Sep 17 00:00:00 2001 From: EternalHeart Date: Mon, 11 Mar 2024 19:56:05 +0800 Subject: [PATCH 010/111] chore: pkg config --- .gitignore | 1 + package.json | 13 +++++++++++++ 2 files changed, 14 insertions(+) diff --git a/.gitignore b/.gitignore index efaa728..5de262b 100644 --- a/.gitignore +++ b/.gitignore @@ -35,6 +35,7 @@ resources/stores/* # cli-dist pl-cli */colorFont.js +pl-build # package manager yarn.lock diff --git a/package.json b/package.json index 1ce9f95..015f619 100644 --- a/package.json +++ b/package.json @@ -25,6 +25,19 @@ "lf": "bin/lf.js", "lc": "bin/lc.js" }, + "pkg": { + "name": "leetcode-practice", + "bin": { + "lc": "pl-cli/bin/lc.js", + "lk": "pl-cli/bin/lk.js", + "lf": "pl-cli/bin/lf.js" + }, + "targets": [ + "node14-macos-x64", + "node14-linux-x64" + ], + "outputPath": "pl-build" + }, "scripts": { "lc": "node bin/lc.js -d src", "lk": "node bin/lk.js -d src", From d2d37d68e6405507340b115d55bec15e070cf3ba Mon Sep 17 00:00:00 2001 From: kun9053 <119516220+Coder-Wangyankun@users.noreply.github.com> Date: Mon, 11 Mar 2024 20:57:43 +0800 Subject: [PATCH 011/111] fix: realm-compatible-problem (#25) Co-authored-by: wyk --- package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 1ce9f95..1f13d79 100644 --- a/package.json +++ b/package.json @@ -57,7 +57,8 @@ "inquirer": "^9.2.14", "lint-staged": "^15.2.2", "prettier": "^3.2.5", - "realm": "^12.6.0" + "realm": "^11.0.0", + "request": "^2.88.2" }, "devDependencies": { "@antfu/eslint-config": "^2.8.0", From 34659076a135cabde1fcbdbfec2fc0c0de1dcd61 Mon Sep 17 00:00:00 2001 From: EternalHeart Date: Mon, 11 Mar 2024 21:00:07 +0800 Subject: [PATCH 012/111] chore: del pkg config --- package.json | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/package.json b/package.json index 015f619..1ce9f95 100644 --- a/package.json +++ b/package.json @@ -25,19 +25,6 @@ "lf": "bin/lf.js", "lc": "bin/lc.js" }, - "pkg": { - "name": "leetcode-practice", - "bin": { - "lc": "pl-cli/bin/lc.js", - "lk": "pl-cli/bin/lk.js", - "lf": "pl-cli/bin/lf.js" - }, - "targets": [ - "node14-macos-x64", - "node14-linux-x64" - ], - "outputPath": "pl-build" - }, "scripts": { "lc": "node bin/lc.js -d src", "lk": "node bin/lk.js -d src", From 139bc0a8d9030e4725293378fe7e5fa624e622e7 Mon Sep 17 00:00:00 2001 From: EternalHeart Date: Mon, 11 Mar 2024 21:12:57 +0800 Subject: [PATCH 013/111] chore: modify package.json --- .commitlintrc.cjs | 2 +- .eslintrc.js | 14 ++-- bin/lc.js | 9 +- bin/lf.js | 5 +- bin/lk.js | 16 ++-- common/structures/ListNode.js | 6 +- common/structures/Node.js | 6 +- common/structures/TreeNode.js | 9 +- common/utils/create-check/createUtil.js | 10 ++- common/utils/create-check/refer-mode.js | 6 +- common/utils/etc/createColorFont.js | 4 +- common/utils/etc/typeof_.js | 3 +- common/utils/file/getCountBySameName.js | 2 +- common/utils/file/getFileListBySameName.js | 2 +- common/utils/file/getFilePathById.js | 5 +- common/utils/file/getRootPath.js | 4 +- common/utils/functions/isSameData.js | 11 ++- common/utils/functions/sizeUtil.js | 15 ++-- common/utils/http/fetch_.js | 2 +- .../question-getter/getPlanQuestionList.js | 2 +- .../utils/question-getter/getQuestionById.js | 4 +- .../question-getter/getQuestionRandom.js | 2 +- .../utils/question-getter/getStudyPlanList.js | 2 +- .../utils/question-handler/checkQuestion.js | 4 +- common/utils/question-handler/code.js | 13 +-- .../utils/question-handler/createQuestion.js | 14 ++-- .../question-handler/createQuestionCopy.js | 2 +- .../utils/question-handler/fulfillQuestion.js | 3 +- .../getHot100QuestionListCode.js | 6 +- .../question-handler/getQuestionDetail.js | 2 +- .../question-handler/getQuestionFileName.js | 3 +- .../question-handler/getQuestionIdBySlug.js | 8 +- common/utils/question-handler/getRandomId.js | 21 +++-- common/utils/question-handler/getTestCase.js | 22 ++--- .../utils/question-handler/parseStructure.js | 24 +++--- .../question-handler/questionLanguage.js | 82 ++++++++++--------- common/utils/question-handler/showLogs.js | 20 ++--- common/utils/store/controller/store.js | 3 +- common/utils/store/schemas/question.js | 4 +- common/utils/store/schemas/store.js | 4 +- common/utils/store/store-realm.js | 10 ++- common/utils/update/update.js | 25 +++--- common/utils/update/updateByEnv.js | 15 ++-- common/view/check.view.js | 26 +++--- common/view/create.view.js | 24 +++--- common/view/finder.view.js | 35 ++++---- common/view/language.view.js | 8 +- common/view/update.view.js | 16 ++-- esbuild.config.js | 23 +++--- eslint.config.js | 4 +- package.json | 12 +-- resources/headers/codeSubmitJson.js | 2 +- resources/headers/planQuestionListJson.js | 2 +- resources/headers/questionCodeListJson.js | 2 +- resources/headers/questionDetailJson.js | 2 +- resources/headers/questionLanguageListJson.js | 2 +- resources/headers/questionListJson.js | 2 +- resources/headers/questionSearchJson.js | 2 +- resources/headers/questionTodayJson.js | 2 +- resources/headers/questionTypeJson.js | 2 +- resources/headers/studyPlanListJson.js | 2 +- scripts/create-color-font.js | 4 +- scripts/release.js | 16 ++-- scripts/update.js | 10 ++- test/create.spec.js | 6 +- test/paseDataStructure.spec.js | 2 +- test/tree.spec.js | 8 +- 67 files changed, 348 insertions(+), 292 deletions(-) diff --git a/.commitlintrc.cjs b/.commitlintrc.cjs index a4f4369..98ee7df 100644 --- a/.commitlintrc.cjs +++ b/.commitlintrc.cjs @@ -1,3 +1,3 @@ module.exports = { - extends: ['@commitlint/config-conventional'] + extends: ['@commitlint/config-conventional'], } diff --git a/.eslintrc.js b/.eslintrc.js index 97c5221..107e222 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -2,22 +2,22 @@ module.exports = { env: { browser: true, commonjs: true, - es2021: true + es2021: true, }, extends: '@antfu', overrides: [ { env: { - node: true + node: true, }, files: ['.eslintrc.{js,cjs}'], parserOptions: { - sourceType: 'script' - } - } + sourceType: 'script', + }, + }, ], parserOptions: { - ecmaVersion: 'latest' + ecmaVersion: 'latest', }, - rules: {} + rules: {}, } diff --git a/bin/lc.js b/bin/lc.js index 0f8567e..89ffd67 100755 --- a/bin/lc.js +++ b/bin/lc.js @@ -19,7 +19,7 @@ import { easyLanguageView } from '#common/view/language.view.js' import { DefaultVer } from '#common/constants/question.const.js' import { create, - createQuestionById + createQuestionById, } from '#common/utils/create-check/createUtil.js' const version = process.env.VERSION ?? DefaultVer @@ -36,7 +36,7 @@ program .option('-l, --language [language]', 'Set/Get the code language of question.') .option( '-u, --update', - 'Check the version to determine whether to update to the latest one.' + 'Check the version to determine whether to update to the latest one.', ) .parse(process.argv) @@ -56,7 +56,8 @@ const cmdOpts = program.opts() if (cmdOpts.language) { if (cmdOpts.language !== true) { await easyLanguageView(cmdOpts.language) - } else { + } + else { const lang = await getQuestionLanguage() console.log(`当前CLI语言环境为:${lang}`) } @@ -96,7 +97,7 @@ export const callModeAction = { identity: async (id) => { await createQuestionById(id, baseDir) process.exit(0) - } + }, } // 获取模式和参数 const mode = referMode(cmdArgs, cmdOpts) diff --git a/bin/lf.js b/bin/lf.js index 4828527..9bbf671 100755 --- a/bin/lf.js +++ b/bin/lf.js @@ -21,7 +21,7 @@ program .option('-d, --directory ', 'Set the question directory.') .option( '-u, --update', - 'Check the version to determine whether to update to the latest one.' + 'Check the version to determine whether to update to the latest one.', ) .parse(process.argv) @@ -36,7 +36,8 @@ const cmdOpts = program.opts() if (cmdOpts.language) { if (cmdOpts.language !== true) { await easyLanguageView(cmdOpts.language) - } else { + } + else { const lang = await getQuestionLanguage() console.log(`当前CLI语言环境为:${lang}`) } diff --git a/bin/lk.js b/bin/lk.js index 8df5aa6..9f44791 100755 --- a/bin/lk.js +++ b/bin/lk.js @@ -28,7 +28,7 @@ program .option('-t, --today', 'Check the question today.') .option( '-i, --identity ', - 'Check the specified question by identity.' + 'Check the specified question by identity.', ) .option('-r, --random', 'Check the last random question.') .option('-e, --easy', 'Use easy mode.') @@ -36,7 +36,7 @@ program .option('-l, --language [language]', 'Set/Get the code language of question.') .option( '-u, --update', - 'Check the version to determine whether to update to the latest one.' + 'Check the version to determine whether to update to the latest one.', ) .parse(process.argv) @@ -61,7 +61,8 @@ const args = getArgs(mode, cmdArgs, cmdOpts) if (cmdOpts.language) { if (cmdOpts.language !== true) { await easyLanguageView(cmdOpts.language) - } else { + } + else { const lang = await getQuestionLanguage() console.log(`当前CLI语言环境为:${lang}`) } @@ -89,13 +90,14 @@ async function check(mode, question) { const filePath = path.join( baseDir, getQuestionFileName(question), - `question${getQuestionFileExtension(question?.lang)}` + `question${getQuestionFileExtension(question?.lang)}`, ) if (!fs.existsSync(filePath)) { console.log(`文件[${filePath}]不存在,请确保已经创建!`) - } else { + } + else { console.log( - `MODE: ${mode}\n题目[${getQuestionChineseName(question)}]检测结果:` + `MODE: ${mode}\n题目[${getQuestionChineseName(question)}]检测结果:`, ) await checkQuestion(filePath) } @@ -119,7 +121,7 @@ const callModeAction = { : await getQuestionById(id) await check('identity', question) process.exit(0) - } + }, } // 执行指令分发 diff --git a/common/structures/ListNode.js b/common/structures/ListNode.js index bd57e2d..0d236d0 100644 --- a/common/structures/ListNode.js +++ b/common/structures/ListNode.js @@ -12,7 +12,8 @@ export class ListNode { } static parse(arr) { - if (arr.length === 0) return null // Return null for an empty array + if (arr.length === 0) + return null // Return null for an empty array const head = new ListNode(arr.shift(), null) let current = head @@ -24,7 +25,8 @@ export class ListNode { } static toArray(listNodes, arr = []) { - if (listNodes === undefined || listNodes === null) return arr + if (listNodes === undefined || listNodes === null) + return arr arr.push(listNodes.val) return ListNode.toArray(listNodes.next, arr) diff --git a/common/structures/Node.js b/common/structures/Node.js index 071020c..f453afa 100644 --- a/common/structures/Node.js +++ b/common/structures/Node.js @@ -30,13 +30,15 @@ export class Node { } static toArray(node) { - if (!node) return [] + if (!node) + return [] const visited = new Set() const result = [] const dfs = (currentNode) => { - if (visited.has(currentNode.val)) return + if (visited.has(currentNode.val)) + return const { neighbors, val } = currentNode visited.add(val) diff --git a/common/structures/TreeNode.js b/common/structures/TreeNode.js index 90c4146..11be2f1 100644 --- a/common/structures/TreeNode.js +++ b/common/structures/TreeNode.js @@ -7,7 +7,8 @@ export class TreeNode { } static parse(arr) { - if (arr.length === 0) return null + if (arr.length === 0) + return null const root = new TreeNode(arr[0]) const queue = [root] for (let i = 1; i < arr.length; i += 2) { @@ -26,7 +27,8 @@ export class TreeNode { static toArray(treeNode) { const result = [] - if (!treeNode) return result + if (!treeNode) + return result const queue = [treeNode] @@ -36,7 +38,8 @@ export class TreeNode { result.push(node.val) queue.push(node.left) queue.push(node.right) - } else { + } + else { result.push(null) } } diff --git a/common/utils/create-check/createUtil.js b/common/utils/create-check/createUtil.js index 3322dd6..d7086ab 100644 --- a/common/utils/create-check/createUtil.js +++ b/common/utils/create-check/createUtil.js @@ -14,10 +14,11 @@ export function create(mode, question, baseDir) { setQuestion(mode, question) const questionDir = path.join(baseDir, getQuestionFileName(question)) createQuestion(question, questionDir).then(async (path) => { - if (!path) path = await createQuestionCopy(question, questionDir) + if (!path) + path = await createQuestionCopy(question, questionDir) const line = (await getLineNumberByContent(path, '@QUESTION_START')) + 1 console.log( - `题目[${getQuestionChineseName(question)}]获取成功!\n题目文件地址为:file://${path}:${line}` + `题目[${getQuestionChineseName(question)}]获取成功!\n题目文件地址为:file://${path}:${line}`, ) resolve(true) }) @@ -26,7 +27,7 @@ export function create(mode, question, baseDir) { export async function createQuestionByTitleSlug( titleSlug, - baseDir = process.cwd() + baseDir = process.cwd(), ) { const { question } = await getQuestionIdBySlug(titleSlug) @@ -34,6 +35,7 @@ export async function createQuestionByTitleSlug( } export async function createQuestionById(id, baseDir = process.cwd()) { const question = await getQuestionById(id) - if (!question?.id) console.log(`指定编号: [ ${id} ] 题目不存在.`) + if (!question?.id) + console.log(`指定编号: [ ${id} ] 题目不存在.`) await create('identity', question, baseDir) } diff --git a/common/utils/create-check/refer-mode.js b/common/utils/create-check/refer-mode.js index 42ff1f8..c3a7930 100644 --- a/common/utils/create-check/refer-mode.js +++ b/common/utils/create-check/refer-mode.js @@ -1,8 +1,10 @@ // 推测模式 export function referMode(args, opts) { - if (args.length > 0 || opts.identity) return 'identity' + if (args.length > 0 || opts.identity) + return 'identity' - if (opts.random) return 'random' + if (opts.random) + return 'random' return 'today' } diff --git a/common/utils/etc/createColorFont.js b/common/utils/etc/createColorFont.js index cd5eb60..e806d71 100644 --- a/common/utils/etc/createColorFont.js +++ b/common/utils/etc/createColorFont.js @@ -7,11 +7,11 @@ export function createColorFont(font) { const code = gradient_string([ { color: '#ff0000', pos: 0 }, { color: '#ffc600', pos: 0.5 }, - { color: '#003dff', pos: 1 } + { color: '#003dff', pos: 1 }, ])(font) writeFileSync(path.resolve(process.cwd(), 'colorFont.js'), code) console.log( - `[ColorFont]Create color font: ${font}\ncode location:${path.resolve(process.cwd(), 'colorFont.js')}` + `[ColorFont]Create color font: ${font}\ncode location:${path.resolve(process.cwd(), 'colorFont.js')}`, ) console.log(code) } diff --git a/common/utils/etc/typeof_.js b/common/utils/etc/typeof_.js index 8d8458a..914278b 100644 --- a/common/utils/etc/typeof_.js +++ b/common/utils/etc/typeof_.js @@ -5,6 +5,7 @@ * @private */ export function typeof_(data) { - if (data === null) return 'null' + if (data === null) + return 'null' else return typeof data } diff --git a/common/utils/file/getCountBySameName.js b/common/utils/file/getCountBySameName.js index 7966377..71d94e9 100644 --- a/common/utils/file/getCountBySameName.js +++ b/common/utils/file/getCountBySameName.js @@ -7,5 +7,5 @@ import { readdirSync } from 'node:fs' * @returns {number} */ export function getCountBySameName(dir, name) { - return readdirSync(dir).filter((filename) => filename.includes(name)).length + return readdirSync(dir).filter(filename => filename.includes(name)).length } diff --git a/common/utils/file/getFileListBySameName.js b/common/utils/file/getFileListBySameName.js index e0cbcb0..b8c66b1 100644 --- a/common/utils/file/getFileListBySameName.js +++ b/common/utils/file/getFileListBySameName.js @@ -1,5 +1,5 @@ import { readdirSync } from 'node:fs' export function getFileListBySameName(dir, name) { - return readdirSync(dir).filter((filename) => filename.includes(name)) + return readdirSync(dir).filter(filename => filename.includes(name)) } diff --git a/common/utils/file/getFilePathById.js b/common/utils/file/getFilePathById.js index a54e68a..dbaa569 100644 --- a/common/utils/file/getFilePathById.js +++ b/common/utils/file/getFilePathById.js @@ -8,7 +8,8 @@ import fs from 'node:fs' */ export function getFilePathById(id, baseDir = process.cwd()) { const dir = fs.readdirSync(baseDir) - const files = dir.filter((o) => o.startsWith(`${id}.`)) - if (files.length > 1) return files + const files = dir.filter(o => o.startsWith(`${id}.`)) + if (files.length > 1) + return files return files?.[0] } diff --git a/common/utils/file/getRootPath.js b/common/utils/file/getRootPath.js index 0971a80..b0502e7 100644 --- a/common/utils/file/getRootPath.js +++ b/common/utils/file/getRootPath.js @@ -3,7 +3,7 @@ import { __dirname } from '#common/utils/file/getDirname.js' import { currentEnv } from '#common/utils/etc/checkEnv.js' // 在cli环境下 执行目录为 bin 目录 根目录就是上一层目录 -export const rootPath = - currentEnv() === 'project' +export const rootPath + = currentEnv() === 'project' ? path.dirname(path.dirname(path.dirname(__dirname))) : path.dirname(__dirname) diff --git a/common/utils/functions/isSameData.js b/common/utils/functions/isSameData.js index b313fc6..ae2b78d 100644 --- a/common/utils/functions/isSameData.js +++ b/common/utils/functions/isSameData.js @@ -7,7 +7,8 @@ export function isSameData(a, b) { const typeA = typeof a const typeB = typeof b - if (typeA !== typeB) return false + if (typeA !== typeB) + return false switch (typeA) { case 'bigint': case 'boolean': @@ -19,12 +20,14 @@ export function isSameData(a, b) { case 'function': return a.toString() === b.toString() case 'object': { - if (a === null || a === undefined) return a === b + if (a === null || a === undefined) + return a === b const keysA = Object.keys(a) const keysB = Object.keys(b) - if (keysA.length !== keysB.length) return false - return keysA.every((key) => isSameData(a[key], b[key])) + if (keysA.length !== keysB.length) + return false + return keysA.every(key => isSameData(a[key], b[key])) } } } diff --git a/common/utils/functions/sizeUtil.js b/common/utils/functions/sizeUtil.js index 72de534..b7867a8 100644 --- a/common/utils/functions/sizeUtil.js +++ b/common/utils/functions/sizeUtil.js @@ -15,11 +15,16 @@ export const PB = 1024 * GB * @return {size: number, label: string} */ export function getFileSizeUnit(size) { - if (size < KB) return { size: 1, label: 'B' } - if (size < MB) return { size: KB, label: 'KB' } - if (size < GB) return { size: MB, label: 'MB' } - if (size < TB) return { size: GB, label: 'GB' } - if (size < PB) return { size: TB, label: 'TB' } + if (size < KB) + return { size: 1, label: 'B' } + if (size < MB) + return { size: KB, label: 'KB' } + if (size < GB) + return { size: MB, label: 'MB' } + if (size < TB) + return { size: GB, label: 'GB' } + if (size < PB) + return { size: TB, label: 'TB' } return { size: PB, label: 'PB' } } diff --git a/common/utils/http/fetch_.js b/common/utils/http/fetch_.js index 0e6f65b..8e07f42 100644 --- a/common/utils/http/fetch_.js +++ b/common/utils/http/fetch_.js @@ -6,5 +6,5 @@ * @private */ export async function fetch_(url, options) { - return await fetch(url, options).then((res) => res.json()) + return await fetch(url, options).then(res => res.json()) } diff --git a/common/utils/question-getter/getPlanQuestionList.js b/common/utils/question-getter/getPlanQuestionList.js index 0b5e54f..784183d 100644 --- a/common/utils/question-getter/getPlanQuestionList.js +++ b/common/utils/question-getter/getPlanQuestionList.js @@ -4,7 +4,7 @@ import { getPlanQuestionListJson } from '#resources/headers/planQuestionListJson export async function getPlanQuestionList(slug) { const res = await graphql(getPlanQuestionListJson(slug)) const { - data: { studyPlanV2Detail } + data: { studyPlanV2Detail }, } = res return studyPlanV2Detail } diff --git a/common/utils/question-getter/getQuestionById.js b/common/utils/question-getter/getQuestionById.js index 4331553..512db01 100644 --- a/common/utils/question-getter/getQuestionById.js +++ b/common/utils/question-getter/getQuestionById.js @@ -5,11 +5,11 @@ import { graphql } from '#common/utils/http/graphql.js' export async function getQuestionById(id) { const base = await graphql(getQuestionSearchJson(id.toString())) const questionContent = base?.data?.problemsetQuestionList?.questions?.find( - (o) => o?.frontendQuestionId === id.toString() + o => o?.frontendQuestionId === id.toString(), ) if (!questionContent) { return { - id: null + id: null, } } const slug = questionContent.titleSlug diff --git a/common/utils/question-getter/getQuestionRandom.js b/common/utils/question-getter/getQuestionRandom.js index a06154c..28f28c0 100644 --- a/common/utils/question-getter/getQuestionRandom.js +++ b/common/utils/question-getter/getQuestionRandom.js @@ -7,7 +7,7 @@ export async function getQuestionRandom() { const id = await getRandomId() const base = await graphql(getQuestionSearchJson(id.toString())) const slug = base.data.problemsetQuestionList.questions.find( - (o) => o.frontendQuestionId === id.toString() + o => o.frontendQuestionId === id.toString(), ).titleSlug const question = await getQuestionDetail(slug) return question diff --git a/common/utils/question-getter/getStudyPlanList.js b/common/utils/question-getter/getStudyPlanList.js index e1cc5fd..2b8d8db 100644 --- a/common/utils/question-getter/getStudyPlanList.js +++ b/common/utils/question-getter/getStudyPlanList.js @@ -4,7 +4,7 @@ import { getStudyPlanListJson } from '#resources/headers/studyPlanListJson.js' export async function getStudyPlanList() { const res = await graphql(getStudyPlanListJson()) const { - data: { studyPlansV2AdQuestionPage } + data: { studyPlansV2AdQuestionPage }, } = res return studyPlansV2AdQuestionPage } diff --git a/common/utils/question-handler/checkQuestion.js b/common/utils/question-handler/checkQuestion.js index 43f5393..ce9e772 100644 --- a/common/utils/question-handler/checkQuestion.js +++ b/common/utils/question-handler/checkQuestion.js @@ -23,7 +23,7 @@ export async function checkQuestion(path) { path, vm.createContext({ showLogs, - console - }) + console, + }), ) } diff --git a/common/utils/question-handler/code.js b/common/utils/question-handler/code.js index 04469a8..a0c7130 100644 --- a/common/utils/question-handler/code.js +++ b/common/utils/question-handler/code.js @@ -2,7 +2,7 @@ import fs from 'node:fs' import { getQuestionCodeList } from '#common/utils/question-getter/getQuestionCodeList.js' import { getLangByExtension, - setLineComment + setLineComment, } from '#common/utils/question-handler/questionLanguage.js' import { DefaultLang } from '#common/constants/question.const.js' @@ -14,7 +14,7 @@ import { DefaultLang } from '#common/constants/question.const.js' */ export async function getCodeBySlug(slug, lang) { const list = await getQuestionCodeList(slug) - return list.find((o) => o.langSlug === lang)?.code + return list.find(o => o.langSlug === lang)?.code } /** * 获取支持的代码语言 @@ -23,7 +23,7 @@ export async function getCodeBySlug(slug, lang) { */ export async function getSupportCode(slug) { const list = await getQuestionCodeList(slug) - return list.map((code) => code?.langSlug) + return list.map(code => code?.langSlug) } /** @@ -36,12 +36,12 @@ export function getCodeRange(lang, code) { if (!code) { return setLineComment( lang, - `!important: 此题目没有当前语言[${lang}]的代码模板!` + `!important: 此题目没有当前语言[${lang}]的代码模板!`, ) } return `${setLineComment(lang, '@QUESTION_START') + code}\n${setLineComment( lang, - '@QUESTION_END' + '@QUESTION_END', )}` } /** @@ -55,6 +55,7 @@ export function getCodeInFile(filePath) { const rangeReg = new RegExp(`${startTag}.*${endTag}`, 'ms') const rangeTagReg = new RegExp(`(${startTag}|${endTag})+`, 'mg') const match = data.match(rangeReg) - if (!match) return null + if (!match) + return null return match[0]?.replace(rangeTagReg, '') } diff --git a/common/utils/question-handler/createQuestion.js b/common/utils/question-handler/createQuestion.js index c8d7fb9..eac42ef 100644 --- a/common/utils/question-handler/createQuestion.js +++ b/common/utils/question-handler/createQuestion.js @@ -15,14 +15,15 @@ export function createQuestion(question, questionDir) { const filePath = path.normalize( path.join( questionDir, - `question${getQuestionFileExtension(question.lang)}` - ) + `question${getQuestionFileExtension(question.lang)}`, + ), ) if (fs.existsSync(filePath)) { resolve(false) - } else { + } + else { createQuestionFile(questionDir, filePath, question) - .then((path) => resolve(path)) + .then(path => resolve(path)) .catch(() => resolve(false)) } }) @@ -37,12 +38,13 @@ export function createQuestionFile(questionDir, questionFilePath, question) { if (!question.code) { const supports = await getSupportCode(question.slug) console.warn( - `此题目不支持当前语言[${question.lang}]!受支持的语言有[${supports.join(',')}]!` + `此题目不支持当前语言[${question.lang}]!受支持的语言有[${supports.join(',')}]!`, ) } resolve(questionFilePath) }) - } catch (e) { + } + catch (e) { reject(e) } }) diff --git a/common/utils/question-handler/createQuestionCopy.js b/common/utils/question-handler/createQuestionCopy.js index 8720c9e..76a65ce 100644 --- a/common/utils/question-handler/createQuestionCopy.js +++ b/common/utils/question-handler/createQuestionCopy.js @@ -19,7 +19,7 @@ export function createQuestionCopy(question, questionDir) { const copyFileDir = path.join(dir, `${name}${affix}`) const copyFilePath = path.join( copyFileDir, - `question${getQuestionFileExtension(question.lang)}` + `question${getQuestionFileExtension(question.lang)}`, ) return createQuestionFile(copyFileDir, copyFilePath, question) } diff --git a/common/utils/question-handler/fulfillQuestion.js b/common/utils/question-handler/fulfillQuestion.js index 830890b..745d84e 100644 --- a/common/utils/question-handler/fulfillQuestion.js +++ b/common/utils/question-handler/fulfillQuestion.js @@ -52,7 +52,8 @@ export function fulfillQuestion(questionPath, question) { const newData = generateTemplateContent(question) // 创建文件 fs.writeFile(questionPath, newData, (err) => { - if (err) throw err + if (err) + throw err resolve() }) }) diff --git a/common/utils/question-handler/getHot100QuestionListCode.js b/common/utils/question-handler/getHot100QuestionListCode.js index d3a6d8b..1f47ad0 100644 --- a/common/utils/question-handler/getHot100QuestionListCode.js +++ b/common/utils/question-handler/getHot100QuestionListCode.js @@ -7,7 +7,7 @@ export async function getTitleSlugList() { const res = await getPlanQuestionList() const { planSubGroups } = res return planSubGroups.reduce((acc, cur) => { - acc.push(...cur.questions.map((res) => res.titleSlug)) + acc.push(...cur.questions.map(res => res.titleSlug)) return acc }, []) } @@ -15,8 +15,8 @@ export async function getTitleSlugList() { async function getPromiseList() { const titleSlugList = await getTitleSlugList() const dir = path.join(process.cwd(), 'hot100') - return titleSlugList.map((titleSlug) => - createQuestionByTitleSlug(titleSlug, dir) + return titleSlugList.map(titleSlug => + createQuestionByTitleSlug(titleSlug, dir), ) } diff --git a/common/utils/question-handler/getQuestionDetail.js b/common/utils/question-handler/getQuestionDetail.js index 4a4883e..4915e17 100644 --- a/common/utils/question-handler/getQuestionDetail.js +++ b/common/utils/question-handler/getQuestionDetail.js @@ -22,6 +22,6 @@ export async function getQuestionDetail(slug, extra = {}) { detail: detail?.translatedContent, lang: curLang, code, - ...extra + ...extra, } } diff --git a/common/utils/question-handler/getQuestionFileName.js b/common/utils/question-handler/getQuestionFileName.js index 882ae44..4ccffbc 100644 --- a/common/utils/question-handler/getQuestionFileName.js +++ b/common/utils/question-handler/getQuestionFileName.js @@ -4,6 +4,7 @@ * @returns {string} */ export function getQuestionFileName(question) { - if (!question || !question?.id) return '' + if (!question || !question?.id) + return '' return `${question.id}.${question.slug}` } diff --git a/common/utils/question-handler/getQuestionIdBySlug.js b/common/utils/question-handler/getQuestionIdBySlug.js index d61f0da..0689e9d 100644 --- a/common/utils/question-handler/getQuestionIdBySlug.js +++ b/common/utils/question-handler/getQuestionIdBySlug.js @@ -1,7 +1,7 @@ import { graphql } from '#common/utils/http/graphql.js' const headers = { - 'content-type': 'application/json' + 'content-type': 'application/json', } export async function getQuestionIdBySlug(titleSlug) { @@ -9,14 +9,14 @@ export async function getQuestionIdBySlug(titleSlug) { query: '\n query questionTitle($titleSlug: String!) {\n question(titleSlug: $titleSlug) {\n questionId\n questionFrontendId\n title\n titleSlug\n isPaidOnly\n difficulty\n likes\n dislikes\n categoryTitle\n }\n}\n ', variables: { - titleSlug + titleSlug, }, - operationName: 'questionTitle' + operationName: 'questionTitle', } const initJson = { headers, body: JSON.stringify(body), - method: 'POST' + method: 'POST', } const res = await graphql(initJson) const { data: question } = res diff --git a/common/utils/question-handler/getRandomId.js b/common/utils/question-handler/getRandomId.js index 0c6b3f1..ffd2244 100644 --- a/common/utils/question-handler/getRandomId.js +++ b/common/utils/question-handler/getRandomId.js @@ -9,7 +9,7 @@ import { DefaultLimit } from '#common/constants/question.const.js' export async function getIds(index, limit = DefaultLimit) { const res = await graphql(getQuestionListJson(index, limit)) return res?.data?.problemsetQuestionList?.questions?.map( - (q) => q.frontendQuestionId + q => q.frontendQuestionId, ) } /** @@ -18,7 +18,7 @@ export async function getIds(index, limit = DefaultLimit) { */ export function getCount() { return graphql(getQuestionListJson(0)).then( - (res) => res?.data?.problemsetQuestionList?.total + res => res?.data?.problemsetQuestionList?.total, ) } /** @@ -26,18 +26,20 @@ export function getCount() { */ export async function getRandomId() { // 去除所有的标题 剩下的就是id - const parse = (name) => name.replace(/\.[a-zA-Z0-9-]+$/i, '') + const parse = name => name.replace(/\.[a-zA-Z0-9-]+$/i, '') // 获取一个 递归的获取 总会有一个 直到数量到达最大值 const getOne = async (waitIndexList, localIds) => { const randomIndex = waitIndexList[random(waitIndexList.length)] const ids = await getIds(randomIndex) // 过滤后的结果 - const filtered = ids.filter((o) => !localIds.includes(o)) - if (randomIndex === undefined) return null + const filtered = ids.filter(o => !localIds.includes(o)) + if (randomIndex === undefined) + return null if (filtered.length) { return filtered[random(filtered.length)] - } else { - waitIndexList.splice(waitIndexList.findIndex((i) => i === randomIndex)) + } + else { + waitIndexList.splice(waitIndexList.findIndex(i => i === randomIndex)) return await getOne(waitIndexList, localIds) } } @@ -46,10 +48,11 @@ export async function getRandomId() { // 最大的数量 const maxLength = await getCount() const waitIndexList = Array.from({ - length: Math.ceil(maxLength / DefaultLimit) + length: Math.ceil(maxLength / DefaultLimit), }).map((_, i) => i) const one = await getOne(waitIndexList, allLocalIds) - if (one === null) console.log('恭喜!你已经刷完了所有的题目!') + if (one === null) + console.log('恭喜!你已经刷完了所有的题目!') else return one } /** diff --git a/common/utils/question-handler/getTestCase.js b/common/utils/question-handler/getTestCase.js index 2862f73..96cc363 100644 --- a/common/utils/question-handler/getTestCase.js +++ b/common/utils/question-handler/getTestCase.js @@ -54,35 +54,37 @@ export function getTestCase(question) { const detail = question.detail.replaceAll('`', '') const cases = detail.match(inputReg)?.map( - (str) => + str => `[${removeDomTags( str ?.replace(inputStartReg, '') ?.replace(endReg, '') ?.replace('\n', '') - .replace(/[a-zA-Z]+ =/g, '') - )}]` + .replace(/[a-zA-Z]+ =/g, ''), + )}]`, ) - const expires = detail.match(outputReg)?.map((str) => + const expires = detail.match(outputReg)?.map(str => removeDomTags( str ?.replace(outputStartReg, '') ?.replace(endReg, '') ?.replace('\n', '') - .replace(/[a-zA-Z]+ =/g, '') - ) + .replace(/[a-zA-Z]+ =/g, ''), + ), ) if (question.lang === DefaultLang) { const functionName = question.code ?.match(/(var|let|const).+=/g)?.[0] ?.replace(/((var|let|const)|=)\s?/gm, '') .trim() - if (!functionName) return '' + if (!functionName) + return '' return ( - setBlockComment(question.lang, 'Test Cases') + - logsTemplate(question, functionName, cases, expires) + setBlockComment(question.lang, 'Test Cases') + + logsTemplate(question, functionName, cases, expires) ) - } else { + } + else { // 其他语言无法支持测试 只能提供测试数据 // 生成注释语句 let showText = `暂无法支持除JS外的语言测试,提取的一些入参和返回值供自行测试,每一个case中的第一行为入参,第二行为返回值\n` diff --git a/common/utils/question-handler/parseStructure.js b/common/utils/question-handler/parseStructure.js index 1ed941a..8b816d9 100644 --- a/common/utils/question-handler/parseStructure.js +++ b/common/utils/question-handler/parseStructure.js @@ -5,20 +5,20 @@ import { ListNode } from '#common/structures/ListNode.js' const paramMap = { // 入参map cases: { - ListNode: (_param) => ListNode.parse(_param), - 'ListNode[]': (param) => param.map((res) => ListNode.parse(res)), - TreeNode: (param) => TreeNode.parse(param), - Node: (param) => Node.parse(param), - default: (param) => param + 'ListNode': _param => ListNode.parse(_param), + 'ListNode[]': param => param.map(res => ListNode.parse(res)), + 'TreeNode': param => TreeNode.parse(param), + 'Node': param => Node.parse(param), + 'default': param => param, }, // 返回值map return: { - ListNode: (param) => ListNode.toArray(param), - 'ListNode[]': (param) => param.map((res) => ListNode.toArray(res)), - TreeNode: (param) => TreeNode.toArray(param), - Node: (param) => Node.toArray(param), - default: (param) => param - } + 'ListNode': param => ListNode.toArray(param), + 'ListNode[]': param => param.map(res => ListNode.toArray(res)), + 'TreeNode': param => TreeNode.toArray(param), + 'Node': param => Node.toArray(param), + 'default': param => param, + }, } /** * @@ -43,7 +43,7 @@ export function setDataStructure(params, structs, type = 'cases') { export function getDataStructure(code, type = 'param') { const regexMap = { param: /@param\s+{\s*([^}\s]+)\s*}/g, - return: /@return\s+{\s*([^}\s]+)\s*}/g + return: /@return\s+{\s*([^}\s]+)\s*}/g, } const regex = regexMap[type] const paramTypes = [] diff --git a/common/utils/question-handler/questionLanguage.js b/common/utils/question-handler/questionLanguage.js index ca4bc22..e1cec38 100644 --- a/common/utils/question-handler/questionLanguage.js +++ b/common/utils/question-handler/questionLanguage.js @@ -11,204 +11,204 @@ export const LANGUAGES = [ name: 'cpp', extension: '.cpp', blockComment: '/*\n*\n*/', // 块级注释 使用换行符来分割 - lineComment: '//' // 行级注释 不需要分割 + lineComment: '//', // 行级注释 不需要分割 }, { id: 1, name: 'java', extension: '.java', blockComment: '/*\n*\n*/', - lineComment: '//' + lineComment: '//', }, { id: 2, name: 'python', extension: '.py', - blockComment: "'''\n\n'''", - lineComment: '#' + blockComment: '\'\'\'\n\n\'\'\'', + lineComment: '#', }, { id: 11, name: 'python3', extension: '.py', - blockComment: "'''\n\n'''", - lineComment: '#' + blockComment: '\'\'\'\n\n\'\'\'', + lineComment: '#', }, { id: 3, name: 'mysql', extension: '.sql', blockComment: '/*\n*\n*/', - lineComment: '--' + lineComment: '--', }, { id: 14, name: 'mssql', extension: '.sql', blockComment: '/*\n*\n*/', - lineComment: '--' + lineComment: '--', }, { id: 15, name: 'oraclesql', extension: '.sql', blockComment: '/*\n*\n*/', - lineComment: '--' + lineComment: '--', }, { id: 4, name: 'c', extension: '.c', blockComment: '/*\n*\n*/', - lineComment: '//' + lineComment: '//', }, { id: 5, name: 'csharp', extension: '.cs', blockComment: '/*\n*\n*/', - lineComment: '//' + lineComment: '//', }, { id: 6, name: 'javascript', extension: '.js', blockComment: '/*\n*\n*/', - lineComment: '//' + lineComment: '//', }, { id: 20, name: 'typescript', extension: '.ts', blockComment: '/*\n*\n*/', - lineComment: '//' + lineComment: '//', }, { id: 8, name: 'bash', extension: '.sh', - blockComment: "'''\n\n'''", - lineComment: '#' + blockComment: '\'\'\'\n\n\'\'\'', + lineComment: '#', }, { id: 19, name: 'php', extension: '.php', blockComment: '/*\n*\n*/', - lineComment: '//' + lineComment: '//', }, { id: 9, name: 'swift', extension: '.swift', blockComment: '/*\n*\n*/', - lineComment: '//' + lineComment: '//', }, { id: 13, name: 'kotlin', extension: '.kt', blockComment: '/*\n*\n*/', - lineComment: '//' + lineComment: '//', }, { id: 24, name: 'dart', extension: '.dart', blockComment: '/*\n*\n*/', - lineComment: '//' + lineComment: '//', }, { id: 10, name: 'golang', extension: '.go', blockComment: '/*\n*\n*/', - lineComment: '//' + lineComment: '//', }, { id: 7, name: 'ruby', extension: '.rb', blockComment: '=begin\n\n=end', - lineComment: '#' + lineComment: '#', }, { id: 12, name: 'scala', extension: '.scala', blockComment: '/*\n*\n*/', - lineComment: '//' + lineComment: '//', }, { id: 16, name: 'html', extension: '.html', blockComment: '', - lineComment: '' + lineComment: '', }, { id: 17, name: 'pythonml', extension: '.py', - blockComment: "'''\n\n'''", - lineComment: '#' + blockComment: '\'\'\'\n\n\'\'\'', + lineComment: '#', }, { id: 18, name: 'rust', extension: '.rs', blockComment: '/*\n*\n*/', - lineComment: '//' + lineComment: '//', }, { id: 21, name: 'racket', extension: '.rkt', blockComment: ';;\n\n;;', - lineComment: '' + lineComment: '', }, { id: 22, name: 'erlang', extension: '.erl', blockComment: '%%\n\n%%', - lineComment: '' + lineComment: '', }, { id: 23, name: 'elixir', extension: '.ex', blockComment: '#\n#\n#', - lineComment: '' + lineComment: '', }, { id: 25, name: 'pythondata', extension: '.py', - blockComment: "'''\n\n'''", - lineComment: '#' + blockComment: '\'\'\'\n\n\'\'\'', + lineComment: '#', }, { id: 26, name: 'react', extension: '.jsx', blockComment: '/*\n*\n*/', - lineComment: '//' + lineComment: '//', }, { id: 27, name: 'vanillajs', extension: '.js', blockComment: '/*\n*\n*/', - lineComment: '//' + lineComment: '//', }, { id: 28, name: 'postgresql', extension: '.sql', blockComment: '/*\n*\n*/', - lineComment: '--' - } + lineComment: '--', + }, ] /** @@ -231,7 +231,7 @@ export async function getQuestionLanguage() { * @returns {*} */ export function getLang(lang) { - return LANGUAGES.find((o) => o.name.toLowerCase() === lang.toLowerCase()) + return LANGUAGES.find(o => o.name.toLowerCase() === lang.toLowerCase()) } /** * 获取文件后缀 @@ -251,7 +251,7 @@ export function getLangByExtension(extensionLike) { const reg = /\.[0-9a-zA-Z_]+$/im const match = extensionLike.match(reg) const extension = match === null ? `.${extensionLike}` : match[0] - return LANGUAGES?.find((o) => o.extension === extension) + return LANGUAGES?.find(o => o.extension === extension) } /** * 获取行注释 @@ -262,7 +262,8 @@ export function getLineComment(lang = DefaultLang) { const langObj = getLang(lang) if (langObj.lineComment !== '') { return langObj.lineComment - } else { + } + else { // 因为保底是都有块级注释的 return null } @@ -289,7 +290,8 @@ export function setLineComment(lang = DefaultLang, comment = '') { if (lineComment !== null) { const lines = comment.split('\n') return lines.reduce((p, line) => (p += `${lineComment} ${line}\n`), '') - } else { + } + else { return setBlockComment(lang, comment) } } @@ -311,7 +313,7 @@ export function setBlockComment(lang = DefaultLang, comment = '') { const startTag = splitter[1] const content = lines.reduce( (p, line) => (p += `${startTag} ${line}\n`), - '' + '', ) return `${start}\n${content}${end}\n` } diff --git a/common/utils/question-handler/showLogs.js b/common/utils/question-handler/showLogs.js index 3c98ffb..1d0625b 100644 --- a/common/utils/question-handler/showLogs.js +++ b/common/utils/question-handler/showLogs.js @@ -21,7 +21,7 @@ export function parseLog(fnName, param, compare, compareStruct) { const [parsedCompareArr] = setDataStructure( [callVal], compareStruct, - 'return' + 'return', ) // 获取函数执行后的内存使用情况 const endHeapStatsArray = v8.getHeapSpaceStatistics() @@ -29,11 +29,11 @@ export function parseLog(fnName, param, compare, compareStruct) { const endTime = performance.now() const startHeapStats = startHeapStatsArray.reduce( (prev, curr) => (prev += curr.space_used_size), - 0 + 0, ) const endHeapStats = endHeapStatsArray.reduce( (prev, curr) => (prev += curr.space_used_size), - 0 + 0, ) return { @@ -41,7 +41,7 @@ export function parseLog(fnName, param, compare, compareStruct) { 预期结果: JSON.stringify(compare), 执行结果: JSON.stringify(parsedCompareArr), 执行用时: `${Number(endTime - startTime).toFixed(4)}ms`, - 内存占用: getFileSize(endHeapStats - startHeapStats) + 内存占用: getFileSize(endHeapStats - startHeapStats), } } @@ -56,7 +56,7 @@ export function showLogs(fnName, paramMap, compareMap) { fnName, parsedParma, compareArr[index], - compareStruct + compareStruct, ) logsItems.push(logItem) }) @@ -67,18 +67,18 @@ export function showLogs(fnName, paramMap, compareMap) { { name: '预期结果', title: '预期结果', alignment: 'center', maxLen: 40 }, { name: '执行结果', title: '执行结果', alignment: 'center', maxLen: 40 }, { name: '执行用时', title: '执行用时', alignment: 'center', maxLen: 10 }, - { name: '内存占用', title: '内存占用', alignment: 'center', maxLen: 10 } - ] + { name: '内存占用', title: '内存占用', alignment: 'center', maxLen: 10 }, + ], }) logsItems.forEach((item) => { for (const key in item) { if (key === '预期结果' || key === '执行结果') { - item[key] = - item[key]?.length >= 40 ? `${item[key].slice(0, 37)}...` : item[key] + item[key] + = item[key]?.length >= 40 ? `${item[key].slice(0, 37)}...` : item[key] } } logTable.addRow(item, { - color: item['测试结果'] === '通过' ? 'green' : 'red' + color: item['测试结果'] === '通过' ? 'green' : 'red', }) }) logTable.printTable() diff --git a/common/utils/store/controller/store.js b/common/utils/store/controller/store.js index 5da932b..950c77e 100644 --- a/common/utils/store/controller/store.js +++ b/common/utils/store/controller/store.js @@ -19,7 +19,8 @@ function convData(data) { */ function parseData(dataStr) { const prefixReg = /^\$<.+>\$/im - if (!prefixReg.test(dataStr)) return null + if (!prefixReg.test(dataStr)) + return null const type = dataStr.match(prefixReg)[0].replace(/[$<>]+/g, '') const remainStr = dataStr.replace(prefixReg, '') diff --git a/common/utils/store/schemas/question.js b/common/utils/store/schemas/question.js index 1d3b20d..409fe64 100644 --- a/common/utils/store/schemas/question.js +++ b/common/utils/store/schemas/question.js @@ -14,8 +14,8 @@ export class Question extends Realm.Object { code: 'string?', url: 'string?', date: 'string?', - timestamp: { type: 'date', default: () => new Date() } + timestamp: { type: 'date', default: () => new Date() }, }, - primaryKey: '_id' + primaryKey: '_id', } } diff --git a/common/utils/store/schemas/store.js b/common/utils/store/schemas/store.js index 9ee3f6f..4f7a696 100644 --- a/common/utils/store/schemas/store.js +++ b/common/utils/store/schemas/store.js @@ -6,8 +6,8 @@ export class Store extends Realm.Object { properties: { key: 'string', value: 'string', - timestamp: { type: 'date', default: () => new Date() } + timestamp: { type: 'date', default: () => new Date() }, }, - primaryKey: 'key' + primaryKey: 'key', } } diff --git a/common/utils/store/store-realm.js b/common/utils/store/store-realm.js index 7392047..b904a29 100644 --- a/common/utils/store/store-realm.js +++ b/common/utils/store/store-realm.js @@ -15,14 +15,16 @@ export async function open() { try { realm = await Realm.open({ schema: [Question, Store], - path: localPath + path: localPath, }) - } catch (e) { - if (e?.message?.includes('Migration')) await cleanStore() + } + catch (e) { + if (e?.message?.includes('Migration')) + await cleanStore() realm = await Realm.open({ schema: [Question, Store], - path: localPath + path: localPath, }) } return realm diff --git a/common/utils/update/update.js b/common/utils/update/update.js index bef2cb4..f0b232f 100644 --- a/common/utils/update/update.js +++ b/common/utils/update/update.js @@ -6,7 +6,7 @@ import { GITHUB_HOST, GITHUB_RAW, NPM_URL, - PackageName + PackageName, } from '#common/constants/question.const.js' import { url_join } from '#common/utils/http/urlJoin.js' import { fetch_ } from '#common/utils/http/fetch_.js' @@ -17,14 +17,14 @@ const githubUrl = url_join( GITHUB_RAW, GITHUB_HOST, PackageName, - 'master/package.json' + 'master/package.json', ) const giteeUrl = url_join( GITEE_URL, GITHUB_HOST, PackageName, 'raw', - 'master/package.json' + 'master/package.json', ) /** @@ -35,7 +35,8 @@ export async function getNpmVersion() { const res = await fetch_(npmUrl, { method: 'GET' }) console.log('获取NPM版本成功!======', res['dist-tags']?.latest) return res['dist-tags']?.latest - } catch (e) { + } + catch (e) { console.log('获取NPM版本失败!') throw new Error(e) } @@ -46,15 +47,16 @@ export async function getNpmVersion() { */ export async function getGithubVersion() { try { - const [{ reason: _1, value: github }, { reason: _2, value: gitee }] = - await Promise.allSettled([ + const [{ reason: _1, value: github }, { reason: _2, value: gitee }] + = await Promise.allSettled([ fetch_(githubUrl, { method: 'GET' }), - fetch_(giteeUrl, { method: 'GET' }) + fetch_(giteeUrl, { method: 'GET' }), ]) const ver = github?.version ?? gitee?.version console.log('获取Github版本成功!======', ver) return ver - } catch (e) { + } + catch (e) { console.log('获取Github版本失败!', e) throw new Error(e) } @@ -62,11 +64,12 @@ export async function getGithubVersion() { export function getLocalVersion() { try { const { version } = JSON.parse( - fs.readFileSync(path.resolve(rootPath, 'package.json'), 'utf-8') + fs.readFileSync(path.resolve(rootPath, 'package.json'), 'utf-8'), ) console.log('本地版本号获取成功!======', version) return version - } catch (e) { + } + catch (e) { console.log('本地版本号获取失败!') return false } @@ -84,6 +87,6 @@ export async function checkUpdate() { npmVersion: remote, githubVersion: github, isCliUpdate: remote !== local, - isGithubUpdate: github !== local + isGithubUpdate: github !== local, } } diff --git a/common/utils/update/updateByEnv.js b/common/utils/update/updateByEnv.js index b2409e4..25fd571 100644 --- a/common/utils/update/updateByEnv.js +++ b/common/utils/update/updateByEnv.js @@ -27,7 +27,8 @@ export async function updateByEnv(env) { export function updateCli() { return new Promise((resolve, reject) => { exec(`npm install -g leetcode-practice`, (err) => { - if (err) reject(err) + if (err) + reject(err) else resolve() }) }) @@ -56,7 +57,8 @@ export async function updateProject() { async function execCommand(command) { return new Promise((resolve, reject) => { exec(command, (error, stdout) => { - if (error) reject(error) + if (error) + reject(error) else resolve(stdout.trim()) }) }) @@ -70,8 +72,8 @@ export async function updateProject() { type: 'confirm', name: 'hasChanges', message: '是否存在自己修改过的内容?', - default: false - } + default: false, + }, ]) // 0.1 如果有过更改,终止更新脚本,并给出提示建议 @@ -91,7 +93,7 @@ export async function updateProject() { // 2. 下载所有的文件并对应更新文件(除package.json) const response = await https.get( - 'https://raw.githubusercontent.com/wh131462/leetcode-practice' + 'https://raw.githubusercontent.com/wh131462/leetcode-practice', ) const filesToUpdate = response.data @@ -114,7 +116,8 @@ export async function updateProject() { // 4. 完成更新 console.log('项目更新完成。') - } catch (error) { + } + catch (error) { console.error('更新过程中出现错误:', error) } } diff --git a/common/view/check.view.js b/common/view/check.view.js index 8172651..3caeb23 100644 --- a/common/view/check.view.js +++ b/common/view/check.view.js @@ -13,8 +13,8 @@ export async function easyCheckView() { type: 'list', name: 'mode', message: '请选择检查问题的模式:', - choices: ['today', 'identity', 'random'] - } + choices: ['today', 'identity', 'random'], + }, ] // 第一个问题 选择的模式 const { mode } = await inquirer.prompt(modeQuestion, null) @@ -22,8 +22,8 @@ export async function easyCheckView() { { type: 'input', name: 'identity', - message: '请输入题目编号:' - } + message: '请输入题目编号:', + }, ] let question switch (mode) { @@ -51,8 +51,8 @@ export async function easyCheckView() { { type: 'confirm', name: 'dirRight', - message: `是否检测当前目录[ ${currentDir} ]下的题目[ ${questionFileName} ]?` - } + message: `是否检测当前目录[ ${currentDir} ]下的题目[ ${questionFileName} ]?`, + }, ] const { dirRight } = await inquirer.prompt(pathRightQuestion, null) if (!dirRight) { @@ -60,8 +60,8 @@ export async function easyCheckView() { { type: 'input', name: 'newDir', - message: `请选择新目录(基础地址为${currentDir})[按回车[Enter]终止操作]:` - } + message: `请选择新目录(基础地址为${currentDir})[按回车[Enter]终止操作]:`, + }, ] const { newDir } = await inquirer.prompt(newDirQuestion, null) if (!newDir) { @@ -70,7 +70,7 @@ export async function easyCheckView() { } questionDir = path.join( path.join(process.cwd(), newDir), - `${questionFileName}` + `${questionFileName}`, ) } const questionParentDir = path.dirname(questionDir) @@ -81,17 +81,17 @@ export async function easyCheckView() { type: 'list', name: 'selectQuestion', message: `题目[ ${questionFileName} ]有多个副本,请选择要检测的副本:`, - choices: getFileListBySameName(questionParentDir, questionFileName) - } + choices: getFileListBySameName(questionParentDir, questionFileName), + }, ] // 选择其中一个副本进行检查 const { selectQuestion } = await inquirer.prompt( selectQuestionQuestion, - null + null, ) questionDir = path.join(questionParentDir, selectQuestion) console.log( - `用户选择题目[ ${questionFileName}]的副本[ ${selectQuestion}]进行检测` + `用户选择题目[ ${questionFileName}]的副本[ ${selectQuestion}]进行检测`, ) } const filePath = path.join(questionDir, `question${question.lang}`) diff --git a/common/view/create.view.js b/common/view/create.view.js index ecdb06c..f593bf0 100644 --- a/common/view/create.view.js +++ b/common/view/create.view.js @@ -14,8 +14,8 @@ export async function easyCreateView() { type: 'list', name: 'mode', message: '请选择创建问题的模式:', - choices: ['today', 'identity', 'random'] - } + choices: ['today', 'identity', 'random'], + }, ] // 第一个问题 选择的模式 const { mode } = await inquirer.prompt(modeQuestion, null) @@ -23,8 +23,8 @@ export async function easyCreateView() { { type: 'input', name: 'identity', - message: '请输入题目编号:' - } + message: '请输入题目编号:', + }, ] let question switch (mode) { @@ -43,7 +43,8 @@ export async function easyCreateView() { break } const store = await setQuestion(mode, question) - if (!store) console.warn(`[create][${mode}]问题[${question.title}]未成功缓存`) + if (!store) + console.warn(`[create][${mode}]问题[${question.title}]未成功缓存`) // 创建题目 const questionFileName = getQuestionFileName(question) const currentDir = process.cwd() @@ -53,8 +54,8 @@ export async function easyCreateView() { { type: 'confirm', name: 'dirRight', - message: `是否在目录[ ${currentDir} ]下创建题目[ ${questionFileName} ]?` - } + message: `是否在目录[ ${currentDir} ]下创建题目[ ${questionFileName} ]?`, + }, ] const { dirRight } = await inquirer.prompt(pathRightQuestion, null) if (!dirRight) { @@ -62,8 +63,8 @@ export async function easyCreateView() { { type: 'input', name: 'newDir', - message: `请选择新目录(基础地址为${process.cwd()})[按回车[Enter]终止操作]:` - } + message: `请选择新目录(基础地址为${process.cwd()})[按回车[Enter]终止操作]:`, + }, ] const { newDir } = await inquirer.prompt(newDirQuestion, null) if (!newDir) { @@ -72,11 +73,12 @@ export async function easyCreateView() { } questionDir = path.join( path.join(process.cwd(), newDir), - `${questionFileName}` + `${questionFileName}`, ) } let filePath = await createQuestion(question, questionDir) - if (!filePath) filePath = await createQuestionCopy(question, questionDir) + if (!filePath) + filePath = await createQuestionCopy(question, questionDir) console.log(`题目[${questionFileName}]创建完成!\n文件地址为: ${filePath}`) process.exit(0) diff --git a/common/view/finder.view.js b/common/view/finder.view.js index c10ef78..76a0f8f 100644 --- a/common/view/finder.view.js +++ b/common/view/finder.view.js @@ -4,7 +4,7 @@ import input from '@inquirer/input' // import { getHot100QuestionListCode } from '#common/utils/question-handler/getHot100QuestionListCode.js' import { createQuestionById, - createQuestionByTitleSlug + createQuestionByTitleSlug, } from '#common/utils/create-check/createUtil.js' import { getQuestionByKeyword } from '#common/utils/question-getter/getQuestionByKeyword.js' import { getStudyPlanList } from '#common/utils/question-getter/getStudyPlanList.js' @@ -14,18 +14,18 @@ async function studyMode(baseDir = process.cwd()) { const questionList = await getStudyPlanList() const planListMode = { message: '请选择学习计划', - choices: questionList.map((item) => ({ + choices: questionList.map(item => ({ name: `${item.name}${item.premiumOnly ? '(VIP)' : ''}`, - value: item.slug - })) + value: item.slug, + })), } const planSlug = await select(planListMode) const createMode = await select({ message: '拉题模式', choices: [ { name: '单个选择', value: 'single' }, - { name: '全部拉取(暂不支持)', value: 'all' } - ] + { name: '全部拉取(暂不支持)', value: 'all' }, + ], }) if (createMode === 'single') { const { planSubGroups } = await getPlanQuestionList(planSlug) @@ -34,24 +34,25 @@ async function studyMode(baseDir = process.cwd()) { ...cur.questions.map((res) => { return { cnTitle: res.translatedTitle, - enTitle: res.titleSlug + enTitle: res.titleSlug, } - }) + }), ) return acc }, []) const singleMode = { message: '请选择题目?', - choices: planList.map((res) => ({ + choices: planList.map(res => ({ name: res.cnTitle, - value: res.enTitle - })) + value: res.enTitle, + })), } const singleChoice = await select(singleMode) await createQuestionByTitleSlug(singleChoice, baseDir) } - if (createMode === 'all') console.log('暂不支持') + if (createMode === 'all') + console.log('暂不支持') // await getHot100QuestionListCode() } @@ -61,14 +62,14 @@ async function keywordMode(baseDir = process.cwd()) { const list = data?.map((q) => { return { name: `${q.frontendQuestionId}.${q.titleCn}`, - value: q.frontendQuestionId + value: q.frontendQuestionId, } }) const listQuestion = { type: 'list', name: 'chooseQuestion', message: '请选择题目', - choices: list + choices: list, } const chooseQuestion = await select(listQuestion) console.log(chooseQuestion) @@ -83,19 +84,19 @@ export async function easyFinderView(baseDir = process.cwd()) { const choices = [ { name: '关键词搜索', value: 'keyword', description: '关键词描述' }, { name: '学习计划', value: 'study', description: '企业和经典面试题目列表' }, - { name: '筛选模式', value: 'select', description: '筛选题目' } + { name: '筛选模式', value: 'select', description: '筛选题目' }, ] const modeQuestion = { message: '请选择查找的模式?', - choices + choices, } const mode = await select(modeQuestion) const modeMap = { study: studyMode, keyword: keywordMode, - select: selectMode + select: selectMode, } await modeMap[mode](baseDir) } diff --git a/common/view/language.view.js b/common/view/language.view.js index 2828f1f..2db9fce 100644 --- a/common/view/language.view.js +++ b/common/view/language.view.js @@ -1,12 +1,12 @@ import inquirer from 'inquirer' import { LANGUAGES, - setQuestionLanguage + setQuestionLanguage, } from '#common/utils/question-handler/questionLanguage.js' import { DefaultLang } from '#common/constants/question.const.js' export async function easyLanguageView(defaultLang = DefaultLang) { - const list = LANGUAGES.map((o) => o.name) + const list = LANGUAGES.map(o => o.name) const setQuestion = [ { type: 'list', @@ -14,8 +14,8 @@ export async function easyLanguageView(defaultLang = DefaultLang) { message: '请确认你要设置CLI的语言环境(如果选项匹配成功,那么按下回车确认即可)', choices: list, - default: defaultLang - } + default: defaultLang, + }, ] const { newSet } = await inquirer.prompt(setQuestion, null) console.log('设置语言环境为:', newSet) diff --git a/common/view/update.view.js b/common/view/update.view.js index 65cde1e..62a79bd 100644 --- a/common/view/update.view.js +++ b/common/view/update.view.js @@ -12,7 +12,7 @@ export async function easyUpdateView() { name: 'choseEnv', message: `自动检测到的环境为[ ${env} ],如果不是,请进行选择,如是,请按下回车确认.`, choices: ['cli', 'project'], - default: env + default: env, } const { choseEnv } = await inquirer.prompt(envQuestion, null) // 2. 检测版本更新 @@ -21,10 +21,10 @@ export async function easyUpdateView() { npmVersion, githubVersion, isCliUpdate, - isGithubUpdate + isGithubUpdate, } = await checkUpdate() console.log( - `当前版本:[ ${localVersion} ] npm包最新版本:[ ${npmVersion} ] github版本:[ ${githubVersion} ]` + `当前版本:[ ${localVersion} ] npm包最新版本:[ ${npmVersion} ] github版本:[ ${githubVersion} ]`, ) let isUpdate = false let version = '未知' @@ -47,7 +47,7 @@ export async function easyUpdateView() { const checkQuestion = { type: 'confirm', name: 'willUpdate', - message: `检测到[ ${env} ]可更新版本[ ${version} ],是否进行更新?` + message: `检测到[ ${env} ]可更新版本[ ${version} ],是否进行更新?`, } const { willUpdate } = await inquirer.prompt(checkQuestion, null) if (willUpdate) { @@ -55,14 +55,16 @@ export async function easyUpdateView() { console.log('开始更新...') await updateByEnv(env) console.log('更新完成~祝你使用愉快~') - } else { + } + else { // 4.2 取消更新 console.log( - '你选择跳过此次更新,如果想要进行更新,随时可以使用参数 -u 进行更新检测!祝你使用愉快~' + '你选择跳过此次更新,如果想要进行更新,随时可以使用参数 -u 进行更新检测!祝你使用愉快~', ) } process.exit(0) - } else { + } + else { console.log('当前已是最新版本!祝你使用愉快~') process.exit(0) } diff --git a/esbuild.config.js b/esbuild.config.js index 6074108..e327d4c 100644 --- a/esbuild.config.js +++ b/esbuild.config.js @@ -5,7 +5,7 @@ import { rootPath } from '#common/utils/file/getRootPath.js' // 读取 package.json 文件内容 const packageJson = JSON.parse( - fs.readFileSync(path.resolve(rootPath, 'package.json'), 'utf-8') + fs.readFileSync(path.resolve(rootPath, 'package.json'), 'utf-8'), ) const esbuildConfig = { entryPoints: ['bin/lk.js', 'bin/lf.js', 'bin/lc.js'], @@ -17,13 +17,13 @@ const esbuildConfig = { minify: true, packages: 'external', define: { - 'process.env.VERSION': JSON.stringify(packageJson.version) - } + 'process.env.VERSION': JSON.stringify(packageJson.version), + }, } const buildBinConfig = { lk: 'bin/lk.js', lf: 'bin/lf.js', - lc: 'bin/lc.js' + lc: 'bin/lc.js', } const publishExcludeFields = [ 'scripts', @@ -31,13 +31,14 @@ const publishExcludeFields = [ 'imports', 'main', 'config', - 'packageManager' + 'packageManager', ] // 清理文件 function clean() { return new Promise((resolve) => { fs.rm(path.resolve(rootPath, 'pl-cli'), { recursive: true }, (err) => { - if (err) resolve() + if (err) + resolve() else resolve() }) }) @@ -68,16 +69,16 @@ function copyDocs() { docs.forEach((doc) => { fs.copyFileSync( path.resolve(rootPath, 'docs', doc), - path.resolve(rootPath, 'pl-cli/docs/', doc) + path.resolve(rootPath, 'pl-cli/docs/', doc), ) }) fs.copyFileSync( path.resolve(rootPath, 'README.md'), - path.resolve(rootPath, 'pl-cli/README.md') + path.resolve(rootPath, 'pl-cli/README.md'), ) fs.copyFileSync( path.resolve(rootPath, 'LICENSE'), - path.resolve(rootPath, 'pl-cli/LICENSE') + path.resolve(rootPath, 'pl-cli/LICENSE'), ) } @@ -86,7 +87,7 @@ function copyDocs() { */ function rewritePackageFile() { const newPackageJson = Object.assign(packageJson, { - bin: buildBinConfig + bin: buildBinConfig, }) publishExcludeFields?.forEach((key) => { delete newPackageJson[key] @@ -94,7 +95,7 @@ function rewritePackageFile() { Object.assign(newPackageJson, { main: 'index.js' }) fs.writeFileSync( path.resolve(rootPath, 'pl-cli/package.json'), - JSON.stringify(newPackageJson) + JSON.stringify(newPackageJson), ) } diff --git a/eslint.config.js b/eslint.config.js index 4d0a629..000f9f0 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -6,6 +6,6 @@ export default antfu({ 'no-console': 'off', 'no-irregular-whitespace': 'off', 'eslint-comments/no-unlimited-disable': 'off', - 'no-cond-assign': 'off' - } + 'no-cond-assign': 'off', + }, }) diff --git a/package.json b/package.json index 1f13d79..964aab5 100644 --- a/package.json +++ b/package.json @@ -51,14 +51,9 @@ "chalk": "^5.3.0", "commander": "^12.0.0", "console-table-printer": "^2.12.0", - "eslint-config-prettier": "^9.1.0", - "eslint-plugin-prettier": "^5.1.3", "glob": "^10.3.10", "inquirer": "^9.2.14", - "lint-staged": "^15.2.2", - "prettier": "^3.2.5", - "realm": "^11.0.0", - "request": "^2.88.2" + "realm": "^11.0.0" }, "devDependencies": { "@antfu/eslint-config": "^2.8.0", @@ -70,14 +65,19 @@ "@vitest/coverage-v8": "^1.2.2", "commitizen": "^4.2.5", "cz-conventional-changelog": "^3.3.0", + "eslint-config-prettier": "^9.1.0", + "lint-staged": "^15.2.2", + "eslint-plugin-prettier": "^5.1.3", "esbuild": "^0.20.0", "eslint": "^8.57.0", "eslint-config-airbnb-base": "^15.0.0", "eslint-plugin-import": "^2.29.1", "gradient-string": "^2.0.2", "husky": "^8.0.1", + "prettier": "^3.2.5", "release-it": "^17.1.1", "rimraf": "^5.0.5", + "typescript": "^5.4.2", "vite": "^5.0.11", "vitest": "^1.2.2" }, diff --git a/resources/headers/codeSubmitJson.js b/resources/headers/codeSubmitJson.js index 4d4c52a..81e37c6 100644 --- a/resources/headers/codeSubmitJson.js +++ b/resources/headers/codeSubmitJson.js @@ -14,6 +14,6 @@ export function codeSubmitJson(lang, id, code) { "question_id": "${id}", "typed_code": "${code}" }`, - method: 'POST' + method: 'POST', } } diff --git a/resources/headers/planQuestionListJson.js b/resources/headers/planQuestionListJson.js index e08d174..c1dcd55 100644 --- a/resources/headers/planQuestionListJson.js +++ b/resources/headers/planQuestionListJson.js @@ -6,6 +6,6 @@ export function getPlanQuestionListJson(slug) { return { headers: { 'content-type': 'application/json' }, body: `{"query":"\\n query studyPlanPastSolved($slug: String!) {\\n studyPlanV2Detail(planSlug: $slug) {\\n planSubGroups {\\n slug\\n questions {\\n titleSlug\\n translatedTitle\\n status\\n }\\n }\\n }\\n}\\n ","variables":{"slug":"${slug}"},"operationName":"studyPlanPastSolved"}`, - method: 'POST' + method: 'POST', } } diff --git a/resources/headers/questionCodeListJson.js b/resources/headers/questionCodeListJson.js index 1856538..feed28f 100644 --- a/resources/headers/questionCodeListJson.js +++ b/resources/headers/questionCodeListJson.js @@ -2,6 +2,6 @@ export function getQuestionCodeListJson(slug) { return { headers: { 'content-type': 'application/json' }, body: `{"query":"\\n query questionEditorData($titleSlug: String!) {\\n question(titleSlug: $titleSlug) {\\n questionId\\n questionFrontendId\\n codeSnippets {\\n lang\\n langSlug\\n code\\n }\\n envInfo\\n enableRunCode\\n hasFrontendPreview\\n frontendPreviews\\n }\\n}\\n ","variables":{"titleSlug":"${slug}"},"operationName":"questionEditorData"}`, - method: 'POST' + method: 'POST', } } diff --git a/resources/headers/questionDetailJson.js b/resources/headers/questionDetailJson.js index 9cb0aa2..be9b12c 100644 --- a/resources/headers/questionDetailJson.js +++ b/resources/headers/questionDetailJson.js @@ -2,6 +2,6 @@ export function getQuestionDetailJson(slug) { return { headers: { 'content-type': 'application/json' }, body: `{"query":"\\n query questionTranslations($titleSlug: String!) {\\n question(titleSlug: $titleSlug) {questionId\\n translatedTitle\\n translatedContent\\n }\\n}\\n ","variables":{"titleSlug":"${slug}"},"operationName":"questionTranslations"}`, - method: 'POST' + method: 'POST', } } diff --git a/resources/headers/questionLanguageListJson.js b/resources/headers/questionLanguageListJson.js index fea9d0c..a932d6e 100644 --- a/resources/headers/questionLanguageListJson.js +++ b/resources/headers/questionLanguageListJson.js @@ -10,6 +10,6 @@ export function getQuestionLanguageListJson() { "variables": {}, "operationName": "languageList" }`, - method: 'POST' + method: 'POST', } } diff --git a/resources/headers/questionListJson.js b/resources/headers/questionListJson.js index d197c2f..f6ce9e1 100644 --- a/resources/headers/questionListJson.js +++ b/resources/headers/questionListJson.js @@ -2,6 +2,6 @@ export function getQuestionListJson(skip = 0, limit = 50) { return { headers: { 'content-type': 'application/json' }, body: `{"query":"query problemsetQuestionList($categorySlug: String, $limit: Int, $skip: Int, $filters: QuestionListFilterInput) {\\nproblemsetQuestionList(\\ncategorySlug: $categorySlug\\nlimit: $limit\\nskip: $skip\\nfilters: $filters) {\\ntotal\\nquestions {\\n frontendQuestionId\\n title\\n titleCn\\n titleSlug\\n}\\n}\\n}","variables":{"categorySlug":"all-code-essentials","skip":${skip},"limit":${limit},"filters":{}},"operationName":"problemsetQuestionList"}`, - method: 'POST' + method: 'POST', } } diff --git a/resources/headers/questionSearchJson.js b/resources/headers/questionSearchJson.js index ad2a370..fdaf703 100644 --- a/resources/headers/questionSearchJson.js +++ b/resources/headers/questionSearchJson.js @@ -2,6 +2,6 @@ export function getQuestionSearchJson(keyword) { return { headers: { 'content-type': 'application/json' }, body: `{"query":"\\n query problemsetQuestionList($categorySlug: String, $limit: Int, $skip: Int, $filters: QuestionListFilterInput) {\\n problemsetQuestionList(\\n categorySlug: $categorySlug\\n limit: $limit\\n skip: $skip\\n filters: $filters\\n ) {\\n hasMore\\n total\\n questions {\\n acRate\\n difficulty\\n freqBar\\n frontendQuestionId\\n isFavor\\n paidOnly\\n solutionNum\\n status\\n title\\n titleCn\\n titleSlug\\n topicTags {\\n name\\n nameTranslated\\n id\\n slug\\n }\\n extra {\\n hasVideoSolution\\n topCompanyTags {\\n imgUrl\\n slug\\n numSubscribed\\n }\\n }\\n }\\n }\\n}\\n ","variables":{"categorySlug":"all-code-essentials","skip":0,"limit":50,"filters":{"searchKeywords":"${keyword}"}},"operationName":"problemsetQuestionList"}`, - method: 'POST' + method: 'POST', } } diff --git a/resources/headers/questionTodayJson.js b/resources/headers/questionTodayJson.js index 608c5fa..583b28b 100644 --- a/resources/headers/questionTodayJson.js +++ b/resources/headers/questionTodayJson.js @@ -2,6 +2,6 @@ export function getQuestionTodayJson() { return { headers: { 'content-type': 'application/json' }, body: '{"query":"\\n query questionOfToday {\\n todayRecord {\\n date\\n userStatus\\n question {\\n questionId\\n frontendQuestionId: questionFrontendId\\n difficulty\\n title\\n titleCn: translatedTitle\\n titleSlug\\n paidOnly: isPaidOnly\\n freqBar\\n isFavor\\n acRate\\n status\\n solutionNum\\n hasVideoSolution\\n topicTags {\\n name\\n nameTranslated: translatedName\\n id\\n }\\n extra {\\n topCompanyTags {\\n imgUrl\\n slug\\n numSubscribed\\n }\\n }\\n }\\n lastSubmission {\\n id\\n }\\n }\\n}\\n ","variables":{},"operationName":"questionOfToday"}', - method: 'POST' + method: 'POST', } } diff --git a/resources/headers/questionTypeJson.js b/resources/headers/questionTypeJson.js index 176c020..a123442 100644 --- a/resources/headers/questionTypeJson.js +++ b/resources/headers/questionTypeJson.js @@ -6,6 +6,6 @@ export function getQuestionTypesJson() { "variables": {}, "operationName": "questionTagTypeWithTags" }`, - method: 'POST' + method: 'POST', } } diff --git a/resources/headers/studyPlanListJson.js b/resources/headers/studyPlanListJson.js index ef910a7..c2b6854 100644 --- a/resources/headers/studyPlanListJson.js +++ b/resources/headers/studyPlanListJson.js @@ -2,6 +2,6 @@ export function getStudyPlanListJson() { return { headers: { 'content-type': 'application/json' }, body: '{"query":"\\n query GetProblemSetStudyPlanAds {\\n studyPlansV2AdQuestionPage {\\n cover\\n highlight\\n name\\n onGoing\\n premiumOnly\\n questionNum\\n slug\\n }\\n}\\n ","variables":{},"operationName":"GetProblemSetStudyPlanAds"}', - method: 'POST' + method: 'POST', } } diff --git a/scripts/create-color-font.js b/scripts/create-color-font.js index d464df3..6bc7c4e 100644 --- a/scripts/create-color-font.js +++ b/scripts/create-color-font.js @@ -5,8 +5,8 @@ const question = [ { type: 'input', name: 'font', - message: '请输入要渐变色的文本:' - } + message: '请输入要渐变色的文本:', + }, ] // 第一个问题 选择的模式 const { font } = await inquirer.prompt(question, null) diff --git a/scripts/release.js b/scripts/release.js index 0f81b06..61e7693 100644 --- a/scripts/release.js +++ b/scripts/release.js @@ -9,19 +9,21 @@ const __dirname = dirname(__filename) ;(async function () { // 自动更新版本 // version可以传递如 6.1.1 | patch | minor | major - const execCommand = (arr) => + const execCommand = arr => (Array.isArray(arr) ? arr : [arr]).forEach((c) => { try { console.log(`start: ${c}...`) console.log(child_process.execSync(c).toString('utf8')) - } catch (error) { + } + catch (error) { console.log('\x1B[31m%s\x1B[0m', error.stdout.toString()) process.exit(1) } }) const getNewVersion = (oldVersion, version = 'patch') => { // [ | major | minor | patch] - if (/^([0-9]+\.*)+$/.test(version)) return version + if (/^([0-9]+\.*)+$/.test(version)) + return version const types = ['major', 'minor', 'patch'] const index = types.indexOf(version) if (index >= 0) { @@ -32,21 +34,21 @@ const __dirname = dirname(__filename) return getNewVersion(oldVersion) } const newVersionObj = { - version: getNewVersion(packageJson.version, process.argv[2]) + version: getNewVersion(packageJson.version, process.argv[2]), } fs.writeFileSync( path.resolve(__dirname, '../package.json'), `${JSON.stringify( Object.assign({}, packageJson, newVersionObj), null, - 2 - )}\n` + 2, + )}\n`, ) console.log(newVersionObj) execCommand([ `git commit -a -m 'chore: update version cli-v${newVersionObj.version}'`, `git tag cli-v${newVersionObj.version}`, - 'git push && git push --tags' + 'git push && git push --tags', ]) console.log('\x1B[32m%s\x1B[0m', '发布完成,请关注github CI构建') })() diff --git a/scripts/update.js b/scripts/update.js index ba74ec6..a9d55b3 100644 --- a/scripts/update.js +++ b/scripts/update.js @@ -9,7 +9,7 @@ if (isGithubUpdate) { const checkQuestion = { type: 'confirm', name: 'willUpdate', - message: `是否进行更新?` + message: `是否进行更新?`, } const { willUpdate } = await inquirer.prompt(checkQuestion, null) if (willUpdate) { @@ -17,14 +17,16 @@ if (isGithubUpdate) { console.log('开始更新...') await updateProject() console.log('更新完成~祝你使用愉快~') - } else { + } + else { // 4.2 取消更新 console.log( - '你选择跳过此次更新,如果想要进行更新,随时可以使用参数 -u 进行更新检测!祝你使用愉快~' + '你选择跳过此次更新,如果想要进行更新,随时可以使用参数 -u 进行更新检测!祝你使用愉快~', ) } process.exit(0) -} else { +} +else { console.log('当前版本为最新版本~无需更新!') } process.exit(0) diff --git a/test/create.spec.js b/test/create.spec.js index da89d7e..f6932f8 100644 --- a/test/create.spec.js +++ b/test/create.spec.js @@ -5,12 +5,12 @@ import { generateTemplateContent } from '#common/utils/question-handler/fulfillQ vi.mock('fs/promises', () => { return { - writeFile: vi.fn() + writeFile: vi.fn(), } }) const funRegex = /var\s+(\w+)\s*=\s*function\s*\(([^)]*)\)\s*{\s*([^}]*)\s*}/ -const isContainJsCode = (input) => funRegex.test(input) -const isContainTestCase = (input) => input.includes('showLogs(') +const isContainJsCode = input => funRegex.test(input) +const isContainTestCase = input => input.includes('showLogs(') const mockKeys = ['id', 'slug', 'title', 'detail', 'lang', 'code', 'date'] diff --git a/test/paseDataStructure.spec.js b/test/paseDataStructure.spec.js index 5db2133..24298f9 100644 --- a/test/paseDataStructure.spec.js +++ b/test/paseDataStructure.spec.js @@ -94,7 +94,7 @@ it('获取入参的数据结构 单参 匹配值', () => { it('获取入参的数据结构 单参 ListNode[]', () => { expect(getDataStructure(mockJSDOC_ListNodeArray, 'param')).toEqual([ - 'ListNode[]' + 'ListNode[]', ]) }) it('获取返回值的数据结构 单参 匹配值', () => { diff --git a/test/tree.spec.js b/test/tree.spec.js index 63aad82..5802699 100644 --- a/test/tree.spec.js +++ b/test/tree.spec.js @@ -22,12 +22,12 @@ it('测试树 parse 特殊值', () => { }) it('测试树 parse mockTree', () => { expect(TreeNode.parse(mockTree)).toEqual( - new TreeNode(1, new TreeNode(2), new TreeNode(3)) + new TreeNode(1, new TreeNode(2), new TreeNode(3)), ) }) it('测试树 pase mockTree2', () => { expect(TreeNode.parse(mockTree2)).toEqual( - new TreeNode(1, null, new TreeNode(2)) + new TreeNode(1, null, new TreeNode(2)), ) }) it('测试树 pase mockTree3', () => { @@ -35,8 +35,8 @@ it('测试树 pase mockTree3', () => { new TreeNode( 3, new TreeNode(9, null), - new TreeNode(20, new TreeNode(15, null), new TreeNode(7)) - ) + new TreeNode(20, new TreeNode(15, null), new TreeNode(7)), + ), ) }) it('测试树 pase mockTree4', () => { From 1a6c978b3c68cde7e9792637d1394436190472e3 Mon Sep 17 00:00:00 2001 From: EternalHeart Date: Mon, 11 Mar 2024 21:13:34 +0800 Subject: [PATCH 014/111] chore: modify code --- .commitlintrc.cjs | 2 +- .eslintrc.js | 14 ++-- bin/lc.js | 9 +- bin/lf.js | 5 +- bin/lk.js | 16 ++-- common/structures/ListNode.js | 6 +- common/structures/Node.js | 6 +- common/structures/TreeNode.js | 9 +- common/utils/create-check/createUtil.js | 10 +-- common/utils/create-check/refer-mode.js | 6 +- common/utils/etc/createColorFont.js | 4 +- common/utils/etc/typeof_.js | 3 +- common/utils/file/getCountBySameName.js | 2 +- common/utils/file/getFileListBySameName.js | 2 +- common/utils/file/getFilePathById.js | 5 +- common/utils/file/getRootPath.js | 4 +- common/utils/functions/isSameData.js | 11 +-- common/utils/functions/sizeUtil.js | 15 ++-- common/utils/http/fetch_.js | 2 +- .../question-getter/getPlanQuestionList.js | 2 +- .../utils/question-getter/getQuestionById.js | 4 +- .../question-getter/getQuestionRandom.js | 2 +- .../utils/question-getter/getStudyPlanList.js | 2 +- .../utils/question-handler/checkQuestion.js | 4 +- common/utils/question-handler/code.js | 13 ++- .../utils/question-handler/createQuestion.js | 14 ++-- .../question-handler/createQuestionCopy.js | 2 +- .../utils/question-handler/fulfillQuestion.js | 3 +- .../getHot100QuestionListCode.js | 6 +- .../question-handler/getQuestionDetail.js | 2 +- .../question-handler/getQuestionFileName.js | 3 +- .../question-handler/getQuestionIdBySlug.js | 8 +- common/utils/question-handler/getRandomId.js | 21 ++--- common/utils/question-handler/getTestCase.js | 22 +++-- .../utils/question-handler/parseStructure.js | 24 +++--- .../question-handler/questionLanguage.js | 82 +++++++++---------- common/utils/question-handler/showLogs.js | 20 ++--- common/utils/store/controller/store.js | 3 +- common/utils/store/schemas/question.js | 4 +- common/utils/store/schemas/store.js | 4 +- common/utils/store/store-realm.js | 10 +-- common/utils/update/update.js | 25 +++--- common/utils/update/updateByEnv.js | 15 ++-- common/view/check.view.js | 26 +++--- common/view/create.view.js | 24 +++--- common/view/finder.view.js | 35 ++++---- common/view/language.view.js | 8 +- common/view/update.view.js | 16 ++-- esbuild.config.js | 23 +++--- eslint.config.js | 4 +- package.json | 6 +- resources/headers/codeSubmitJson.js | 2 +- resources/headers/planQuestionListJson.js | 2 +- resources/headers/questionCodeListJson.js | 2 +- resources/headers/questionDetailJson.js | 2 +- resources/headers/questionLanguageListJson.js | 2 +- resources/headers/questionListJson.js | 2 +- resources/headers/questionSearchJson.js | 2 +- resources/headers/questionTodayJson.js | 2 +- resources/headers/questionTypeJson.js | 2 +- resources/headers/studyPlanListJson.js | 2 +- scripts/create-color-font.js | 4 +- scripts/release.js | 16 ++-- scripts/update.js | 10 +-- test/create.spec.js | 6 +- test/paseDataStructure.spec.js | 2 +- test/tree.spec.js | 8 +- 67 files changed, 289 insertions(+), 345 deletions(-) diff --git a/.commitlintrc.cjs b/.commitlintrc.cjs index 98ee7df..a4f4369 100644 --- a/.commitlintrc.cjs +++ b/.commitlintrc.cjs @@ -1,3 +1,3 @@ module.exports = { - extends: ['@commitlint/config-conventional'], + extends: ['@commitlint/config-conventional'] } diff --git a/.eslintrc.js b/.eslintrc.js index 107e222..97c5221 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -2,22 +2,22 @@ module.exports = { env: { browser: true, commonjs: true, - es2021: true, + es2021: true }, extends: '@antfu', overrides: [ { env: { - node: true, + node: true }, files: ['.eslintrc.{js,cjs}'], parserOptions: { - sourceType: 'script', - }, - }, + sourceType: 'script' + } + } ], parserOptions: { - ecmaVersion: 'latest', + ecmaVersion: 'latest' }, - rules: {}, + rules: {} } diff --git a/bin/lc.js b/bin/lc.js index 89ffd67..0f8567e 100755 --- a/bin/lc.js +++ b/bin/lc.js @@ -19,7 +19,7 @@ import { easyLanguageView } from '#common/view/language.view.js' import { DefaultVer } from '#common/constants/question.const.js' import { create, - createQuestionById, + createQuestionById } from '#common/utils/create-check/createUtil.js' const version = process.env.VERSION ?? DefaultVer @@ -36,7 +36,7 @@ program .option('-l, --language [language]', 'Set/Get the code language of question.') .option( '-u, --update', - 'Check the version to determine whether to update to the latest one.', + 'Check the version to determine whether to update to the latest one.' ) .parse(process.argv) @@ -56,8 +56,7 @@ const cmdOpts = program.opts() if (cmdOpts.language) { if (cmdOpts.language !== true) { await easyLanguageView(cmdOpts.language) - } - else { + } else { const lang = await getQuestionLanguage() console.log(`当前CLI语言环境为:${lang}`) } @@ -97,7 +96,7 @@ export const callModeAction = { identity: async (id) => { await createQuestionById(id, baseDir) process.exit(0) - }, + } } // 获取模式和参数 const mode = referMode(cmdArgs, cmdOpts) diff --git a/bin/lf.js b/bin/lf.js index 9bbf671..4828527 100755 --- a/bin/lf.js +++ b/bin/lf.js @@ -21,7 +21,7 @@ program .option('-d, --directory ', 'Set the question directory.') .option( '-u, --update', - 'Check the version to determine whether to update to the latest one.', + 'Check the version to determine whether to update to the latest one.' ) .parse(process.argv) @@ -36,8 +36,7 @@ const cmdOpts = program.opts() if (cmdOpts.language) { if (cmdOpts.language !== true) { await easyLanguageView(cmdOpts.language) - } - else { + } else { const lang = await getQuestionLanguage() console.log(`当前CLI语言环境为:${lang}`) } diff --git a/bin/lk.js b/bin/lk.js index 9f44791..8df5aa6 100755 --- a/bin/lk.js +++ b/bin/lk.js @@ -28,7 +28,7 @@ program .option('-t, --today', 'Check the question today.') .option( '-i, --identity ', - 'Check the specified question by identity.', + 'Check the specified question by identity.' ) .option('-r, --random', 'Check the last random question.') .option('-e, --easy', 'Use easy mode.') @@ -36,7 +36,7 @@ program .option('-l, --language [language]', 'Set/Get the code language of question.') .option( '-u, --update', - 'Check the version to determine whether to update to the latest one.', + 'Check the version to determine whether to update to the latest one.' ) .parse(process.argv) @@ -61,8 +61,7 @@ const args = getArgs(mode, cmdArgs, cmdOpts) if (cmdOpts.language) { if (cmdOpts.language !== true) { await easyLanguageView(cmdOpts.language) - } - else { + } else { const lang = await getQuestionLanguage() console.log(`当前CLI语言环境为:${lang}`) } @@ -90,14 +89,13 @@ async function check(mode, question) { const filePath = path.join( baseDir, getQuestionFileName(question), - `question${getQuestionFileExtension(question?.lang)}`, + `question${getQuestionFileExtension(question?.lang)}` ) if (!fs.existsSync(filePath)) { console.log(`文件[${filePath}]不存在,请确保已经创建!`) - } - else { + } else { console.log( - `MODE: ${mode}\n题目[${getQuestionChineseName(question)}]检测结果:`, + `MODE: ${mode}\n题目[${getQuestionChineseName(question)}]检测结果:` ) await checkQuestion(filePath) } @@ -121,7 +119,7 @@ const callModeAction = { : await getQuestionById(id) await check('identity', question) process.exit(0) - }, + } } // 执行指令分发 diff --git a/common/structures/ListNode.js b/common/structures/ListNode.js index 0d236d0..bd57e2d 100644 --- a/common/structures/ListNode.js +++ b/common/structures/ListNode.js @@ -12,8 +12,7 @@ export class ListNode { } static parse(arr) { - if (arr.length === 0) - return null // Return null for an empty array + if (arr.length === 0) return null // Return null for an empty array const head = new ListNode(arr.shift(), null) let current = head @@ -25,8 +24,7 @@ export class ListNode { } static toArray(listNodes, arr = []) { - if (listNodes === undefined || listNodes === null) - return arr + if (listNodes === undefined || listNodes === null) return arr arr.push(listNodes.val) return ListNode.toArray(listNodes.next, arr) diff --git a/common/structures/Node.js b/common/structures/Node.js index f453afa..071020c 100644 --- a/common/structures/Node.js +++ b/common/structures/Node.js @@ -30,15 +30,13 @@ export class Node { } static toArray(node) { - if (!node) - return [] + if (!node) return [] const visited = new Set() const result = [] const dfs = (currentNode) => { - if (visited.has(currentNode.val)) - return + if (visited.has(currentNode.val)) return const { neighbors, val } = currentNode visited.add(val) diff --git a/common/structures/TreeNode.js b/common/structures/TreeNode.js index 11be2f1..90c4146 100644 --- a/common/structures/TreeNode.js +++ b/common/structures/TreeNode.js @@ -7,8 +7,7 @@ export class TreeNode { } static parse(arr) { - if (arr.length === 0) - return null + if (arr.length === 0) return null const root = new TreeNode(arr[0]) const queue = [root] for (let i = 1; i < arr.length; i += 2) { @@ -27,8 +26,7 @@ export class TreeNode { static toArray(treeNode) { const result = [] - if (!treeNode) - return result + if (!treeNode) return result const queue = [treeNode] @@ -38,8 +36,7 @@ export class TreeNode { result.push(node.val) queue.push(node.left) queue.push(node.right) - } - else { + } else { result.push(null) } } diff --git a/common/utils/create-check/createUtil.js b/common/utils/create-check/createUtil.js index d7086ab..3322dd6 100644 --- a/common/utils/create-check/createUtil.js +++ b/common/utils/create-check/createUtil.js @@ -14,11 +14,10 @@ export function create(mode, question, baseDir) { setQuestion(mode, question) const questionDir = path.join(baseDir, getQuestionFileName(question)) createQuestion(question, questionDir).then(async (path) => { - if (!path) - path = await createQuestionCopy(question, questionDir) + if (!path) path = await createQuestionCopy(question, questionDir) const line = (await getLineNumberByContent(path, '@QUESTION_START')) + 1 console.log( - `题目[${getQuestionChineseName(question)}]获取成功!\n题目文件地址为:file://${path}:${line}`, + `题目[${getQuestionChineseName(question)}]获取成功!\n题目文件地址为:file://${path}:${line}` ) resolve(true) }) @@ -27,7 +26,7 @@ export function create(mode, question, baseDir) { export async function createQuestionByTitleSlug( titleSlug, - baseDir = process.cwd(), + baseDir = process.cwd() ) { const { question } = await getQuestionIdBySlug(titleSlug) @@ -35,7 +34,6 @@ export async function createQuestionByTitleSlug( } export async function createQuestionById(id, baseDir = process.cwd()) { const question = await getQuestionById(id) - if (!question?.id) - console.log(`指定编号: [ ${id} ] 题目不存在.`) + if (!question?.id) console.log(`指定编号: [ ${id} ] 题目不存在.`) await create('identity', question, baseDir) } diff --git a/common/utils/create-check/refer-mode.js b/common/utils/create-check/refer-mode.js index c3a7930..42ff1f8 100644 --- a/common/utils/create-check/refer-mode.js +++ b/common/utils/create-check/refer-mode.js @@ -1,10 +1,8 @@ // 推测模式 export function referMode(args, opts) { - if (args.length > 0 || opts.identity) - return 'identity' + if (args.length > 0 || opts.identity) return 'identity' - if (opts.random) - return 'random' + if (opts.random) return 'random' return 'today' } diff --git a/common/utils/etc/createColorFont.js b/common/utils/etc/createColorFont.js index e806d71..cd5eb60 100644 --- a/common/utils/etc/createColorFont.js +++ b/common/utils/etc/createColorFont.js @@ -7,11 +7,11 @@ export function createColorFont(font) { const code = gradient_string([ { color: '#ff0000', pos: 0 }, { color: '#ffc600', pos: 0.5 }, - { color: '#003dff', pos: 1 }, + { color: '#003dff', pos: 1 } ])(font) writeFileSync(path.resolve(process.cwd(), 'colorFont.js'), code) console.log( - `[ColorFont]Create color font: ${font}\ncode location:${path.resolve(process.cwd(), 'colorFont.js')}`, + `[ColorFont]Create color font: ${font}\ncode location:${path.resolve(process.cwd(), 'colorFont.js')}` ) console.log(code) } diff --git a/common/utils/etc/typeof_.js b/common/utils/etc/typeof_.js index 914278b..8d8458a 100644 --- a/common/utils/etc/typeof_.js +++ b/common/utils/etc/typeof_.js @@ -5,7 +5,6 @@ * @private */ export function typeof_(data) { - if (data === null) - return 'null' + if (data === null) return 'null' else return typeof data } diff --git a/common/utils/file/getCountBySameName.js b/common/utils/file/getCountBySameName.js index 71d94e9..7966377 100644 --- a/common/utils/file/getCountBySameName.js +++ b/common/utils/file/getCountBySameName.js @@ -7,5 +7,5 @@ import { readdirSync } from 'node:fs' * @returns {number} */ export function getCountBySameName(dir, name) { - return readdirSync(dir).filter(filename => filename.includes(name)).length + return readdirSync(dir).filter((filename) => filename.includes(name)).length } diff --git a/common/utils/file/getFileListBySameName.js b/common/utils/file/getFileListBySameName.js index b8c66b1..e0cbcb0 100644 --- a/common/utils/file/getFileListBySameName.js +++ b/common/utils/file/getFileListBySameName.js @@ -1,5 +1,5 @@ import { readdirSync } from 'node:fs' export function getFileListBySameName(dir, name) { - return readdirSync(dir).filter(filename => filename.includes(name)) + return readdirSync(dir).filter((filename) => filename.includes(name)) } diff --git a/common/utils/file/getFilePathById.js b/common/utils/file/getFilePathById.js index dbaa569..a54e68a 100644 --- a/common/utils/file/getFilePathById.js +++ b/common/utils/file/getFilePathById.js @@ -8,8 +8,7 @@ import fs from 'node:fs' */ export function getFilePathById(id, baseDir = process.cwd()) { const dir = fs.readdirSync(baseDir) - const files = dir.filter(o => o.startsWith(`${id}.`)) - if (files.length > 1) - return files + const files = dir.filter((o) => o.startsWith(`${id}.`)) + if (files.length > 1) return files return files?.[0] } diff --git a/common/utils/file/getRootPath.js b/common/utils/file/getRootPath.js index b0502e7..0971a80 100644 --- a/common/utils/file/getRootPath.js +++ b/common/utils/file/getRootPath.js @@ -3,7 +3,7 @@ import { __dirname } from '#common/utils/file/getDirname.js' import { currentEnv } from '#common/utils/etc/checkEnv.js' // 在cli环境下 执行目录为 bin 目录 根目录就是上一层目录 -export const rootPath - = currentEnv() === 'project' +export const rootPath = + currentEnv() === 'project' ? path.dirname(path.dirname(path.dirname(__dirname))) : path.dirname(__dirname) diff --git a/common/utils/functions/isSameData.js b/common/utils/functions/isSameData.js index ae2b78d..b313fc6 100644 --- a/common/utils/functions/isSameData.js +++ b/common/utils/functions/isSameData.js @@ -7,8 +7,7 @@ export function isSameData(a, b) { const typeA = typeof a const typeB = typeof b - if (typeA !== typeB) - return false + if (typeA !== typeB) return false switch (typeA) { case 'bigint': case 'boolean': @@ -20,14 +19,12 @@ export function isSameData(a, b) { case 'function': return a.toString() === b.toString() case 'object': { - if (a === null || a === undefined) - return a === b + if (a === null || a === undefined) return a === b const keysA = Object.keys(a) const keysB = Object.keys(b) - if (keysA.length !== keysB.length) - return false - return keysA.every(key => isSameData(a[key], b[key])) + if (keysA.length !== keysB.length) return false + return keysA.every((key) => isSameData(a[key], b[key])) } } } diff --git a/common/utils/functions/sizeUtil.js b/common/utils/functions/sizeUtil.js index b7867a8..72de534 100644 --- a/common/utils/functions/sizeUtil.js +++ b/common/utils/functions/sizeUtil.js @@ -15,16 +15,11 @@ export const PB = 1024 * GB * @return {size: number, label: string} */ export function getFileSizeUnit(size) { - if (size < KB) - return { size: 1, label: 'B' } - if (size < MB) - return { size: KB, label: 'KB' } - if (size < GB) - return { size: MB, label: 'MB' } - if (size < TB) - return { size: GB, label: 'GB' } - if (size < PB) - return { size: TB, label: 'TB' } + if (size < KB) return { size: 1, label: 'B' } + if (size < MB) return { size: KB, label: 'KB' } + if (size < GB) return { size: MB, label: 'MB' } + if (size < TB) return { size: GB, label: 'GB' } + if (size < PB) return { size: TB, label: 'TB' } return { size: PB, label: 'PB' } } diff --git a/common/utils/http/fetch_.js b/common/utils/http/fetch_.js index 8e07f42..0e6f65b 100644 --- a/common/utils/http/fetch_.js +++ b/common/utils/http/fetch_.js @@ -6,5 +6,5 @@ * @private */ export async function fetch_(url, options) { - return await fetch(url, options).then(res => res.json()) + return await fetch(url, options).then((res) => res.json()) } diff --git a/common/utils/question-getter/getPlanQuestionList.js b/common/utils/question-getter/getPlanQuestionList.js index 784183d..0b5e54f 100644 --- a/common/utils/question-getter/getPlanQuestionList.js +++ b/common/utils/question-getter/getPlanQuestionList.js @@ -4,7 +4,7 @@ import { getPlanQuestionListJson } from '#resources/headers/planQuestionListJson export async function getPlanQuestionList(slug) { const res = await graphql(getPlanQuestionListJson(slug)) const { - data: { studyPlanV2Detail }, + data: { studyPlanV2Detail } } = res return studyPlanV2Detail } diff --git a/common/utils/question-getter/getQuestionById.js b/common/utils/question-getter/getQuestionById.js index 512db01..4331553 100644 --- a/common/utils/question-getter/getQuestionById.js +++ b/common/utils/question-getter/getQuestionById.js @@ -5,11 +5,11 @@ import { graphql } from '#common/utils/http/graphql.js' export async function getQuestionById(id) { const base = await graphql(getQuestionSearchJson(id.toString())) const questionContent = base?.data?.problemsetQuestionList?.questions?.find( - o => o?.frontendQuestionId === id.toString(), + (o) => o?.frontendQuestionId === id.toString() ) if (!questionContent) { return { - id: null, + id: null } } const slug = questionContent.titleSlug diff --git a/common/utils/question-getter/getQuestionRandom.js b/common/utils/question-getter/getQuestionRandom.js index 28f28c0..a06154c 100644 --- a/common/utils/question-getter/getQuestionRandom.js +++ b/common/utils/question-getter/getQuestionRandom.js @@ -7,7 +7,7 @@ export async function getQuestionRandom() { const id = await getRandomId() const base = await graphql(getQuestionSearchJson(id.toString())) const slug = base.data.problemsetQuestionList.questions.find( - o => o.frontendQuestionId === id.toString(), + (o) => o.frontendQuestionId === id.toString() ).titleSlug const question = await getQuestionDetail(slug) return question diff --git a/common/utils/question-getter/getStudyPlanList.js b/common/utils/question-getter/getStudyPlanList.js index 2b8d8db..e1cc5fd 100644 --- a/common/utils/question-getter/getStudyPlanList.js +++ b/common/utils/question-getter/getStudyPlanList.js @@ -4,7 +4,7 @@ import { getStudyPlanListJson } from '#resources/headers/studyPlanListJson.js' export async function getStudyPlanList() { const res = await graphql(getStudyPlanListJson()) const { - data: { studyPlansV2AdQuestionPage }, + data: { studyPlansV2AdQuestionPage } } = res return studyPlansV2AdQuestionPage } diff --git a/common/utils/question-handler/checkQuestion.js b/common/utils/question-handler/checkQuestion.js index ce9e772..43f5393 100644 --- a/common/utils/question-handler/checkQuestion.js +++ b/common/utils/question-handler/checkQuestion.js @@ -23,7 +23,7 @@ export async function checkQuestion(path) { path, vm.createContext({ showLogs, - console, - }), + console + }) ) } diff --git a/common/utils/question-handler/code.js b/common/utils/question-handler/code.js index a0c7130..04469a8 100644 --- a/common/utils/question-handler/code.js +++ b/common/utils/question-handler/code.js @@ -2,7 +2,7 @@ import fs from 'node:fs' import { getQuestionCodeList } from '#common/utils/question-getter/getQuestionCodeList.js' import { getLangByExtension, - setLineComment, + setLineComment } from '#common/utils/question-handler/questionLanguage.js' import { DefaultLang } from '#common/constants/question.const.js' @@ -14,7 +14,7 @@ import { DefaultLang } from '#common/constants/question.const.js' */ export async function getCodeBySlug(slug, lang) { const list = await getQuestionCodeList(slug) - return list.find(o => o.langSlug === lang)?.code + return list.find((o) => o.langSlug === lang)?.code } /** * 获取支持的代码语言 @@ -23,7 +23,7 @@ export async function getCodeBySlug(slug, lang) { */ export async function getSupportCode(slug) { const list = await getQuestionCodeList(slug) - return list.map(code => code?.langSlug) + return list.map((code) => code?.langSlug) } /** @@ -36,12 +36,12 @@ export function getCodeRange(lang, code) { if (!code) { return setLineComment( lang, - `!important: 此题目没有当前语言[${lang}]的代码模板!`, + `!important: 此题目没有当前语言[${lang}]的代码模板!` ) } return `${setLineComment(lang, '@QUESTION_START') + code}\n${setLineComment( lang, - '@QUESTION_END', + '@QUESTION_END' )}` } /** @@ -55,7 +55,6 @@ export function getCodeInFile(filePath) { const rangeReg = new RegExp(`${startTag}.*${endTag}`, 'ms') const rangeTagReg = new RegExp(`(${startTag}|${endTag})+`, 'mg') const match = data.match(rangeReg) - if (!match) - return null + if (!match) return null return match[0]?.replace(rangeTagReg, '') } diff --git a/common/utils/question-handler/createQuestion.js b/common/utils/question-handler/createQuestion.js index eac42ef..c8d7fb9 100644 --- a/common/utils/question-handler/createQuestion.js +++ b/common/utils/question-handler/createQuestion.js @@ -15,15 +15,14 @@ export function createQuestion(question, questionDir) { const filePath = path.normalize( path.join( questionDir, - `question${getQuestionFileExtension(question.lang)}`, - ), + `question${getQuestionFileExtension(question.lang)}` + ) ) if (fs.existsSync(filePath)) { resolve(false) - } - else { + } else { createQuestionFile(questionDir, filePath, question) - .then(path => resolve(path)) + .then((path) => resolve(path)) .catch(() => resolve(false)) } }) @@ -38,13 +37,12 @@ export function createQuestionFile(questionDir, questionFilePath, question) { if (!question.code) { const supports = await getSupportCode(question.slug) console.warn( - `此题目不支持当前语言[${question.lang}]!受支持的语言有[${supports.join(',')}]!`, + `此题目不支持当前语言[${question.lang}]!受支持的语言有[${supports.join(',')}]!` ) } resolve(questionFilePath) }) - } - catch (e) { + } catch (e) { reject(e) } }) diff --git a/common/utils/question-handler/createQuestionCopy.js b/common/utils/question-handler/createQuestionCopy.js index 76a65ce..8720c9e 100644 --- a/common/utils/question-handler/createQuestionCopy.js +++ b/common/utils/question-handler/createQuestionCopy.js @@ -19,7 +19,7 @@ export function createQuestionCopy(question, questionDir) { const copyFileDir = path.join(dir, `${name}${affix}`) const copyFilePath = path.join( copyFileDir, - `question${getQuestionFileExtension(question.lang)}`, + `question${getQuestionFileExtension(question.lang)}` ) return createQuestionFile(copyFileDir, copyFilePath, question) } diff --git a/common/utils/question-handler/fulfillQuestion.js b/common/utils/question-handler/fulfillQuestion.js index 745d84e..830890b 100644 --- a/common/utils/question-handler/fulfillQuestion.js +++ b/common/utils/question-handler/fulfillQuestion.js @@ -52,8 +52,7 @@ export function fulfillQuestion(questionPath, question) { const newData = generateTemplateContent(question) // 创建文件 fs.writeFile(questionPath, newData, (err) => { - if (err) - throw err + if (err) throw err resolve() }) }) diff --git a/common/utils/question-handler/getHot100QuestionListCode.js b/common/utils/question-handler/getHot100QuestionListCode.js index 1f47ad0..d3a6d8b 100644 --- a/common/utils/question-handler/getHot100QuestionListCode.js +++ b/common/utils/question-handler/getHot100QuestionListCode.js @@ -7,7 +7,7 @@ export async function getTitleSlugList() { const res = await getPlanQuestionList() const { planSubGroups } = res return planSubGroups.reduce((acc, cur) => { - acc.push(...cur.questions.map(res => res.titleSlug)) + acc.push(...cur.questions.map((res) => res.titleSlug)) return acc }, []) } @@ -15,8 +15,8 @@ export async function getTitleSlugList() { async function getPromiseList() { const titleSlugList = await getTitleSlugList() const dir = path.join(process.cwd(), 'hot100') - return titleSlugList.map(titleSlug => - createQuestionByTitleSlug(titleSlug, dir), + return titleSlugList.map((titleSlug) => + createQuestionByTitleSlug(titleSlug, dir) ) } diff --git a/common/utils/question-handler/getQuestionDetail.js b/common/utils/question-handler/getQuestionDetail.js index 4915e17..4a4883e 100644 --- a/common/utils/question-handler/getQuestionDetail.js +++ b/common/utils/question-handler/getQuestionDetail.js @@ -22,6 +22,6 @@ export async function getQuestionDetail(slug, extra = {}) { detail: detail?.translatedContent, lang: curLang, code, - ...extra, + ...extra } } diff --git a/common/utils/question-handler/getQuestionFileName.js b/common/utils/question-handler/getQuestionFileName.js index 4ccffbc..882ae44 100644 --- a/common/utils/question-handler/getQuestionFileName.js +++ b/common/utils/question-handler/getQuestionFileName.js @@ -4,7 +4,6 @@ * @returns {string} */ export function getQuestionFileName(question) { - if (!question || !question?.id) - return '' + if (!question || !question?.id) return '' return `${question.id}.${question.slug}` } diff --git a/common/utils/question-handler/getQuestionIdBySlug.js b/common/utils/question-handler/getQuestionIdBySlug.js index 0689e9d..d61f0da 100644 --- a/common/utils/question-handler/getQuestionIdBySlug.js +++ b/common/utils/question-handler/getQuestionIdBySlug.js @@ -1,7 +1,7 @@ import { graphql } from '#common/utils/http/graphql.js' const headers = { - 'content-type': 'application/json', + 'content-type': 'application/json' } export async function getQuestionIdBySlug(titleSlug) { @@ -9,14 +9,14 @@ export async function getQuestionIdBySlug(titleSlug) { query: '\n query questionTitle($titleSlug: String!) {\n question(titleSlug: $titleSlug) {\n questionId\n questionFrontendId\n title\n titleSlug\n isPaidOnly\n difficulty\n likes\n dislikes\n categoryTitle\n }\n}\n ', variables: { - titleSlug, + titleSlug }, - operationName: 'questionTitle', + operationName: 'questionTitle' } const initJson = { headers, body: JSON.stringify(body), - method: 'POST', + method: 'POST' } const res = await graphql(initJson) const { data: question } = res diff --git a/common/utils/question-handler/getRandomId.js b/common/utils/question-handler/getRandomId.js index ffd2244..0c6b3f1 100644 --- a/common/utils/question-handler/getRandomId.js +++ b/common/utils/question-handler/getRandomId.js @@ -9,7 +9,7 @@ import { DefaultLimit } from '#common/constants/question.const.js' export async function getIds(index, limit = DefaultLimit) { const res = await graphql(getQuestionListJson(index, limit)) return res?.data?.problemsetQuestionList?.questions?.map( - q => q.frontendQuestionId, + (q) => q.frontendQuestionId ) } /** @@ -18,7 +18,7 @@ export async function getIds(index, limit = DefaultLimit) { */ export function getCount() { return graphql(getQuestionListJson(0)).then( - res => res?.data?.problemsetQuestionList?.total, + (res) => res?.data?.problemsetQuestionList?.total ) } /** @@ -26,20 +26,18 @@ export function getCount() { */ export async function getRandomId() { // 去除所有的标题 剩下的就是id - const parse = name => name.replace(/\.[a-zA-Z0-9-]+$/i, '') + const parse = (name) => name.replace(/\.[a-zA-Z0-9-]+$/i, '') // 获取一个 递归的获取 总会有一个 直到数量到达最大值 const getOne = async (waitIndexList, localIds) => { const randomIndex = waitIndexList[random(waitIndexList.length)] const ids = await getIds(randomIndex) // 过滤后的结果 - const filtered = ids.filter(o => !localIds.includes(o)) - if (randomIndex === undefined) - return null + const filtered = ids.filter((o) => !localIds.includes(o)) + if (randomIndex === undefined) return null if (filtered.length) { return filtered[random(filtered.length)] - } - else { - waitIndexList.splice(waitIndexList.findIndex(i => i === randomIndex)) + } else { + waitIndexList.splice(waitIndexList.findIndex((i) => i === randomIndex)) return await getOne(waitIndexList, localIds) } } @@ -48,11 +46,10 @@ export async function getRandomId() { // 最大的数量 const maxLength = await getCount() const waitIndexList = Array.from({ - length: Math.ceil(maxLength / DefaultLimit), + length: Math.ceil(maxLength / DefaultLimit) }).map((_, i) => i) const one = await getOne(waitIndexList, allLocalIds) - if (one === null) - console.log('恭喜!你已经刷完了所有的题目!') + if (one === null) console.log('恭喜!你已经刷完了所有的题目!') else return one } /** diff --git a/common/utils/question-handler/getTestCase.js b/common/utils/question-handler/getTestCase.js index 96cc363..2862f73 100644 --- a/common/utils/question-handler/getTestCase.js +++ b/common/utils/question-handler/getTestCase.js @@ -54,37 +54,35 @@ export function getTestCase(question) { const detail = question.detail.replaceAll('`', '') const cases = detail.match(inputReg)?.map( - str => + (str) => `[${removeDomTags( str ?.replace(inputStartReg, '') ?.replace(endReg, '') ?.replace('\n', '') - .replace(/[a-zA-Z]+ =/g, ''), - )}]`, + .replace(/[a-zA-Z]+ =/g, '') + )}]` ) - const expires = detail.match(outputReg)?.map(str => + const expires = detail.match(outputReg)?.map((str) => removeDomTags( str ?.replace(outputStartReg, '') ?.replace(endReg, '') ?.replace('\n', '') - .replace(/[a-zA-Z]+ =/g, ''), - ), + .replace(/[a-zA-Z]+ =/g, '') + ) ) if (question.lang === DefaultLang) { const functionName = question.code ?.match(/(var|let|const).+=/g)?.[0] ?.replace(/((var|let|const)|=)\s?/gm, '') .trim() - if (!functionName) - return '' + if (!functionName) return '' return ( - setBlockComment(question.lang, 'Test Cases') - + logsTemplate(question, functionName, cases, expires) + setBlockComment(question.lang, 'Test Cases') + + logsTemplate(question, functionName, cases, expires) ) - } - else { + } else { // 其他语言无法支持测试 只能提供测试数据 // 生成注释语句 let showText = `暂无法支持除JS外的语言测试,提取的一些入参和返回值供自行测试,每一个case中的第一行为入参,第二行为返回值\n` diff --git a/common/utils/question-handler/parseStructure.js b/common/utils/question-handler/parseStructure.js index 8b816d9..1ed941a 100644 --- a/common/utils/question-handler/parseStructure.js +++ b/common/utils/question-handler/parseStructure.js @@ -5,20 +5,20 @@ import { ListNode } from '#common/structures/ListNode.js' const paramMap = { // 入参map cases: { - 'ListNode': _param => ListNode.parse(_param), - 'ListNode[]': param => param.map(res => ListNode.parse(res)), - 'TreeNode': param => TreeNode.parse(param), - 'Node': param => Node.parse(param), - 'default': param => param, + ListNode: (_param) => ListNode.parse(_param), + 'ListNode[]': (param) => param.map((res) => ListNode.parse(res)), + TreeNode: (param) => TreeNode.parse(param), + Node: (param) => Node.parse(param), + default: (param) => param }, // 返回值map return: { - 'ListNode': param => ListNode.toArray(param), - 'ListNode[]': param => param.map(res => ListNode.toArray(res)), - 'TreeNode': param => TreeNode.toArray(param), - 'Node': param => Node.toArray(param), - 'default': param => param, - }, + ListNode: (param) => ListNode.toArray(param), + 'ListNode[]': (param) => param.map((res) => ListNode.toArray(res)), + TreeNode: (param) => TreeNode.toArray(param), + Node: (param) => Node.toArray(param), + default: (param) => param + } } /** * @@ -43,7 +43,7 @@ export function setDataStructure(params, structs, type = 'cases') { export function getDataStructure(code, type = 'param') { const regexMap = { param: /@param\s+{\s*([^}\s]+)\s*}/g, - return: /@return\s+{\s*([^}\s]+)\s*}/g, + return: /@return\s+{\s*([^}\s]+)\s*}/g } const regex = regexMap[type] const paramTypes = [] diff --git a/common/utils/question-handler/questionLanguage.js b/common/utils/question-handler/questionLanguage.js index e1cec38..ca4bc22 100644 --- a/common/utils/question-handler/questionLanguage.js +++ b/common/utils/question-handler/questionLanguage.js @@ -11,204 +11,204 @@ export const LANGUAGES = [ name: 'cpp', extension: '.cpp', blockComment: '/*\n*\n*/', // 块级注释 使用换行符来分割 - lineComment: '//', // 行级注释 不需要分割 + lineComment: '//' // 行级注释 不需要分割 }, { id: 1, name: 'java', extension: '.java', blockComment: '/*\n*\n*/', - lineComment: '//', + lineComment: '//' }, { id: 2, name: 'python', extension: '.py', - blockComment: '\'\'\'\n\n\'\'\'', - lineComment: '#', + blockComment: "'''\n\n'''", + lineComment: '#' }, { id: 11, name: 'python3', extension: '.py', - blockComment: '\'\'\'\n\n\'\'\'', - lineComment: '#', + blockComment: "'''\n\n'''", + lineComment: '#' }, { id: 3, name: 'mysql', extension: '.sql', blockComment: '/*\n*\n*/', - lineComment: '--', + lineComment: '--' }, { id: 14, name: 'mssql', extension: '.sql', blockComment: '/*\n*\n*/', - lineComment: '--', + lineComment: '--' }, { id: 15, name: 'oraclesql', extension: '.sql', blockComment: '/*\n*\n*/', - lineComment: '--', + lineComment: '--' }, { id: 4, name: 'c', extension: '.c', blockComment: '/*\n*\n*/', - lineComment: '//', + lineComment: '//' }, { id: 5, name: 'csharp', extension: '.cs', blockComment: '/*\n*\n*/', - lineComment: '//', + lineComment: '//' }, { id: 6, name: 'javascript', extension: '.js', blockComment: '/*\n*\n*/', - lineComment: '//', + lineComment: '//' }, { id: 20, name: 'typescript', extension: '.ts', blockComment: '/*\n*\n*/', - lineComment: '//', + lineComment: '//' }, { id: 8, name: 'bash', extension: '.sh', - blockComment: '\'\'\'\n\n\'\'\'', - lineComment: '#', + blockComment: "'''\n\n'''", + lineComment: '#' }, { id: 19, name: 'php', extension: '.php', blockComment: '/*\n*\n*/', - lineComment: '//', + lineComment: '//' }, { id: 9, name: 'swift', extension: '.swift', blockComment: '/*\n*\n*/', - lineComment: '//', + lineComment: '//' }, { id: 13, name: 'kotlin', extension: '.kt', blockComment: '/*\n*\n*/', - lineComment: '//', + lineComment: '//' }, { id: 24, name: 'dart', extension: '.dart', blockComment: '/*\n*\n*/', - lineComment: '//', + lineComment: '//' }, { id: 10, name: 'golang', extension: '.go', blockComment: '/*\n*\n*/', - lineComment: '//', + lineComment: '//' }, { id: 7, name: 'ruby', extension: '.rb', blockComment: '=begin\n\n=end', - lineComment: '#', + lineComment: '#' }, { id: 12, name: 'scala', extension: '.scala', blockComment: '/*\n*\n*/', - lineComment: '//', + lineComment: '//' }, { id: 16, name: 'html', extension: '.html', blockComment: '', - lineComment: '', + lineComment: '' }, { id: 17, name: 'pythonml', extension: '.py', - blockComment: '\'\'\'\n\n\'\'\'', - lineComment: '#', + blockComment: "'''\n\n'''", + lineComment: '#' }, { id: 18, name: 'rust', extension: '.rs', blockComment: '/*\n*\n*/', - lineComment: '//', + lineComment: '//' }, { id: 21, name: 'racket', extension: '.rkt', blockComment: ';;\n\n;;', - lineComment: '', + lineComment: '' }, { id: 22, name: 'erlang', extension: '.erl', blockComment: '%%\n\n%%', - lineComment: '', + lineComment: '' }, { id: 23, name: 'elixir', extension: '.ex', blockComment: '#\n#\n#', - lineComment: '', + lineComment: '' }, { id: 25, name: 'pythondata', extension: '.py', - blockComment: '\'\'\'\n\n\'\'\'', - lineComment: '#', + blockComment: "'''\n\n'''", + lineComment: '#' }, { id: 26, name: 'react', extension: '.jsx', blockComment: '/*\n*\n*/', - lineComment: '//', + lineComment: '//' }, { id: 27, name: 'vanillajs', extension: '.js', blockComment: '/*\n*\n*/', - lineComment: '//', + lineComment: '//' }, { id: 28, name: 'postgresql', extension: '.sql', blockComment: '/*\n*\n*/', - lineComment: '--', - }, + lineComment: '--' + } ] /** @@ -231,7 +231,7 @@ export async function getQuestionLanguage() { * @returns {*} */ export function getLang(lang) { - return LANGUAGES.find(o => o.name.toLowerCase() === lang.toLowerCase()) + return LANGUAGES.find((o) => o.name.toLowerCase() === lang.toLowerCase()) } /** * 获取文件后缀 @@ -251,7 +251,7 @@ export function getLangByExtension(extensionLike) { const reg = /\.[0-9a-zA-Z_]+$/im const match = extensionLike.match(reg) const extension = match === null ? `.${extensionLike}` : match[0] - return LANGUAGES?.find(o => o.extension === extension) + return LANGUAGES?.find((o) => o.extension === extension) } /** * 获取行注释 @@ -262,8 +262,7 @@ export function getLineComment(lang = DefaultLang) { const langObj = getLang(lang) if (langObj.lineComment !== '') { return langObj.lineComment - } - else { + } else { // 因为保底是都有块级注释的 return null } @@ -290,8 +289,7 @@ export function setLineComment(lang = DefaultLang, comment = '') { if (lineComment !== null) { const lines = comment.split('\n') return lines.reduce((p, line) => (p += `${lineComment} ${line}\n`), '') - } - else { + } else { return setBlockComment(lang, comment) } } @@ -313,7 +311,7 @@ export function setBlockComment(lang = DefaultLang, comment = '') { const startTag = splitter[1] const content = lines.reduce( (p, line) => (p += `${startTag} ${line}\n`), - '', + '' ) return `${start}\n${content}${end}\n` } diff --git a/common/utils/question-handler/showLogs.js b/common/utils/question-handler/showLogs.js index 1d0625b..3c98ffb 100644 --- a/common/utils/question-handler/showLogs.js +++ b/common/utils/question-handler/showLogs.js @@ -21,7 +21,7 @@ export function parseLog(fnName, param, compare, compareStruct) { const [parsedCompareArr] = setDataStructure( [callVal], compareStruct, - 'return', + 'return' ) // 获取函数执行后的内存使用情况 const endHeapStatsArray = v8.getHeapSpaceStatistics() @@ -29,11 +29,11 @@ export function parseLog(fnName, param, compare, compareStruct) { const endTime = performance.now() const startHeapStats = startHeapStatsArray.reduce( (prev, curr) => (prev += curr.space_used_size), - 0, + 0 ) const endHeapStats = endHeapStatsArray.reduce( (prev, curr) => (prev += curr.space_used_size), - 0, + 0 ) return { @@ -41,7 +41,7 @@ export function parseLog(fnName, param, compare, compareStruct) { 预期结果: JSON.stringify(compare), 执行结果: JSON.stringify(parsedCompareArr), 执行用时: `${Number(endTime - startTime).toFixed(4)}ms`, - 内存占用: getFileSize(endHeapStats - startHeapStats), + 内存占用: getFileSize(endHeapStats - startHeapStats) } } @@ -56,7 +56,7 @@ export function showLogs(fnName, paramMap, compareMap) { fnName, parsedParma, compareArr[index], - compareStruct, + compareStruct ) logsItems.push(logItem) }) @@ -67,18 +67,18 @@ export function showLogs(fnName, paramMap, compareMap) { { name: '预期结果', title: '预期结果', alignment: 'center', maxLen: 40 }, { name: '执行结果', title: '执行结果', alignment: 'center', maxLen: 40 }, { name: '执行用时', title: '执行用时', alignment: 'center', maxLen: 10 }, - { name: '内存占用', title: '内存占用', alignment: 'center', maxLen: 10 }, - ], + { name: '内存占用', title: '内存占用', alignment: 'center', maxLen: 10 } + ] }) logsItems.forEach((item) => { for (const key in item) { if (key === '预期结果' || key === '执行结果') { - item[key] - = item[key]?.length >= 40 ? `${item[key].slice(0, 37)}...` : item[key] + item[key] = + item[key]?.length >= 40 ? `${item[key].slice(0, 37)}...` : item[key] } } logTable.addRow(item, { - color: item['测试结果'] === '通过' ? 'green' : 'red', + color: item['测试结果'] === '通过' ? 'green' : 'red' }) }) logTable.printTable() diff --git a/common/utils/store/controller/store.js b/common/utils/store/controller/store.js index 950c77e..5da932b 100644 --- a/common/utils/store/controller/store.js +++ b/common/utils/store/controller/store.js @@ -19,8 +19,7 @@ function convData(data) { */ function parseData(dataStr) { const prefixReg = /^\$<.+>\$/im - if (!prefixReg.test(dataStr)) - return null + if (!prefixReg.test(dataStr)) return null const type = dataStr.match(prefixReg)[0].replace(/[$<>]+/g, '') const remainStr = dataStr.replace(prefixReg, '') diff --git a/common/utils/store/schemas/question.js b/common/utils/store/schemas/question.js index 409fe64..1d3b20d 100644 --- a/common/utils/store/schemas/question.js +++ b/common/utils/store/schemas/question.js @@ -14,8 +14,8 @@ export class Question extends Realm.Object { code: 'string?', url: 'string?', date: 'string?', - timestamp: { type: 'date', default: () => new Date() }, + timestamp: { type: 'date', default: () => new Date() } }, - primaryKey: '_id', + primaryKey: '_id' } } diff --git a/common/utils/store/schemas/store.js b/common/utils/store/schemas/store.js index 4f7a696..9ee3f6f 100644 --- a/common/utils/store/schemas/store.js +++ b/common/utils/store/schemas/store.js @@ -6,8 +6,8 @@ export class Store extends Realm.Object { properties: { key: 'string', value: 'string', - timestamp: { type: 'date', default: () => new Date() }, + timestamp: { type: 'date', default: () => new Date() } }, - primaryKey: 'key', + primaryKey: 'key' } } diff --git a/common/utils/store/store-realm.js b/common/utils/store/store-realm.js index b904a29..7392047 100644 --- a/common/utils/store/store-realm.js +++ b/common/utils/store/store-realm.js @@ -15,16 +15,14 @@ export async function open() { try { realm = await Realm.open({ schema: [Question, Store], - path: localPath, + path: localPath }) - } - catch (e) { - if (e?.message?.includes('Migration')) - await cleanStore() + } catch (e) { + if (e?.message?.includes('Migration')) await cleanStore() realm = await Realm.open({ schema: [Question, Store], - path: localPath, + path: localPath }) } return realm diff --git a/common/utils/update/update.js b/common/utils/update/update.js index f0b232f..bef2cb4 100644 --- a/common/utils/update/update.js +++ b/common/utils/update/update.js @@ -6,7 +6,7 @@ import { GITHUB_HOST, GITHUB_RAW, NPM_URL, - PackageName, + PackageName } from '#common/constants/question.const.js' import { url_join } from '#common/utils/http/urlJoin.js' import { fetch_ } from '#common/utils/http/fetch_.js' @@ -17,14 +17,14 @@ const githubUrl = url_join( GITHUB_RAW, GITHUB_HOST, PackageName, - 'master/package.json', + 'master/package.json' ) const giteeUrl = url_join( GITEE_URL, GITHUB_HOST, PackageName, 'raw', - 'master/package.json', + 'master/package.json' ) /** @@ -35,8 +35,7 @@ export async function getNpmVersion() { const res = await fetch_(npmUrl, { method: 'GET' }) console.log('获取NPM版本成功!======', res['dist-tags']?.latest) return res['dist-tags']?.latest - } - catch (e) { + } catch (e) { console.log('获取NPM版本失败!') throw new Error(e) } @@ -47,16 +46,15 @@ export async function getNpmVersion() { */ export async function getGithubVersion() { try { - const [{ reason: _1, value: github }, { reason: _2, value: gitee }] - = await Promise.allSettled([ + const [{ reason: _1, value: github }, { reason: _2, value: gitee }] = + await Promise.allSettled([ fetch_(githubUrl, { method: 'GET' }), - fetch_(giteeUrl, { method: 'GET' }), + fetch_(giteeUrl, { method: 'GET' }) ]) const ver = github?.version ?? gitee?.version console.log('获取Github版本成功!======', ver) return ver - } - catch (e) { + } catch (e) { console.log('获取Github版本失败!', e) throw new Error(e) } @@ -64,12 +62,11 @@ export async function getGithubVersion() { export function getLocalVersion() { try { const { version } = JSON.parse( - fs.readFileSync(path.resolve(rootPath, 'package.json'), 'utf-8'), + fs.readFileSync(path.resolve(rootPath, 'package.json'), 'utf-8') ) console.log('本地版本号获取成功!======', version) return version - } - catch (e) { + } catch (e) { console.log('本地版本号获取失败!') return false } @@ -87,6 +84,6 @@ export async function checkUpdate() { npmVersion: remote, githubVersion: github, isCliUpdate: remote !== local, - isGithubUpdate: github !== local, + isGithubUpdate: github !== local } } diff --git a/common/utils/update/updateByEnv.js b/common/utils/update/updateByEnv.js index 25fd571..b2409e4 100644 --- a/common/utils/update/updateByEnv.js +++ b/common/utils/update/updateByEnv.js @@ -27,8 +27,7 @@ export async function updateByEnv(env) { export function updateCli() { return new Promise((resolve, reject) => { exec(`npm install -g leetcode-practice`, (err) => { - if (err) - reject(err) + if (err) reject(err) else resolve() }) }) @@ -57,8 +56,7 @@ export async function updateProject() { async function execCommand(command) { return new Promise((resolve, reject) => { exec(command, (error, stdout) => { - if (error) - reject(error) + if (error) reject(error) else resolve(stdout.trim()) }) }) @@ -72,8 +70,8 @@ export async function updateProject() { type: 'confirm', name: 'hasChanges', message: '是否存在自己修改过的内容?', - default: false, - }, + default: false + } ]) // 0.1 如果有过更改,终止更新脚本,并给出提示建议 @@ -93,7 +91,7 @@ export async function updateProject() { // 2. 下载所有的文件并对应更新文件(除package.json) const response = await https.get( - 'https://raw.githubusercontent.com/wh131462/leetcode-practice', + 'https://raw.githubusercontent.com/wh131462/leetcode-practice' ) const filesToUpdate = response.data @@ -116,8 +114,7 @@ export async function updateProject() { // 4. 完成更新 console.log('项目更新完成。') - } - catch (error) { + } catch (error) { console.error('更新过程中出现错误:', error) } } diff --git a/common/view/check.view.js b/common/view/check.view.js index 3caeb23..8172651 100644 --- a/common/view/check.view.js +++ b/common/view/check.view.js @@ -13,8 +13,8 @@ export async function easyCheckView() { type: 'list', name: 'mode', message: '请选择检查问题的模式:', - choices: ['today', 'identity', 'random'], - }, + choices: ['today', 'identity', 'random'] + } ] // 第一个问题 选择的模式 const { mode } = await inquirer.prompt(modeQuestion, null) @@ -22,8 +22,8 @@ export async function easyCheckView() { { type: 'input', name: 'identity', - message: '请输入题目编号:', - }, + message: '请输入题目编号:' + } ] let question switch (mode) { @@ -51,8 +51,8 @@ export async function easyCheckView() { { type: 'confirm', name: 'dirRight', - message: `是否检测当前目录[ ${currentDir} ]下的题目[ ${questionFileName} ]?`, - }, + message: `是否检测当前目录[ ${currentDir} ]下的题目[ ${questionFileName} ]?` + } ] const { dirRight } = await inquirer.prompt(pathRightQuestion, null) if (!dirRight) { @@ -60,8 +60,8 @@ export async function easyCheckView() { { type: 'input', name: 'newDir', - message: `请选择新目录(基础地址为${currentDir})[按回车[Enter]终止操作]:`, - }, + message: `请选择新目录(基础地址为${currentDir})[按回车[Enter]终止操作]:` + } ] const { newDir } = await inquirer.prompt(newDirQuestion, null) if (!newDir) { @@ -70,7 +70,7 @@ export async function easyCheckView() { } questionDir = path.join( path.join(process.cwd(), newDir), - `${questionFileName}`, + `${questionFileName}` ) } const questionParentDir = path.dirname(questionDir) @@ -81,17 +81,17 @@ export async function easyCheckView() { type: 'list', name: 'selectQuestion', message: `题目[ ${questionFileName} ]有多个副本,请选择要检测的副本:`, - choices: getFileListBySameName(questionParentDir, questionFileName), - }, + choices: getFileListBySameName(questionParentDir, questionFileName) + } ] // 选择其中一个副本进行检查 const { selectQuestion } = await inquirer.prompt( selectQuestionQuestion, - null, + null ) questionDir = path.join(questionParentDir, selectQuestion) console.log( - `用户选择题目[ ${questionFileName}]的副本[ ${selectQuestion}]进行检测`, + `用户选择题目[ ${questionFileName}]的副本[ ${selectQuestion}]进行检测` ) } const filePath = path.join(questionDir, `question${question.lang}`) diff --git a/common/view/create.view.js b/common/view/create.view.js index f593bf0..ecdb06c 100644 --- a/common/view/create.view.js +++ b/common/view/create.view.js @@ -14,8 +14,8 @@ export async function easyCreateView() { type: 'list', name: 'mode', message: '请选择创建问题的模式:', - choices: ['today', 'identity', 'random'], - }, + choices: ['today', 'identity', 'random'] + } ] // 第一个问题 选择的模式 const { mode } = await inquirer.prompt(modeQuestion, null) @@ -23,8 +23,8 @@ export async function easyCreateView() { { type: 'input', name: 'identity', - message: '请输入题目编号:', - }, + message: '请输入题目编号:' + } ] let question switch (mode) { @@ -43,8 +43,7 @@ export async function easyCreateView() { break } const store = await setQuestion(mode, question) - if (!store) - console.warn(`[create][${mode}]问题[${question.title}]未成功缓存`) + if (!store) console.warn(`[create][${mode}]问题[${question.title}]未成功缓存`) // 创建题目 const questionFileName = getQuestionFileName(question) const currentDir = process.cwd() @@ -54,8 +53,8 @@ export async function easyCreateView() { { type: 'confirm', name: 'dirRight', - message: `是否在目录[ ${currentDir} ]下创建题目[ ${questionFileName} ]?`, - }, + message: `是否在目录[ ${currentDir} ]下创建题目[ ${questionFileName} ]?` + } ] const { dirRight } = await inquirer.prompt(pathRightQuestion, null) if (!dirRight) { @@ -63,8 +62,8 @@ export async function easyCreateView() { { type: 'input', name: 'newDir', - message: `请选择新目录(基础地址为${process.cwd()})[按回车[Enter]终止操作]:`, - }, + message: `请选择新目录(基础地址为${process.cwd()})[按回车[Enter]终止操作]:` + } ] const { newDir } = await inquirer.prompt(newDirQuestion, null) if (!newDir) { @@ -73,12 +72,11 @@ export async function easyCreateView() { } questionDir = path.join( path.join(process.cwd(), newDir), - `${questionFileName}`, + `${questionFileName}` ) } let filePath = await createQuestion(question, questionDir) - if (!filePath) - filePath = await createQuestionCopy(question, questionDir) + if (!filePath) filePath = await createQuestionCopy(question, questionDir) console.log(`题目[${questionFileName}]创建完成!\n文件地址为: ${filePath}`) process.exit(0) diff --git a/common/view/finder.view.js b/common/view/finder.view.js index 76a0f8f..c10ef78 100644 --- a/common/view/finder.view.js +++ b/common/view/finder.view.js @@ -4,7 +4,7 @@ import input from '@inquirer/input' // import { getHot100QuestionListCode } from '#common/utils/question-handler/getHot100QuestionListCode.js' import { createQuestionById, - createQuestionByTitleSlug, + createQuestionByTitleSlug } from '#common/utils/create-check/createUtil.js' import { getQuestionByKeyword } from '#common/utils/question-getter/getQuestionByKeyword.js' import { getStudyPlanList } from '#common/utils/question-getter/getStudyPlanList.js' @@ -14,18 +14,18 @@ async function studyMode(baseDir = process.cwd()) { const questionList = await getStudyPlanList() const planListMode = { message: '请选择学习计划', - choices: questionList.map(item => ({ + choices: questionList.map((item) => ({ name: `${item.name}${item.premiumOnly ? '(VIP)' : ''}`, - value: item.slug, - })), + value: item.slug + })) } const planSlug = await select(planListMode) const createMode = await select({ message: '拉题模式', choices: [ { name: '单个选择', value: 'single' }, - { name: '全部拉取(暂不支持)', value: 'all' }, - ], + { name: '全部拉取(暂不支持)', value: 'all' } + ] }) if (createMode === 'single') { const { planSubGroups } = await getPlanQuestionList(planSlug) @@ -34,25 +34,24 @@ async function studyMode(baseDir = process.cwd()) { ...cur.questions.map((res) => { return { cnTitle: res.translatedTitle, - enTitle: res.titleSlug, + enTitle: res.titleSlug } - }), + }) ) return acc }, []) const singleMode = { message: '请选择题目?', - choices: planList.map(res => ({ + choices: planList.map((res) => ({ name: res.cnTitle, - value: res.enTitle, - })), + value: res.enTitle + })) } const singleChoice = await select(singleMode) await createQuestionByTitleSlug(singleChoice, baseDir) } - if (createMode === 'all') - console.log('暂不支持') + if (createMode === 'all') console.log('暂不支持') // await getHot100QuestionListCode() } @@ -62,14 +61,14 @@ async function keywordMode(baseDir = process.cwd()) { const list = data?.map((q) => { return { name: `${q.frontendQuestionId}.${q.titleCn}`, - value: q.frontendQuestionId, + value: q.frontendQuestionId } }) const listQuestion = { type: 'list', name: 'chooseQuestion', message: '请选择题目', - choices: list, + choices: list } const chooseQuestion = await select(listQuestion) console.log(chooseQuestion) @@ -84,19 +83,19 @@ export async function easyFinderView(baseDir = process.cwd()) { const choices = [ { name: '关键词搜索', value: 'keyword', description: '关键词描述' }, { name: '学习计划', value: 'study', description: '企业和经典面试题目列表' }, - { name: '筛选模式', value: 'select', description: '筛选题目' }, + { name: '筛选模式', value: 'select', description: '筛选题目' } ] const modeQuestion = { message: '请选择查找的模式?', - choices, + choices } const mode = await select(modeQuestion) const modeMap = { study: studyMode, keyword: keywordMode, - select: selectMode, + select: selectMode } await modeMap[mode](baseDir) } diff --git a/common/view/language.view.js b/common/view/language.view.js index 2db9fce..2828f1f 100644 --- a/common/view/language.view.js +++ b/common/view/language.view.js @@ -1,12 +1,12 @@ import inquirer from 'inquirer' import { LANGUAGES, - setQuestionLanguage, + setQuestionLanguage } from '#common/utils/question-handler/questionLanguage.js' import { DefaultLang } from '#common/constants/question.const.js' export async function easyLanguageView(defaultLang = DefaultLang) { - const list = LANGUAGES.map(o => o.name) + const list = LANGUAGES.map((o) => o.name) const setQuestion = [ { type: 'list', @@ -14,8 +14,8 @@ export async function easyLanguageView(defaultLang = DefaultLang) { message: '请确认你要设置CLI的语言环境(如果选项匹配成功,那么按下回车确认即可)', choices: list, - default: defaultLang, - }, + default: defaultLang + } ] const { newSet } = await inquirer.prompt(setQuestion, null) console.log('设置语言环境为:', newSet) diff --git a/common/view/update.view.js b/common/view/update.view.js index 62a79bd..65cde1e 100644 --- a/common/view/update.view.js +++ b/common/view/update.view.js @@ -12,7 +12,7 @@ export async function easyUpdateView() { name: 'choseEnv', message: `自动检测到的环境为[ ${env} ],如果不是,请进行选择,如是,请按下回车确认.`, choices: ['cli', 'project'], - default: env, + default: env } const { choseEnv } = await inquirer.prompt(envQuestion, null) // 2. 检测版本更新 @@ -21,10 +21,10 @@ export async function easyUpdateView() { npmVersion, githubVersion, isCliUpdate, - isGithubUpdate, + isGithubUpdate } = await checkUpdate() console.log( - `当前版本:[ ${localVersion} ] npm包最新版本:[ ${npmVersion} ] github版本:[ ${githubVersion} ]`, + `当前版本:[ ${localVersion} ] npm包最新版本:[ ${npmVersion} ] github版本:[ ${githubVersion} ]` ) let isUpdate = false let version = '未知' @@ -47,7 +47,7 @@ export async function easyUpdateView() { const checkQuestion = { type: 'confirm', name: 'willUpdate', - message: `检测到[ ${env} ]可更新版本[ ${version} ],是否进行更新?`, + message: `检测到[ ${env} ]可更新版本[ ${version} ],是否进行更新?` } const { willUpdate } = await inquirer.prompt(checkQuestion, null) if (willUpdate) { @@ -55,16 +55,14 @@ export async function easyUpdateView() { console.log('开始更新...') await updateByEnv(env) console.log('更新完成~祝你使用愉快~') - } - else { + } else { // 4.2 取消更新 console.log( - '你选择跳过此次更新,如果想要进行更新,随时可以使用参数 -u 进行更新检测!祝你使用愉快~', + '你选择跳过此次更新,如果想要进行更新,随时可以使用参数 -u 进行更新检测!祝你使用愉快~' ) } process.exit(0) - } - else { + } else { console.log('当前已是最新版本!祝你使用愉快~') process.exit(0) } diff --git a/esbuild.config.js b/esbuild.config.js index e327d4c..6074108 100644 --- a/esbuild.config.js +++ b/esbuild.config.js @@ -5,7 +5,7 @@ import { rootPath } from '#common/utils/file/getRootPath.js' // 读取 package.json 文件内容 const packageJson = JSON.parse( - fs.readFileSync(path.resolve(rootPath, 'package.json'), 'utf-8'), + fs.readFileSync(path.resolve(rootPath, 'package.json'), 'utf-8') ) const esbuildConfig = { entryPoints: ['bin/lk.js', 'bin/lf.js', 'bin/lc.js'], @@ -17,13 +17,13 @@ const esbuildConfig = { minify: true, packages: 'external', define: { - 'process.env.VERSION': JSON.stringify(packageJson.version), - }, + 'process.env.VERSION': JSON.stringify(packageJson.version) + } } const buildBinConfig = { lk: 'bin/lk.js', lf: 'bin/lf.js', - lc: 'bin/lc.js', + lc: 'bin/lc.js' } const publishExcludeFields = [ 'scripts', @@ -31,14 +31,13 @@ const publishExcludeFields = [ 'imports', 'main', 'config', - 'packageManager', + 'packageManager' ] // 清理文件 function clean() { return new Promise((resolve) => { fs.rm(path.resolve(rootPath, 'pl-cli'), { recursive: true }, (err) => { - if (err) - resolve() + if (err) resolve() else resolve() }) }) @@ -69,16 +68,16 @@ function copyDocs() { docs.forEach((doc) => { fs.copyFileSync( path.resolve(rootPath, 'docs', doc), - path.resolve(rootPath, 'pl-cli/docs/', doc), + path.resolve(rootPath, 'pl-cli/docs/', doc) ) }) fs.copyFileSync( path.resolve(rootPath, 'README.md'), - path.resolve(rootPath, 'pl-cli/README.md'), + path.resolve(rootPath, 'pl-cli/README.md') ) fs.copyFileSync( path.resolve(rootPath, 'LICENSE'), - path.resolve(rootPath, 'pl-cli/LICENSE'), + path.resolve(rootPath, 'pl-cli/LICENSE') ) } @@ -87,7 +86,7 @@ function copyDocs() { */ function rewritePackageFile() { const newPackageJson = Object.assign(packageJson, { - bin: buildBinConfig, + bin: buildBinConfig }) publishExcludeFields?.forEach((key) => { delete newPackageJson[key] @@ -95,7 +94,7 @@ function rewritePackageFile() { Object.assign(newPackageJson, { main: 'index.js' }) fs.writeFileSync( path.resolve(rootPath, 'pl-cli/package.json'), - JSON.stringify(newPackageJson), + JSON.stringify(newPackageJson) ) } diff --git a/eslint.config.js b/eslint.config.js index 000f9f0..4d0a629 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -6,6 +6,6 @@ export default antfu({ 'no-console': 'off', 'no-irregular-whitespace': 'off', 'eslint-comments/no-unlimited-disable': 'off', - 'no-cond-assign': 'off', - }, + 'no-cond-assign': 'off' + } }) diff --git a/package.json b/package.json index 964aab5..d56cdca 100644 --- a/package.json +++ b/package.json @@ -65,15 +65,15 @@ "@vitest/coverage-v8": "^1.2.2", "commitizen": "^4.2.5", "cz-conventional-changelog": "^3.3.0", - "eslint-config-prettier": "^9.1.0", - "lint-staged": "^15.2.2", - "eslint-plugin-prettier": "^5.1.3", "esbuild": "^0.20.0", "eslint": "^8.57.0", "eslint-config-airbnb-base": "^15.0.0", + "eslint-config-prettier": "^9.1.0", "eslint-plugin-import": "^2.29.1", + "eslint-plugin-prettier": "^5.1.3", "gradient-string": "^2.0.2", "husky": "^8.0.1", + "lint-staged": "^15.2.2", "prettier": "^3.2.5", "release-it": "^17.1.1", "rimraf": "^5.0.5", diff --git a/resources/headers/codeSubmitJson.js b/resources/headers/codeSubmitJson.js index 81e37c6..4d4c52a 100644 --- a/resources/headers/codeSubmitJson.js +++ b/resources/headers/codeSubmitJson.js @@ -14,6 +14,6 @@ export function codeSubmitJson(lang, id, code) { "question_id": "${id}", "typed_code": "${code}" }`, - method: 'POST', + method: 'POST' } } diff --git a/resources/headers/planQuestionListJson.js b/resources/headers/planQuestionListJson.js index c1dcd55..e08d174 100644 --- a/resources/headers/planQuestionListJson.js +++ b/resources/headers/planQuestionListJson.js @@ -6,6 +6,6 @@ export function getPlanQuestionListJson(slug) { return { headers: { 'content-type': 'application/json' }, body: `{"query":"\\n query studyPlanPastSolved($slug: String!) {\\n studyPlanV2Detail(planSlug: $slug) {\\n planSubGroups {\\n slug\\n questions {\\n titleSlug\\n translatedTitle\\n status\\n }\\n }\\n }\\n}\\n ","variables":{"slug":"${slug}"},"operationName":"studyPlanPastSolved"}`, - method: 'POST', + method: 'POST' } } diff --git a/resources/headers/questionCodeListJson.js b/resources/headers/questionCodeListJson.js index feed28f..1856538 100644 --- a/resources/headers/questionCodeListJson.js +++ b/resources/headers/questionCodeListJson.js @@ -2,6 +2,6 @@ export function getQuestionCodeListJson(slug) { return { headers: { 'content-type': 'application/json' }, body: `{"query":"\\n query questionEditorData($titleSlug: String!) {\\n question(titleSlug: $titleSlug) {\\n questionId\\n questionFrontendId\\n codeSnippets {\\n lang\\n langSlug\\n code\\n }\\n envInfo\\n enableRunCode\\n hasFrontendPreview\\n frontendPreviews\\n }\\n}\\n ","variables":{"titleSlug":"${slug}"},"operationName":"questionEditorData"}`, - method: 'POST', + method: 'POST' } } diff --git a/resources/headers/questionDetailJson.js b/resources/headers/questionDetailJson.js index be9b12c..9cb0aa2 100644 --- a/resources/headers/questionDetailJson.js +++ b/resources/headers/questionDetailJson.js @@ -2,6 +2,6 @@ export function getQuestionDetailJson(slug) { return { headers: { 'content-type': 'application/json' }, body: `{"query":"\\n query questionTranslations($titleSlug: String!) {\\n question(titleSlug: $titleSlug) {questionId\\n translatedTitle\\n translatedContent\\n }\\n}\\n ","variables":{"titleSlug":"${slug}"},"operationName":"questionTranslations"}`, - method: 'POST', + method: 'POST' } } diff --git a/resources/headers/questionLanguageListJson.js b/resources/headers/questionLanguageListJson.js index a932d6e..fea9d0c 100644 --- a/resources/headers/questionLanguageListJson.js +++ b/resources/headers/questionLanguageListJson.js @@ -10,6 +10,6 @@ export function getQuestionLanguageListJson() { "variables": {}, "operationName": "languageList" }`, - method: 'POST', + method: 'POST' } } diff --git a/resources/headers/questionListJson.js b/resources/headers/questionListJson.js index f6ce9e1..d197c2f 100644 --- a/resources/headers/questionListJson.js +++ b/resources/headers/questionListJson.js @@ -2,6 +2,6 @@ export function getQuestionListJson(skip = 0, limit = 50) { return { headers: { 'content-type': 'application/json' }, body: `{"query":"query problemsetQuestionList($categorySlug: String, $limit: Int, $skip: Int, $filters: QuestionListFilterInput) {\\nproblemsetQuestionList(\\ncategorySlug: $categorySlug\\nlimit: $limit\\nskip: $skip\\nfilters: $filters) {\\ntotal\\nquestions {\\n frontendQuestionId\\n title\\n titleCn\\n titleSlug\\n}\\n}\\n}","variables":{"categorySlug":"all-code-essentials","skip":${skip},"limit":${limit},"filters":{}},"operationName":"problemsetQuestionList"}`, - method: 'POST', + method: 'POST' } } diff --git a/resources/headers/questionSearchJson.js b/resources/headers/questionSearchJson.js index fdaf703..ad2a370 100644 --- a/resources/headers/questionSearchJson.js +++ b/resources/headers/questionSearchJson.js @@ -2,6 +2,6 @@ export function getQuestionSearchJson(keyword) { return { headers: { 'content-type': 'application/json' }, body: `{"query":"\\n query problemsetQuestionList($categorySlug: String, $limit: Int, $skip: Int, $filters: QuestionListFilterInput) {\\n problemsetQuestionList(\\n categorySlug: $categorySlug\\n limit: $limit\\n skip: $skip\\n filters: $filters\\n ) {\\n hasMore\\n total\\n questions {\\n acRate\\n difficulty\\n freqBar\\n frontendQuestionId\\n isFavor\\n paidOnly\\n solutionNum\\n status\\n title\\n titleCn\\n titleSlug\\n topicTags {\\n name\\n nameTranslated\\n id\\n slug\\n }\\n extra {\\n hasVideoSolution\\n topCompanyTags {\\n imgUrl\\n slug\\n numSubscribed\\n }\\n }\\n }\\n }\\n}\\n ","variables":{"categorySlug":"all-code-essentials","skip":0,"limit":50,"filters":{"searchKeywords":"${keyword}"}},"operationName":"problemsetQuestionList"}`, - method: 'POST', + method: 'POST' } } diff --git a/resources/headers/questionTodayJson.js b/resources/headers/questionTodayJson.js index 583b28b..608c5fa 100644 --- a/resources/headers/questionTodayJson.js +++ b/resources/headers/questionTodayJson.js @@ -2,6 +2,6 @@ export function getQuestionTodayJson() { return { headers: { 'content-type': 'application/json' }, body: '{"query":"\\n query questionOfToday {\\n todayRecord {\\n date\\n userStatus\\n question {\\n questionId\\n frontendQuestionId: questionFrontendId\\n difficulty\\n title\\n titleCn: translatedTitle\\n titleSlug\\n paidOnly: isPaidOnly\\n freqBar\\n isFavor\\n acRate\\n status\\n solutionNum\\n hasVideoSolution\\n topicTags {\\n name\\n nameTranslated: translatedName\\n id\\n }\\n extra {\\n topCompanyTags {\\n imgUrl\\n slug\\n numSubscribed\\n }\\n }\\n }\\n lastSubmission {\\n id\\n }\\n }\\n}\\n ","variables":{},"operationName":"questionOfToday"}', - method: 'POST', + method: 'POST' } } diff --git a/resources/headers/questionTypeJson.js b/resources/headers/questionTypeJson.js index a123442..176c020 100644 --- a/resources/headers/questionTypeJson.js +++ b/resources/headers/questionTypeJson.js @@ -6,6 +6,6 @@ export function getQuestionTypesJson() { "variables": {}, "operationName": "questionTagTypeWithTags" }`, - method: 'POST', + method: 'POST' } } diff --git a/resources/headers/studyPlanListJson.js b/resources/headers/studyPlanListJson.js index c2b6854..ef910a7 100644 --- a/resources/headers/studyPlanListJson.js +++ b/resources/headers/studyPlanListJson.js @@ -2,6 +2,6 @@ export function getStudyPlanListJson() { return { headers: { 'content-type': 'application/json' }, body: '{"query":"\\n query GetProblemSetStudyPlanAds {\\n studyPlansV2AdQuestionPage {\\n cover\\n highlight\\n name\\n onGoing\\n premiumOnly\\n questionNum\\n slug\\n }\\n}\\n ","variables":{},"operationName":"GetProblemSetStudyPlanAds"}', - method: 'POST', + method: 'POST' } } diff --git a/scripts/create-color-font.js b/scripts/create-color-font.js index 6bc7c4e..d464df3 100644 --- a/scripts/create-color-font.js +++ b/scripts/create-color-font.js @@ -5,8 +5,8 @@ const question = [ { type: 'input', name: 'font', - message: '请输入要渐变色的文本:', - }, + message: '请输入要渐变色的文本:' + } ] // 第一个问题 选择的模式 const { font } = await inquirer.prompt(question, null) diff --git a/scripts/release.js b/scripts/release.js index 61e7693..0f81b06 100644 --- a/scripts/release.js +++ b/scripts/release.js @@ -9,21 +9,19 @@ const __dirname = dirname(__filename) ;(async function () { // 自动更新版本 // version可以传递如 6.1.1 | patch | minor | major - const execCommand = arr => + const execCommand = (arr) => (Array.isArray(arr) ? arr : [arr]).forEach((c) => { try { console.log(`start: ${c}...`) console.log(child_process.execSync(c).toString('utf8')) - } - catch (error) { + } catch (error) { console.log('\x1B[31m%s\x1B[0m', error.stdout.toString()) process.exit(1) } }) const getNewVersion = (oldVersion, version = 'patch') => { // [ | major | minor | patch] - if (/^([0-9]+\.*)+$/.test(version)) - return version + if (/^([0-9]+\.*)+$/.test(version)) return version const types = ['major', 'minor', 'patch'] const index = types.indexOf(version) if (index >= 0) { @@ -34,21 +32,21 @@ const __dirname = dirname(__filename) return getNewVersion(oldVersion) } const newVersionObj = { - version: getNewVersion(packageJson.version, process.argv[2]), + version: getNewVersion(packageJson.version, process.argv[2]) } fs.writeFileSync( path.resolve(__dirname, '../package.json'), `${JSON.stringify( Object.assign({}, packageJson, newVersionObj), null, - 2, - )}\n`, + 2 + )}\n` ) console.log(newVersionObj) execCommand([ `git commit -a -m 'chore: update version cli-v${newVersionObj.version}'`, `git tag cli-v${newVersionObj.version}`, - 'git push && git push --tags', + 'git push && git push --tags' ]) console.log('\x1B[32m%s\x1B[0m', '发布完成,请关注github CI构建') })() diff --git a/scripts/update.js b/scripts/update.js index a9d55b3..ba74ec6 100644 --- a/scripts/update.js +++ b/scripts/update.js @@ -9,7 +9,7 @@ if (isGithubUpdate) { const checkQuestion = { type: 'confirm', name: 'willUpdate', - message: `是否进行更新?`, + message: `是否进行更新?` } const { willUpdate } = await inquirer.prompt(checkQuestion, null) if (willUpdate) { @@ -17,16 +17,14 @@ if (isGithubUpdate) { console.log('开始更新...') await updateProject() console.log('更新完成~祝你使用愉快~') - } - else { + } else { // 4.2 取消更新 console.log( - '你选择跳过此次更新,如果想要进行更新,随时可以使用参数 -u 进行更新检测!祝你使用愉快~', + '你选择跳过此次更新,如果想要进行更新,随时可以使用参数 -u 进行更新检测!祝你使用愉快~' ) } process.exit(0) -} -else { +} else { console.log('当前版本为最新版本~无需更新!') } process.exit(0) diff --git a/test/create.spec.js b/test/create.spec.js index f6932f8..da89d7e 100644 --- a/test/create.spec.js +++ b/test/create.spec.js @@ -5,12 +5,12 @@ import { generateTemplateContent } from '#common/utils/question-handler/fulfillQ vi.mock('fs/promises', () => { return { - writeFile: vi.fn(), + writeFile: vi.fn() } }) const funRegex = /var\s+(\w+)\s*=\s*function\s*\(([^)]*)\)\s*{\s*([^}]*)\s*}/ -const isContainJsCode = input => funRegex.test(input) -const isContainTestCase = input => input.includes('showLogs(') +const isContainJsCode = (input) => funRegex.test(input) +const isContainTestCase = (input) => input.includes('showLogs(') const mockKeys = ['id', 'slug', 'title', 'detail', 'lang', 'code', 'date'] diff --git a/test/paseDataStructure.spec.js b/test/paseDataStructure.spec.js index 24298f9..5db2133 100644 --- a/test/paseDataStructure.spec.js +++ b/test/paseDataStructure.spec.js @@ -94,7 +94,7 @@ it('获取入参的数据结构 单参 匹配值', () => { it('获取入参的数据结构 单参 ListNode[]', () => { expect(getDataStructure(mockJSDOC_ListNodeArray, 'param')).toEqual([ - 'ListNode[]', + 'ListNode[]' ]) }) it('获取返回值的数据结构 单参 匹配值', () => { diff --git a/test/tree.spec.js b/test/tree.spec.js index 5802699..63aad82 100644 --- a/test/tree.spec.js +++ b/test/tree.spec.js @@ -22,12 +22,12 @@ it('测试树 parse 特殊值', () => { }) it('测试树 parse mockTree', () => { expect(TreeNode.parse(mockTree)).toEqual( - new TreeNode(1, new TreeNode(2), new TreeNode(3)), + new TreeNode(1, new TreeNode(2), new TreeNode(3)) ) }) it('测试树 pase mockTree2', () => { expect(TreeNode.parse(mockTree2)).toEqual( - new TreeNode(1, null, new TreeNode(2)), + new TreeNode(1, null, new TreeNode(2)) ) }) it('测试树 pase mockTree3', () => { @@ -35,8 +35,8 @@ it('测试树 pase mockTree3', () => { new TreeNode( 3, new TreeNode(9, null), - new TreeNode(20, new TreeNode(15, null), new TreeNode(7)), - ), + new TreeNode(20, new TreeNode(15, null), new TreeNode(7)) + ) ) }) it('测试树 pase mockTree4', () => { From 5672faa3107806521da5b17ce57865aa44e8d454 Mon Sep 17 00:00:00 2001 From: EternalHeart <48346853+wh131462@users.noreply.github.com> Date: Mon, 11 Mar 2024 23:12:32 +0800 Subject: [PATCH 015/111] feat:instead new docs (#26) * docs: finish the new document --- README.md | 549 ++++++------------ README_CN.md | 296 ++++++++++ README_JP.md | 291 ++++++++++ directory.md | 16 - docs/README_CN.md | 499 ---------------- docs/README_JP.md | 509 ---------------- docs/README_KR.md | 503 ---------------- docs/update.md | 11 - resources/images/create-finish.png | Bin 0 -> 157599 bytes resources/images/create-new-by-template.png | Bin 0 -> 89039 bytes resources/images/fulfill-template-new.png | Bin 0 -> 98019 bytes resources/images/generating-your-template.png | Bin 0 -> 48567 bytes resources/images/github-fork.png | Bin 96946 -> 0 bytes resources/images/github-forked.png | Bin 162470 -> 0 bytes resources/images/github-forking.png | Bin 59786 -> 0 bytes resources/images/leetcode-practice-github.png | Bin 193996 -> 0 bytes resources/images/template-page.png | Bin 0 -> 179121 bytes 17 files changed, 758 insertions(+), 1916 deletions(-) create mode 100644 README_CN.md create mode 100644 README_JP.md delete mode 100644 directory.md delete mode 100644 docs/README_CN.md delete mode 100644 docs/README_JP.md delete mode 100644 docs/README_KR.md delete mode 100644 docs/update.md create mode 100644 resources/images/create-finish.png create mode 100644 resources/images/create-new-by-template.png create mode 100644 resources/images/fulfill-template-new.png create mode 100644 resources/images/generating-your-template.png delete mode 100644 resources/images/github-fork.png delete mode 100644 resources/images/github-forked.png delete mode 100644 resources/images/github-forking.png delete mode 100644 resources/images/leetcode-practice-github.png create mode 100644 resources/images/template-page.png diff --git a/README.md b/README.md index d1ed329..07cff55 100644 --- a/README.md +++ b/README.md @@ -1,502 +1,295 @@ # Leetcode practice -[Chinese Document](docs/README_CN.md)|**English Document**|[Japanese Document](docs/README_JP.md)|[Korean Document](docs/README_KR.md) +[中文文档](./README_CN.md)|**English Document**||[日本語の文書](./README_JP.md) -## Introduction +## I. Project Information -A brief introduction: "Start practicing your daily LeetCode questions in the editor!" +### 1. Introduction -If you want to write your solutions in the editor... - -If you want to quickly access daily questions... - -If you want to create your own solution repository... - -Then, leetcode-practice will meet all your needs! - -## Preview - -![CLI-lc](resources/images/lc-cli-h.png) - -## How should I use it? (Three options for you to choose from) - -### Option A: CLI (Recommended) +One-sentence introduction: "Start practicing your `LeetCode` daily questions in the editor!" -The best and most flexible way to use it is to use our CLI in the terminal. You can create and check your solutions using three core commands: `lk`, `lf`, and `lc`. - -[Installation](<#I-Global-Installation-of-CLI-(Option-A)>) · [Usage](#using-cli) +If you want to write your solutions in the editor... -### Option B: Fork (Supported) +If you want a simple and quick way to get daily questions... -You can also use GitHub's fork feature to create a copy of our project. Then, you can directly use the built-in commands within the project to create and check solutions. +If you want to create your own repository for solutions... -[Installation](<#II-Fork-the-Repository-to-Create-Your-Own-leetcode-practice-Repository-(Option-B)>) · [Usage](#using-the-forked-project) +Then, `leetcode-practice` is all you need! -### Option C: Plugin (Supported) +### 2. Preview -You can also use our `leetcode-practice` plugin available in the plugin marketplace for interactive creation and checking of solutions. (Supported on two popular editors: `WebStorm` and `VS Code`) +![CLI-lc](./resources/images/lc-cli-h.png) -[Installation](<#III-Install-Plugins-from-the-Editor's-Marketplace-(Option-C)>) · [Usage](#plugin-usage) +## II. Instructions for Use -## Prerequisites +### 0. Prerequisites -| Dependency | Version | -| ---------- | ------- | -| nodejs | lts | -| git | lts | +| Tool | Remarks | +|----------|:-----------------------------------------------:| +| nodejs | lts | +| git | lts | +| computer | Ability to run Chrome and a code editor | +| patience | A heart that can persist in practicing problems | -> note: nodejs:[Node.js Installation Guide](https://nodejs.org/en/learn/getting-started/how-to-install-nodejs) +> Note: nodejs: [Node.js Installation Guide](https://nodejs.org/en/learn/getting-started/how-to-install-nodejs) > -> git:[Git Download Link](https://git-scm.com/downloads) +> git: [Git Download Page](https://git-scm.com/downloads) -## Installation +### 1. How Can I Use It? (Three Options for You to Choose From) -### I. Global Installation of CLI (Option A) +#### Option A. Command-Line Interface (CLI) (Recommended) -You can install the CLI globally using any npm package manager such as `npm`, `yarn`, `pnpm`, etc. - -```shell -# Using npm -npm install -g leetcode-practice -# Using pnpm -pnpm install -g leetcode-practice -# Using yarn -yarn global install leetcode-practice -``` +This option is the most recommended way to use the tool. You can freely create and check your solutions in any directory using the CLI commands `lc`, `lk`, and `lf`. -### II. Fork the Repository to Create Your Own leetcode-practice Repository (Option B) +> Usage Preview -#### Regular Method +#### Option B. Template Project (Supported) -1. Open our project link: [leetcode-practice](https://github.com/wh131462/leetcode-practice) +If you want to quickly create your own repository for solutions, you can use our template project to quickly create a GitHub project and get comprehensive initialization content. -![leetcode-practice-github](resources/images/leetcode-practice-github.png) +> Usage Preview -2. Click the `fork` button +#### Option C. Plugin (Supported, Under Development) -You will see a page like this, then modify the repository name and description, make sure to check `Copy the master branch only`. -![github-fork](resources/images/github-fork.png) +If you want to create solutions in your editor by clicking buttons, you can use our editor plugin (planned support for `WebStorm` and `VSCode`) to create solutions in your editor. -3. Click confirm to create, wait for creation +> Usage Preview -![github-forking](resources/images/github-forking.png) +### 2. How Should I Use It? (Detailed Installation and Usage Guides for Three Options) -4. Once created, pull this repository and start solving problems happily! +#### Option A. Command-Line Interface (CLI) -![github-forked](resources/images/github-forked.png) +##### 1. Installation -#### Simplified Method - -1. Pull our repository to your local machine +You can install it globally or locally in your project using any npm package manager (e.g., `npm`, `yarn`, `pnpm`). ```shell -git clone https://github.com/wh131462/leetcode-practice.git -``` - -2. Execute our deployment script +# Example: Global Installation +# Using npm for global installation +npm install -g leetcode-practice +# Using pnpm for installation +pnpm install -g leetcode-practice +# Using yarn for installation +yarn global install leetcode-practice -```shell -# Use your preferred package manager to execute the script -npm run easy-fork +# Example: Installation in the Project +yarn add --dev leetcode-practice ``` -3. Deployment completed - -### III. Install Plugins from the Editor's Marketplace (Option C) +> Note: The difference between installing in the project and globally lies in the scope of the CLI commands. If installed in the project, the commands can only be used within that project, and cannot be used in other projects (where the `leetcode-practice` package is not installed). Global installation allows you to use the commands in any directory. -To be developed... +##### 2. Usage -## Usage +Here's a simple introduction to creating and checking daily questions, as well as using keyword search. For more detailed instructions and parameters, please refer to the [KFC and its Key Parameter Explanation](#3-kfc-and-its-key-parameter-explanation-universal-reference-manual) section. -### Using CLI +###### 2.1 Creating a Question -#### 1. Creating Solutions - `lc` - -##### [1]. Get Today's Problem - [`-t`/`--today`] - -Type `lc` in the terminal to get today's problem in the current working directory by default. +Within the command scope, use the command `lc` to create today's daily question: ```shell +# Move to my workspace directory +cd my-workspace +# Create the daily question lc -# Full command -lc -t ``` -Example of getting today's problem: +When you see the prompt: ```shell -# For example, the current execution directory is src -➜ src git:(dev) ✗ lc MODE: today -Successfully obtained problem [2867.Count the Number of Valid Paths in a Tree]! -Problem file address is: /home/wh131462/workspace/leetcode-practice/src/2867.count-valid-paths-in-a-tree/index.js -``` - -##### [2]. Get Specified Problem - [`-i`/`--identity`] - -Type `lc` followed by the corresponding problem number in the terminal to get the specified problem in the current working directory. - -```shell -lc 1314 -# Full command -lc -i 1314 -# Use double quotation marks (") to ensure accurate identification, especially for problem numbers with spaces -lc -i "LCP 50" +题目[299.猜数字游戏]获取成功! +题目文件地址为:/my-workspace/299.bulls-and-cows/question.js ``` -Example of getting problem `LCP 50`: +Your question has been created! You can now solve it happily in the editor! -```shell -➜ src git:(dev) ✗ lc "LCP 50" -MODE: identity -Successfully obtained problem [LCP 50.Supply of Jewel]! -Problem file address is: /home/wh131462/workspace/leetcode-practice/src/LCP 50.WHnhjV/index.js -``` - -##### [3]. Get Random Problem - [`-r`/`--random`] - -Type `lc` followed by the `-r` parameter in the terminal to get a random problem in the current working directory. It will prioritize obtaining problems not currently in the directory. - -```shell -# Full command -lc -r -``` +###### 2.2 Checking a Question -Example of getting a random problem: +Once you've written your solution code, you can use the `lk` command to perform a simple check of the solution! ```shell -➜ src git:(dev) ✗ lc -r -MODE: random -Successfully obtained problem [14.Longest Common Prefix]! -Problem file address is: /home/wh131462/workspace/leetcode-practice/src/14.longest-common-prefix/index.js -``` - -##### [5]. Easy Creation Mode (Interactive Creation) - [`-e`/`--easy`] - -In addition to creating problems quickly with precise commands as mentioned above, you can also use easy creation mode for interactive creation. - -```shell -lc -e -``` - -Example of creating today's problem using easy mode: - -```shell -➜ src git:(dev) ✗ lc -e -? Select the problem creation mode: today -? Create the problem [ 2867.count-valid-paths-in-a-tree ] in the directory [ /home/wh131462/workspace/leetcode-practice/src ]? Yes -Problem [2867.count-valid-paths-in-a-tree] created! -File address is: /home/wh131462/workspace/leetcode-practice/src/2867.count-valid-paths-in-a-tree/index.js - -``` - -#### 2. Checking Solutions - `lk` - -##### [1]. Check Today's Solution [`-t`/`--today`] - -Type `lk` in the terminal to check today's solution in the current working directory. - -```shell -# By default, check today's solution +# The lk command corresponds to the lc command mode, and when used without parameters, it means checking today's question lk -# Full command -lk -t ``` -Example of checking today's solution: +You will receive information like this: ```shell -# Specified src directory as the root directory -workspace/leetcode-practice [dev●] » lk -d src -t MODE: today -Check result for problem [2581.Count Possible Trees]: -``` - -| index | Test Result | Expected Result | Execution Result | Execution Time | Memory Usage | -| ----- | ----------- | --------------- | ---------------- | -------------- | ------------ | -| 0 | 'Failed' | '3' | undefined | 0.0921ms | 2.52 KB | -| 1 | 'Passed' | '5' | undefined | 0.0119ms | 2.66 KB | - -> Click to jump to problem submission: - -##### [2]. Check Specified Solution [`-i`/`--identity` + ``] - -Type `lk` followed by the problem number in the terminal to check the specified solution in the current working directory. - -```shell -# Check specified solution -lk 2581 -# Full command -lk -i 2581 -# For problem numbers with spaces, use double quotation marks -lk "LCP 50" +题目[299.猜数字游戏]检测结果: +┌────────────┬──────────────────────────────────────────┬──────────────────────────────────────────┬────────────┬────────────┐ +│ 测试结果 │ 预期结果 │ 执行结果 │ 执行用时 │ 内存占用 │ +├────────────┼──────────────────────────────────────────┼──────────────────────────────────────────┼────────────┼────────────┤ +│ 通过 │ "1A3B" │ "1A3B" │ 0.1361ms │ 2.79 KB │ +│ 通过 │ "1A1B" │ "1A1B" │ 0.0623ms │ 2.93 KB │ +└────────────┴──────────────────────────────────────────┴──────────────────────────────────────────┴────────────┴────────────┘ +Click here to submit the question: https://leetcode-cn.com/problems/bulls-and-cows/ ``` -Example of checking the specified solution: +You can see the `Test Result`, `Expected Result`, `Execution Result`, `Execution Time`, and `Memory Usage` information. -```shell -workspace/leetcode-practice [dev●] » lk -d src 2581 -MODE: identity -Check result for problem [2581.Count Possible Trees]: -``` - -| index | Test Result | Expected Result | Execution Result | Execution Time | Memory Usage | -| ----- | ----------- | --------------- | ---------------- | -------------- | ------------ | -| 0 | 'Passed' | '3' | '3' | 0.1668ms | 2.52 KB | -| 1 | 'Passed' | '5' | '5' | 0.0234ms | 2.66 KB | - -> Click to jump to problem submission: - -##### [3]. Check Randomly Obtained Solution [`-r`/`--random`] - -Type `lk` followed by the `-r` parameter in the terminal to check the previously randomly obtained solution in the current working directory. - -```shell -# Full command -lk -r -``` +###### 2.3 Searching for a Question -Example of checking a randomly obtained solution: +Keyword search is a basic function of the core command `lf`, which allows you to quickly search for the question you want and choose to create it. ```shell -workspace/leetcode-practice [dev●] » lk -r -MODE: random -Check result for problem [41.First Missing Positive]: -``` - -| index | Test Result | Expected Result | Execution Result | Execution Time | Memory Usage | -| ----- | ----------- | --------------- | ---------------- | -------------- | ------------ | -| 0 | 'Failed' | '3' | undefined | 0.0896ms | 2.42 KB | -| 1 | 'Failed' | '2' | undefined | 0.0110ms | 2.56 KB | -| 2 | 'Failed' | '1' | undefined | 0.0045ms | 2.56 KB | - -> Click to jump to problem submission: -> -> Note: Ensure that `lc -r` has been executed before this command to create a random problem. - -##### [4]. Easy Mode (Interactive Checking) [`-e`/`--easy`] - -Type `lk` followed by the `-e` parameter in the terminal to use interactive mode for checking the problem. - -```shell -# Full command -lk -e +# The lf command is completely interactive. Follow the prompts to enter the desired information +lf ``` -Example of checking the specified problem using easy mode: +The following demonstrates how to use keyword search to create the `Two Sum` question: ```shell -workspace/leetcode-practice [dev●] » lk -e -? Select the mode of problem checking: identity -? Enter the problem number: 41 -? Do you want to check the problem [ 41.first-missing-positive ] in the current directory [ /Users/mac-106/wh131462/workspace/leetcode-practice ]? Yes -``` - -| index | Test Result | Expected Result | Execution Result | Execution Time | Memory Usage | -| ----- | ----------- | --------------- | ---------------- | -------------- | ------------ | -| 0 | 'Failed' | '3' | undefined | 0.0969ms | 2.42 KB | -| 1 | 'Failed' | '2' | undefined | 0.0139ms | 2.56 KB | -| 2 | 'Failed' | '1' | undefined | 0.0051ms | 2.56 KB | - -> Click to jump to problem submission: -> Problem [41.first-missing-positive] checked! -> File address is: /Users/mac-106/wh131462/workspace/leetcode-practice/41.first-missing-positive/index.js - -#### 3. Problem Lookup - `lf` - -To be developed... - -##### [1]. View Problem List [To be developed] - -#### 4. Common Parameters - -##### [1]. Get or specify the current programming language - [-l/-language [language]] - -You can use -l without arguments to get the current programming language setting, or you can specify the language parameter to set the language environment of the current CLI to the specified language. - -```shell -# This parameter behaves consistently in lc/lk/lf -lc -l -lk -l java -``` +# After entering the keyword `two sum` and pressing Enter, all questions related to `two sum` will appear. Use the up and down arrow keys on the keyboard to select, and press Enter to confirm. +? Choose the search mode? Keyword search +? Enter keywords two sum +? Choose a question + LCR 025.两数相加 II + 2.两数相加 + 29.两数相除 +❯ 1.两数之和 + LCR 006.两数之和 II - 输入有序数组 + 445.两数相加 II + LCR 056.两数之和 IV - 输入二叉搜索树 +(Use arrow keys to reveal more choices) -Usage example: - -```shell -# Get language environment -➜ leetcode-practice git:(dev) ✗ lc -l -Current CLI language environment is: javascript -# Change language environment -➜ leetcode-practice git:(dev) ✗ lc -l java -? Please confirm the language environment you want to set for the CLI (Press Enter to confirm if the option matches) java -Setting language environment to: java +# After confirmation, the question will be created, and a success message will be returned +? Choose the search mode? Keyword search +? Enter keywords two sum +? Choose a question 1.两数之和 +1 +MODE: identity +题目[1.两数之和]获取成功! +题目文件地址为:fill:///my-workspace/1.two-sum/question.js:36 ``` -Note: Unable to execute test cases in this environment. - -##### [2]. Specify Directory - [`-d`/`-directory`] +> Note: When the creation is complete, a clickable file address will be output. If clicked in the editor console, it will directly open the corresponding file to the start of the function. -The `create` and `check` commands can also use the `-d` parameter to specify a relative address based on the current working directory as the specified directory. -When specifying a directory, the operation will be performed in that directory. +#### Option B. Template Project -```shell -# Use the src directory as the generation directory -lc -d src -t -# Use the src directory as the check directory -lk -d src -i -``` +##### 1. Creating a Template Project -Example: - -```shell -➜ src git:(dev) ✗ lc -d src -t -MODE: today -Successfully obtained problem [2867.Count the Number of Valid Paths in a Tree]! -Problem file address is: /home/wh131462/workspace/leetcode-practice/src/src/2867.count-valid-paths-in-a-tree/index.js -``` +1. Open -> Note: If the specified directory does not exist, an empty directory will be created. +our template project [leetcodePracticeTemplate](https://github.com/EternalHeartTeam/LeetcodePracticeTemplate) on GitHub. 2. Click on `Use this template` in the upper right corner and select `Create a new repository`. 3. Fill in the information as you would when creating a normal repository. 4. Wait... and you're done. You now have your own `LeetCode solutions repository` and will receive long-term support from the `leetcode-practice` official team! -##### [3]. Check Version [`-V`/`--version`] +> Fill in the creation process chart -```shell -# Check lc version -lc -V -# Check lk version -lk -V -# Check lf version -lf +##### 2. Using the Template Project - -V -``` +###### 1. Clone the project and initialize the dependencies. -Example of checking the lc version: +e.g. Using my personal project as an example ```shell -workspace/leetcode-practice [dev●] » lc -V -0.0.0 +# This is just an example. Please clone your own project (when you attempt this, the project may have been cleared, which is a normal phenomenon, please don't be surprised) +git clone git@github.com:wh131462/my-leetcode-practice.git +# Move into the project directory +cd my-leetcode-practice +# Initialize +npm i ``` -##### [4]. Update Check [`-u`/`--update`] - -Using the `-u` or `--update` parameter, you can check whether the current version is the latest version. If the current version is not the latest version, you will be prompted whether to update. +###### 2. Usage in the project -```shell -lk -u -lf -u -lc -u -``` +There are two ways to use the `leetcode-practice` in the template project: `project internal commands` and `npm scripts`. The process of creation is demonstrated below, and other command usages and parameters are consistent with the scaffold. Please refer to the [KFC and its Key Parameter Explanation](#3-kfc-and-its-key-parameter-explanation-universal-reference-manual) section. ```shell -? Automatically detected environment is [ project ], if not, please make a selection, if yes, please press Enter to confirm. project -Start getting version number in npm repository... -Successfully obtained version number in npm repository! -Start getting version number in github repository... -Successfully obtained version number in github repository! -Start getting local version number... -Successfully obtained local version number! -Current version:[ 1.0.0 ] npm package latest version:[ 1.0.1 ] github version:[ 1.0.1 ] -? Detected [ project ] can update to version[ 1.0.1 ], whether to update? (Y/n) Yes -Update completed~Enjoy your use~ +# Under the root directory of the project, execute npm run lc to create today's question. Because -d src is configured by default, the creation will be done under the src directory +npm run lc +# You can also use yarn: any package management tool you like +yarn lc ``` -### Using the Forked Project - -#### [0]. Dependency Installation - -Before using, install dependencies using a package manager. +You can also use the `lc` command to create, of course, you can only use our script in the project (if you haven't installed the `leetcode-practice` package globally). ```shell -# Install dependencies -npm install -# Or use yarn (you can use any package manager you like) -yarn +# Using lc will create in the current working directory. If you need to keep consistent with the script's behavior (creating under src directory), please use the -d src parameter +lc ``` -The commands in the forked project are the same as those in the CLI usage parameters, except that the scripts are executed through the package manager such as `npm run`. - -> Note: The only difference between the scripts in the project and the scaffolding is that the `-d` parameter is specified by default, pointing to the `src` directory at the root of the project, so all commands are executed by default in `src`. +> Note: Here's an emphasis. The term "project internal command" means that the scope of the command is limited to the current project directory, meaning that if you try to use the lc command in another directory, you'll find that it doesn't work. Similarly, you'll find that when you first install it, the lc command doesn't work in the project until you close and reopen the terminal (terminal) to manually refresh the cache. npm script refers to a script command encapsulated under the scripts field in package.json. -#### [1]. Create Solution [`lc`] +###### 3. Updating Dependencies -Refer to the `lc` part of the CLI for parameters: [lc](#1-creating-solutions---lc) - -Simple usage example: +When you want to update, you can execute the encapsulated npm command `update`, which can help you install the `latest version (latest)` of `leetcode-practice`. ```shell -# Execute using yarn -yarn lc 1314 +# Execute using any package management tool +npm run update +# Of course, you can also execute the command yourself +npm i --save-dev leetcode-practice ``` -Execution result: +#### Option C. Plugin (Under Development) -```shell -# Generated in the src directory -> yarn lc 1314 -yarn run v1.22.19 -$ node bin/lc.js -d src 1314 -MODE: identity -Successfully obtained problem [1314.Matrix Block Sum]! -Problem file address is:/Users/mac-106/wh131462/workspace/leetcode-practice/src/1314.matrix-block-sum/index.js -✨ Done in 1.06s. -``` +### 3. KFC and its Key Parameter Explanation (Universal Reference Manual) -#### [2]. Check Solution [`lk`] +#### [0]. What is KFC? -Refer to the `lk` part of the CLI for parameters: [lk](#2-checking-solutions---lk) +`KFC` is a simple mnemonic that can quickly remember our three core commands: `lk`, `lf`, and `lc`. -Simple usage example: +| Command | Explanation | +|---------|-----------------------------------------------------------------------------------------------------------------------------------| +| lc | Core creation command, supports three creation modes (daily question, specified question, random question) for creating questions | +| lk | Core checking command, supports three modes corresponding to the question for checking questions | +| lf | Core search command, which can quickly search for the question you want based on prompts | -```shell -# Execute using yarn -yarn lk 1314 -``` +#### [1]. lc -Execution result: +| Short Parameter | Full Parameter | Explanation | +|------------------------|----------------|-------------------------------------------------------------------------| +| No parameter / `-t` | `--today` | Create today's daily question | +| Question number / `-i` | `--identity` | Create the question corresponding to the specified number | +| `-r` | `--random` | Create a random question that has not appeared in the current directory | +| `-e` | `--easy` | Interactive creation of questions | -```shell -# Checked in the src directory -> yarn lk 1314 -yarn run v1.22.19 -$ node bin/lk.js -d src 1314 -MODE: identity -Check result for problem [1314.Matrix Block Sum]: -``` - -| index | Test Result | Expected Result | Execution Result | Execution Time | Memory Usage | -| ----- | ----------- | ------------------------------------ | ---------------- | -------------- | ------------ | -| 0 | 'Failed' | '[[12,21,16],[27,45,33],[24,39,28]]' | undefined | 0.1487ms | 2.47 KB | -| 1 | 'Failed' | '[[45,45,45],[45,45,45],[45,45,45]]' | undefined | 0.0278ms | 2.61 KB | +#### [2]. lk -> Click to jump to problem submission: -> ✨ Done in 1.13s. +| Short Parameter | Full Parameter | Explanation | +|------------------------|----------------|---------------------------------------------------------------------------------------------------------------------------------------------------| +| No parameter / `-t` | `--today` | Check today's daily question | +| Question number / `-i` | `--identity` | Check the question corresponding to the specified number, and check if the question with the specified ID exists in the current working directory | +| `-r` | `--random` | Check the question created using the random mode last time | +| `-e` | `--easy` | Interactive check of the corresponding question based on prompts | -#### [3]. Look Up Solutions [`lf`] +> Note: When checking, please pay attention to what mode to use for checking, and make sure that you have performed the corresponding mode creation operation. +> The specified ID mode is an exception because it will check whether the specified ID exists in the current working directory. -Refer to the `lf` part of the CLI for parameters: [lf](#3-problem-lookup---lf) +#### [3]. lf -To be developed... +| Short Parameter | Full Parameter | Explanation | +|-----------------|----------------|---------------------------------------------------------------------------| +| No parameter | None | Enter interactive search, and search or filter questions based on prompts | -#### [4]. Update [`update`] +#### [4]. General Parameters -This is a special script to update the local project, which updates all non-src directories to synchronize with the latest features of the project. +| Short Parameter | Full Parameter | Explanation | +|------------------|---------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `-d ` | `--directory ` | Specify the working directory (a relative address of the current execution directory), which will affect the creation and checking | +| `-V` | `--version` | Check the version number | +| `-h` | `--help` | Get help information | +| `-l [language]` | `--language [language]` | Without specifying a parameter, get the current language environment (default is JavaScript). Specifying a parameter can set the language environment to the corresponding language (e.g., `-l java` sets the language environment to Java) | +| `-u` | `--update` | Update the current script or dependency | -> Note: If you have your own optimized code changes, be cautious about this step! Please refer to our [upgrade plan under special circumstances](./update.md)! +> Note: General parameters refer to parameters supported by all three scripts `lk`, `lf`, and `lc`. The semantics of usage are generally the same, but there may be differences in the meanings of behaviors in some commands (for example, specifying the `-d` parameter in the `lc` command means `creating questions in the specified directory`, while in the `lk` command, specifying the `-d` parameter means `creating questions in the specified directory`). -### Plugin Usage +## III. Additional Information -To be developed... +### 1. Contributors -## Contributors +The development and improvement of the project would not be possible without the hard work of these contributors. Sincere thanks to all of them! -## Feedback +### 2. Feedback + +If you have any questions about usage or would like to offer some suggestions, feel free to join our feedback group! -If you encounter any `issues` or have some `great suggestions`, feel free to join our `Feedback Group` for providing `feedback`! We will address them promptly! +Engage in face-to-face discussions with developers in the group, hoping to resonate with each other and spark new ideas! -![Feedback Group](resources/images/service-qrcode.png) +![Feedback Group](./resources/images/service-qrcode.png) -## Star History +### 3. Star Trend Chart [![Star History Chart](https://api.star-history.com/svg?repos=EternalHeartTeam/leetcode-practice&type=Date)](https://star-history.com/#EternalHeartTeam/leetcode-practice&Date) diff --git a/README_CN.md b/README_CN.md new file mode 100644 index 0000000..6a06ee3 --- /dev/null +++ b/README_CN.md @@ -0,0 +1,296 @@ +# Leetcode practice + +**中文文档**|[English Document](./README.md)|[日本語の文書](./README_JP.md) + +## I.项目信息 + +### 1.简介 + +一句话介绍:“在编辑器中开始练习你的`leetcode`每日一题!” + +如果,你想要在编辑器中编写你的题解... + +如果,你想要简单快速的获取每日一题... + +如果,你想要创建你自己的题解仓库... + +那么,`leetcode-practice`将满足你的一切想要! + +### 2.预览 + +![CLI-lc](./resources/images/lc-cli-h.png) + +## II.使用须知 + +### 0. 预备条件 + +| 工具 | 备注 | +|----------|:----------------:| +| nodejs | lts | +| git | lts | +| computer | 能够运行chrome和代码编辑器 | +| patience | 一颗能够坚持刷题的心 | + +> note: nodejs:[nodejs安装向导](https://nodejs.org/en/learn/getting-started/how-to-install-nodejs) +> +> git:[git下载地址](https://git-scm.com/downloads) + +### 1. 我可以怎么用? (三种方案供你选择) +#### 方案A.脚手架 CLI (推荐) +此方案是最为推荐的使用方案,通过脚手架指令`lc`、`lk`、`lf`自由灵活的在任意的目录中创建并检查你的题解。 + +> 使用预览 + +#### 方案B.模板项目 Template project (支持) + +如果你想要快速的创建一个自己的题解库,可以使用我们的模板项目进行快速的创建github项目,并且获得完善的初始化内容。 + +> 使用预览 + +#### 方案C.插件 Plugin (支持,待开发) + +如果你想在编辑器中通过点击操作按钮来创建题解,可以使用我们的编辑器插件(计划支持`WebStorm`和`VSCode`)在你的编辑器中创建题解。 + +> 使用预览 + +### 2. 我应该怎么用?(三种方案的详细的安装和使用教程) +#### 方案A.脚手架 CLI + +##### 1.安装 + +你可以使用任意一款npm包管理软件(例如*`*npm*`*,*`*yarn*`*,*`*pnpm*`*等)的在`项目`中或者`全局`进行安装。 + +```shell +# 示例:全局安装 +# 使用npm进行全局安装 +npm install -g leetcode-practice +# 使用pnpm进行安装 +pnpm install -g leetcode-practice +# 使用yarn进行安装 +yarn global install leetcode-practice + +# 示例:在项目中安装 +yarn add --dev leetcode-practice +``` + +> 提示: 在项目中安装和全局安装的区别在于脚手架的作用范围不同。如果在项目中安装,那么指令只能在该项目内使用,而在其他项目中(未安装leetcode-practice包的情况下)则无法使用指令。而全局安装则允许在任何目录下使用指令。 + +##### 2.使用 + +在这里给大家简单介绍一下每日一题的`创建`和`检查`,还有关键词搜索的使用方式,最为详细具体的指令和参数请参照[KFC及其关键参数说明 ](#3-kfc及其关键参数说明-三种方案通用的参考手册) + +###### 2.1 创建题目 + +在指令作用范围中,执行指令`lc`来进行创建今天的每日一题: + +```shell +# 移动到我的工作目录中 +cd my-workspace +# 创建每日一题 +lc +``` + +当看到提示: + +```shell +MODE: today +题目[299.猜数字游戏]获取成功! +题目文件地址为:/my-workspace/299.bulls-and-cows/question.js +``` + +你的题目就已经创建完成了!可以在编辑器中愉快的解题了! + +###### 2.2 检查题目 + +当你完成解题代码的编写,可以通过`lk`指令进行简单的检查题解! + +```shell +# lk指令和lc指令的模式是对应的,不带参数的时候意为检查今日题目 +lk +``` + +你会得到如下提示信息: + +```shell +MODE: today +题目[299.猜数字游戏]检测结果: +┌────────────┬──────────────────────────────────────────┬──────────────────────────────────────────┬────────────┬────────────┐ +│ 测试结果 │ 预期结果 │ 执行结果 │ 执行用时 │ 内存占用 │ +├────────────┼──────────────────────────────────────────┼──────────────────────────────────────────┼────────────┼────────────┤ +│ 通过 │ "1A3B" │ "1A3B" │ 0.1361ms │ 2.79 KB │ +│ 通过 │ "1A1B" │ "1A1B" │ 0.0623ms │ 2.93 KB │ +└────────────┴──────────────────────────────────────────┴──────────────────────────────────────────┴────────────┴────────────┘ +点击跳转到题目提交: https://leetcode.cn/problems/bulls-and-cows/ +``` + +你可以看到`测试结果`、`预期结果`、`执行结果`、`执行用时`以及`内存占用`信息。 + +###### 2.3 搜索题目 + +关键词搜索是核心指令`lf`的一项基本功能,可以通过关键词的形式获取题目信息,并快速的选择创建。 + +```shell +# lf指令是一个完全交互式的指令 按其中的提示进行输入操作即可获取自己想要的信息 +lf +``` + +以下演示获取`两数之和`这个题目如何通过关键词搜索创建: + +```shell +# 在输入关键词 两数 之后 按下回车 会出现所有和两数相关的题目 按键盘的上下键进行选择 回车进行确认 +? 请选择查找的模式? 关键词搜索 +? 请输入关键词 两数 +? 请选择题目 +LCR 025.两数相加 II +2.两数相加 +29.两数相除 +❯ 1.两数之和 +LCR 006.两数之和 II - 输入有序数组 +445.两数相加 II +LCR 056.两数之和 IV - 输入二叉搜索树 +(Use arrow keys to reveal more choices) + +# 确认后的会进行题目创建,返回成功信息 +? 请选择查找的模式? 关键词搜索 +? 请输入关键词 两数 +? 请选择题目 1.两数之和 +1 +MODE: identity +题目[1.两数之和]获取成功! +题目文件地址为:fill:///my-workspace/1.two-sum/question.js:36 +``` + +> 提示: 在创建完成的时候会输出一个可以点击跳转的文件地址,如果在编辑器的控制台中点击,会直接打开对应的文件的函数开始位置。 + +#### 方案B.模板项目 Template project + +##### 1.创建模板项目 + +1. 在`github`中打开我们的模板项目[leetcodePracticeTemplate](https://github.com/EternalHeartTeam/LeetcodePracticeTemplate)。 +2. `点击`右上角的`Use this template`,选择[`Create a new repository`](https://github.com/new?template_name=LeetcodePracticeTemplate&template_owner=EternalHeartTeam)。 +3. 就像创建一个正常的仓库一样去填写信息即可。 +4. 等待...然后完成,从此你就有了一个自己的`leetcode题解仓库`,并且长期受`leetcode-practice`官方支持! + +> 填充创建过程图 + +##### 2. 使用模板项目 + +###### 1. 拉取项目,并进行初始化依赖。 + +e.g. 以我个人的项目为例 + +```shell +# 这里只是示例,请拉取自己的项目(在你看到这进行尝试的时候,此项目可能已经被清理,正常现象请勿疑惑) +git clone git@github.com:wh131462/my-leetcode-practice.git +# 移动进项目目录 +cd my-leetcode-practice +# 初始化 +npm i +``` + +###### 2. 在项目中的使用 + +在模板项目中使用`leetcode-practice`的方式有两种,一种是`项目内指令`的形式,一种是`npm脚本`的形式。接下来演示创建的过程,其他的指令用法和参数与脚手架一致,请参考[KFC及其关键参数说明](#3-kfc及其关键参数说明-三种方案通用的参考手册)部分。 + +```shell +# 在项目的根目录下 执行npm run lc 创建今日一题,因为默认配置了 -d src 所以 会在 src 目录下进行创建 +npm run lc +# 也可以使用 yarn :任意一种你喜欢的包管理工具 +yarn lc +``` + +你也可以使用指令`lc`来创建,当然,你只能在项目中使用我们的脚本(如果你没有全局安装`leetcode-practice`的话)。 +```shell +# 使用lc 会在当前工作目录创建 如果 需要和脚本的表现保持一致(指在src目录下创建),请使用 -d src 参数 +lc +``` + +> 注意:在这里进行一下强调,项目内指令的说法是指指令的作用范围限制是当前的项目目录,也就是说在其他的目录,你尝试使用lc指令会发现不起作用。 +> +> 同样的,你也会发现在第一次安装好的时候,在项目内使用lc指令,也是不起作用的,这个时候需要关闭终端(terminal)再打开进行手动的刷新缓存。 +> +> npm脚本指在 package.json 中的 scripts 字段下封装的脚本指令。 + +###### 3. 更新依赖 + +当你想要进行更新的时候,可以执行封装好的npm指令:`update`,可以帮你安装`最新版本(latest)`的`leetcode-practice`。 + +```shell +# 使用任意一种包管理工具执行即可 +npm run update +# 当然你也可以自己执行指令 +npm i --save-dev leetcode-practice +``` + +#### 方案C.插件 Plugin (待开发) + +### 3. KFC及其关键参数说明 (三种方案通用的参考手册) + +#### [0].什么是KFC? + +`KFC`是一个简便记法,可以快速记忆我们的三个核心指令:`lk`,`lf`,`lc`。 + +| 指令 | 说明 | +|----|--------------------------------------------------------| +| lc | 核心创建指令,支持三种创建模式 ( 每日一题、指定题目、随机题目 ) 进行题目的创建 | +| lk | 核心检查指令,支持三种模式对应的题目检测 | +| lf | 核心查找指令,可以快捷的搜索你想要的题目,支持Hot100,关键词搜索,条件筛选等模式进行搜索题目并支持创建 | + +#### [1].lc + +| 简单参数 | 完整参数 | 说明 | +|-----------|--------------|------------------| +| 无参数/`-t` | `--today` | 创建今日的每日一题 | +| 题目编号/`-i` | `--identity` | 创建指定编号对应的题目 | +| `-r` | `--random` | 创建当前目录下未出现过的随机题目 | +| `-e` | `--easy` | 交互式创建题目 | + +#### [2].lk + +| 简单参数 | 完整参数 | 说明 | +|-----------|--------------|--------------------------------------| +| 无参数/`-t` | `--today` | 检查今日的每日一题 | +| 题目编号/`-i` | `--identity` | 检查指定编号对应的题目,会检查当前工作目录下的是否存在指定id对应的题目 | +| `-r` | `--random` | 检查上一次使用随机模式创建的题目 | +| `-e` | `--easy` | 交互式的根据提示去检查对应的题目 | + +> 注意: 当你检测的时候需要注意,使用什么模式去检查,请确保你已经执行过对应模式的创建操作。 +> 指定编号模式除外,因为会优先检查指定的id是否在当前工作目录存在。 + +#### [3].lf + +| 简单参数 | 完整参数 | 说明 | +|------|------|---------------------------| +| 无参数 | 无 | 进入交互式查询,可根据提示搜索或筛选题目并创建题目 | + +#### [4].通用参数 + +| 简单参数 | 完整参数 | 说明 | +|------------------|---------------------------|---------------------------------------------------------------------------| +| `-d ` | `--directory ` | 指定工作目录(是一个当前执行目录的相对地址),会影响创建和检查 | +| `-V` | `--version` | 检查版本号 | +| `-h` | `--help` | 获取帮助信息 | +| `-l [language]` | `--language [language]` | 不指定参数为获取当前的语言环境(默认为javascript),指定参数可以设置语言环境为对应语言(如`-l java`可以指定语言环境为java) | +| `-u` | `--update` | 更新当前脚本或者依赖 | + +> 注意:通用参数指三个脚本`lk`,`lf`,`lc`都支持的参数,使用上的语义一般来说是相同的,但是可能有些指令上的行为含义会有所不同(比如`lc`指令指定`-d`参数是指`在指定目录中创建题目`,而`lk`指令指定`-d`参数就是指`在指定目录创建题目`)。 + +## III.其他信息 + +### 1. 贡献者们 + +项目的开发和完善离不开这些贡献者的辛勤付出,在此真诚感谢各位大佬的付出! + + + +### 2.使用反馈 + +如果你有使用上的问题需要解惑,或者一些好的建议想要提出,可以加我们的使用反馈群进行反馈! + +在群里和开发者面对面的交流,希望我们能产生共鸣,迸发出新的火花! + +![反馈群](./resources/images/service-qrcode.png) + +### 3.Star趋势图 + +[![Star History Chart](https://api.star-history.com/svg?repos=EternalHeartTeam/leetcode-practice&type=Date)](https://star-history.com/#EternalHeartTeam/leetcode-practice&Date) \ No newline at end of file diff --git a/README_JP.md b/README_JP.md new file mode 100644 index 0000000..100b9da --- /dev/null +++ b/README_JP.md @@ -0,0 +1,291 @@ +# Leetcode practice + +[中文文档](./README_CN.md)|[English Document](./README.md)|**日本語の文書** + +## I.プロジェクト情報 + +### 1.概要 + +一文で述べると、「エディタで毎日の`leetcode`問題を練習し始めましょう!」 + +もし、エディタで問題を解きたい場合... + +もし、簡単で迅速に毎日の問題を取得したい場合... + +もし、自分の解答リポジトリを作成したい場合... + +そのすべてができるのが`leetcode-practice`です! + +### 2.プレビュー + +![CLI-lc](./resources/images/lc-cli-h.png) + +## II.使用上の注意 + +### 0.前提条件 + +| ツール | 備考 | +|--------|:---------------------------:| +| nodejs | lts | +| git | lts | +| コンピュータ | chromeとコードエディタを実行できる必要があります | +| 我慢 | 問題を解き続けるための心 | + +> ノート: nodejs:[nodejsのインストールガイド](https://nodejs.org/en/learn/getting-started/how-to-install-nodejs) +> +> git:[gitのダウンロードリンク](https://git-scm.com/downloads) + +### 1. どう使えるのか? (3つの選択肢) + +#### オプションA.スクリプトCLI (おすすめ) + +この方法は、自由自在に`lc`、`lk`、`lf`のスクリプトコマンドを使用して、任意のディレクトリで問題を作成およびチェックするためにお勧めされています。 + +> 使用例 + +#### オプションB.テンプレートプロジェクト (サポート) + +自分の解答リポジトリを素早く作成したい場合は、当社のテンプレートプロジェクトを使用して、GitHubプロジェクトを素早く作成し、初期化されたコンテンツを取得できます。 + +> 使用例 + +#### オプションC.プラグイン (サポート、開発中) + +エディタで問題を作成するためにクリック操作を使用したい場合は、当社のエディタプラグイン(予定では`WebStorm`および`VSCode`をサポート)を使用して、エディタで問題を作成できます。 + +> 使用例 + +### 2. どうすればいいですか?(3つの選択肢の詳細なインストールおよび使用手順) + +#### オプションA.スクリプトCLI + +##### 1.インストール + +`lc`、`lk`、`lf`のスクリプトを使用して、任意のnpmパッケージ管理ソフトウェア(たとえば*`npm`*、_`yarn`_、*`pnpm`*など)で`プロジェクト`または`グローバル`にインストールできます。 + +```shell +# 例:グローバルインストール +# npmを使用してグローバルにインストール +npm install -g leetcode-practice +# pnpmを使用してインストール +pnpm install -g leetcode-practice +# yarnを使用してインストール +yarn global install leetcode-practice + +# 例:プロジェクト内のインストール +yarn add --dev leetcode-practice +``` + +> ヒント: プロジェクト内およびグローバルインストールの違いは、スクリプトの範囲が異なることです。プロジェクト内でインストールすると、スクリプトはそのプロジェクト内でのみ使用できますが、他のプロジェクトでは(leetcode-practiceパッケージがインストールされていない場合)スクリプトを使用できません。一方、グローバルインストールでは、どのディレクトリでもスクリプトを使用できます。 + +##### 2.使用 + +ここでは、毎日の`作成`および`チェック`、およびキーワード検索の方法を簡単に説明します。詳細なスクリプトとパラメータについては、[KFCとその重要なパラメータの説明](#3-kfcとその重要なパラメータの説明-3つのオプション共通のリファレンスガイド)を参照してください。 + +###### 2.1 問題の作成 + +スクリプトの範囲内で、指定の日の毎日の問題を作成するには、`lc`を実行します。 + +```shell +# 私の作業ディレクトリに移動する +cd my-workspace +# 毎日の問題を作成する +lc +``` + +次のプロンプトが表示されると: + +```shell +MODE: today +問題[299.猜数字游戏]を取得しました! +問題ファイルの場所:/my-workspace/299.bulls-and-cows/question.js +``` + +問題は作成されました!エディタで問題を解く準備ができました! + +###### 2.2 問題のチェック + +問題の解答コードを書き終えたら、`lk`スクリプトを使用して問題の簡単なチェックを行うことができます! + +```shell +# lkスクリプトはlcスクリプトと対応しています。パラメータなし + +の場合、今日の問題をチェックすることを意味します +lk +``` + +以下のようなメッセージが表示されます: + +```shell +MODE: today +問題[299.猜数字游戏]のテスト結果: +┌────────────┬──────────────────────────────────────────┬──────────────────────────────────────────┬────────────┬────────────┐ +│ テスト結果 │ 期待結果 │ 実行結果 │ 実行時間 │ メモリ使用量 │ +├────────────┼──────────────────────────────────────────┼──────────────────────────────────────────┼────────────┼────────────┤ +│ パス │ "1A3B" │ "1A3B" │ 0.1361ms │ 2.79 KB │ +│ パス │ "1A1B" │ "1A1B" │ 0.0623ms │ 2.93 KB │ +└────────────┴──────────────────────────────────────────┴──────────────────────────────────────────┴────────────┴────────────┘ +問題提出へのリンクをクリックしてください: https://leetcode.cn/problems/bulls-and-cows/ +``` + +`テスト結果`、`期待結果`、`実行結果`、`実行時間`、`メモリ使用量`の情報が表示されます。 + +###### 2.3 問題の検索 + +キーワード検索は、`lf`スクリプトの主要な機能の1つです。キーワードの形式で問題情報を取得し、簡単に作成できます。 + +```shell +# lfスクリプトは完全なインタラクティブなスクリプトで、プロンプトに従って入力操作を行うことで、希望する情報を簡単に取得できます +lf +``` + +以下は、`two-sum`問題をキーワードで検索して作成する方法の例です。 + +```shell +# キーワード "two sum" を入力し、Enterキーを押すと、すべての"two sum"に関連する問題が表示されます。キーボードの上下キーを使用して選択し、Enterキーを押して確認します。 +? 検索モードを選択してください? キーワード検索 +? キーワードを入力してください 二つの数 +? 問題を選んでください 1.两数之和 +1 +MODE: identity +問題[1.两数之和]を取得しました! +問題ファイルの場所:fill:///my-workspace/1.two-sum/question.js:36 +``` + +> 注意: 作成時に、クリック可能なファイルパスが表示され、エディタのコンソールでクリックすると、対応するファイルの関数の開始位置が直接開きます。 + +#### オプションB.テンプレートプロジェクト + +##### 1.テンプレートプロジェクトの作成 + +1. GitHubでテンプレートプロジェクト[leetcodePracticeTemplate](https://github.com/EternalHeartTeam/LeetcodePracticeTemplate)を開きます。 +2. 右上隅の`Use this template`をクリックし、[`Create a new repository`](https://github.com/new?template_name=LeetcodePracticeTemplate&template_owner=EternalHeartTeam)を選択します。 +3. 通常のリポジトリの作成と同様に情報を入力します。 +4. しばらく待ちます...そして完了です。これで、自分の`leetcode解答リポジトリ`ができました! + +> 作成プロセスの準備画像 + +##### 2. テンプレートプロジェクトの使用 + +###### 1. プロジェクトをクローンし、依存関係を初期化します。 + +例: 個人的なプロジェクトを使用します。 + +```shell +# これは例です。自分のプロジェクトをクローンしてください。(あなたがこれを試している時点で、このプロジェクトはもうクリアされているかもしれませんが、正常な現象なので疑わないでください) +git clone git@github.com:wh131462/my-leetcode-practice.git +# プロジェクトディレクトリに移動 +cd my-leetcode-practice +# 初期化 +npm i +``` + +###### 2. プロジェクト内での使用 + +テンプレートプロジェクトでは、`leetcode-practice`を使用する方法は2つあります。1つは`プロジェクト内コマンド`の形式、もう1つは`npmスクリプト`の形式です。詳細な使い方とパラメータについては、[KFCとその重要なパラメータの説明](#3-kfcとその重要なパラメータの説明-3つのオプション共通のリファレンスガイド)を参照してください。 + +```shell +# ルートディレクトリで実行するnpm run lc コマンドを使用して、今日の問題を作成します。デフォルトで -d src を設定しているため、src ディレクトリ内で作成されます +npm run lc +# または yarn: 好きなどちらかのパッケージ管理ツールを使用できます +yarn lc +``` + +あなたはまた、`lc`コマンドを使用して作成することもできますが、あなたはプ + +ロジェクト内でしかスクリプトを使用できません(あなたが`leetcode-practice`をグローバルにインストールしていない場合)。 + +```shell +# ここでの注意点として、プロジェクト内コマンドとは、コマンドの作用範囲が現在のプロジェクトディレクトリに限定されることを意味します。つまり、他のディレクトリで lc コマンドを試しても効果はありません。 +# 同様に、最初にインストールしたときに、プロジェクト内で lc コマンドを使用しても、そのコマンドが機能しない場合があります。この場合は、ターミナル(terminal)を閉じて再度開いて、キャッシュを手動で更新する必要があります。 +# npmスクリプトは、package.jsonのscriptsフィールドにエンベロープされたスクリプトコマンドのことです。 + +# lcコマンドを使用して作成することもできますが、その場合はプロジェクト内でしか使用できません(あなたが"leetcode-practice"をグローバルにインストールしていない場合)。 +lc +``` + +> 注意: ここで強調すると、プロジェクト内コマンドは、コマンドの作用範囲が現在のプロジェクトディレクトリに限定されることを意味します。つまり、他のディレクトリで `lc` コマンドを試しても効果はありません。同様に、最初にインストールしたときに、プロジェクト内で `lc` コマンドを使用しても、そのコマンドが機能しない場合があります。この場合は、ターミナル(terminal)を閉じてから再度開き、キャッシュを手動で更新する必要があります。npmスクリプトは、package.jsonのscriptsフィールドにエンベロープされたスクリプトコマンドのことです。 + +###### 3. 依存関係の更新 + +更新したい場合は、`update`という名前の封印されたnpmコマンドを使用して、`最新バージョン(latest)`の`leetcode-practice`をインストールできます。 + +```shell +# どちらかのパッケージ管理ツールを使用して実行できます +npm run update +# もちろん、コマンドを手動で実行することもできます +npm i --save-dev leetcode-practice +``` + +#### オプションC.プラグイン(開発中) + +### 3. KFCとその重要なパラメータの説明 (3つのオプション共通のリファレンスガイド) + +#### [0].KFCとは? + +`KFC`は、当社の3つの主要コマンド`lk`、`lf`、`lc`を素早く覚えるための簡単な記憶法です。 + +| コマンド | 説明 | +|------|---------------------------------------------------------------| +| lc | 主要な作成コマンドであり、3つの作成モード(毎日の問題、指定された問題、ランダムな問題)をサポートし、問題の作成を行います | +| lk | 主要なチェックコマンドであり、3つのモードに対応する問題のチェックを行います | +| lf | 主要な検索コマンドであり、Hot100、キーワード検索、条件検索などのモードで問題を検索し、問題を作成します | + +#### [1]. lc (問題の作成) + +| 簡易パラメータ | 完全パラメータ | 説明 | +|-----------|--------------|------------------------| +| 無し/`-t` | `--today` | 今日の毎日の問題を作成します。 | +| 問題番号/`-i` | `--identity` | 指定された番号に対応する問題を作成します。 | +| `-r` | `--random` | まだ現れていないランダムな問題を作成します。 | +| `-e` | `--easy` | インタラクティブに問題を作成します。 | + +#### [2]. lk (問題のチェック) + +| 簡易パラメータ | 完全パラメータ | 説明 | +|-----------|--------------|------------------------------------------------------------| +| 無し/`-t` | `--today` | 今日の毎日の問題をチェックします。 | +| 問題番号/`-i` | `--identity` | 指定された番号に対応する問題をチェックします。指定されたIDが現在の作業ディレクトリに存在するかどうかも確認します。 | +| `-r` | `--random` | 最後に使用されたランダムモードで作成された問題をチェックします。 | +| `-e` | `--easy` | インタラクティブにプロンプトに従って問題をチェックします。 | + +> 注意: チェックする際は、どのモードを使用するかに注意してください。対応するモードの作成操作をすでに実行したことを確認してください。 +> 指定番号モードは例外であり、作成されていない問題をチェックすることもできます。 + +#### [3]. lf (問題の検索) + +| 簡易パラメータ | 完全パラメータ | 説明 | +|---------|---------|------------------------------------------------------| +| 無し | 無し | インタラクティブにクエリに入り、ヒントに従って問題を検索したりフィルタリングしたりして問題を作成します。 | + +#### [4]. 汎用パラメータ + +| 簡易パラメータ | 完全パラメータ | 説明 | +|------------------|---------------------------|-------------------------------------------------------------------------------------------------| +| `-d ` | `--directory ` | 作業ディレクトリを指定します(現在の実行ディレクトリの相対パス)。これは作成とチェックの両方に影響を与えます。 | +| `-V` | `--version` | バージョン番号を確認します。 | +| `-h` | `--help` | ヘルプ情報を取得します。 | +| `-l [language]` | `--language [language]` | パラメータなしで現在の言語環境を取得します(デフォルトはJavaScript)。言語を指定すると、その言語の環境が設定されます(たとえば、`-l java`でJavaの環境が設定されます)。 | +| `-u` | `--update` | 現在のスクリプトまたは依存関係を更新します。 | + +> 注意: 汎用パラメータは`lk`,`lf`,`lc`の3つのスクリプトでサポートされていますが、その使用法の意味論は一般的には同じですが、いくつかの指示には異なる挙動が含まれる場合があります(たとえば、`lc`コマンドで`-d`パラメータを指定した場合は、`指定したディレクトリ内で問題を作成`するのに対し、`lk`コマンドで`-d`パラメータを指定すると`指定したディレクトリに問題をチェック`します)。 + +## III. その他の情報 + +### 1. 貢献者たち + +このプロジェクトの開発と改善には、これらの貢献者のご努力が不可欠です。ここに、すべての方々に心から感謝いたします! + + + +### 2. 使用フィードバック + +使用上の問題がある場合や、提案がある場合は、使用フィードバックグループにご参加ください! + +グループで開発者と対面してコミュニケーションを取り、新たなアイデアを生み出すことを願っています! + +![フィードバックグループ](./resources/images/service-qrcode.png) + +### 3. Starのトレンドチャート + +[![Star History Chart](https://api.star-history.com/svg?repos=EternalHeartTeam/leetcode-practice&type=Date)](https://star-history.com/#EternalHeartTeam/leetcode-practice&Date) diff --git a/directory.md b/directory.md deleted file mode 100644 index 62acc61..0000000 --- a/directory.md +++ /dev/null @@ -1,16 +0,0 @@ -# 目录结构 - -```tree -. -├── bin # 指令入口目录 -├── common # 通用目录 -│   ├── resources # 通用资源目录 -│   ├── structures # 数据结构目录 -│   ├── utils # 通用工具目录 -│   └── view # 交互视图相关脚本 -├── coverage # 测试覆盖图目录 -├── resources # 资源目录(存放图片和一些静态内容) -├── scripts # 项目脚本存放目录 -├── src # 问题存放的默认目录 -└── test # 测试目录 -``` diff --git a/docs/README_CN.md b/docs/README_CN.md deleted file mode 100644 index 0958fbe..0000000 --- a/docs/README_CN.md +++ /dev/null @@ -1,499 +0,0 @@ -# Leetcode practice - -**中文文档**|[英文文档](../README.md)|[日文文档](./README_JP.md)|[韩文文档](./README_KR.md) - -## 简介 - -一句话介绍:“在编辑器中开始练习你的`leetcode`每日一题!” - -如果,你想要在编辑器中编写你的题解... - -如果,你想要简单快速的获取每日一题... - -如果,你想要创建你自己的题解仓库... - -那么,`leetcode-practice`将满足你的一切想要! - -## 预览 - -![CLI-lc](../resources/images/lc-cli-h.png) - -## 我应该怎么使用?(三种方案供你选择) - -### 方案 A : CLI (推荐使用) - -最好的也是最自由的使用方法是:在终端中使用我们的脚手架,通过三个核心指令:`lk`,`lf`,`lc`,来创建和检查你的题解。 - -[安装](<#一全局安装脚手架-(方案-A)>) · [使用](#CLI的使用) - -### 方案 B : fork (受支持的) - -你也可以使用`github`的`fork`功能来创建我们的项目副本,然后,直接使用项目内置指令进行题解的创建和检查。 - -[安装](<#二使用fork创建你自己的leetcode-practice仓库副本-(方案-B)>) · [使用](#fork项目的使用) - -### 方案 C : plugin (受支持的) - -你同样可以使用我们发布在插件市场的插件`leetcode-practice`来进行交互式的创建和检查题解。(支持两个主流编辑器:`WebStorm` 和 `VS Code`) - -[安装](<#三在编辑器的插件市场安装插件-(方案-C)>) · [使用](#插件的使用) - -## 预备条件 - -| 依赖包 | 版本 | -| ------ | ---- | -| nodejs | lts | -| git | lts | - -> note: nodejs:[nodejs安装向导](https://nodejs.org/en/learn/getting-started/how-to-install-nodejs) -> -> git:[git下载地址](https://git-scm.com/downloads) - -## 安装 - -### 一.全局安装脚手架 (方案 A) - -你可以使用任意npm包管理软件(例如`npm`,`yarn`,`pnpm`等)的全局安装方法进行安装。 - -```shell -# 使用npm进行安装 -npm install -g leetcode-practice -# 使用pnpm进行安装 -pnpm install -g leetcode-practice -# 使用yarn进行安装 -yarn global install leetcode-practice -``` - -### 二.使用fork创建你自己的leetcode-practice仓库副本 (方案 B) - -#### 常规方法 - -1. 打开我们的项目地址:[leetcode-practice](https://github.com/wh131462/leetcode-practice) - -![leetcode-practice-github](../resources/images/leetcode-practice-github.png) - -2. 点击`fork`按钮 - -你会看到这样的一个页面,然后修改仓库名和描述,确认勾选`Copy the master branch only` -![github-fork](../resources/images/github-fork.png) - -3. 点击确认创建,等待创建 - -![github-forking](../resources/images/github-forking.png) - -4. 创建完成,然后拉取这个仓库愉快地开始你的解题吧! - -![github-forked](../resources/images/github-forked.png) - -#### 简便方法 - -1. 拉取我们的仓库到本地 - -```shell -git clone https://github.com/wh131462/leetcode-practice.git -``` - -2. 执行我们的部署脚本 - -```shell -# 使用你喜欢的包管理器进行执行脚本即可 -npm run easy-fork -``` - -3. 完成部署 - -### 三.在编辑器的插件市场安装插件 (方案 C) - -待开发... - -## 使用方法 - -### CLI的使用 - -#### 1.创建题解 - `lc` - -##### [1]. 获取今日题目 - [`-t`/`--today`] - -在终端中键入`lc`指令,即可默认在当前终端的工作区中获取今日的题目。 - -```shell -lc -# 完整指令 -lc -t -``` - -示例获取今日题目: - -```shell -# 例如当前执行目录为src目录 -➜ src git:(dev) ✗ lc -MODE: today -题目[2867.统计树中的合法路径数目]获取成功! -题目文件地址为:/home/wh131462/workspace/leetcode-practice/src/2867.count-valid-paths-in-a-tree/index.js -``` - -##### [2]. 获取指定题目 - [`-i`/`--identity`] - -在终端中键入`lc`指令加上对应的题号,即可在当前工作区中获取指定题目。 - -```shell -lc 1314 -# 完整指令 -lc -i 1314 -# 使用双引号(")进行包裹 可以确保指定编号准确,对于带空格的题目编号尤其有用 -lc -i "LCP 50" -``` - -示例获取`LCP 50`: - -```shell -➜ src git:(dev) ✗ lc "LCP 50" -MODE: identity -题目[LCP 50.宝石补给]获取成功! -题目文件地址为:/home/wh131462/workspace/leetcode-practice/src/LCP 50.WHnhjV/index.js -``` - -##### [3]. 获取随机题目 - [`-r`/`--random`] - -在终端中键入`lc`指令加上参数`-r`,即可在当前工作区中获取随机题目,会优先获取不存在当前目录中的题目。 - -```shell -# 完整指令 -lc -r -``` - -示例获取随机题目: - -```shell -➜ src git:(dev) ✗ lc -r -MODE: random -题目[14.最长公共前缀]获取成功! -题目文件地址为:/home/wh131462/workspace/leetcode-practice/src/14.longest-common-prefix/index.js -``` - -##### [4]. 简单创建模式(交互式创建) - [`-e`/`--easy`] - -除了如上的使用精准的指令快速创建题目外,还可以使用简单创建模式来进行交互式创建。 - -```shell -lc -e -``` - -使用简单模式创建今日题目示例: - -```shell -➜ src git:(dev) ✗ lc -e -? 请选择创建问题的模式: today -? 是否在目录[ /home/wh131462/workspace/leetcode-practice/src ]下创建题目[ 2867.count-valid-paths-in-a-tree ]? Yes -题目[2867.count-valid-paths-in-a-tree]创建完成! -文件地址为: /home/wh131462/workspace/leetcode-practice/src/2867.count-valid-paths-in-a-tree/index.js - -``` - -#### 2.检查题解 - `lk` - -##### [1]. 检查今日题解 [`-t`/`--today`] - -在终端中键入`lk`指令,即可在当前工作区中检查今日题解。 - -```shell -# 默认执行检查今日题解 -lk -# 完整指令 -lk -t -``` - -使用示例: - -```shell -# 指定了src目录为根目录 -workspace/leetcode-practice [dev●] » lk -d src -t -MODE: today -题目[2581.统计可能的树根数目]检测结果: -``` - -| index | 测量结果 | 预期结果 | 执行结果 | 执行用时 | 内存占用 | -| ----- | -------- | -------- | --------- | -------- | -------- | -| 0 | 未通过 | '3' | undefined | 0.0921ms | 2.52 KB | -| 1 | 通过 | '5' | undefined | 0.0119ms | 2.66 KB | - -> 点击跳转到题目提交: - -##### [2]. 检查指定题解 [`-i`/`--identity` + ``] - -在终端中键入`lk`指令,并输入题目编号,即可在当前工作区中检查指定题解。 - -```shell -# 检查指定题解 -lk 2581 -# 完整指令 -lk -i 2581 -# 带空格的编号 使用双引号包裹 -lk "LCP 50" -``` - -使用示例检查指定题解: - -```shell -workspace/leetcode-practice [dev●] » lk -d src 2581 -MODE: identity -题目[2581.统计可能的树根数目]检测结果: -``` - -| index | 测量结果 | 预期结果 | 执行结果 | 执行用时 | 内存占用 | -| ----- | -------- | -------- | -------- | -------- | -------- | -| 0 | 通过 | '3' | '3' | 0.1668ms | 2.52 KB | -| 1 | 通过 | '5' | '5' | 0.0234ms | 2.66 KB | - -> 点击跳转到题目提交: - -##### [3]. 检查随机获取的题解 [`-r`/`--random`] - -在终端中键入`lk`指令,使用参数`-r`,即可在当前工作区中检查上一个随机获取的题解。 - -```shell -# 完整指令 -lk -r -``` - -使用示例: - -```shell -workspace/leetcode-practice [dev●] » lk -r -MODE: random -题目[41.缺失的第一个正数]检测结果: -``` - -| index | 测量结果 | 预期结果 | 执行结果 | 执行用时 | 内存占用 | -| ----- | -------- | -------- | --------- | -------- | -------- | -| 0 | 未通过 | '3' | undefined | 0.0896ms | 2.42 KB | -| 1 | 未通过 | '2' | undefined | 0.0110ms | 2.56 KB | -| 2 | 未通过 | '1' | undefined | 0.0045ms | 2.56 KB | - -> 点击跳转到题目提交: -> -> 注意:在执行此指令之前请务必先执行过,`lc -r`创建了随机题目。 - -##### [4]. 简单模式(交互式检查) [`-e`/`--easy`] - -在终端中键入`lk`指令,使用参数`-e`,即可使用交互式的进行题目检查。 - -```shell -# 完整指令 -lk -e -``` - -使用简单模式检测指定题目: - -```shell -workspace/leetcode-practice [dev●] » lk -e -? 请选择检查问题的模式: identity -? 请输入题目编号: 41 -? 是否检测当前目录[ /Users/mac-106/wh131462/workspace/leetcode-practice ]下的题目[ 41.first-missing-positive ]? Yes -``` - -| index | 测量结果 | 预期结果 | 执行结果 | 执行用时 | 内存占用 | -| ----- | -------- | -------- | --------- | -------- | -------- | -| 0 | 未通过 | '3' | undefined | 0.0969ms | 2.42 KB | -| 1 | 未通过 | '2' | undefined | 0.0139ms | 2.56 KB | -| 2 | 未通过 | '1' | undefined | 0.0051ms | 2.56 KB | - -> 点击跳转到题目提交: -> 题目[41.first-missing-positive]检查完成! -> 文件地址为: /Users/mac-106/wh131462/workspace/leetcode-practice/41.first-missing-positive/index.js - -#### 3.题目查找 - `lf` - -待开发... - -##### [1]. 查看题目列表[待开发] - -#### 4.通用参数 - -##### [1]. 获取或指定当前编程语言 - [`-l`/`-language` [language]] - -可以通过`-l`不带参数来获取当前的编程语言设定,也可以通过指定语言参数将当前cli的语言环境设定为指定的语言。 - -```shell -# 此参数在 lc/lk/lf 中的表现一致 -lc -l -lk -l java -``` - -使用示例: - -```shell -# 获取语言环境 -➜ leetcode-practice git:(dev) ✗ lc -l -当前CLI语言环境为:javascript -# 更改语言环境 -➜ leetcode-practice git:(dev) ✗ lc -l java -? 请确认你要设置CLI的语言环境(如果选项匹配成功,那么按下回车确认即可) java -设置语言环境为: java - -``` - -> 注意: 在这个环境下无法执行检测测试用例。 - -##### [2]. 指定目录 - [`-d`/`-directory`] - -`创建`和`检查`指令还可以使用参数`-d`来指定基于当前工作目录的相对地址作为指定目录。 -当指定目录后会在指定目录中进行创建或者检查操作。 - -```shell -# 指定当前目录的子目录src作为生成目录 -lc -d src -t -# 指定当前目录的子目录src作为检查目录 -lk -d src -i -``` - -使用示例: - -```shell -➜ src git:(dev) ✗ lc -d src -t -MODE: today -题目[2867.统计树中的合法路径数目]获取成功! -题目文件地址为:/home/wh131462/workspace/leetcode-practice/src/src/2867.count-valid-paths-in-a-tree/index.js -``` - -> 注意: 如果指定的目录不存在,会自动生成一个空目录进行创建。 - -##### [3]. 检查版本号 [`-V`/`--version`] - -```shell -# 查看lc版本 -lc -V -# 查看lk版本 -lk -V -# 查看lf版本 -lf -V -``` - -查看lc版本示例: - -```shell -workspace/leetcode-practice [dev●] » lc -V -0.0.0 -``` - -##### [4]. 更新检测 [`-u`/`--update`] - -使用`-u`或者`--update`参数可以检测当前版本是否为最新版本,如果当前版本不是最新版本,会提示用户是否进行更新. - -```shell -lk -u -lf -u -lc -u -``` - -```shell -? 自动检测到的环境为[ project ],如果不是,请进行选择,如是,请按下回车确认. project -开始获取npm仓库中的版本号... -npm仓库中的版本号获取成功! -开始获取github仓库的版本号... -github仓库的版本号获取成功! -开始获取本地版本号... -本地版本号获取成功! -当前版本:[ 1.0.0 ] npm包最新版本:[ 1.0.1 ] github版本:[ 1.0.1 ] -? 检测到[ project ]可更新版本[ 1.0.1 ],是否进行更新? (Y/n) Yes -更新完成~祝你使用愉快~ -``` - -### fork项目的使用 - -#### [0]. 安装依赖 - -在使用之前,先使用包管理工具进行依赖的安装. - -```shell -# 安装依赖 -npm install -# 或者 使用yarn (你可以使用任意一种你喜欢的包管理工具) -yarn -``` - -fork项目中的指令,使用上和脚手架CLI的使用参数是一致的,只不过需要通过`npm run`类似的包管理工具执行命令来执行脚本. - -> 注意:在项目中的脚本,和脚手架的唯一区别就是默认指定了`-d`参数,指向了项目根目录的`src`目录,所以所有的指令都是在src中默认执行的. - -#### [1]. 创建题解 [`lc`] - -参数参考cli的`lc`部分: [lc](#1创建题解---lc) - -简单使用示例: - -```shell -# 使用yarn执行 -yarn lc 1314 -``` - -执行结果: - -```shell -# 会在src目录下进行生成 -> yarn lc 1314 -yarn run v1.22.19 -$ node bin/lc.js -d src 1314 -MODE: identity -题目[1314.矩阵区域和]获取成功! -题目文件地址为:/Users/mac-106/wh131462/workspace/leetcode-practice/src/1314.matrix-block-sum/index.js -✨ Done in 1.06s. -``` - -#### [2]. 检查题解 [`lk`] - -参数参考cli的`lk`部分: [lk](#2检查题解---lk) - -简单使用示例: - -```shell -# 使用yarn执行 -yarn lk 1314 -``` - -执行结果: - -```shell -# 会在src目录下进行检查 -> yarn lk 1314 -yarn run v1.22.19 -$ node bin/lk.js -d src 1314 -MODE: identity -题目[1314.矩阵区域和]检测结果: -``` - -| index | 测量结果 | 预期结果 | 执行结果 | 执行用时 | 内存占用 | -| ----- | -------- | ------------------------------------ | --------- | -------- | -------- | -| 0 | 未通过 | '[[12,21,16],[27,45,33],[24,39,28]]' | undefined | 0.1487ms | 2.47 KB | -| 1 | 未通过 | '[[45,45,45],[45,45,45],[45,45,45]]' | undefined | 0.0278ms | 2.61 KB | - -> 点击跳转到题目提交: -> ✨ Done in 1.13s. - -#### [3]. 查找题解 [`lf`] - -参数参考cli的`lf`部分: [lf](#3题目查找---lf) - -待开发... - -#### [4]. 更新 [`update`] - -特定更新本地项目的脚本,会更新所有的非src目录,用以同步项目最新特性. - -> 注意: 如果你有自己的优化更改代码,这一步请谨慎操作! 请参考我们的[特殊情况下的升级方案](./update.md)! - -### 插件的使用 - -待开发... - -## 贡献者 - -[EternalHeart](https://github.com/wh131462) -[SmartTeddy](https://github.com/SmallTeddy) -[Hedwig-Fang](https://github.com/Hedwig-Fang) - -## 使用反馈 - -如果有使用上的`问题`,或者一些`好的建议`,可以加我们的`使用反馈群`进行`反馈`!我们会及时处理! - -![反馈群](../resources/images/service-qrcode.png) diff --git a/docs/README_JP.md b/docs/README_JP.md deleted file mode 100644 index e70d186..0000000 --- a/docs/README_JP.md +++ /dev/null @@ -1,509 +0,0 @@ -# Leetcode practice - -[中文文件](./README_CN.md)|[英文文件](../README.md)|**日本語ファイル**|[韓国語ファイル](./README_KR.md) - -## はじめに - -一言で言うと:"エディタで LeetCode のデイリー問題を練習しよう!" - -もし、あなたがエディタで問題を解きたい場合... - -もし、毎日の問題を簡単に取得したい場合... - -もし、独自の解決策リポジトリを作成したい場合... - -そうであれば、leetcode-practiceがあなたのすべての要望を叶えます! - -## プレビュー - -![CLI-lc](../resources/images/lc-cli-h.png) - -## どのように使うか?(3つの選択肢) - -### 選択肢 A: CLI(推奨) - -最も自由度が高く、使いやすい方法は、ターミナルで `lk`, `lf`, `lc` の3つの主要コマンドを使って問題を作成し、チェックすることです。 - -[インストール](<#一全局インストールスクリプト-(オプション-A)>) · [使用](#CLIの使用) - -### 選択肢 B: フォーク(サポートされています) - -GitHubのフォーク機能を使用して、プロジェクトのコピーを作成し、プロジェクト内の指示に従って問題を作成およびチェックします。 - -[インストール](<#二フォークを使用して独自のleetcode-practiceリポジトリのコピーを作成する-(オプション-B)>) · [使用](#プロジェクトのフォークの使用) - -### 選択肢 C: プラグイン(サポートされています) - -インタラクティブに問題を作成し、チェックするために、插件市場に公開されている`leetcode-practice`プラグインを使用することもできます。(主要な2つのエディタ `WebStorm` と `VS Code` に対応) - -[インストール](<#三エディタのプラグイン市場にプラグインをインストールする-(オプション-C)>) · [使用](#プラグインの使用) - -## 準備条件 - -| 必要なパッケージ | バージョン | -| ---------------- | ---------- | -| nodejs | lts | -| git | lts | - -> メモ:nodejs:[nodejsのインストールガイド](https://nodejs.org/en/learn/getting-started/how-to-install-nodejs) -> -> git:[gitダウンロードリンク](https://git-scm.com/downloads) - -## インストール - -### 一.全局インストールスクリプト (オプション A) - -npm、yarn、pnpmなどの任意のnpmパッケージ管理ソフトウェアを使用して、グローバルインストールメソッドを使用してインストールできます。 - -```shell -# npmを使用してインストール -npm install -g leetcode-practice -# pnpmを使用してインストール -pnpm install -g leetcode-practice -# yarnを使用してインストール -yarn global install leetcode-practice -``` - -### 二.フォークを使用して独自のleetcode-practiceリポジトリのコピーを作成する (オプション B) - -#### 標準的な方法 - -1. 当社のプロジェクトのURLを開きます:[leetcode-practice](https://github.com/wh131462/leetcode-practice) - -![leetcode-practice-github](../resources/images/leetcode-practice-github.png) - -2. `フォーク` ボタンをクリックします。 - -次のようなページが表示されます。そして、リポジトリ名と説明を変更し、「マスターブランチのみをコピーする」を選択してください。 -![github-fork](../resources/images/github-fork.png) - -3. 作成を確認して待機してください。 - -![github-forking](../resources/images/github-forking.png) - -4. 作成が完了したら、このリポジトリをクローンして、楽しい問題解決を開始できます! - -![github-forked](../resources/images/github-forked.png) - -#### 簡単な方法 - -1. 当社のリポジトリをローカルにクローンします。 - -```shell -git clone https://github.com/wh131462/leetcode-practice.git -``` - -2. 当社のデプロイスクリプトを実行します。 - -```shell -# 使用するパッケージマネージャに従ってスクリプトを実行してください -npm run easy-fork -``` - -3. 完了したら、デプロイが完了します - -### 三.エディタのプラグイン市場にプラグインをインストールする (オプション C) - -まだ開発中... - -## 使い方 - -### CLIの使用 - -#### 1.問題の作成 - `lc` - -##### [1]. 今日の問題の取得 - [`-t`/`--today`] - -ターミナルに `lc` コマンドを入力すると、デフォルトで今日の問題を現在のターミナルの作業ディレクトリに取得します。 - -```shell -lc -# フルコマンド -lc -t -``` - -今日の問題の取得の例: - -```shell -# たとえば、現在の実行ディレクトリがsrcディレクトリの場合 -➜ src git:(dev) ✗ lc -MODE: - - today -問題[2867.統計ツリー内の有効なパスの数]が取得されました! -問題ファイルの場所は:/home/wh131462/workspace/leetcode-practice/src/2867.count-valid-paths-in-a-tree/index.js -``` - -##### [2]. 特定の問題の取得 - [`-i`/`--identity`] - -ターミナルに `lc` コマンドに対応する問題番号を入力すると、指定された問題を現在の作業ディレクトリに取得します。 - -```shell -lc 1314 -# フルコマンド -lc -i 1314 -# ダブルクオーテーション(")で囲むと、指定された番号が正確に指定され、特にスペースが含まれる問題番号に特に便利です。 -lc -i "LCP 50" -``` - -`LCP 50` の取得の例: - -```shell -➜ src git:(dev) ✗ lc "LCP 50" -MODE: identity -問題[LCP 50.宝石の供給]が取得されました! -問題ファイルの場所は:/home/wh131462/workspace/leetcode-practice/src/LCP 50.WHnhjV/index.js -``` - -##### [3]. ランダムな問題の取得 - [`-r`/`--random`] - -ターミナルに `lc` コマンドに `-r` パラメータを追加すると、ランダムな問題を取得し、現在のディレクトリに優先的に存在しない問題を取得します。 - -```shell -# フルコマンド -lc -r -``` - -ランダムな問題の取得の例: - -```shell -➜ src git:(dev) ✗ lc -r -MODE: random -問題[14.最長共通接頭辞]が取得されました! -問題ファイルの場所は:/home/wh131462/workspace/leetcode-practice/src/14.longest-common-prefix/index.js -``` - -##### [4]. 簡易作成モード(対話形式で作成) - [`-e`/`--easy`] - -正確な指示を使用して問題を素早く作成するだけでなく、簡単な作成モードを使用して対話形式で作成することもできます。 - -```shell -lc -e -``` - -簡易モードで今日の問題を作成する例: - -```shell -➜ src git:(dev) ✗ lc -e -? 問題の作成モードを選択してください: today -? ディレクトリ[ /home/wh131462/workspace/leetcode-practice/src ]に問題[ 2867.count-valid-paths-in-a-tree ]を作成しますか? Yes -問題[2867.count-valid-paths-in-a-tree]の作成が完了しました! -ファイルの場所は: /home/wh131462/workspace/leetcode-practice/src/2867.count-valid-paths-in-a-tree/index.js -``` - -#### 2.問題のチェック - `lk` - -##### [1]. 今日の解答をチェックする [`-t`/`--today`] - -`lk` コマンドをターミナルに入力すると、現在の作業ディレクトリで今日の解答をチェックします。 - -```shell -# デフォルトで今日の解答をチェック -lk -# フルコマンド -lk -t -``` - -使用例: - -```shell -# ディレクトリsrcをルートディレクトリとして指定している -workspace/leetcode-practice [dev●] » lk -d src -t -MODE: today -問題[2581.可能なツリールートの数を数える]のチェック結果: -┌─────────┬──────────┬──────────┬───────────┬────────────┬───────────┐ -│ (index) │ テスト結果 │ 期待結果 │ 実行結果 │ 実行時間 │ メモリ使用量 │ -├─────────┼──────────┼──────────┼───────────┼────────────┼───────────┤ -│ 0 │ '不合格' │ '3' │ undefined │ '0.0921ms' │ '2.52 KB' │ -│ 1 │ '不合格' │ '5' │ undefined │ '0.0119ms' │ '2.66 KB' │ -└─────────┴──────────┴──────────┴───────────┴────────────┴───────────┘ -問題の提出ページに移動するにはここをクリックしてください:https://leetcode-cn/problems/count-number-of-possible-root-nodes/ -``` - -##### [2]. 特定の解答をチェックする [`-i`/`--identity` + ``] - -上記のコマンドを使って、`lk`をターミナルに入力し、問題番号を入力すると、指定された問題の解答を現在の作業スペースで確認できます。 - -例えば: - -```shell -# 指定された問題の解答を確認する -lk 2581 -# 完全なコマンド -lk -i 2581 -# スペースが含まれる番号はダブルクォーテーションで囲む -lk "LCP 50" -``` - -解答を確認する例: - -```shell -workspace/leetcode-practice [dev●] » lk -d src 2581 -MODE: identity -問題[2581.可能な根の数を数える]の検査結果: -┌─────────┬──────────┬──────────┬───────────┬────────────┬───────────┐ -│ (index) │ テスト結果 │ 期待結果 │ 実行結果 │ 実行時間 │ メモリ使用量 │ -├─────────┼──────────┼──────────┼───────────┼────────────┼───────────┤ -│ 0 │ '合格' │ '3' │ '3' │ '0.1668ms' │ '2.52 KB' │ -│ 1 │ '合格' │ '5' │ '5' │ '0.0234ms' │ '2.66 KB' │ -└─────────┴──────────┴──────────┴───────────┴────────────┴───────────┘ -問題の提出にジャンプする:https://leetcode.cn/problems/count-number-of-possible-root-nodes/ -``` - -#### [3]. ランダムな解答を確認する [`-r`/`--random`] - -`lk`をターミナルに入力し、`-r`オプションを使用すると、直前にランダムに取得した解答を現在の作業スペースで確認できます。 - -例えば: - -```shell -# 完全なコマンド -lk -r -``` - -使用例: - -```shell -workspace/leetcode-practice [dev●] » lk -r -MODE: random -問題[41.最初の不足している正の数]の検査結果: -┌─────────┬──────────┬──────────┬───────────┬────────────┬───────────┐ -│ (index) │ テスト結果 │ 期待結果 │ 実行結果 │ 実行時間 │ メモリ使用量 │ -├─────────┼──────────┼──────────┼───────────┼────────────┼───────────┤ -│ 0 │ '不合格' │ '3' │ undefined │ '0.0896ms' │ '2.42 KB' │ -│ 1 │ '不合格' │ '2' │ undefined │ '0.0110ms' │ '2.56 KB' │ -│ 2 │ '不合格' │ '1' │ undefined │ '0.0045ms' │ '2.56 KB' │ -└─────────┴──────────┴──────────┴───────────┴────────────┴───────────┘ -問題の提出にジャンプする:https://leetcode.cn/problems/first-missing-positive/ -``` - -> 注意: このコマンドを実行する前に、`lc -r`を実行してランダムな問題を作成してください。 - -#### [4]. 簡易モード(対話式確認) [`-e`/`--easy`] - -`lk`をターミナルに入力し、`-e`オプションを使用すると、対話式で問題を確認できます。 - -例えば: - -```shell -# 完全なコマンド -lk -e -``` - -簡易モードで指定された問題を確認する例: - -```shell -workspace/leetcode-practice [dev●] » lk -e -? モードを選択してください: identity -? 問題番号を入力してください: 41 -? 現在のディレクトリ[ /Users/mac-106/wh131462/workspace/leetcode-practice ]で問題[ 41.first-missing-positive ]を確認しますか? Yes -┌─────────┬──────────┬──────────┬───────────┬────────────┬───────────┐ -│ (index) │ テスト結果 │ 期待結果 │ 実行結果 │ 実行時間 │ メモリ使用量 │ -├─────────┼──────────┼──────────┼───────────┼────────────┼───────────┤ -│ 0 │ '不合格' │ '3' │ undefined │ '0.0969ms' │ '2.42 KB' │ -│ 1 │ '不合格' │ '2' │ undefined │ '0.0139ms' │ '2.56 KB' │ -│ 2 │ '不合格' │ '1' │ undefined │ '0.0051ms' │ '2.56 KB' │ -└─────────┴──────────┴──────────┴───────────┴────────────┴───────────┘ -問題の提出にジャンプする:https://leetcode.cn/problems/first-missing-positive/ -問題[41.first-missing-positive]の確認が完了しました! -ファイルの場所: /Users/mac-106/wh131462/workspace/leetcode-practice/41.first-missing-positive/index.js -``` - -#### 3.問題検索 - `lf` - -開発中... - -#### 4.一般的なオプション - -##### [1]. 現在のプログラミング言語の取得または指定 - [`-l`/`-language` [language]] - -`-l`を引数なしで使用すると、現在のプログラミング言語の設定を取得できます。また、言語のパラメータを指定することで、現在のCLIの言語環境を指定の言語に設定することもできます。 - -```shell -# このパラメータは lc/lk/lf で同様の動作をします -lc -l -lk -l java -``` - -使用例: - -```shell -# 言語環境の取得 -➜ leetcode-practice git:(dev) ✗ lc -l -現在のCLIの言語環境は:javascript -# 言語環境の変更 -➜ leetcode-practice git:(dev) ✗ lc -l java -? CLIの言語環境を設定してください (オプションが一致した場合、Enterキーを押して確認してください) java -言語環境が設定されました: java - -``` - -> 注意: この環境ではテストケースの実行はできません。 - -##### [2]. ディレクトリを指定する - [`-d`/`-directory`] - -`-d`オプ - -ションを使用して、作業ディレクトリの相対パスを指定ディレクトリとして使用できます。指定ディレクトリ内での作成または確認操作が行われます。 - -例えば: - -```shell -# srcディレクトリを指定して生成 -lc -d src -t -# srcディレクトリを指定して確認 -lk -d src -i -``` - -使用例: - -```shell -➜ src git:(dev) ✗ lc -d src -t -MODE: today -問題[2867.木の有効なパスの数を数える]を取得しました! -問題のファイルの場所:/home/wh131462/workspace/leetcode-practice/src/src/2867.count-valid-paths-in-a-tree/index.js -``` - -> 注意: 指定したディレクトリが存在しない場合、空のディレクトリが作成されます。 - -##### [3]. バージョンを確認する [`-V`/`--version`] - -```shell -# lcのバージョンを確認する -lc -V -# lkのバージョンを確認する -lk -V -# lfのバージョンを確認する -lf -V -``` - -lcのバージョンを確認する例: - -```shell -workspace/leetcode-practice [dev●] » lc -V -0.0.0 -``` - -##### [4]. 更新をチェックする [`-u`/`--update`] - -`-u`または`--update`オプションを使用すると、現在のバージョンが最新バージョンでないかどうかをチェックできます。現在のバージョンが最新バージョンでない場合、更新を行うかどうかをユーザーに確認します。 - -```shell -lk -u -lf -u -lc -u -``` - -```shell -? 自動検出された環境は[ プロジェクト ]です。もしそうでない場合は選択してください。そうであれば、Enterを押して確認してください。 project -npmリポジトリのバージョン番号の取得を開始します... -npmリポジトリのバージョン番号の取得が完了しました! -githubリポジトリのバージョン番号の取得を開始します... -githubリポジトリのバージョン番号の取得が完了しました! -ローカルバージョン番号の取得を開始します... -ローカルバージョン番号の取得が完了しました! -現在のバージョン:[ 1.0.0 ] npmパッケージの最新バージョン:[ 1.0.1 ] GitHubのバージョン:[ 1.0.1 ] -? [ プロジェクト ]でアップデート可能なバージョン[ 1.0.1 ]が検出されました。アップデートしますか? (Y/n) Yes -更新が完了しました。お楽しみください! -``` - -### プロジェクトのフォークの使用 - -##### [0]. 依存関係のインストール - -使用する前に、依存関係のインストールを行います。 - -```shell -# 依存関係のインストール -npm install -# または、yarnを使用する(お好みのパッケージ管理ツールを使用できます) -yarn -``` - -プロジェクト内のコマンドは、CLIの使用と同じようにパラメータを指定して実行されますが、`npm run`などのパッケージ管理ツールを使用してスクリプトを実行する必要があります。 - -> 注意: プロジェクト内のスクリプトは、デフォルトで`-d`パラメータが設定されており、プロジェクトのルートディレクトリの`src`ディレクトリを指すようになっています。そのため、すべてのコマンドはデフォルトでsrc内で実行されます。 - -##### [1]. 解答を作成する [`lc`] - -パラメータはCLIの`lc`部分を参照してください: [lc](#1問題の作成---lc) - -例: - -```shell -# yarnで実行 -yarn lc 1314 -``` - -実行結果: - -```shell -# srcディレクトリ内で生成されます -> yarn lc 1314 -yarn run v1.22.19 -$ node bin/lc.js -d src 1314 -MODE: identity -問題[1314.マトリックスブロック和]を取得しました! -問題のファイルの場所:/Users/mac-106/wh131462/workspace/leetcode-practice/src/1314.matrix-block-sum/index.js -✨ Done in 1.06s. -``` - -##### [2]. 解答を確認する [`lk`] - -パラメータはCLIの`lk`部分を参照してください: [lk](#2問題のチェック---lk) - -例: - -```shell -# yarnで実行 -yarn lk 1314 -``` - -実行結果: - -```shell -# srcディレクトリ内で確認されます -> yarn lk 1314 -yarn run v1.22.19 -$ node bin/lk.js -d src 1314 -MODE: identity -問題[1314.マトリックスブロック和]の検査結果: -┌─────────┬──────────┬──────────────────────────────────────┬───────────┬────────────┬───────────┐ -│ (index) │ テスト結果 │ 期待結果 │ 実行結果 │ 実行時間 │ メモリ使用量 │ -├──────── - -─┼──────────┼──────────────────────────────────────┼───────────┼────────────┼───────────┤ -│ 0 │ '不合格' │ '[[12,21,16],[27,45,33],[24,39,28]]' │ undefined │ '0.1487ms' │ '2.47 KB' │ -│ 1 │ '不合格' │ '[[45,45,45],[45,45,45],[45,45,45]]' │ undefined │ '0.0278ms' │ '2.61 KB' │ -└─────────┴──────────┴──────────────────────────────────────┴───────────┴────────────┴───────────┘ -問題の提出にジャンプする:https://leetcode.cn/problems/matrix-block-sum/ -✨ Done in 1.13s. -``` - -##### [3]. 解答を検索する [`lf`] - -パラメータはCLIの`lf`部分を参照してください: [lf](#3問題検索---lf) - -開発中... - -##### [4]. アップデート [`update`] - -プロジェクトのローカルファイルを更新する特定のスクリプトです。プロジェクトの最新機能を同期するために、srcディレクトリ以外のすべてのディレクトリが更新されます。 - -> 注意: 自分で最適化や変更を加えたコードがある場合は、このステップを慎重に行ってください![特殊なケースでのアップグレード方法](./update.md)を参照してください! - -### プラグインの使用 - -開発中... - -## 貢献者 - -[EternalHeart](https://github.com/wh131462) -[SmartTeddy](https://github.com/SmallTeddy) -[Hedwig-Fang](https://github.com/Hedwig-Fang) - -## フィードバック - -もし何か`問題`があったり、`素晴らしい提案`があれば、お気軽に`フィードバックグループ`にご参加いただき、`フィードバック`を提供してください!私たちは迅速に対処いたします! - -![フィードバック](../resources/images/service-qrcode.png) diff --git a/docs/README_KR.md b/docs/README_KR.md deleted file mode 100644 index 5fc660a..0000000 --- a/docs/README_KR.md +++ /dev/null @@ -1,503 +0,0 @@ -# Leetcode practice - -[중국어 문서](./README_CN.md)|[영어 문서](../README.md)|[일본어 문서](./README_JP.md)|**한국어 문서** - -## 소개 - -한 문장으로 설명하면: "에디터에서 `LeetCode` 매일 한 문제를 연습하세요!" - -만약 당신이 에디터에서 당신의 문제 해결을 작성하고 싶다면... - -만약 당신이 매일 한 문제를 간편하고 빠르게 받고 싶다면... - -만약 당신이 자신의 문제 해결 저장소를 만들고 싶다면... - -그러면 `LeetCode 연습`이 당신의 모든 요구를 충족시켜줄 것입니다! - -## 미리보기 - -![CLI-lc](../resources/images/lc-cli-h.png) - -## 어떻게 사용할까요? (3가지 옵션) - -### 옵션 A: CLI (추천) - -가장 좋고 자유로운 사용 방법은 터미널에서 우리의 스캐폴딩을 사용하여 세 가지 핵심 명령어 `lk`, `lf`, `lc`를 사용하여 당신의 문제를 생성하고 검사하는 것입니다. - -[설치](<#전역-스캐폴딩-설치-(옵션-A)>) · [사용](#CLI의-사용) - -### 옵션 B: fork (지원됨) - -`github`의 `fork` 기능을 사용하여 프로젝트의 복제본을 만들고, 프로젝트 내부 명령을 사용하여 문제를 생성하고 검사할 수 있습니다. - -[설치](<#fork를-사용하여-나만의-Leetcode-연습-저장소-복제-(옵션-B)>) · [사용](#fork-프로젝트의-사용) - -### 옵션 C: 플러그인 (지원됨) - -플러그인 시장에서 배포된 `LeetCode 연습` 플러그인을 사용하여 대화 형으로 문제를 생성하고 검사할 수도 있습니다. (`WebStorm` 및 `VS Code`와 같은 두 가지 주요 편집기를 지원합니다.) - -[설치](<#플러그인-마켓에서-플러그인-설치-(옵션-C)>) · [사용](#플러그인의-사용) - -## 준비 사항 - -| 의존성 패키지 | 버전 | -| ------------- | ---- | -| nodejs | lts | -| git | lts | - -> 참고: nodejs:[nodejs 설치 안내](https://nodejs.org/en/learn/getting-started/how-to-install-nodejs) -> -> git:[git 다운로드 링크](https://git-scm.com/downloads) - -## 설치 - -### 전역 스캐폴딩 설치 (옵션 A) - -원하는 npm 패키지 관리 소프트웨어(예: `npm`, `yarn`, `pnpm` 등)를 사용하여 전역 설치를 수행할 수 있습니다. - -```shell -# npm을 사용하여 설치 -npm install -g leetcode-practice -# pnpm을 사용하여 설치 -pnpm install -g leetcode-practice -# yarn을 사용하여 설치 -yarn global install leetcode-practice -``` - -### fork를 사용하여 나만의 Leetcode 연습 저장소 복제 (옵션 B) - -#### 일반적인 방법 - -1. 우리의 프로젝트 주소를 엽니다: [Leetcode 연습](https://github.com/wh131462/leetcode-practice) - -![Leetcode 연습 GitHub](../resources/images/leetcode-practice-github.png) - -2. `fork` 버튼을 클릭합니다. - -다음과 같은 페이지가 표시됩니다. 그런 다음 리포지토리 이름과 설명을 수정하고, `Copy the master branch only`를 선택하십시오. - -![GitHub fork](../resources/images/github-fork.png) - -3. 확인하여 생성을 기다립니다. - -![GitHub fork](../resources/images/github-forking.png) - -4. 생성이 완료되면 리포지토리를 가져와서 문제 해결을 시작할 수 있습니다! - -![GitHub forked](../resources/images/github-forked.png) - -#### 간편한 방법 - -1. 로컬로 리포지토리를 가져옵니다. - -```shell -git clone https://github.com/wh131462/leetcode-practice.git -``` - -2. 배포 스크립트를 실행합니다. - -```shell -# 원하는 패키지 관리자로 스크립트를 실행하십시오. -npm run easy-fork -``` - -3. 배포 완료 - -### 플러그인 마켓에서 플러그인 설치 (옵션 C) - -개발 중... - -## 사용법 - -### CLI의 사용 - -#### 1. 문제 생성 - `lc` - -##### [1]. 오늘의 문제 가져오기 - [`-t`/`--today`] - -터미널에서 `lc` 명령어를 입력하면 현재 터미널 작업 영역에 오늘의 문제가 기본적으로 가져와집니다. - -```shell -lc -# 완전한 명령어 -lc -t -``` - -오늘의 문제 가져오기 예시: - -```shell -# 예를 들어 현재 실행 디렉토리가 src 디렉토리인 경우 -➜ src git:(dev) ✗ lc -MODE: today -문제[2867.통계 트리에서 유효한 경로 수 세기] 가져오기 성공! -문제 파일 주소는: /home/wh131462/workspace/leetcode-practice/src/2867.count-valid-paths-in-a-tree/index.js -``` - -##### [2]. 특정 문제 가져 - -오기 - [`-i`/`--identity`] - -터미널에서 `lc` 명령어 다음에 해당 문제 번호를 입력하면 현재 작업 영역에서 해당 문제를 가져옵니다. - -```shell -lc 1314 -# 완전한 명령어 -lc -i 1314 -# 큰따옴표(")를 사용하여 번호를 둘러싸면 문제 번호를 정확하게 지정할 수 있습니다. 특히 공백이 포함된 문제 번호의 경우에 유용합니다. -lc -i "LCP 50" -``` - -특정 문제 가져오기 예시: - -```shell -➜ src git:(dev) ✗ lc "LCP 50" -MODE: identity -문제[LCP 50.보석 공급] 가져오기 성공! -문제 파일 주소는: /home/wh131462/workspace/leetcode-practice/src/LCP 50.WHnhjV/index.js -``` - -##### [3]. 무작위 문제 가져오기 - [`-r`/`--random`] - -터미널에서 `lc` 명령어 뒤에 `-r` 매개변수를 추가하면 현재 작업 영역에서 무작위 문제를 가져옵니다. 현재 디렉토리에 문제가 없는 경우 우선적으로 가져옵니다. - -```shell -# 완전한 명령어 -lc -r -``` - -무작위 문제 가져오기 예시: - -```shell -➜ src git:(dev) ✗ lc -r -MODE: random -문제[14.가장 긴 공통 접두사] 가져오기 성공! -문제 파일 주소는: /home/wh131462/workspace/leetcode-practice/src/14.longest-common-prefix/index.js -``` - -##### [4]. 간편 생성 모드(대화형 생성) - [`-e`/`--easy`] - -정확한 명령어를 사용하여 빠르게 문제를 생성하는 것 외에도 간단한 생성 모드를 사용하여 대화형으로 문제를 생성할 수도 있습니다. - -```shell -lc -e -``` - -간단한 모드를 사용하여 오늘의 문제 만들기 예시: - -```shell -➜ src git:(dev) ✗ lc -e -? 문제 생성 모드를 선택하십시오: today -? 디렉토리 [ /home/wh131462/workspace/leetcode-practice/src ]에서 문제 [ 2867.count-valid-paths-in-a-tree ]를 만드시겠습니까? Yes -문제[2867.count-valid-paths-in-a-tree] 생성 완료! -파일 주소는: /home/wh131462/workspace/leetcode-practice/src/2867.count-valid-paths-in-a-tree/index.js - -``` - -#### 2. 문제 검사 - `lk` - -##### [1]. 오늘의 문제 검사 [`-t`/`--today`] - -터미널에서 `lk` 명령어를 입력하면 현재 작업 영역에서 오늘의 문제를 검사합니다. - -```shell -# 기본적으로 오늘의 문제를 검사합니다. -lk -# 완전한 명령어 -lk -t -``` - -사용 예시: - -```shell -# src 디렉토리가 루트 디렉토리로 지정되었습니다. -workspace/leetcode-practice [dev●] » lk -d src -t -MODE: today -문제[2581.가능한 트리 루트 수를 세는 것] 검사 결과: -┌─────────┬──────────┬──────────┬───────────┬────────────┬───────────┐ -│ (index) │ 테스트 결과 │ 예상 결과 │ 실행 결과 │ 실행 시간 │ 메모리 사용량 │ -├─────────┼──────────┼──────────┼───────────┼────────────┼───────────┤ -│ 0 │ '미통과' │ '3' │ undefined │ '0.0921ms' │ '2.52 KB' │ -│ 1 │ '미통과' │ '5' │ undefined │ '0.0119ms' │ '2.66 KB' │ -└─────────┴──────────┴──────────┴───────────┴────────────┴───────────┘ -문제 제출로 이동하려면 클릭하십시오: https://leetcode-cn/problems/count-number-of-possible-root-nodes/ -``` - -##### [2]. 특정 문제 검사 [`-i`/`--identity` + ``] - -터미널에서 `lk` 명령어를 입력하고 문제 번호를 입력하면 현재 작업 영역에서 해당 문제를 검사합니다. - -```shell -# 특정 문제 검사 -lk 2581 -# 완전한 명령어 -lk -i 2581 -# 큰따옴표(")를 사용하여 번호를 둘러싸면 문제 번호 - -를 정확하게 지정할 수 있습니다. 특히 공백이 포함된 문제 번호의 경우에 유용합니다. -lk "LCP 50" -``` - -특정 문제 검사 사용 예시: - -```shell -workspace/leetcode-practice [dev●] » lk -d src 2581 -MODE: identity -문제[2581.가능한 트리 루트 수를 세는 것] 검사 결과: -┌─────────┬──────────┬──────────┬───────────┬────────────┬───────────┐ -│ (index) │ 테스트 결과 │ 예상 결과 │ 실행 결과 │ 실행 시간 │ 메모리 사용량 │ -├─────────┼──────────┼──────────┼───────────┼────────────┼───────────┤ -│ 0 │ '통과' │ '3' │ '3' │ '0.1668ms' │ '2.52 KB' │ -│ 1 │ '통과' │ '5' │ '5' │ '0.0234ms' │ '2.66 KB' │ -└─────────┴──────────┴──────────┴───────────┴────────────┴───────────┘ -문제 제출로 이동하려면 클릭하십시오: https://leetcode-cn/problems/count-number-of-possible-root-nodes/ -``` - -##### [3]. 무작위로 가져온 문제 검사 [`-r`/`--random`] - -터미널에서 `lk` 명령어를 입력하고 `-r` 매개변수를 사용하면 최근에 가져온 무작위 문제를 현재 작업 영역에서 검사합니다. - -```shell -# 완전한 명령어 -lk -r -``` - -사용 예시: - -```shell -workspace/leetcode-practice [dev●] » lk -r -MODE: random -문제[41.누락된 첫 번째 양의 정수] 검사 결과: -┌─────────┬──────────┬──────────┬───────────┬────────────┬───────────┐ -│ (index) │ 테스트 결과 │ 예상 결과 │ 실행 결과 │ 실행 시간 │ 메모리 사용량 │ -├─────────┼──────────┼──────────┼───────────┼────────────┼───────────┤ -│ 0 │ '미통과' │ '3' │ undefined │ '0.0896ms' │ '2.42 KB' │ -│ 1 │ '미통과' │ '2' │ undefined │ '0.0110ms' │ '2.56 KB' │ -│ 2 │ '미통과' │ '1' │ undefined │ '0.0045ms' │ '2.56 KB' │ -└─────────┴──────────┴──────────┴───────────┴────────────┴───────────┘ -문제 제출로 이동하려면 클릭하십시오: https://leetcode-cn/problems/first-missing-positive/ -``` - -> 참고: 이 명령을 실행하기 전에 반드시 `lc -r`을 실행하여 무작위 문제를 만들어야 합니다. - -##### [4]. 간편 모드(대화형 검사) [`-e`/`--easy`] - -터미널에서 `lk` 명령어를 입력하고 `-e` 매개변수를 사용하면 대화형으로 문제를 검사할 수 있습니다. - -```shell -# 완전한 명령어 -lk -e -``` - -간단한 모드를 사용하여 특정 문제 검사: - -```shell -workspace/leetcode-practice [dev●] » lk -e -? 검사 모드를 선택하십시오: identity -? 문제 번호를 입력하십시오: 41 -? 현재 디렉토리 [ /Users/mac-106/wh131462/workspace/leetcode-practice ]에서 문제 [ 41.first-missing-positive ]를 검사하시겠습니까? Yes -┌─────────┬──────────┬──────────┬───────────┬────────────┬───────────┐ -│ (index) │ 테스트 결과 │ 예상 결과 │ 실행 결과 │ 실행 시간 │ 메모리 사용량 │ -├─────────┼──────────┼──────────┼───────────┼────────────┼───────────┤ -│ 0 │ '미통과' │ '3' │ undefined │ '0.0969ms' │ '2.42 KB' │ -│ 1 │ '미통과' │ '2' │ undefined │ '0.0139ms' │ '2.56 KB' │ -│ 2 │ '미통과' │ '1' │ undefined │ '0.0051ms' │ '2.56 KB' │ -└─────────┴──────────┴──────────┴───────────┴────────────┴───────────┘ -문제 제출로 이동하려면 클릭하십시오: https://leetcode-cn/problems/first-missing-positive/ -문제[41.first-missing-positive] 검사 완료! -파일 주소는: /Users/mac-106/wh131462/workspace/leetcode-practice/41.first-missing-positive/index.js -``` - -#### 3. 문제 찾기 - `lf` - -- 개발 중... - -##### [1]. 문제 목록 보기[미개발] - -#### 4. 일반 매개변수 - -##### [1]. 현재 프로그래밍 언어 가져오거나 지정하기 - [`-l`/`-language` [언어]] - -`-l`을 인수 없이 사용하여 현재 프로그래밍 언어 설정을 가져올 수 있습니다. 또한 언어 매개변수를 지정하여 현재 CLI의 언어 환경을 지정된 언어로 설정할 수도 있습니다. - -```shell -# lc/lk/lf에서 이 매개변수는 동일하게 동작합니다 -lc -l -lk -l java -``` - -사용 예시: - -```shell -# 언어 환경 가져오기 -➜ leetcode-practice git:(dev) ✗ lc -l -현재 CLI 언어 환경은:javascript -# 언어 환경 변경 -➜ leetcode-practice git:(dev) ✗ lc -l java -? CLI의 언어 환경을 설정하시겠습니까 (옵션과 일치하는 경우 Enter 키를 눌러 확인하십시오) java -언어 환경이 설정되었습니다: java - -``` - -> 참고: 이 환경에서는 테스트 케이스를 실행할 수 없습니다. - -##### [2]. 디렉터리 지정 - [`-d`/`-directory`] - -`생성` 및 `검사` 명령은 현재 작업 디렉터리를 기준으로 상대 주소를 지정하는 `-d` 매개변수를 사용할 수 있습니다. 지정된 디렉터리에서 생성 또는 검사 작업이 수행됩니다. - -```shell -# 현재 디렉터리의 하위 디렉터리 src를 생성 디렉터리로 지정 -lc -d src -t -# 현재 디렉터리의 하위 디렉터리 src를 검사 디렉터리로 지정 -lk -d src -i -``` - -사용 예시: - -```shell -➜ src git:(dev) ✗ lc -d src -t -MODE: today -문제[2867.트리에서 유효한 경로 수 세기]가 생성되었습니다! -문제 파일 주소는:/home/wh131462/workspace/leetcode-practice/src/src/2867.count-valid-paths-in-a-tree/index.js -``` - -> 참고: 지정된 디렉터리가 존재하지 않으면 빈 디렉터리가 자동으로 생성됩니다. - -##### [3]. 버전 확인 [`-V`/`--version`] - -```shell -# lc 버전 확인 -lc -V -# lk 버전 확인 -lk -V -# lf 버전 확인 -lf -V -``` - -lc 버전 확인 예시: - -```shell -workspace/leetcode-practice [dev●] » lc -V -0.0.0 -``` - -##### [4]. 업데이트 확인 [`-u`/`--update`] - -`-u` 또는 `--update` 매개변수를 사용하여 현재 버전이 최신 버전인지 확인할 수 있습니다. 현재 버전이 최신 버전이 아닌 경우 사용자에게 업데이트를 진행할지 여부를 알립니다. - -```shell -lk -u -lf -u -lc -u -``` - -```shell -? 자동 감지된 환경은 [프로젝트]입니다. 아닌 경우 선택하고, 맞으면 엔터를 누르십시오. 프로젝트 -npm 저장소에서 버전 번호 가져 오기 시작 ... -npm 저장소의 버전 번호를 성공적으로 가져 왔습니다! -github 저장소의 버전 번호 가져 오기 시작 ... -github 저장소의 버전 번호를 성공적으로 가져 왔습니다! -로컬 버전 번호 가져 오기 시작 ... -로컬 버전 번호가 성공적으로 가져 왔습니다! -현재 버전 : [1.0.0] npm 패키지의 최신 버전 : [1.0.1] github 버전 : [1.0.1] -? [프로젝트]에서 업데이트 가능한 버전 [1.0.1] 감지되었습니다. 업데이트를 수행 하시겠습니까? (Y/n) Yes -업데이트 완료 ~ 즐거운 사용 되세요 ~ -``` - -### fork 프로젝트의 사용 - -##### [0]. 의존성 설치 - -사용하기 전에 의존성을 설치하기 위해 패키지 관리 도구를 사용하세요. - -```shell -# 의존성 설치 -npm install -# 또는 yarn (원하는 패키지 관리 도구를 사용할 수 있습니다.) -yarn -``` - -fork된 프로젝트의 명령어는 CLI의 사용 방법과 매개변수가 동일하지만, 스크립트를 실행하기 위해 `npm run`과 같은 패키지 관리 도구를 사용해야 합니다. - -> 참고: 프로젝트의 스크립트는 "src" 디렉토리를 기본적으로 `-d` 매개변수로 지정하여 프로젝트의 루트 디렉토리에 있는 파일을 실행하도록 되어 있습니다. 따라서 모든 명령은 기본적으로 src에서 실행됩니다. - -##### [1]. 문제 생성 [`lc`] - -CLI의 `lc` 섹션을 참고하여 매개변수를 사용할 수 있습니다: [lc](#1-문제-생성---lc) - -간단한 사용 예시: - -```shell -# yarn을 사용하여 실행 -yarn lc 1314 -``` - -실행 결과: - -```shell -# src 디렉토리에 생성됩니다 -> yarn lc 1314 -yarn run v1.22.19 -$ node bin/lc.js -d src 1314 -MODE: identity -문제[1314.행렬 블록 합]이 생성되었습니다! -문제 파일 주소는: /Users/mac-106/wh131462/workspace/leetcode-practice/src/1314.matrix-block-sum/index.js -✨ Done in 1.06s. -``` - -##### [2]. 문제 검사 [`lk`] - -CLI의 `lk` 섹션을 참고하여 매개변수를 사용할 수 있습니다: [lk](#2-문제-검사---lk) - -간단한 사용 예시: - -```shell -# yarn을 사용하여 실행 -yarn lk 1314 -``` - -실행 결과: - -```shell -# src 디렉토리에서 검사됩니다 -> yarn lk 1314 -yarn run v1.22.19 -$ node bin/lk.js -d src 1314 -MODE: identity -문제[1314.행렬 블록 합] 검사 결과: -┌─────────┬──────────┬──────────────────────────────────────┬───────────┬────────────┬───────────┐ -│ (index) │ 테스트 결과 │ 예상 결과 │ 실행 결과 │ 실행 시간 │ 메모리 사용량 │ -├─────────┼──────────┼──────────────────────────────────────┼───────────┼────────────┼───────────┤ -│ 0 │ '미통과' │ '[[12,21,16],[27,45,33],[24,39,28]]' │ undefined │ '0.1487ms' │ '2.47 KB' │ -│ 1 │ '미통과' │ '[[45,45,45],[45,45,45],[45,45,45]]' │ undefined │ '0.0278ms' │ '2.61 KB' │ -└─────────┴──────────┴──────────────────────────────────────┴───────────┴────────────┴───────────┘ -문제 제출로 이동하려면 클릭하십시오: https://leetcode-cn/problems/matrix-block-sum/ -✨ Done in 1.13s. -``` - -##### [3]. 문제 찾기 [`lf`] - -CLI의 `lf` 섹션을 참고하여 매개변수를 사용할 수 있습니다: [lf](#3-문제-찾기---lf) - -미개발... - -##### [4]. 업데이트 [`update`] - -로컬 프로젝트를 업데이트하는 특정 스크립트는 모든 src 디렉토리가 아닌 업데이트를 위해 모든 비-src 디렉토리를 업데이트합니다. - -> 참고: 자체적으로 최적화된 변경 코드가 있는 경우 이 단계를 신중하게 수행하십시오! 특별한 경우의 업그레이드 방법은 [특별한 경우의 업그레이드 방법](./update.md)을 참조하십시오! - -### 플러그인의 사용 - -미개발... - -## 기여자 - -[EternalHeart](https://github.com/wh131462) -[SmartTeddy](https://github.com/SmallTeddy) -[Hedwig-Fang](https://github.com/Hedwig-Fang) - -## 피드백 - -사용 중에 `문제`가 있거나 `좋은 제안`이 있으면 언제든지 `피드백 그룹`에 참여하여 `피드백`을 제공하십시오! 우리는 신속하게 처리할 것입니다! - -![피드백 그룹](../resources/images/service-qrcode.png) diff --git a/docs/update.md b/docs/update.md deleted file mode 100644 index d8d2b17..0000000 --- a/docs/update.md +++ /dev/null @@ -1,11 +0,0 @@ -# 中文说明 - -## 特殊情况下的升级方案 - -待编写... - -# English Explanation - -## Upgrade Plan for Special Cases - -To be written... diff --git a/resources/images/create-finish.png b/resources/images/create-finish.png new file mode 100644 index 0000000000000000000000000000000000000000..fd6a5148a69d87c4ee054cdbd9eec396416f719c GIT binary patch literal 157599 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 literal 0 HcmV?d00001 diff --git a/resources/images/create-new-by-template.png b/resources/images/create-new-by-template.png new file mode 100644 index 0000000000000000000000000000000000000000..06db0bfdcd1cecc02ef92e6c27fecd1c85096a1e GIT binary patch literal 89039 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�L+F<9uj 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 XZz-}x+MqopPoi5{ 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 hLd^YUPPPZ^Z4qD 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
  • jTLj?Hvbar_@DlV)wKWrYk*Bo33t^uyYzTF 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 literal 0 HcmV?d00001 diff --git a/resources/images/generating-your-template.png b/resources/images/generating-your-template.png new file mode 100644 index 0000000000000000000000000000000000000000..612d93f221b10743c1ee65b40b759ef929c33924 GIT binary patch literal 48567 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 z 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 O5b<|hczqc0@_zsqV4oiV literal 0 HcmV?d00001 diff --git a/resources/images/github-fork.png b/resources/images/github-fork.png deleted file mode 100644 index a4ac9b8fafb3c4072c7b8b442ab5ec02809ce8de..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 96946 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 U%svaiXwow?^*KDho1g}zERGnHNOw}a1h!qXOH zJ}aLQGu5IPw6HKz*w)aqAiBfoxCp2s1U&M2(&23ti1l!AZoxGY>* z8+U5hJ&6V-H+2Fku#+foN59hK;5P}58Sl&bwsD8)_bf$(Br2)vhfx7g)xAD??R18! zNef5$PKXE2ry*xLp{O#_0Hz;0uYBEV&+A&?0JYBW(&Ur<2A7KtrWIcq=h<&KN zH|m&Me0o~1xb zb*jq^|4R-rDkaUgwDXmK@o_D!g>6e7gl1AQ^D#GU+^NV)pp+mC)dCR@S5x)u_*Kx# zY5G(-@Ve-X(9FmBcWz(a_oH`)Z75642g~VXqH#CiQCfVGW8WoXdH*A0kLY-hdni&{ z?AE=D<}_CXu(n9D@l>ulVbteDYbqo^q!8fy-Iv$HWiR4K-|8CD`B9Qi?RZUh&43!J z=p@M&MU6JpV^b-BemN7-|JfIRH8zg#14B^@bZImU$_;8UvgX~Or8 zR?_(Yvu^kbMB({7qy+UW%W2$|-YwqOS3O!8zP$ErK%jF&-&;i@qTY_ICkTJ2?AHu{ zF++M;yt2aif{)e?$CV{ZC&{J}5ui`iFVpc8R?HkKM^mx(Xs>VId7iSxjd&y)W%kkA zAjoc`ze$@%lc-6P;sn%l?wg+^gEH#5LqYvMW@Zj&Q9TCkaWjoREP1LcwngaKBo{#RVxsv_vAzOL2z)W{rnvO)Vxv%R z@l05E6kroFQBF7BFLG@7LX68DPWlkzItQQ1mlbwKuz zZ?9EKy-)R(2+yJ3&8jI%@fQ6X7&aD#=ub_ZFy>9c z9r`xP=l&3+;L_ubiv7KtC%GenyDc1h*h3flfj5f^5|z;IZfJWvgOYREtRR8w8MniX zm)^;s;=3{=`@wo9y$ad&gA##-9k$FcrB6$E)9==2DfxWO2XQy|WsB0VS3>Bg0NppZ zm#BJQIRd4OJqqEai*MGMSRw6sqgNrvurGBf4)^kdRXvVh-S?M@F>qEDD@4s3A{G^} zC8Tl0;)^A^LSYWDR}Ob`2f8X36sbQ%F4SvZVoEvaa0TA2^(f?Y)NZ^Oc%1EXu>`ey zT*q!d@b%VoT&`W`& zzO7FC>G!m{R)wgped^(Yp?zA5u5)iy#3n(28c1dHir9_(eweW;x-8m21yzSEKiB6t zl$;~e`j}ziOZQAgQ2`7{FMIN>m62sE(&*=aJMQk1WTPwhLB~mOg!-g5+IQO8gsk6O z&YWQMnbVOk-EcAP!|(nb{o7#NSu`fBGkvBirLsFgSs16rzncM!HGk@X({8li@O8As zz0Z4)*-9_F`|T_lJ@7baU$;u$iFXjBKUNFdsGF?6xap4~ylRQEfEe%8hOdc-D0&Nt zx2NdAfEi0DVdbF_7x6Fdg@macvX?_=v|hR-=fl|9F^q&hJ>pZ3|LMUC;mX=JL;&QL z#gomOy^*$X*Qu8x{Q-KO>wOv0G@*X@)R^n|BoI>U-ykqw9M)fufP$G!Ki=_^xoX`{ zu3<)FQZLWy(zEHYiLQ??RVpLIpMEwE+zhE4CB(o`JH-i>Zj-(x zwB5SO{_aQ_VkWe*u#8}Lpy1v_k`8;y z?v{AO-@g(2;O#gw@Pf3nokidUDM_ZCQ9e~ZrMavW8}rm-sNd~0j@~$|Vr_tV1^ps} zyBz3y23E?hW>Z$4?S771#7~I{rZ~q-I!}&uc&a9ss8}@*W!{VA&g{&!*r-TG^Jbl31bR#>m(6TnHJ^OcxtyH zrGV;&wJJSeh&K-?21H!8yQs>YmBHz)x{|phm}TzOS}qYUVt=kJI8mUnc@z3cSt)YGQVk?fgCc;-g}vD zhO$T=o#!lm*qL}2zC2XIT`^fOZ}^7dMm;?WavC`OITr(Zk@tY?;0j>4F$wZJWjJ^#_FL z>dV#rMQ5h?itd_yt~;9({IsIVooa5qbOrnLi@v!JjG$tP zOBn+nJ3UwW+GIwREBO&L#oG7#r#djt`mtSM_QUqNGk)_IPh=-$SGdwFjS!asEUsDO07zA%t-5aQJ_8iLF9g$cs2gau*?-x!J9%p z1q6CDOWod7@u0gHpSih?Rie->gQ2YGo7rhB0e=bP)t7v1=r5DkoKnIwb{%%_j`l7J z=m9M!-ODDQ}pM3bN z$BFDeGAfX#?#mhxVUrpMv$v+VQzmEuvAgf*P)HKkBRM&iD(l9u0(xnB!@WMH0kPRO}73+Ic*V z@4T!9q8zkbUih@mvB90i@>ooZ1I#S2UNdEFGh4COVeX~=gLFjJX1Sv{*+_32W*@vv zjo+P$ia105x9KmHqee(P7weTp((YJX+6nFN{@O7l0;x103EI4M&z^Jknlkouor=`l zv^cEsKkU{Hl!7D-^_64E>z#>)?7bjjD5t=90+rs6rek&OU1#DUz{h2&tp)3HDdK+$ z35KHdrTue4<6oG+cAfh^{nh_U=HI<2yY}Bl|3BOTDLUay4MQewjYm_7J(5x+fA2x3 zr~ju=9*)@4Gk=Ufu_bAdHkqQ&s{#l#8r|)M{42G8q2SZ2^X2Y}bsu#J#3339FBxXm zaXq_(Hf(H3!E^t=Jbdk+@}P3{$Z?dzH{FDsFff6*&f?)S&b zy^JgHkyhy}=Yv#X;YYII4p7bORsBYV*Lj8n$jdKzYwD4^B-6|9b5R^+NW0dx6}vX2X}3hH^;S(=Mc+)zi2HEm3M2 z=b!N(Iv&6OM(3wx=~D^Hvgq`vLUK-(+h1{0?^-I;XiLuB1rDdam;<&Ee1m4Y4fZ4f$$i6x_gM@e>zov>q^Za}KMRdjf zkA#d+QgK?oup4jXUY^HvUiabQPfk-jY)uO1M$#@5s_uLJ>2-KECfY;Z;WF@$8g ztPgBa9kLwHx>v#L4IDFM9-iPmTAiP2fJdgw-8c1PQC_Gs>8|_|`Yht-+4{MLT6J3K z(zfFOVHBG?YNwx^b5VI16QI+;1D)*6IQsEjXJg7N7P#R^*v#;&u&JGD=A{wtf%_}h z=jt|h>?;z9I%f7E)qe&>zB#4w%j@-=396e;BWDkKmC4W1cgQ|0@Y>vCcrkt@CC6oO zwC6231z7GWJM2-m{-FBdtNsQE3vnfy`vHO27DnW7Z21y=3IPZU>gz%e;)gq@a$4a6 z&TiQxzw9NI#=U&FzlZ6f2=9vGx#^5(F;N9XbtEvVcYFdqy?_%P42@3B8PAgDCdb?J zTBz>e@OL2rgZJ@F$E%d7RuA$F%Gkf7Fp^?cDp!XFA22pnQW?aU- z{;2_5@H+>wYJZB#Vs zsT;B%YH7+vh^Z7vy=*SiJ(c5Q&MmRGU*9h`j2U{i@7VY=?aS4|Q$|pa<*wRF&^Tl- zeCXDR08>39WVT#KQC{Kq%89JvvOF@wvUmUjS⇒xzl?kCAUC%z_8X!KnLl3u74d1kGPFPA-fL!I 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 diff --git a/resources/images/github-forked.png b/resources/images/github-forked.png deleted file mode 100644 index 2d4376f0a07029b19b8b4b35fb9aa23e3e5ea3d8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 162470 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