@json-express/core
Version:
Zero-config JSON server with REST API, JWT authentication, HTTPS support, schema validation & search. Perfect for rapid prototyping, API mocking, and development.
89 lines (69 loc) • 2.55 kB
JavaScript
import { readdirSync, readFileSync } from 'fs'
import { join } from 'path'
import { updateConfigStore } from '../db/config-store.js'
import defaultData from '../db/data/default-data.json' with { type: 'json' }
const dirname = join(process.cwd())
const files = readdirSync(dirname)
let jsonFiles = {}
const prepareDefaultJson = async () => {
try {
const fakerModule = await import('@faker-js/faker')
const { faker } = fakerModule
function createRandomUser() {
return {
userId: faker.string.uuid(),
username: faker.internet.username(),
email: faker.internet.email(),
avatar: faker.image.avatar(),
password: faker.internet.password(),
birthdate: faker.date.birthdate(),
registeredAt: faker.date.past(),
}
}
function createMusic() {
return {
album: faker.music.album(),
artist: faker.music.artist(),
genre: faker.music.genre(),
songName: faker.music.songName(),
}
}
function createBook() {
return {
title: faker.book.title(),
author: faker.book.author(),
genre: faker.book.genre(),
series: faker.book.series(),
publisher: faker.book.publisher(),
format: faker.book.format(),
isbn: faker.commerce.isbn()
}
}
jsonFiles.users = faker.helpers.multiple(createRandomUser, { count: 10 })
jsonFiles.music = faker.helpers.multiple(createMusic, { count: 100 })
jsonFiles.book = faker.helpers.multiple(createBook, { count: 100 })
} catch (error) {
jsonFiles = defaultData
}
}
const prepare = async () => {
for (const filename of files) {
if (!filename.includes('.json') || filename.includes('package') || filename.includes('-lock')) {
await prepareDefaultJson()
return
}
const filePath = join(dirname, filename)
const fileContent = readFileSync(filePath, 'utf8')
let file = JSON.parse(fileContent)
const path = filename.replace('.json', '')
jsonFiles[path] = file
}
}
await prepare()
if (!Object.keys(jsonFiles).length) {
console.log('No json files found to serve')
process.exit(1)
}
const { config = {}, ...jsonRoutes } = jsonFiles
updateConfigStore(config)
export default jsonRoutes