trilium/src/tools/generate_document.js

95 lines
2.9 KiB
JavaScript
Raw Normal View History

2019-12-01 16:19:16 +08:00
/**
* Usage: node src/tools/generate_document.js 1000
* will create 1000 new notes and some clones into a current document.db
*/
require('../entities/entity_constructor');
const sqlInit = require('../services/sql_init');
const noteService = require('../services/notes');
const attributeService = require('../services/attributes');
const cls = require('../services/cls');
const cloningService = require('../services/cloning');
const repository = require('../services/repository');
const noteRevisionService = require('../services/note_revisions');
2019-12-01 16:19:16 +08:00
const loremIpsum = require('lorem-ipsum').loremIpsum;
2019-12-01 16:19:16 +08:00
const noteCount = parseInt(process.argv[2]);
2019-12-01 16:19:16 +08:00
if (!noteCount) {
console.error(`Please enter number of notes as program parameter.`);
process.exit(1);
}
const notes = ['root'];
function getRandomNoteId() {
const index = Math.floor(Math.random() * notes.length);
return notes[index];
}
async function start() {
for (let i = 0; i < noteCount; i++) {
const title = loremIpsum({
count: 1,
units: 'sentences',
sentenceLowerBound: 1,
sentenceUpperBound: 10
});
const paragraphCount = Math.floor(Math.random() * Math.random() * 100);
const content = loremIpsum({
count: paragraphCount,
units: 'paragraphs',
sentenceLowerBound: 1,
sentenceUpperBound: 15,
paragraphLowerBound: 3,
paragraphUpperBound: 10,
format: 'html'
});
2019-11-16 18:09:52 +08:00
const {note} = await noteService.createNewNote({
parentNoteId: getRandomNoteId(),
2019-11-16 18:09:52 +08:00
title,
content,
type: 'text'
});
console.log(`Created note ${i}: ${title}`);
if (Math.random() < 0.04) {
const noteIdToClone = note.noteId;
const parentNoteId = getRandomNoteId();
const prefix = Math.random() > 0.8 ? "prefix" : null;
const result = await cloningService.cloneNoteToParent(noteIdToClone, parentNoteId, prefix);
console.log(`Cloning ${i}:`, result.success ? "succeeded" : "FAILED");
}
// does not have to be for the current note
await attributeService.createAttribute({
noteId: getRandomNoteId(),
type: 'label',
name: 'label',
value: 'value',
isInheritable: Math.random() > 0.1 // 10% are inheritable
});
await attributeService.createAttribute({
noteId: getRandomNoteId(),
type: 'relation',
name: 'relation',
value: getRandomNoteId(),
isInheritable: Math.random() > 0.1 // 10% are inheritable
});
noteRevisionService.createNoteRevision(await repository.getNote(getRandomNoteId()));
notes.push(note.noteId);
}
process.exit(0);
}
sqlInit.dbReady.then(cls.wrap(start));