├── .gitignore ├── README.md ├── app.js ├── data └── student.json ├── package-lock.json ├── package.json ├── routes ├── index.js └── student.js └── utils └── errrorHandler.js /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | lerna-debug.log* 8 | 9 | # Diagnostic reports (https://nodejs.org/api/report.html) 10 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 11 | 12 | # Runtime data 13 | pids 14 | *.pid 15 | *.seed 16 | *.pid.lock 17 | .idea 18 | .vscode 19 | 20 | # Directory for instrumented libs generated by jscoverage/JSCover 21 | lib-cov 22 | 23 | # Coverage directory used by tools like istanbul 24 | coverage 25 | *.lcov 26 | 27 | # nyc test coverage 28 | .nyc_output 29 | 30 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 31 | .grunt 32 | 33 | # Bower dependency directory (https://bower.io/) 34 | bower_components 35 | 36 | # node-waf configuration 37 | .lock-wscript 38 | 39 | # Compiled binary addons (https://nodejs.org/api/addons.html) 40 | build/Release 41 | 42 | # Dependency directories 43 | node_modules/ 44 | jspm_packages/ 45 | 46 | # TypeScript v1 declaration files 47 | typings/ 48 | 49 | # TypeScript cache 50 | *.tsbuildinfo 51 | 52 | # Optional npm cache directory 53 | .npm 54 | 55 | # Optional eslint cache 56 | .eslintcache 57 | 58 | # Microbundle cache 59 | .rpt2_cache/ 60 | .rts2_cache_cjs/ 61 | .rts2_cache_es/ 62 | .rts2_cache_umd/ 63 | 64 | # Optional REPL history 65 | .node_repl_history 66 | 67 | # Output of 'npm pack' 68 | *.tgz 69 | 70 | # Yarn Integrity file 71 | .yarn-integrity 72 | 73 | # dotenv environment variables file 74 | .env 75 | .env.test 76 | 77 | # parcel-bundler cache (https://parceljs.org/) 78 | .cache 79 | 80 | # Next.js build output 81 | .next 82 | 83 | # Nuxt.js build / generate output 84 | .nuxt 85 | dist 86 | 87 | # Gatsby files 88 | .cache/ 89 | # Comment in the public line in if your project uses Gatsby and *not* Next.js 90 | # https://nextjs.org/blog/next-9-1#public-directory-support 91 | # public 92 | 93 | # vuepress build output 94 | .vuepress/dist 95 | 96 | # Serverless directories 97 | .serverless/ 98 | 99 | # FuseBox cache 100 | .fusebox/ 101 | 102 | # DynamoDB Local files 103 | .dynamodb/ 104 | 105 | # TernJS port file 106 | .tern-port 107 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # node-js-fs-module 2 | In Node.js, the best practices for using the FS module are as follows: 3 | -------------------------------------------------------------------------------- /app.js: -------------------------------------------------------------------------------- 1 | const express = require('express') 2 | const app = express() 3 | const port = 3000 4 | const routes = require('./routes') 5 | const { errorHandler } = require('./utils/errrorHandler') 6 | 7 | app.use(express.json()) 8 | app.use(express.urlencoded({ extended: false })) 9 | 10 | app.use('/api',routes) 11 | app.use(errorHandler) 12 | 13 | app.listen(port, function (){ 14 | console.log('listening on port '+port) 15 | console.log(`http://localhost:${port}`) 16 | }) 17 | -------------------------------------------------------------------------------- /data/student.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "ID": "1", 4 | "Name": "ramesh", 5 | "Gender": "1", 6 | "Class": "32", 7 | "Seat": "15", 8 | "Club": "0", 9 | "Persona": "1", 10 | "Crush": "0", 11 | "BreastSize": "0", 12 | "Strength": "0", 13 | "Hairstyle": "1", 14 | "Color": "Black", 15 | "Eyes": "Black", 16 | "EyeType": "Default", 17 | "Stockings": "None", 18 | "Accessory": "0", 19 | "ScheduleTime": "7_7_8_13.01_13.375_15.5_16_17.25_99_99", 20 | "ScheduleDestination": "Spawn_Locker_Hangout_Seat_LunchSpot_Seat_Clean_Hangout_Locker_Exit", 21 | "ScheduleAction": "Stand_Stand_Read_Sit_Eat_Sit_Clean_Read_Shoes_Stand", 22 | "Info": "An average student. \n \n Average grades, average looks, average life... \n \n I'm not sure what you see in him." 23 | }, 24 | { 25 | "ID": "2", 26 | "Name": "Yui Rio", 27 | "Gender": "0", 28 | "Class": "11", 29 | "Seat": "14", 30 | "Club": "1", 31 | "Persona": "5", 32 | "Crush": "0", 33 | "BreastSize": "0.5", 34 | "Strength": "0", 35 | "Hairstyle": "2", 36 | "Color": "Red", 37 | "Eyes": "Red", 38 | "EyeType": "Default", 39 | "Stockings": "Red", 40 | "Accessory": "0", 41 | "ScheduleTime": "7_7_8_13_13.375_15.5_16_17.25_99_99", 42 | "ScheduleDestination": "Spawn_Locker_Hangout_Seat_LunchSpot_Seat_Clean_Club_Locker_Exit", 43 | "ScheduleAction": "Stand_Stand_Socialize_Sit_Socialize_Sit_Clean_SocialSit_Shoes_Stand", 44 | "Info": "" 45 | }, 46 | { 47 | "ID": "3", 48 | "Name": "Yuna Hina", 49 | "Gender": "0", 50 | "Class": "12", 51 | "Seat": "14", 52 | "Club": "1", 53 | "Persona": "6", 54 | "Crush": "0", 55 | "BreastSize": "0.8", 56 | "Strength": "0", 57 | "Hairstyle": "3", 58 | "Color": "Yellow", 59 | "Eyes": "Yellow", 60 | "EyeType": "Default", 61 | "Stockings": "Yellow", 62 | "Accessory": "0", 63 | "ScheduleTime": "7_7_8_13_13.375_15.5_16_17.25_99_99", 64 | "ScheduleDestination": "Spawn_Locker_Hangout_Seat_LunchSpot_Seat_Clean_Club_Locker_Exit", 65 | "ScheduleAction": "Stand_Stand_Socialize_Sit_Socialize_Sit_Clean_SocialSit_Shoes_Stand", 66 | "Info": "" 67 | }, 68 | { 69 | "ID": "4", 70 | "Name": "Koharu Hinata", 71 | "Gender": "0", 72 | "Class": "21", 73 | "Seat": "14", 74 | "Club": "1", 75 | "Persona": "6", 76 | "Crush": "0", 77 | "BreastSize": "1.1", 78 | "Strength": "0", 79 | "Hairstyle": "4", 80 | "Color": "Green", 81 | "Eyes": "Green", 82 | "EyeType": "Default", 83 | "Stockings": "Green", 84 | "Accessory": "0", 85 | "ScheduleTime": "7_7_8_13.0001_13.375_15.5001_16_17.25_99_99", 86 | "ScheduleDestination": "Spawn_Locker_Hangout_Seat_LunchSpot_Seat_Clean_Club_Locker_Exit", 87 | "ScheduleAction": "Stand_Stand_Socialize_Sit_Socialize_Sit_Clean_SocialSit_Shoes_Stand", 88 | "Info": "" 89 | }, 90 | { 91 | "ID": "5", 92 | "Name": "Mei Mio", 93 | "Gender": "0", 94 | "Class": "22", 95 | "Seat": "14", 96 | "Club": "1", 97 | "Persona": "2", 98 | "Crush": "0", 99 | "BreastSize": "1.4", 100 | "Strength": "0", 101 | "Hairstyle": "5", 102 | "Color": "Blue", 103 | "Eyes": "Blue", 104 | "EyeType": "Default", 105 | "Stockings": "Blue", 106 | "Accessory": "7", 107 | "ScheduleTime": "7_7_8_13_13.375_15.5_16_17.25_99_99", 108 | "ScheduleDestination": "Spawn_Locker_Hangout_Seat_LunchSpot_Seat_Clean_Club_Locker_Exit", 109 | "ScheduleAction": "Stand_Stand_Socialize_Sit_Socialize_Sit_Clean_SocialSit_Shoes_Stand", 110 | "Info": "" 111 | }, 112 | { 113 | "ID": "6", 114 | "Name": "Saki Miyu", 115 | "Gender": "0", 116 | "Class": "31", 117 | "Seat": "14", 118 | "Club": "1", 119 | "Persona": "6", 120 | "Crush": "0", 121 | "BreastSize": "1.7", 122 | "Strength": "0", 123 | "Hairstyle": "6", 124 | "Color": "Cyan", 125 | "Eyes": "Cyan", 126 | "EyeType": "Default", 127 | "Stockings": "Cyan", 128 | "Accessory": "0", 129 | "ScheduleTime": "7_7_8_13.01_13.375_15.5_16_17.25_99_99", 130 | "ScheduleDestination": "Spawn_Locker_Hangout_Seat_LunchSpot_Seat_Clean_Club_Locker_Exit", 131 | "ScheduleAction": "Stand_Stand_Socialize_Sit_Socialize_Sit_Clean_SocialSit_Shoes_Stand", 132 | "Info": "Kokona Haruka's best friend and closest confidant. Kokona is likely to discuss personal matters with this girl." 133 | }, 134 | { 135 | "ID": "7", 136 | "Name": "Kokona Haruka", 137 | "Gender": "0", 138 | "Class": "32", 139 | "Seat": "14", 140 | "Club": "1", 141 | "Persona": "6", 142 | "Crush": "1", 143 | "BreastSize": "2", 144 | "Strength": "0", 145 | "Hairstyle": "7", 146 | "Color": "Purple", 147 | "Eyes": "Purple", 148 | "EyeType": "Default", 149 | "Stockings": "Purple", 150 | "Accessory": "0", 151 | "ScheduleTime": "7_7_8_13.01_13.375_15.51_16_17.25_99_99", 152 | "ScheduleDestination": "Spawn_Locker_Hangout_Seat_LunchSpot_Seat_Clean_Club_Locker_Exit", 153 | "ScheduleAction": "Stand_Stand_Socialize_Sit_Socialize_Sit_Clean_SocialSit_Shoes_Stand", 154 | "Info": "" 155 | }, 156 | { 157 | "ID": "8", 158 | "Name": "Haruto Yuto", 159 | "Gender": "1", 160 | "Class": "11", 161 | "Seat": "12", 162 | "Club": "0", 163 | "Persona": "5", 164 | "Crush": "0", 165 | "BreastSize": "0", 166 | "Strength": "0", 167 | "Hairstyle": "2", 168 | "Color": "Red", 169 | "Eyes": "Red", 170 | "EyeType": "Default", 171 | "Stockings": "None", 172 | "Accessory": "3", 173 | "ScheduleTime": "7_7_8_13_13.375_15.5_16_16.5_99", 174 | "ScheduleDestination": "Spawn_Locker_Hangout_Seat_LunchSpot_Seat_Clean_Locker_Exit", 175 | "ScheduleAction": "Stand_Stand_Socialize_Sit_Socialize_Sit_Clean_Shoes_Stand", 176 | "Info": "" 177 | }, 178 | { 179 | "ID": "9", 180 | "Name": "Sota Yuki", 181 | "Gender": "1", 182 | "Class": "12", 183 | "Seat": "12", 184 | "Club": "0", 185 | "Persona": "6", 186 | "Crush": "0", 187 | "BreastSize": "0", 188 | "Strength": "0", 189 | "Hairstyle": "3", 190 | "Color": "Yellow", 191 | "Eyes": "Yellow", 192 | "EyeType": "Default", 193 | "Stockings": "None", 194 | "Accessory": "0", 195 | "ScheduleTime": "7_7_8_13_13.375_15.5_16_16.5_99", 196 | "ScheduleDestination": "Spawn_Locker_Hangout_Seat_LunchSpot_Seat_Clean_Locker_Exit", 197 | "ScheduleAction": "Stand_Stand_Socialize_Sit_Socialize_Sit_Clean_Shoes_Stand", 198 | "Info": "" 199 | }, 200 | { 201 | "ID": "10", 202 | "Name": "Hayato Haruki", 203 | "Gender": "1", 204 | "Class": "21", 205 | "Seat": "12", 206 | "Club": "0", 207 | "Persona": "6", 208 | "Crush": "0", 209 | "BreastSize": "0", 210 | "Strength": "0", 211 | "Hairstyle": "4", 212 | "Color": "Green", 213 | "Eyes": "Green", 214 | "EyeType": "Default", 215 | "Stockings": "None", 216 | "Accessory": "0", 217 | "ScheduleTime": "7_7_8_13.0002_13.375_15.5002_16_16.5_99", 218 | "ScheduleDestination": "Spawn_Locker_Hangout_Seat_LunchSpot_Seat_Clean_Locker_Exit", 219 | "ScheduleAction": "Stand_Stand_Socialize_Sit_Socialize_Sit_Clean_Shoes_Stand", 220 | "Info": "" 221 | }, 222 | { 223 | "ID": "11", 224 | "Name": "Ryusei Koki", 225 | "Gender": "1", 226 | "Class": "22", 227 | "Seat": "12", 228 | "Club": "0", 229 | "Persona": "2", 230 | "Crush": "0", 231 | "BreastSize": "0", 232 | "Strength": "0", 233 | "Hairstyle": "5", 234 | "Color": "Blue", 235 | "Eyes": "Blue", 236 | "EyeType": "Default", 237 | "Stockings": "None", 238 | "Accessory": "4", 239 | "ScheduleTime": "7_7_8_13_13.375_15.5_16_16.5_99", 240 | "ScheduleDestination": "Spawn_Locker_Hangout_Seat_LunchSpot_Seat_Clean_Locker_Exit", 241 | "ScheduleAction": "Stand_Stand_Socialize_Sit_Socialize_Sit_Clean_Shoes_Stand", 242 | "Info": "" 243 | }, 244 | { 245 | "ID": "12", 246 | "Name": "Sora Sosuke", 247 | "Gender": "1", 248 | "Class": "31", 249 | "Seat": "12", 250 | "Club": "0", 251 | "Persona": "6", 252 | "Crush": "0", 253 | "BreastSize": "0", 254 | "Strength": "0", 255 | "Hairstyle": "6", 256 | "Color": "Cyan", 257 | "Eyes": "Cyan", 258 | "EyeType": "Default", 259 | "Stockings": "None", 260 | "Accessory": "0", 261 | "ScheduleTime": "7_7_8_13_13.375_15.5_16_16.5_99", 262 | "ScheduleDestination": "Spawn_Locker_Hangout_Seat_LunchSpot_Seat_Clean_Locker_Exit", 263 | "ScheduleAction": "Stand_Stand_Socialize_Sit_Socialize_Sit_Clean_Shoes_Stand", 264 | "Info": "" 265 | }, 266 | { 267 | "ID": "13", 268 | "Name": "Riku Soma", 269 | "Gender": "1", 270 | "Class": "32", 271 | "Seat": "12", 272 | "Club": "0", 273 | "Persona": "6", 274 | "Crush": "7", 275 | "BreastSize": "0", 276 | "Strength": "0", 277 | "Hairstyle": "7", 278 | "Color": "Purple", 279 | "Eyes": "Purple", 280 | "EyeType": "Default", 281 | "Stockings": "None", 282 | "Accessory": "0", 283 | "ScheduleTime": "7_7_8_13_13.375_15.5_16_16.25_17.5_99_99", 284 | "ScheduleDestination": "Spawn_Locker_Hangout_Seat_LunchSpot_Seat_Clean_Stalk_Patrol_Locker_Exit", 285 | "ScheduleAction": "Stand_Stand_Socialize_Sit_Socialize_Sit_Clean_Stalk_Patrol_Shoes_Stand", 286 | "Info": "Comes from a rich family. He tries to hide this fact from others, but his affluent origins are very obvious because of his unusual way of speaking." 287 | }, 288 | { 289 | "ID": "14", 290 | "Name": "Pippi Osu", 291 | "Gender": "0", 292 | "Class": "11", 293 | "Seat": "5", 294 | "Club": "11", 295 | "Persona": "10", 296 | "Crush": "15", 297 | "BreastSize": "1", 298 | "Strength": "0", 299 | "Hairstyle": "8", 300 | "Color": "Pippi", 301 | "Eyes": "Green", 302 | "EyeType": "Default", 303 | "Stockings": "None", 304 | "Accessory": "0", 305 | "ScheduleTime": "7_7_8_13_13.375_15.5_16_16.5_99", 306 | "ScheduleDestination": "Spawn_Locker_Hangout_Seat_Hangout_Seat_Clean_Hangout_Hangout", 307 | "ScheduleAction": "Stand_Stand_Game_Sit_Game_Sit_Clean_Game_Game", 308 | "Info": "Extremely unlikely to witness murder unless it takes place in the computer lab." 309 | }, 310 | { 311 | "ID": "15", 312 | "Name": "Ryuto Ippongo", 313 | "Gender": "1", 314 | "Class": "12", 315 | "Seat": "5", 316 | "Club": "11", 317 | "Persona": "10", 318 | "Crush": "14", 319 | "BreastSize": "0", 320 | "Strength": "0", 321 | "Hairstyle": "8", 322 | "Color": "Red", 323 | "Eyes": "Red", 324 | "EyeType": "Default", 325 | "Stockings": "None", 326 | "Accessory": "1", 327 | "ScheduleTime": "7_7_8_13_13.375_15.5_16_16.5_99", 328 | "ScheduleDestination": "Spawn_Locker_Hangout_Seat_Hangout_Seat_Clean_Hangout_Hangout", 329 | "ScheduleAction": "Stand_Stand_Game_Sit_Game_Sit_Clean_Game_Game", 330 | "Info": "Secretly has a crush on Pippi Osu. Neither of them realize that they both share feelings for each other. \n \n Swears to his parents that he spends all of his free time studying." 331 | }, 332 | { 333 | "ID": "16", 334 | "Name": "Midori Gurin", 335 | "Gender": "0", 336 | "Class": "31", 337 | "Seat": "5", 338 | "Club": "11", 339 | "Persona": "10", 340 | "Crush": "0", 341 | "BreastSize": "1", 342 | "Strength": "0", 343 | "Hairstyle": "9", 344 | "Color": "Green", 345 | "Eyes": "Green", 346 | "EyeType": "Default", 347 | "Stockings": "ShortGreen", 348 | "Accessory": "0", 349 | "ScheduleTime": "7_7_8_13_13.375_15.5_16_16.5_99", 350 | "ScheduleDestination": "Spawn_Locker_Hangout_Seat_Hangout_Seat_Clean_Hangout_Hangout", 351 | "ScheduleAction": "Stand_Stand_Text_Sit_Text_Sit_Clean_Text_Text", 352 | "Info": "Known for irritating her classmates and teachers by constantly asking foolish questions." 353 | }, 354 | { 355 | "ID": "17", 356 | "Name": "Sakyu Basu", 357 | "Gender": "0", 358 | "Class": "21", 359 | "Seat": "5", 360 | "Club": "0", 361 | "Persona": "6", 362 | "Crush": "0", 363 | "BreastSize": "1.5", 364 | "Strength": "0", 365 | "Hairstyle": "10", 366 | "Color": "Succubus1", 367 | "Eyes": "Succubus1", 368 | "EyeType": "Default", 369 | "Stockings": "None", 370 | "Accessory": "3", 371 | "ScheduleTime": "7_7_8_13.0003_13.375_15.5003_16_16.5_99", 372 | "ScheduleDestination": "Spawn_Locker_Hangout_Seat_LunchSpot_Seat_Clean_Locker_Exit", 373 | "ScheduleAction": "Stand_Stand_Socialize_Sit_Eat_Sit_Clean_Shoes_Stand", 374 | "Info": "Wears contact lenses. \n \n Enjoys spending time with her younger sister. \n \n Rumored to be a succubus disguised as a high school student...but only a fool would believe something like that." 375 | }, 376 | { 377 | "ID": "18", 378 | "Name": "Inkyu Basu", 379 | "Gender": "0", 380 | "Class": "22", 381 | "Seat": "5", 382 | "Club": "0", 383 | "Persona": "6", 384 | "Crush": "0", 385 | "BreastSize": "1", 386 | "Strength": "0", 387 | "Hairstyle": "11", 388 | "Color": "Succubus2", 389 | "Eyes": "Succubus2", 390 | "EyeType": "Default", 391 | "Stockings": "None", 392 | "Accessory": "0", 393 | "ScheduleTime": "7_7_8_13_13.375_15.5_16_16.5_99", 394 | "ScheduleDestination": "Spawn_Locker_Hangout_Seat_LunchSpot_Seat_Clean_Locker_Exit", 395 | "ScheduleAction": "Stand_Stand_Socialize_Sit_Eat_Sit_Clean_Shoes_Stand", 396 | "Info": "Wears contact lenses. \n \n Enjoys spending time with her older sister. \n \n Rumored to be a vampire disguised as a high school student...but only a fool would believe something like that." 397 | }, 398 | { 399 | "ID": "19", 400 | "Name": "Kuu Dere", 401 | "Gender": "0", 402 | "Class": "32", 403 | "Seat": "5", 404 | "Club": "0", 405 | "Persona": "1", 406 | "Crush": "0", 407 | "BreastSize": "1", 408 | "Strength": "0", 409 | "Hairstyle": "12", 410 | "Color": "Kuudere", 411 | "Eyes": "Kuudere", 412 | "EyeType": "Default", 413 | "Stockings": "None", 414 | "Accessory": "0", 415 | "ScheduleTime": "7_7_8_13_13.375_15.5_16_16.5_99", 416 | "ScheduleDestination": "Spawn_Locker_Hangout_Seat_Hangout_Seat_Clean_Locker_Exit", 417 | "ScheduleAction": "Stand_Stand_Read_Sit_Read_Sit_Clean_Shoes_Stand", 418 | "Info": "The school librarian. \n \n Strongly prefers solitude. \n \n Very rarely expresses emotions." 419 | }, 420 | { 421 | "ID": "20", 422 | "Name": "Mai Waifu", 423 | "Gender": "0", 424 | "Class": "31", 425 | "Seat": "8", 426 | "Club": "11", 427 | "Persona": "1", 428 | "Crush": "99", 429 | "BreastSize": "2", 430 | "Strength": "0", 431 | "Hairstyle": "13", 432 | "Color": "Waifu", 433 | "Eyes": "Waifu", 434 | "EyeType": "Gentle", 435 | "Stockings": "None", 436 | "Accessory": "0", 437 | "ScheduleTime": "7_7_8_13_13.375_15.5_16_16.5_99", 438 | "ScheduleDestination": "Spawn_Locker_Hangout_Seat_Hangout_Seat_Clean_Locker_Exit", 439 | "ScheduleAction": "Stand_Stand_Stand_Sit_Stand_Sit_Clean_Shoes_Stand", 440 | "Info": "Described as 'kawaii' 'moe' and 'deredere' by her admirers. \n \n Has sworn her heart to an independent game developer living overseas. \n \n Prefers to spend her time alone, daydreaming about her loved one." 441 | }, 442 | { 443 | "ID": "21", 444 | "Name": "Budo Masuta", 445 | "Gender": "1", 446 | "Class": "32", 447 | "Seat": "8", 448 | "Club": "6", 449 | "Persona": "3", 450 | "Crush": "99", 451 | "BreastSize": "0", 452 | "Strength": "5", 453 | "Hairstyle": "9", 454 | "Color": "Black", 455 | "Eyes": "Black", 456 | "EyeType": "Default", 457 | "Stockings": "None", 458 | "Accessory": "0", 459 | "ScheduleTime": "7_7_8_13_13.375_15.5_16_99", 460 | "ScheduleDestination": "Spawn_Locker_Club_Seat_Club_Seat_Clean_Club", 461 | "ScheduleAction": "Stand_Stand_Club_Sit_Club_Sit_Clean_Club", 462 | "Info": "President of the Martial Arts Club. Inherited the club after defeating the previous president. \n \n Seems to be incapable of turning down a challenge. \n \n Always gung ho and enthusiastic. Sometimes a bit overzealous, especially about martial arts." 463 | }, 464 | { 465 | "ID": "22", 466 | "Name": "Sho Kunin", 467 | "Gender": "1", 468 | "Class": "22", 469 | "Seat": "8", 470 | "Club": "6", 471 | "Persona": "3", 472 | "Crush": "0", 473 | "BreastSize": "0", 474 | "Strength": "3", 475 | "Hairstyle": "10", 476 | "Color": "Brown", 477 | "Eyes": "Brown", 478 | "EyeType": "Default", 479 | "Stockings": "None", 480 | "Accessory": "0", 481 | "ScheduleTime": "7_7_8_13_13.375_15.5_16_99", 482 | "ScheduleDestination": "Spawn_Locker_Club_Seat_Club_Seat_Clean_Club", 483 | "ScheduleAction": "Stand_Stand_Club_Sit_Club_Sit_Clean_Club", 484 | "Info": "Journeyman-level disciple of Budo Masuta." 485 | }, 486 | { 487 | "ID": "23", 488 | "Name": "Juku Ren", 489 | "Gender": "1", 490 | "Class": "12", 491 | "Seat": "8", 492 | "Club": "6", 493 | "Persona": "2", 494 | "Crush": "0", 495 | "BreastSize": "0", 496 | "Strength": "1", 497 | "Hairstyle": "11", 498 | "Color": "Orange", 499 | "Eyes": "Orange", 500 | "EyeType": "Default", 501 | "Stockings": "None", 502 | "Accessory": "0", 503 | "ScheduleTime": "7_7_8_13_13.375_15.5_16_99", 504 | "ScheduleDestination": "Spawn_Locker_Club_Seat_Club_Seat_Clean_Club", 505 | "ScheduleAction": "Stand_Stand_Club_Sit_Club_Sit_Clean_Club", 506 | "Info": "Apprentice-level disciple of Budo Masuta." 507 | }, 508 | { 509 | "ID": "24", 510 | "Name": "Mina Rai", 511 | "Gender": "0", 512 | "Class": "21", 513 | "Seat": "8", 514 | "Club": "6", 515 | "Persona": "3", 516 | "Crush": "0", 517 | "BreastSize": "1", 518 | "Strength": "4", 519 | "Hairstyle": "14", 520 | "Color": "Brown", 521 | "Eyes": "Brown", 522 | "EyeType": "Default", 523 | "Stockings": "None", 524 | "Accessory": "0", 525 | "ScheduleTime": "7_7_8_13.0004_13.375_15.5004_16_99", 526 | "ScheduleDestination": "Spawn_Locker_Club_Seat_Club_Seat_Clean_Club", 527 | "ScheduleAction": "Stand_Stand_Club_Sit_Club_Sit_Clean_Club", 528 | "Info": "Journeyman-level disciple of Budo Masuta." 529 | }, 530 | { 531 | "ID": "25", 532 | "Name": "Shima Shita", 533 | "Gender": "0", 534 | "Class": "11", 535 | "Seat": "8", 536 | "Club": "6", 537 | "Persona": "3", 538 | "Crush": "0", 539 | "BreastSize": "1", 540 | "Strength": "2", 541 | "Hairstyle": "15", 542 | "Color": "Orange", 543 | "Eyes": "Orange", 544 | "EyeType": "Default", 545 | "Stockings": "None", 546 | "Accessory": "0", 547 | "ScheduleTime": "7_7_8_13_13.375_15.5_16_99", 548 | "ScheduleDestination": "Spawn_Locker_Club_Seat_Club_Seat_Clean_Club", 549 | "ScheduleAction": "Stand_Stand_Club_Sit_Club_Sit_Clean_Club", 550 | "Info": "Apprentice-level disciple of Budo Masuta." 551 | }, 552 | { 553 | "ID": "26", 554 | "Name": "Oka Ruto", 555 | "Gender": "0", 556 | "Class": "32", 557 | "Seat": "10", 558 | "Club": "3", 559 | "Persona": "4", 560 | "Crush": "1", 561 | "BreastSize": "1", 562 | "Strength": "0", 563 | "Hairstyle": "16", 564 | "Color": "Occult1", 565 | "Eyes": "Occult1", 566 | "EyeType": "Default", 567 | "Stockings": "None", 568 | "Accessory": "5", 569 | "ScheduleTime": "7_7_8_13_13.375_15.5_16_99", 570 | "ScheduleDestination": "Spawn_Locker_Stalk_Seat_Club_Seat_Clean_Club", 571 | "ScheduleAction": "Stand_Stand_Stalk_Sit_Club_Sit_Clean_Club", 572 | "Info": "Founder and President of the Occult Club. \n \n Seems to have absolutely no interest in anything that is not paranormal. \n \n Stalks the Basu sisters daily in a futile search for evidence that they are supernatural beings." 573 | }, 574 | { 575 | "ID": "27", 576 | "Name": "Shin Higaku", 577 | "Gender": "1", 578 | "Class": "31", 579 | "Seat": "10", 580 | "Club": "3", 581 | "Persona": "4", 582 | "Crush": "99", 583 | "BreastSize": "0", 584 | "Strength": "0", 585 | "Hairstyle": "12", 586 | "Color": "Occult2", 587 | "Eyes": "Occult2", 588 | "EyeType": "Default", 589 | "Stockings": "None", 590 | "Accessory": "0", 591 | "ScheduleTime": "7_7_8_13_13.375_15.5_16_99", 592 | "ScheduleDestination": "Spawn_Locker_Club_Seat_Club_Seat_Clean_Club", 593 | "ScheduleAction": "Stand_Stand_Club_Sit_Club_Sit_Clean_Club", 594 | "Info": "Trusted by Oka Ruto to operate the Occult Club when she is not present." 595 | }, 596 | { 597 | "ID": "28", 598 | "Name": "Supana Churu", 599 | "Gender": "0", 600 | "Class": "22", 601 | "Seat": "10", 602 | "Club": "3", 603 | "Persona": "4", 604 | "Crush": "0", 605 | "BreastSize": "1", 606 | "Strength": "0", 607 | "Hairstyle": "17", 608 | "Color": "Occult3", 609 | "Eyes": "Occult3", 610 | "EyeType": "Default", 611 | "Stockings": "None", 612 | "Accessory": "1", 613 | "ScheduleTime": "7_7_8_13_13.375_15.5_16_99", 614 | "ScheduleDestination": "Spawn_Locker_Club_Seat_Club_Seat_Clean_Club", 615 | "ScheduleAction": "Stand_Stand_Club_Sit_Club_Sit_Clean_Club", 616 | "Info": "Claims to be wearing a medical eyepatch to correct a problem with her vision. \n \n Refuses to provide details regarding her eye condition, leading to rumors that she is lying about the reason she wears an eyepatch." 617 | }, 618 | { 619 | "ID": "29", 620 | "Name": "Chojo Tekina", 621 | "Gender": "1", 622 | "Class": "21", 623 | "Seat": "10", 624 | "Club": "3", 625 | "Persona": "4", 626 | "Crush": "0", 627 | "BreastSize": "0", 628 | "Strength": "0", 629 | "Hairstyle": "13", 630 | "Color": "Occult4", 631 | "Eyes": "Occult4", 632 | "EyeType": "Default", 633 | "Stockings": "None", 634 | "Accessory": "0", 635 | "ScheduleTime": "7_7_8_13.0005_13.375_15.5005_16_99", 636 | "ScheduleDestination": "Spawn_Locker_Club_Seat_Club_Seat_Clean_Club", 637 | "ScheduleAction": "Stand_Stand_Club_Sit_Club_Sit_Clean_Club", 638 | "Info": "No student has ever seen the right side of his face. \n \n Some students suspect that he is using his hair to hide an unsightly scar or missing eye." 639 | }, 640 | { 641 | "ID": "30", 642 | "Name": "Kokuma Jutsu", 643 | "Gender": "0", 644 | "Class": "12", 645 | "Seat": "10", 646 | "Club": "3", 647 | "Persona": "4", 648 | "Crush": "0", 649 | "BreastSize": "1", 650 | "Strength": "0", 651 | "Hairstyle": "18", 652 | "Color": "Occult5", 653 | "Eyes": "Occult5", 654 | "EyeType": "Default", 655 | "Stockings": "None", 656 | "Accessory": "2", 657 | "ScheduleTime": "7_7_8_13_13.375_15.5_16_99", 658 | "ScheduleDestination": "Spawn_Locker_Club_Seat_Club_Seat_Clean_Club", 659 | "ScheduleAction": "Stand_Stand_Club_Sit_Club_Sit_Clean_Club", 660 | "Info": "Claims that the bandages on her face are the result of being attacked by a wild animal shortly before the school year began. \n \n There are rumors that the true reason she wears bandages is because she is regularly beaten by a family member, and was blinded in one eye during a domestic dispute." 661 | }, 662 | { 663 | "ID": "31", 664 | "Name": "Daku Atsu", 665 | "Gender": "1", 666 | "Class": "11", 667 | "Seat": "10", 668 | "Club": "3", 669 | "Persona": "2", 670 | "Crush": "0", 671 | "BreastSize": "0", 672 | "Strength": "0", 673 | "Hairstyle": "14", 674 | "Color": "Occult6", 675 | "Eyes": "Occult6", 676 | "EyeType": "Default", 677 | "Stockings": "None", 678 | "Accessory": "2", 679 | "ScheduleTime": "7_7_8_13_13.375_15.5_16_99", 680 | "ScheduleDestination": "Spawn_Locker_Club_Seat_Club_Seat_Clean_Club", 681 | "ScheduleAction": "Stand_Stand_Club_Sit_Club_Sit_Clean_Club", 682 | "Info": "One of the lenses of his glasses is completely opaque. No student has ever seen his right eye. \n \n Some students suspect that he only has one eye, and prefers to wear an opaque lense over that eye rather than an eyepatch." 683 | }, 684 | { 685 | "ID": "32", 686 | "Name": "Horuda Puresu", 687 | "Gender": "0", 688 | "Class": "11", 689 | "Seat": "2", 690 | "Club": "0", 691 | "Persona": "11", 692 | "Crush": "0", 693 | "BreastSize": "1", 694 | "Strength": "0", 695 | "Hairstyle": "34", 696 | "Color": "Black", 697 | "Eyes": "Black", 698 | "EyeType": "Default", 699 | "Stockings": "ShortBlack", 700 | "Accessory": "0", 701 | "ScheduleTime": "7_7_8_13_13.375_15.5_16_99", 702 | "ScheduleDestination": "Spawn_Locker_Hangout_Seat_Hangout_Seat_Clean_Locker_Exit", 703 | "ScheduleAction": "Stand_Stand_Read_Sit_Read_Sit_Clean_Shoes_Stand", 704 | "Info": "A shy and timid girl. \n \n She is usually targeted for bullying. \n \n A temporary placeholder student. Don't get too attached to her." 705 | }, 706 | { 707 | "ID": "33", 708 | "Name": "Reserved", 709 | "Gender": "0", 710 | "Class": "21", 711 | "Seat": "11", 712 | "Club": "0", 713 | "Persona": "7", 714 | "Crush": "1", 715 | "BreastSize": "1", 716 | "Strength": "1", 717 | "Hairstyle": "20", 718 | "Color": "Osana", 719 | "Eyes": "Osana", 720 | "EyeType": "Default", 721 | "Stockings": "Osana", 722 | "Accessory": "0", 723 | "ScheduleTime": "7_7_8_13.001_13.375_15.501_16_17.25_99_99", 724 | "ScheduleDestination": "Spawn_Locker_Hangout_Seat_LunchSpot_Seat_Clean_Hangout_Locker_Exit", 725 | "ScheduleAction": "Stand_Stand_Stand_Sit_Eat_Sit_Clean_Hangout_Shoes_Exit", 726 | "Info": "" 727 | }, 728 | { 729 | "ID": "34", 730 | "Name": "Unknown", 731 | "Gender": "0", 732 | "Class": "0", 733 | "Seat": "0", 734 | "Club": "0", 735 | "Persona": "0", 736 | "Crush": "0", 737 | "BreastSize": "1", 738 | "Strength": "0", 739 | "Hairstyle": "1", 740 | "Color": "White", 741 | "Eyes": "Black", 742 | "EyeType": "Default", 743 | "Stockings": "None", 744 | "Accessory": "0", 745 | "ScheduleTime": "7_7_8_13_13.375_15.5_16_99", 746 | "ScheduleDestination": "Spawn_Locker_Patrol_Seat_Patrol_Seat_Clean_Patrol", 747 | "ScheduleAction": "Stand_Stand_Patrol_Sit_Patrol_Sit_Clean_Patrol", 748 | "Info": "" 749 | }, 750 | { 751 | "ID": "35", 752 | "Name": "Unknown", 753 | "Gender": "0", 754 | "Class": "0", 755 | "Seat": "0", 756 | "Club": "0", 757 | "Persona": "0", 758 | "Crush": "0", 759 | "BreastSize": "1", 760 | "Strength": "0", 761 | "Hairstyle": "1", 762 | "Color": "White", 763 | "Eyes": "Black", 764 | "EyeType": "Default", 765 | "Stockings": "None", 766 | "Accessory": "0", 767 | "ScheduleTime": "7_7_8_13_13.375_15.5_16_99", 768 | "ScheduleDestination": "Spawn_Locker_Patrol_Seat_Patrol_Seat_Clean_Patrol", 769 | "ScheduleAction": "Stand_Stand_Patrol_Sit_Patrol_Sit_Clean_Patrol", 770 | "Info": "" 771 | }, 772 | { 773 | "ID": "36", 774 | "Name": "Unknown", 775 | "Gender": "0", 776 | "Class": "0", 777 | "Seat": "0", 778 | "Club": "0", 779 | "Persona": "0", 780 | "Crush": "0", 781 | "BreastSize": "1", 782 | "Strength": "0", 783 | "Hairstyle": "1", 784 | "Color": "White", 785 | "Eyes": "Black", 786 | "EyeType": "Default", 787 | "Stockings": "None", 788 | "Accessory": "0", 789 | "ScheduleTime": "7_7_8_13_13.375_15.5_16_99", 790 | "ScheduleDestination": "Spawn_Locker_Patrol_Seat_Patrol_Seat_Clean_Patrol", 791 | "ScheduleAction": "Stand_Stand_Patrol_Sit_Patrol_Sit_Clean_Patrol", 792 | "Info": "" 793 | }, 794 | { 795 | "ID": "37", 796 | "Name": "Unknown", 797 | "Gender": "0", 798 | "Class": "0", 799 | "Seat": "0", 800 | "Club": "0", 801 | "Persona": "0", 802 | "Crush": "0", 803 | "BreastSize": "1", 804 | "Strength": "0", 805 | "Hairstyle": "1", 806 | "Color": "White", 807 | "Eyes": "Black", 808 | "EyeType": "Default", 809 | "Stockings": "None", 810 | "Accessory": "0", 811 | "ScheduleTime": "7_7_8_13_13.375_15.5_16_99", 812 | "ScheduleDestination": "Spawn_Locker_Patrol_Seat_Patrol_Seat_Clean_Patrol", 813 | "ScheduleAction": "Stand_Stand_Patrol_Sit_Patrol_Sit_Clean_Patrol", 814 | "Info": "" 815 | }, 816 | { 817 | "ID": "38", 818 | "Name": "Unknown", 819 | "Gender": "0", 820 | "Class": "0", 821 | "Seat": "0", 822 | "Club": "0", 823 | "Persona": "0", 824 | "Crush": "0", 825 | "BreastSize": "1", 826 | "Strength": "0", 827 | "Hairstyle": "1", 828 | "Color": "White", 829 | "Eyes": "Black", 830 | "EyeType": "Default", 831 | "Stockings": "None", 832 | "Accessory": "0", 833 | "ScheduleTime": "7_7_8_13_13.375_15.5_16_99", 834 | "ScheduleDestination": "Spawn_Locker_Patrol_Seat_Patrol_Seat_Clean_Patrol", 835 | "ScheduleAction": "Stand_Stand_Patrol_Sit_Patrol_Sit_Clean_Patrol", 836 | "Info": "" 837 | }, 838 | { 839 | "ID": "39", 840 | "Name": "Unknown", 841 | "Gender": "0", 842 | "Class": "0", 843 | "Seat": "0", 844 | "Club": "0", 845 | "Persona": "0", 846 | "Crush": "0", 847 | "BreastSize": "1", 848 | "Strength": "0", 849 | "Hairstyle": "1", 850 | "Color": "White", 851 | "Eyes": "Black", 852 | "EyeType": "Default", 853 | "Stockings": "None", 854 | "Accessory": "0", 855 | "ScheduleTime": "7_7_8_13_13.375_15.5_16_99", 856 | "ScheduleDestination": "Spawn_Locker_Patrol_Seat_Patrol_Seat_Clean_Patrol", 857 | "ScheduleAction": "Stand_Stand_Patrol_Sit_Patrol_Sit_Clean_Patrol", 858 | "Info": "" 859 | }, 860 | { 861 | "ID": "40", 862 | "Name": "Unknown", 863 | "Gender": "0", 864 | "Class": "0", 865 | "Seat": "0", 866 | "Club": "0", 867 | "Persona": "0", 868 | "Crush": "0", 869 | "BreastSize": "1", 870 | "Strength": "0", 871 | "Hairstyle": "1", 872 | "Color": "White", 873 | "Eyes": "Black", 874 | "EyeType": "Default", 875 | "Stockings": "None", 876 | "Accessory": "0", 877 | "ScheduleTime": "7_7_8_13_13.375_15.5_16_99", 878 | "ScheduleDestination": "Spawn_Locker_Patrol_Seat_Patrol_Seat_Clean_Patrol", 879 | "ScheduleAction": "Stand_Stand_Patrol_Sit_Patrol_Sit_Clean_Patrol", 880 | "Info": "" 881 | }, 882 | { 883 | "ID": "41", 884 | "Name": "Unknown", 885 | "Gender": "0", 886 | "Class": "0", 887 | "Seat": "0", 888 | "Club": "0", 889 | "Persona": "0", 890 | "Crush": "0", 891 | "BreastSize": "1", 892 | "Strength": "0", 893 | "Hairstyle": "1", 894 | "Color": "White", 895 | "Eyes": "Black", 896 | "EyeType": "Default", 897 | "Stockings": "None", 898 | "Accessory": "0", 899 | "ScheduleTime": "7_7_8_13_13.375_15.5_16_99", 900 | "ScheduleDestination": "Spawn_Locker_Patrol_Seat_Patrol_Seat_Clean_Patrol", 901 | "ScheduleAction": "Stand_Stand_Patrol_Sit_Patrol_Sit_Clean_Patrol", 902 | "Info": "" 903 | }, 904 | { 905 | "ID": "42", 906 | "Name": "Unknown", 907 | "Gender": "0", 908 | "Class": "0", 909 | "Seat": "0", 910 | "Club": "0", 911 | "Persona": "0", 912 | "Crush": "0", 913 | "BreastSize": "1", 914 | "Strength": "0", 915 | "Hairstyle": "1", 916 | "Color": "White", 917 | "Eyes": "Black", 918 | "EyeType": "Default", 919 | "Stockings": "None", 920 | "Accessory": "0", 921 | "ScheduleTime": "7_7_8_13_13.375_15.5_16_99", 922 | "ScheduleDestination": "Spawn_Locker_Patrol_Seat_Patrol_Seat_Clean_Patrol", 923 | "ScheduleAction": "Stand_Stand_Patrol_Sit_Patrol_Sit_Clean_Patrol", 924 | "Info": "" 925 | }, 926 | { 927 | "ID": "43", 928 | "Name": "Unknown", 929 | "Gender": "0", 930 | "Class": "0", 931 | "Seat": "0", 932 | "Club": "0", 933 | "Persona": "0", 934 | "Crush": "0", 935 | "BreastSize": "1", 936 | "Strength": "0", 937 | "Hairstyle": "1", 938 | "Color": "White", 939 | "Eyes": "Black", 940 | "EyeType": "Default", 941 | "Stockings": "None", 942 | "Accessory": "0", 943 | "ScheduleTime": "7_7_8_13_13.375_15.5_16_99", 944 | "ScheduleDestination": "Spawn_Locker_Patrol_Seat_Patrol_Seat_Clean_Patrol", 945 | "ScheduleAction": "Stand_Stand_Patrol_Sit_Patrol_Sit_Clean_Patrol", 946 | "Info": "" 947 | }, 948 | { 949 | "ID": "44", 950 | "Name": "Unknown", 951 | "Gender": "0", 952 | "Class": "0", 953 | "Seat": "0", 954 | "Club": "0", 955 | "Persona": "0", 956 | "Crush": "0", 957 | "BreastSize": "1", 958 | "Strength": "0", 959 | "Hairstyle": "1", 960 | "Color": "White", 961 | "Eyes": "Black", 962 | "EyeType": "Default", 963 | "Stockings": "None", 964 | "Accessory": "0", 965 | "ScheduleTime": "7_7_8_13_13.375_15.5_16_99", 966 | "ScheduleDestination": "Spawn_Locker_Patrol_Seat_Patrol_Seat_Clean_Patrol", 967 | "ScheduleAction": "Stand_Stand_Patrol_Sit_Patrol_Sit_Clean_Patrol", 968 | "Info": "" 969 | }, 970 | { 971 | "ID": "45", 972 | "Name": "Unknown", 973 | "Gender": "0", 974 | "Class": "0", 975 | "Seat": "0", 976 | "Club": "0", 977 | "Persona": "0", 978 | "Crush": "0", 979 | "BreastSize": "1", 980 | "Strength": "0", 981 | "Hairstyle": "1", 982 | "Color": "White", 983 | "Eyes": "Black", 984 | "EyeType": "Default", 985 | "Stockings": "None", 986 | "Accessory": "0", 987 | "ScheduleTime": "7_7_8_13_13.375_15.5_16_99", 988 | "ScheduleDestination": "Spawn_Locker_Patrol_Seat_Patrol_Seat_Clean_Patrol", 989 | "ScheduleAction": "Stand_Stand_Patrol_Sit_Patrol_Sit_Clean_Patrol", 990 | "Info": "" 991 | }, 992 | { 993 | "ID": "46", 994 | "Name": "Unknown", 995 | "Gender": "0", 996 | "Class": "0", 997 | "Seat": "0", 998 | "Club": "0", 999 | "Persona": "0", 1000 | "Crush": "0", 1001 | "BreastSize": "1", 1002 | "Strength": "0", 1003 | "Hairstyle": "1", 1004 | "Color": "White", 1005 | "Eyes": "Black", 1006 | "EyeType": "Default", 1007 | "Stockings": "None", 1008 | "Accessory": "0", 1009 | "ScheduleTime": "7_7_8_13_13.375_15.5_16_99", 1010 | "ScheduleDestination": "Spawn_Locker_Patrol_Seat_Patrol_Seat_Clean_Patrol", 1011 | "ScheduleAction": "Stand_Stand_Patrol_Sit_Patrol_Sit_Clean_Patrol", 1012 | "Info": "" 1013 | }, 1014 | { 1015 | "ID": "47", 1016 | "Name": "Unknown", 1017 | "Gender": "0", 1018 | "Class": "0", 1019 | "Seat": "0", 1020 | "Club": "0", 1021 | "Persona": "0", 1022 | "Crush": "0", 1023 | "BreastSize": "1", 1024 | "Strength": "0", 1025 | "Hairstyle": "1", 1026 | "Color": "White", 1027 | "Eyes": "Black", 1028 | "EyeType": "Default", 1029 | "Stockings": "None", 1030 | "Accessory": "0", 1031 | "ScheduleTime": "7_7_8_13_13.375_15.5_16_99", 1032 | "ScheduleDestination": "Spawn_Locker_Patrol_Seat_Patrol_Seat_Clean_Patrol", 1033 | "ScheduleAction": "Stand_Stand_Patrol_Sit_Patrol_Sit_Clean_Patrol", 1034 | "Info": "" 1035 | }, 1036 | { 1037 | "ID": "48", 1038 | "Name": "Unknown", 1039 | "Gender": "0", 1040 | "Class": "0", 1041 | "Seat": "0", 1042 | "Club": "0", 1043 | "Persona": "0", 1044 | "Crush": "0", 1045 | "BreastSize": "1", 1046 | "Strength": "0", 1047 | "Hairstyle": "1", 1048 | "Color": "White", 1049 | "Eyes": "Black", 1050 | "EyeType": "Default", 1051 | "Stockings": "None", 1052 | "Accessory": "0", 1053 | "ScheduleTime": "7_7_8_13_13.375_15.5_16_99", 1054 | "ScheduleDestination": "Spawn_Locker_Patrol_Seat_Patrol_Seat_Clean_Patrol", 1055 | "ScheduleAction": "Stand_Stand_Patrol_Sit_Patrol_Sit_Clean_Patrol", 1056 | "Info": "" 1057 | }, 1058 | { 1059 | "ID": "49", 1060 | "Name": "Unknown", 1061 | "Gender": "0", 1062 | "Class": "0", 1063 | "Seat": "0", 1064 | "Club": "0", 1065 | "Persona": "0", 1066 | "Crush": "0", 1067 | "BreastSize": "1", 1068 | "Strength": "0", 1069 | "Hairstyle": "1", 1070 | "Color": "White", 1071 | "Eyes": "Black", 1072 | "EyeType": "Default", 1073 | "Stockings": "None", 1074 | "Accessory": "0", 1075 | "ScheduleTime": "7_7_8_13_13.375_15.5_16_99", 1076 | "ScheduleDestination": "Spawn_Locker_Patrol_Seat_Patrol_Seat_Clean_Patrol", 1077 | "ScheduleAction": "Stand_Stand_Patrol_Sit_Patrol_Sit_Clean_Patrol", 1078 | "Info": "" 1079 | }, 1080 | { 1081 | "ID": "50", 1082 | "Name": "Unknown", 1083 | "Gender": "0", 1084 | "Class": "0", 1085 | "Seat": "0", 1086 | "Club": "0", 1087 | "Persona": "0", 1088 | "Crush": "0", 1089 | "BreastSize": "1", 1090 | "Strength": "0", 1091 | "Hairstyle": "1", 1092 | "Color": "White", 1093 | "Eyes": "Black", 1094 | "EyeType": "Default", 1095 | "Stockings": "None", 1096 | "Accessory": "0", 1097 | "ScheduleTime": "7_7_8_13_13.375_15.5_16_99", 1098 | "ScheduleDestination": "Spawn_Locker_Patrol_Seat_Patrol_Seat_Clean_Patrol", 1099 | "ScheduleAction": "Stand_Stand_Patrol_Sit_Patrol_Sit_Clean_Patrol", 1100 | "Info": "" 1101 | }, 1102 | { 1103 | "ID": "51", 1104 | "Name": "Unknown", 1105 | "Gender": "0", 1106 | "Class": "0", 1107 | "Seat": "0", 1108 | "Club": "0", 1109 | "Persona": "0", 1110 | "Crush": "0", 1111 | "BreastSize": "1", 1112 | "Strength": "0", 1113 | "Hairstyle": "1", 1114 | "Color": "White", 1115 | "Eyes": "Black", 1116 | "EyeType": "Default", 1117 | "Stockings": "None", 1118 | "Accessory": "0", 1119 | "ScheduleTime": "7_7_8_13_13.375_15.5_16_99", 1120 | "ScheduleDestination": "Spawn_Locker_Patrol_Seat_Patrol_Seat_Clean_Patrol", 1121 | "ScheduleAction": "Stand_Stand_Patrol_Sit_Patrol_Sit_Clean_Patrol", 1122 | "Info": "" 1123 | }, 1124 | { 1125 | "ID": "52", 1126 | "Name": "Unknown", 1127 | "Gender": "0", 1128 | "Class": "0", 1129 | "Seat": "0", 1130 | "Club": "0", 1131 | "Persona": "0", 1132 | "Crush": "0", 1133 | "BreastSize": "1", 1134 | "Strength": "0", 1135 | "Hairstyle": "1", 1136 | "Color": "White", 1137 | "Eyes": "Black", 1138 | "EyeType": "Default", 1139 | "Stockings": "None", 1140 | "Accessory": "0", 1141 | "ScheduleTime": "7_7_8_13_13.375_15.5_16_99", 1142 | "ScheduleDestination": "Spawn_Locker_Patrol_Seat_Patrol_Seat_Clean_Patrol", 1143 | "ScheduleAction": "Stand_Stand_Patrol_Sit_Patrol_Sit_Clean_Patrol", 1144 | "Info": "" 1145 | }, 1146 | { 1147 | "ID": "53", 1148 | "Name": "Unknown", 1149 | "Gender": "0", 1150 | "Class": "0", 1151 | "Seat": "0", 1152 | "Club": "0", 1153 | "Persona": "0", 1154 | "Crush": "0", 1155 | "BreastSize": "1", 1156 | "Strength": "0", 1157 | "Hairstyle": "1", 1158 | "Color": "White", 1159 | "Eyes": "Black", 1160 | "EyeType": "Default", 1161 | "Stockings": "None", 1162 | "Accessory": "0", 1163 | "ScheduleTime": "7_7_8_13_13.375_15.5_16_99", 1164 | "ScheduleDestination": "Spawn_Locker_Patrol_Seat_Patrol_Seat_Clean_Patrol", 1165 | "ScheduleAction": "Stand_Stand_Patrol_Sit_Patrol_Sit_Clean_Patrol", 1166 | "Info": "" 1167 | }, 1168 | { 1169 | "ID": "54", 1170 | "Name": "Unknown", 1171 | "Gender": "0", 1172 | "Class": "0", 1173 | "Seat": "0", 1174 | "Club": "0", 1175 | "Persona": "0", 1176 | "Crush": "0", 1177 | "BreastSize": "1", 1178 | "Strength": "0", 1179 | "Hairstyle": "1", 1180 | "Color": "White", 1181 | "Eyes": "Black", 1182 | "EyeType": "Default", 1183 | "Stockings": "None", 1184 | "Accessory": "0", 1185 | "ScheduleTime": "7_7_8_13_13.375_15.5_16_99", 1186 | "ScheduleDestination": "Spawn_Locker_Patrol_Seat_Patrol_Seat_Clean_Patrol", 1187 | "ScheduleAction": "Stand_Stand_Patrol_Sit_Patrol_Sit_Clean_Patrol", 1188 | "Info": "" 1189 | }, 1190 | { 1191 | "ID": "55", 1192 | "Name": "Unknown", 1193 | "Gender": "0", 1194 | "Class": "0", 1195 | "Seat": "0", 1196 | "Club": "0", 1197 | "Persona": "0", 1198 | "Crush": "0", 1199 | "BreastSize": "1", 1200 | "Strength": "0", 1201 | "Hairstyle": "1", 1202 | "Color": "White", 1203 | "Eyes": "Black", 1204 | "EyeType": "Default", 1205 | "Stockings": "None", 1206 | "Accessory": "0", 1207 | "ScheduleTime": "7_7_8_13_13.375_15.5_16_99", 1208 | "ScheduleDestination": "Spawn_Locker_Patrol_Seat_Patrol_Seat_Clean_Patrol", 1209 | "ScheduleAction": "Stand_Stand_Patrol_Sit_Patrol_Sit_Clean_Patrol", 1210 | "Info": "" 1211 | }, 1212 | { 1213 | "ID": "56", 1214 | "Name": "Unknown", 1215 | "Gender": "0", 1216 | "Class": "0", 1217 | "Seat": "0", 1218 | "Club": "0", 1219 | "Persona": "0", 1220 | "Crush": "0", 1221 | "BreastSize": "1", 1222 | "Strength": "0", 1223 | "Hairstyle": "1", 1224 | "Color": "White", 1225 | "Eyes": "Black", 1226 | "EyeType": "Default", 1227 | "Stockings": "None", 1228 | "Accessory": "0", 1229 | "ScheduleTime": "7_7_8_13_13.375_15.5_16_99", 1230 | "ScheduleDestination": "Spawn_Locker_Patrol_Seat_Patrol_Seat_Clean_Patrol", 1231 | "ScheduleAction": "Stand_Stand_Patrol_Sit_Patrol_Sit_Clean_Patrol", 1232 | "Info": "" 1233 | }, 1234 | { 1235 | "ID": "57", 1236 | "Name": "Unknown", 1237 | "Gender": "0", 1238 | "Class": "0", 1239 | "Seat": "0", 1240 | "Club": "0", 1241 | "Persona": "0", 1242 | "Crush": "0", 1243 | "BreastSize": "1", 1244 | "Strength": "0", 1245 | "Hairstyle": "1", 1246 | "Color": "White", 1247 | "Eyes": "Black", 1248 | "EyeType": "Default", 1249 | "Stockings": "None", 1250 | "Accessory": "0", 1251 | "ScheduleTime": "7_7_8_13_13.375_15.5_16_99", 1252 | "ScheduleDestination": "Spawn_Locker_Patrol_Seat_Patrol_Seat_Clean_Patrol", 1253 | "ScheduleAction": "Stand_Stand_Patrol_Sit_Patrol_Sit_Clean_Patrol", 1254 | "Info": "" 1255 | }, 1256 | { 1257 | "ID": "58", 1258 | "Name": "Unknown", 1259 | "Gender": "0", 1260 | "Class": "0", 1261 | "Seat": "0", 1262 | "Club": "0", 1263 | "Persona": "0", 1264 | "Crush": "0", 1265 | "BreastSize": "1", 1266 | "Strength": "0", 1267 | "Hairstyle": "1", 1268 | "Color": "White", 1269 | "Eyes": "Black", 1270 | "EyeType": "Default", 1271 | "Stockings": "None", 1272 | "Accessory": "0", 1273 | "ScheduleTime": "7_7_8_13_13.375_15.5_16_99", 1274 | "ScheduleDestination": "Spawn_Locker_Patrol_Seat_Patrol_Seat_Clean_Patrol", 1275 | "ScheduleAction": "Stand_Stand_Patrol_Sit_Patrol_Sit_Clean_Patrol", 1276 | "Info": "" 1277 | }, 1278 | { 1279 | "ID": "59", 1280 | "Name": "Unknown", 1281 | "Gender": "0", 1282 | "Class": "0", 1283 | "Seat": "0", 1284 | "Club": "0", 1285 | "Persona": "0", 1286 | "Crush": "0", 1287 | "BreastSize": "1", 1288 | "Strength": "0", 1289 | "Hairstyle": "1", 1290 | "Color": "White", 1291 | "Eyes": "Black", 1292 | "EyeType": "Default", 1293 | "Stockings": "None", 1294 | "Accessory": "0", 1295 | "ScheduleTime": "7_7_8_13_13.375_15.5_16_99", 1296 | "ScheduleDestination": "Spawn_Locker_Patrol_Seat_Patrol_Seat_Clean_Patrol", 1297 | "ScheduleAction": "Stand_Stand_Patrol_Sit_Patrol_Sit_Clean_Patrol", 1298 | "Info": "" 1299 | }, 1300 | { 1301 | "ID": "60", 1302 | "Name": "Unknown", 1303 | "Gender": "0", 1304 | "Class": "0", 1305 | "Seat": "0", 1306 | "Club": "0", 1307 | "Persona": "0", 1308 | "Crush": "0", 1309 | "BreastSize": "1", 1310 | "Strength": "0", 1311 | "Hairstyle": "1", 1312 | "Color": "White", 1313 | "Eyes": "Black", 1314 | "EyeType": "Default", 1315 | "Stockings": "None", 1316 | "Accessory": "0", 1317 | "ScheduleTime": "7_7_8_13_13.375_15.5_16_99", 1318 | "ScheduleDestination": "Spawn_Locker_Patrol_Seat_Patrol_Seat_Clean_Patrol", 1319 | "ScheduleAction": "Stand_Stand_Patrol_Sit_Patrol_Sit_Clean_Patrol", 1320 | "Info": "" 1321 | }, 1322 | { 1323 | "ID": "61", 1324 | "Name": "Unknown", 1325 | "Gender": "0", 1326 | "Class": "0", 1327 | "Seat": "0", 1328 | "Club": "0", 1329 | "Persona": "0", 1330 | "Crush": "0", 1331 | "BreastSize": "1", 1332 | "Strength": "0", 1333 | "Hairstyle": "1", 1334 | "Color": "White", 1335 | "Eyes": "Black", 1336 | "EyeType": "Default", 1337 | "Stockings": "None", 1338 | "Accessory": "0", 1339 | "ScheduleTime": "7_7_8_13_13.375_15.5_16_99", 1340 | "ScheduleDestination": "Spawn_Locker_Patrol_Seat_Patrol_Seat_Clean_Patrol", 1341 | "ScheduleAction": "Stand_Stand_Patrol_Sit_Patrol_Sit_Clean_Patrol", 1342 | "Info": "" 1343 | }, 1344 | { 1345 | "ID": "62", 1346 | "Name": "Unknown", 1347 | "Gender": "0", 1348 | "Class": "0", 1349 | "Seat": "0", 1350 | "Club": "0", 1351 | "Persona": "0", 1352 | "Crush": "0", 1353 | "BreastSize": "1", 1354 | "Strength": "0", 1355 | "Hairstyle": "1", 1356 | "Color": "White", 1357 | "Eyes": "Black", 1358 | "EyeType": "Default", 1359 | "Stockings": "None", 1360 | "Accessory": "0", 1361 | "ScheduleTime": "7_7_8_13_13.375_15.5_16_99", 1362 | "ScheduleDestination": "Spawn_Locker_Patrol_Seat_Patrol_Seat_Clean_Patrol", 1363 | "ScheduleAction": "Stand_Stand_Patrol_Sit_Patrol_Sit_Clean_Patrol", 1364 | "Info": "" 1365 | }, 1366 | { 1367 | "ID": "63", 1368 | "Name": "Unknown", 1369 | "Gender": "0", 1370 | "Class": "0", 1371 | "Seat": "0", 1372 | "Club": "0", 1373 | "Persona": "0", 1374 | "Crush": "0", 1375 | "BreastSize": "1", 1376 | "Strength": "0", 1377 | "Hairstyle": "1", 1378 | "Color": "White", 1379 | "Eyes": "Black", 1380 | "EyeType": "Default", 1381 | "Stockings": "None", 1382 | "Accessory": "0", 1383 | "ScheduleTime": "7_7_8_13_13.375_15.5_16_99", 1384 | "ScheduleDestination": "Spawn_Locker_Patrol_Seat_Patrol_Seat_Clean_Patrol", 1385 | "ScheduleAction": "Stand_Stand_Patrol_Sit_Patrol_Sit_Clean_Patrol", 1386 | "Info": "" 1387 | }, 1388 | { 1389 | "ID": "64", 1390 | "Name": "Unknown", 1391 | "Gender": "0", 1392 | "Class": "0", 1393 | "Seat": "0", 1394 | "Club": "0", 1395 | "Persona": "0", 1396 | "Crush": "0", 1397 | "BreastSize": "1", 1398 | "Strength": "0", 1399 | "Hairstyle": "1", 1400 | "Color": "White", 1401 | "Eyes": "Black", 1402 | "EyeType": "Default", 1403 | "Stockings": "None", 1404 | "Accessory": "0", 1405 | "ScheduleTime": "7_7_8_13_13.375_15.5_16_99", 1406 | "ScheduleDestination": "Spawn_Locker_Patrol_Seat_Patrol_Seat_Clean_Patrol", 1407 | "ScheduleAction": "Stand_Stand_Patrol_Sit_Patrol_Sit_Clean_Patrol", 1408 | "Info": "" 1409 | }, 1410 | { 1411 | "ID": "65", 1412 | "Name": "Unknown", 1413 | "Gender": "0", 1414 | "Class": "0", 1415 | "Seat": "0", 1416 | "Club": "0", 1417 | "Persona": "0", 1418 | "Crush": "0", 1419 | "BreastSize": "1", 1420 | "Strength": "0", 1421 | "Hairstyle": "1", 1422 | "Color": "White", 1423 | "Eyes": "Black", 1424 | "EyeType": "Default", 1425 | "Stockings": "None", 1426 | "Accessory": "0", 1427 | "ScheduleTime": "7_7_8_13_13.375_15.5_16_99", 1428 | "ScheduleDestination": "Spawn_Locker_Patrol_Seat_Patrol_Seat_Clean_Patrol", 1429 | "ScheduleAction": "Stand_Stand_Patrol_Sit_Patrol_Sit_Clean_Patrol", 1430 | "Info": "" 1431 | }, 1432 | { 1433 | "ID": "66", 1434 | "Name": "Unknown", 1435 | "Gender": "0", 1436 | "Class": "0", 1437 | "Seat": "0", 1438 | "Club": "0", 1439 | "Persona": "0", 1440 | "Crush": "0", 1441 | "BreastSize": "1", 1442 | "Strength": "0", 1443 | "Hairstyle": "1", 1444 | "Color": "White", 1445 | "Eyes": "Black", 1446 | "EyeType": "Default", 1447 | "Stockings": "None", 1448 | "Accessory": "0", 1449 | "ScheduleTime": "7_7_8_13_13.375_15.5_16_99", 1450 | "ScheduleDestination": "Spawn_Locker_Patrol_Seat_Patrol_Seat_Clean_Patrol", 1451 | "ScheduleAction": "Stand_Stand_Patrol_Sit_Patrol_Sit_Clean_Patrol", 1452 | "Info": "" 1453 | }, 1454 | { 1455 | "ID": "67", 1456 | "Name": "Unknown", 1457 | "Gender": "0", 1458 | "Class": "0", 1459 | "Seat": "0", 1460 | "Club": "0", 1461 | "Persona": "0", 1462 | "Crush": "0", 1463 | "BreastSize": "1", 1464 | "Strength": "0", 1465 | "Hairstyle": "1", 1466 | "Color": "White", 1467 | "Eyes": "Black", 1468 | "EyeType": "Default", 1469 | "Stockings": "None", 1470 | "Accessory": "0", 1471 | "ScheduleTime": "7_7_8_13_13.375_15.5_16_99", 1472 | "ScheduleDestination": "Spawn_Locker_Patrol_Seat_Patrol_Seat_Clean_Patrol", 1473 | "ScheduleAction": "Stand_Stand_Patrol_Sit_Patrol_Sit_Clean_Patrol", 1474 | "Info": "" 1475 | }, 1476 | { 1477 | "ID": "68", 1478 | "Name": "Unknown", 1479 | "Gender": "0", 1480 | "Class": "0", 1481 | "Seat": "0", 1482 | "Club": "0", 1483 | "Persona": "0", 1484 | "Crush": "0", 1485 | "BreastSize": "1", 1486 | "Strength": "0", 1487 | "Hairstyle": "1", 1488 | "Color": "White", 1489 | "Eyes": "Black", 1490 | "EyeType": "Default", 1491 | "Stockings": "None", 1492 | "Accessory": "0", 1493 | "ScheduleTime": "7_7_8_13_13.375_15.5_16_99", 1494 | "ScheduleDestination": "Spawn_Locker_Patrol_Seat_Patrol_Seat_Clean_Patrol", 1495 | "ScheduleAction": "Stand_Stand_Patrol_Sit_Patrol_Sit_Clean_Patrol", 1496 | "Info": "" 1497 | }, 1498 | { 1499 | "ID": "69", 1500 | "Name": "Unknown", 1501 | "Gender": "0", 1502 | "Class": "0", 1503 | "Seat": "0", 1504 | "Club": "0", 1505 | "Persona": "0", 1506 | "Crush": "0", 1507 | "BreastSize": "1", 1508 | "Strength": "0", 1509 | "Hairstyle": "1", 1510 | "Color": "White", 1511 | "Eyes": "Black", 1512 | "EyeType": "Default", 1513 | "Stockings": "None", 1514 | "Accessory": "0", 1515 | "ScheduleTime": "7_7_8_13_13.375_15.5_16_99", 1516 | "ScheduleDestination": "Spawn_Locker_Patrol_Seat_Patrol_Seat_Clean_Patrol", 1517 | "ScheduleAction": "Stand_Stand_Patrol_Sit_Patrol_Sit_Clean_Patrol", 1518 | "Info": "" 1519 | }, 1520 | { 1521 | "ID": "70", 1522 | "Name": "Unknown", 1523 | "Gender": "0", 1524 | "Class": "0", 1525 | "Seat": "0", 1526 | "Club": "0", 1527 | "Persona": "0", 1528 | "Crush": "0", 1529 | "BreastSize": "1", 1530 | "Strength": "0", 1531 | "Hairstyle": "1", 1532 | "Color": "White", 1533 | "Eyes": "Black", 1534 | "EyeType": "Default", 1535 | "Stockings": "None", 1536 | "Accessory": "0", 1537 | "ScheduleTime": "7_7_8_13_13.375_15.5_16_99", 1538 | "ScheduleDestination": "Spawn_Locker_Patrol_Seat_Patrol_Seat_Clean_Patrol", 1539 | "ScheduleAction": "Stand_Stand_Patrol_Sit_Patrol_Sit_Clean_Patrol", 1540 | "Info": "" 1541 | }, 1542 | { 1543 | "ID": "71", 1544 | "Name": "Unknown", 1545 | "Gender": "0", 1546 | "Class": "0", 1547 | "Seat": "0", 1548 | "Club": "0", 1549 | "Persona": "0", 1550 | "Crush": "0", 1551 | "BreastSize": "1", 1552 | "Strength": "0", 1553 | "Hairstyle": "1", 1554 | "Color": "White", 1555 | "Eyes": "Black", 1556 | "EyeType": "Default", 1557 | "Stockings": "None", 1558 | "Accessory": "0", 1559 | "ScheduleTime": "7_7_8_13_13.375_15.5_16_99", 1560 | "ScheduleDestination": "Spawn_Locker_Patrol_Seat_Patrol_Seat_Clean_Patrol", 1561 | "ScheduleAction": "Stand_Stand_Patrol_Sit_Patrol_Sit_Clean_Patrol", 1562 | "Info": "" 1563 | }, 1564 | { 1565 | "ID": "72", 1566 | "Name": "Unknown", 1567 | "Gender": "0", 1568 | "Class": "0", 1569 | "Seat": "0", 1570 | "Club": "0", 1571 | "Persona": "0", 1572 | "Crush": "0", 1573 | "BreastSize": "1", 1574 | "Strength": "0", 1575 | "Hairstyle": "1", 1576 | "Color": "White", 1577 | "Eyes": "Black", 1578 | "EyeType": "Default", 1579 | "Stockings": "None", 1580 | "Accessory": "0", 1581 | "ScheduleTime": "7_7_8_13_13.375_15.5_16_99", 1582 | "ScheduleDestination": "Spawn_Locker_Patrol_Seat_Patrol_Seat_Clean_Patrol", 1583 | "ScheduleAction": "Stand_Stand_Patrol_Sit_Patrol_Sit_Clean_Patrol", 1584 | "Info": "" 1585 | }, 1586 | { 1587 | "ID": "73", 1588 | "Name": "Unknown", 1589 | "Gender": "0", 1590 | "Class": "0", 1591 | "Seat": "0", 1592 | "Club": "0", 1593 | "Persona": "0", 1594 | "Crush": "0", 1595 | "BreastSize": "1", 1596 | "Strength": "0", 1597 | "Hairstyle": "1", 1598 | "Color": "White", 1599 | "Eyes": "Black", 1600 | "EyeType": "Default", 1601 | "Stockings": "None", 1602 | "Accessory": "0", 1603 | "ScheduleTime": "7_7_8_13_13.375_15.5_16_99", 1604 | "ScheduleDestination": "Spawn_Locker_Patrol_Seat_Patrol_Seat_Clean_Patrol", 1605 | "ScheduleAction": "Stand_Stand_Patrol_Sit_Patrol_Sit_Clean_Patrol", 1606 | "Info": "" 1607 | }, 1608 | { 1609 | "ID": "74", 1610 | "Name": "Unknown", 1611 | "Gender": "0", 1612 | "Class": "0", 1613 | "Seat": "0", 1614 | "Club": "0", 1615 | "Persona": "0", 1616 | "Crush": "0", 1617 | "BreastSize": "1", 1618 | "Strength": "0", 1619 | "Hairstyle": "1", 1620 | "Color": "White", 1621 | "Eyes": "Black", 1622 | "EyeType": "Default", 1623 | "Stockings": "None", 1624 | "Accessory": "0", 1625 | "ScheduleTime": "7_7_8_13_13.375_15.5_16_99", 1626 | "ScheduleDestination": "Spawn_Locker_Patrol_Seat_Patrol_Seat_Clean_Patrol", 1627 | "ScheduleAction": "Stand_Stand_Patrol_Sit_Patrol_Sit_Clean_Patrol", 1628 | "Info": "" 1629 | }, 1630 | { 1631 | "ID": "75", 1632 | "Name": "Unknown", 1633 | "Gender": "0", 1634 | "Class": "0", 1635 | "Seat": "0", 1636 | "Club": "0", 1637 | "Persona": "0", 1638 | "Crush": "0", 1639 | "BreastSize": "1", 1640 | "Strength": "0", 1641 | "Hairstyle": "1", 1642 | "Color": "White", 1643 | "Eyes": "Black", 1644 | "EyeType": "Default", 1645 | "Stockings": "None", 1646 | "Accessory": "0", 1647 | "ScheduleTime": "7_7_8_13_13.375_15.5_16_99", 1648 | "ScheduleDestination": "Spawn_Locker_Patrol_Seat_Patrol_Seat_Clean_Patrol", 1649 | "ScheduleAction": "Stand_Stand_Patrol_Sit_Patrol_Sit_Clean_Patrol", 1650 | "Info": "" 1651 | }, 1652 | { 1653 | "ID": "76", 1654 | "Name": "Unknown", 1655 | "Gender": "0", 1656 | "Class": "0", 1657 | "Seat": "0", 1658 | "Club": "0", 1659 | "Persona": "0", 1660 | "Crush": "0", 1661 | "BreastSize": "1", 1662 | "Strength": "0", 1663 | "Hairstyle": "1", 1664 | "Color": "White", 1665 | "Eyes": "Black", 1666 | "EyeType": "Default", 1667 | "Stockings": "None", 1668 | "Accessory": "0", 1669 | "ScheduleTime": "7_7_8_13_13.375_15.5_16_99", 1670 | "ScheduleDestination": "Spawn_Locker_Patrol_Seat_Patrol_Seat_Clean_Patrol", 1671 | "ScheduleAction": "Stand_Stand_Patrol_Sit_Patrol_Sit_Clean_Patrol", 1672 | "Info": "" 1673 | }, 1674 | { 1675 | "ID": "77", 1676 | "Name": "Unknown", 1677 | "Gender": "0", 1678 | "Class": "0", 1679 | "Seat": "0", 1680 | "Club": "0", 1681 | "Persona": "0", 1682 | "Crush": "0", 1683 | "BreastSize": "1", 1684 | "Strength": "0", 1685 | "Hairstyle": "1", 1686 | "Color": "White", 1687 | "Eyes": "Black", 1688 | "EyeType": "Default", 1689 | "Stockings": "None", 1690 | "Accessory": "0", 1691 | "ScheduleTime": "7_7_8_13_13.375_15.5_16_99", 1692 | "ScheduleDestination": "Spawn_Locker_Patrol_Seat_Patrol_Seat_Clean_Patrol", 1693 | "ScheduleAction": "Stand_Stand_Patrol_Sit_Patrol_Sit_Clean_Patrol", 1694 | "Info": "" 1695 | }, 1696 | { 1697 | "ID": "78", 1698 | "Name": "Unknown", 1699 | "Gender": "0", 1700 | "Class": "0", 1701 | "Seat": "0", 1702 | "Club": "0", 1703 | "Persona": "0", 1704 | "Crush": "0", 1705 | "BreastSize": "1", 1706 | "Strength": "0", 1707 | "Hairstyle": "1", 1708 | "Color": "White", 1709 | "Eyes": "Black", 1710 | "EyeType": "Default", 1711 | "Stockings": "None", 1712 | "Accessory": "0", 1713 | "ScheduleTime": "7_7_8_13_13.375_15.5_16_99", 1714 | "ScheduleDestination": "Spawn_Locker_Patrol_Seat_Patrol_Seat_Clean_Patrol", 1715 | "ScheduleAction": "Stand_Stand_Patrol_Sit_Patrol_Sit_Clean_Patrol", 1716 | "Info": "" 1717 | }, 1718 | { 1719 | "ID": "79", 1720 | "Name": "Unknown", 1721 | "Gender": "0", 1722 | "Class": "0", 1723 | "Seat": "0", 1724 | "Club": "0", 1725 | "Persona": "0", 1726 | "Crush": "0", 1727 | "BreastSize": "1", 1728 | "Strength": "0", 1729 | "Hairstyle": "1", 1730 | "Color": "White", 1731 | "Eyes": "Black", 1732 | "EyeType": "Default", 1733 | "Stockings": "None", 1734 | "Accessory": "0", 1735 | "ScheduleTime": "7_7_8_13_13.375_15.5_16_99", 1736 | "ScheduleDestination": "Spawn_Locker_Patrol_Seat_Patrol_Seat_Clean_Patrol", 1737 | "ScheduleAction": "Stand_Stand_Patrol_Sit_Patrol_Sit_Clean_Patrol", 1738 | "Info": "" 1739 | }, 1740 | { 1741 | "ID": "80", 1742 | "Name": "Unknown", 1743 | "Gender": "0", 1744 | "Class": "0", 1745 | "Seat": "0", 1746 | "Club": "0", 1747 | "Persona": "0", 1748 | "Crush": "0", 1749 | "BreastSize": "1", 1750 | "Strength": "0", 1751 | "Hairstyle": "1", 1752 | "Color": "White", 1753 | "Eyes": "Black", 1754 | "EyeType": "Default", 1755 | "Stockings": "None", 1756 | "Accessory": "0", 1757 | "ScheduleTime": "7_7_8_13_13.375_15.5_16_99", 1758 | "ScheduleDestination": "Spawn_Locker_Patrol_Seat_Patrol_Seat_Clean_Patrol", 1759 | "ScheduleAction": "Stand_Stand_Patrol_Sit_Patrol_Sit_Clean_Patrol", 1760 | "Info": "" 1761 | }, 1762 | { 1763 | "ID": "81", 1764 | "Name": "Musume Ronshaku", 1765 | "Gender": "0", 1766 | "Class": "32", 1767 | "Seat": "1", 1768 | "Club": "14", 1769 | "Persona": "10", 1770 | "Crush": "0", 1771 | "BreastSize": "1.5", 1772 | "Strength": "0", 1773 | "Hairstyle": "26", 1774 | "Color": "Ganguro1", 1775 | "Eyes": "Ganguro1", 1776 | "EyeType": "Default", 1777 | "Stockings": "Loose", 1778 | "Accessory": "0", 1779 | "ScheduleTime": "7_7_8_13_13.375_15.5_16_99", 1780 | "ScheduleDestination": "Spawn_Locker_Graffiti_Seat_Bully_Seat_Hangout_Patrol", 1781 | "ScheduleAction": "Stand_Stand_Graffiti_Sit_Bully_Sit_Gossip_Patrol", 1782 | "Info": "A flashy trend-setter who loves to gossip and doesn't take school too seriously. \n \n She is spoiled rotten by her doting father, who buys his daughter anything she wants. \n \n Her father runs a loan agency." 1783 | }, 1784 | { 1785 | "ID": "82", 1786 | "Name": "Kashiko Murasaki", 1787 | "Gender": "0", 1788 | "Class": "31", 1789 | "Seat": "1", 1790 | "Club": "14", 1791 | "Persona": "10", 1792 | "Crush": "0", 1793 | "BreastSize": "1.4", 1794 | "Strength": "0", 1795 | "Hairstyle": "27", 1796 | "Color": "Ganguro2", 1797 | "Eyes": "Ganguro2", 1798 | "EyeType": "Default", 1799 | "Stockings": "Loose", 1800 | "Accessory": "0", 1801 | "ScheduleTime": "7_7_8_13_13.375_15.5_16_99", 1802 | "ScheduleDestination": "Spawn_Locker_Graffiti_Seat_Bully_Seat_Hangout_Patrol", 1803 | "ScheduleAction": "Stand_Stand_Graffiti_Sit_Bully_Sit_Gossip_Patrol", 1804 | "Info": "Spends most of her time texting on her phone. \n \n Pretends to be a sweet girl, but in private, her personality is quite nasty. \n \n Secretly, her favorite activity is gossipping and spreading rumors." 1805 | }, 1806 | { 1807 | "ID": "83", 1808 | "Name": "Hana Daidaiyama", 1809 | "Gender": "0", 1810 | "Class": "22", 1811 | "Seat": "1", 1812 | "Club": "14", 1813 | "Persona": "10", 1814 | "Crush": "0", 1815 | "BreastSize": "1.3", 1816 | "Strength": "0", 1817 | "Hairstyle": "28", 1818 | "Color": "Ganguro3", 1819 | "Eyes": "Ganguro3", 1820 | "EyeType": "Default", 1821 | "Stockings": "Loose", 1822 | "Accessory": "0", 1823 | "ScheduleTime": "7_7_8_13_13.375_15.5_16_99", 1824 | "ScheduleDestination": "Spawn_Locker_Graffiti_Seat_Bully_Seat_Hangout_Patrol", 1825 | "ScheduleAction": "Stand_Stand_Graffiti_Sit_Bully_Sit_Gossip_Patrol", 1826 | "Info": "Spends most of her time playing games on her phone. \n \n Pretends to be pure and innocent, but in private, she can be extremely vulgar. \n \n Secretly, her favorite activity is looking for dirt in peoples' pasts." 1827 | }, 1828 | { 1829 | "ID": "84", 1830 | "Name": "Kokoro Momoiro", 1831 | "Gender": "0", 1832 | "Class": "21", 1833 | "Seat": "1", 1834 | "Club": "14", 1835 | "Persona": "10", 1836 | "Crush": "0", 1837 | "BreastSize": "1.2", 1838 | "Strength": "0", 1839 | "Hairstyle": "29", 1840 | "Color": "Ganguro4", 1841 | "Eyes": "Ganguro4", 1842 | "EyeType": "Default", 1843 | "Stockings": "Loose", 1844 | "Accessory": "0", 1845 | "ScheduleTime": "7_7_8_13.0006_13.375_15.5006_16_99", 1846 | "ScheduleDestination": "Spawn_Locker_Graffiti_Seat_Bully_Seat_Hangout_Patrol", 1847 | "ScheduleAction": "Stand_Stand_Graffiti_Sit_Bully_Sit_Gossip_Patrol", 1848 | "Info": "Spends most of her time taking selfies with her phone. \n \n Pretends to oppose bullying, but in private, she harasses the people she dislikes. \n \n Secretly, her favorite activity is shaming and ridiculing other people." 1849 | }, 1850 | { 1851 | "ID": "85", 1852 | "Name": "Hoshiko Mizudori", 1853 | "Gender": "0", 1854 | "Class": "12", 1855 | "Seat": "1", 1856 | "Club": "14", 1857 | "Persona": "10", 1858 | "Crush": "0", 1859 | "BreastSize": "1.1", 1860 | "Strength": "0", 1861 | "Hairstyle": "30", 1862 | "Color": "Ganguro5", 1863 | "Eyes": "Ganguro5", 1864 | "EyeType": "Default", 1865 | "Stockings": "Loose", 1866 | "Accessory": "0", 1867 | "ScheduleTime": "7_7_8_13_13.375_15.5_16_99", 1868 | "ScheduleDestination": "Spawn_Locker_Graffiti_Seat_Bully_Seat_Hangout_Patrol", 1869 | "ScheduleAction": "Stand_Stand_Graffiti_Sit_Bully_Sit_Gossip_Patrol", 1870 | "Info": "Spends most of her time browsing the Internet on her phone. \n \n Pretends to be a positive person, but in private, only says negative things about others. \n \n Secretly, her favorite activity is operating a hate blog on the Internet." 1871 | }, 1872 | { 1873 | "ID": "86", 1874 | "Name": "Kuroko Kamenaga", 1875 | "Gender": "0", 1876 | "Class": "32", 1877 | "Seat": "3", 1878 | "Club": "13", 1879 | "Persona": "8", 1880 | "Crush": "0", 1881 | "BreastSize": "1.25", 1882 | "Strength": "7", 1883 | "Hairstyle": "22", 1884 | "Color": "Council1", 1885 | "Eyes": "Council1", 1886 | "EyeType": "Council1", 1887 | "Stockings": "Council1", 1888 | "Accessory": "8", 1889 | "ScheduleTime": "7_8_13_13.375_15.5_16_99", 1890 | "ScheduleDestination": "Spawn_Patrol_Seat_Patrol_Seat_Patrol_Hangout", 1891 | "ScheduleAction": "Stand_Patrol_Sit_Patrol_Sit_Patrol_Relax", 1892 | "Info": "Last year's student council president, and this year's vice president. Currently substituting for the absent president. Known for being formal at all times." 1893 | }, 1894 | { 1895 | "ID": "87", 1896 | "Name": "Shiromi Torayoshi", 1897 | "Gender": "0", 1898 | "Class": "22", 1899 | "Seat": "3", 1900 | "Club": "13", 1901 | "Persona": "8", 1902 | "Crush": "0", 1903 | "BreastSize": "0.75", 1904 | "Strength": "7", 1905 | "Hairstyle": "23", 1906 | "Color": "Council2", 1907 | "Eyes": "Council2", 1908 | "EyeType": "Council2", 1909 | "Stockings": "Council2", 1910 | "Accessory": "9", 1911 | "ScheduleTime": "7_8_13_13.375_15.5_16_99", 1912 | "ScheduleDestination": "Spawn_Patrol_Seat_Patrol_Seat_Patrol_Hangout", 1913 | "ScheduleAction": "Stand_Patrol_Sit_Patrol_Sit_Patrol_Relax", 1914 | "Info": "Treasurer of the student council. A mysterious & enigmatic young woman. Known to be calm & relaxed at all times. Some students find her unsettling." 1915 | }, 1916 | { 1917 | "ID": "88", 1918 | "Name": "Akane Toriyasu", 1919 | "Gender": "0", 1920 | "Class": "31", 1921 | "Seat": "3", 1922 | "Club": "13", 1923 | "Persona": "8", 1924 | "Crush": "0", 1925 | "BreastSize": "1.5", 1926 | "Strength": "7", 1927 | "Hairstyle": "24", 1928 | "Color": "Council3", 1929 | "Eyes": "Council3", 1930 | "EyeType": "Council3", 1931 | "Stockings": "Council3", 1932 | "Accessory": "10", 1933 | "ScheduleTime": "7_8_13_13.375_15.5_16_99", 1934 | "ScheduleDestination": "Spawn_Patrol_Seat_Patrol_Seat_Patrol_Hangout", 1935 | "ScheduleAction": "Stand_Patrol_Sit_Patrol_Sit_Patrol_Relax", 1936 | "Info": "Secretary of the student council. Seems ditzy and airheaded at first glance, but has never failed in her duties. She has a very large number of male admirers." 1937 | }, 1938 | { 1939 | "ID": "89", 1940 | "Name": "Aoi Ryugoku", 1941 | "Gender": "0", 1942 | "Class": "21", 1943 | "Seat": "3", 1944 | "Club": "13", 1945 | "Persona": "8", 1946 | "Crush": "0", 1947 | "BreastSize": "1", 1948 | "Strength": "7", 1949 | "Hairstyle": "25", 1950 | "Color": "Council4", 1951 | "Eyes": "Council4", 1952 | "EyeType": "Council4", 1953 | "Stockings": "Council4", 1954 | "Accessory": "11", 1955 | "ScheduleTime": "7_8_13.0007_13.375_15.5007_16_99", 1956 | "ScheduleDestination": "Spawn_Patrol_Seat_Patrol_Seat_Patrol_Hangout", 1957 | "ScheduleAction": "Stand_Patrol_Sit_Patrol_Sit_Patrol_Relax", 1958 | "Info": "Enforcer of the student council. Charged with the task of maintaining peace throughout the school. Often uses physical intimidation to enforce rules." 1959 | }, 1960 | { 1961 | "ID": "90", 1962 | "Name": "Nasu Kankoshi", 1963 | "Gender": "0", 1964 | "Class": "1", 1965 | "Seat": "0", 1966 | "Club": "102", 1967 | "Persona": "9", 1968 | "Crush": "0", 1969 | "BreastSize": "1", 1970 | "Strength": "6", 1971 | "Hairstyle": "8", 1972 | "Color": "White", 1973 | "Eyes": "Brown", 1974 | "EyeType": "Default", 1975 | "Stockings": "None", 1976 | "Accessory": "8", 1977 | "ScheduleTime": "0_0_0_0_0", 1978 | "ScheduleDestination": "Patrol_Patrol_Patrol_Patrol_Patrol", 1979 | "ScheduleAction": "Patrol_Patrol_Patrol_Patrol_Patrol", 1980 | "Info": "" 1981 | }, 1982 | { 1983 | "ID": "91", 1984 | "Name": "Reina Nana", 1985 | "Gender": "0", 1986 | "Class": "11", 1987 | "Seat": "0", 1988 | "Club": "100", 1989 | "Persona": "9", 1990 | "Crush": "0", 1991 | "BreastSize": "1.5", 1992 | "Strength": "6", 1993 | "Hairstyle": "1", 1994 | "Color": "Brown", 1995 | "Eyes": "Brown", 1996 | "EyeType": "Default", 1997 | "Stockings": "None", 1998 | "Accessory": "1", 1999 | "ScheduleTime": "7_8.25_13_13.375_15.5_99", 2000 | "ScheduleDestination": "Spawn_Seat_Podium_Seat_Podium_Seat", 2001 | "ScheduleAction": "Stand_Grade_Teach_Grade_Teach_Grade", 2002 | "Info": "" 2003 | }, 2004 | { 2005 | "ID": "92", 2006 | "Name": "Natsuki Anna", 2007 | "Gender": "0", 2008 | "Class": "12", 2009 | "Seat": "0", 2010 | "Club": "100", 2011 | "Persona": "9", 2012 | "Crush": "0", 2013 | "BreastSize": "1.5", 2014 | "Strength": "6", 2015 | "Hairstyle": "2", 2016 | "Color": "Brown", 2017 | "Eyes": "Brown", 2018 | "EyeType": "Default", 2019 | "Stockings": "None", 2020 | "Accessory": "2", 2021 | "ScheduleTime": "7_8.25_13_13.375_15.5_99", 2022 | "ScheduleDestination": "Spawn_Seat_Podium_Seat_Podium_Seat", 2023 | "ScheduleAction": "Stand_Grade_Teach_Grade_Teach_Grade", 2024 | "Info": "" 2025 | }, 2026 | { 2027 | "ID": "93", 2028 | "Name": "Rino Fuka", 2029 | "Gender": "0", 2030 | "Class": "21", 2031 | "Seat": "0", 2032 | "Club": "100", 2033 | "Persona": "9", 2034 | "Crush": "0", 2035 | "BreastSize": "1.5", 2036 | "Strength": "6", 2037 | "Hairstyle": "3", 2038 | "Color": "Brown", 2039 | "Eyes": "Brown", 2040 | "EyeType": "Default", 2041 | "Stockings": "None", 2042 | "Accessory": "3", 2043 | "ScheduleTime": "7_8.25_13_13.375_15.5_99", 2044 | "ScheduleDestination": "Spawn_Seat_Podium_Seat_Podium_Seat", 2045 | "ScheduleAction": "Stand_Grade_Teach_Grade_Teach_Grade", 2046 | "Info": "" 2047 | }, 2048 | { 2049 | "ID": "94", 2050 | "Name": "Shiori Risa", 2051 | "Gender": "0", 2052 | "Class": "22", 2053 | "Seat": "0", 2054 | "Club": "100", 2055 | "Persona": "9", 2056 | "Crush": "0", 2057 | "BreastSize": "1.5", 2058 | "Strength": "6", 2059 | "Hairstyle": "4", 2060 | "Color": "Brown", 2061 | "Eyes": "Brown", 2062 | "EyeType": "Default", 2063 | "Stockings": "None", 2064 | "Accessory": "4", 2065 | "ScheduleTime": "7_8.25_13_13.375_15.5_99", 2066 | "ScheduleDestination": "Spawn_Seat_Podium_Seat_Podium_Seat", 2067 | "ScheduleAction": "Stand_Grade_Teach_Grade_Teach_Grade", 2068 | "Info": "" 2069 | }, 2070 | { 2071 | "ID": "95", 2072 | "Name": "Karin Hana", 2073 | "Gender": "0", 2074 | "Class": "31", 2075 | "Seat": "0", 2076 | "Club": "100", 2077 | "Persona": "9", 2078 | "Crush": "0", 2079 | "BreastSize": "1.5", 2080 | "Strength": "6", 2081 | "Hairstyle": "5", 2082 | "Color": "Brown", 2083 | "Eyes": "Brown", 2084 | "EyeType": "Default", 2085 | "Stockings": "None", 2086 | "Accessory": "5", 2087 | "ScheduleTime": "7_8.25_13_13.375_15.5_99", 2088 | "ScheduleDestination": "Spawn_Seat_Podium_Seat_Podium_Seat", 2089 | "ScheduleAction": "Stand_Grade_Teach_Grade_Teach_Grade", 2090 | "Info": "" 2091 | }, 2092 | { 2093 | "ID": "96", 2094 | "Name": "Kaho Kanon", 2095 | "Gender": "0", 2096 | "Class": "32", 2097 | "Seat": "0", 2098 | "Club": "100", 2099 | "Persona": "9", 2100 | "Crush": "0", 2101 | "BreastSize": "1.5", 2102 | "Strength": "6", 2103 | "Hairstyle": "6", 2104 | "Color": "Brown", 2105 | "Eyes": "Brown", 2106 | "EyeType": "Default", 2107 | "Stockings": "None", 2108 | "Accessory": "6", 2109 | "ScheduleTime": "7_8.25_13_13.375_15.5_99", 2110 | "ScheduleDestination": "Spawn_Seat_Podium_Seat_Podium_Seat", 2111 | "ScheduleAction": "Stand_Grade_Teach_Grade_Teach_Grade", 2112 | "Info": "" 2113 | }, 2114 | { 2115 | "ID": "97", 2116 | "Name": "Kyoshi Taiso", 2117 | "Gender": "0", 2118 | "Class": "0", 2119 | "Seat": "0", 2120 | "Club": "101", 2121 | "Persona": "9", 2122 | "Crush": "0", 2123 | "BreastSize": "1.5", 2124 | "Strength": "6", 2125 | "Hairstyle": "7", 2126 | "Color": "Blonde", 2127 | "Eyes": "Blonde", 2128 | "EyeType": "Default", 2129 | "Stockings": "None", 2130 | "Accessory": "7", 2131 | "ScheduleTime": "7_8_13_13.375_15.5_99", 2132 | "ScheduleDestination": "Spawn_Podium_Patrol_Seat_Patrol_Podium", 2133 | "ScheduleAction": "Stand_Stand_Patrol_Grade_Patrol_Stand", 2134 | "Info": "" 2135 | }, 2136 | { 2137 | "ID": "98", 2138 | "Name": "Genka Kunahito", 2139 | "Gender": "0", 2140 | "Class": "2", 2141 | "Seat": "0", 2142 | "Club": "100", 2143 | "Persona": "9", 2144 | "Crush": "0", 2145 | "BreastSize": "1", 2146 | "Strength": "6", 2147 | "Hairstyle": "1", 2148 | "Color": "White", 2149 | "Eyes": "Black", 2150 | "EyeType": "Default", 2151 | "Stockings": "None", 2152 | "Accessory": "0", 2153 | "ScheduleTime": "0", 2154 | "ScheduleDestination": "Nothing", 2155 | "ScheduleAction": "Nothing", 2156 | "Info": "The school's guidance counselor. \n \n Misbehaving students are sent to her office. \n \n To expel a student, you must catch that student misbehaving and report them to her." 2157 | }, 2158 | { 2159 | "ID": "99", 2160 | "Name": "Kocho Shuyona", 2161 | "Gender": "1", 2162 | "Class": "3", 2163 | "Seat": "0", 2164 | "Club": "100", 2165 | "Persona": "9", 2166 | "Crush": "0", 2167 | "BreastSize": "0", 2168 | "Strength": "99", 2169 | "Hairstyle": "1", 2170 | "Color": "White", 2171 | "Eyes": "Black", 2172 | "EyeType": "Default", 2173 | "Stockings": "None", 2174 | "Accessory": "0", 2175 | "ScheduleTime": "0", 2176 | "ScheduleDestination": "Nothing", 2177 | "ScheduleAction": "Nothing", 2178 | "Info": "The school's headmaster. \n \n An extremely reclusive person, he rarely leaves his office or addresses the student body in person. \n \n The center of numerous unsavory rumors, although none have been proven." 2179 | }, 2180 | { 2181 | "ID": "100", 2182 | "Name": "Info-chan", 2183 | "Gender": "0", 2184 | "Class": "0", 2185 | "Seat": "0", 2186 | "Club": "99", 2187 | "Persona": "99", 2188 | "Crush": "0", 2189 | "BreastSize": "1", 2190 | "Strength": "99", 2191 | "Hairstyle": "1", 2192 | "Color": "White", 2193 | "Eyes": "Black", 2194 | "EyeType": "Default", 2195 | "Stockings": "None", 2196 | "Accessory": "0", 2197 | "ScheduleTime": "0", 2198 | "ScheduleDestination": "Nothing", 2199 | "ScheduleAction": "Nothing", 2200 | "Info": "Trying to look up my information? Don't bother. There is nothing that you need to know about me. You're a client, and I'm a provider. That's all we need to know about each other." 2201 | }, 2202 | { 2203 | "ID": 101, 2204 | "Name": "mahesh", 2205 | "Gender": "1", 2206 | "Class": "32", 2207 | "Seat": "15", 2208 | "Strength": "0" 2209 | } 2210 | ] 2211 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "read-write-demo", 3 | "version": "1.0.0", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "read-write-demo", 9 | "version": "1.0.0", 10 | "license": "ISC", 11 | "dependencies": { 12 | "express": "^4.18.1", 13 | "nodemon": "^2.0.19" 14 | } 15 | }, 16 | "node_modules/abbrev": { 17 | "version": "1.1.1", 18 | "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", 19 | "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" 20 | }, 21 | "node_modules/accepts": { 22 | "version": "1.3.8", 23 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", 24 | "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", 25 | "dependencies": { 26 | "mime-types": "~2.1.34", 27 | "negotiator": "0.6.3" 28 | }, 29 | "engines": { 30 | "node": ">= 0.6" 31 | } 32 | }, 33 | "node_modules/anymatch": { 34 | "version": "3.1.2", 35 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", 36 | "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", 37 | "dependencies": { 38 | "normalize-path": "^3.0.0", 39 | "picomatch": "^2.0.4" 40 | }, 41 | "engines": { 42 | "node": ">= 8" 43 | } 44 | }, 45 | "node_modules/array-flatten": { 46 | "version": "1.1.1", 47 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", 48 | "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" 49 | }, 50 | "node_modules/balanced-match": { 51 | "version": "1.0.2", 52 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 53 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" 54 | }, 55 | "node_modules/binary-extensions": { 56 | "version": "2.2.0", 57 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", 58 | "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", 59 | "engines": { 60 | "node": ">=8" 61 | } 62 | }, 63 | "node_modules/body-parser": { 64 | "version": "1.20.0", 65 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", 66 | "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", 67 | "dependencies": { 68 | "bytes": "3.1.2", 69 | "content-type": "~1.0.4", 70 | "debug": "2.6.9", 71 | "depd": "2.0.0", 72 | "destroy": "1.2.0", 73 | "http-errors": "2.0.0", 74 | "iconv-lite": "0.4.24", 75 | "on-finished": "2.4.1", 76 | "qs": "6.10.3", 77 | "raw-body": "2.5.1", 78 | "type-is": "~1.6.18", 79 | "unpipe": "1.0.0" 80 | }, 81 | "engines": { 82 | "node": ">= 0.8", 83 | "npm": "1.2.8000 || >= 1.4.16" 84 | } 85 | }, 86 | "node_modules/brace-expansion": { 87 | "version": "1.1.11", 88 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 89 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 90 | "dependencies": { 91 | "balanced-match": "^1.0.0", 92 | "concat-map": "0.0.1" 93 | } 94 | }, 95 | "node_modules/braces": { 96 | "version": "3.0.2", 97 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 98 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 99 | "dependencies": { 100 | "fill-range": "^7.0.1" 101 | }, 102 | "engines": { 103 | "node": ">=8" 104 | } 105 | }, 106 | "node_modules/bytes": { 107 | "version": "3.1.2", 108 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", 109 | "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", 110 | "engines": { 111 | "node": ">= 0.8" 112 | } 113 | }, 114 | "node_modules/call-bind": { 115 | "version": "1.0.2", 116 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", 117 | "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", 118 | "dependencies": { 119 | "function-bind": "^1.1.1", 120 | "get-intrinsic": "^1.0.2" 121 | }, 122 | "funding": { 123 | "url": "https://github.com/sponsors/ljharb" 124 | } 125 | }, 126 | "node_modules/chokidar": { 127 | "version": "3.5.3", 128 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", 129 | "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", 130 | "funding": [ 131 | { 132 | "type": "individual", 133 | "url": "https://paulmillr.com/funding/" 134 | } 135 | ], 136 | "dependencies": { 137 | "anymatch": "~3.1.2", 138 | "braces": "~3.0.2", 139 | "glob-parent": "~5.1.2", 140 | "is-binary-path": "~2.1.0", 141 | "is-glob": "~4.0.1", 142 | "normalize-path": "~3.0.0", 143 | "readdirp": "~3.6.0" 144 | }, 145 | "engines": { 146 | "node": ">= 8.10.0" 147 | }, 148 | "optionalDependencies": { 149 | "fsevents": "~2.3.2" 150 | } 151 | }, 152 | "node_modules/concat-map": { 153 | "version": "0.0.1", 154 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 155 | "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" 156 | }, 157 | "node_modules/content-disposition": { 158 | "version": "0.5.4", 159 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", 160 | "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", 161 | "dependencies": { 162 | "safe-buffer": "5.2.1" 163 | }, 164 | "engines": { 165 | "node": ">= 0.6" 166 | } 167 | }, 168 | "node_modules/content-type": { 169 | "version": "1.0.4", 170 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", 171 | "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", 172 | "engines": { 173 | "node": ">= 0.6" 174 | } 175 | }, 176 | "node_modules/cookie": { 177 | "version": "0.5.0", 178 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", 179 | "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", 180 | "engines": { 181 | "node": ">= 0.6" 182 | } 183 | }, 184 | "node_modules/cookie-signature": { 185 | "version": "1.0.6", 186 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", 187 | "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" 188 | }, 189 | "node_modules/debug": { 190 | "version": "2.6.9", 191 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 192 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 193 | "dependencies": { 194 | "ms": "2.0.0" 195 | } 196 | }, 197 | "node_modules/depd": { 198 | "version": "2.0.0", 199 | "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", 200 | "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", 201 | "engines": { 202 | "node": ">= 0.8" 203 | } 204 | }, 205 | "node_modules/destroy": { 206 | "version": "1.2.0", 207 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", 208 | "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", 209 | "engines": { 210 | "node": ">= 0.8", 211 | "npm": "1.2.8000 || >= 1.4.16" 212 | } 213 | }, 214 | "node_modules/ee-first": { 215 | "version": "1.1.1", 216 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 217 | "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" 218 | }, 219 | "node_modules/encodeurl": { 220 | "version": "1.0.2", 221 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", 222 | "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", 223 | "engines": { 224 | "node": ">= 0.8" 225 | } 226 | }, 227 | "node_modules/escape-html": { 228 | "version": "1.0.3", 229 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", 230 | "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" 231 | }, 232 | "node_modules/etag": { 233 | "version": "1.8.1", 234 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", 235 | "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", 236 | "engines": { 237 | "node": ">= 0.6" 238 | } 239 | }, 240 | "node_modules/express": { 241 | "version": "4.18.1", 242 | "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz", 243 | "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==", 244 | "dependencies": { 245 | "accepts": "~1.3.8", 246 | "array-flatten": "1.1.1", 247 | "body-parser": "1.20.0", 248 | "content-disposition": "0.5.4", 249 | "content-type": "~1.0.4", 250 | "cookie": "0.5.0", 251 | "cookie-signature": "1.0.6", 252 | "debug": "2.6.9", 253 | "depd": "2.0.0", 254 | "encodeurl": "~1.0.2", 255 | "escape-html": "~1.0.3", 256 | "etag": "~1.8.1", 257 | "finalhandler": "1.2.0", 258 | "fresh": "0.5.2", 259 | "http-errors": "2.0.0", 260 | "merge-descriptors": "1.0.1", 261 | "methods": "~1.1.2", 262 | "on-finished": "2.4.1", 263 | "parseurl": "~1.3.3", 264 | "path-to-regexp": "0.1.7", 265 | "proxy-addr": "~2.0.7", 266 | "qs": "6.10.3", 267 | "range-parser": "~1.2.1", 268 | "safe-buffer": "5.2.1", 269 | "send": "0.18.0", 270 | "serve-static": "1.15.0", 271 | "setprototypeof": "1.2.0", 272 | "statuses": "2.0.1", 273 | "type-is": "~1.6.18", 274 | "utils-merge": "1.0.1", 275 | "vary": "~1.1.2" 276 | }, 277 | "engines": { 278 | "node": ">= 0.10.0" 279 | } 280 | }, 281 | "node_modules/fill-range": { 282 | "version": "7.0.1", 283 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 284 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 285 | "dependencies": { 286 | "to-regex-range": "^5.0.1" 287 | }, 288 | "engines": { 289 | "node": ">=8" 290 | } 291 | }, 292 | "node_modules/finalhandler": { 293 | "version": "1.2.0", 294 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", 295 | "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", 296 | "dependencies": { 297 | "debug": "2.6.9", 298 | "encodeurl": "~1.0.2", 299 | "escape-html": "~1.0.3", 300 | "on-finished": "2.4.1", 301 | "parseurl": "~1.3.3", 302 | "statuses": "2.0.1", 303 | "unpipe": "~1.0.0" 304 | }, 305 | "engines": { 306 | "node": ">= 0.8" 307 | } 308 | }, 309 | "node_modules/forwarded": { 310 | "version": "0.2.0", 311 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", 312 | "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", 313 | "engines": { 314 | "node": ">= 0.6" 315 | } 316 | }, 317 | "node_modules/fresh": { 318 | "version": "0.5.2", 319 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", 320 | "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", 321 | "engines": { 322 | "node": ">= 0.6" 323 | } 324 | }, 325 | "node_modules/fsevents": { 326 | "version": "2.3.2", 327 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", 328 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", 329 | "hasInstallScript": true, 330 | "optional": true, 331 | "os": [ 332 | "darwin" 333 | ], 334 | "engines": { 335 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 336 | } 337 | }, 338 | "node_modules/function-bind": { 339 | "version": "1.1.1", 340 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 341 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" 342 | }, 343 | "node_modules/get-intrinsic": { 344 | "version": "1.1.2", 345 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", 346 | "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", 347 | "dependencies": { 348 | "function-bind": "^1.1.1", 349 | "has": "^1.0.3", 350 | "has-symbols": "^1.0.3" 351 | }, 352 | "funding": { 353 | "url": "https://github.com/sponsors/ljharb" 354 | } 355 | }, 356 | "node_modules/glob-parent": { 357 | "version": "5.1.2", 358 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 359 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 360 | "dependencies": { 361 | "is-glob": "^4.0.1" 362 | }, 363 | "engines": { 364 | "node": ">= 6" 365 | } 366 | }, 367 | "node_modules/has": { 368 | "version": "1.0.3", 369 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 370 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 371 | "dependencies": { 372 | "function-bind": "^1.1.1" 373 | }, 374 | "engines": { 375 | "node": ">= 0.4.0" 376 | } 377 | }, 378 | "node_modules/has-flag": { 379 | "version": "3.0.0", 380 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 381 | "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", 382 | "engines": { 383 | "node": ">=4" 384 | } 385 | }, 386 | "node_modules/has-symbols": { 387 | "version": "1.0.3", 388 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", 389 | "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", 390 | "engines": { 391 | "node": ">= 0.4" 392 | }, 393 | "funding": { 394 | "url": "https://github.com/sponsors/ljharb" 395 | } 396 | }, 397 | "node_modules/http-errors": { 398 | "version": "2.0.0", 399 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", 400 | "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", 401 | "dependencies": { 402 | "depd": "2.0.0", 403 | "inherits": "2.0.4", 404 | "setprototypeof": "1.2.0", 405 | "statuses": "2.0.1", 406 | "toidentifier": "1.0.1" 407 | }, 408 | "engines": { 409 | "node": ">= 0.8" 410 | } 411 | }, 412 | "node_modules/iconv-lite": { 413 | "version": "0.4.24", 414 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 415 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 416 | "dependencies": { 417 | "safer-buffer": ">= 2.1.2 < 3" 418 | }, 419 | "engines": { 420 | "node": ">=0.10.0" 421 | } 422 | }, 423 | "node_modules/ignore-by-default": { 424 | "version": "1.0.1", 425 | "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", 426 | "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==" 427 | }, 428 | "node_modules/inherits": { 429 | "version": "2.0.4", 430 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 431 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 432 | }, 433 | "node_modules/ipaddr.js": { 434 | "version": "1.9.1", 435 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", 436 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", 437 | "engines": { 438 | "node": ">= 0.10" 439 | } 440 | }, 441 | "node_modules/is-binary-path": { 442 | "version": "2.1.0", 443 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 444 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 445 | "dependencies": { 446 | "binary-extensions": "^2.0.0" 447 | }, 448 | "engines": { 449 | "node": ">=8" 450 | } 451 | }, 452 | "node_modules/is-extglob": { 453 | "version": "2.1.1", 454 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 455 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", 456 | "engines": { 457 | "node": ">=0.10.0" 458 | } 459 | }, 460 | "node_modules/is-glob": { 461 | "version": "4.0.3", 462 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 463 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 464 | "dependencies": { 465 | "is-extglob": "^2.1.1" 466 | }, 467 | "engines": { 468 | "node": ">=0.10.0" 469 | } 470 | }, 471 | "node_modules/is-number": { 472 | "version": "7.0.0", 473 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 474 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 475 | "engines": { 476 | "node": ">=0.12.0" 477 | } 478 | }, 479 | "node_modules/media-typer": { 480 | "version": "0.3.0", 481 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", 482 | "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", 483 | "engines": { 484 | "node": ">= 0.6" 485 | } 486 | }, 487 | "node_modules/merge-descriptors": { 488 | "version": "1.0.1", 489 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", 490 | "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" 491 | }, 492 | "node_modules/methods": { 493 | "version": "1.1.2", 494 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", 495 | "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", 496 | "engines": { 497 | "node": ">= 0.6" 498 | } 499 | }, 500 | "node_modules/mime": { 501 | "version": "1.6.0", 502 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", 503 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", 504 | "bin": { 505 | "mime": "cli.js" 506 | }, 507 | "engines": { 508 | "node": ">=4" 509 | } 510 | }, 511 | "node_modules/mime-db": { 512 | "version": "1.52.0", 513 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", 514 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", 515 | "engines": { 516 | "node": ">= 0.6" 517 | } 518 | }, 519 | "node_modules/mime-types": { 520 | "version": "2.1.35", 521 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", 522 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", 523 | "dependencies": { 524 | "mime-db": "1.52.0" 525 | }, 526 | "engines": { 527 | "node": ">= 0.6" 528 | } 529 | }, 530 | "node_modules/minimatch": { 531 | "version": "3.1.2", 532 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 533 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 534 | "dependencies": { 535 | "brace-expansion": "^1.1.7" 536 | }, 537 | "engines": { 538 | "node": "*" 539 | } 540 | }, 541 | "node_modules/ms": { 542 | "version": "2.0.0", 543 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 544 | "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" 545 | }, 546 | "node_modules/negotiator": { 547 | "version": "0.6.3", 548 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", 549 | "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", 550 | "engines": { 551 | "node": ">= 0.6" 552 | } 553 | }, 554 | "node_modules/nodemon": { 555 | "version": "2.0.19", 556 | "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.19.tgz", 557 | "integrity": "sha512-4pv1f2bMDj0Eeg/MhGqxrtveeQ5/G/UVe9iO6uTZzjnRluSA4PVWf8CW99LUPwGB3eNIA7zUFoP77YuI7hOc0A==", 558 | "hasInstallScript": true, 559 | "dependencies": { 560 | "chokidar": "^3.5.2", 561 | "debug": "^3.2.7", 562 | "ignore-by-default": "^1.0.1", 563 | "minimatch": "^3.0.4", 564 | "pstree.remy": "^1.1.8", 565 | "semver": "^5.7.1", 566 | "simple-update-notifier": "^1.0.7", 567 | "supports-color": "^5.5.0", 568 | "touch": "^3.1.0", 569 | "undefsafe": "^2.0.5" 570 | }, 571 | "bin": { 572 | "nodemon": "bin/nodemon.js" 573 | }, 574 | "engines": { 575 | "node": ">=8.10.0" 576 | }, 577 | "funding": { 578 | "type": "opencollective", 579 | "url": "https://opencollective.com/nodemon" 580 | } 581 | }, 582 | "node_modules/nodemon/node_modules/debug": { 583 | "version": "3.2.7", 584 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", 585 | "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", 586 | "dependencies": { 587 | "ms": "^2.1.1" 588 | } 589 | }, 590 | "node_modules/nodemon/node_modules/ms": { 591 | "version": "2.1.3", 592 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 593 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" 594 | }, 595 | "node_modules/nopt": { 596 | "version": "1.0.10", 597 | "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", 598 | "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", 599 | "dependencies": { 600 | "abbrev": "1" 601 | }, 602 | "bin": { 603 | "nopt": "bin/nopt.js" 604 | }, 605 | "engines": { 606 | "node": "*" 607 | } 608 | }, 609 | "node_modules/normalize-path": { 610 | "version": "3.0.0", 611 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 612 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 613 | "engines": { 614 | "node": ">=0.10.0" 615 | } 616 | }, 617 | "node_modules/object-inspect": { 618 | "version": "1.12.2", 619 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", 620 | "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", 621 | "funding": { 622 | "url": "https://github.com/sponsors/ljharb" 623 | } 624 | }, 625 | "node_modules/on-finished": { 626 | "version": "2.4.1", 627 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", 628 | "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", 629 | "dependencies": { 630 | "ee-first": "1.1.1" 631 | }, 632 | "engines": { 633 | "node": ">= 0.8" 634 | } 635 | }, 636 | "node_modules/parseurl": { 637 | "version": "1.3.3", 638 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", 639 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", 640 | "engines": { 641 | "node": ">= 0.8" 642 | } 643 | }, 644 | "node_modules/path-to-regexp": { 645 | "version": "0.1.7", 646 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", 647 | "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" 648 | }, 649 | "node_modules/picomatch": { 650 | "version": "2.3.1", 651 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 652 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 653 | "engines": { 654 | "node": ">=8.6" 655 | }, 656 | "funding": { 657 | "url": "https://github.com/sponsors/jonschlinkert" 658 | } 659 | }, 660 | "node_modules/proxy-addr": { 661 | "version": "2.0.7", 662 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", 663 | "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", 664 | "dependencies": { 665 | "forwarded": "0.2.0", 666 | "ipaddr.js": "1.9.1" 667 | }, 668 | "engines": { 669 | "node": ">= 0.10" 670 | } 671 | }, 672 | "node_modules/pstree.remy": { 673 | "version": "1.1.8", 674 | "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", 675 | "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==" 676 | }, 677 | "node_modules/qs": { 678 | "version": "6.10.3", 679 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", 680 | "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", 681 | "dependencies": { 682 | "side-channel": "^1.0.4" 683 | }, 684 | "engines": { 685 | "node": ">=0.6" 686 | }, 687 | "funding": { 688 | "url": "https://github.com/sponsors/ljharb" 689 | } 690 | }, 691 | "node_modules/range-parser": { 692 | "version": "1.2.1", 693 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", 694 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", 695 | "engines": { 696 | "node": ">= 0.6" 697 | } 698 | }, 699 | "node_modules/raw-body": { 700 | "version": "2.5.1", 701 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", 702 | "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", 703 | "dependencies": { 704 | "bytes": "3.1.2", 705 | "http-errors": "2.0.0", 706 | "iconv-lite": "0.4.24", 707 | "unpipe": "1.0.0" 708 | }, 709 | "engines": { 710 | "node": ">= 0.8" 711 | } 712 | }, 713 | "node_modules/readdirp": { 714 | "version": "3.6.0", 715 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", 716 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", 717 | "dependencies": { 718 | "picomatch": "^2.2.1" 719 | }, 720 | "engines": { 721 | "node": ">=8.10.0" 722 | } 723 | }, 724 | "node_modules/safe-buffer": { 725 | "version": "5.2.1", 726 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 727 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 728 | "funding": [ 729 | { 730 | "type": "github", 731 | "url": "https://github.com/sponsors/feross" 732 | }, 733 | { 734 | "type": "patreon", 735 | "url": "https://www.patreon.com/feross" 736 | }, 737 | { 738 | "type": "consulting", 739 | "url": "https://feross.org/support" 740 | } 741 | ] 742 | }, 743 | "node_modules/safer-buffer": { 744 | "version": "2.1.2", 745 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 746 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 747 | }, 748 | "node_modules/semver": { 749 | "version": "5.7.1", 750 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", 751 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", 752 | "bin": { 753 | "semver": "bin/semver" 754 | } 755 | }, 756 | "node_modules/send": { 757 | "version": "0.18.0", 758 | "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", 759 | "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", 760 | "dependencies": { 761 | "debug": "2.6.9", 762 | "depd": "2.0.0", 763 | "destroy": "1.2.0", 764 | "encodeurl": "~1.0.2", 765 | "escape-html": "~1.0.3", 766 | "etag": "~1.8.1", 767 | "fresh": "0.5.2", 768 | "http-errors": "2.0.0", 769 | "mime": "1.6.0", 770 | "ms": "2.1.3", 771 | "on-finished": "2.4.1", 772 | "range-parser": "~1.2.1", 773 | "statuses": "2.0.1" 774 | }, 775 | "engines": { 776 | "node": ">= 0.8.0" 777 | } 778 | }, 779 | "node_modules/send/node_modules/ms": { 780 | "version": "2.1.3", 781 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 782 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" 783 | }, 784 | "node_modules/serve-static": { 785 | "version": "1.15.0", 786 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", 787 | "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", 788 | "dependencies": { 789 | "encodeurl": "~1.0.2", 790 | "escape-html": "~1.0.3", 791 | "parseurl": "~1.3.3", 792 | "send": "0.18.0" 793 | }, 794 | "engines": { 795 | "node": ">= 0.8.0" 796 | } 797 | }, 798 | "node_modules/setprototypeof": { 799 | "version": "1.2.0", 800 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", 801 | "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" 802 | }, 803 | "node_modules/side-channel": { 804 | "version": "1.0.4", 805 | "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", 806 | "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", 807 | "dependencies": { 808 | "call-bind": "^1.0.0", 809 | "get-intrinsic": "^1.0.2", 810 | "object-inspect": "^1.9.0" 811 | }, 812 | "funding": { 813 | "url": "https://github.com/sponsors/ljharb" 814 | } 815 | }, 816 | "node_modules/simple-update-notifier": { 817 | "version": "1.0.7", 818 | "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.0.7.tgz", 819 | "integrity": "sha512-BBKgR84BJQJm6WjWFMHgLVuo61FBDSj1z/xSFUIozqO6wO7ii0JxCqlIud7Enr/+LhlbNI0whErq96P2qHNWew==", 820 | "dependencies": { 821 | "semver": "~7.0.0" 822 | }, 823 | "engines": { 824 | "node": ">=8.10.0" 825 | } 826 | }, 827 | "node_modules/simple-update-notifier/node_modules/semver": { 828 | "version": "7.0.0", 829 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", 830 | "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", 831 | "bin": { 832 | "semver": "bin/semver.js" 833 | } 834 | }, 835 | "node_modules/statuses": { 836 | "version": "2.0.1", 837 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", 838 | "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", 839 | "engines": { 840 | "node": ">= 0.8" 841 | } 842 | }, 843 | "node_modules/supports-color": { 844 | "version": "5.5.0", 845 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 846 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 847 | "dependencies": { 848 | "has-flag": "^3.0.0" 849 | }, 850 | "engines": { 851 | "node": ">=4" 852 | } 853 | }, 854 | "node_modules/to-regex-range": { 855 | "version": "5.0.1", 856 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 857 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 858 | "dependencies": { 859 | "is-number": "^7.0.0" 860 | }, 861 | "engines": { 862 | "node": ">=8.0" 863 | } 864 | }, 865 | "node_modules/toidentifier": { 866 | "version": "1.0.1", 867 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", 868 | "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", 869 | "engines": { 870 | "node": ">=0.6" 871 | } 872 | }, 873 | "node_modules/touch": { 874 | "version": "3.1.0", 875 | "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", 876 | "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", 877 | "dependencies": { 878 | "nopt": "~1.0.10" 879 | }, 880 | "bin": { 881 | "nodetouch": "bin/nodetouch.js" 882 | } 883 | }, 884 | "node_modules/type-is": { 885 | "version": "1.6.18", 886 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", 887 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", 888 | "dependencies": { 889 | "media-typer": "0.3.0", 890 | "mime-types": "~2.1.24" 891 | }, 892 | "engines": { 893 | "node": ">= 0.6" 894 | } 895 | }, 896 | "node_modules/undefsafe": { 897 | "version": "2.0.5", 898 | "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", 899 | "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==" 900 | }, 901 | "node_modules/unpipe": { 902 | "version": "1.0.0", 903 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", 904 | "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", 905 | "engines": { 906 | "node": ">= 0.8" 907 | } 908 | }, 909 | "node_modules/utils-merge": { 910 | "version": "1.0.1", 911 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", 912 | "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", 913 | "engines": { 914 | "node": ">= 0.4.0" 915 | } 916 | }, 917 | "node_modules/vary": { 918 | "version": "1.1.2", 919 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", 920 | "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", 921 | "engines": { 922 | "node": ">= 0.8" 923 | } 924 | } 925 | }, 926 | "dependencies": { 927 | "abbrev": { 928 | "version": "1.1.1", 929 | "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", 930 | "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" 931 | }, 932 | "accepts": { 933 | "version": "1.3.8", 934 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", 935 | "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", 936 | "requires": { 937 | "mime-types": "~2.1.34", 938 | "negotiator": "0.6.3" 939 | } 940 | }, 941 | "anymatch": { 942 | "version": "3.1.2", 943 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", 944 | "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", 945 | "requires": { 946 | "normalize-path": "^3.0.0", 947 | "picomatch": "^2.0.4" 948 | } 949 | }, 950 | "array-flatten": { 951 | "version": "1.1.1", 952 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", 953 | "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" 954 | }, 955 | "balanced-match": { 956 | "version": "1.0.2", 957 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 958 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" 959 | }, 960 | "binary-extensions": { 961 | "version": "2.2.0", 962 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", 963 | "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" 964 | }, 965 | "body-parser": { 966 | "version": "1.20.0", 967 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", 968 | "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", 969 | "requires": { 970 | "bytes": "3.1.2", 971 | "content-type": "~1.0.4", 972 | "debug": "2.6.9", 973 | "depd": "2.0.0", 974 | "destroy": "1.2.0", 975 | "http-errors": "2.0.0", 976 | "iconv-lite": "0.4.24", 977 | "on-finished": "2.4.1", 978 | "qs": "6.10.3", 979 | "raw-body": "2.5.1", 980 | "type-is": "~1.6.18", 981 | "unpipe": "1.0.0" 982 | } 983 | }, 984 | "brace-expansion": { 985 | "version": "1.1.11", 986 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 987 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 988 | "requires": { 989 | "balanced-match": "^1.0.0", 990 | "concat-map": "0.0.1" 991 | } 992 | }, 993 | "braces": { 994 | "version": "3.0.2", 995 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 996 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 997 | "requires": { 998 | "fill-range": "^7.0.1" 999 | } 1000 | }, 1001 | "bytes": { 1002 | "version": "3.1.2", 1003 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", 1004 | "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" 1005 | }, 1006 | "call-bind": { 1007 | "version": "1.0.2", 1008 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", 1009 | "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", 1010 | "requires": { 1011 | "function-bind": "^1.1.1", 1012 | "get-intrinsic": "^1.0.2" 1013 | } 1014 | }, 1015 | "chokidar": { 1016 | "version": "3.5.3", 1017 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", 1018 | "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", 1019 | "requires": { 1020 | "anymatch": "~3.1.2", 1021 | "braces": "~3.0.2", 1022 | "fsevents": "~2.3.2", 1023 | "glob-parent": "~5.1.2", 1024 | "is-binary-path": "~2.1.0", 1025 | "is-glob": "~4.0.1", 1026 | "normalize-path": "~3.0.0", 1027 | "readdirp": "~3.6.0" 1028 | } 1029 | }, 1030 | "concat-map": { 1031 | "version": "0.0.1", 1032 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 1033 | "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" 1034 | }, 1035 | "content-disposition": { 1036 | "version": "0.5.4", 1037 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", 1038 | "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", 1039 | "requires": { 1040 | "safe-buffer": "5.2.1" 1041 | } 1042 | }, 1043 | "content-type": { 1044 | "version": "1.0.4", 1045 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", 1046 | "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" 1047 | }, 1048 | "cookie": { 1049 | "version": "0.5.0", 1050 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", 1051 | "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==" 1052 | }, 1053 | "cookie-signature": { 1054 | "version": "1.0.6", 1055 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", 1056 | "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" 1057 | }, 1058 | "debug": { 1059 | "version": "2.6.9", 1060 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 1061 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 1062 | "requires": { 1063 | "ms": "2.0.0" 1064 | } 1065 | }, 1066 | "depd": { 1067 | "version": "2.0.0", 1068 | "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", 1069 | "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" 1070 | }, 1071 | "destroy": { 1072 | "version": "1.2.0", 1073 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", 1074 | "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" 1075 | }, 1076 | "ee-first": { 1077 | "version": "1.1.1", 1078 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 1079 | "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" 1080 | }, 1081 | "encodeurl": { 1082 | "version": "1.0.2", 1083 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", 1084 | "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" 1085 | }, 1086 | "escape-html": { 1087 | "version": "1.0.3", 1088 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", 1089 | "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" 1090 | }, 1091 | "etag": { 1092 | "version": "1.8.1", 1093 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", 1094 | "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" 1095 | }, 1096 | "express": { 1097 | "version": "4.18.1", 1098 | "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz", 1099 | "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==", 1100 | "requires": { 1101 | "accepts": "~1.3.8", 1102 | "array-flatten": "1.1.1", 1103 | "body-parser": "1.20.0", 1104 | "content-disposition": "0.5.4", 1105 | "content-type": "~1.0.4", 1106 | "cookie": "0.5.0", 1107 | "cookie-signature": "1.0.6", 1108 | "debug": "2.6.9", 1109 | "depd": "2.0.0", 1110 | "encodeurl": "~1.0.2", 1111 | "escape-html": "~1.0.3", 1112 | "etag": "~1.8.1", 1113 | "finalhandler": "1.2.0", 1114 | "fresh": "0.5.2", 1115 | "http-errors": "2.0.0", 1116 | "merge-descriptors": "1.0.1", 1117 | "methods": "~1.1.2", 1118 | "on-finished": "2.4.1", 1119 | "parseurl": "~1.3.3", 1120 | "path-to-regexp": "0.1.7", 1121 | "proxy-addr": "~2.0.7", 1122 | "qs": "6.10.3", 1123 | "range-parser": "~1.2.1", 1124 | "safe-buffer": "5.2.1", 1125 | "send": "0.18.0", 1126 | "serve-static": "1.15.0", 1127 | "setprototypeof": "1.2.0", 1128 | "statuses": "2.0.1", 1129 | "type-is": "~1.6.18", 1130 | "utils-merge": "1.0.1", 1131 | "vary": "~1.1.2" 1132 | } 1133 | }, 1134 | "fill-range": { 1135 | "version": "7.0.1", 1136 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 1137 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 1138 | "requires": { 1139 | "to-regex-range": "^5.0.1" 1140 | } 1141 | }, 1142 | "finalhandler": { 1143 | "version": "1.2.0", 1144 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", 1145 | "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", 1146 | "requires": { 1147 | "debug": "2.6.9", 1148 | "encodeurl": "~1.0.2", 1149 | "escape-html": "~1.0.3", 1150 | "on-finished": "2.4.1", 1151 | "parseurl": "~1.3.3", 1152 | "statuses": "2.0.1", 1153 | "unpipe": "~1.0.0" 1154 | } 1155 | }, 1156 | "forwarded": { 1157 | "version": "0.2.0", 1158 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", 1159 | "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" 1160 | }, 1161 | "fresh": { 1162 | "version": "0.5.2", 1163 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", 1164 | "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" 1165 | }, 1166 | "fsevents": { 1167 | "version": "2.3.2", 1168 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", 1169 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", 1170 | "optional": true 1171 | }, 1172 | "function-bind": { 1173 | "version": "1.1.1", 1174 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 1175 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" 1176 | }, 1177 | "get-intrinsic": { 1178 | "version": "1.1.2", 1179 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", 1180 | "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", 1181 | "requires": { 1182 | "function-bind": "^1.1.1", 1183 | "has": "^1.0.3", 1184 | "has-symbols": "^1.0.3" 1185 | } 1186 | }, 1187 | "glob-parent": { 1188 | "version": "5.1.2", 1189 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 1190 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 1191 | "requires": { 1192 | "is-glob": "^4.0.1" 1193 | } 1194 | }, 1195 | "has": { 1196 | "version": "1.0.3", 1197 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 1198 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 1199 | "requires": { 1200 | "function-bind": "^1.1.1" 1201 | } 1202 | }, 1203 | "has-flag": { 1204 | "version": "3.0.0", 1205 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 1206 | "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" 1207 | }, 1208 | "has-symbols": { 1209 | "version": "1.0.3", 1210 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", 1211 | "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" 1212 | }, 1213 | "http-errors": { 1214 | "version": "2.0.0", 1215 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", 1216 | "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", 1217 | "requires": { 1218 | "depd": "2.0.0", 1219 | "inherits": "2.0.4", 1220 | "setprototypeof": "1.2.0", 1221 | "statuses": "2.0.1", 1222 | "toidentifier": "1.0.1" 1223 | } 1224 | }, 1225 | "iconv-lite": { 1226 | "version": "0.4.24", 1227 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 1228 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 1229 | "requires": { 1230 | "safer-buffer": ">= 2.1.2 < 3" 1231 | } 1232 | }, 1233 | "ignore-by-default": { 1234 | "version": "1.0.1", 1235 | "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", 1236 | "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==" 1237 | }, 1238 | "inherits": { 1239 | "version": "2.0.4", 1240 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 1241 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 1242 | }, 1243 | "ipaddr.js": { 1244 | "version": "1.9.1", 1245 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", 1246 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" 1247 | }, 1248 | "is-binary-path": { 1249 | "version": "2.1.0", 1250 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 1251 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 1252 | "requires": { 1253 | "binary-extensions": "^2.0.0" 1254 | } 1255 | }, 1256 | "is-extglob": { 1257 | "version": "2.1.1", 1258 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 1259 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" 1260 | }, 1261 | "is-glob": { 1262 | "version": "4.0.3", 1263 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 1264 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 1265 | "requires": { 1266 | "is-extglob": "^2.1.1" 1267 | } 1268 | }, 1269 | "is-number": { 1270 | "version": "7.0.0", 1271 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 1272 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" 1273 | }, 1274 | "media-typer": { 1275 | "version": "0.3.0", 1276 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", 1277 | "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==" 1278 | }, 1279 | "merge-descriptors": { 1280 | "version": "1.0.1", 1281 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", 1282 | "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" 1283 | }, 1284 | "methods": { 1285 | "version": "1.1.2", 1286 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", 1287 | "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==" 1288 | }, 1289 | "mime": { 1290 | "version": "1.6.0", 1291 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", 1292 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" 1293 | }, 1294 | "mime-db": { 1295 | "version": "1.52.0", 1296 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", 1297 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" 1298 | }, 1299 | "mime-types": { 1300 | "version": "2.1.35", 1301 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", 1302 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", 1303 | "requires": { 1304 | "mime-db": "1.52.0" 1305 | } 1306 | }, 1307 | "minimatch": { 1308 | "version": "3.1.2", 1309 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 1310 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 1311 | "requires": { 1312 | "brace-expansion": "^1.1.7" 1313 | } 1314 | }, 1315 | "ms": { 1316 | "version": "2.0.0", 1317 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 1318 | "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" 1319 | }, 1320 | "negotiator": { 1321 | "version": "0.6.3", 1322 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", 1323 | "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" 1324 | }, 1325 | "nodemon": { 1326 | "version": "2.0.19", 1327 | "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.19.tgz", 1328 | "integrity": "sha512-4pv1f2bMDj0Eeg/MhGqxrtveeQ5/G/UVe9iO6uTZzjnRluSA4PVWf8CW99LUPwGB3eNIA7zUFoP77YuI7hOc0A==", 1329 | "requires": { 1330 | "chokidar": "^3.5.2", 1331 | "debug": "^3.2.7", 1332 | "ignore-by-default": "^1.0.1", 1333 | "minimatch": "^3.0.4", 1334 | "pstree.remy": "^1.1.8", 1335 | "semver": "^5.7.1", 1336 | "simple-update-notifier": "^1.0.7", 1337 | "supports-color": "^5.5.0", 1338 | "touch": "^3.1.0", 1339 | "undefsafe": "^2.0.5" 1340 | }, 1341 | "dependencies": { 1342 | "debug": { 1343 | "version": "3.2.7", 1344 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", 1345 | "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", 1346 | "requires": { 1347 | "ms": "^2.1.1" 1348 | } 1349 | }, 1350 | "ms": { 1351 | "version": "2.1.3", 1352 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 1353 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" 1354 | } 1355 | } 1356 | }, 1357 | "nopt": { 1358 | "version": "1.0.10", 1359 | "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", 1360 | "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", 1361 | "requires": { 1362 | "abbrev": "1" 1363 | } 1364 | }, 1365 | "normalize-path": { 1366 | "version": "3.0.0", 1367 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 1368 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" 1369 | }, 1370 | "object-inspect": { 1371 | "version": "1.12.2", 1372 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", 1373 | "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" 1374 | }, 1375 | "on-finished": { 1376 | "version": "2.4.1", 1377 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", 1378 | "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", 1379 | "requires": { 1380 | "ee-first": "1.1.1" 1381 | } 1382 | }, 1383 | "parseurl": { 1384 | "version": "1.3.3", 1385 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", 1386 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" 1387 | }, 1388 | "path-to-regexp": { 1389 | "version": "0.1.7", 1390 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", 1391 | "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" 1392 | }, 1393 | "picomatch": { 1394 | "version": "2.3.1", 1395 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 1396 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" 1397 | }, 1398 | "proxy-addr": { 1399 | "version": "2.0.7", 1400 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", 1401 | "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", 1402 | "requires": { 1403 | "forwarded": "0.2.0", 1404 | "ipaddr.js": "1.9.1" 1405 | } 1406 | }, 1407 | "pstree.remy": { 1408 | "version": "1.1.8", 1409 | "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", 1410 | "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==" 1411 | }, 1412 | "qs": { 1413 | "version": "6.10.3", 1414 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", 1415 | "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", 1416 | "requires": { 1417 | "side-channel": "^1.0.4" 1418 | } 1419 | }, 1420 | "range-parser": { 1421 | "version": "1.2.1", 1422 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", 1423 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" 1424 | }, 1425 | "raw-body": { 1426 | "version": "2.5.1", 1427 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", 1428 | "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", 1429 | "requires": { 1430 | "bytes": "3.1.2", 1431 | "http-errors": "2.0.0", 1432 | "iconv-lite": "0.4.24", 1433 | "unpipe": "1.0.0" 1434 | } 1435 | }, 1436 | "readdirp": { 1437 | "version": "3.6.0", 1438 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", 1439 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", 1440 | "requires": { 1441 | "picomatch": "^2.2.1" 1442 | } 1443 | }, 1444 | "safe-buffer": { 1445 | "version": "5.2.1", 1446 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 1447 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" 1448 | }, 1449 | "safer-buffer": { 1450 | "version": "2.1.2", 1451 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 1452 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 1453 | }, 1454 | "semver": { 1455 | "version": "5.7.1", 1456 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", 1457 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" 1458 | }, 1459 | "send": { 1460 | "version": "0.18.0", 1461 | "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", 1462 | "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", 1463 | "requires": { 1464 | "debug": "2.6.9", 1465 | "depd": "2.0.0", 1466 | "destroy": "1.2.0", 1467 | "encodeurl": "~1.0.2", 1468 | "escape-html": "~1.0.3", 1469 | "etag": "~1.8.1", 1470 | "fresh": "0.5.2", 1471 | "http-errors": "2.0.0", 1472 | "mime": "1.6.0", 1473 | "ms": "2.1.3", 1474 | "on-finished": "2.4.1", 1475 | "range-parser": "~1.2.1", 1476 | "statuses": "2.0.1" 1477 | }, 1478 | "dependencies": { 1479 | "ms": { 1480 | "version": "2.1.3", 1481 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 1482 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" 1483 | } 1484 | } 1485 | }, 1486 | "serve-static": { 1487 | "version": "1.15.0", 1488 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", 1489 | "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", 1490 | "requires": { 1491 | "encodeurl": "~1.0.2", 1492 | "escape-html": "~1.0.3", 1493 | "parseurl": "~1.3.3", 1494 | "send": "0.18.0" 1495 | } 1496 | }, 1497 | "setprototypeof": { 1498 | "version": "1.2.0", 1499 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", 1500 | "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" 1501 | }, 1502 | "side-channel": { 1503 | "version": "1.0.4", 1504 | "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", 1505 | "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", 1506 | "requires": { 1507 | "call-bind": "^1.0.0", 1508 | "get-intrinsic": "^1.0.2", 1509 | "object-inspect": "^1.9.0" 1510 | } 1511 | }, 1512 | "simple-update-notifier": { 1513 | "version": "1.0.7", 1514 | "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.0.7.tgz", 1515 | "integrity": "sha512-BBKgR84BJQJm6WjWFMHgLVuo61FBDSj1z/xSFUIozqO6wO7ii0JxCqlIud7Enr/+LhlbNI0whErq96P2qHNWew==", 1516 | "requires": { 1517 | "semver": "~7.0.0" 1518 | }, 1519 | "dependencies": { 1520 | "semver": { 1521 | "version": "7.0.0", 1522 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", 1523 | "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==" 1524 | } 1525 | } 1526 | }, 1527 | "statuses": { 1528 | "version": "2.0.1", 1529 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", 1530 | "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" 1531 | }, 1532 | "supports-color": { 1533 | "version": "5.5.0", 1534 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 1535 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 1536 | "requires": { 1537 | "has-flag": "^3.0.0" 1538 | } 1539 | }, 1540 | "to-regex-range": { 1541 | "version": "5.0.1", 1542 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 1543 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 1544 | "requires": { 1545 | "is-number": "^7.0.0" 1546 | } 1547 | }, 1548 | "toidentifier": { 1549 | "version": "1.0.1", 1550 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", 1551 | "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" 1552 | }, 1553 | "touch": { 1554 | "version": "3.1.0", 1555 | "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", 1556 | "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", 1557 | "requires": { 1558 | "nopt": "~1.0.10" 1559 | } 1560 | }, 1561 | "type-is": { 1562 | "version": "1.6.18", 1563 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", 1564 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", 1565 | "requires": { 1566 | "media-typer": "0.3.0", 1567 | "mime-types": "~2.1.24" 1568 | } 1569 | }, 1570 | "undefsafe": { 1571 | "version": "2.0.5", 1572 | "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", 1573 | "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==" 1574 | }, 1575 | "unpipe": { 1576 | "version": "1.0.0", 1577 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", 1578 | "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" 1579 | }, 1580 | "utils-merge": { 1581 | "version": "1.0.1", 1582 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", 1583 | "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==" 1584 | }, 1585 | "vary": { 1586 | "version": "1.1.2", 1587 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", 1588 | "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==" 1589 | } 1590 | } 1591 | } 1592 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "read-write-demo", 3 | "version": "1.0.0", 4 | "description": "best practice for use of fs module in node js", 5 | "main": "app.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1", 8 | "dev": "nodemon app.js" 9 | }, 10 | "author": "Axit", 11 | "license": "ISC", 12 | "dependencies": { 13 | "express": "^4.18.1", 14 | "nodemon": "^2.0.19" 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /routes/index.js: -------------------------------------------------------------------------------- 1 | const express = require('express'); 2 | const router = express.Router(); 3 | 4 | const student = require('./student') 5 | 6 | router.use('/students',student) 7 | 8 | module.exports = router 9 | -------------------------------------------------------------------------------- /routes/student.js: -------------------------------------------------------------------------------- 1 | const express = require('express'); 2 | const router = express.Router(); 3 | const fs = require('fs'); 4 | 5 | // get all students data 6 | router.get('/', async (req, res) => { 7 | try { 8 | const data = await readFilePromise('data/student.json', 'utf8') 9 | const students = JSON.parse(data) 10 | res.status(200).json({students} ) 11 | }catch (e) { 12 | console.log('error',e) 13 | res.status(500).send('server error') 14 | } 15 | }) 16 | 17 | router.post('/', async (req, res) => { 18 | try { 19 | const { student } = req.body 20 | const data = await readFilePromise('data/student.json', 'utf8') 21 | let students = JSON.parse(data) 22 | let lastStudent = students[students.length - 1] 23 | let lastStudentId = lastStudent.ID 24 | let newStudentId = +lastStudentId + 1 25 | const newStudent = {} 26 | newStudent.ID = newStudentId 27 | newStudent.Name = student.Name 28 | newStudent.Gender = student.Gender 29 | newStudent.Class = student.Class 30 | newStudent.Seat = student.Seat 31 | newStudent.Strength = student.Strength 32 | students.push(newStudent) 33 | students = JSON.stringify(students) 34 | const writeFile = await writeFilePromise('data/student.json',students) 35 | if (writeFile === true) { 36 | res.status(200).json({message: 'student successfully added',students} ) 37 | }else{ 38 | res.status(200).json({message: 'failed to add student'} ) 39 | } 40 | } catch (e) { 41 | res.status(500).json({ error: e.message }) 42 | } 43 | }) 44 | 45 | // get student data By Id 46 | router.get('/:id', async (req, res) => { 47 | try { 48 | const id = req.params.id 49 | const data = await readFilePromise('data/student.json', 'utf8') 50 | const students = JSON.parse(data) 51 | const student = students.find(student => student.ID === id) 52 | res.status(200).json({student} ) 53 | }catch (e) { 54 | res.status(500).json({ error: e.message }) 55 | } 56 | }) 57 | 58 | // get student data By Id and update 59 | router.post('/:id', async (req, res) => { 60 | try { 61 | const id = req.params.id 62 | const newStudent = req.body.student 63 | const data = await readFilePromise('data/student.json', 'utf8') 64 | let students = JSON.parse(data) 65 | const student = students.find(student => student.ID === id) 66 | if(!student) { 67 | return res.status(404).send('student not found') 68 | } 69 | student.Name = newStudent.Name 70 | student.Gender = newStudent.Gender 71 | student.Color = newStudent.Color 72 | student.Eyes = newStudent.Eyes 73 | const indexOfStudent = students.findIndex(student => student.ID === id) 74 | students.splice(indexOfStudent, 1, student); 75 | students = JSON.stringify(students) 76 | const writeFile = await writeFilePromise('data/student.json',students) 77 | if (writeFile === true) { 78 | res.status(200).json({message: 'student successfully updated',student} ) 79 | }else{ 80 | res.status(200).json({message: 'failed to update student'} ) 81 | } 82 | }catch (e) { 83 | console.log('error',e) 84 | res.status(500).json({ error: e.message }) 85 | } 86 | }) 87 | 88 | router.delete('/:id', async (req, res) => { 89 | try { 90 | const id = req.params.id 91 | const data = await readFilePromise('./data/student.json', 'utf8') 92 | let students = JSON.parse(data) 93 | const student = await students.find(student => student.id === id) 94 | if (!student) { 95 | return res.status(404).send('student not found') 96 | } 97 | const indexOfStudent = students.findIndex(student => student.ID === id) 98 | students.splice(indexOfStudent, 1) 99 | students = JSON.stringify(students) 100 | const writeFile = await writeFilePromise('./data/student.json',students) 101 | if (writeFile === true) { 102 | res.status(200).json({message: 'student data successfully deleted',student} ) 103 | }else{ 104 | res.status(200).json({message: 'failed to delete student data'} ) 105 | } 106 | } catch (e) { 107 | res.status(500).json({ error: e.message }) 108 | } 109 | } 110 | ) 111 | 112 | // converting callback function to a promises 113 | const readFilePromise = (fileName,encoding) => { 114 | return new Promise((resolve, reject) => { 115 | fs.readFile(fileName, encoding, (err, data) => { 116 | if (err) { 117 | reject(err); 118 | } else { 119 | resolve(data); 120 | } 121 | }) 122 | }) 123 | } 124 | 125 | // converting callback function to a promises 126 | const writeFilePromise = (fileName,content) => { 127 | return new Promise((resolve, reject) => { 128 | fs.writeFile(fileName, content, (err) => { 129 | if (err) { 130 | reject(err); 131 | } else { 132 | resolve(true); 133 | } 134 | }) 135 | }) 136 | } 137 | 138 | module.exports = router 139 | -------------------------------------------------------------------------------- /utils/errrorHandler.js: -------------------------------------------------------------------------------- 1 | exports.errorHandler = (req, res, next) => { 2 | return res.status(404).json({message: 'could not found requested url'}) 3 | } 4 | --------------------------------------------------------------------------------