blob: dc0f4317d6578624023eb4b5c10e2a52f97fc49c [file] [log] [blame]
// Generate fake content in the Sling initial content JSON format
// Using faker.js ( https://github.com/faker-js/faker )
// To run this do "npm install" and then "node index.js" to run it
const faker = require('@faker-js/faker')
const fs = require('fs');
const allTags = new Set();
for(i=0 ; i < 60; i++) {
allTags.add(faker.hacker.noun());
}
const allFilenames = new Set();
const folders = [
"News",
"Business",
"Culture",
"Music",
"Adventure",
"Travel"
]
function randomInt(max) {
return Math.floor(Math.random() * (max + 1));
}
function randomFromSet(input, maxValues) {
const result = [];
var nValues = randomInt(maxValues)
input.forEach(it => {
if(nValues-- >= 0 && Math.random() > 0.5) {
result.push(it);
}
});
return result;
}
function generatePage() {
const folder = folders[randomInt(folders.length - 1)];
const name = faker.fake("{{name.firstName}} {{name.lastName}}");
const title = `${name} ${faker.fake("on the {{hacker.noun}} of {{hacker.adjective}} '{{lorem.words(2)}}' (aka {{hacker.abbreviation}})")}`;
const filename = faker.helpers.slugify(title).toLowerCase();
allFilenames.add(filename);
return {
source: "Apache Sling's fake-content-generator",
section: folder,
folder: folder.toLowerCase(),
filename: filename,
title: `${folder} - ${title}`,
tags: randomFromSet(allTags, 5),
seeAlso: randomFromSet(allFilenames, 7),
text: `As ${name} often says, ${faker.lorem.paragraphs(randomInt(12), "<br/>\n")}`,
}
}
function mkDirIfNeeded(path, callback) {
if(!fs.existsSync(path)) {
fs.mkdirSync(path);
if(callback) {
callback(path);
}
}
}
const nFiles = 1000;
const baseOutputFolder = "./output";
function setupCategoryFolder(path, name, section) {
mkDirIfNeeded(path, path => {
// Define Sling resource properties for the created folder
const output = `${baseOutputFolder}/${name}.json`;
const props = {};
props["jcr:primaryType"] = "sling:Folder";
props["sling:resourceType"] = `samples/section`;
props["name"] = section;
fs.writeFile(output, JSON.stringify(props), err => { if(err) throw err; });
});
}
console.log(`Generating ${nFiles} fake content files under ${baseOutputFolder}`);
mkDirIfNeeded(baseOutputFolder);
for(i=0 ; i < nFiles; i++) {
const page = generatePage();
page["jcr:primaryType"] = "nt:unstructured";
page["sling:resourceType"] = `samples/article/${page.folder}`;
page["sling:resourceSuperType"] = "samples/article";
const outputFolder = `${baseOutputFolder}/${page.folder}`;
setupCategoryFolder(outputFolder, page.folder, page.section);
const output = `${outputFolder}/${page.filename}.json`;
fs.writeFile(output, JSON.stringify(page), err => { if(err) throw err; });
}