mirror of
https://github.com/TriliumNext/Notes.git
synced 2025-07-27 18:12:29 +08:00
96 lines
2.8 KiB
TypeScript
96 lines
2.8 KiB
TypeScript
/**
|
|
* Usage: tsx ./generate_document.ts 1000
|
|
* will create 1000 new notes and some clones into the current document.db
|
|
*/
|
|
|
|
import sqlInit from "../src/services/sql_init.js";
|
|
import noteService from "../src/services/notes.js";
|
|
import attributeService from "../src/services/attributes.js";
|
|
import cls from "../src/services/cls.js";
|
|
import cloningService from "../src/services/cloning.js";
|
|
import loremIpsum from "lorem-ipsum";
|
|
import "../src/becca/entity_constructor.js";
|
|
|
|
const noteCount = parseInt(process.argv[2]);
|
|
|
|
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.loremIpsum({
|
|
count: 1,
|
|
units: "sentences",
|
|
sentenceLowerBound: 1,
|
|
sentenceUpperBound: 10
|
|
});
|
|
|
|
const paragraphCount = Math.floor(Math.random() * Math.random() * 100);
|
|
const content = loremIpsum.loremIpsum({
|
|
count: paragraphCount,
|
|
units: "paragraphs",
|
|
sentenceLowerBound: 1,
|
|
sentenceUpperBound: 15,
|
|
paragraphLowerBound: 3,
|
|
paragraphUpperBound: 10,
|
|
format: "html"
|
|
});
|
|
|
|
const { note } = noteService.createNewNote({
|
|
parentNoteId: getRandomNoteId(),
|
|
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" : "";
|
|
|
|
const result = await cloningService.cloneNoteToBranch(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
|
|
});
|
|
|
|
note.saveRevision();
|
|
|
|
notes.push(note.noteId);
|
|
}
|
|
|
|
process.exit(0);
|
|
}
|
|
|
|
// @TriliumNextTODO sqlInit.dbReady never seems to resolve so program hangs
|
|
// see https://github.com/TriliumNext/Notes/issues/1020
|
|
sqlInit.dbReady.then(cls.wrap(start)).catch((err) => console.error(err));
|