| 34 | | 36 | |
| 35 | export const router = express.Router(); | 37 | export const router = express.Router(); |
| 36 | | 38 | |
| | 39 | router.post('/list', async (request, response) => { |
| | 40 | try { |
| | 41 | const data = []; |
| | 42 | const jsonFiles = (await fs.promises.readdir(request.user.directories.worlds, { withFileTypes: true })) |
| | 43 | .filter((file) => file.isFile() && path.extname(file.name).toLowerCase() === '.json') |
| | 44 | .sort((a, b) => a.name.localeCompare(b.name)); |
| | 45 | |
| | 46 | for (const file of jsonFiles) { |
| | 47 | try { |
| | 48 | const filePath = path.join(request.user.directories.worlds, file.name); |
| | 49 | const fileContents = await fs.promises.readFile(filePath, 'utf8'); |
| | 50 | const fileExtensions = tryParse(fileContents)?.extensions || {}; |
| | 51 | const fileData = { |
| | 52 | name: path.parse(file.name).name, |
| | 53 | extensions: _.isObjectLike(fileExtensions) ? fileExtensions : {}, |
| | 54 | }; |
| | 55 | data.push(fileData); |
| | 56 | } catch (err) { |
| | 57 | console.warn(`Error reading or parsing World Info file ${file.name}:`, err); |
| | 58 | } |
| | 59 | } |
| | 60 | |
| | 61 | return response.send(data); |
| | 62 | } catch (err) { |
| | 63 | console.error('Error reading World Info directory:', err); |
| | 64 | return response.sendStatus(500); |
| | 65 | } |
| | 66 | }); |
| | 67 | |
| 37 | router.post('/get', (request, response) => { | 68 | router.post('/get', (request, response) => { |
| 38 | if (!request.body?.name) { | 69 | if (!request.body?.name) { |
| 39 | return response.sendStatus(400); | 70 | return response.sendStatus(400); |