Files
logseq/scripts/lib/logseq-electron-op-sim.cjs
2026-04-06 23:02:48 +08:00

110 lines
2.4 KiB
JavaScript

'use strict';
const OPERATION_ORDER = Object.freeze([
'add',
'copyPaste',
'copyPasteTreeToEmptyTarget',
'move',
'indent',
'outdent',
'delete',
'undo',
'redo',
]);
function buildOperationPlan(totalOps) {
if (!Number.isInteger(totalOps) || totalOps <= 0) {
throw new Error('totalOps must be a positive integer');
}
const plan = [];
for (let i = 0; i < totalOps; i += 1) {
plan.push(OPERATION_ORDER[i % OPERATION_ORDER.length]);
}
return plan;
}
function chooseRunnableOperation(requestedOperation, managedCount) {
switch (requestedOperation) {
case 'copyPaste':
case 'copyPasteTreeToEmptyTarget':
return managedCount >= 1 ? requestedOperation : 'add';
case 'move':
case 'indent':
case 'delete':
return managedCount >= 2 ? requestedOperation : 'add';
case 'outdent':
case 'add':
case 'undo':
case 'redo':
return requestedOperation;
default:
throw new Error(`Unsupported operation kind: ${requestedOperation}`);
}
}
function parsePositiveInteger(value, flagName) {
const parsed = Number.parseInt(value, 10);
if (!Number.isInteger(parsed) || parsed <= 0) {
throw new Error(`${flagName} must be a positive integer`);
}
return parsed;
}
function parseNonNegativeInteger(value, flagName) {
const parsed = Number.parseInt(value, 10);
if (!Number.isInteger(parsed) || parsed < 0) {
throw new Error(`${flagName} must be a non-negative integer`);
}
return parsed;
}
function parseArgs(argv) {
const result = {
ops: 200,
port: 9333,
undoRedoDelayMs: 350,
};
for (let i = 0; i < argv.length; i += 1) {
const arg = argv[i];
if (arg === '--help' || arg === '-h') {
return { ...result, help: true };
}
const next = argv[i + 1];
if (arg === '--ops') {
result.ops = parsePositiveInteger(next, '--ops');
i += 1;
continue;
}
if (arg === '--port') {
result.port = parsePositiveInteger(next, '--port');
i += 1;
continue;
}
if (arg === '--undo-redo-delay-ms') {
result.undoRedoDelayMs = parseNonNegativeInteger(next, '--undo-redo-delay-ms');
i += 1;
continue;
}
throw new Error(`Unknown argument: ${arg}`);
}
if (result.ops < 200) {
throw new Error('--ops must be at least 200');
}
return result;
}
module.exports = {
OPERATION_ORDER,
buildOperationPlan,
chooseRunnableOperation,
parseArgs,
};