0

I'm using faker to generate multiple schemas and want to combine the resolved results into one file called ./db.json not multiple files so I can use that file in json-server.

I have it currently setup to run and print out multiple files based on the amount of schemas are in the schema folder.

const path = require("path");
const fs = require("fs");
const { resolve, extend } = require("json-schema-faker");

extend("faker", () => require("@faker-js/faker"));

var schemasPath = path.join(__dirname, "./schemas");

fs.readdirSync(schemasPath).forEach((file) => {
  const name = path.parse(file).name;
  const schemas = require(`${schemasPath}/${file}`);
  resolve(schemas).then((data) => {
    fs.writeFile(`${__dirname}/${name}.json`, JSON.stringify(data), (err) => {
      if (err) {
        console.log("error = ", err.message);
      } else {
        console.log("Mock API data generated.");
      }
    });
  });
});

schema example:

const schema = {
  type: "object",
  properties: {
    users: {
      type: "array",
      minItems: 10,
      maxItems: 10,
      uniqueItems: true,
      items: {
        type: "object",
        properties: {
          id: {
            type: "integer",
            initialOffset: 1,
            autoIncrement: true,
          },
          name: {
            type: "string",
            faker: "name.findName",
          },
        },
        required: ["id", "name"],
      },
    },
  },
  required: ["users"],
};
me-me
  • 5,139
  • 13
  • 50
  • 91

1 Answers1

1

For anyone else who might run into this post here is how I solved it in the end.

const lodash = require("lodash");
const path = require("path");
const fs = require("fs");
const { faker } = require("@faker-js/faker");
const { resolve, extend } = require("json-schema-faker");

extend("faker", () => faker);

var schemaFolder = path.join(__dirname, "./schemas");
var schemas = [];

fs.readdirSync(schemaFolder).forEach((file) => {
  const schema = require(`${schemaFolder}/${file}`);
  schemas.push(schema);
});

const promises = schemas.map((file) => resolve(file));
Promise.all(promises)
  .then((data) => {
    const result = data.reduce((acc, curr) => {
      const key = Object.keys(curr);
      acc[key] = curr[key];
      return acc;
    }, {});
    writeToFile(result);
  })
  .catch((error) => console.log("error = ", error));

const writeToFile = (data) => {
  fs.writeFile(`${__dirname}/db.json`, JSON.stringify(data), (err) => {
    if (err) {
      console.log("error = ", err.message);
    } else {
      console.log("Mock data generated to file ./db.json");
    }
  });
};
me-me
  • 5,139
  • 13
  • 50
  • 91