This was written with an open path in mind. I'll amend it later to accommodate closed paths.
This should accommodate end points and closed paths.
/*
* "Add an anchor point to a non-curved path" by Femke Blanco
* 04/05/2023
* Instructions:
* - select ONE point with the white arrow tool (A);
* - to add a point after the selected point, enter a (+) number;
* - to add a point before the selected point, enter a (-) number.
*/
var input = prompt("", "30");
var before = [];
var after = [];
var swap, i, addedPoint, array;
try {
var path1 = app.activeDocument.selection[0];
var points = path1.pathPoints;
for (var j = 0; j < points.length; j++) {
if (points[j].selected == PathPointSelection.ANCHORPOINT) {
swap = true;
i = j;
continue;
}
if (!swap) {
before.push([points[j].anchor[0], points[j].anchor[1]]);
} else {
after.push([points[j].anchor[0], points[j].anchor[1]]);
}
}
var j;
if (input > 0) {
if (i != points.length - 1) {
j = i + 1;
} else {
if (!path1.closed) j = i - 1, input *= -1;
else j = 0;
}
addedPoint = getAddedPoint(points[i], points[j], input);
array = before.concat(
[[points[i].anchor[0], points[i].anchor[1]], addedPoint]
);
} else {
if (i != 0) {
j = i - 1;
} else {
if (!path1.closed) j = i + 1, input *= -1;
else j = points.length - 1;
}
addedPoint = getAddedPoint(points[i], points[j], -input);
array = before.concat(
[addedPoint, [points[i].anchor[0], points[i].anchor[1]]]
);
}
array = array.concat(after);
var path2 = app.activeDocument.pathItems.add();
path2.setEntirePath(array);
if (path1.closed) path2.closed = true;
path2.selected = true;
path1.remove();
} catch (e) {
alert(e);
}
function getAddedPoint(p1, p2, h/*hypotenuse*/) {
var x1 = p1.anchor[0];
var y1 = p1.anchor[1];
var x2 = p2.anchor[0];
var y2 = p2.anchor[1];
var dx = x2 - x1;
var dy = y2 - y1;
var a = Math.atan2(dy, dx)
dx = Math.cos(a) * h;
dy = Math.sin(a) * h;
return [x1 + dx, y1 + dy];
}