@zspk/ts-esm-generator
Version:
Генератор определений типов TypeScript для пользовательских элементов управления UI5, реализованных в TypeScript.
265 lines • 13.4 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.createJSDoc = exports.buildJSDocStringFromLines = void 0;
const typescript_1 = __importDefault(require("typescript"));
function buildJSDocStringFromLines(lines) {
if (lines.length > 0) {
return "\n * " + lines.join("\n * ") + "\n ";
}
return "";
}
exports.buildJSDocStringFromLines = buildJSDocStringFromLines;
function createJSDoc(node, jsDoc, lines) {
lines = lines || [];
const tags = [];
if (jsDoc) {
if (jsDoc.comment && jsDoc.comment.length) {
lines.push(...jsDoc.comment);
}
}
if (jsDoc.tagSince && jsDoc.tagSince.length) {
tags.push("@since " + jsDoc.tagSince);
}
if (jsDoc.tagName && jsDoc.tagName.length) {
tags.push("@name " + jsDoc.tagName);
}
if (jsDoc.tagNamespace && jsDoc.tagNamespace.length) {
tags.push("@namespace " + jsDoc.tagNamespace);
}
if (jsDoc.tagAlias && jsDoc.tagAlias.length) {
tags.push("@alias " + jsDoc.tagAlias);
}
if (jsDoc.tagReadonly && jsDoc.tagReadonly.length) {
tags.push("@readonly " + jsDoc.tagReadonly);
}
if (jsDoc.tagExperimental && jsDoc.tagExperimental.length) {
tags.push("@experimental " + jsDoc.tagExperimental);
}
if (jsDoc.tagDeprecation && jsDoc.tagDeprecation.length) {
tags.push("@deprecated " + jsDoc.tagDeprecation);
}
if (tags.length) {
lines.push("", ...tags);
}
if (lines.length) {
typescript_1.default.addSyntheticLeadingComment(node, typescript_1.default.SyntaxKind.SingleLineCommentTrivia, "");
typescript_1.default.addSyntheticLeadingComment(node, typescript_1.default.SyntaxKind.SingleLineCommentTrivia, "");
typescript_1.default.addSyntheticLeadingComment(node, typescript_1.default.SyntaxKind.MultiLineCommentTrivia, "*" + buildJSDocStringFromLines(lines), true);
}
}
exports.createJSDoc = createJSDoc;
function addJSDoc(oClassInfo) {
oClassInfo.generatedJSDoc = {};
function isEmpty(obj) {
if (!obj) {
return true;
}
for (const n in obj) {
if (Object.prototype.hasOwnProperty.call(obj, n)) {
return false;
}
}
return true;
}
// for (const n in oClassInfo.properties) {
// const info = oClassInfo.properties[n];
// // if (info.visibility === "hidden") {
// // continue;
// // }
// newJSDoc(
// MethodType.PropertyGet,
// n,
// info,
// [],
// [info.defaultValue !== null ? "Значение по умолчанию: " + JSON.stringify(info.defaultValue) : "", "@returns `" + info.type + "`"]
// );
// newJSDoc(
// MethodType.PropertySet,
// n,
// info,
// [],
// [
// generateParamTag(n, "новое значение свойства `" + n + "`. Значение `null` or `undefined` восстановит значение по умолчанию.", info.defaultValue as string),
// "@returns ссылка на этот объект `this`"
// ]
// );
// if (info.bindable) {
// newJSDoc(MethodType.PropertyBind, n, info, [], ["@param bindingInfo информация о привязке.", "@returns ссылка на этот объект `this`"]);
// newJSDoc(MethodType.PropertyUnbind, n, info, [], ["@returns ссылка на этот объект `this`"]);
// }
// }
// for (const n in oClassInfo.aggregations) {
// const info = oClassInfo.aggregations[n];
// // if (info.visibility === "hidden") {
// // continue;
// // }
// newJSDoc(MethodType.AggregationGet, n, info, [], ["@returns `" + info.type + "`"]);
// if (info.cardinality == "0..n") {
// const n1 = info.singularName;
// newJSDoc(
// MethodType.AggregationInsert,
// n,
// info,
// [],
// [
// "@param " + n1 + " вставить `" + info.type + "`. Если `null` или `undefined`, то ничего не будет вставлено.",
// "@param index Позиция, в которую должен быть вставлен `" + n1 + "`.",
// " Отрицительное значение вставит `" + n1 + "` в позицию 0.",
// " Если индекс больше текущего размера аграгации, то `" + n1 + "` будет вставлен в конец.",
// "@returns ссылка на этот объект `this`"
// ]
// );
// newJSDoc(
// MethodType.AggregationAdd,
// n,
// info,
// [],
// ["@param " + n1 + " новый `" + info.type + "` для добавления. Если `null` или `undefined`, то ничего не будет вставлено.", "@returns ссылка на этот объект `this`"]
// );
// newJSDoc(
// MethodType.AggregationRemove,
// n,
// info,
// [],
// ["@param " + n1 + " удаляемый `" + info.type + "` или индекс или ID.", "@returns удаленный `" + n1 + "` или `null`"]
// );
// newJSDoc(MethodType.AggregationRemoveAll, n, info, [], ["@returns список удаленных элементов"]);
// newJSDoc(
// MethodType.AggregationIndexOf,
// n,
// info,
// ["Проверяет входит ли `" + info.type + "` в агрегацию и возвращает его индекс если найдено, иначе -1."],
// ["@param " + n1 + " объект `" + info.type + "`, чей индекс нужно найти.", "@returns найденный индекс или -1."]
// );
// } else {
// newJSDoc(MethodType.AggregationSet, n, info, [], ["@param " + n + " объект `" + info.type + "` для установки.", "@returns ссылка на этот объект `this`"]);
// }
// newJSDoc(MethodType.AggregationDestroy, n, info, [], ["@returns ссылка на этот объект `this`"]);
// if (info.bindable) {
// newJSDoc(MethodType.AggregationBind, n, info, [], ["@returns ссылка на этот объект `this`"]);
// newJSDoc(MethodType.AggregationUnbind, n, info, [], ["@returns ссылка на этот объект `this`"]);
// }
// }
// for (const n in oClassInfo.associations) {
// const info = oClassInfo.associations[n];
// // if (info.visibility === "hidden") {
// // continue;
// // }
// newJSDoc(
// MethodType.AssociationGet,
// n,
// info,
// [
// info.cardinality === "0..n"
// ? "возвращает массив идентификаторов элементов, которые являются текущими целями ассоциации `" + n + "`."
// : "идентификатор элемента, который является текущей целью ассоциации `" + n + "`, или `null`."
// ],
// []
// );
// if (info.cardinality === "0..n") {
// const n1 = info.singularName;
// newJSDoc(
// MethodType.AssociationAdd,
// n,
// info,
// [],
// ["@param " + n1 + " добавить `" + info.type + "`. Если `null` или `undefined`, то ничего не будет вставлено", "@returns ссылка на этот объект `this`"]
// );
// newJSDoc(
// MethodType.AssociationRemove,
// n,
// info,
// [],
// ["@param " + n1 + " объект `" + info.type + "` для удаления или индекс или ID", "@returns The removed " + n1 + ' or "null"']
// );
// newJSDoc(MethodType.AssociationRemoveAll, n, info, [], ["@returns список удаленных элементов"]);
// } else {
// newJSDoc(
// MethodType.AssociationSet,
// n,
// info,
// [],
// [
// "@param " + n + " идентификатор элемента, который становится новой целью этого ассоциации; альтернативно можно указать экземпляр элемента.",
// "@returns ссылка на этот объект `this`"
// ]
// );
// }
// }
// for (const n in oClassInfo.events) {
// const info = oClassInfo.events[n];
// newJSDoc(
// MethodType.EventAttach,
// n,
// info,
// ["Прикрепляет обработчик событий `fn` к событию `" + n + "` объекта `" + oClassInfo.name + "`."],
// [
// "При вызове контекст обработчика событий (его `this`) будет привязан к `listener`, если он указан,",
// "в противном случае это будет связано с этим объектом`" + oClassInfo.name + "`.",
// "",
// "@param fn функция, вызываемая при возникновении события",
// "@param listener контекст, с помощью которого будет вызов обработчика событий. По умолчанию это сам объект `" + oClassInfo.name + "`",
// "",
// "@returns ссылка на этот объект `this`"
// ]
// );
// newJSDoc(
// MethodType.EventAttachWithData,
// n,
// info,
// ["Прикрепляет обработчик событий `fn` к событию `" + n + "` объекта `" + oClassInfo.name + "`."],
// [
// "При вызове контекст обработчика событий (его `this`) будет привязан к `listener`, если он указан,",
// "в противном случае это будет связано с этим объектом`" + oClassInfo.name + "`.",
// "",
// "@param data объект полезной нагрузки, специфичный для приложения, который будет передан обработчику событий вместе с объектом события при запуске события.",
// "@param fn функция, вызываемая при возникновении события",
// "@param listener контекст, с помощью которого будет вызов обработчика событий. По умолчанию это сам объект `" + oClassInfo.name + "`",
// "",
// "@returns ссылка на этот объект `this`"
// ]
// );
// newJSDoc(
// MethodType.EventDetach,
// n,
// info,
// ["Открепляет обработчик событий `fn` к событию `" + n + "` объекта `" + oClassInfo.name + "`."],
// [
// "Передаваемая функция и объект прослушивателя должны соответствовать тем, которые используются для регистрации событий.",
// "",
// "@param fn функция, вызываемая при возникновении события",
// "@param listener контекст, с помощью которого будет вызов обработчика событий.",
// "@returns ссылка на этот объект `this`",
// info.since ? "@since " + info.since : "",
// info.deprecation ? "@deprecated " + info.deprecation : "",
// info.experimental ? "@experimental " + info.experimental : ""
// ]
// );
// const suffixLines = [];
// if (info.allowPreventDefault) {
// suffixLines.push(
// "",
// "Прослушиватели могут предотвратить действие этого события по умолчанию, вызвав метод `preventDefault` объекта события.",
// "Возвращаемое значение этого метода указывает, должно ли выполняться действие по умолчанию.",
// ""
// );
// }
// suffixLines.push("", "@param parameters параметры, передаваемые вместе с событием");
// if (!isEmpty(info.parameters)) {
// for (const pName in info.parameters) {
// suffixLines.push("@param [mParameters." + pName + "] " + (info.parameters[pName].doc || ""));
// }
// suffixLines.push("");
// }
// if (info.allowPreventDefault) {
// suffixLines.push("@returns cледует ли предотвращать действие по умолчанию");
// } else {
// suffixLines.push("@returns ссылка на этот объект `this`");
// }
// newJSDoc(MethodType.EventFire, n, info, [], suffixLines);
// }
}
//# sourceMappingURL=jsdocGenerator.js.map