UNPKG

@alauda-fe/common

Version:

Alauda frontend team common codes.

147 lines 17.4 kB
/** * 自动折叠 managedFields 字段 * @param monacoEditor Monaco 编辑器实例 */ export function foldManagedFields(monacoEditor) { if (!monacoEditor) { return; } const model = monacoEditor.getModel(); if (!model) { return; } try { // 查找所有 managedFields 字段(只在 metadata 下的) const managedFieldsMatches = model.findMatches('^(\\s+)managedFields:', false, true, false, null, true); if (managedFieldsMatches && managedFieldsMatches.length > 0) { const foldingRanges = []; for (const match of managedFieldsMatches) { const startLine = match.range.startLineNumber; const endLine = findManagedFieldsEndLine(model, startLine); if (endLine > startLine) { foldingRanges.push({ startLineNumber: startLine, startColumn: 1, endLineNumber: endLine, endColumn: model.getLineMaxColumn(endLine), }); } } if (foldingRanges.length > 0) { // 递归折叠每个 managedFields 区域,确保每次折叠完成后再进行下一次 foldRangesSequentially(monacoEditor, foldingRanges?.reverse(), 0); } } } catch (error) { console.warn('Failed to fold managedFields:', error); } } /** * 递归折叠多个区域,确保每次折叠完成后再进行下一次 * @param monacoEditor Monaco 编辑器实例 * @param foldingRanges 折叠区域数组 * @param index 当前折叠的索引 */ async function foldRangesSequentially(monacoEditor, foldingRanges, index) { if (index >= foldingRanges.length) { return; } const range = foldingRanges[index]; monacoEditor.setSelection(range); await Promise.resolve(monacoEditor.getAction('editor.fold')?.run()); return foldRangesSequentially(monacoEditor, foldingRanges, index + 1); } /** * 查找 managedFields 字段的结束行 * @param model Monaco 编辑器模型 * @param startLine 起始行号 * @returns 结束行号 */ function findManagedFieldsEndLine(model, startLine) { const totalLines = model.getLineCount(); const startIndent = getLineIndentation(model, startLine); // 从下一行开始查找 for (let line = startLine + 1; line <= totalLines; line++) { const lineContent = model.getLineContent(line).trim(); // 跳过空行 if (!lineContent) { continue; } const currentIndent = getLineIndentation(model, line); // 如果缩进小于等于起始行,说明 managedFields 字段结束 if (currentIndent <= startIndent) { return line - 1; } } return totalLines; } /** * 获取行的缩进级别 * @param model Monaco 编辑器模型 * @param lineNumber 行号 * @returns 缩进级别(空格数) */ function getLineIndentation(model, lineNumber) { const lineContent = model.getLineContent(lineNumber); const match = lineContent.match(/^(\s*)/); return match ? match[1].length : 0; } /** * ManagedFields 自动折叠器 * 用于在内容变化时自动折叠 managedFields 字段 */ export class ManagedFieldsAutoFolder { constructor() { this.lastFoldedContent = ''; } /** * 开始监听内容变化并自动折叠 * @param editorProvider 编辑器实例提供者 * @param contentObservable 内容变化的 Observable */ startAutoFold(editorProvider, contentObservable) { this.stopAutoFold(); this.subscription = contentObservable.subscribe(() => { setTimeout(() => { const editor = editorProvider.getEditorInstance(); if (editor) { const model = editor.getModel(); if (model) { const currentContent = model.getValue(); // 只有当内容真正发生变化时才执行折叠 if (currentContent.includes('managedFields:') && currentContent !== this.lastFoldedContent) { foldManagedFields(editor); this.lastFoldedContent = currentContent; } } } }, 100); }); } /** * 停止自动折叠 */ stopAutoFold() { if (this.subscription) { this.subscription.unsubscribe(); this.subscription = undefined; } } /** * 手动执行一次折叠 * @param editorProvider 编辑器实例提供者 */ foldOnce(editorProvider) { const editor = editorProvider.getEditorInstance(); if (editor) { foldManagedFields(editor); const model = editor.getModel(); if (model) { this.lastFoldedContent = model.getValue(); } } } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFuYWdlZC1maWVsZHMtZm9sZGVyLnV0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvbW1vbi9zcmMvY29kZS9tYW5hZ2VkLWZpZWxkcy1mb2xkZXIudXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQTs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsaUJBQWlCLENBQy9CLFlBQTJGO0lBRTNGLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNsQixPQUFPO0lBQ1QsQ0FBQztJQUVELE1BQU0sS0FBSyxHQUFHLFlBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUN0QyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDWCxPQUFPO0lBQ1QsQ0FBQztJQUVELElBQUksQ0FBQztRQUNILHdDQUF3QztRQUN4QyxNQUFNLG9CQUFvQixHQUFHLEtBQUssQ0FBQyxXQUFXLENBQzVDLHVCQUF1QixFQUN2QixLQUFLLEVBQ0wsSUFBSSxFQUNKLEtBQUssRUFDTCxJQUFJLEVBQ0osSUFBSSxDQUNMLENBQUM7UUFFRixJQUFJLG9CQUFvQixJQUFJLG9CQUFvQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUM1RCxNQUFNLGFBQWEsR0FBVSxFQUFFLENBQUM7WUFFaEMsS0FBSyxNQUFNLEtBQUssSUFBSSxvQkFBb0IsRUFBRSxDQUFDO2dCQUN6QyxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQztnQkFFOUMsTUFBTSxPQUFPLEdBQUcsd0JBQXdCLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO2dCQUUzRCxJQUFJLE9BQU8sR0FBRyxTQUFTLEVBQUUsQ0FBQztvQkFDeEIsYUFBYSxDQUFDLElBQUksQ0FBQzt3QkFDakIsZUFBZSxFQUFFLFNBQVM7d0JBQzFCLFdBQVcsRUFBRSxDQUFDO3dCQUNkLGFBQWEsRUFBRSxPQUFPO3dCQUN0QixTQUFTLEVBQUUsS0FBSyxD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QUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuLyoqXG4gKiDoh6rliqjmipjlj6AgbWFuYWdlZEZpZWxkcyDlrZfmrrVcbiAqIEBwYXJhbSBtb25hY29FZGl0b3IgTW9uYWNvIOe8lui+keWZqOWunuS+i1xuICovXG5leHBvcnQgZnVuY3Rpb24gZm9sZE1hbmFnZWRGaWVsZHMoXG4gIG1vbmFjb0VkaXRvcjogaW1wb3J0KCdtb25hY28tZWRpdG9yL2VzbS92cy9lZGl0b3IvZWRpdG9yLmFwaScpLmVkaXRvci5JU3RhbmRhbG9uZUNvZGVFZGl0b3IsXG4pOiB2b2lkIHtcbiAgaWYgKCFtb25hY29FZGl0b3IpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBtb2RlbCA9IG1vbmFjb0VkaXRvci5nZXRNb2RlbCgpO1xuICBpZiAoIW1vZGVsKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdHJ5IHtcbiAgICAvLyDmn6Xmib7miYDmnIkgbWFuYWdlZEZpZWxkcyDlrZfmrrXvvIjlj6rlnKggbWV0YWRhdGEg5LiL55qE77yJXG4gICAgY29uc3QgbWFuYWdlZEZpZWxkc01hdGNoZXMgPSBtb2RlbC5maW5kTWF0Y2hlcyhcbiAgICAgICdeKFxcXFxzKyltYW5hZ2VkRmllbGRzOicsXG4gICAgICBmYWxzZSxcbiAgICAgIHRydWUsXG4gICAgICBmYWxzZSxcbiAgICAgIG51bGwsXG4gICAgICB0cnVlLFxuICAgICk7XG5cbiAgICBpZiAobWFuYWdlZEZpZWxkc01hdGNoZXMgJiYgbWFuYWdlZEZpZWxkc01hdGNoZXMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgZm9sZGluZ1JhbmdlczogYW55W10gPSBbXTtcblxuICAgICAgZm9yIChjb25zdCBtYXRjaCBvZiBtYW5hZ2VkRmllbGRzTWF0Y2hlcykge1xuICAgICAgICBjb25zdCBzdGFydExpbmUgPSBtYXRjaC5yYW5nZS5zdGFydExpbmVOdW1iZXI7XG5cbiAgICAgICAgY29uc3QgZW5kTGluZSA9IGZpbmRNYW5hZ2VkRmllbGRzRW5kTGluZShtb2RlbCwgc3RhcnRMaW5lKTtcblxuICAgICAgICBpZiAoZW5kTGluZSA+IHN0YXJ0TGluZSkge1xuICAgICAgICAgIGZvbGRpbmdSYW5nZXMucHVzaCh7XG4gICAgICAgICAgICBzdGFydExpbmVOdW1iZXI6IHN0YXJ0TGluZSxcbiAgICAgICAgICAgIHN0YXJ0Q29sdW1uOiAxLFxuICAgICAgICAgICAgZW5kTGluZU51bWJlcjogZW5kTGluZSxcbiAgICAgICAgICAgIGVuZENvbHVtbjogbW9kZWwuZ2V0TGluZU1heENvbHVtbihlbmRMaW5lKSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGZvbGRpbmdSYW5nZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAvLyDpgJLlvZLmipjlj6Dmr4/kuKogbWFuYWdlZEZpZWxkcyDljLrln5/vvIznoa7kv53mr4/mrKHmipjlj6DlrozmiJDlkI7lho3ov5vooYzkuIvkuIDmrKFcbiAgICAgICAgZm9sZFJhbmdlc1NlcXVlbnRpYWxseShtb25hY29FZGl0b3IsIGZvbGRpbmdSYW5nZXM/LnJldmVyc2UoKSwgMCk7XG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUud2FybignRmFpbGVkIHRvIGZvbGQgbWFuYWdlZEZpZWxkczonLCBlcnJvcik7XG4gIH1cbn1cblxuLyoqXG4gKiDpgJLlvZLmipjlj6DlpJrkuKrljLrln5/vvIznoa7kv53mr4/mrKHmipjlj6DlrozmiJDlkI7lho3ov5vooYzkuIvkuIDmrKFcbiAqIEBwYXJhbSBtb25hY29FZGl0b3IgTW9uYWNvIOe8lui+keWZqOWunuS+i1xuICogQHBhcmFtIGZvbGRpbmdSYW5nZXMg5oqY5Y+g5Yy65Z+f5pWw57uEXG4gKiBAcGFyYW0gaW5kZXgg5b2T5YmN5oqY5Y+g55qE57Si5byVXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGZvbGRSYW5nZXNTZXF1ZW50aWFsbHkoXG4gIG1vbmFjb0VkaXRvcjogaW1wb3J0KCdtb25hY28tZWRpdG9yL2VzbS92cy9lZGl0b3IvZWRpdG9yLmFwaScpLmVkaXRvci5JU3RhbmRhbG9uZUNvZGVFZGl0b3IsXG4gIGZvbGRpbmdSYW5nZXM6IGFueVtdLFxuICBpbmRleDogbnVtYmVyLFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmIChpbmRleCA+PSBmb2xkaW5nUmFuZ2VzLmxlbmd0aCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHJhbmdlID0gZm9sZGluZ1Jhbmdlc1tpbmRleF07XG4gIG1vbmFjb0VkaXRvci5zZXRTZWxlY3Rpb24ocmFuZ2UpO1xuICBhd2FpdCBQcm9taXNlLnJlc29sdmUobW9uYWNvRWRpdG9yLmdldEFjdGlvbignZWRpdG9yLmZvbGQnKT8ucnVuKCkpO1xuXG4gIHJldHVybiBmb2xkUmFuZ2VzU2VxdWVudGlhbGx5KG1vbmFjb0VkaXRvciwgZm9sZGluZ1JhbmdlcywgaW5kZXggKyAxKTtcbn1cblxuLyoqXG4gKiDmn6Xmib4gbWFuYWdlZEZpZWxkcyDlrZfmrrXnmoTnu5PmnZ/ooYxcbiAqIEBwYXJhbSBtb2RlbCBNb25hY28g57yW6L6R5Zmo5qih5Z6LXG4gKiBAcGFyYW0gc3RhcnRMaW5lIOi1t+Wni+ihjOWPt1xuICogQHJldHVybnMg57uT5p2f6KGM5Y+3XG4gKi9cbmZ1bmN0aW9uIGZpbmRNYW5hZ2VkRmllbGRzRW5kTGluZShcbiAgbW9kZWw6IGltcG9ydCgnbW9uYWNvLWVkaXRvci9lc20vdnMvZWRpdG9yL2VkaXRvci5hcGknKS5lZGl0b3IuSVRleHRNb2RlbCxcbiAgc3RhcnRMaW5lOiBudW1iZXIsXG4pOiBudW1iZXIge1xuICBjb25zdCB0b3RhbExpbmVzID0gbW9kZWwuZ2V0TGluZUNvdW50KCk7XG4gIGNvbnN0IHN0YXJ0SW5kZW50ID0gZ2V0TGluZUluZGVudGF0aW9uKG1vZGVsLCBzdGFydExpbmUpO1xuXG4gIC8vIOS7juS4i+S4gOihjOW8gOWni+afpeaJvlxuICBmb3IgKGxldCBsaW5lID0gc3RhcnRMaW5lICsgMTsgbGluZSA8PSB0b3RhbExpbmVzOyBsaW5lKyspIHtcbiAgICBjb25zdCBsaW5lQ29udGVudCA9IG1vZGVsLmdldExpbmVDb250ZW50KGxpbmUpLnRyaW0oKTtcblxuICAgIC8vIOi3s+i/h+epuuihjFxuICAgIGlmICghbGluZUNvbnRlbnQpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGN1cnJlbnRJbmRlbnQgPSBnZXRMaW5lSW5kZW50YXRpb24obW9kZWwsIGxpbmUpO1xuXG4gICAgLy8g5aaC5p6c57yp6L+b5bCP5LqO562J5LqO6LW35aeL6KGM77yM6K+05piOIG1hbmFnZWRGaWVsZHMg5a2X5q6157uT5p2fXG4gICAgaWYgKGN1cnJlbnRJbmRlbnQgPD0gc3RhcnRJbmRlbnQpIHtcbiAgICAgIHJldHVybiBsaW5lIC0gMTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdG90YWxMaW5lcztcbn1cblxuLyoqXG4gKiDojrflj5booYznmoTnvKnov5vnuqfliKtcbiAqIEBwYXJhbSBtb2RlbCBNb25hY28g57yW6L6R5Zmo5qih5Z6LXG4gKiBAcGFyYW0gbGluZU51bWJlciDooYzlj7dcbiAqIEByZXR1cm5zIOe8qei/m+e6p+WIq++8iOepuuagvOaVsO+8iVxuICovXG5mdW5jdGlvbiBnZXRMaW5lSW5kZW50YXRpb24oXG4gIG1vZGVsOiBpbXBvcnQoJ21vbmFjby1lZGl0b3IvZXNtL3ZzL2VkaXRvci9lZGl0b3IuYXBpJykuZWRpdG9yLklUZXh0TW9kZWwsXG4gIGxpbmVOdW1iZXI6IG51bWJlcixcbik6IG51bWJlciB7XG4gIGNvbnN0IGxpbmVDb250ZW50ID0gbW9kZWwuZ2V0TGluZUNvbnRlbnQobGluZU51bWJlcik7XG4gIGNvbnN0IG1hdGNoID0gbGluZUNvbnRlbnQubWF0Y2goL14oXFxzKikvKTtcbiAgcmV0dXJuIG1hdGNoID8gbWF0Y2hbMV0ubGVuZ3RoIDogMDtcbn1cblxuLyoqXG4gKiDnvJbovpHlmajlrp7kvovojrflj5blmajmjqXlj6NcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFZGl0b3JJbnN0YW5jZVByb3ZpZGVyIHtcbiAgZ2V0RWRpdG9ySW5zdGFuY2UoKTpcbiAgICB8IGltcG9ydCgnbW9uYWNvLWVkaXRvci9lc20vdnMvZWRpdG9yL2VkaXRvci5hcGknKS5lZGl0b3IuSVN0YW5kYWxvbmVDb2RlRWRpdG9yXG4gICAgfCBudWxsO1xufVxuXG4vKipcbiAqIE1hbmFnZWRGaWVsZHMg6Ieq5Yqo5oqY5Y+g5ZmoXG4gKiDnlKjkuo7lnKjlhoXlrrnlj5jljJbml7boh6rliqjmipjlj6AgbWFuYWdlZEZpZWxkcyDlrZfmrrVcbiAqL1xuZXhwb3J0IGNsYXNzIE1hbmFnZWRGaWVsZHNBdXRvRm9sZGVyIHtcbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgbGFzdEZvbGRlZENvbnRlbnQgPSAnJztcblxuICAvKipcbiAgICog5byA5aeL55uR5ZCs5YaF5a655Y+Y5YyW5bm26Ieq5Yqo5oqY5Y+gXG4gICAqIEBwYXJhbSBlZGl0b3JQcm92aWRlciDnvJbovpHlmajlrp7kvovmj5DkvpvogIVcbiAgICogQHBhcmFtIGNvbnRlbnRPYnNlcnZhYmxlIOWGheWuueWPmOWMlueahCBPYnNlcnZhYmxlXG4gICAqL1xuICBzdGFydEF1dG9Gb2xkKFxuICAgIGVkaXRvclByb3ZpZGVyOiBFZGl0b3JJbnN0YW5jZVByb3ZpZGVyLFxuICAgIGNvbnRlbnRPYnNlcnZhYmxlOiBhbnksXG4gICk6IHZvaWQge1xuICAgIHRoaXMuc3RvcEF1dG9Gb2xkKCk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IGNvbnRlbnRPYnNlcnZhYmxlLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgY29uc3QgZWRpdG9yID0gZWRpdG9yUHJvdmlkZXIuZ2V0RWRpdG9ySW5zdGFuY2UoKTtcbiAgICAgICAgaWYgKGVkaXRvcikge1xuICAgICAgICAgIGNvbnN0IG1vZGVsID0gZWRpdG9yLmdldE1vZGVsKCk7XG4gICAgICAgICAgaWYgKG1vZGVsKSB7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50Q29udGVudCA9IG1vZGVsLmdldFZhbHVlKCk7XG4gICAgICAgICAgICAvLyDlj6rmnInlvZPlhoXlrrnnnJ/mraPlj5HnlJ/lj5jljJbml7bmiY3miafooYzmipjlj6BcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgY3VycmVudENvbnRlbnQuaW5jbHVkZXMoJ21hbmFnZWRGaWVsZHM6JykgJiZcbiAgICAgICAgICAgICAgY3VycmVudENvbnRlbnQgIT09IHRoaXMubGFzdEZvbGRlZENvbnRlbnRcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBmb2xkTWFuYWdlZEZpZWxkcyhlZGl0b3IpO1xuICAgICAgICAgICAgICB0aGlzLmxhc3RGb2xkZWRDb250ZW50ID0gY3VycmVudENvbnRlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LCAxMDApO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIOWBnOatouiHquWKqOaKmOWPoFxuICAgKi9cbiAgc3RvcEF1dG9Gb2xkKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiDmiYvliqjmiafooYzkuIDmrKHmipjlj6BcbiAgICogQHBhcmFtIGVkaXRvclByb3ZpZGVyIOe8lui+keWZqOWunuS+i+aPkOS+m+iAhVxuICAgKi9cbiAgZm9sZE9uY2UoZWRpdG9yUHJvdmlkZXI6IEVkaXRvckluc3RhbmNlUHJvdmlkZXIpOiB2b2lkIHtcbiAgICBjb25zdCBlZGl0b3IgPSBlZGl0b3JQcm92aWRlci5nZXRFZGl0b3JJbnN0YW5jZSgpO1xuICAgIGlmIChlZGl0b3IpIHtcbiAgICAgIGZvbGRNYW5hZ2VkRmllbGRzKGVkaXRvcik7XG4gICAgICBjb25zdCBtb2RlbCA9IGVkaXRvci5nZXRNb2RlbCgpO1xuICAgICAgaWYgKG1vZGVsKSB7XG4gICAgICAgIHRoaXMubGFzdEZvbGRlZENvbnRlbnQgPSBtb2RlbC5nZXRWYWx1ZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl19