Merge pull request #107 from covespace/replace_dtm_with_git

replace dtm with git
This commit is contained in:
boob.yang 2023-05-22 13:18:35 +08:00 committed by GitHub
commit 1ea353cfd9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 232 additions and 388 deletions

163
package-lock.json generated
View File

@ -1,12 +1,12 @@
{
"name": "devchat",
"version": "0.0.34",
"version": "0.0.45",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "devchat",
"version": "0.0.34",
"version": "0.0.45",
"dependencies": {
"@emotion/react": "^11.10.8",
"@mantine/core": "^6.0.10",
@ -16,6 +16,7 @@
"@mantine/tiptap": "^6.0.10",
"@tabler/icons-react": "^2.17.0",
"@tiptap/extension-link": "^2.0.3",
"@tiptap/pm": "^2.0.0",
"@tiptap/react": "^2.0.3",
"@tiptap/starter-kit": "^2.0.3",
"axios": "^1.3.6",
@ -28,6 +29,7 @@
"react-markdown": "^8.0.7",
"react-syntax-highlighter": "^15.5.0",
"shell-escape": "^0.2.0",
"string-argv": "^0.3.2",
"uuid": "^9.0.0"
},
"devDependencies": {
@ -2727,7 +2729,6 @@
"version": "4.2.9",
"resolved": "https://registry.npmjs.org/@linaria/core/-/core-4.2.9.tgz",
"integrity": "sha512-ELcu37VNVOT/PU0L6WDIN+aLzNFyJrqoBYT0CucGOCAmODbojUMCv8oJYRbWzA3N34w1t199dN4UFdfRWFG2rg==",
"peer": true,
"dependencies": {
"@linaria/logger": "^4.0.0",
"@linaria/tags": "^4.3.4",
@ -2741,7 +2742,6 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/@linaria/logger/-/logger-4.0.0.tgz",
"integrity": "sha512-YnBq0JlDWMEkTOK+tMo5yEVR0f5V//6qMLToGcLhTyM9g9i+IDFn51Z+5q2hLk7RdG4NBPgbcCXYi2w4RKsPeg==",
"peer": true,
"dependencies": {
"debug": "^4.1.1",
"picocolors": "^1.0.0"
@ -2754,7 +2754,6 @@
"version": "4.3.4",
"resolved": "https://registry.npmjs.org/@linaria/tags/-/tags-4.3.4.tgz",
"integrity": "sha512-W8zaLKtC4YFCwkZ9DMu2enCiD/zGyYmFSTzEvJP7ZycdftMizoOrWNOyF9kITyjGdq+jZvAXJz0BZDT6axgIRg==",
"peer": true,
"dependencies": {
"@babel/generator": "^7.20.4",
"@linaria/logger": "^4.0.0",
@ -2768,7 +2767,6 @@
"version": "4.3.3",
"resolved": "https://registry.npmjs.org/@linaria/utils/-/utils-4.3.3.tgz",
"integrity": "sha512-xSe/tod9A44aIMbtds9fWLNe2TT080lLdRSaoqX+UHsBWqClkrw5cXEt3lm8Vr4hZiXT2r/1AldjuHb9YbUlMg==",
"peer": true,
"dependencies": {
"@babel/core": "^7.20.2",
"@babel/plugin-proposal-export-namespace-from": "^7.18.9",
@ -3061,7 +3059,6 @@
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/@remirror/core-constants/-/core-constants-2.0.1.tgz",
"integrity": "sha512-ZR4aihtnnT9lMbhh5DEbsriJRlukRXmLZe7HmM+6ufJNNUDoazc75UX26xbgQlNUqgAqMcUdGFAnPc1JwgAdLQ==",
"peer": true,
"dependencies": {
"@babel/runtime": "^7.21.0"
}
@ -3070,7 +3067,6 @@
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/@remirror/core-helpers/-/core-helpers-2.0.3.tgz",
"integrity": "sha512-LqIPF4stGG69l9qu/FFicv9d9B+YaItzgDMC5A0CEvDQfKkGD3BfabLmfpnuWbsc06oKGdTduilgWcALLZoYLg==",
"peer": true,
"dependencies": {
"@babel/runtime": "^7.21.0",
"@linaria/core": "4.2.9",
@ -3093,7 +3089,6 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@remirror/types/-/types-1.0.1.tgz",
"integrity": "sha512-VlZQxwGnt1jtQ18D6JqdIF+uFZo525WEqrfp9BOc3COPpK4+AWCgdnAWL+ho6imWcoINlGjR/+3b6y5C1vBVEA==",
"peer": true,
"dependencies": {
"type-fest": "^2.19.0"
}
@ -3102,7 +3097,6 @@
"version": "2.19.0",
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz",
"integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==",
"peer": true,
"engines": {
"node": ">=12.20"
},
@ -3444,7 +3438,6 @@
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/@tiptap/pm/-/pm-2.0.3.tgz",
"integrity": "sha512-I9dsInD89Agdm1QjFRO9dmJtU1ldVSILNPW0pEhv9wYqYVvl4HUj/JMtYNqu2jWrCHNXQcaX/WkdSdvGJtmg5g==",
"peer": true,
"dependencies": {
"prosemirror-changeset": "^2.2.0",
"prosemirror-collab": "^1.3.0",
@ -3803,14 +3796,12 @@
"node_modules/@types/object.omit": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/@types/object.omit/-/object.omit-3.0.0.tgz",
"integrity": "sha512-I27IoPpH250TUzc9FzXd0P1BV/BMJuzqD3jOz98ehf9dQqGkxlq+hO1bIqZGWqCg5bVOy0g4AUVJtnxe0klDmw==",
"peer": true
"integrity": "sha512-I27IoPpH250TUzc9FzXd0P1BV/BMJuzqD3jOz98ehf9dQqGkxlq+hO1bIqZGWqCg5bVOy0g4AUVJtnxe0klDmw=="
},
"node_modules/@types/object.pick": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/@types/object.pick/-/object.pick-1.3.2.tgz",
"integrity": "sha512-sn7L+qQ6RLPdXRoiaE7bZ/Ek+o4uICma/lBFPyJEKDTPTBP1W8u0c4baj3EiS4DiqLs+Hk+KUGvMVJtAw3ePJg==",
"peer": true
"integrity": "sha512-sn7L+qQ6RLPdXRoiaE7bZ/Ek+o4uICma/lBFPyJEKDTPTBP1W8u0c4baj3EiS4DiqLs+Hk+KUGvMVJtAw3ePJg=="
},
"node_modules/@types/parse-json": {
"version": "4.0.0",
@ -3938,8 +3929,7 @@
"node_modules/@types/throttle-debounce": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/@types/throttle-debounce/-/throttle-debounce-2.1.0.tgz",
"integrity": "sha512-5eQEtSCoESnh2FsiLTxE121IiE60hnMqcb435fShf4bpLRjEu1Eoekht23y6zXS9Ts3l+Szu3TARnTsA0GkOkQ==",
"peer": true
"integrity": "sha512-5eQEtSCoESnh2FsiLTxE121IiE60hnMqcb435fShf4bpLRjEu1Eoekht23y6zXS9Ts3l+Szu3TARnTsA0GkOkQ=="
},
"node_modules/@types/unist": {
"version": "2.0.6",
@ -4736,7 +4726,6 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/babel-merge/-/babel-merge-3.0.0.tgz",
"integrity": "sha512-eBOBtHnzt9xvnjpYNI5HmaPp/b2vMveE5XggzqHnQeHJ8mFIBrBv6WZEVIj5jJ2uwTItkqKo9gWzEEcBxEq0yw==",
"peer": true,
"dependencies": {
"deepmerge": "^2.2.1",
"object.omit": "^3.0.0"
@ -4749,7 +4738,6 @@
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-2.2.1.tgz",
"integrity": "sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA==",
"peer": true,
"engines": {
"node": ">=0.10.0"
}
@ -5139,7 +5127,6 @@
"version": "2.1.10",
"resolved": "https://registry.npmjs.org/case-anything/-/case-anything-2.1.10.tgz",
"integrity": "sha512-JczJwVrCP0jPKh05McyVsuOg6AYosrB9XWZKbQzXeDAm2ClE/PJE/BcrrQrVyGYH7Jg8V/LDupmyL4kFlVsVFQ==",
"peer": true,
"engines": {
"node": ">=12.13"
},
@ -5641,8 +5628,7 @@
"node_modules/crelt": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/crelt/-/crelt-1.0.5.tgz",
"integrity": "sha512-+BO9wPPi+DWTDcNYhr/W90myha8ptzftZT+LwcmUbbok0rcP/fequmFYCw8NMoH7pkAZQzU78b3kYrlua5a9eA==",
"peer": true
"integrity": "sha512-+BO9wPPi+DWTDcNYhr/W90myha8ptzftZT+LwcmUbbok0rcP/fequmFYCw8NMoH7pkAZQzU78b3kYrlua5a9eA=="
},
"node_modules/cross-spawn": {
"version": "7.0.3",
@ -5732,8 +5718,7 @@
"node_modules/dash-get": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/dash-get/-/dash-get-1.0.2.tgz",
"integrity": "sha512-4FbVrHDwfOASx7uQVxeiCTo7ggSdYZbqs8lH+WU6ViypPlDbe9y6IP5VVUDQBv9DcnyaiPT5XT0UWHgJ64zLeQ==",
"peer": true
"integrity": "sha512-4FbVrHDwfOASx7uQVxeiCTo7ggSdYZbqs8lH+WU6ViypPlDbe9y6IP5VVUDQBv9DcnyaiPT5XT0UWHgJ64zLeQ=="
},
"node_modules/data-uri-to-buffer": {
"version": "4.0.1",
@ -7575,7 +7560,6 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
"integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
"peer": true,
"dependencies": {
"is-plain-object": "^2.0.4"
},
@ -8627,7 +8611,6 @@
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-4.0.1.tgz",
"integrity": "sha512-C7bfi1UZmoj8+PQx22XyeXCuBlokoyWQL5pWSP+EI6nzRylyThouddufc2c1NDIcP9k5agmN9fLpA7VNJfIiqw==",
"peer": true,
"dependencies": {
"uc.micro": "^1.0.1"
}
@ -8792,7 +8775,6 @@
"version": "13.0.1",
"resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-13.0.1.tgz",
"integrity": "sha512-lTlxriVoy2criHP0JKRhO2VDG9c2ypWCsT237eDiLqi09rmbKoUetyGHq2uOIRoRS//kfoJckS0eUzzkDR+k2Q==",
"peer": true,
"dependencies": {
"argparse": "^2.0.1",
"entities": "~3.0.1",
@ -8808,7 +8790,6 @@
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz",
"integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==",
"peer": true,
"engines": {
"node": ">=0.12"
},
@ -8819,8 +8800,7 @@
"node_modules/mdurl": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz",
"integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==",
"peer": true
"integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g=="
},
"node_modules/media-typer": {
"version": "0.3.0",
@ -9526,7 +9506,6 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/object.omit/-/object.omit-3.0.0.tgz",
"integrity": "sha512-EO+BCv6LJfu+gBIF3ggLicFebFLN5zqzz/WWJlMFfkMyGth+oBkhxzDl0wx2W4GkLzuQs/FsSkXZb2IMWQqmBQ==",
"peer": true,
"dependencies": {
"is-extendable": "^1.0.0"
},
@ -9538,7 +9517,6 @@
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
"integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==",
"peer": true,
"dependencies": {
"isobject": "^3.0.1"
},
@ -9651,8 +9629,7 @@
"node_modules/orderedmap": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/orderedmap/-/orderedmap-2.1.0.tgz",
"integrity": "sha512-/pIFexOm6S70EPdznemIz3BQZoJ4VTFrhqzu0ACBqBgeLsLxq8e6Jim63ImIfwW/zAD1AlXpRMlOv3aghmo4dA==",
"peer": true
"integrity": "sha512-/pIFexOm6S70EPdznemIz3BQZoJ4VTFrhqzu0ACBqBgeLsLxq8e6Jim63ImIfwW/zAD1AlXpRMlOv3aghmo4dA=="
},
"node_modules/p-limit": {
"version": "3.1.0",
@ -10169,7 +10146,6 @@
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/prosemirror-changeset/-/prosemirror-changeset-2.2.0.tgz",
"integrity": "sha512-QM7ohGtkpVpwVGmFb8wqVhaz9+6IUXcIQBGZ81YNAKYuHiFJ1ShvSzab4pKqTinJhwciZbrtBEk/2WsqSt2PYg==",
"peer": true,
"dependencies": {
"prosemirror-transform": "^1.0.0"
}
@ -10178,7 +10154,6 @@
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/prosemirror-collab/-/prosemirror-collab-1.3.0.tgz",
"integrity": "sha512-+S/IJ69G2cUu2IM5b3PBekuxs94HO1CxJIWOFrLQXUaUDKL/JfBx+QcH31ldBlBXyDEUl+k3Vltfi1E1MKp2mA==",
"peer": true,
"dependencies": {
"prosemirror-state": "^1.0.0"
}
@ -10187,7 +10162,6 @@
"version": "1.5.1",
"resolved": "https://registry.npmjs.org/prosemirror-commands/-/prosemirror-commands-1.5.1.tgz",
"integrity": "sha512-ga1ga/RkbzxfAvb6iEXYmrEpekn5NCwTb8w1dr/gmhSoaGcQ0VPuCzOn5qDEpC45ql2oDkKoKQbRxLJwKLpMTQ==",
"peer": true,
"dependencies": {
"prosemirror-model": "^1.0.0",
"prosemirror-state": "^1.0.0",
@ -10198,7 +10172,6 @@
"version": "1.8.0",
"resolved": "https://registry.npmjs.org/prosemirror-dropcursor/-/prosemirror-dropcursor-1.8.0.tgz",
"integrity": "sha512-TZMitR8nlp9Xh42pDYGcWopCoFPmJduoyGJ7FjYM2/7gZKnfD41TIaZN5Q1cQjm6Fm/P5vk/DpVYFhS8kDdigw==",
"peer": true,
"dependencies": {
"prosemirror-state": "^1.0.0",
"prosemirror-transform": "^1.1.0",
@ -10209,7 +10182,6 @@
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/prosemirror-gapcursor/-/prosemirror-gapcursor-1.3.1.tgz",
"integrity": "sha512-GKTeE7ZoMsx5uVfc51/ouwMFPq0o8YrZ7Hx4jTF4EeGbXxBveUV8CGv46mSHuBBeXGmvu50guoV2kSnOeZZnUA==",
"peer": true,
"dependencies": {
"prosemirror-keymap": "^1.0.0",
"prosemirror-model": "^1.0.0",
@ -10221,7 +10193,6 @@
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/prosemirror-history/-/prosemirror-history-1.3.1.tgz",
"integrity": "sha512-YMV/IWBZ+LZSfaNcBbPcaQUiAiJRYFyJW2aapuNzL8nhIRsI7fIO0ykJFSe802+mWeoTsVJ1jxvRWPYqaUqljQ==",
"peer": true,
"dependencies": {
"prosemirror-state": "^1.2.2",
"prosemirror-transform": "^1.0.0",
@ -10233,7 +10204,6 @@
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/prosemirror-inputrules/-/prosemirror-inputrules-1.2.0.tgz",
"integrity": "sha512-eAW/M/NTSSzpCOxfR8Abw6OagdG0MiDAiWHQMQveIsZtoKVYzm0AflSPq/ymqJd56/Su1YPbwy9lM13wgHOFmQ==",
"peer": true,
"dependencies": {
"prosemirror-state": "^1.0.0",
"prosemirror-transform": "^1.0.0"
@ -10243,7 +10213,6 @@
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/prosemirror-keymap/-/prosemirror-keymap-1.2.1.tgz",
"integrity": "sha512-kVK6WGC+83LZwuSJnuCb9PsADQnFZllt94qPP3Rx/vLcOUV65+IbBeH2nS5cFggPyEVJhGkGrgYFRrG250WhHQ==",
"peer": true,
"dependencies": {
"prosemirror-state": "^1.0.0",
"w3c-keyname": "^2.2.0"
@ -10253,7 +10222,6 @@
"version": "1.10.1",
"resolved": "https://registry.npmjs.org/prosemirror-markdown/-/prosemirror-markdown-1.10.1.tgz",
"integrity": "sha512-s7iaTLiX+qO5z8kF2NcMmy2T7mIlxzkS4Sp3vTKSYChPtbMpg6YxFkU0Y06rUg2WtKlvBu7v1bXzlGBkfjUWAA==",
"peer": true,
"dependencies": {
"markdown-it": "^13.0.1",
"prosemirror-model": "^1.0.0"
@ -10263,7 +10231,6 @@
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/prosemirror-menu/-/prosemirror-menu-1.2.1.tgz",
"integrity": "sha512-sBirXxVfHalZO4f1ZS63WzewINK4182+7dOmoMeBkqYO8wqMBvBS7wQuwVOHnkMWPEh0+N0LJ856KYUN+vFkmQ==",
"peer": true,
"dependencies": {
"crelt": "^1.0.0",
"prosemirror-commands": "^1.0.0",
@ -10275,7 +10242,6 @@
"version": "1.19.0",
"resolved": "https://registry.npmjs.org/prosemirror-model/-/prosemirror-model-1.19.0.tgz",
"integrity": "sha512-/CvFGJnwc41EJSfDkQLly1cAJJJmBpZwwUJtwZPTjY2RqZJfM8HVbCreOY/jti8wTRbVyjagcylyGoeJH/g/3w==",
"peer": true,
"dependencies": {
"orderedmap": "^2.0.0"
}
@ -10284,7 +10250,6 @@
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/prosemirror-schema-basic/-/prosemirror-schema-basic-1.2.1.tgz",
"integrity": "sha512-vYBdIHsYKSDIqYmPBC7lnwk9DsKn8PnVqK97pMYP5MLEDFqWIX75JiaJTzndBii4bRuNqhC2UfDOfM3FKhlBHg==",
"peer": true,
"dependencies": {
"prosemirror-model": "^1.19.0"
}
@ -10293,7 +10258,6 @@
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/prosemirror-schema-list/-/prosemirror-schema-list-1.2.2.tgz",
"integrity": "sha512-rd0pqSDp86p0MUMKG903g3I9VmElFkQpkZ2iOd3EOVg1vo5Cst51rAsoE+5IPy0LPXq64eGcCYlW1+JPNxOj2w==",
"peer": true,
"dependencies": {
"prosemirror-model": "^1.0.0",
"prosemirror-state": "^1.0.0",
@ -10304,7 +10268,6 @@
"version": "1.4.2",
"resolved": "https://registry.npmjs.org/prosemirror-state/-/prosemirror-state-1.4.2.tgz",
"integrity": "sha512-puuzLD2mz/oTdfgd8msFbe0A42j5eNudKAAPDB0+QJRw8cO1ygjLmhLrg9RvDpf87Dkd6D4t93qdef00KKNacQ==",
"peer": true,
"dependencies": {
"prosemirror-model": "^1.0.0",
"prosemirror-transform": "^1.0.0",
@ -10315,7 +10278,6 @@
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/prosemirror-tables/-/prosemirror-tables-1.3.2.tgz",
"integrity": "sha512-/9JTeN6s58Zq66HXaxP6uf8PAmc7XXKZFPlOGVtLvxEd6xBP6WtzaJB9wBjiGUzwbdhdMEy7V62yuHqk/3VrnQ==",
"peer": true,
"dependencies": {
"prosemirror-keymap": "^1.1.2",
"prosemirror-model": "^1.8.1",
@ -10328,7 +10290,6 @@
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/prosemirror-trailing-node/-/prosemirror-trailing-node-2.0.4.tgz",
"integrity": "sha512-0Yl9w7IdHkaCdqR+NE3FOucePME4OmiGcybnF1iasarEILP5U8+4xTnl53yafULjmwcg1SrSG65Hg7Zk2H2v3g==",
"peer": true,
"dependencies": {
"@babel/runtime": "^7.21.0",
"@remirror/core-constants": "^2.0.1",
@ -10345,7 +10306,6 @@
"version": "1.7.1",
"resolved": "https://registry.npmjs.org/prosemirror-transform/-/prosemirror-transform-1.7.1.tgz",
"integrity": "sha512-VteoifAfpt46z0yEt6Fc73A5OID9t/y2QIeR5MgxEwTuitadEunD/V0c9jQW8ziT8pbFM54uTzRLJ/nLuQjMxg==",
"peer": true,
"dependencies": {
"prosemirror-model": "^1.0.0"
}
@ -10354,7 +10314,6 @@
"version": "1.31.1",
"resolved": "https://registry.npmjs.org/prosemirror-view/-/prosemirror-view-1.31.1.tgz",
"integrity": "sha512-9NKJdXnGV4+1qFRi16XFZxpnx6zNok9MEj/HElkqUJ1HtOyKOICffKxqoXUUCAdHrrP+yMDvdXc6wT7GGWBL3A==",
"peer": true,
"dependencies": {
"prosemirror-model": "^1.16.0",
"prosemirror-state": "^1.0.0",
@ -11331,8 +11290,7 @@
"node_modules/rope-sequence": {
"version": "1.3.3",
"resolved": "https://registry.npmjs.org/rope-sequence/-/rope-sequence-1.3.3.tgz",
"integrity": "sha512-85aZYCxweiD5J8yTEbw+E6A27zSnLPNDL0WfPdw3YYodq7WjnTKo0q4dtyQ2gz23iPT8Q9CUyJtAaUNcTxRf5Q==",
"peer": true
"integrity": "sha512-85aZYCxweiD5J8yTEbw+E6A27zSnLPNDL0WfPdw3YYodq7WjnTKo0q4dtyQ2gz23iPT8Q9CUyJtAaUNcTxRf5Q=="
},
"node_modules/run-parallel": {
"version": "1.2.0",
@ -11826,6 +11784,14 @@
"safe-buffer": "~5.1.0"
}
},
"node_modules/string-argv": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz",
"integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==",
"engines": {
"node": ">=0.6.19"
}
},
"node_modules/string-length": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz",
@ -12058,7 +12024,6 @@
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-3.0.1.tgz",
"integrity": "sha512-dTEWWNu6JmeVXY0ZYoPuH5cRIwc0MeGbJwah9KUNYSJwommQpCzTySTpEe8Gs1J23aeWEuAobe4Ag7EHVt/LOg==",
"peer": true,
"engines": {
"node": ">=10"
}
@ -12275,8 +12240,7 @@
"node_modules/uc.micro": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz",
"integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==",
"peer": true
"integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA=="
},
"node_modules/unicode-canonical-property-names-ecmascript": {
"version": "2.0.0",
@ -12575,8 +12539,7 @@
"node_modules/w3c-keyname": {
"version": "2.2.6",
"resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.6.tgz",
"integrity": "sha512-f+fciywl1SJEniZHD6H+kUO8gOnwIr7f4ijKA6+ZvJFjeGi1r4PDLl53Ayud9O/rk64RqgoQine0feoeOU0kXg==",
"peer": true
"integrity": "sha512-f+fciywl1SJEniZHD6H+kUO8gOnwIr7f4ijKA6+ZvJFjeGi1r4PDLl53Ayud9O/rk64RqgoQine0feoeOU0kXg=="
},
"node_modules/walker": {
"version": "1.0.8",
@ -15014,7 +14977,6 @@
"version": "4.2.9",
"resolved": "https://registry.npmjs.org/@linaria/core/-/core-4.2.9.tgz",
"integrity": "sha512-ELcu37VNVOT/PU0L6WDIN+aLzNFyJrqoBYT0CucGOCAmODbojUMCv8oJYRbWzA3N34w1t199dN4UFdfRWFG2rg==",
"peer": true,
"requires": {
"@linaria/logger": "^4.0.0",
"@linaria/tags": "^4.3.4",
@ -15025,7 +14987,6 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/@linaria/logger/-/logger-4.0.0.tgz",
"integrity": "sha512-YnBq0JlDWMEkTOK+tMo5yEVR0f5V//6qMLToGcLhTyM9g9i+IDFn51Z+5q2hLk7RdG4NBPgbcCXYi2w4RKsPeg==",
"peer": true,
"requires": {
"debug": "^4.1.1",
"picocolors": "^1.0.0"
@ -15035,7 +14996,6 @@
"version": "4.3.4",
"resolved": "https://registry.npmjs.org/@linaria/tags/-/tags-4.3.4.tgz",
"integrity": "sha512-W8zaLKtC4YFCwkZ9DMu2enCiD/zGyYmFSTzEvJP7ZycdftMizoOrWNOyF9kITyjGdq+jZvAXJz0BZDT6axgIRg==",
"peer": true,
"requires": {
"@babel/generator": "^7.20.4",
"@linaria/logger": "^4.0.0",
@ -15046,7 +15006,6 @@
"version": "4.3.3",
"resolved": "https://registry.npmjs.org/@linaria/utils/-/utils-4.3.3.tgz",
"integrity": "sha512-xSe/tod9A44aIMbtds9fWLNe2TT080lLdRSaoqX+UHsBWqClkrw5cXEt3lm8Vr4hZiXT2r/1AldjuHb9YbUlMg==",
"peer": true,
"requires": {
"@babel/core": "^7.20.2",
"@babel/plugin-proposal-export-namespace-from": "^7.18.9",
@ -15261,7 +15220,6 @@
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/@remirror/core-constants/-/core-constants-2.0.1.tgz",
"integrity": "sha512-ZR4aihtnnT9lMbhh5DEbsriJRlukRXmLZe7HmM+6ufJNNUDoazc75UX26xbgQlNUqgAqMcUdGFAnPc1JwgAdLQ==",
"peer": true,
"requires": {
"@babel/runtime": "^7.21.0"
}
@ -15270,7 +15228,6 @@
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/@remirror/core-helpers/-/core-helpers-2.0.3.tgz",
"integrity": "sha512-LqIPF4stGG69l9qu/FFicv9d9B+YaItzgDMC5A0CEvDQfKkGD3BfabLmfpnuWbsc06oKGdTduilgWcALLZoYLg==",
"peer": true,
"requires": {
"@babel/runtime": "^7.21.0",
"@linaria/core": "4.2.9",
@ -15293,7 +15250,6 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@remirror/types/-/types-1.0.1.tgz",
"integrity": "sha512-VlZQxwGnt1jtQ18D6JqdIF+uFZo525WEqrfp9BOc3COPpK4+AWCgdnAWL+ho6imWcoINlGjR/+3b6y5C1vBVEA==",
"peer": true,
"requires": {
"type-fest": "^2.19.0"
},
@ -15301,8 +15257,7 @@
"type-fest": {
"version": "2.19.0",
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz",
"integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==",
"peer": true
"integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA=="
}
}
},
@ -15486,7 +15441,6 @@
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/@tiptap/pm/-/pm-2.0.3.tgz",
"integrity": "sha512-I9dsInD89Agdm1QjFRO9dmJtU1ldVSILNPW0pEhv9wYqYVvl4HUj/JMtYNqu2jWrCHNXQcaX/WkdSdvGJtmg5g==",
"peer": true,
"requires": {
"prosemirror-changeset": "^2.2.0",
"prosemirror-collab": "^1.3.0",
@ -15821,14 +15775,12 @@
"@types/object.omit": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/@types/object.omit/-/object.omit-3.0.0.tgz",
"integrity": "sha512-I27IoPpH250TUzc9FzXd0P1BV/BMJuzqD3jOz98ehf9dQqGkxlq+hO1bIqZGWqCg5bVOy0g4AUVJtnxe0klDmw==",
"peer": true
"integrity": "sha512-I27IoPpH250TUzc9FzXd0P1BV/BMJuzqD3jOz98ehf9dQqGkxlq+hO1bIqZGWqCg5bVOy0g4AUVJtnxe0klDmw=="
},
"@types/object.pick": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/@types/object.pick/-/object.pick-1.3.2.tgz",
"integrity": "sha512-sn7L+qQ6RLPdXRoiaE7bZ/Ek+o4uICma/lBFPyJEKDTPTBP1W8u0c4baj3EiS4DiqLs+Hk+KUGvMVJtAw3ePJg==",
"peer": true
"integrity": "sha512-sn7L+qQ6RLPdXRoiaE7bZ/Ek+o4uICma/lBFPyJEKDTPTBP1W8u0c4baj3EiS4DiqLs+Hk+KUGvMVJtAw3ePJg=="
},
"@types/parse-json": {
"version": "4.0.0",
@ -15956,8 +15908,7 @@
"@types/throttle-debounce": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/@types/throttle-debounce/-/throttle-debounce-2.1.0.tgz",
"integrity": "sha512-5eQEtSCoESnh2FsiLTxE121IiE60hnMqcb435fShf4bpLRjEu1Eoekht23y6zXS9Ts3l+Szu3TARnTsA0GkOkQ==",
"peer": true
"integrity": "sha512-5eQEtSCoESnh2FsiLTxE121IiE60hnMqcb435fShf4bpLRjEu1Eoekht23y6zXS9Ts3l+Szu3TARnTsA0GkOkQ=="
},
"@types/unist": {
"version": "2.0.6",
@ -16547,7 +16498,6 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/babel-merge/-/babel-merge-3.0.0.tgz",
"integrity": "sha512-eBOBtHnzt9xvnjpYNI5HmaPp/b2vMveE5XggzqHnQeHJ8mFIBrBv6WZEVIj5jJ2uwTItkqKo9gWzEEcBxEq0yw==",
"peer": true,
"requires": {
"deepmerge": "^2.2.1",
"object.omit": "^3.0.0"
@ -16556,8 +16506,7 @@
"deepmerge": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-2.2.1.tgz",
"integrity": "sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA==",
"peer": true
"integrity": "sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA=="
}
}
},
@ -16856,8 +16805,7 @@
"case-anything": {
"version": "2.1.10",
"resolved": "https://registry.npmjs.org/case-anything/-/case-anything-2.1.10.tgz",
"integrity": "sha512-JczJwVrCP0jPKh05McyVsuOg6AYosrB9XWZKbQzXeDAm2ClE/PJE/BcrrQrVyGYH7Jg8V/LDupmyL4kFlVsVFQ==",
"peer": true
"integrity": "sha512-JczJwVrCP0jPKh05McyVsuOg6AYosrB9XWZKbQzXeDAm2ClE/PJE/BcrrQrVyGYH7Jg8V/LDupmyL4kFlVsVFQ=="
},
"chalk": {
"version": "4.1.2",
@ -17216,8 +17164,7 @@
"crelt": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/crelt/-/crelt-1.0.5.tgz",
"integrity": "sha512-+BO9wPPi+DWTDcNYhr/W90myha8ptzftZT+LwcmUbbok0rcP/fequmFYCw8NMoH7pkAZQzU78b3kYrlua5a9eA==",
"peer": true
"integrity": "sha512-+BO9wPPi+DWTDcNYhr/W90myha8ptzftZT+LwcmUbbok0rcP/fequmFYCw8NMoH7pkAZQzU78b3kYrlua5a9eA=="
},
"cross-spawn": {
"version": "7.0.3",
@ -17279,8 +17226,7 @@
"dash-get": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/dash-get/-/dash-get-1.0.2.tgz",
"integrity": "sha512-4FbVrHDwfOASx7uQVxeiCTo7ggSdYZbqs8lH+WU6ViypPlDbe9y6IP5VVUDQBv9DcnyaiPT5XT0UWHgJ64zLeQ==",
"peer": true
"integrity": "sha512-4FbVrHDwfOASx7uQVxeiCTo7ggSdYZbqs8lH+WU6ViypPlDbe9y6IP5VVUDQBv9DcnyaiPT5XT0UWHgJ64zLeQ=="
},
"data-uri-to-buffer": {
"version": "4.0.1",
@ -18628,7 +18574,6 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
"integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
"peer": true,
"requires": {
"is-plain-object": "^2.0.4"
}
@ -19439,7 +19384,6 @@
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-4.0.1.tgz",
"integrity": "sha512-C7bfi1UZmoj8+PQx22XyeXCuBlokoyWQL5pWSP+EI6nzRylyThouddufc2c1NDIcP9k5agmN9fLpA7VNJfIiqw==",
"peer": true,
"requires": {
"uc.micro": "^1.0.1"
}
@ -19577,7 +19521,6 @@
"version": "13.0.1",
"resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-13.0.1.tgz",
"integrity": "sha512-lTlxriVoy2criHP0JKRhO2VDG9c2ypWCsT237eDiLqi09rmbKoUetyGHq2uOIRoRS//kfoJckS0eUzzkDR+k2Q==",
"peer": true,
"requires": {
"argparse": "^2.0.1",
"entities": "~3.0.1",
@ -19589,16 +19532,14 @@
"entities": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz",
"integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==",
"peer": true
"integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q=="
}
}
},
"mdurl": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz",
"integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==",
"peer": true
"integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g=="
},
"media-typer": {
"version": "0.3.0",
@ -20020,7 +19961,6 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/object.omit/-/object.omit-3.0.0.tgz",
"integrity": "sha512-EO+BCv6LJfu+gBIF3ggLicFebFLN5zqzz/WWJlMFfkMyGth+oBkhxzDl0wx2W4GkLzuQs/FsSkXZb2IMWQqmBQ==",
"peer": true,
"requires": {
"is-extendable": "^1.0.0"
}
@ -20029,7 +19969,6 @@
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
"integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==",
"peer": true,
"requires": {
"isobject": "^3.0.1"
}
@ -20120,8 +20059,7 @@
"orderedmap": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/orderedmap/-/orderedmap-2.1.0.tgz",
"integrity": "sha512-/pIFexOm6S70EPdznemIz3BQZoJ4VTFrhqzu0ACBqBgeLsLxq8e6Jim63ImIfwW/zAD1AlXpRMlOv3aghmo4dA==",
"peer": true
"integrity": "sha512-/pIFexOm6S70EPdznemIz3BQZoJ4VTFrhqzu0ACBqBgeLsLxq8e6Jim63ImIfwW/zAD1AlXpRMlOv3aghmo4dA=="
},
"p-limit": {
"version": "3.1.0",
@ -20498,7 +20436,6 @@
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/prosemirror-changeset/-/prosemirror-changeset-2.2.0.tgz",
"integrity": "sha512-QM7ohGtkpVpwVGmFb8wqVhaz9+6IUXcIQBGZ81YNAKYuHiFJ1ShvSzab4pKqTinJhwciZbrtBEk/2WsqSt2PYg==",
"peer": true,
"requires": {
"prosemirror-transform": "^1.0.0"
}
@ -20507,7 +20444,6 @@
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/prosemirror-collab/-/prosemirror-collab-1.3.0.tgz",
"integrity": "sha512-+S/IJ69G2cUu2IM5b3PBekuxs94HO1CxJIWOFrLQXUaUDKL/JfBx+QcH31ldBlBXyDEUl+k3Vltfi1E1MKp2mA==",
"peer": true,
"requires": {
"prosemirror-state": "^1.0.0"
}
@ -20516,7 +20452,6 @@
"version": "1.5.1",
"resolved": "https://registry.npmjs.org/prosemirror-commands/-/prosemirror-commands-1.5.1.tgz",
"integrity": "sha512-ga1ga/RkbzxfAvb6iEXYmrEpekn5NCwTb8w1dr/gmhSoaGcQ0VPuCzOn5qDEpC45ql2oDkKoKQbRxLJwKLpMTQ==",
"peer": true,
"requires": {
"prosemirror-model": "^1.0.0",
"prosemirror-state": "^1.0.0",
@ -20527,7 +20462,6 @@
"version": "1.8.0",
"resolved": "https://registry.npmjs.org/prosemirror-dropcursor/-/prosemirror-dropcursor-1.8.0.tgz",
"integrity": "sha512-TZMitR8nlp9Xh42pDYGcWopCoFPmJduoyGJ7FjYM2/7gZKnfD41TIaZN5Q1cQjm6Fm/P5vk/DpVYFhS8kDdigw==",
"peer": true,
"requires": {
"prosemirror-state": "^1.0.0",
"prosemirror-transform": "^1.1.0",
@ -20538,7 +20472,6 @@
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/prosemirror-gapcursor/-/prosemirror-gapcursor-1.3.1.tgz",
"integrity": "sha512-GKTeE7ZoMsx5uVfc51/ouwMFPq0o8YrZ7Hx4jTF4EeGbXxBveUV8CGv46mSHuBBeXGmvu50guoV2kSnOeZZnUA==",
"peer": true,
"requires": {
"prosemirror-keymap": "^1.0.0",
"prosemirror-model": "^1.0.0",
@ -20550,7 +20483,6 @@
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/prosemirror-history/-/prosemirror-history-1.3.1.tgz",
"integrity": "sha512-YMV/IWBZ+LZSfaNcBbPcaQUiAiJRYFyJW2aapuNzL8nhIRsI7fIO0ykJFSe802+mWeoTsVJ1jxvRWPYqaUqljQ==",
"peer": true,
"requires": {
"prosemirror-state": "^1.2.2",
"prosemirror-transform": "^1.0.0",
@ -20562,7 +20494,6 @@
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/prosemirror-inputrules/-/prosemirror-inputrules-1.2.0.tgz",
"integrity": "sha512-eAW/M/NTSSzpCOxfR8Abw6OagdG0MiDAiWHQMQveIsZtoKVYzm0AflSPq/ymqJd56/Su1YPbwy9lM13wgHOFmQ==",
"peer": true,
"requires": {
"prosemirror-state": "^1.0.0",
"prosemirror-transform": "^1.0.0"
@ -20572,7 +20503,6 @@
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/prosemirror-keymap/-/prosemirror-keymap-1.2.1.tgz",
"integrity": "sha512-kVK6WGC+83LZwuSJnuCb9PsADQnFZllt94qPP3Rx/vLcOUV65+IbBeH2nS5cFggPyEVJhGkGrgYFRrG250WhHQ==",
"peer": true,
"requires": {
"prosemirror-state": "^1.0.0",
"w3c-keyname": "^2.2.0"
@ -20582,7 +20512,6 @@
"version": "1.10.1",
"resolved": "https://registry.npmjs.org/prosemirror-markdown/-/prosemirror-markdown-1.10.1.tgz",
"integrity": "sha512-s7iaTLiX+qO5z8kF2NcMmy2T7mIlxzkS4Sp3vTKSYChPtbMpg6YxFkU0Y06rUg2WtKlvBu7v1bXzlGBkfjUWAA==",
"peer": true,
"requires": {
"markdown-it": "^13.0.1",
"prosemirror-model": "^1.0.0"
@ -20592,7 +20521,6 @@
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/prosemirror-menu/-/prosemirror-menu-1.2.1.tgz",
"integrity": "sha512-sBirXxVfHalZO4f1ZS63WzewINK4182+7dOmoMeBkqYO8wqMBvBS7wQuwVOHnkMWPEh0+N0LJ856KYUN+vFkmQ==",
"peer": true,
"requires": {
"crelt": "^1.0.0",
"prosemirror-commands": "^1.0.0",
@ -20604,7 +20532,6 @@
"version": "1.19.0",
"resolved": "https://registry.npmjs.org/prosemirror-model/-/prosemirror-model-1.19.0.tgz",
"integrity": "sha512-/CvFGJnwc41EJSfDkQLly1cAJJJmBpZwwUJtwZPTjY2RqZJfM8HVbCreOY/jti8wTRbVyjagcylyGoeJH/g/3w==",
"peer": true,
"requires": {
"orderedmap": "^2.0.0"
}
@ -20613,7 +20540,6 @@
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/prosemirror-schema-basic/-/prosemirror-schema-basic-1.2.1.tgz",
"integrity": "sha512-vYBdIHsYKSDIqYmPBC7lnwk9DsKn8PnVqK97pMYP5MLEDFqWIX75JiaJTzndBii4bRuNqhC2UfDOfM3FKhlBHg==",
"peer": true,
"requires": {
"prosemirror-model": "^1.19.0"
}
@ -20622,7 +20548,6 @@
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/prosemirror-schema-list/-/prosemirror-schema-list-1.2.2.tgz",
"integrity": "sha512-rd0pqSDp86p0MUMKG903g3I9VmElFkQpkZ2iOd3EOVg1vo5Cst51rAsoE+5IPy0LPXq64eGcCYlW1+JPNxOj2w==",
"peer": true,
"requires": {
"prosemirror-model": "^1.0.0",
"prosemirror-state": "^1.0.0",
@ -20633,7 +20558,6 @@
"version": "1.4.2",
"resolved": "https://registry.npmjs.org/prosemirror-state/-/prosemirror-state-1.4.2.tgz",
"integrity": "sha512-puuzLD2mz/oTdfgd8msFbe0A42j5eNudKAAPDB0+QJRw8cO1ygjLmhLrg9RvDpf87Dkd6D4t93qdef00KKNacQ==",
"peer": true,
"requires": {
"prosemirror-model": "^1.0.0",
"prosemirror-transform": "^1.0.0",
@ -20644,7 +20568,6 @@
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/prosemirror-tables/-/prosemirror-tables-1.3.2.tgz",
"integrity": "sha512-/9JTeN6s58Zq66HXaxP6uf8PAmc7XXKZFPlOGVtLvxEd6xBP6WtzaJB9wBjiGUzwbdhdMEy7V62yuHqk/3VrnQ==",
"peer": true,
"requires": {
"prosemirror-keymap": "^1.1.2",
"prosemirror-model": "^1.8.1",
@ -20657,7 +20580,6 @@
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/prosemirror-trailing-node/-/prosemirror-trailing-node-2.0.4.tgz",
"integrity": "sha512-0Yl9w7IdHkaCdqR+NE3FOucePME4OmiGcybnF1iasarEILP5U8+4xTnl53yafULjmwcg1SrSG65Hg7Zk2H2v3g==",
"peer": true,
"requires": {
"@babel/runtime": "^7.21.0",
"@remirror/core-constants": "^2.0.1",
@ -20669,7 +20591,6 @@
"version": "1.7.1",
"resolved": "https://registry.npmjs.org/prosemirror-transform/-/prosemirror-transform-1.7.1.tgz",
"integrity": "sha512-VteoifAfpt46z0yEt6Fc73A5OID9t/y2QIeR5MgxEwTuitadEunD/V0c9jQW8ziT8pbFM54uTzRLJ/nLuQjMxg==",
"peer": true,
"requires": {
"prosemirror-model": "^1.0.0"
}
@ -20678,7 +20599,6 @@
"version": "1.31.1",
"resolved": "https://registry.npmjs.org/prosemirror-view/-/prosemirror-view-1.31.1.tgz",
"integrity": "sha512-9NKJdXnGV4+1qFRi16XFZxpnx6zNok9MEj/HElkqUJ1HtOyKOICffKxqoXUUCAdHrrP+yMDvdXc6wT7GGWBL3A==",
"peer": true,
"requires": {
"prosemirror-model": "^1.16.0",
"prosemirror-state": "^1.0.0",
@ -21370,8 +21290,7 @@
"rope-sequence": {
"version": "1.3.3",
"resolved": "https://registry.npmjs.org/rope-sequence/-/rope-sequence-1.3.3.tgz",
"integrity": "sha512-85aZYCxweiD5J8yTEbw+E6A27zSnLPNDL0WfPdw3YYodq7WjnTKo0q4dtyQ2gz23iPT8Q9CUyJtAaUNcTxRf5Q==",
"peer": true
"integrity": "sha512-85aZYCxweiD5J8yTEbw+E6A27zSnLPNDL0WfPdw3YYodq7WjnTKo0q4dtyQ2gz23iPT8Q9CUyJtAaUNcTxRf5Q=="
},
"run-parallel": {
"version": "1.2.0",
@ -21780,6 +21699,11 @@
"safe-buffer": "~5.1.0"
}
},
"string-argv": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz",
"integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q=="
},
"string-length": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz",
@ -21937,8 +21861,7 @@
"throttle-debounce": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-3.0.1.tgz",
"integrity": "sha512-dTEWWNu6JmeVXY0ZYoPuH5cRIwc0MeGbJwah9KUNYSJwommQpCzTySTpEe8Gs1J23aeWEuAobe4Ag7EHVt/LOg==",
"peer": true
"integrity": "sha512-dTEWWNu6JmeVXY0ZYoPuH5cRIwc0MeGbJwah9KUNYSJwommQpCzTySTpEe8Gs1J23aeWEuAobe4Ag7EHVt/LOg=="
},
"thunky": {
"version": "1.1.0",
@ -22076,8 +21999,7 @@
"uc.micro": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz",
"integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==",
"peer": true
"integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA=="
},
"unicode-canonical-property-names-ecmascript": {
"version": "2.0.0",
@ -22269,8 +22191,7 @@
"w3c-keyname": {
"version": "2.2.6",
"resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.6.tgz",
"integrity": "sha512-f+fciywl1SJEniZHD6H+kUO8gOnwIr7f4ijKA6+ZvJFjeGi1r4PDLl53Ayud9O/rk64RqgoQine0feoeOU0kXg==",
"peer": true
"integrity": "sha512-f+fciywl1SJEniZHD6H+kUO8gOnwIr7f4ijKA6+ZvJFjeGi1r4PDLl53Ayud9O/rk64RqgoQine0feoeOU0kXg=="
},
"walker": {
"version": "1.0.8",

View File

@ -293,9 +293,9 @@
"@mantine/tiptap": "^6.0.10",
"@tabler/icons-react": "^2.17.0",
"@tiptap/extension-link": "^2.0.3",
"@tiptap/pm": "^2.0.0",
"@tiptap/react": "^2.0.3",
"@tiptap/starter-kit": "^2.0.3",
"@tiptap/pm": "^2.0.0",
"axios": "^1.3.6",
"dotenv": "^16.0.3",
"ncp": "^2.0.0",
@ -306,6 +306,7 @@
"react-markdown": "^8.0.7",
"react-syntax-highlighter": "^15.5.0",
"shell-escape": "^0.2.0",
"string-argv": "^0.3.2",
"uuid": "^9.0.0"
}
}

View File

@ -1,13 +1,11 @@
// devchat.ts
import { spawn } from "child_process";
import { promisify } from "util";
import * as vscode from 'vscode';
import * as dotenv from 'dotenv';
import * as path from 'path';
import * as fs from 'fs';
import { logger } from '../util/logger';
import { CommandRun } from "../util/commonUtil";
import ExtensionContextHolder from '../util/extensionContext';
@ -47,59 +45,16 @@ export interface ChatResponse {
isError: boolean;
}
class DevChat {
private childProcess: any;
private commandRun: CommandRun;
async spawnAsync(command: string, args: string[], options: any, onData: (data: string) => void): Promise<{ code: number, stdout: string; stderr: string }> {
return new Promise((resolve, reject) => {
this.childProcess = spawn(command, args, options);
let stdout = '';
let stderr = '';
this.childProcess.stdout.on('data', (data: { toString: () => any; }) => {
const dataStr = data.toString();
onData(dataStr);
stdout += dataStr;
});
this.childProcess.stderr.on('data', (data: string) => {
stderr += data;
});
this.childProcess.on('close', (code: number) => {
if (stderr) {
logger.channel()?.error(stderr);
logger.channel()?.show();
}
if (code === 0) {
resolve({ code, stdout, stderr });
} else {
reject({ code, stdout, stderr });
}
});
// Add error event listener to handle command not found exception
this.childProcess.on('error', (error: any) => {
if (error.code === 'ENOENT') {
logger.channel()?.error(`Command not found: ${command}`);
logger.channel()?.show();
} else {
logger.channel()?.error(`Error occurred: ${error.message}`);
logger.channel()?.show();
}
reject({ code: error.code, stdout: "", stderr: error.message });
});
});
};
constructor() {
this.commandRun = new CommandRun();
}
public stop() {
if (this.childProcess) {
this.childProcess.kill();
this.childProcess = null;
}
this.commandRun.stop();
}
async chat(content: string, options: ChatOptions = {}, onData: (data: ChatResponse) => void): Promise<ChatResponse> {
@ -124,7 +79,6 @@ class DevChat {
args.push(content)
const workspaceDir = vscode.workspace.workspaceFolders?.[0].uri.fsPath;
// const openaiApiKey = process.env.OPENAI_API_KEY;
const secretStorage: vscode.SecretStorage = ExtensionContextHolder.context!.secrets;
let openaiApiKey = await secretStorage.get("devchat_OPENAI_API_KEY");
@ -147,9 +101,8 @@ class DevChat {
const openaiStream = vscode.workspace.getConfiguration('DevChat').get('OpenAI.stream');
const llmModel = vscode.workspace.getConfiguration('DevChat').get('llmModel');
const tokensPerPrompt = vscode.workspace.getConfiguration('DevChat').get('OpenAI.tokensPerPrompt');
// const userHistoryPrompts = vscode.workspace.getConfiguration('DevChat').get('OpenAI.useHistoryPrompt');
let devChat : string|undefined = vscode.workspace.getConfiguration('DevChat').get('DevChatPath');
let devChat: string | undefined = vscode.workspace.getConfiguration('DevChat').get('DevChatPath');
if (!devChat) {
devChat = 'devchat';
}
@ -157,7 +110,7 @@ class DevChat {
if (options.parent) {
args.push("-p", options.parent);
}
const devchatConfig = {
model: openaiModel,
provider: llmModel,
@ -176,7 +129,7 @@ class DevChat {
try {
const parseOutData = (stdout: string, isPartial: boolean) => {
const responseLines = stdout.trim().split("\n");
if (responseLines.length < 2) {
return {
"prompt-hash": "",
@ -233,7 +186,7 @@ class DevChat {
};
logger.channel()?.info(`Running devchat with args: ${args.join(" ")}`);
const { code, stdout, stderr } = await this.spawnAsync(devChat, args, {
const { exitCode: code, stdout, stderr } = await this.commandRun.spawnAsync(devChat, args, {
maxBuffer: 10 * 1024 * 1024, // Set maxBuffer to 10 MB
cwd: workspaceDir,
env: {
@ -241,7 +194,7 @@ class DevChat {
OPENAI_API_KEY: openaiApiKey,
...openAiApiBaseObject
},
}, onStdoutPartial);
}, onStdoutPartial, undefined, undefined, undefined);
if (stderr) {
const errorMessage = stderr.trim().match(/Error(.+)/)?.[1];
@ -268,39 +221,21 @@ class DevChat {
}
async log(options: LogOptions = {}): Promise<LogEntry[]> {
let args = ["log"];
if (options.skip) {
args.push('--skip', `${options.skip}`);
} else {
// const skipLogCount = vscode.workspace.getConfiguration('DevChat').get('logSkip');
// args.push('--skip', `${skipLogCount}`);
}
if (options.maxCount) {
args.push('--max-count', `${options.maxCount}`);
} else {
const maxLogCount = vscode.workspace.getConfiguration('DevChat').get('maxLogCount');
args.push('--max-count', `${maxLogCount}`);
}
let devChat : string|undefined = vscode.workspace.getConfiguration('DevChat').get('DevChatPath');
if (!devChat) {
devChat = 'devchat';
}
const args = this.buildLogArgs(options);
const devChat = this.getDevChatPath();
const workspaceDir = vscode.workspace.workspaceFolders?.[0].uri.fsPath;
const openaiApiKey = process.env.OPENAI_API_KEY;
try {
logger.channel()?.info(`Running devchat with args: ${args.join(" ")}`);
const { code, stdout, stderr } = await this.spawnAsync(devChat, args, {
const { exitCode: code, stdout, stderr } = await this.commandRun.spawnAsync(devChat, args, {
maxBuffer: 10 * 1024 * 1024, // Set maxBuffer to 10 MB
cwd: workspaceDir,
env: {
...process.env,
OPENAI_API_KEY: openaiApiKey,
},
}, (partialResponse: string) => { });
}, undefined, undefined, undefined, undefined);
logger.channel()?.info(`Finish devchat with args: ${args.join(" ")}`);
if (stderr) {
@ -309,13 +244,37 @@ class DevChat {
return [];
}
return JSON.parse(stdout.trim()).reverse();
return JSON.parse(stdout.trim()).reverse();
} catch (error) {
logger.channel()?.error(`Error getting log: ${error}`);
logger.channel()?.show();
return [];
}
}
private buildLogArgs(options: LogOptions): string[] {
let args = ["log"];
if (options.skip) {
args.push('--skip', `${options.skip}`);
}
if (options.maxCount) {
args.push('--max-count', `${options.maxCount}`);
} else {
const maxLogCount = vscode.workspace.getConfiguration('DevChat').get('maxLogCount');
args.push('--max-count', `${maxLogCount}`);
}
return args;
}
private getDevChatPath(): string {
let devChat: string | undefined = vscode.workspace.getConfiguration('DevChat').get('DevChatPath');
if (!devChat) {
devChat = 'devchat';
}
return devChat;
}
}
export default DevChat;

View File

@ -4,6 +4,7 @@ import * as path from 'path';
import * as fs from 'fs';
import { logger } from "../util/logger";
import { CommandRun } from "../util/commonUtil";
interface DtmResponse {
status: number;
@ -13,102 +14,18 @@ interface DtmResponse {
class DtmWrapper {
private workspaceDir: string;
private binaryPath: string;
private commandRun: CommandRun;
constructor() {
this.workspaceDir = vscode.workspace.workspaceFolders?.[0].uri.fsPath || '.';
this.binaryPath = 'dtm';
let binaryName: string;
switch (process.platform) {
case 'win32':
binaryName = 'dtm.exe';
break;
case 'darwin':
binaryName = 'dtm';
break;
case 'linux':
binaryName = 'dtm';
break;
default:
vscode.window.showErrorMessage(`Unsupported platform: ${process.platform}`);
return;
}
this.binaryPath = path.join(__dirname, '..', 'bin', process.platform, process.arch, binaryName);
if (!fs.existsSync(this.binaryPath)) {
logger.channel()?.error(`Binary not found: ${this.binaryPath}`);
logger.channel()?.show();
}
}
private async runCommand(command: string, args: string[]): Promise<DtmResponse> {
return new Promise((resolve, reject) => {
logger.channel()?.info(`Running command: ${command} ${args.join(' ')}`);
const child = spawn(command, args, { cwd: this.workspaceDir });
let stdout = '';
let stderr = '';
child.stdout.on('data', (data) => {
stdout += data;
});
child.stderr.on('data', (data) => {
stderr += data;
});
child.on('close', (code) => {
try {
const parsedOutput = JSON.parse(stdout.trim());
if (code === 0) {
resolve(parsedOutput);
} else {
reject(parsedOutput);
}
} catch (error) {
// 处理 JSON 解析异常
const errorObj = error as Error;
reject({ status: -1, message: 'JSON parse error', log: errorObj.message });
}
});
});
}
private async runCommand2(command: string, args: string[]): Promise<DtmResponse> {
return new Promise((resolve, reject) => {
logger.channel()?.info(`Running command: ${command} ${args.join(' ')}`);
const child = spawn(command, args, { cwd: this.workspaceDir });
let stdout = '';
let stderr = '';
child.stdout.on('data', (data) => {
stdout += data;
});
child.stderr.on('data', (data) => {
stderr += data;
});
child.on('close', (code) => {
if (code === null) {
code = 0;
}
resolve({ status: code, message: stdout, log: stderr });
});
});
}
async scaffold(directoryTree: string): Promise<DtmResponse> {
return await this.runCommand(this.binaryPath, ['scaffold', directoryTree, '-o', 'json']);
}
async patch(patchFilePath: string): Promise<DtmResponse> {
return await this.runCommand(this.binaryPath, ['patch', patchFilePath, '-o', 'json']);
this.commandRun = new CommandRun();
}
async commit(commitMsg: string): Promise<DtmResponse> {
try {
return await this.runCommand(this.binaryPath, ['commit', '-m', commitMsg, '-o', 'json']);
logger.channel()?.info(`Running command: git commit -m ${commitMsg}`);
const result = await this.commandRun.spawnAsync("git", ['commit', '-m', commitMsg], { cwd: this.workspaceDir }, undefined, undefined, undefined, undefined);
return { status: result.exitCode || 0, message: result.stdout, log: result.stderr };
} catch (error) {
// 处理 runCommand 中的 reject 错误
logger.channel()?.error(`Error in commit: ${error}`);
@ -120,7 +37,8 @@ class DtmWrapper {
async commitall(commitMsg: string): Promise<DtmResponse> {
try {
logger.channel()?.info(`Running command: git commit -am ${commitMsg}`);
return await this.runCommand2("git", ['commit', '-am', commitMsg]);
const result = await this.commandRun.spawnAsync("git", ['commit', '-am', commitMsg], { cwd: this.workspaceDir }, undefined, undefined, undefined, undefined);
return { status: result.exitCode || 0, message: result.stdout, log: result.stderr };
} catch (error) {
// 处理 runCommand 中的 reject 错误
logger.channel()?.error(`Error in commit: ${error}`);

View File

@ -2,109 +2,154 @@ import * as fs from 'fs';
import * as os from 'os';
import * as path from 'path';
import * as vscode from 'vscode';
import { parseArgsStringToArgv } from 'string-argv';
import { logger } from './logger';
import { spawn, exec } from 'child_process';
export function createTempSubdirectory(subdir: string): string {
// 获取系统临时目录
const tempDir = os.tmpdir();
// 构建完整的目录路径
let targetDir = path.join(tempDir, subdir, Date.now().toString());
// 检查目录是否存在,如果存在则重新生成目录名称
while (fs.existsSync(targetDir)) {
targetDir = path.join(tempDir, subdir, Date.now().toString());
}
// 递归创建目录
fs.mkdirSync(targetDir, { recursive: true });
// 返回创建的目录的绝对路径
return targetDir;
// 获取系统临时目录
const tempDir = os.tmpdir();
// 构建完整的目录路径
let targetDir = path.join(tempDir, subdir, Date.now().toString());
// 检查目录是否存在,如果存在则重新生成目录名称
while (fs.existsSync(targetDir)) {
targetDir = path.join(tempDir, subdir, Date.now().toString());
}
// 递归创建目录
fs.mkdirSync(targetDir, { recursive: true });
// 返回创建的目录的绝对路径
return targetDir;
}
interface CommandResult {
exitCode: number | null;
stdout: string;
stderr: string;
}
export async function runCommandAndWriteOutput(
command: string,
args: string[],
outputFile: string
): Promise<CommandResult> {
return new Promise((resolve) => {
// 获取当前工作区目录
const workspaceDir = vscode.workspace.workspaceFolders?.[0].uri.fsPath || '.';
// 使用spawn执行命令
const childProcess = spawn(command, args, { cwd: workspaceDir });
let stdout = '';
let stderr = '';
// 监听stdout数据
childProcess.stdout.on('data', (data) => {
stdout += data.toString();
});
// 监听stderr数据
childProcess.stderr.on('data', (data) => {
stderr += data.toString();
});
// 监听进程退出事件
childProcess.on('exit', (exitCode) => {
// 将命令输出结果写入到文件
if (outputFile !== '') {
fs.writeFileSync(outputFile, stdout);
}
// 返回结果
resolve({
exitCode,
stdout,
stderr,
});
});
});
}
exitCode: number | null;
stdout: string;
stderr: string;
}
export async function runCommandStringAndWriteOutput(
export class CommandRun {
private childProcess: any;
// init childProcess in construction function
constructor() {
this.childProcess = null;
}
public async spawnAsync(command: string, args: string[], options: object, onData: ((data: string) => void) | undefined, onError: ((data: string) => void) | undefined, onOutputFile: ((command: string, stdout: string, stderr: string) => string) | undefined, outputFile: string | undefined): Promise<CommandResult> {
return new Promise((resolve, reject) => {
this.childProcess = spawn(command, args, options);
let stdout = '';
let stderr = '';
this.childProcess.stdout.on('data', (data: { toString: () => any; }) => {
const dataStr = data.toString();
if (onData) {
onData(dataStr);
}
stdout += dataStr;
});
this.childProcess.stderr.on('data', (data: string) => {
const dataStr = data.toString();
if (onError) {
onError(dataStr);
}
stderr += dataStr;
});
this.childProcess.on('close', (code: number) => {
let outputData = stdout;
if (onOutputFile) {
outputData = onOutputFile(command + " " + args.join(" "), stdout, stderr);
}
if (outputFile) {
fs.writeFileSync(outputFile, outputData);
}
if (stderr) {
logger.channel()?.error(stderr);
logger.channel()?.show();
}
if (code === 0) {
resolve({ exitCode: code, stdout, stderr });
} else {
reject({ exitCode: code, stdout, stderr });
}
});
// Add error event listener to handle command not found exception
this.childProcess.on('error', (error: any) => {
if (error.code === 'ENOENT') {
logger.channel()?.error(`Command not found: ${command}`);
logger.channel()?.show();
} else {
logger.channel()?.error(`Error occurred: ${error.message}`);
logger.channel()?.show();
}
reject({ exitCode: error.code, stdout: "", stderr: error.message });
});
});
};
public stop() {
if (this.childProcess) {
this.childProcess.kill();
this.childProcess = null;
}
}
}
export async function runCommandAndWriteOutput(
command: string,
args: string[],
outputFile: string
): Promise<CommandResult> {
const run = new CommandRun();
const options = {
cwd: vscode.workspace.workspaceFolders?.[0].uri.fsPath || '.',
};
return run.spawnAsync(command, args, options, undefined, undefined, undefined, outputFile);
}
export async function runCommandStringAndWriteOutput(
commandString: string,
outputFile: string
): Promise<CommandResult> {
return new Promise((resolve) => {
const workspaceDir = vscode.workspace.workspaceFolders?.[0].uri.fsPath || '.';
// 使用exec执行命令行字符串
const childProcess = exec(commandString, { cwd: workspaceDir }, (error, stdout, stderr) => {
// 将命令输出结果写入到文件
const data = {
command: commandString,
content: stdout
};
const jsonData = JSON.stringify(data);
): Promise<CommandResult> {
const run = new CommandRun();
const options = {
cwd: vscode.workspace.workspaceFolders?.[0].uri.fsPath || '.'
};
fs.writeFileSync(outputFile, jsonData);
// 返回结果
resolve({
exitCode: error && error.code? error.code : 0,
stdout,
stderr,
});
});
});
}
// Split the commandString into command and args array using string-argv
const commandParts = parseArgsStringToArgv(commandString);
const command = commandParts[0];
const args = commandParts.slice(1);
export async function getLanguageIdByFileName(fileName: string): Promise<string | undefined> {
try {
// 打开指定的文件
const document = await vscode.workspace.openTextDocument(fileName);
// 获取文件的语言标识符
const languageId = document.languageId;
return languageId;
} catch (error) {
// 如果无法打开文件或发生其他错误返回undefined
return undefined;
}
}
const onOutputFile = (command: string, stdout: string, stderr: string): string => {
const data = {
command: commandString,
content: stdout,
};
return JSON.stringify(data);
};
return run.spawnAsync(command, args, options, undefined, undefined, onOutputFile, outputFile);
}
export async function getLanguageIdByFileName(fileName: string): Promise<string | undefined> {
try {
// 打开指定的文件
const document = await vscode.workspace.openTextDocument(fileName);
// 获取文件的语言标识符
const languageId = document.languageId;
return languageId;
} catch (error) {
// 如果无法打开文件或发生其他错误返回undefined
return undefined;
}
}