Added parser
This commit is contained in:
1
.example.env
Normal file
1
.example.env
Normal file
@@ -0,0 +1 @@
|
||||
PROXY_HOST=
|
||||
2
.gitignore
vendored
2
.gitignore
vendored
@@ -33,3 +33,5 @@ yarn-error.log*
|
||||
# typescript
|
||||
*.tsbuildinfo
|
||||
next-env.d.ts
|
||||
|
||||
.env
|
||||
@@ -16,6 +16,7 @@
|
||||
"class-variance-authority": "^0.7.0",
|
||||
"clsx": "^2.0.0",
|
||||
"content-type": "^1.0.5",
|
||||
"jsdom": "^22.1.0",
|
||||
"lucide-react": "^0.279.0",
|
||||
"next": "latest",
|
||||
"node-html-parser": "^6.1.10",
|
||||
@@ -25,6 +26,7 @@
|
||||
"tailwindcss-animate": "^1.0.7"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/jsdom": "^21.1.3",
|
||||
"@types/node": "latest",
|
||||
"@types/react": "latest",
|
||||
"@types/react-dom": "latest",
|
||||
|
||||
304
pnpm-lock.yaml
generated
304
pnpm-lock.yaml
generated
@@ -26,6 +26,9 @@ dependencies:
|
||||
content-type:
|
||||
specifier: ^1.0.5
|
||||
version: 1.0.5
|
||||
jsdom:
|
||||
specifier: ^22.1.0
|
||||
version: 22.1.0
|
||||
lucide-react:
|
||||
specifier: ^0.279.0
|
||||
version: 0.279.0(react@18.2.0)
|
||||
@@ -49,6 +52,9 @@ dependencies:
|
||||
version: 1.0.7(tailwindcss@3.3.3)
|
||||
|
||||
devDependencies:
|
||||
'@types/jsdom':
|
||||
specifier: ^21.1.3
|
||||
version: 21.1.3
|
||||
'@types/node':
|
||||
specifier: latest
|
||||
version: 20.8.0
|
||||
@@ -780,10 +786,23 @@ packages:
|
||||
tslib: 2.6.2
|
||||
dev: false
|
||||
|
||||
/@tootallnate/once@2.0.0:
|
||||
resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==}
|
||||
engines: {node: '>= 10'}
|
||||
dev: false
|
||||
|
||||
/@types/content-type@1.1.6:
|
||||
resolution: {integrity: sha512-WFHg/KFLCdUQl3m27WSQu0NEaLzoHGmgZHlsSYr0Y0iIvItMcBq7opZc6AGXPXqf+btIM6vTBJyLvuDAihB+zQ==}
|
||||
dev: false
|
||||
|
||||
/@types/jsdom@21.1.3:
|
||||
resolution: {integrity: sha512-1zzqSP+iHJYV4lB3lZhNBa012pubABkj9yG/GuXuf6LZH1cSPIJBqFDrm5JX65HHt6VOnNYdTui/0ySerRbMgA==}
|
||||
dependencies:
|
||||
'@types/node': 20.8.0
|
||||
'@types/tough-cookie': 4.0.3
|
||||
parse5: 7.1.2
|
||||
dev: true
|
||||
|
||||
/@types/json-schema@7.0.13:
|
||||
resolution: {integrity: sha512-RbSSoHliUbnXj3ny0CNFOoxrIDV6SUGyStHsvDqosw6CkdPV8TtWGlfecuK4ToyMEAql6pzNxgCFKanovUzlgQ==}
|
||||
dev: true
|
||||
@@ -818,6 +837,10 @@ packages:
|
||||
resolution: {integrity: sha512-OxepLK9EuNEIPxWNME+C6WwbRAOOI2o2BaQEGzz5Lu2e4Z5eDnEo+/aVEDMIXywoJitJ7xWd641wrGLZdtwRyw==}
|
||||
dev: true
|
||||
|
||||
/@types/tough-cookie@4.0.3:
|
||||
resolution: {integrity: sha512-THo502dA5PzG/sfQH+42Lw3fvmYkceefOspdCwpHRul8ik2Jv1K8I5OZz1AT3/rs46kwgMCe9bSBmDLYkkOMGg==}
|
||||
dev: true
|
||||
|
||||
/@typescript-eslint/eslint-plugin@6.7.3(@typescript-eslint/parser@6.7.3)(eslint@8.50.0)(typescript@5.2.2):
|
||||
resolution: {integrity: sha512-vntq452UHNltxsaaN+L9WyuMch8bMd9CqJ3zhzTPXXidwbf5mqqKCVXEuvRZUqLJSTLeWE65lQwyXsRGnXkCTA==}
|
||||
engines: {node: ^16.0.0 || >=18.0.0}
|
||||
@@ -949,6 +972,10 @@ packages:
|
||||
eslint-visitor-keys: 3.4.3
|
||||
dev: true
|
||||
|
||||
/abab@2.0.6:
|
||||
resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==}
|
||||
dev: false
|
||||
|
||||
/acorn-jsx@5.3.2(acorn@8.10.0):
|
||||
resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
|
||||
peerDependencies:
|
||||
@@ -963,6 +990,15 @@ packages:
|
||||
hasBin: true
|
||||
dev: true
|
||||
|
||||
/agent-base@6.0.2:
|
||||
resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==}
|
||||
engines: {node: '>= 6.0.0'}
|
||||
dependencies:
|
||||
debug: 4.3.4
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
dev: false
|
||||
|
||||
/ajv@6.12.6:
|
||||
resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
|
||||
dependencies:
|
||||
@@ -1101,6 +1137,10 @@ packages:
|
||||
has-symbols: 1.0.3
|
||||
dev: true
|
||||
|
||||
/asynckit@0.4.0:
|
||||
resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
|
||||
dev: false
|
||||
|
||||
/autoprefixer@10.4.16(postcss@8.4.31):
|
||||
resolution: {integrity: sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==}
|
||||
engines: {node: ^10 || ^12 || >=14}
|
||||
@@ -1241,6 +1281,13 @@ packages:
|
||||
resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
|
||||
dev: true
|
||||
|
||||
/combined-stream@1.0.8:
|
||||
resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
|
||||
engines: {node: '>= 0.8'}
|
||||
dependencies:
|
||||
delayed-stream: 1.0.0
|
||||
dev: false
|
||||
|
||||
/commander@4.1.1:
|
||||
resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==}
|
||||
engines: {node: '>= 6'}
|
||||
@@ -1282,6 +1329,13 @@ packages:
|
||||
engines: {node: '>=4'}
|
||||
hasBin: true
|
||||
|
||||
/cssstyle@3.0.0:
|
||||
resolution: {integrity: sha512-N4u2ABATi3Qplzf0hWbVCdjenim8F3ojEXpBDF5hBpjzW182MjNGLqfmQ0SkSPeQ+V86ZXgeH8aXj6kayd4jgg==}
|
||||
engines: {node: '>=14'}
|
||||
dependencies:
|
||||
rrweb-cssom: 0.6.0
|
||||
dev: false
|
||||
|
||||
/csstype@3.1.2:
|
||||
resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==}
|
||||
|
||||
@@ -1289,6 +1343,15 @@ packages:
|
||||
resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==}
|
||||
dev: true
|
||||
|
||||
/data-urls@4.0.0:
|
||||
resolution: {integrity: sha512-/mMTei/JXPqvFqQtfyTowxmJVwr2PVAeCcDxyFf6LhoOu/09TX2OX3kb2wzi4DMXcfj4OItwDOnhl5oziPnT6g==}
|
||||
engines: {node: '>=14'}
|
||||
dependencies:
|
||||
abab: 2.0.6
|
||||
whatwg-mimetype: 3.0.0
|
||||
whatwg-url: 12.0.1
|
||||
dev: false
|
||||
|
||||
/debug@3.2.7:
|
||||
resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==}
|
||||
peerDependencies:
|
||||
@@ -1310,7 +1373,10 @@ packages:
|
||||
optional: true
|
||||
dependencies:
|
||||
ms: 2.1.2
|
||||
dev: true
|
||||
|
||||
/decimal.js@10.4.3:
|
||||
resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==}
|
||||
dev: false
|
||||
|
||||
/deep-is@0.1.4:
|
||||
resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
|
||||
@@ -1334,6 +1400,11 @@ packages:
|
||||
object-keys: 1.1.1
|
||||
dev: true
|
||||
|
||||
/delayed-stream@1.0.0:
|
||||
resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
|
||||
engines: {node: '>=0.4.0'}
|
||||
dev: false
|
||||
|
||||
/dequal@2.0.3:
|
||||
resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
|
||||
engines: {node: '>=6'}
|
||||
@@ -1382,6 +1453,13 @@ packages:
|
||||
resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==}
|
||||
dev: false
|
||||
|
||||
/domexception@4.0.0:
|
||||
resolution: {integrity: sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==}
|
||||
engines: {node: '>=12'}
|
||||
dependencies:
|
||||
webidl-conversions: 7.0.0
|
||||
dev: false
|
||||
|
||||
/domhandler@5.0.3:
|
||||
resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==}
|
||||
engines: {node: '>= 4'}
|
||||
@@ -1416,7 +1494,6 @@ packages:
|
||||
/entities@4.5.0:
|
||||
resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
|
||||
engines: {node: '>=0.12'}
|
||||
dev: false
|
||||
|
||||
/es-abstract@1.22.2:
|
||||
resolution: {integrity: sha512-YoxfFcDmhjOgWPWsV13+2RNjq1F6UQnfs+8TftwNqtzlmFzEXvlUwdrNrYeaizfjQzRMxkZ6ElWMOJIFKdVqwA==}
|
||||
@@ -1857,6 +1934,15 @@ packages:
|
||||
is-callable: 1.2.7
|
||||
dev: true
|
||||
|
||||
/form-data@4.0.0:
|
||||
resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==}
|
||||
engines: {node: '>= 6'}
|
||||
dependencies:
|
||||
asynckit: 0.4.0
|
||||
combined-stream: 1.0.8
|
||||
mime-types: 2.1.35
|
||||
dev: false
|
||||
|
||||
/fraction.js@4.3.6:
|
||||
resolution: {integrity: sha512-n2aZ9tNfYDwaHhvFTkhFErqOMIb8uyzSQ+vGJBjZyanAKZVbGUQ1sngfk9FdkBw7G26O7AgNjLcecLffD1c7eg==}
|
||||
dev: true
|
||||
@@ -2046,6 +2132,41 @@ packages:
|
||||
hasBin: true
|
||||
dev: false
|
||||
|
||||
/html-encoding-sniffer@3.0.0:
|
||||
resolution: {integrity: sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==}
|
||||
engines: {node: '>=12'}
|
||||
dependencies:
|
||||
whatwg-encoding: 2.0.0
|
||||
dev: false
|
||||
|
||||
/http-proxy-agent@5.0.0:
|
||||
resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==}
|
||||
engines: {node: '>= 6'}
|
||||
dependencies:
|
||||
'@tootallnate/once': 2.0.0
|
||||
agent-base: 6.0.2
|
||||
debug: 4.3.4
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
dev: false
|
||||
|
||||
/https-proxy-agent@5.0.1:
|
||||
resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==}
|
||||
engines: {node: '>= 6'}
|
||||
dependencies:
|
||||
agent-base: 6.0.2
|
||||
debug: 4.3.4
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
dev: false
|
||||
|
||||
/iconv-lite@0.6.3:
|
||||
resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
dependencies:
|
||||
safer-buffer: 2.1.2
|
||||
dev: false
|
||||
|
||||
/ignore@5.2.4:
|
||||
resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==}
|
||||
engines: {node: '>= 4'}
|
||||
@@ -2188,6 +2309,10 @@ packages:
|
||||
engines: {node: '>=8'}
|
||||
dev: true
|
||||
|
||||
/is-potential-custom-element-name@1.0.1:
|
||||
resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==}
|
||||
dev: false
|
||||
|
||||
/is-regex@1.1.4:
|
||||
resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==}
|
||||
engines: {node: '>= 0.4'}
|
||||
@@ -2276,6 +2401,44 @@ packages:
|
||||
argparse: 2.0.1
|
||||
dev: true
|
||||
|
||||
/jsdom@22.1.0:
|
||||
resolution: {integrity: sha512-/9AVW7xNbsBv6GfWho4TTNjEo9fe6Zhf9O7s0Fhhr3u+awPwAJMKwAMXnkk5vBxflqLW9hTHX/0cs+P3gW+cQw==}
|
||||
engines: {node: '>=16'}
|
||||
peerDependencies:
|
||||
canvas: ^2.5.0
|
||||
peerDependenciesMeta:
|
||||
canvas:
|
||||
optional: true
|
||||
dependencies:
|
||||
abab: 2.0.6
|
||||
cssstyle: 3.0.0
|
||||
data-urls: 4.0.0
|
||||
decimal.js: 10.4.3
|
||||
domexception: 4.0.0
|
||||
form-data: 4.0.0
|
||||
html-encoding-sniffer: 3.0.0
|
||||
http-proxy-agent: 5.0.0
|
||||
https-proxy-agent: 5.0.1
|
||||
is-potential-custom-element-name: 1.0.1
|
||||
nwsapi: 2.2.7
|
||||
parse5: 7.1.2
|
||||
rrweb-cssom: 0.6.0
|
||||
saxes: 6.0.0
|
||||
symbol-tree: 3.2.4
|
||||
tough-cookie: 4.1.3
|
||||
w3c-xmlserializer: 4.0.0
|
||||
webidl-conversions: 7.0.0
|
||||
whatwg-encoding: 2.0.0
|
||||
whatwg-mimetype: 3.0.0
|
||||
whatwg-url: 12.0.1
|
||||
ws: 8.14.2
|
||||
xml-name-validator: 4.0.0
|
||||
transitivePeerDependencies:
|
||||
- bufferutil
|
||||
- supports-color
|
||||
- utf-8-validate
|
||||
dev: false
|
||||
|
||||
/json-buffer@3.0.1:
|
||||
resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
|
||||
dev: true
|
||||
@@ -2379,6 +2542,18 @@ packages:
|
||||
braces: 3.0.2
|
||||
picomatch: 2.3.1
|
||||
|
||||
/mime-db@1.52.0:
|
||||
resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
|
||||
engines: {node: '>= 0.6'}
|
||||
dev: false
|
||||
|
||||
/mime-types@2.1.35:
|
||||
resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
|
||||
engines: {node: '>= 0.6'}
|
||||
dependencies:
|
||||
mime-db: 1.52.0
|
||||
dev: false
|
||||
|
||||
/minimatch@3.1.2:
|
||||
resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
|
||||
dependencies:
|
||||
@@ -2390,7 +2565,6 @@ packages:
|
||||
|
||||
/ms@2.1.2:
|
||||
resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
|
||||
dev: true
|
||||
|
||||
/ms@2.1.3:
|
||||
resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
|
||||
@@ -2478,6 +2652,10 @@ packages:
|
||||
boolbase: 1.0.0
|
||||
dev: false
|
||||
|
||||
/nwsapi@2.2.7:
|
||||
resolution: {integrity: sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==}
|
||||
dev: false
|
||||
|
||||
/object-assign@4.1.1:
|
||||
resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
@@ -2586,6 +2764,11 @@ packages:
|
||||
callsites: 3.1.0
|
||||
dev: true
|
||||
|
||||
/parse5@7.1.2:
|
||||
resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==}
|
||||
dependencies:
|
||||
entities: 4.5.0
|
||||
|
||||
/path-exists@4.0.0:
|
||||
resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
|
||||
engines: {node: '>=8'}
|
||||
@@ -2708,10 +2891,17 @@ packages:
|
||||
react-is: 16.13.1
|
||||
dev: true
|
||||
|
||||
/psl@1.9.0:
|
||||
resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==}
|
||||
dev: false
|
||||
|
||||
/punycode@2.3.0:
|
||||
resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==}
|
||||
engines: {node: '>=6'}
|
||||
dev: true
|
||||
|
||||
/querystringify@2.2.0:
|
||||
resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==}
|
||||
dev: false
|
||||
|
||||
/queue-microtask@1.2.3:
|
||||
resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
|
||||
@@ -2824,6 +3014,10 @@ packages:
|
||||
set-function-name: 2.0.1
|
||||
dev: true
|
||||
|
||||
/requires-port@1.0.0:
|
||||
resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==}
|
||||
dev: false
|
||||
|
||||
/resolve-from@4.0.0:
|
||||
resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
|
||||
engines: {node: '>=4'}
|
||||
@@ -2861,6 +3055,10 @@ packages:
|
||||
glob: 7.2.3
|
||||
dev: true
|
||||
|
||||
/rrweb-cssom@0.6.0:
|
||||
resolution: {integrity: sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==}
|
||||
dev: false
|
||||
|
||||
/run-parallel@1.2.0:
|
||||
resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
|
||||
dependencies:
|
||||
@@ -2884,6 +3082,17 @@ packages:
|
||||
is-regex: 1.1.4
|
||||
dev: true
|
||||
|
||||
/safer-buffer@2.1.2:
|
||||
resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
|
||||
dev: false
|
||||
|
||||
/saxes@6.0.0:
|
||||
resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==}
|
||||
engines: {node: '>=v12.22.7'}
|
||||
dependencies:
|
||||
xmlchars: 2.2.0
|
||||
dev: false
|
||||
|
||||
/scheduler@0.23.0:
|
||||
resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==}
|
||||
dependencies:
|
||||
@@ -3043,6 +3252,10 @@ packages:
|
||||
resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
|
||||
engines: {node: '>= 0.4'}
|
||||
|
||||
/symbol-tree@3.2.4:
|
||||
resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==}
|
||||
dev: false
|
||||
|
||||
/tailwind-merge@1.14.0:
|
||||
resolution: {integrity: sha512-3mFKyCo/MBcgyOTlrY8T7odzZFx+w+qKSMAmdFzRvqBfLlSigU6TZnlFHK0lkMwj9Bj8OYU+9yW9lmGuS0QEnQ==}
|
||||
dev: false
|
||||
@@ -3111,6 +3324,23 @@ packages:
|
||||
dependencies:
|
||||
is-number: 7.0.0
|
||||
|
||||
/tough-cookie@4.1.3:
|
||||
resolution: {integrity: sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==}
|
||||
engines: {node: '>=6'}
|
||||
dependencies:
|
||||
psl: 1.9.0
|
||||
punycode: 2.3.0
|
||||
universalify: 0.2.0
|
||||
url-parse: 1.5.10
|
||||
dev: false
|
||||
|
||||
/tr46@4.1.1:
|
||||
resolution: {integrity: sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw==}
|
||||
engines: {node: '>=14'}
|
||||
dependencies:
|
||||
punycode: 2.3.0
|
||||
dev: false
|
||||
|
||||
/ts-api-utils@1.0.3(typescript@5.2.2):
|
||||
resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==}
|
||||
engines: {node: '>=16.13.0'}
|
||||
@@ -3201,6 +3431,11 @@ packages:
|
||||
which-boxed-primitive: 1.0.2
|
||||
dev: true
|
||||
|
||||
/universalify@0.2.0:
|
||||
resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==}
|
||||
engines: {node: '>= 4.0.0'}
|
||||
dev: false
|
||||
|
||||
/update-browserslist-db@1.0.13(browserslist@4.22.1):
|
||||
resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==}
|
||||
hasBin: true
|
||||
@@ -3218,6 +3453,13 @@ packages:
|
||||
punycode: 2.3.0
|
||||
dev: true
|
||||
|
||||
/url-parse@1.5.10:
|
||||
resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==}
|
||||
dependencies:
|
||||
querystringify: 2.2.0
|
||||
requires-port: 1.0.0
|
||||
dev: false
|
||||
|
||||
/use-callback-ref@1.3.0(@types/react@18.2.24)(react@18.2.0):
|
||||
resolution: {integrity: sha512-3FT9PRuRdbB9HfXhEq35u4oZkvpJ5kuYbpqhCfmiZyReuRgpnhDlbr2ZEnnuS0RrJAPn6l23xjFg9kpDM+Ms7w==}
|
||||
engines: {node: '>=10'}
|
||||
@@ -3252,6 +3494,13 @@ packages:
|
||||
/util-deprecate@1.0.2:
|
||||
resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
|
||||
|
||||
/w3c-xmlserializer@4.0.0:
|
||||
resolution: {integrity: sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==}
|
||||
engines: {node: '>=14'}
|
||||
dependencies:
|
||||
xml-name-validator: 4.0.0
|
||||
dev: false
|
||||
|
||||
/watchpack@2.4.0:
|
||||
resolution: {integrity: sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==}
|
||||
engines: {node: '>=10.13.0'}
|
||||
@@ -3260,6 +3509,31 @@ packages:
|
||||
graceful-fs: 4.2.11
|
||||
dev: false
|
||||
|
||||
/webidl-conversions@7.0.0:
|
||||
resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==}
|
||||
engines: {node: '>=12'}
|
||||
dev: false
|
||||
|
||||
/whatwg-encoding@2.0.0:
|
||||
resolution: {integrity: sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==}
|
||||
engines: {node: '>=12'}
|
||||
dependencies:
|
||||
iconv-lite: 0.6.3
|
||||
dev: false
|
||||
|
||||
/whatwg-mimetype@3.0.0:
|
||||
resolution: {integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==}
|
||||
engines: {node: '>=12'}
|
||||
dev: false
|
||||
|
||||
/whatwg-url@12.0.1:
|
||||
resolution: {integrity: sha512-Ed/LrqB8EPlGxjS+TrsXcpUond1mhccS3pchLhzSgPCnTimUCKj3IZE75pAs5m6heB2U2TMerKFUXheyHY+VDQ==}
|
||||
engines: {node: '>=14'}
|
||||
dependencies:
|
||||
tr46: 4.1.1
|
||||
webidl-conversions: 7.0.0
|
||||
dev: false
|
||||
|
||||
/which-boxed-primitive@1.0.2:
|
||||
resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==}
|
||||
dependencies:
|
||||
@@ -3319,6 +3593,28 @@ packages:
|
||||
/wrappy@1.0.2:
|
||||
resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
|
||||
|
||||
/ws@8.14.2:
|
||||
resolution: {integrity: sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==}
|
||||
engines: {node: '>=10.0.0'}
|
||||
peerDependencies:
|
||||
bufferutil: ^4.0.1
|
||||
utf-8-validate: '>=5.0.2'
|
||||
peerDependenciesMeta:
|
||||
bufferutil:
|
||||
optional: true
|
||||
utf-8-validate:
|
||||
optional: true
|
||||
dev: false
|
||||
|
||||
/xml-name-validator@4.0.0:
|
||||
resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==}
|
||||
engines: {node: '>=12'}
|
||||
dev: false
|
||||
|
||||
/xmlchars@2.2.0:
|
||||
resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==}
|
||||
dev: false
|
||||
|
||||
/yallist@4.0.0:
|
||||
resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
|
||||
dev: true
|
||||
|
||||
@@ -7,7 +7,7 @@ export const content = `<html><head><title>Расписание занятий</
|
||||
<table border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="3481A6"><tbody><tr><td height="30" align="right" bgcolor="ffffff" colspan="2" background="lib/img/itf_ht/mn_top_bg.gif"><a href="?mnt=2"></a><a href="?mnt=3"></a><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td background="lib/img/itf_ht/mn_top_bg.gif" align="right" bgcolor="ffffff" colspan="1"><a href="?mn=2" class="t_on"> Расписание занятий </a></td><td background="lib/img/itf_ht/mn_top_bg_btn.gif" align="right" bgcolor="ffffff"><img src="lib/img/itf_ht/mn_top_btn_r.gif"></td><td background="lib/img/itf_ht/mn_top_bg_btn.gif" align="right" bgcolor="ffffff"><a href="?mn=3" class="t_on">Расписание преподавателей</a></td><td background="lib/img/itf_ht/mn_top_bg_btn.gif" align="right" bgcolor="ffffff"><img src="lib/img/itf_ht/mn_top_btn_l.gif"><a href="?mnt=4"></a></td><td background="lib/img/itf_ht/mn_top_bg_btn.gif" align="right" bgcolor="ffffff"><img src="lib/img/itf_ht/mn_top_btn_r.gif"></td><td background="lib/img/itf_ht/mn_top_bg_btn.gif" align="right" bgcolor="ffffff"><a href="?mn=4" class="t_on"></a><a href="https://lk.ks.psuti.ru/std">Личный кабинет студента</a></td><td background="lib/img/itf_ht/mn_top_bg_btn.gif" align="right" bgcolor="ffffff"><img src="lib/img/itf_ht/mn_top_btn_l.gif"></td></tr></tbody></table></td></tr></tbody></table><center><a href="https://lk.ks.psuti.ru/lib/doc/lk_ks_psuti_manual.pdf" target="blank" class="t_green_14"><b><u><i>Инструкция: "Доступ в личный кабинет студента"</i></u></b></a><br>
|
||||
<a href="https://disk.yandex.ru/d/ioxTvdQXkPpU5w" target="_blank"><u><i>Расписание занятий на 1 семестр 2023-2024 уч. год (версия для печати)</i></u></a><br>
|
||||
<a href="https://disk.yandex.ru/i/WyzJ4DVeq5e_Vg" target="_blank"><u><i>График учебного процесса на 2023/2024 уч. год (версия для печати)</i></u></a><br>
|
||||
</center><br>
|
||||
</center><br>
|
||||
<table border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="3481A6">
|
||||
<tbody><tr><td height="20" bgcolor="dddddd" align="center" colspan="7"><h7>Расписание занятий</h7></td></tr>
|
||||
<tr><td bgcolor="3481A6" align="center" colspan="7" background="lib/img/itf_ht/hr_b_01.gif"><img src="lib/img/itf_ht/hr_b_01.gif"></td></tr><tr><td height="10" bgcolor="ffffff" colspan="7" align="center">с 25.09.2023 по 01.10.2023
|
||||
@@ -28,7 +28,7 @@ export const content = `<html><head><title>Расписание занятий</
|
||||
<td bgcolor="ffffff"><b>Задание для выполнения</b></td>
|
||||
</tr>
|
||||
<tr align="center"><td bgcolor="ffffff">1</td>
|
||||
<td bgcolor="ffffff">08:00 – 09:30
|
||||
<td bgcolor="ffffff">08:00 – 09:30
|
||||
</td>
|
||||
<td bgcolor="ffffff">Самостоятельная работа</td>
|
||||
<td bgcolor="ffffff">Физика<br>Кусаева Зарина Владимировна<font class="t_ur2"><br>Л. Толстого, 23<br>Кабинет: 410-2</font></td>
|
||||
@@ -36,7 +36,7 @@ export const content = `<html><head><title>Расписание занятий</
|
||||
<td bgcolor="ffffff"><b><a href="https://cloud.mail.ru/public/eDk2/eV51SaUoU" target="blank">Лекция Задачи</a></b><br></td>
|
||||
<td bgcolor="ffffff">Сделать конспект по теме: выписать определения, формулы. Самостоятельно решить задачи.<br></td></tr>
|
||||
<tr align="center"><td bgcolor="ffffff">2</td>
|
||||
<td bgcolor="ffffff">09:40 – 11:10
|
||||
<td bgcolor="ffffff">09:40 – 11:10
|
||||
</td>
|
||||
<td bgcolor="ffffff"></td>
|
||||
<td bgcolor="ffffff">Математика<br>Амукова Светлана Николаевна<font class="t_ur2"><br>Л. Толстого, 23<br>Кабинет: 410-2</font></td>
|
||||
@@ -44,7 +44,7 @@ export const content = `<html><head><title>Расписание занятий</
|
||||
<td bgcolor="ffffff"></td>
|
||||
<td bgcolor="ffffff"><br></td></tr>
|
||||
<tr align="center"><td bgcolor="ffffff">3</td>
|
||||
<td bgcolor="ffffff">11:40 – 13:10
|
||||
<td bgcolor="ffffff">11:40 – 13:10
|
||||
</td>
|
||||
<td bgcolor="ffffff"></td>
|
||||
<td bgcolor="ffffff">Математика<br>Амукова Светлана Николаевна<font class="t_ur2"><br>Л. Толстого, 23<br>Кабинет: 410-2</font></td>
|
||||
@@ -52,7 +52,7 @@ export const content = `<html><head><title>Расписание занятий</
|
||||
<td bgcolor="ffffff"></td>
|
||||
<td bgcolor="ffffff"><br></td></tr>
|
||||
<tr align="center"><td bgcolor="ffffff">4</td>
|
||||
<td bgcolor="ffffff">13:20 – 14:50
|
||||
<td bgcolor="ffffff">13:20 – 14:50
|
||||
</td>
|
||||
<td bgcolor="ffffff"></td>
|
||||
<td bgcolor="ffffff">Химия<br>Тарасова Таисия Евгеньевна<font class="t_ur2"><br>Л. Толстого, 23<br>Кабинет: 410-2</font></td>
|
||||
@@ -71,7 +71,7 @@ export const content = `<html><head><title>Расписание занятий</
|
||||
<td bgcolor="ffffff"><b>Задание для выполнения</b></td>
|
||||
</tr>
|
||||
<tr align="center"><td bgcolor="ffffff">3</td>
|
||||
<td bgcolor="ffffff">11:40 – 13:10
|
||||
<td bgcolor="ffffff">11:40 – 13:10
|
||||
</td>
|
||||
<td bgcolor="ffffff"></td>
|
||||
<td bgcolor="ffffff">История<br>Арефьев Андрей Андреевич<font class="t_green_10"><br>Московское шоссе, 120<br>Кабинет: 401</font></td>
|
||||
@@ -79,7 +79,7 @@ export const content = `<html><head><title>Расписание занятий</
|
||||
<td bgcolor="ffffff"></td>
|
||||
<td bgcolor="ffffff"><br></td></tr>
|
||||
<tr align="center"><td bgcolor="ffffbb">4</td>
|
||||
<td bgcolor="ffffbb">13:20 – 14:50
|
||||
<td bgcolor="ffffbb">13:20 – 14:50
|
||||
<br><a class="t_zm">дистанционно</a></td>
|
||||
<td bgcolor="ffffbb"></td>
|
||||
<td bgcolor="ffffbb">Физическая культура<br> </td>
|
||||
@@ -87,7 +87,7 @@ export const content = `<html><head><title>Расписание занятий</
|
||||
<td bgcolor="ffffbb"></td>
|
||||
<td bgcolor="ffffbb"><br></td></tr>
|
||||
<tr align="center"><td bgcolor="ffffff">5</td>
|
||||
<td bgcolor="ffffff">15:10 – 16:40
|
||||
<td bgcolor="ffffff">15:10 – 16:40
|
||||
</td>
|
||||
<td bgcolor="ffffff"></td>
|
||||
<td bgcolor="ffffff">Информатика<br>Ларионова Софья Николаевна<font class="t_green_10"><br>Московское шоссе, 120<br>Кабинет: 208</font></td>
|
||||
@@ -106,7 +106,7 @@ export const content = `<html><head><title>Расписание занятий</
|
||||
<td bgcolor="ffffff"><b>Задание для выполнения</b></td>
|
||||
</tr>
|
||||
<tr align="center"><td bgcolor="ffffff">3</td>
|
||||
<td bgcolor="ffffff">11:40 – 13:10
|
||||
<td bgcolor="ffffff">11:40 – 13:10
|
||||
</td>
|
||||
<td bgcolor="ffffff"></td>
|
||||
<td bgcolor="ffffff">Физика<br>Кусаева Зарина Владимировна<font class="t_green_10"><br>Московское шоссе, 120<br>Кабинет: 310</font></td>
|
||||
@@ -114,7 +114,7 @@ export const content = `<html><head><title>Расписание занятий</
|
||||
<td bgcolor="ffffff"></td>
|
||||
<td bgcolor="ffffff">Проверка конспекта и задач<br></td></tr>
|
||||
<tr align="center"><td bgcolor="ffffbb">4</td>
|
||||
<td bgcolor="ffffbb">13:20 – 14:50
|
||||
<td bgcolor="ffffbb">13:20 – 14:50
|
||||
<br><a class="t_zm">перенос с 02.10.23</a></td>
|
||||
<td bgcolor="ffffbb"></td>
|
||||
<td bgcolor="ffffbb">Физика<br>Кусаева Зарина Владимировна<font class="t_green_10"><br>Московское шоссе, 120<br>Кабинет: 310</font></td>
|
||||
@@ -122,7 +122,7 @@ export const content = `<html><head><title>Расписание занятий</
|
||||
<td bgcolor="ffffbb"></td>
|
||||
<td bgcolor="ffffbb"><br></td></tr>
|
||||
<tr align="center"><td bgcolor="ffffff">5</td>
|
||||
<td bgcolor="ffffff">15:10 – 16:40
|
||||
<td bgcolor="ffffff">15:10 – 16:40
|
||||
</td>
|
||||
<td bgcolor="ffffff"></td>
|
||||
<td bgcolor="ffffff">Иностранный язык<br>Карпеева Александра Сергеевна<font class="t_green_10"><br>Московское шоссе, 120<br>Кабинет: 234</font></td>
|
||||
@@ -130,7 +130,7 @@ export const content = `<html><head><title>Расписание занятий</
|
||||
<td bgcolor="ffffff"></td>
|
||||
<td bgcolor="ffffff"><br></td></tr>
|
||||
<tr align="center"><td bgcolor="ffffbb">6</td>
|
||||
<td bgcolor="ffffbb">16:50 – 18:20
|
||||
<td bgcolor="ffffbb">16:50 – 18:20
|
||||
<br><a class="t_zm">дистанционно</a></td>
|
||||
<td bgcolor="ffffbb"></td>
|
||||
<td bgcolor="ffffbb">География<br> </td>
|
||||
@@ -149,7 +149,7 @@ export const content = `<html><head><title>Расписание занятий</
|
||||
<td bgcolor="ffffff"><b>Задание для выполнения</b></td>
|
||||
</tr>
|
||||
<tr align="center"><td bgcolor="ffffbb">2</td>
|
||||
<td bgcolor="ffffbb">09:40 – 11:10
|
||||
<td bgcolor="ffffbb">09:40 – 11:10
|
||||
<br><a class="t_zm">дистанционно</a></td>
|
||||
<td bgcolor="ffffbb"></td>
|
||||
<td bgcolor="ffffbb">География<br> </td>
|
||||
@@ -157,7 +157,7 @@ export const content = `<html><head><title>Расписание занятий</
|
||||
<td bgcolor="ffffbb"></td>
|
||||
<td bgcolor="ffffbb"><br></td></tr>
|
||||
<tr align="center"><td bgcolor="ffffff">3</td>
|
||||
<td bgcolor="ffffff">11:40 – 13:10
|
||||
<td bgcolor="ffffff">11:40 – 13:10
|
||||
</td>
|
||||
<td bgcolor="ffffff"></td>
|
||||
<td bgcolor="ffffff">Математика<br>Амукова Светлана Николаевна<font class="t_ur2"><br>Л. Толстого, 23<br>Кабинет: 410-2</font></td>
|
||||
@@ -165,7 +165,7 @@ export const content = `<html><head><title>Расписание занятий</
|
||||
<td bgcolor="ffffff"></td>
|
||||
<td bgcolor="ffffff"><br></td></tr>
|
||||
<tr align="center"><td bgcolor="ffffff">4</td>
|
||||
<td bgcolor="ffffff">13:20 – 14:50
|
||||
<td bgcolor="ffffff">13:20 – 14:50
|
||||
</td>
|
||||
<td bgcolor="ffffff">Очно</td>
|
||||
<td bgcolor="ffffff">Русский язык<br>Назарова Елена Федоровна<font class="t_ur2"><br>Л. Толстого, 23<br>Кабинет: 410-2</font></td>
|
||||
@@ -173,7 +173,7 @@ export const content = `<html><head><title>Расписание занятий</
|
||||
<td bgcolor="ffffff"><b><a href="https://cloud.mail.ru/public/7mwL/Ui6a7ftsP" target="blank">Практическая работа 2</a></b><br></td>
|
||||
<td bgcolor="ffffff"><br></td></tr>
|
||||
<tr align="center"><td bgcolor="ffffff">5</td>
|
||||
<td bgcolor="ffffff">15:10 – 16:40
|
||||
<td bgcolor="ffffff">15:10 – 16:40
|
||||
</td>
|
||||
<td bgcolor="ffffff">Очно</td>
|
||||
<td bgcolor="ffffff">Литература<br>Назарова Елена Федоровна<font class="t_ur2"><br>Л. Толстого, 23<br>Кабинет: 410-2</font></td>
|
||||
@@ -192,7 +192,7 @@ export const content = `<html><head><title>Расписание занятий</
|
||||
<td bgcolor="ffffff"><b>Задание для выполнения</b></td>
|
||||
</tr>
|
||||
<tr align="center"><td bgcolor="ffffff">2</td>
|
||||
<td bgcolor="ffffff">09:40 – 11:10
|
||||
<td bgcolor="ffffff">09:40 – 11:10
|
||||
</td>
|
||||
<td bgcolor="ffffff">Очно</td>
|
||||
<td bgcolor="ffffff">Русский язык<br>Назарова Елена Федоровна<font class="t_green_10"><br>Московское шоссе, 120<br>Кабинет: 324</font></td>
|
||||
@@ -200,7 +200,7 @@ export const content = `<html><head><title>Расписание занятий</
|
||||
<td bgcolor="ffffff"><b><a href="https://cloud.mail.ru/public/EBc5/MYaGgXqKe" target="blank">презентация</a></b><br></td>
|
||||
<td bgcolor="ffffff">изучить презентацию, выучить определения<br></td></tr>
|
||||
<tr align="center"><td bgcolor="ffffff">3</td>
|
||||
<td bgcolor="ffffff">11:40 – 13:10
|
||||
<td bgcolor="ffffff">11:40 – 13:10
|
||||
</td>
|
||||
<td bgcolor="ffffff">Очно</td>
|
||||
<td bgcolor="ffffff">Литература<br>Назарова Елена Федоровна<font class="t_green_10"><br>Московское шоссе, 120<br>Кабинет: 321</font></td>
|
||||
@@ -219,7 +219,7 @@ export const content = `<html><head><title>Расписание занятий</
|
||||
<td bgcolor="ffffff"><b>Задание для выполнения</b></td>
|
||||
</tr>
|
||||
<tr align="center"><td bgcolor="ffffff">1</td>
|
||||
<td bgcolor="ffffff">08:00 – 09:30
|
||||
<td bgcolor="ffffff">08:00 – 09:30
|
||||
</td>
|
||||
<td bgcolor="ffffff"></td>
|
||||
<td bgcolor="ffffff">Основы безопасности жизнедеятельности<br>Корнилова Светлана Александровна<font class="t_green_10"><br>Московское шоссе, 120<br>Кабинет: 110</font></td>
|
||||
@@ -227,7 +227,7 @@ export const content = `<html><head><title>Расписание занятий</
|
||||
<td bgcolor="ffffff"></td>
|
||||
<td bgcolor="ffffff">оформить отчет<br></td></tr>
|
||||
<tr align="center"><td bgcolor="ffffff">2</td>
|
||||
<td bgcolor="ffffff">09:40 – 11:10
|
||||
<td bgcolor="ffffff">09:40 – 11:10
|
||||
</td>
|
||||
<td bgcolor="ffffff">Очно</td>
|
||||
<td bgcolor="ffffff">Литература<br>Назарова Елена Федоровна<font class="t_green_10"><br>Московское шоссе, 120<br>Кабинет: 321</font></td>
|
||||
@@ -235,7 +235,7 @@ export const content = `<html><head><title>Расписание занятий</
|
||||
<td bgcolor="ffffff"></td>
|
||||
<td bgcolor="ffffff">читать роман "Отцы и дети"<br></td></tr>
|
||||
<tr align="center"><td bgcolor="ffffff">3</td>
|
||||
<td bgcolor="ffffff">11:30 – 13:00
|
||||
<td bgcolor="ffffff">11:30 – 13:00
|
||||
</td>
|
||||
<td bgcolor="ffffff"></td>
|
||||
<td bgcolor="ffffff"><i>Свободное время</i><br> </td>
|
||||
@@ -357,5 +357,4 @@ export const content = `<html><head><title>Расписание занятий</
|
||||
</tbody></table></td></tr><tr><td align="right" colspan="8" background="lib/img/itf_ht/hr_b_04.gif"><img src="lib/img/itf_ht/hr_b_05.gif"></td></tr></tbody></table></td>
|
||||
</tr>
|
||||
</tbody></table><br>
|
||||
|
||||
</body></html>`
|
||||
@@ -1,18 +1,24 @@
|
||||
import { Day } from '@/shared/model/day'
|
||||
import { parsePage } from '@/app/parser/schedule'
|
||||
import contentTypeParser from 'content-type'
|
||||
import { parse } from 'node-html-parser'
|
||||
// import { parse } from 'node-html-parser'
|
||||
import { JSDOM } from 'jsdom'
|
||||
import { content as mockContent } from './mock'
|
||||
|
||||
// ПС-7: 146
|
||||
export async function getSchedule(groupID: number): Promise<Day[]> {
|
||||
// const page = await fetch(`https://lk.ks.psuti.ru/?mn=2&obj=${groupID}`)
|
||||
// const page = await fetch(`${process.env.PROXY_URL ?? 'https://lk.ks.psuti.ru'}/?mn=2&obj=${groupID}`)
|
||||
const page = { text: async () => mockContent, status: 200, headers: { get: (s: string) => s && 'text/html' } }
|
||||
const content = await page.text()
|
||||
const contentType = page.headers.get('content-type')
|
||||
if (page.status === 200 && contentType && contentTypeParser.parse(contentType).type === 'text/html') {
|
||||
const root = parse(content)
|
||||
return parsePage(root)
|
||||
try {
|
||||
const root = new JSDOM(content).window.document
|
||||
return parsePage(root)
|
||||
} catch(e) {
|
||||
console.error('Error while parsing lk.ks.psuti.ru')
|
||||
throw e
|
||||
}
|
||||
} else {
|
||||
console.error(page.status, contentType)
|
||||
console.error(content.length > 500 ? content.slice(0, 500 - 3) + '...' : content)
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
import { Day } from '@/shared/model/day'
|
||||
import { Lesson } from '@/shared/model/lesson'
|
||||
import { HTMLElement } from 'node-html-parser'
|
||||
|
||||
const dayTitleParser = (text: string) => {
|
||||
const [dateString, week] = text.trim().split(' / ')
|
||||
@@ -10,55 +9,69 @@ const dayTitleParser = (text: string) => {
|
||||
return { date, weekNumber }
|
||||
}
|
||||
|
||||
const parseLesson = (row: HTMLElement): Lesson => {
|
||||
const cells = row.querySelectorAll(':scope > td')
|
||||
const parseLesson = (row: Element): Lesson | null => {
|
||||
const cells = Array.from(row.querySelectorAll(':scope > td'))
|
||||
if (cells[3].textContent!.trim() === 'Свободное время') return null
|
||||
|
||||
const isChange = cells.every(td => td.getAttribute('bgcolor') === 'ffffbb')
|
||||
|
||||
const timeCell = cells[1].childNodes
|
||||
const [startTime, endTime] = timeCell[0].textContent.trim().split(' – ')
|
||||
const [startTime, endTime] = timeCell[0].textContent!.trim().split(' – ')
|
||||
const time: Lesson['time'] = {
|
||||
start: startTime,
|
||||
end: endTime
|
||||
start: startTime ?? '',
|
||||
end: endTime ?? ''
|
||||
}
|
||||
if (timeCell[2]) {
|
||||
time.hint = timeCell[2].textContent.trim()
|
||||
time.hint = timeCell[2].textContent!.trim()
|
||||
}
|
||||
|
||||
const subject = ''
|
||||
const teacher = ''
|
||||
const subject = cells[3].childNodes[0].textContent!.trim()
|
||||
|
||||
const place: Lesson['place'] = {
|
||||
address: '1',
|
||||
classroom: 1
|
||||
let teacher: Lesson['teacher']
|
||||
const teacherCell = cells[3].childNodes[2]
|
||||
if (teacherCell) {
|
||||
teacher = teacherCell.textContent!.trim()
|
||||
}
|
||||
|
||||
const topic = cells[4].textContent.trim()
|
||||
const placeCell = cells[3].childNodes[3]
|
||||
|
||||
let place: Lesson['place']
|
||||
if (placeCell) {
|
||||
place = {
|
||||
address: placeCell.childNodes[1].textContent!.trim(),
|
||||
classroom: Number(placeCell.childNodes[3].textContent!.trim().match(/^Кабинет: (\d+)(-2)?$/)![1])
|
||||
}
|
||||
}
|
||||
|
||||
const topic: Lesson['topic'] = cells[4].textContent!.trim()
|
||||
|
||||
const resources: Lesson['resources'] = []
|
||||
// {
|
||||
// type: 'link'
|
||||
// title: string
|
||||
// url: string
|
||||
// } []
|
||||
Array.from(cells[5].querySelectorAll('a'))
|
||||
.forEach(a => {
|
||||
resources.push({
|
||||
type: 'link',
|
||||
title: a.textContent!.trim(),
|
||||
url: a.getAttribute('href')!
|
||||
})
|
||||
})
|
||||
|
||||
return {
|
||||
isChange,
|
||||
time,
|
||||
type: cells[2].textContent.trim(),
|
||||
type: cells[2].textContent!.trim(),
|
||||
subject,
|
||||
teacher,
|
||||
place,
|
||||
...(teacher && { teacher }),
|
||||
...(place && { place }),
|
||||
...(topic && { topic }),
|
||||
resources,
|
||||
homework: cells[6].textContent.trim()
|
||||
homework: cells[6].textContent!.trim()
|
||||
}
|
||||
}
|
||||
|
||||
export function parsePage(document: HTMLElement): Day[] {
|
||||
export function parsePage(document: Document): Day[] {
|
||||
const tables = Array.from(document.querySelectorAll('body > table'))
|
||||
const table = tables.find(table => table.querySelector(':scope > tbody > tr:first-child')?.textContent?.trim() === 'ПС-7')
|
||||
const rows = Array.from(table!.querySelectorAll(':scope > tbody > tr')).slice(1)
|
||||
const rows = Array.from(table!.children[0].children).filter(el => el.tagName === 'TR').slice(2)
|
||||
|
||||
const days = []
|
||||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
||||
@@ -89,7 +102,9 @@ export function parsePage(document: HTMLElement): Day[] {
|
||||
dayInfo.weekNumber = weekNumber
|
||||
previousRowIsDayTitle = true
|
||||
} else {
|
||||
dayLessons.push(parseLesson(row))
|
||||
const lesson = parseLesson(row)
|
||||
if(lesson !== null)
|
||||
dayLessons.push(lesson)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -7,8 +7,8 @@ export type Lesson = {
|
||||
}
|
||||
type: string
|
||||
subject: string
|
||||
teacher: string
|
||||
place: {
|
||||
teacher?: string
|
||||
place?: {
|
||||
address: string
|
||||
classroom: number
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user