diff --git a/.obsidian/app.json b/.obsidian/app.json index be601d2..3f8b909 100644 --- a/.obsidian/app.json +++ b/.obsidian/app.json @@ -22,5 +22,7 @@ "showIndentGuide": false, "spellcheck": false, "foldIndent": false, - "userIgnoreFilters": null + "userIgnoreFilters": [ + "calendar/" + ] } \ No newline at end of file diff --git a/.obsidian/bookmarks.json b/.obsidian/bookmarks.json index 08d6356..9027ed2 100644 --- a/.obsidian/bookmarks.json +++ b/.obsidian/bookmarks.json @@ -7,9 +7,8 @@ }, { "type": "file", - "ctime": 1772680366639, - "path": "work/移动杭研/开发记录/7.19.0/开发笔记.md", - "title": "7.19.0 开发笔记" + "ctime": 1775633245210, + "path": "work/移动杭研/开发记录/7.20.0/开发笔记 7.20.0.md" } ] } \ No newline at end of file diff --git a/.obsidian/core-plugins.json b/.obsidian/core-plugins.json index de13d82..1c5994e 100644 --- a/.obsidian/core-plugins.json +++ b/.obsidian/core-plugins.json @@ -11,7 +11,7 @@ "page-preview": true, "daily-notes": true, "templates": false, - "note-composer": false, + "note-composer": true, "command-palette": true, "slash-command": false, "editor-status": true, diff --git a/.obsidian/graph.json b/.obsidian/graph.json index 8b1f7d9..b43316e 100644 --- a/.obsidian/graph.json +++ b/.obsidian/graph.json @@ -5,7 +5,7 @@ "showAttachments": false, "hideUnresolved": false, "showOrphans": true, - "collapse-color-groups": true, + "collapse-color-groups": false, "colorGroups": [], "collapse-display": false, "showArrow": false, @@ -17,6 +17,6 @@ "repelStrength": 10, "linkStrength": 1, "linkDistance": 250, - "scale": 0.09848280266864458, + "scale": 0.13807120506649795, "close": true } \ No newline at end of file diff --git a/.obsidian/plugins/quickadd/data.json b/.obsidian/plugins/quickadd/data.json index afb19a8..9a70285 100644 --- a/.obsidian/plugins/quickadd/data.json +++ b/.obsidian/plugins/quickadd/data.json @@ -36,7 +36,7 @@ "templatePath": "attachment/templates/移动杭研-开发笔记.md", "fileNameFormat": { "enabled": true, - "format": "开发笔记{{VALUE:version}}" + "format": "开发笔记 {{VALUE:version}}" }, "folder": { "enabled": false, diff --git a/.obsidian/plugins/recent-files-obsidian/data.json b/.obsidian/plugins/recent-files-obsidian/data.json index 7458cca..149ccee 100644 --- a/.obsidian/plugins/recent-files-obsidian/data.json +++ b/.obsidian/plugins/recent-files-obsidian/data.json @@ -1,68 +1,200 @@ { "recentFiles": [ { - "basename": "0103-试用单前置校验信安附件问题-BBOSS张蕊", - "path": "work/移动杭研/问题处理/2023-01/0103-试用单前置校验信安附件问题-BBOSS张蕊.md" + "basename": "开发笔记 7.20.0", + "path": "work/移动杭研/开发记录/7.20.0/开发笔记 7.20.0.md" }, { - "basename": "claude code buddy", - "path": "000-inbox/claude code buddy.md" + "basename": "okhttp3", + "path": "000-inbox/okhttp3.md" }, { - "basename": "MCP 请求数统计", - "path": "000-inbox/MCP 请求数统计.md" + "basename": "MCP 学习", + "path": "000-inbox/MCP 学习.md" }, { - "basename": "需求-命中率计算", - "path": "000-inbox/需求-命中率计算.md" + "basename": "DDD", + "path": "000-inbox/DDD.md" }, { - "basename": "数据库信息", - "path": "work/移动杭研/项目备忘/数据库信息.md" + "basename": "个人大纲", + "path": "kids-coding/个人大纲.md" + }, + { + "basename": "MCP Json 注解", + "path": "resource/java/MCP Json 注解.md" + }, + { + "basename": "Maven", + "path": "resource/java/Maven.md" + }, + { + "basename": "JPA 双表查询", + "path": "resource/java/JPA 双表查询.md" + }, + { + "basename": "JPA 操作规范", + "path": "resource/java/JPA 操作规范.md" + }, + { + "basename": "ibs-ai 项目梳理", + "path": "work/移动杭研/AI 项目/ibs-ai 项目梳理.md" + }, + { + "basename": "图纸-IBS 智能体-v1-流量查询 demo", + "path": "work/移动杭研/AI 项目/图纸-IBS 智能体-v1-流量查询 demo.md" + }, + { + "basename": "词性", + "path": "resource/英语/词性.md" + }, + { + "basename": "句子", + "path": "resource/英语/句子.md" + }, + { + "basename": "形容词最高级", + "path": "resource/英语/形容词最高级.md" + }, + { + "basename": "曹胖学位英语-比较级最高级", + "path": "resource/英语/曹胖学位英语-比较级最高级.md" + }, + { + "basename": "曹胖学位英语-冠词真题笔记", + "path": "resource/英语/曹胖学位英语-冠词真题笔记.md" + }, + { + "basename": "python 环境", + "path": "resource/python/python 环境.md" + }, + { + "basename": "0414-icws.jb51.net 高级配置查询问题", + "path": "work/移动杭研/问题处理/2026-04/0414-icws.jb51.net 高级配置查询问题.md" + }, + { + "basename": "PowerShell 配置文件", + "path": "resource/配置/PowerShell 配置文件.md" }, { "basename": "CLAUDE.md", "path": "work/移动杭研/AI 项目/CLAUDE.md.md" }, { - "basename": "Qwen3.5(通义千问 3.5)系列的多模态图文大模型(Vision-Language Models)", - "path": "resource/ai/大模型安装笔记/Qwen3.5(通义千问 3.5)系列的多模态图文大模型(Vision-Language Models).md" + "basename": "domain_request 分支梳理", + "path": "work/移动杭研/开发记录/7.18.0/domain_request 分支梳理.md" }, { - "basename": "LLM 三件套", - "path": "resource/ai/大模型安装笔记/LLM 三件套.md" + "basename": "开发笔记", + "path": "work/移动杭研/开发记录/7.18.0/开发笔记.md" }, { - "basename": "lichunliang", - "path": "work/移动杭研/项目备忘/lichunliang.md" + "basename": "domain_request 分支梳理 2", + "path": "work/移动杭研/开发记录/7.18.0/domain_request 分支梳理 2.md" }, { - "basename": "ESOP-域名配置需求-新增", - "path": "work/移动杭研/业务梳理/运营工单/ESOP-域名配置需求-新增.md" + "basename": "开发笔记", + "path": "work/移动杭研/开发记录/7.19.0/开发笔记.md" }, { - "basename": "项目杂记", - "path": "work/移动杭研/项目备忘/项目杂记.md" + "basename": "资源收纳", + "path": "resource/资源收纳.md" }, { - "basename": "0323-邮件发送异常", - "path": "work/移动杭研/问题处理/2026-03/0323-邮件发送异常.md" + "basename": "TG 备忘录", + "path": "personal/TG 备忘录.md" }, { - "basename": "jinja", - "path": "000-inbox/jinja.md" + "basename": "路由器", + "path": "personal/路由器.md" }, { - "basename": "n8n 安装", - "path": "resource/组件/n8n 安装.md" + "basename": "服务器-香港", + "path": "personal/服务器-香港.md" }, { - "basename": "Docker 核心知识与实战笔记", - "path": "resource/系统/Docker 核心知识与实战笔记.md" + "basename": "阅读记录", + "path": "personal/阅读/阅读记录.md" }, { - "basename": "VIP Cloud", - "path": "resource/系统/VIP Cloud.md" + "basename": "漫威电影", + "path": "personal/影视/漫威电影.md" + }, + { + "basename": "直播源", + "path": "personal/影视/直播源.md" + }, + { + "basename": "windows", + "path": "resource/系统/windows.md" + }, + { + "basename": "getHitRatio接口分析", + "path": "work/移动杭研/AI 项目/getHitRatio接口分析.md" + }, + { + "basename": "settings.local.json", + "path": "work/移动杭研/AI 项目/settings.local.json.md" + }, + { + "basename": "Rime 快捷键", + "path": "resource/工具/rime/Rime 快捷键.md" + }, + { + "basename": "Rime YAML Custom Patch 语法笔记", + "path": "resource/工具/rime/Rime YAML Custom Patch 语法笔记.md" + }, + { + "basename": "Rime 小狼毫", + "path": "resource/工具/rime/Rime 小狼毫.md" + }, + { + "basename": "x-callback-url", + "path": "resource/工具/obsidian/x-callback-url.md" + }, + { + "basename": "逆水寒", + "path": "personal/游戏/逆水寒.md" + }, + { + "basename": "梦幻西游法宝价格", + "path": "personal/游戏/梦幻西游法宝价格.md" + }, + { + "basename": "梦幻西游", + "path": "personal/游戏/梦幻西游.md" + }, + { + "basename": "工作经历", + "path": "personal/履历/工作经历.md" + }, + { + "basename": "2022年", + "path": "personal/履历/面试日程/2022年.md" + }, + { + "basename": "王欣", + "path": "personal/家人/王欣.md" + }, + { + "basename": "田昊", + "path": "personal/家人/田昊.md" + }, + { + "basename": "田秉衡", + "path": "personal/家人/田秉衡.md" + }, + { + "basename": "牛雅清", + "path": "personal/家人/牛雅清.md" + }, + { + "basename": "昌平医院", + "path": "personal/个人/昌平医院.md" + }, + { + "basename": "装机系统", + "path": "personal/个人/装机系统.md" } ], "omittedPaths": [ diff --git a/.obsidian/plugins/templater-obsidian/main.js b/.obsidian/plugins/templater-obsidian/main.js index 7333bb4..3ebfec2 100644 --- a/.obsidian/plugins/templater-obsidian/main.js +++ b/.obsidian/plugins/templater-obsidian/main.js @@ -3,43 +3,51 @@ THIS IS A GENERATED/BUNDLED FILE BY ESBUILD if you want to view the source, please visit the github repository of this plugin */ -var ja=Object.create;var Yn=Object.defineProperty;var va=Object.getOwnPropertyDescriptor;var wa=Object.getOwnPropertyNames;var ba=Object.getPrototypeOf,Ea=Object.prototype.hasOwnProperty;var zi=n=>Yn(n,"__esModule",{value:!0});var Ta=(n,e)=>{zi(n);for(var t in e)Yn(n,t,{get:e[t],enumerable:!0})},ka=(n,e,t)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of wa(e))!Ea.call(n,r)&&r!=="default"&&Yn(n,r,{get:()=>e[r],enumerable:!(t=va(e,r))||t.enumerable});return n},X=n=>ka(zi(Yn(n!=null?ja(ba(n)):{},"default",n&&n.__esModule&&"default"in n?{get:()=>n.default,enumerable:!0}:{value:n,enumerable:!0})),n);var Ji=(()=>{for(var n=new Uint8Array(128),e=0;e<64;e++)n[e<26?e+65:e<52?e+71:e<62?e-4:e*4-205]=e;return t=>{for(var r=t.length,i=new Uint8Array((r-(t[r-1]=="=")-(t[r-2]=="="))*3/4|0),o=0,a=0;o>4,i[a++]=c<<4|d>>2,i[a++]=d<<6|m}return i}})();Ta(exports,{default:()=>qi});var Tr=X(require("obsidian"));var L=X(require("obsidian"));var Qi=X(require("obsidian"));function oe(n){let e=new Qi.Notice("",8e3),t=createFragment(r=>{r.createEl("b",{text:"Templater Error"}),r.createEl("span",{text:":"}),r.createEl("br"),r.createEl("span",{text:n.message}),n instanceof P&&n.console_msg&&(r.createEl("br"),r.createEl("span",{text:"Check console for more information"}),console.error("Templater Error:",n.message,` -`,n.console_msg))});e.noticeEl.appendChild(t)}var P=class extends Error{constructor(e,t){super(e);this.console_msg=t;this.name=this.constructor.name,Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor)}};async function Se(n,e){try{return await n()}catch(t){return t instanceof P?oe(t):oe(new P(e,t.message)),null}}function Ce(n,e){try{return n()}catch(t){return oe(new P(e,t.message)),null}}var re=function(){function n(){}return n.explainIfInvalidTSDocTagName=function(e){if(e[0]!=="@")return'A TSDoc tag name must start with an "@" symbol';if(!n._tsdocTagNameRegExp.test(e))return"A TSDoc tag name must start with a letter and contain only letters and numbers"},n.validateTSDocTagName=function(e){var t=n.explainIfInvalidTSDocTagName(e);if(t)throw new Error(t)},n.explainIfInvalidLinkUrl=function(e){if(e.length===0)return"The URL cannot be empty";if(!n._urlSchemeRegExp.test(e))return'An @link URL must begin with a scheme comprised only of letters and numbers followed by "://". (For general URLs, use an HTML "" tag instead.)';if(!n._urlSchemeAfterRegExp.test(e))return'An @link URL must have at least one character after "://"'},n.explainIfInvalidHtmlName=function(e){if(!n._htmlNameRegExp.test(e))return"An HTML name must be an ASCII letter followed by zero or more letters, digits, or hyphens"},n.validateHtmlName=function(e){var t=n.explainIfInvalidHtmlName(e);if(t)throw new Error(t)},n.explainIfInvalidPackageName=function(e){if(e.length===0)return"The package name cannot be an empty string";if(!n._validPackageNameRegExp.test(e))return"The package name ".concat(JSON.stringify(e)," is not a valid package name")},n.explainIfInvalidImportPath=function(e,t){if(e.length>0){if(e.indexOf("//")>=0)return'An import path must not contain "//"';if(e[e.length-1]==="/")return'An import path must not end with "/"';if(!t&&e[0]==="/")return'An import path must not start with "/" unless prefixed by a package name'}},n.isSystemSelector=function(e){return n._systemSelectors.has(e)},n.explainIfInvalidUnquotedIdentifier=function(e){if(e.length===0)return"The identifier cannot be an empty string";if(n._identifierBadCharRegExp.test(e))return"The identifier cannot non-word characters";if(n._identifierNumberStartRegExp.test(e))return"The identifier must not start with a number"},n.explainIfInvalidUnquotedMemberIdentifier=function(e){var t=n.explainIfInvalidUnquotedIdentifier(e);if(t!==void 0)return t;if(n.isSystemSelector(e))return'The identifier "'.concat(e,'" must be quoted because it is a TSDoc system selector name')},n._tsdocTagNameRegExp=/^@[a-z][a-z0-9]*$/i,n._urlSchemeRegExp=/^[a-z][a-z0-9]*\:\/\//i,n._urlSchemeAfterRegExp=/^[a-z][a-z0-9]*\:\/\/./i,n._htmlNameRegExp=/^[a-z]+[a-z0-9\-]*$/i,n._identifierBadCharRegExp=/[^a-z0-9_$]/i,n._identifierNumberStartRegExp=/^[0-9]/,n._validPackageNameRegExp=/^(?:@[a-z0-9\-_\.]+\/)?[a-z0-9\-_\.]+$/i,n._systemSelectors=new Set(["instance","static","constructor","class","enum","function","interface","namespace","type","variable"]),n}();var Nr=function(){function n(){this._docNodeDefinitionsByKind=new Map,this._docNodeDefinitionsByConstructor=new Map}return n.prototype.registerDocNodes=function(e,t){var r=re.explainIfInvalidPackageName(e);if(r)throw new Error("Invalid NPM package name: "+r);for(var i=0,o=t;i0&&i.appendNodes(r),i}return Object.defineProperty(e.prototype,"nodes",{get:function(){return this._nodes},enumerable:!1,configurable:!0}),e.prototype.appendNode=function(t){if(!this.configuration.docNodeManager.isAllowedChild(this.kind,t.kind))throw new Error("The TSDocConfiguration does not allow a ".concat(this.kind," node to")+" contain a node of type ".concat(t.kind));this._nodes.push(t)},e.prototype.appendNodes=function(t){for(var r=0,i=t;r0){var i=this.nodes[this.nodes.length-1];i.kind===g.Paragraph&&(r=i)}r||(r=new st({configuration:this.configuration}),this.appendNode(r)),r.appendNode(t)},e.prototype.appendNodesInParagraph=function(t){for(var r=0,i=t;r1){var e=this._chunks.join("");this._chunks.length=1,this._chunks[0]=e}return this._chunks[0]},n}();var eo=function(){function n(){}return n.transform=function(e){for(var t=[],r=!1,i=[],o=[],a=!1,l=0,c=e.nodes;l0&&(r&&(i.push(" "),r=!1),i.push(S),o.push(d),a=!0),b&&a&&(r=!0);break;case g.SoftBreak:a&&(r=!0),o.push(d);break;default:r&&(i.push(" "),r=!1),i.length>0&&(t.push(new Ve({configuration:e.configuration,text:i.join("")})),i.length=0,o.length=0),t.push(d),a=!0}}i.length>0&&(t.push(new Ve({configuration:e.configuration,text:i.join("")})),i.length=0,o.length=0);var k=new st({configuration:e.configuration});return k.appendNodes(t),k},n}();var qr=function(){function n(){}return n.trimSpacesInParagraph=function(e){return eo.transform(e)},n}();var Lr=function(n,e,t){if(t||arguments.length===2)for(var r=0,i=e.length,o;r0&&(this._ensureLineSkipped(),this._renderNodes(a.modifierTagSet.nodes));break;case g.DeclarationReference:var l=e;this._writeContent(l.packageName),this._writeContent(l.importPath),(l.packageName!==void 0||l.importPath!==void 0)&&this._writeContent("#"),this._renderNodes(l.memberReferences);break;case g.ErrorText:var c=e;this._writeContent(c.text);break;case g.EscapedText:var d=e;this._writeContent(d.encodedText);break;case g.FencedCode:var m=e;this._ensureAtStartOfLine(),this._writeContent("```"),this._writeContent(m.language),this._writeNewline(),this._writeContent(m.code),this._writeContent("```"),this._writeNewline(),this._writeNewline();break;case g.HtmlAttribute:var _=e;this._writeContent(_.name),this._writeContent(_.spacingAfterName),this._writeContent("="),this._writeContent(_.spacingAfterEquals),this._writeContent(_.value),this._writeContent(_.spacingAfterValue);break;case g.HtmlEndTag:var w=e;this._writeContent("");break;case g.HtmlStartTag:var b=e;this._writeContent("<"),this._writeContent(b.name),this._writeContent(b.spacingAfterName);for(var S=b.spacingAfterName===void 0||b.spacingAfterName.length===0,k=0,E=b.htmlAttributes;k":">");break;case g.InheritDocTag:var $=e;this._renderInlineTag($,function(){$.declarationReference&&(t._writeContent(" "),t._renderNode($.declarationReference))});break;case g.InlineTag:var K=e;this._renderInlineTag(K,function(){K.tagContent.length>0&&(t._writeContent(" "),t._writeContent(K.tagContent))});break;case g.LinkTag:var D=e;this._renderInlineTag(D,function(){(D.urlDestination!==void 0||D.codeDestination!==void 0)&&(D.urlDestination!==void 0?(t._writeContent(" "),t._writeContent(D.urlDestination)):D.codeDestination!==void 0&&(t._writeContent(" "),t._renderNode(D.codeDestination))),D.linkText!==void 0&&(t._writeContent(" "),t._writeContent("|"),t._writeContent(" "),t._writeContent(D.linkText))});break;case g.MemberIdentifier:var H=e;H.hasQuotes?(this._writeContent('"'),this._writeContent(H.identifier),this._writeContent('"')):this._writeContent(H.identifier);break;case g.MemberReference:var F=e;F.hasDot&&this._writeContent("."),F.selector&&this._writeContent("("),F.memberSymbol?this._renderNode(F.memberSymbol):this._renderNode(F.memberIdentifier),F.selector&&(this._writeContent(":"),this._renderNode(F.selector),this._writeContent(")"));break;case g.MemberSelector:var J=e;this._writeContent(J.selector);break;case g.MemberSymbol:var te=e;this._writeContent("["),this._renderNode(te.symbolReference),this._writeContent("]");break;case g.Section:var ne=e;this._renderNodes(ne.nodes);break;case g.Paragraph:var Q=qr.trimSpacesInParagraph(e);Q.nodes.length>0&&(this._hangingParagraph?this._hangingParagraph=!1:this._ensureLineSkipped(),this._renderNodes(Q.nodes),this._writeNewline());break;case g.ParamBlock:var h=e;this._ensureLineSkipped(),this._renderNode(h.blockTag),this._writeContent(" "),this._writeContent(h.parameterName),this._writeContent(" - "),this._hangingParagraph=!0,this._renderNode(h.content),this._hangingParagraph=!1;break;case g.ParamCollection:var C=e;this._renderNodes(C.blocks);break;case g.PlainText:var f=e;this._writeContent(f.text);break}},n.prototype._renderInlineTag=function(e,t){this._writeContent("{"),this._writeContent(e.tagName),t(),this._writeContent("}")},n.prototype._renderNodes=function(e){for(var t=0,r=e;t1){for(var r=!0,i=0,o=t;i0?this.params:void 0,this.typeParams.count>0?this.typeParams:void 0,this.returnsBlock],this.customBlocks,!0),this.seeBlocks,!0),[this.inheritDocTag],!1),this.modifierTagSet.nodes,!0)},e.prototype.emitAsTsdoc=function(){var t=new ct,r=new lt;return r.renderComment(t,this),t.toString()},e}(T);var qa=function(){var n=function(e,t){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,i){r.__proto__=i}||function(r,i){for(var o in i)Object.prototype.hasOwnProperty.call(i,o)&&(r[o]=i[o])},n(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}(),La=function(n,e,t){if(t||arguments.length===2)for(var r=0,i=e.length,o;r=t},n._scanTextContent=function(e,t,r){for(var i=0,o=e;i=t||(r+=n._scanTextContent(a.getChildNodes(),t,r),r>=t))break}return r},n._countNonSpaceCharacters=function(e){for(var t=0,r=e.length,i=0;ithis.buffer.length)return{line:0,column:0};for(var t=1,r=1,i=0;ithis.buffer.length)throw new Error("TextRange.pos cannot exceed the associated text buffer length");if(this.end>this.buffer.length)throw new Error("TextRange.end cannot exceed the associated text buffer length")},n.empty=new n("",0,0),n}();var _n=function(){function n(e){this.messageId=e.messageId,this.unformattedText=e.messageText,this.textRange=e.textRange,this.tokenSequence=e.tokenSequence,this.docNode=e.docNode,this._text=void 0}return n._formatMessageText=function(e,t){if(e||(e="An unknown error occurred"),t.pos!==0||t.end!==0){var r=t.getLocation(t.pos);if(r.line)return"(".concat(r.line,",").concat(r.column,"): ")+e}return e},Object.defineProperty(n.prototype,"text",{get:function(){return this._text===void 0&&(this._text=n._formatMessageText(this.unformattedText,this.textRange)),this._text},enumerable:!1,configurable:!0}),n.prototype.toString=function(){return this.text},n}();var Hr=function(){function n(){this._messages=[]}return Object.defineProperty(n.prototype,"messages",{get:function(){return this._messages},enumerable:!1,configurable:!0}),n.prototype.addMessage=function(e){this._messages.push(e)},n.prototype.addMessageForTextRange=function(e,t,r){this.addMessage(new _n({messageId:e,messageText:t,textRange:r}))},n.prototype.addMessageForTokenSequence=function(e,t,r,i){this.addMessage(new _n({messageId:e,messageText:t,textRange:r.getContainingTextRange(),tokenSequence:r,docNode:i}))},n.prototype.addMessageForDocErrorText=function(e){var t;e.textExcerpt?t=e.textExcerpt:t=e.errorLocation,this.addMessage(new _n({messageId:e.messageId,messageText:e.errorMessage,textRange:t.getContainingTextRange(),tokenSequence:t,docNode:e}))},n}();var $r=function(){function n(e,t){this.commentRange=ze.empty,this.lines=[],this.tokens=[],this.configuration=e,this.sourceRange=t,this.docComment=new Wn({configuration:this.configuration}),this.log=new Hr}return n}();var yt=function(){function n(e){this.parserContext=e.parserContext,this._startIndex=e.startIndex,this._endIndex=e.endIndex,this._validateBounds()}return n.createEmpty=function(e){return new n({parserContext:e,startIndex:0,endIndex:0})},Object.defineProperty(n.prototype,"startIndex",{get:function(){return this._startIndex},enumerable:!1,configurable:!0}),Object.defineProperty(n.prototype,"endIndex",{get:function(){return this._endIndex},enumerable:!1,configurable:!0}),Object.defineProperty(n.prototype,"tokens",{get:function(){return this.parserContext.tokens.slice(this._startIndex,this._endIndex)},enumerable:!1,configurable:!0}),n.prototype.getNewSequence=function(e,t){return new n({parserContext:this.parserContext,startIndex:e,endIndex:t})},n.prototype.getContainingTextRange=function(){return this.isEmpty()?ze.empty:this.parserContext.sourceRange.getNewRange(this.parserContext.tokens[this._startIndex].range.pos,this.parserContext.tokens[this._endIndex-1].range.end)},n.prototype.isEmpty=function(){return this._startIndex===this._endIndex},n.prototype.toString=function(){return this.tokens.map(function(e){return e.toString()}).join("")},n.prototype._validateBounds=function(){if(this.startIndex<0)throw new Error("TokenSequence.startIndex cannot be negative");if(this.endIndex<0)throw new Error("TokenSequence.endIndex cannot be negative");if(this.endIndexthis.parserContext.tokens.length)throw new Error("TokenSequence.startIndex cannot exceed the associated token array");if(this.endIndex>this.parserContext.tokens.length)throw new Error("TokenSequence.endIndex cannot exceed the associated token array")},n}();var pe;(function(n){n[n.BeginComment1=0]="BeginComment1",n[n.BeginComment2=1]="BeginComment2",n[n.CollectingFirstLine=2]="CollectingFirstLine",n[n.CollectingLine=3]="CollectingLine",n[n.AdvancingLine=4]="AdvancingLine",n[n.Done=5]="Done"})(pe||(pe={}));var ro=function(){function n(){}return n.extract=function(e){for(var t=e.sourceRange,r=t.buffer,i=0,o=0,a=0,l=0,c=t.pos,d=pe.BeginComment1,m=[];d!==pe.Done;){if(c>=t.end)switch(d){case pe.BeginComment1:case pe.BeginComment2:return e.log.addMessageForTextRange(v.CommentNotFound,'Expecting a "/**" comment',t),!1;default:return e.log.addMessageForTextRange(v.CommentMissingClosingDelimiter,"Unexpected end of input",t),!1}var _=r[c],w=c;++c;var b=ca)&&m.push(t.getNewRange(a,l)),a=c,l=c,d=pe.AdvancingLine):_==="*"&&b==="/"?(l>a&&m.push(t.getNewRange(a,l)),a=0,l=0,++c,o=c,d=pe.Done):n._whitespaceCharacterRegExp.test(_)||(l=c);break;case pe.AdvancingLine:_==="*"?b==="/"?(a=0,l=0,++c,o=c,d=pe.Done):(b===" "&&++c,a=c,l=c,d=pe.CollectingLine):_===` -`?(m.push(t.getNewRange(w,w)),a=c):n._whitespaceCharacterRegExp.test(_)||(l=c,d=pe.CollectingLine);break}}return e.commentRange=t.getNewRange(i,o),e.lines=m,!0},n._whitespaceCharacterRegExp=/^\s$/,n}();var xn=function(){function n(){}return n.readTokens=function(e){n._ensureInitialized();for(var t=[],r=void 0,i=0,o=e;i":u.GreaterThan,"=":u.Equals,"'":u.SingleQuote,'"':u.DoubleQuote,"/":u.Slash,"-":u.Hyphen,"@":u.AtSign,"{":u.LeftCurlyBracket,"}":u.RightCurlyBracket,"`":u.Backtick,".":u.Period,":":u.Colon,",":u.Comma,"[":u.LeftSquareBracket,"]":u.RightSquareBracket,"|":u.Pipe,"(":u.LeftParenthesis,")":u.RightParenthesis,"#":u.PoundSymbol,"+":u.Plus,$:u.DollarSign},o=0,a=Object.getOwnPropertyNames(i);o?@[\\]^`{|}~",n._wordCharacters="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_",n}();var Kr=function(){function n(e,t){if(this._parserContext=e,this.tokens=e.tokens,t){if(t.parserContext!==this._parserContext)throw new Error("The embeddedTokenSequence must use the same parser context");this._readerStartIndex=t.startIndex,this._readerEndIndex=t.endIndex}else this._readerStartIndex=0,this._readerEndIndex=this.tokens.length;this._currentIndex=this._readerStartIndex,this._accumulatedStartIndex=this._readerStartIndex}return n.prototype.extractAccumulatedSequence=function(){if(this._accumulatedStartIndex===this._currentIndex)throw new Error("Parser assertion failed: The queue should not be empty when extractAccumulatedSequence() is called");var e=new yt({parserContext:this._parserContext,startIndex:this._accumulatedStartIndex,endIndex:this._currentIndex});return this._accumulatedStartIndex=this._currentIndex,e},n.prototype.isAccumulatedSequenceEmpty=function(){return this._accumulatedStartIndex===this._currentIndex},n.prototype.tryExtractAccumulatedSequence=function(){if(!this.isAccumulatedSequenceEmpty())return this.extractAccumulatedSequence()},n.prototype.assertAccumulatedSequenceIsEmpty=function(){if(!this.isAccumulatedSequenceEmpty()){var e=new yt({parserContext:this._parserContext,startIndex:this._accumulatedStartIndex,endIndex:this._currentIndex}),t=e.tokens.map(function(r){return r.toString()});throw new Error(`Parser assertion failed: The queue should be empty, but it contains: -`+JSON.stringify(t))}},n.prototype.peekToken=function(){return this.tokens[this._currentIndex]},n.prototype.peekTokenKind=function(){return this._currentIndex>=this._readerEndIndex?u.EndOfInput:this.tokens[this._currentIndex].kind},n.prototype.peekTokenAfterKind=function(){return this._currentIndex+1>=this._readerEndIndex?u.EndOfInput:this.tokens[this._currentIndex+1].kind},n.prototype.peekTokenAfterAfterKind=function(){return this._currentIndex+2>=this._readerEndIndex?u.EndOfInput:this.tokens[this._currentIndex+2].kind},n.prototype.readToken=function(){if(this._currentIndex>=this._readerEndIndex)throw new Error("Cannot read past end of stream");var e=this.tokens[this._currentIndex];if(e.kind===u.EndOfInput)throw new Error("The EndOfInput token cannot be read");return this._currentIndex++,e},n.prototype.peekPreviousTokenKind=function(){return this._currentIndex===0?u.EndOfInput:this.tokens[this._currentIndex-1].kind},n.prototype.createMarker=function(){return this._currentIndex},n.prototype.backtrackToMarker=function(e){if(e>this._currentIndex)throw new Error("The marker has expired");this._currentIndex=e,e" character should be escaped using a backslash to avoid confusion with an HTML tag'));break;case u.Backtick:this._pushAccumulatedPlainText(e),e.peekTokenAfterKind()===u.Backtick&&e.peekTokenAfterAfterKind()===u.Backtick?this._pushNode(this._parseFencedCode(e)):this._pushNode(this._parseCodeSpan(e));break;default:e.readToken();break}this._pushAccumulatedPlainText(e),this._performValidationChecks()},n.prototype._performValidationChecks=function(){var e=this._parserContext.docComment;e.deprecatedBlock&&(lr.hasAnyTextContent(e.deprecatedBlock)||this._parserContext.log.addMessageForTokenSequence(v.MissingDeprecationMessage,"The ".concat(e.deprecatedBlock.blockTag.tagName," block must include a deprecation message,")+" e.g. describing the recommended alternative",e.deprecatedBlock.blockTag.getTokenSequence(),e.deprecatedBlock)),e.inheritDocTag&&(e.remarksBlock&&this._parserContext.log.addMessageForTokenSequence(v.InheritDocIncompatibleTag,'A "'.concat(e.remarksBlock.blockTag.tagName,'" block must not be used, because that')+" content is provided by the @inheritDoc tag",e.remarksBlock.blockTag.getTokenSequence(),e.remarksBlock.blockTag),lr.hasAnyTextContent(e.summarySection)&&this._parserContext.log.addMessageForTextRange(v.InheritDocIncompatibleSummary,"The summary section must not have any content, because that content is provided by the @inheritDoc tag",this._parserContext.commentRange))},n.prototype._validateTagDefinition=function(e,t,r,i,o){if(e){var a=e.syntaxKind===R.InlineTag;a!==r?r?this._parserContext.log.addMessageForTokenSequence(v.TagShouldNotHaveBraces,'The TSDoc tag "'.concat(t,'" is not an inline tag; it must not be enclosed in "{ }" braces'),i,o):this._parserContext.log.addMessageForTokenSequence(v.InlineTagMissingBraces,'The TSDoc tag "'.concat(t,'" is an inline tag; it must be enclosed in "{ }" braces'),i,o):this._parserContext.configuration.validation.reportUnsupportedTags&&(this._parserContext.configuration.isTagSupported(e)||this._parserContext.log.addMessageForTokenSequence(v.UnsupportedTag,'The TSDoc tag "'.concat(t,'" is not supported by this tool'),i,o))}else this._parserContext.configuration.validation.ignoreUndefinedTags||this._parserContext.log.addMessageForTokenSequence(v.UndefinedTag,'The TSDoc tag "'.concat(t,'" is not defined in this configuration'),i,o)},n.prototype._pushAccumulatedPlainText=function(e){e.isAccumulatedSequenceEmpty()||this._pushNode(new Ve({parsed:!0,configuration:this._configuration,textExcerpt:e.extractAccumulatedSequence()}))},n.prototype._parseAndPushBlock=function(e){var t=this._parserContext.docComment,r=this._parserContext.configuration,i=t.modifierTagSet,o=this._parseBlockTag(e);if(o.kind!==g.BlockTag){this._pushNode(o);return}var a=o,l=r.tryGetTagDefinitionWithUpperCase(a.tagNameWithUpperCase);if(this._validateTagDefinition(l,a.tagName,!1,a.getTokenSequence(),a),l)switch(l.syntaxKind){case R.BlockTag:if(a.tagNameWithUpperCase===G.param.tagNameWithUpperCase){var c=this._parseParamBlock(e,a,G.param.tagName);this._parserContext.docComment.params.add(c),this._currentSection=c.content;return}else if(a.tagNameWithUpperCase===G.typeParam.tagNameWithUpperCase){var c=this._parseParamBlock(e,a,G.typeParam.tagName);this._parserContext.docComment.typeParams.add(c),this._currentSection=c.content;return}else{var d=new zt({configuration:this._configuration,blockTag:a});this._addBlockToDocComment(d),this._currentSection=d.content}return;case R.ModifierTag:i.addTag(a);return}this._pushNode(a)},n.prototype._addBlockToDocComment=function(e){var t=this._parserContext.docComment;switch(e.blockTag.tagNameWithUpperCase){case G.remarks.tagNameWithUpperCase:t.remarksBlock=e;break;case G.privateRemarks.tagNameWithUpperCase:t.privateRemarks=e;break;case G.deprecated.tagNameWithUpperCase:t.deprecatedBlock=e;break;case G.returns.tagNameWithUpperCase:t.returnsBlock=e;break;case G.see.tagNameWithUpperCase:t._appendSeeBlock(e);break;default:t.appendCustomBlock(e)}},n.prototype._tryParseJSDocTypeOrValueRest=function(e,t,r,i){for(var o,a=1;a>0;){var l=e.peekTokenKind();switch(l){case t:o===void 0&&a++;break;case r:o===void 0&&a--;break;case u.Backslash:o!==void 0&&(e.readToken(),l=e.peekTokenKind());break;case u.DoubleQuote:case u.SingleQuote:case u.Backtick:o===l?o=void 0:o===void 0&&(o=l);break}if(l===u.EndOfInput){e.backtrackToMarker(i);return}e.readToken()}return e.tryExtractAccumulatedSequence()},n.prototype._tryParseUnsupportedJSDocType=function(e,t,r){if(e.assertAccumulatedSequenceIsEmpty(),!(e.peekTokenKind()!==u.LeftCurlyBracket||e.peekTokenAfterKind()===u.AtSign)){var i=e.createMarker();e.readToken();var o=this._tryParseJSDocTypeOrValueRest(e,u.LeftCurlyBracket,u.RightCurlyBracket,i);if(o){this._parserContext.log.addMessageForTokenSequence(v.ParamTagWithInvalidType,"The "+r+" block should not include a JSDoc-style '{type}'",o,t);var a=this._tryReadSpacingAndNewlines(e);a&&(o=o.getNewSequence(o.startIndex,a.endIndex))}return o}},n.prototype._tryParseJSDocOptionalNameRest=function(e){if(e.assertAccumulatedSequenceIsEmpty(),e.peekTokenKind()!==u.EndOfInput){var t=e.createMarker();return this._tryParseJSDocTypeOrValueRest(e,u.LeftSquareBracket,u.RightSquareBracket,t)}},n.prototype._parseParamBlock=function(e,t,r){var i=e.createMarker(),o=this._tryReadSpacingAndNewlines(e),a=this._tryParseUnsupportedJSDocType(e,t,r),l;e.peekTokenKind()===u.LeftSquareBracket&&(e.readToken(),l=e.extractAccumulatedSequence());for(var c="",d=!1;!d;)switch(e.peekTokenKind()){case u.AsciiWord:case u.Period:case u.DollarSign:c+=e.readToken();break;default:d=!0;break}var m=re.explainIfInvalidUnquotedIdentifier(c);if(m!==void 0){e.backtrackToMarker(i);var _=new An({configuration:this._configuration,blockTag:t,parameterName:""}),w=c.length>0?"The "+r+" block should be followed by a valid parameter name: "+m:"The "+r+" block should be followed by a parameter name";return this._parserContext.log.addMessageForTokenSequence(v.ParamTagWithInvalidName,w,t.getTokenSequence(),t),_}var b=e.extractAccumulatedSequence(),S;if(l){S=this._tryParseJSDocOptionalNameRest(e);var k=l;S&&(k=t.getTokenSequence().getNewSequence(l.startIndex,S.endIndex)),this._parserContext.log.addMessageForTokenSequence(v.ParamTagWithInvalidOptionalName,"The "+r+" should not include a JSDoc-style optional name; it must not be enclosed in '[ ]' brackets.",k,t)}var E=this._tryReadSpacingAndNewlines(e),O=this._tryParseUnsupportedJSDocType(e,t,r),$,K,D;return e.peekTokenKind()===u.Hyphen?(e.readToken(),$=e.extractAccumulatedSequence(),K=this._tryReadSpacingAndNewlines(e),D=this._tryParseUnsupportedJSDocType(e,t,r)):this._parserContext.log.addMessageForTokenSequence(v.ParamTagMissingHyphen,"The "+r+" block should be followed by a parameter name and then a hyphen",t.getTokenSequence(),t),new An({parsed:!0,configuration:this._configuration,blockTag:t,spacingBeforeParameterNameExcerpt:o,unsupportedJsdocTypeBeforeParameterNameExcerpt:a,unsupportedJsdocOptionalNameOpenBracketExcerpt:l,parameterNameExcerpt:b,parameterName:c,unsupportedJsdocOptionalNameRestExcerpt:S,spacingAfterParameterNameExcerpt:E,unsupportedJsdocTypeAfterParameterNameExcerpt:O,hyphenExcerpt:$,spacingAfterHyphenExcerpt:K,unsupportedJsdocTypeAfterHyphenExcerpt:D})},n.prototype._pushNode=function(e){this._configuration.docNodeManager.isAllowedChild(g.Paragraph,e.kind)?this._currentSection.appendNodeInParagraph(e):this._currentSection.appendNode(e)},n.prototype._parseBackslashEscape=function(e){e.assertAccumulatedSequenceIsEmpty();var t=e.createMarker();if(e.readToken(),e.peekTokenKind()===u.EndOfInput)return this._backtrackAndCreateError(e,t,v.UnnecessaryBackslash,"A backslash must precede another character that is being escaped");var r=e.readToken();if(!xn.isPunctuation(r.kind))return this._backtrackAndCreateError(e,t,v.UnnecessaryBackslash,"A backslash can only be used to escape a punctuation character");var i=e.extractAccumulatedSequence();return new zn({parsed:!0,configuration:this._configuration,escapeStyle:cr.CommonMarkBackslash,encodedTextExcerpt:i,decodedText:r.toString()})},n.prototype._parseBlockTag=function(e){e.assertAccumulatedSequenceIsEmpty();var t=e.createMarker();if(e.peekTokenKind()!==u.AtSign)return this._backtrackAndCreateError(e,t,v.MissingTag,'Expecting a TSDoc tag starting with "@"');switch(e.peekPreviousTokenKind()){case u.EndOfInput:case u.Spacing:case u.Newline:break;default:return this._backtrackAndCreateError(e,t,v.AtSignInWord,'The "@" character looks like part of a TSDoc tag; use a backslash to escape it')}var r=e.readToken().toString();if(e.peekTokenKind()!==u.AsciiWord)return this._backtrackAndCreateError(e,t,v.AtSignWithoutTagName,'Expecting a TSDoc tag name after "@"; if it is not a tag, use a backslash to escape this character');for(var i=e.createMarker();e.peekTokenKind()===u.AsciiWord;)r+=e.readToken().toString();switch(e.peekTokenKind()){case u.Spacing:case u.Newline:case u.EndOfInput:break;default:var o=e.peekToken().range.toString()[0];return this._backtrackAndCreateError(e,t,v.CharactersAfterBlockTag,'The token "'.concat(r,'" looks like a TSDoc tag but contains an invalid character')+" ".concat(JSON.stringify(o),'; if it is not a tag, use a backslash to escape the "@"'))}if(re.explainIfInvalidTSDocTagName(r)){var a=this._createFailureForTokensSince(e,v.MalformedTagName,"A TSDoc tag name must start with a letter and contain only letters and numbers",i);return this._backtrackAndCreateErrorForFailure(e,t,"",a)}return new Un({parsed:!0,configuration:this._configuration,tagName:r,tagNameExcerpt:e.extractAccumulatedSequence()})},n.prototype._parseInlineTag=function(e){e.assertAccumulatedSequenceIsEmpty();var t=e.createMarker();if(e.peekTokenKind()!==u.LeftCurlyBracket)return this._backtrackAndCreateError(e,t,v.MissingTag,'Expecting a TSDoc tag starting with "{"');e.readToken();var r=e.extractAccumulatedSequence(),i=e.createMarker();if(e.peekTokenKind()!==u.AtSign)return this._backtrackAndCreateError(e,t,v.MalformedInlineTag,'Expecting a TSDoc tag starting with "{@"');for(var o=e.readToken().toString();e.peekTokenKind()===u.AsciiWord;)o+=e.readToken().toString();if(o==="@"){var a=this._createFailureForTokensSince(e,v.MalformedInlineTag,'Expecting a TSDoc inline tag name after the "{@" characters',i);return this._backtrackAndCreateErrorRangeForFailure(e,t,i,"",a)}if(re.explainIfInvalidTSDocTagName(o)){var a=this._createFailureForTokensSince(e,v.MalformedTagName,"A TSDoc tag name must start with a letter and contain only letters and numbers",i);return this._backtrackAndCreateErrorRangeForFailure(e,t,i,"",a)}var l=e.extractAccumulatedSequence(),c=this._tryReadSpacingAndNewlines(e);if(c===void 0&&e.peekTokenKind()!==u.RightCurlyBracket){var d=e.peekToken().range.toString()[0],a=this._createFailureForToken(e,v.CharactersAfterInlineTag,"The character ".concat(JSON.stringify(d)," cannot appear after the TSDoc tag name; expecting a space"));return this._backtrackAndCreateErrorRangeForFailure(e,t,i,"",a)}for(var m=!1;!m;)switch(e.peekTokenKind()){case u.EndOfInput:return this._backtrackAndCreateErrorRange(e,t,i,v.InlineTagMissingRightBrace,'The TSDoc inline tag name is missing its closing "}"');case u.Backslash:if(e.readToken(),!xn.isPunctuation(e.peekTokenKind())){var a=this._createFailureForToken(e,v.UnnecessaryBackslash,"A backslash can only be used to escape a punctuation character");return this._backtrackAndCreateErrorRangeForFailure(e,t,i,"Error reading inline TSDoc tag: ",a)}e.readToken();break;case u.LeftCurlyBracket:{var a=this._createFailureForToken(e,v.InlineTagUnescapedBrace,'The "{" character must be escaped with a backslash when used inside a TSDoc inline tag');return this._backtrackAndCreateErrorRangeForFailure(e,t,i,"",a)}case u.RightCurlyBracket:m=!0;break;default:e.readToken();break}var _=e.tryExtractAccumulatedSequence();e.readToken();var w=e.extractAccumulatedSequence(),b={parsed:!0,configuration:this._configuration,openingDelimiterExcerpt:r,tagNameExcerpt:l,tagName:o,spacingAfterTagNameExcerpt:c,tagContentExcerpt:_,closingDelimiterExcerpt:w},S=o.toUpperCase(),k=new Kr(this._parserContext,_||yt.createEmpty(this._parserContext)),E;switch(S){case G.inheritDoc.tagNameWithUpperCase:E=this._parseInheritDocTag(b,k);break;case G.link.tagNameWithUpperCase:E=this._parseLinkTag(b,k);break;default:E=new Jt(b)}var O=this._parserContext.configuration.tryGetTagDefinitionWithUpperCase(S);return this._validateTagDefinition(O,o,!0,l,E),E},n.prototype._parseInheritDocTag=function(e,t){var r=new Jt(e),i=pr({},e);if(t.peekTokenKind()!==u.EndOfInput){if(i.declarationReference=this._parseDeclarationReference(t,e.tagNameExcerpt,r),!i.declarationReference)return r;if(t.peekTokenKind()!==u.EndOfInput)return t.readToken(),this._parserContext.log.addMessageForTokenSequence(v.InheritDocTagSyntax,"Unexpected character after declaration reference",t.extractAccumulatedSequence(),r),r}return new gn(i)},n.prototype._parseLinkTag=function(e,t){var r=new Jt(e),i=pr({},e);if(!e.tagContentExcerpt)return this._parserContext.log.addMessageForTokenSequence(v.LinkTagEmpty,"The @link tag content is missing",i.tagNameExcerpt,r),r;for(var o=t.peekTokenKind()===u.Slash&&t.peekTokenAfterKind()===u.Slash,a=t.createMarker(),l=o;!l;)switch(t.peekTokenKind()){case u.AsciiWord:case u.Period:case u.Hyphen:case u.Plus:t.readToken();break;case u.Colon:t.readToken(),o=t.peekTokenKind()===u.Slash&&t.peekTokenAfterKind()===u.Slash,l=!0;break;default:l=!0}if(t.backtrackToMarker(a),o){if(!this._parseLinkTagUrlDestination(t,i,e.tagNameExcerpt,r))return r}else if(!this._parseLinkTagCodeDestination(t,i,e.tagNameExcerpt,r))return r;if(t.peekTokenKind()===u.Spacing)throw new Error("Unconsumed spacing encountered after construct");if(t.peekTokenKind()===u.Pipe){t.readToken(),i.pipeExcerpt=t.extractAccumulatedSequence(),i.spacingAfterPipeExcerpt=this._tryReadSpacingAndNewlines(t),l=!1;for(var c=void 0;!l;)switch(t.peekTokenKind()){case u.EndOfInput:l=!0;break;case u.Pipe:case u.LeftCurlyBracket:var d=t.readToken().toString();return this._parserContext.log.addMessageForTokenSequence(v.LinkTagUnescapedText,'The "'.concat(d,'" character may not be used in the link text without escaping it'),t.extractAccumulatedSequence(),r),r;case u.Spacing:case u.Newline:t.readToken();break;default:c=t.createMarker()+1,t.readToken()}var m=t.tryExtractAccumulatedSequence();m&&(c===void 0?i.spacingAfterLinkTextExcerpt=m:c>=m.endIndex?i.linkTextExcerpt=m:(i.linkTextExcerpt=m.getNewSequence(m.startIndex,c),i.spacingAfterLinkTextExcerpt=m.getNewSequence(c,m.endIndex)))}else if(t.peekTokenKind()!==u.EndOfInput)return t.readToken(),this._parserContext.log.addMessageForTokenSequence(v.LinkTagDestinationSyntax,"Unexpected character after link destination",t.extractAccumulatedSequence(),r),r;return new er(i)},n.prototype._parseLinkTagUrlDestination=function(e,t,r,i){for(var o="",a=!1;!a;)switch(e.peekTokenKind()){case u.Spacing:case u.Newline:case u.EndOfInput:case u.Pipe:case u.RightCurlyBracket:a=!0;break;default:o+=e.readToken();break}if(o.length===0)throw new Error("Missing URL in _parseLinkTagUrlDestination()");var l=e.extractAccumulatedSequence(),c=re.explainIfInvalidLinkUrl(o);return c?(this._parserContext.log.addMessageForTokenSequence(v.LinkTagInvalidUrl,c,l,i),!1):(t.urlDestinationExcerpt=l,t.spacingAfterDestinationExcerpt=this._tryReadSpacingAndNewlines(e),!0)},n.prototype._parseLinkTagCodeDestination=function(e,t,r,i){return t.codeDestination=this._parseDeclarationReference(e,r,i),!!t.codeDestination},n.prototype._parseDeclarationReference=function(e,t,r){e.assertAccumulatedSequenceIsEmpty();for(var i=e.createMarker(),o=!1,a=!0,l=!1,c=!1;!c;)switch(e.peekTokenKind()){case u.DoubleQuote:case u.EndOfInput:case u.LeftCurlyBracket:case u.LeftParenthesis:case u.LeftSquareBracket:case u.Newline:case u.Pipe:case u.RightCurlyBracket:case u.RightParenthesis:case u.RightSquareBracket:case u.SingleQuote:case u.Spacing:c=!0;break;case u.PoundSymbol:o=!0,c=!0;break;case u.Slash:case u.AtSign:a&&(l=!0),e.readToken();break;case u.AsciiWord:case u.Period:case u.Hyphen:e.readToken();break;default:a=!1,e.readToken()}if(!o&&l){this._parserContext.log.addMessageForTokenSequence(v.ReferenceMissingHash,'The declaration reference appears to contain a package name or import path, but it is missing the "#" delimiter',e.extractAccumulatedSequence(),r);return}e.backtrackToMarker(i);var d,m,_,w;if(o){if(e.peekTokenKind()!==u.Period){var b=e.peekTokenKind()===u.AtSign,S=!1;for(c=!1;!c;)switch(e.peekTokenKind()){case u.EndOfInput:throw new Error("Expecting pound symbol");case u.Slash:b&&!S?(e.readToken(),S=!0):c=!0;break;case u.PoundSymbol:c=!0;break;default:e.readToken()}if(!e.isAccumulatedSequenceEmpty()){d=e.extractAccumulatedSequence();var k=re.explainIfInvalidPackageName(d.toString());if(k){this._parserContext.log.addMessageForTokenSequence(v.ReferenceMalformedPackageName,k,d,r);return}}}for(c=!1;!c;)switch(e.peekTokenKind()){case u.EndOfInput:throw new Error("Expecting pound symbol");case u.PoundSymbol:c=!0;break;default:e.readToken()}if(!e.isAccumulatedSequenceEmpty()){m=e.extractAccumulatedSequence();var k=re.explainIfInvalidImportPath(m.toString(),!!d);if(k){this._parserContext.log.addMessageForTokenSequence(v.ReferenceMalformedImportPath,k,m,r);return}}if(e.peekTokenKind()!==u.PoundSymbol)throw new Error("Expecting pound symbol");if(e.readToken(),_=e.extractAccumulatedSequence(),w=this._tryReadSpacingAndNewlines(e),d===void 0&&m===void 0){this._parserContext.log.addMessageForTokenSequence(v.ReferenceHashSyntax,"The hash character must be preceded by a package name or import path",_,r);return}}var E=[];for(c=!1;!c;)switch(e.peekTokenKind()){case u.Period:case u.LeftParenthesis:case u.AsciiWord:case u.Colon:case u.LeftSquareBracket:case u.DoubleQuote:var O=E.length>0,$=this._parseMemberReference(e,O,t,r);if(!$)return;E.push($);break;default:c=!0}if(d===void 0&&m===void 0&&E.length===0){this._parserContext.log.addMessageForTokenSequence(v.MissingReference,"Expecting a declaration reference",t,r);return}return new Vn({parsed:!0,configuration:this._configuration,packageNameExcerpt:d,importPathExcerpt:m,importHashExcerpt:_,spacingAfterImportHashExcerpt:w,memberReferences:E})},n.prototype._parseMemberReference=function(e,t,r,i){var o={parsed:!0,configuration:this._configuration};if(t){if(e.peekTokenKind()!==u.Period){this._parserContext.log.addMessageForTokenSequence(v.ReferenceMissingDot,"Expecting a period before the next component of a declaration reference",r,i);return}e.readToken(),o.dotExcerpt=e.extractAccumulatedSequence(),o.spacingAfterDotExcerpt=this._tryReadSpacingAndNewlines(e)}if(e.peekTokenKind()===u.LeftParenthesis&&(e.readToken(),o.leftParenthesisExcerpt=e.extractAccumulatedSequence(),o.spacingAfterLeftParenthesisExcerpt=this._tryReadSpacingAndNewlines(e)),e.peekTokenKind()===u.LeftSquareBracket){if(o.memberSymbol=this._parseMemberSymbol(e,i),!o.memberSymbol)return}else if(o.memberIdentifier=this._parseMemberIdentifier(e,r,i),!o.memberIdentifier)return;if(o.spacingAfterMemberExcerpt=this._tryReadSpacingAndNewlines(e),e.peekTokenKind()===u.Colon){if(e.readToken(),o.colonExcerpt=e.extractAccumulatedSequence(),o.spacingAfterColonExcerpt=this._tryReadSpacingAndNewlines(e),!o.leftParenthesisExcerpt){this._parserContext.log.addMessageForTokenSequence(v.ReferenceSelectorMissingParens,"Syntax error in declaration reference: the member selector must be enclosed in parentheses",o.colonExcerpt,i);return}if(o.selector=this._parseMemberSelector(e,o.colonExcerpt,i),!o.selector)return;o.spacingAfterSelectorExcerpt=this._tryReadSpacingAndNewlines(e)}else if(o.leftParenthesisExcerpt){this._parserContext.log.addMessageForTokenSequence(v.ReferenceMissingColon,"Expecting a colon after the identifier because the expression is in parentheses",o.leftParenthesisExcerpt,i);return}if(o.leftParenthesisExcerpt){if(e.peekTokenKind()!==u.RightParenthesis){this._parserContext.log.addMessageForTokenSequence(v.ReferenceMissingRightParen,"Expecting a matching right parenthesis",o.leftParenthesisExcerpt,i);return}e.readToken(),o.rightParenthesisExcerpt=e.extractAccumulatedSequence(),o.spacingAfterRightParenthesisExcerpt=this._tryReadSpacingAndNewlines(e)}return new tr(o)},n.prototype._parseMemberSymbol=function(e,t){if(e.peekTokenKind()!==u.LeftSquareBracket)throw new Error('Expecting "["');e.readToken();var r=e.extractAccumulatedSequence(),i=this._tryReadSpacingAndNewlines(e),o=this._parseDeclarationReference(e,r,t);if(!o){this._parserContext.log.addMessageForTokenSequence(v.ReferenceSymbolSyntax,"Missing declaration reference in symbol reference",r,t);return}if(e.peekTokenKind()!==u.RightSquareBracket){this._parserContext.log.addMessageForTokenSequence(v.ReferenceMissingRightBracket,"Missing closing square bracket for symbol reference",r,t);return}e.readToken();var a=e.extractAccumulatedSequence();return new rr({parsed:!0,configuration:this._configuration,leftBracketExcerpt:r,spacingAfterLeftBracketExcerpt:i,symbolReference:o,rightBracketExcerpt:a})},n.prototype._parseMemberIdentifier=function(e,t,r){var i=void 0,o=void 0;if(e.peekTokenKind()===u.DoubleQuote){for(e.readToken(),i=e.extractAccumulatedSequence();e.peekTokenKind()!==u.DoubleQuote;){if(e.peekTokenKind()===u.EndOfInput){this._parserContext.log.addMessageForTokenSequence(v.ReferenceMissingQuote,"Unexpected end of input inside quoted member identifier",i,r);return}e.readToken()}if(e.isAccumulatedSequenceEmpty()){this._parserContext.log.addMessageForTokenSequence(v.ReferenceEmptyIdentifier,"The quoted identifier cannot be empty",i,r);return}var a=e.extractAccumulatedSequence();return e.readToken(),o=e.extractAccumulatedSequence(),new hn({parsed:!0,configuration:this._configuration,leftQuoteExcerpt:i,identifierExcerpt:a,rightQuoteExcerpt:o})}else{for(var l=!1;!l;)switch(e.peekTokenKind()){case u.AsciiWord:case u.DollarSign:e.readToken();break;default:l=!0;break}if(e.isAccumulatedSequenceEmpty()){this._parserContext.log.addMessageForTokenSequence(v.ReferenceMissingIdentifier,"Syntax error in declaration reference: expecting a member identifier",t,r);return}var a=e.extractAccumulatedSequence(),c=a.toString(),d=re.explainIfInvalidUnquotedMemberIdentifier(c);if(d){this._parserContext.log.addMessageForTokenSequence(v.ReferenceUnquotedIdentifier,d,a,r);return}return new hn({parsed:!0,configuration:this._configuration,leftQuoteExcerpt:i,identifierExcerpt:a,rightQuoteExcerpt:o})}},n.prototype._parseMemberSelector=function(e,t,r){e.peekTokenKind()!==u.AsciiWord&&this._parserContext.log.addMessageForTokenSequence(v.ReferenceMissingLabel,"Expecting a selector label after the colon",t,r);var i=e.readToken().toString(),o=e.extractAccumulatedSequence(),a=new nr({parsed:!0,configuration:this._configuration,selectorExcerpt:o,selector:i});if(a.errorMessage){this._parserContext.log.addMessageForTokenSequence(v.ReferenceSelectorSyntax,a.errorMessage,o,r);return}return a},n.prototype._parseHtmlStartTag=function(e){e.assertAccumulatedSequenceIsEmpty();var t=e.createMarker(),r=e.readToken();if(r.kind!==u.LessThan)throw new Error('Expecting an HTML tag starting with "<"');var i=e.extractAccumulatedSequence(),o=this._parseHtmlName(e);if(yn(o))return this._backtrackAndCreateErrorForFailure(e,t,"Invalid HTML element: ",o);for(var a=this._tryReadSpacingAndNewlines(e),l=[];e.peekTokenKind()===u.AsciiWord;){var c=this._parseHtmlAttribute(e);if(yn(c))return this._backtrackAndCreateErrorForFailure(e,t,"The HTML element has an invalid attribute: ",c);l.push(c)}e.assertAccumulatedSequenceIsEmpty();var d=e.createMarker(),m=!1;if(e.peekTokenKind()===u.Slash&&(e.readToken(),m=!0),e.peekTokenKind()!==u.GreaterThan){var _=this._createFailureForTokensSince(e,v.HtmlTagMissingGreaterThan,'Expecting an attribute or ">" or "/>"',d);return this._backtrackAndCreateErrorForFailure(e,t,"The HTML tag has invalid syntax: ",_)}e.readToken();var w=e.extractAccumulatedSequence();return new Zn({parsed:!0,configuration:this._configuration,openingDelimiterExcerpt:i,nameExcerpt:o,spacingAfterNameExcerpt:a,htmlAttributes:l,selfClosingTag:m,closingDelimiterExcerpt:w})},n.prototype._parseHtmlAttribute=function(e){e.assertAccumulatedSequenceIsEmpty();var t=this._parseHtmlName(e);if(yn(t))return t;var r=this._tryReadSpacingAndNewlines(e);if(e.peekTokenKind()!==u.Equals)return this._createFailureForToken(e,v.HtmlTagMissingEquals,'Expecting "=" after HTML attribute name');e.readToken();var i=e.extractAccumulatedSequence(),o=this._tryReadSpacingAndNewlines(e),a=this._parseHtmlString(e);if(yn(a))return a;var l=e.extractAccumulatedSequence(),c=this._tryReadSpacingAndNewlines(e);return new Qn({parsed:!0,configuration:this._configuration,nameExcerpt:t,spacingAfterNameExcerpt:r,equalsExcerpt:i,spacingAfterEqualsExcerpt:o,valueExcerpt:l,spacingAfterValueExcerpt:c})},n.prototype._parseHtmlString=function(e){var t=e.createMarker(),r=e.peekTokenKind();if(r!==u.DoubleQuote&&r!==u.SingleQuote)return this._createFailureForToken(e,v.HtmlTagMissingString,"Expecting an HTML string starting with a single-quote or double-quote character");e.readToken();for(var i="";;){var o=e.peekTokenKind();if(o===r){e.readToken();break}if(o===u.EndOfInput||o===u.Newline)return this._createFailureForToken(e,v.HtmlStringMissingQuote,"The HTML string is missing its closing quote",t);i+=e.readToken().toString()}return e.peekTokenKind()===u.AsciiWord?this._createFailureForToken(e,v.TextAfterHtmlString,"The next character after a closing quote must be spacing or punctuation"):i},n.prototype._parseHtmlEndTag=function(e){e.assertAccumulatedSequenceIsEmpty();var t=e.createMarker(),r=e.peekToken();if(r.kind!==u.LessThan)return this._backtrackAndCreateError(e,t,v.MissingHtmlEndTag,'Expecting an HTML tag starting with "" for the HTML tag');return this._backtrackAndCreateErrorForFailure(e,t,"",c)}e.readToken();var d=e.extractAccumulatedSequence();return new Xn({parsed:!0,configuration:this._configuration,openingDelimiterExcerpt:o,nameExcerpt:a,spacingAfterNameExcerpt:l,closingDelimiterExcerpt:d})},n.prototype._parseHtmlName=function(e){var t=e.createMarker();if(e.peekTokenKind()===u.Spacing)return this._createFailureForTokensSince(e,v.MalformedHtmlName,"A space is not allowed here",t);for(var r=!1;!r;)switch(e.peekTokenKind()){case u.Hyphen:case u.Period:case u.AsciiWord:e.readToken();break;default:r=!0;break}var i=e.tryExtractAccumulatedSequence();if(!i)return this._createFailureForToken(e,v.MalformedHtmlName,"Expecting an HTML name");var o=i.toString(),a=re.explainIfInvalidHtmlName(o);return a?this._createFailureForTokensSince(e,v.MalformedHtmlName,a,t):this._configuration.validation.reportUnsupportedHtmlElements&&!this._configuration.isHtmlElementSupported(o)?this._createFailureForToken(e,v.UnsupportedHtmlElementName,"The HTML element name ".concat(JSON.stringify(o)," is not defined by your TSDoc configuration"),t):i},n.prototype._parseFencedCode=function(e){e.assertAccumulatedSequenceIsEmpty();var t=e.createMarker(),r=t+2;switch(e.peekPreviousTokenKind()){case u.Newline:case u.EndOfInput:break;default:return this._backtrackAndCreateErrorRange(e,t,r,v.CodeFenceOpeningIndent,"The opening backtick for a code fence must appear at the start of the line")}var i="";if(i+=e.readToken(),i+=e.readToken(),i+=e.readToken(),i!=="```")throw new Error("Expecting three backticks");for(var o=e.extractAccumulatedSequence();e.peekTokenKind()===u.Spacing;)e.readToken();for(var a=e.tryExtractAccumulatedSequence(),l=!1,c=void 0;!l;)switch(e.peekTokenKind()){case u.Spacing:case u.Newline:c===void 0&&(c=e.createMarker()),e.peekTokenKind()===u.Newline&&(l=!0),e.readToken();break;case u.Backtick:var d=this._createFailureForToken(e,v.CodeFenceSpecifierSyntax,"The language specifier cannot contain backtick characters");return this._backtrackAndCreateErrorRangeForFailure(e,t,r,"Error parsing code fence: ",d);case u.EndOfInput:var m=this._createFailureForToken(e,v.CodeFenceMissingDelimiter,"Missing closing delimiter");return this._backtrackAndCreateErrorRangeForFailure(e,t,r,"Error parsing code fence: ",m);default:c=void 0,e.readToken();break}var _=e.extractAccumulatedSequence(),w=_.getNewSequence(_.startIndex,c),b=_.getNewSequence(c,_.endIndex),S=-1,k=-1;l=!1;for(var E;!l;)switch(e.peekTokenKind()){case u.EndOfInput:var m=this._createFailureForToken(e,v.CodeFenceMissingDelimiter,"Missing closing delimiter");return this._backtrackAndCreateErrorRangeForFailure(e,t,r,"Error parsing code fence: ",m);case u.Newline:for(E=e.readToken(),S=e.createMarker();e.peekTokenKind()===u.Spacing;)E=e.readToken();if(e.peekTokenKind()!==u.Backtick||(k=e.createMarker(),e.readToken(),e.peekTokenKind()!==u.Backtick)||(e.readToken(),e.peekTokenKind()!==u.Backtick))break;e.readToken(),l=!0;break;default:e.readToken();break}E.kind!==u.Newline&&this._parserContext.log.addMessageForTextRange(v.CodeFenceClosingIndent,"The closing delimiter for a code fence must not be indented",E.range);var O=e.extractAccumulatedSequence(),$=O.getNewSequence(O.startIndex,S),K=O.getNewSequence(S,k),D=O.getNewSequence(k,O.endIndex);for(l=!1;!l;)switch(e.peekTokenKind()){case u.Spacing:e.readToken();break;case u.Newline:l=!0,e.readToken();break;case u.EndOfInput:l=!0;break;default:this._parserContext.log.addMessageForTextRange(v.CodeFenceClosingSyntax,"Unexpected characters after closing delimiter for code fence",e.peekToken().range),l=!0;break}var H=e.tryExtractAccumulatedSequence();return new Jn({parsed:!0,configuration:this._configuration,openingFenceExcerpt:o,spacingAfterOpeningFenceExcerpt:a,languageExcerpt:w,spacingAfterLanguageExcerpt:b,codeExcerpt:$,spacingBeforeClosingFenceExcerpt:K,closingFenceExcerpt:D,spacingAfterClosingFenceExcerpt:H})},n.prototype._parseCodeSpan=function(e){e.assertAccumulatedSequenceIsEmpty();var t=e.createMarker();if(e.peekTokenKind()!==u.Backtick)throw new Error('Expecting a code span starting with a backtick character "`"');e.readToken();for(var r=e.extractAccumulatedSequence(),i=void 0,o=void 0;;){var a=e.peekTokenKind();if(a===u.Backtick){if(e.isAccumulatedSequenceEmpty())return this._backtrackAndCreateErrorRange(e,t,t+1,v.CodeSpanEmpty,"A code span must contain at least one character between the backticks");i=e.extractAccumulatedSequence(),e.readToken(),o=e.extractAccumulatedSequence();break}if(a===u.EndOfInput||a===u.Newline)return this._backtrackAndCreateError(e,t,v.CodeSpanMissingDelimiter,"The code span is missing its closing backtick");e.readToken()}return new Gn({parsed:!0,configuration:this._configuration,openingDelimiterExcerpt:r,codeExcerpt:i,closingDelimiterExcerpt:o})},n.prototype._tryReadSpacingAndNewlines=function(e){var t=!1;do switch(e.peekTokenKind()){case u.Spacing:case u.Newline:e.readToken();break;default:t=!0;break}while(!t);return e.tryExtractAccumulatedSequence()},n.prototype._createError=function(e,t,r){e.readToken();var i=e.extractAccumulatedSequence(),o=new Pt({parsed:!0,configuration:this._configuration,textExcerpt:i,messageId:t,errorMessage:r,errorLocation:i});return this._parserContext.log.addMessageForDocErrorText(o),o},n.prototype._backtrackAndCreateError=function(e,t,r,i){return e.backtrackToMarker(t),this._createError(e,r,i)},n.prototype._backtrackAndCreateErrorRange=function(e,t,r,i,o){for(e.backtrackToMarker(t);e.createMarker()!==r;)e.readToken();e.peekTokenKind()!==u.EndOfInput&&e.readToken();var a=e.extractAccumulatedSequence(),l=new Pt({parsed:!0,configuration:this._configuration,textExcerpt:a,messageId:i,errorMessage:o,errorLocation:a});return this._parserContext.log.addMessageForDocErrorText(l),l},n.prototype._backtrackAndCreateErrorForFailure=function(e,t,r,i){e.backtrackToMarker(t),e.readToken();var o=e.extractAccumulatedSequence(),a=new Pt({parsed:!0,configuration:this._configuration,textExcerpt:o,messageId:i.failureMessageId,errorMessage:r+i.failureMessage,errorLocation:i.failureLocation});return this._parserContext.log.addMessageForDocErrorText(a),a},n.prototype._backtrackAndCreateErrorRangeForFailure=function(e,t,r,i,o){for(e.backtrackToMarker(t);e.createMarker()!==r;)e.readToken();e.peekTokenKind()!==u.EndOfInput&&e.readToken();var a=e.extractAccumulatedSequence(),l=new Pt({parsed:!0,configuration:this._configuration,textExcerpt:a,messageId:o.failureMessageId,errorMessage:i+o.failureMessage,errorLocation:o.failureLocation});return this._parserContext.log.addMessageForDocErrorText(l),l},n.prototype._createFailureForToken=function(e,t,r,i){i||(i=e.createMarker());var o=new yt({parserContext:this._parserContext,startIndex:i,endIndex:i+1});return{failureMessageId:t,failureMessage:r,failureLocation:o}},n.prototype._createFailureForTokensSince=function(e,t,r,i){var o=e.createMarker();if(osetTimeout(e,n))}function so(){return/(<%(?:-|_)?\s*[*~]{0,1})\+((?:.|\s)*?%>)/g}function rs(n,e){e=(0,Te.normalizePath)(e);let t=n.vault.getAbstractFileByPath(e);if(!t)throw new P(`Folder "${e}" doesn't exist`);if(!(t instanceof Te.TFolder))throw new P(`${e} is a file, not a folder`);return t}function Mt(n,e){e=(0,Te.normalizePath)(e);let t=n.vault.getAbstractFileByPath(e);if(!t)throw new P(`File "${e}" doesn't exist`);if(!(t instanceof Te.TFile))throw new P(`${e} is a folder, not a file`);return t}function Je(n,e){let t=rs(n,e),r=[];return Te.Vault.recurseChildren(t,i=>{i instanceof Te.TFile&&r.push(i)}),r.sort((i,o)=>i.path.localeCompare(o.path)),r}async function co(n,e){return await Promise.all(e.map(async r=>{let i=await n.vault.cachedRead(r);return is(r,i)}))}function is(n,e){let r=new Rr().parseString(e),i=new Yr(n);return i.description=os(r.docComment.summarySection),i.returns=as(r.docComment.returnsBlock),i.arguments=ss(r.docComment.params),i}function os(n){try{return n.nodes.map(t=>t.getChildNodes().filter(r=>r instanceof Ve).map(r=>r.text).join(` +var Gi=Object.create;var Lt=Object.defineProperty;var Ri=Object.getOwnPropertyDescriptor;var Vi=Object.getOwnPropertyNames;var zi=Object.getPrototypeOf,Ji=Object.prototype.hasOwnProperty;var Or=r=>Lt(r,"__esModule",{value:!0});var Wi=(r,e)=>{Or(r);for(var t in e)Lt(r,t,{get:e[t],enumerable:!0})},Qi=(r,e,t)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of Vi(e))!Ji.call(r,n)&&n!=="default"&&Lt(r,n,{get:()=>e[n],enumerable:!(t=Ri(e,n))||t.enumerable});return r},U=r=>Qi(Or(Lt(r!=null?Gi(zi(r)):{},"default",r&&r.__esModule&&"default"in r?{get:()=>r.default,enumerable:!0}:{value:r,enumerable:!0})),r);var qr=(()=>{for(var r=new Uint8Array(128),e=0;e<64;e++)r[e<26?e+65:e<52?e+71:e<62?e-4:e*4-205]=e;return t=>{for(var n=t.length,i=new Uint8Array((n-(t[n-1]=="=")-(t[n-2]=="="))*3/4|0),o=0,s=0;o>4,i[s++]=l<<4|d>>2,i[s++]=d<<6|A}return i}})();Wi(exports,{default:()=>wr});var _n=U(require("obsidian"));var N=U(require("obsidian"));var Lr=U(require("obsidian"));function V(r){let e=new Lr.Notice("",8e3),t=createFragment(n=>{n.createEl("b",{text:"Templater Error"}),n.createEl("span",{text:":"}),n.createEl("br"),n.createEl("span",{text:r.message}),r instanceof b&&r.console_msg&&(n.createEl("br"),n.createEl("span",{text:"Check console for more information"}),console.error("Templater Error:",r.message,` +`,r.console_msg))});e.noticeEl.appendChild(t)}var b=class extends Error{constructor(e,t){super(e);this.console_msg=t;this.name=this.constructor.name,Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor)}};async function se(r,e){try{return await r()}catch(t){return t instanceof b?V(t):V(new b(e,t.message)),null}}function ce(r,e){try{return r()}catch(t){return V(new b(e,t.message)),null}}var R=function(){function r(){}return r.explainIfInvalidTSDocTagName=function(e){if(e[0]!=="@")return'A TSDoc tag name must start with an "@" symbol';if(!r._tsdocTagNameRegExp.test(e))return"A TSDoc tag name must start with a letter and contain only letters and numbers"},r.validateTSDocTagName=function(e){var t=r.explainIfInvalidTSDocTagName(e);if(t)throw new Error(t)},r.explainIfInvalidLinkUrl=function(e){if(e.length===0)return"The URL cannot be empty";if(!r._urlSchemeRegExp.test(e))return'An @link URL must begin with a scheme comprised only of letters and numbers followed by "://". (For general URLs, use an HTML "" tag instead.)';if(!r._urlSchemeAfterRegExp.test(e))return'An @link URL must have at least one character after "://"'},r.explainIfInvalidHtmlName=function(e){if(!r._htmlNameRegExp.test(e))return"An HTML name must be an ASCII letter followed by zero or more letters, digits, or hyphens"},r.validateHtmlName=function(e){var t=r.explainIfInvalidHtmlName(e);if(t)throw new Error(t)},r.explainIfInvalidPackageName=function(e){if(e.length===0)return"The package name cannot be an empty string";if(!r._validPackageNameRegExp.test(e))return"The package name ".concat(JSON.stringify(e)," is not a valid package name")},r.explainIfInvalidImportPath=function(e,t){if(e.length>0){if(e.indexOf("//")>=0)return'An import path must not contain "//"';if(e[e.length-1]==="/")return'An import path must not end with "/"';if(!t&&e[0]==="/")return'An import path must not start with "/" unless prefixed by a package name'}},r.isSystemSelector=function(e){return r._systemSelectors.has(e)},r.explainIfInvalidUnquotedIdentifier=function(e){if(e.length===0)return"The identifier cannot be an empty string";if(r._identifierBadCharRegExp.test(e))return"The identifier cannot non-word characters";if(r._identifierNumberStartRegExp.test(e))return"The identifier must not start with a number"},r.explainIfInvalidUnquotedMemberIdentifier=function(e){var t=r.explainIfInvalidUnquotedIdentifier(e);if(t!==void 0)return t;if(r.isSystemSelector(e))return'The identifier "'.concat(e,'" must be quoted because it is a TSDoc system selector name')},r._tsdocTagNameRegExp=/^@[a-z][a-z0-9]*$/i,r._urlSchemeRegExp=/^[a-z][a-z0-9]*\:\/\//i,r._urlSchemeAfterRegExp=/^[a-z][a-z0-9]*\:\/\/./i,r._htmlNameRegExp=/^[a-z]+[a-z0-9\-]*$/i,r._identifierBadCharRegExp=/[^a-z0-9_$]/i,r._identifierNumberStartRegExp=/^[0-9]/,r._validPackageNameRegExp=/^(?:@[a-z0-9\-_\.]+\/)?[a-z0-9\-_\.]+$/i,r._systemSelectors=new Set(["instance","static","constructor","class","enum","function","interface","namespace","type","variable"]),r}();var Cn=function(){function r(){this._docNodeDefinitionsByKind=new Map,this._docNodeDefinitionsByConstructor=new Map}return r.prototype.registerDocNodes=function(e,t){var n=R.explainIfInvalidPackageName(e);if(n)throw new Error("Invalid NPM package name: "+n);for(var i=0,o=t;i0&&i.appendNodes(n),i}return Object.defineProperty(e.prototype,"nodes",{get:function(){return this._nodes},enumerable:!1,configurable:!0}),e.prototype.appendNode=function(t){if(!this.configuration.docNodeManager.isAllowedChild(this.kind,t.kind))throw new Error("The TSDocConfiguration does not allow a ".concat(this.kind," node to")+" contain a node of type ".concat(t.kind));this._nodes.push(t)},e.prototype.appendNodes=function(t){for(var n=0,i=t;n0){var i=this.nodes[this.nodes.length-1];i.kind===g.Paragraph&&(n=i)}n||(n=new ke({configuration:this.configuration}),this.appendNode(n)),n.appendNode(t)},e.prototype.appendNodesInParagraph=function(t){for(var n=0,i=t;n1){var e=this._chunks.join("");this._chunks.length=1,this._chunks[0]=e}return this._chunks[0]},r}();var Kr=function(){function r(){}return r.transform=function(e){for(var t=[],n=!1,i=[],o=[],s=!1,u=0,l=e.nodes;u0&&(n&&(i.push(" "),n=!1),i.push(F),o.push(d),s=!0),M&&s&&(n=!0);break;case g.SoftBreak:s&&(n=!0),o.push(d);break;default:n&&(i.push(" "),n=!1),i.length>0&&(t.push(new xe({configuration:e.configuration,text:i.join("")})),i.length=0,o.length=0),t.push(d),s=!0}}i.length>0&&(t.push(new xe({configuration:e.configuration,text:i.join("")})),i.length=0,o.length=0);var K=new ke({configuration:e.configuration});return K.appendNodes(t),K},r}();var Fn=function(){function r(){}return r.trimSpacesInParagraph=function(e){return Kr.transform(e)},r}();var Bn=function(r,e,t){if(t||arguments.length===2)for(var n=0,i=e.length,o;n0&&(this._ensureLineSkipped(),this._renderNodes(s.modifierTagSet.nodes));break;case g.DeclarationReference:var u=e;this._writeContent(u.packageName),this._writeContent(u.importPath),(u.packageName!==void 0||u.importPath!==void 0)&&this._writeContent("#"),this._renderNodes(u.memberReferences);break;case g.ErrorText:var l=e;this._writeContent(l.text);break;case g.EscapedText:var d=e;this._writeContent(d.encodedText);break;case g.FencedCode:var A=e;this._ensureAtStartOfLine(),this._writeContent("```"),this._writeContent(A.language),this._writeNewline(),this._writeContent(A.code),this._writeContent("```"),this._writeNewline(),this._writeNewline();break;case g.HtmlAttribute:var w=e;this._writeContent(w.name),this._writeContent(w.spacingAfterName),this._writeContent("="),this._writeContent(w.spacingAfterEquals),this._writeContent(w.value),this._writeContent(w.spacingAfterValue);break;case g.HtmlEndTag:var E=e;this._writeContent("");break;case g.HtmlStartTag:var M=e;this._writeContent("<"),this._writeContent(M.name),this._writeContent(M.spacingAfterName);for(var F=M.spacingAfterName===void 0||M.spacingAfterName.length===0,K=0,D=M.htmlAttributes;K":">");break;case g.InheritDocTag:var ie=e;this._renderInlineTag(ie,function(){ie.declarationReference&&(t._writeContent(" "),t._renderNode(ie.declarationReference))});break;case g.InlineTag:var oe=e;this._renderInlineTag(oe,function(){oe.tagContent.length>0&&(t._writeContent(" "),t._writeContent(oe.tagContent))});break;case g.LinkTag:var z=e;this._renderInlineTag(z,function(){(z.urlDestination!==void 0||z.codeDestination!==void 0)&&(z.urlDestination!==void 0?(t._writeContent(" "),t._writeContent(z.urlDestination)):z.codeDestination!==void 0&&(t._writeContent(" "),t._renderNode(z.codeDestination))),z.linkText!==void 0&&(t._writeContent(" "),t._writeContent("|"),t._writeContent(" "),t._writeContent(z.linkText))});break;case g.MemberIdentifier:var Ke=e;Ke.hasQuotes?(this._writeContent('"'),this._writeContent(Ke.identifier),this._writeContent('"')):this._writeContent(Ke.identifier);break;case g.MemberReference:var fe=e;fe.hasDot&&this._writeContent("."),fe.selector&&this._writeContent("("),fe.memberSymbol?this._renderNode(fe.memberSymbol):this._renderNode(fe.memberIdentifier),fe.selector&&(this._writeContent(":"),this._renderNode(fe.selector),this._writeContent(")"));break;case g.MemberSelector:var xn=e;this._writeContent(xn.selector);break;case g.MemberSymbol:var Pt=e;this._writeContent("["),this._renderNode(Pt.symbolReference),this._writeContent("]");break;case g.Section:var yn=e;this._renderNodes(yn.nodes);break;case g.Paragraph:var dt=Fn.trimSpacesInParagraph(e);dt.nodes.length>0&&(this._hangingParagraph?this._hangingParagraph=!1:this._ensureLineSkipped(),this._renderNodes(dt.nodes),this._writeNewline());break;case g.ParamBlock:var h=e;this._ensureLineSkipped(),this._renderNode(h.blockTag),this._writeContent(" "),this._writeContent(h.parameterName),this._writeContent(" - "),this._hangingParagraph=!0,this._renderNode(h.content),this._hangingParagraph=!1;break;case g.ParamCollection:var k=e;this._renderNodes(k.blocks);break;case g.PlainText:var f=e;this._writeContent(f.text);break}},r.prototype._renderInlineTag=function(e,t){this._writeContent("{"),this._writeContent(e.tagName),t(),this._writeContent("}")},r.prototype._renderNodes=function(e){for(var t=0,n=e;t1){for(var n=!0,i=0,o=t;i0?this.params:void 0,this.typeParams.count>0?this.typeParams:void 0,this.returnsBlock],this.customBlocks,!0),this.seeBlocks,!0),[this.inheritDocTag],!1),this.modifierTagSet.nodes,!0)},e.prototype.emitAsTsdoc=function(){var t=new Se,n=new Ce;return n.renderComment(t,this),t.toString()},e}(v);var co=function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,i){n.__proto__=i}||function(n,i){for(var o in i)Object.prototype.hasOwnProperty.call(i,o)&&(n[o]=i[o])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function n(){this.constructor=e}e.prototype=t===null?Object.create(t):(n.prototype=t.prototype,new n)}}(),lo=function(r,e,t){if(t||arguments.length===2)for(var n=0,i=e.length,o;n=t},r._scanTextContent=function(e,t,n){for(var i=0,o=e;i=t||(n+=r._scanTextContent(s.getChildNodes(),t,n),n>=t))break}return n},r._countNonSpaceCharacters=function(e){for(var t=0,n=e.length,i=0;ithis.buffer.length)return{line:0,column:0};for(var t=1,n=1,i=0;ithis.buffer.length)throw new Error("TextRange.pos cannot exceed the associated text buffer length");if(this.end>this.buffer.length)throw new Error("TextRange.end cannot exceed the associated text buffer length")},r.empty=new r("",0,0),r}();var vt=function(){function r(e){this.messageId=e.messageId,this.unformattedText=e.messageText,this.textRange=e.textRange,this.tokenSequence=e.tokenSequence,this.docNode=e.docNode,this._text=void 0}return r._formatMessageText=function(e,t){if(e||(e="An unknown error occurred"),t.pos!==0||t.end!==0){var n=t.getLocation(t.pos);if(n.line)return"(".concat(n.line,",").concat(n.column,"): ")+e}return e},Object.defineProperty(r.prototype,"text",{get:function(){return this._text===void 0&&(this._text=r._formatMessageText(this.unformattedText,this.textRange)),this._text},enumerable:!1,configurable:!0}),r.prototype.toString=function(){return this.text},r}();var On=function(){function r(){this._messages=[]}return Object.defineProperty(r.prototype,"messages",{get:function(){return this._messages},enumerable:!1,configurable:!0}),r.prototype.addMessage=function(e){this._messages.push(e)},r.prototype.addMessageForTextRange=function(e,t,n){this.addMessage(new vt({messageId:e,messageText:t,textRange:n}))},r.prototype.addMessageForTokenSequence=function(e,t,n,i){this.addMessage(new vt({messageId:e,messageText:t,textRange:n.getContainingTextRange(),tokenSequence:n,docNode:i}))},r.prototype.addMessageForDocErrorText=function(e){var t;e.textExcerpt?t=e.textExcerpt:t=e.errorLocation,this.addMessage(new vt({messageId:e.messageId,messageText:e.errorMessage,textRange:t.getContainingTextRange(),tokenSequence:t,docNode:e}))},r}();var qn=function(){function r(e,t){this.commentRange=ye.empty,this.lines=[],this.tokens=[],this.configuration=e,this.sourceRange=t,this.docComment=new Kt({configuration:this.configuration}),this.log=new On}return r}();var Oe=function(){function r(e){this.parserContext=e.parserContext,this._startIndex=e.startIndex,this._endIndex=e.endIndex,this._validateBounds()}return r.createEmpty=function(e){return new r({parserContext:e,startIndex:0,endIndex:0})},Object.defineProperty(r.prototype,"startIndex",{get:function(){return this._startIndex},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"endIndex",{get:function(){return this._endIndex},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"tokens",{get:function(){return this.parserContext.tokens.slice(this._startIndex,this._endIndex)},enumerable:!1,configurable:!0}),r.prototype.getNewSequence=function(e,t){return new r({parserContext:this.parserContext,startIndex:e,endIndex:t})},r.prototype.getContainingTextRange=function(){return this.isEmpty()?ye.empty:this.parserContext.sourceRange.getNewRange(this.parserContext.tokens[this._startIndex].range.pos,this.parserContext.tokens[this._endIndex-1].range.end)},r.prototype.isEmpty=function(){return this._startIndex===this._endIndex},r.prototype.toString=function(){return this.tokens.map(function(e){return e.toString()}).join("")},r.prototype._validateBounds=function(){if(this.startIndex<0)throw new Error("TokenSequence.startIndex cannot be negative");if(this.endIndex<0)throw new Error("TokenSequence.endIndex cannot be negative");if(this.endIndexthis.parserContext.tokens.length)throw new Error("TokenSequence.startIndex cannot exceed the associated token array");if(this.endIndex>this.parserContext.tokens.length)throw new Error("TokenSequence.endIndex cannot exceed the associated token array")},r}();var W;(function(r){r[r.BeginComment1=0]="BeginComment1",r[r.BeginComment2=1]="BeginComment2",r[r.CollectingFirstLine=2]="CollectingFirstLine",r[r.CollectingLine=3]="CollectingLine",r[r.AdvancingLine=4]="AdvancingLine",r[r.Done=5]="Done"})(W||(W={}));var Gr=function(){function r(){}return r.extract=function(e){for(var t=e.sourceRange,n=t.buffer,i=0,o=0,s=0,u=0,l=t.pos,d=W.BeginComment1,A=[];d!==W.Done;){if(l>=t.end)switch(d){case W.BeginComment1:case W.BeginComment2:return e.log.addMessageForTextRange(j.CommentNotFound,'Expecting a "/**" comment',t),!1;default:return e.log.addMessageForTextRange(j.CommentMissingClosingDelimiter,"Unexpected end of input",t),!1}var w=n[l],E=l;++l;var M=ls)&&A.push(t.getNewRange(s,u)),s=l,u=l,d=W.AdvancingLine):w==="*"&&M==="/"?(u>s&&A.push(t.getNewRange(s,u)),s=0,u=0,++l,o=l,d=W.Done):r._whitespaceCharacterRegExp.test(w)||(u=l);break;case W.AdvancingLine:w==="*"?M==="/"?(s=0,u=0,++l,o=l,d=W.Done):(M===" "&&++l,s=l,u=l,d=W.CollectingLine):w===` +`?(A.push(t.getNewRange(E,E)),s=l):r._whitespaceCharacterRegExp.test(w)||(u=l,d=W.CollectingLine);break}}return e.commentRange=t.getNewRange(i,o),e.lines=A,!0},r._whitespaceCharacterRegExp=/^\s$/,r}();var bt=function(){function r(){}return r.readTokens=function(e){r._ensureInitialized();for(var t=[],n=void 0,i=0,o=e;i":p.GreaterThan,"=":p.Equals,"'":p.SingleQuote,'"':p.DoubleQuote,"/":p.Slash,"-":p.Hyphen,"@":p.AtSign,"{":p.LeftCurlyBracket,"}":p.RightCurlyBracket,"`":p.Backtick,".":p.Period,":":p.Colon,",":p.Comma,"[":p.LeftSquareBracket,"]":p.RightSquareBracket,"|":p.Pipe,"(":p.LeftParenthesis,")":p.RightParenthesis,"#":p.PoundSymbol,"+":p.Plus,$:p.DollarSign},o=0,s=Object.getOwnPropertyNames(i);o?@[\\]^`{|}~",r._wordCharacters="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_",r}();var Ln=function(){function r(e,t){if(this._parserContext=e,this.tokens=e.tokens,t){if(t.parserContext!==this._parserContext)throw new Error("The embeddedTokenSequence must use the same parser context");this._readerStartIndex=t.startIndex,this._readerEndIndex=t.endIndex}else this._readerStartIndex=0,this._readerEndIndex=this.tokens.length;this._currentIndex=this._readerStartIndex,this._accumulatedStartIndex=this._readerStartIndex}return r.prototype.extractAccumulatedSequence=function(){if(this._accumulatedStartIndex===this._currentIndex)throw new Error("Parser assertion failed: The queue should not be empty when extractAccumulatedSequence() is called");var e=new Oe({parserContext:this._parserContext,startIndex:this._accumulatedStartIndex,endIndex:this._currentIndex});return this._accumulatedStartIndex=this._currentIndex,e},r.prototype.isAccumulatedSequenceEmpty=function(){return this._accumulatedStartIndex===this._currentIndex},r.prototype.tryExtractAccumulatedSequence=function(){if(!this.isAccumulatedSequenceEmpty())return this.extractAccumulatedSequence()},r.prototype.assertAccumulatedSequenceIsEmpty=function(){if(!this.isAccumulatedSequenceEmpty()){var e=new Oe({parserContext:this._parserContext,startIndex:this._accumulatedStartIndex,endIndex:this._currentIndex}),t=e.tokens.map(function(n){return n.toString()});throw new Error(`Parser assertion failed: The queue should be empty, but it contains: +`+JSON.stringify(t))}},r.prototype.peekToken=function(){return this.tokens[this._currentIndex]},r.prototype.peekTokenKind=function(){return this._currentIndex>=this._readerEndIndex?p.EndOfInput:this.tokens[this._currentIndex].kind},r.prototype.peekTokenAfterKind=function(){return this._currentIndex+1>=this._readerEndIndex?p.EndOfInput:this.tokens[this._currentIndex+1].kind},r.prototype.peekTokenAfterAfterKind=function(){return this._currentIndex+2>=this._readerEndIndex?p.EndOfInput:this.tokens[this._currentIndex+2].kind},r.prototype.readToken=function(){if(this._currentIndex>=this._readerEndIndex)throw new Error("Cannot read past end of stream");var e=this.tokens[this._currentIndex];if(e.kind===p.EndOfInput)throw new Error("The EndOfInput token cannot be read");return this._currentIndex++,e},r.prototype.peekPreviousTokenKind=function(){return this._currentIndex===0?p.EndOfInput:this.tokens[this._currentIndex-1].kind},r.prototype.createMarker=function(){return this._currentIndex},r.prototype.backtrackToMarker=function(e){if(e>this._currentIndex)throw new Error("The marker has expired");this._currentIndex=e,e" character should be escaped using a backslash to avoid confusion with an HTML tag'));break;case p.Backtick:this._pushAccumulatedPlainText(e),e.peekTokenAfterKind()===p.Backtick&&e.peekTokenAfterAfterKind()===p.Backtick?this._pushNode(this._parseFencedCode(e)):this._pushNode(this._parseCodeSpan(e));break;default:e.readToken();break}this._pushAccumulatedPlainText(e),this._performValidationChecks()},r.prototype._performValidationChecks=function(){var e=this._parserContext.docComment;e.deprecatedBlock&&(on.hasAnyTextContent(e.deprecatedBlock)||this._parserContext.log.addMessageForTokenSequence(j.MissingDeprecationMessage,"The ".concat(e.deprecatedBlock.blockTag.tagName," block must include a deprecation message,")+" e.g. describing the recommended alternative",e.deprecatedBlock.blockTag.getTokenSequence(),e.deprecatedBlock)),e.inheritDocTag&&(e.remarksBlock&&this._parserContext.log.addMessageForTokenSequence(j.InheritDocIncompatibleTag,'A "'.concat(e.remarksBlock.blockTag.tagName,'" block must not be used, because that')+" content is provided by the @inheritDoc tag",e.remarksBlock.blockTag.getTokenSequence(),e.remarksBlock.blockTag),on.hasAnyTextContent(e.summarySection)&&this._parserContext.log.addMessageForTextRange(j.InheritDocIncompatibleSummary,"The summary section must not have any content, because that content is provided by the @inheritDoc tag",this._parserContext.commentRange))},r.prototype._validateTagDefinition=function(e,t,n,i,o){if(e){var s=e.syntaxKind===I.InlineTag;s!==n?n?this._parserContext.log.addMessageForTokenSequence(j.TagShouldNotHaveBraces,'The TSDoc tag "'.concat(t,'" is not an inline tag; it must not be enclosed in "{ }" braces'),i,o):this._parserContext.log.addMessageForTokenSequence(j.InlineTagMissingBraces,'The TSDoc tag "'.concat(t,'" is an inline tag; it must be enclosed in "{ }" braces'),i,o):this._parserContext.configuration.validation.reportUnsupportedTags&&(this._parserContext.configuration.isTagSupported(e)||this._parserContext.log.addMessageForTokenSequence(j.UnsupportedTag,'The TSDoc tag "'.concat(t,'" is not supported by this tool'),i,o))}else this._parserContext.configuration.validation.ignoreUndefinedTags||this._parserContext.log.addMessageForTokenSequence(j.UndefinedTag,'The TSDoc tag "'.concat(t,'" is not defined in this configuration'),i,o)},r.prototype._pushAccumulatedPlainText=function(e){e.isAccumulatedSequenceEmpty()||this._pushNode(new xe({parsed:!0,configuration:this._configuration,textExcerpt:e.extractAccumulatedSequence()}))},r.prototype._parseAndPushBlock=function(e){var t=this._parserContext.docComment,n=this._parserContext.configuration,i=t.modifierTagSet,o=this._parseBlockTag(e);if(o.kind!==g.BlockTag){this._pushNode(o);return}var s=o,u=n.tryGetTagDefinitionWithUpperCase(s.tagNameWithUpperCase);if(this._validateTagDefinition(u,s.tagName,!1,s.getTokenSequence(),s),u)switch(u.syntaxKind){case I.BlockTag:if(s.tagNameWithUpperCase===L.param.tagNameWithUpperCase){var l=this._parseParamBlock(e,s,L.param.tagName);this._parserContext.docComment.params.add(l),this._currentSection=l.content;return}else if(s.tagNameWithUpperCase===L.typeParam.tagNameWithUpperCase){var l=this._parseParamBlock(e,s,L.typeParam.tagName);this._parserContext.docComment.typeParams.add(l),this._currentSection=l.content;return}else{var d=new it({configuration:this._configuration,blockTag:s});this._addBlockToDocComment(d),this._currentSection=d.content}return;case I.ModifierTag:i.addTag(s);return}this._pushNode(s)},r.prototype._addBlockToDocComment=function(e){var t=this._parserContext.docComment;switch(e.blockTag.tagNameWithUpperCase){case L.remarks.tagNameWithUpperCase:t.remarksBlock=e;break;case L.privateRemarks.tagNameWithUpperCase:t.privateRemarks=e;break;case L.deprecated.tagNameWithUpperCase:t.deprecatedBlock=e;break;case L.returns.tagNameWithUpperCase:t.returnsBlock=e;break;case L.see.tagNameWithUpperCase:t._appendSeeBlock(e);break;default:t.appendCustomBlock(e)}},r.prototype._tryParseJSDocTypeOrValueRest=function(e,t,n,i){for(var o,s=1;s>0;){var u=e.peekTokenKind();switch(u){case t:o===void 0&&s++;break;case n:o===void 0&&s--;break;case p.Backslash:o!==void 0&&(e.readToken(),u=e.peekTokenKind());break;case p.DoubleQuote:case p.SingleQuote:case p.Backtick:o===u?o=void 0:o===void 0&&(o=u);break}if(u===p.EndOfInput){e.backtrackToMarker(i);return}e.readToken()}return e.tryExtractAccumulatedSequence()},r.prototype._tryParseUnsupportedJSDocType=function(e,t,n){if(e.assertAccumulatedSequenceIsEmpty(),!(e.peekTokenKind()!==p.LeftCurlyBracket||e.peekTokenAfterKind()===p.AtSign)){var i=e.createMarker();e.readToken();var o=this._tryParseJSDocTypeOrValueRest(e,p.LeftCurlyBracket,p.RightCurlyBracket,i);if(o){this._parserContext.log.addMessageForTokenSequence(j.ParamTagWithInvalidType,"The "+n+" block should not include a JSDoc-style '{type}'",o,t);var s=this._tryReadSpacingAndNewlines(e);s&&(o=o.getNewSequence(o.startIndex,s.endIndex))}return o}},r.prototype._tryParseJSDocOptionalNameRest=function(e){if(e.assertAccumulatedSequenceIsEmpty(),e.peekTokenKind()!==p.EndOfInput){var t=e.createMarker();return this._tryParseJSDocTypeOrValueRest(e,p.LeftSquareBracket,p.RightSquareBracket,t)}},r.prototype._parseParamBlock=function(e,t,n){var i=e.createMarker(),o=this._tryReadSpacingAndNewlines(e),s=this._tryParseUnsupportedJSDocType(e,t,n),u;e.peekTokenKind()===p.LeftSquareBracket&&(e.readToken(),u=e.extractAccumulatedSequence());for(var l="",d=!1;!d;)switch(e.peekTokenKind()){case p.AsciiWord:case p.Period:case p.DollarSign:l+=e.readToken();break;default:d=!0;break}var A=R.explainIfInvalidUnquotedIdentifier(l);if(A!==void 0){e.backtrackToMarker(i);var w=new wt({configuration:this._configuration,blockTag:t,parameterName:""}),E=l.length>0?"The "+n+" block should be followed by a valid parameter name: "+A:"The "+n+" block should be followed by a parameter name";return this._parserContext.log.addMessageForTokenSequence(j.ParamTagWithInvalidName,E,t.getTokenSequence(),t),w}var M=e.extractAccumulatedSequence(),F;if(u){F=this._tryParseJSDocOptionalNameRest(e);var K=u;F&&(K=t.getTokenSequence().getNewSequence(u.startIndex,F.endIndex)),this._parserContext.log.addMessageForTokenSequence(j.ParamTagWithInvalidOptionalName,"The "+n+" should not include a JSDoc-style optional name; it must not be enclosed in '[ ]' brackets.",K,t)}var D=this._tryReadSpacingAndNewlines(e),G=this._tryParseUnsupportedJSDocType(e,t,n),ie,oe,z;return e.peekTokenKind()===p.Hyphen?(e.readToken(),ie=e.extractAccumulatedSequence(),oe=this._tryReadSpacingAndNewlines(e),z=this._tryParseUnsupportedJSDocType(e,t,n)):this._parserContext.log.addMessageForTokenSequence(j.ParamTagMissingHyphen,"The "+n+" block should be followed by a parameter name and then a hyphen",t.getTokenSequence(),t),new wt({parsed:!0,configuration:this._configuration,blockTag:t,spacingBeforeParameterNameExcerpt:o,unsupportedJsdocTypeBeforeParameterNameExcerpt:s,unsupportedJsdocOptionalNameOpenBracketExcerpt:u,parameterNameExcerpt:M,parameterName:l,unsupportedJsdocOptionalNameRestExcerpt:F,spacingAfterParameterNameExcerpt:D,unsupportedJsdocTypeAfterParameterNameExcerpt:G,hyphenExcerpt:ie,spacingAfterHyphenExcerpt:oe,unsupportedJsdocTypeAfterHyphenExcerpt:z})},r.prototype._pushNode=function(e){this._configuration.docNodeManager.isAllowedChild(g.Paragraph,e.kind)?this._currentSection.appendNodeInParagraph(e):this._currentSection.appendNode(e)},r.prototype._parseBackslashEscape=function(e){e.assertAccumulatedSequenceIsEmpty();var t=e.createMarker();if(e.readToken(),e.peekTokenKind()===p.EndOfInput)return this._backtrackAndCreateError(e,t,j.UnnecessaryBackslash,"A backslash must precede another character that is being escaped");var n=e.readToken();if(!bt.isPunctuation(n.kind))return this._backtrackAndCreateError(e,t,j.UnnecessaryBackslash,"A backslash can only be used to escape a punctuation character");var i=e.extractAccumulatedSequence();return new Ut({parsed:!0,configuration:this._configuration,escapeStyle:rn.CommonMarkBackslash,encodedTextExcerpt:i,decodedText:n.toString()})},r.prototype._parseBlockTag=function(e){e.assertAccumulatedSequenceIsEmpty();var t=e.createMarker();if(e.peekTokenKind()!==p.AtSign)return this._backtrackAndCreateError(e,t,j.MissingTag,'Expecting a TSDoc tag starting with "@"');switch(e.peekPreviousTokenKind()){case p.EndOfInput:case p.Spacing:case p.Newline:break;default:return this._backtrackAndCreateError(e,t,j.AtSignInWord,'The "@" character looks like part of a TSDoc tag; use a backslash to escape it')}var n=e.readToken().toString();if(e.peekTokenKind()!==p.AsciiWord)return this._backtrackAndCreateError(e,t,j.AtSignWithoutTagName,'Expecting a TSDoc tag name after "@"; if it is not a tag, use a backslash to escape this character');for(var i=e.createMarker();e.peekTokenKind()===p.AsciiWord;)n+=e.readToken().toString();switch(e.peekTokenKind()){case p.Spacing:case p.Newline:case p.EndOfInput:break;default:var o=e.peekToken().range.toString()[0];return this._backtrackAndCreateError(e,t,j.CharactersAfterBlockTag,'The token "'.concat(n,'" looks like a TSDoc tag but contains an invalid character')+" ".concat(JSON.stringify(o),'; if it is not a tag, use a backslash to escape the "@"'))}if(R.explainIfInvalidTSDocTagName(n)){var s=this._createFailureForTokensSince(e,j.MalformedTagName,"A TSDoc tag name must start with a letter and contain only letters and numbers",i);return this._backtrackAndCreateErrorForFailure(e,t,"",s)}return new Ht({parsed:!0,configuration:this._configuration,tagName:n,tagNameExcerpt:e.extractAccumulatedSequence()})},r.prototype._parseInlineTag=function(e){e.assertAccumulatedSequenceIsEmpty();var t=e.createMarker();if(e.peekTokenKind()!==p.LeftCurlyBracket)return this._backtrackAndCreateError(e,t,j.MissingTag,'Expecting a TSDoc tag starting with "{"');e.readToken();var n=e.extractAccumulatedSequence(),i=e.createMarker();if(e.peekTokenKind()!==p.AtSign)return this._backtrackAndCreateError(e,t,j.MalformedInlineTag,'Expecting a TSDoc tag starting with "{@"');for(var o=e.readToken().toString();e.peekTokenKind()===p.AsciiWord;)o+=e.readToken().toString();if(o==="@"){var s=this._createFailureForTokensSince(e,j.MalformedInlineTag,'Expecting a TSDoc inline tag name after the "{@" characters',i);return this._backtrackAndCreateErrorRangeForFailure(e,t,i,"",s)}if(R.explainIfInvalidTSDocTagName(o)){var s=this._createFailureForTokensSince(e,j.MalformedTagName,"A TSDoc tag name must start with a letter and contain only letters and numbers",i);return this._backtrackAndCreateErrorRangeForFailure(e,t,i,"",s)}var u=e.extractAccumulatedSequence(),l=this._tryReadSpacingAndNewlines(e);if(l===void 0&&e.peekTokenKind()!==p.RightCurlyBracket){var d=e.peekToken().range.toString()[0],s=this._createFailureForToken(e,j.CharactersAfterInlineTag,"The character ".concat(JSON.stringify(d)," cannot appear after the TSDoc tag name; expecting a space"));return this._backtrackAndCreateErrorRangeForFailure(e,t,i,"",s)}for(var A=!1;!A;)switch(e.peekTokenKind()){case p.EndOfInput:return this._backtrackAndCreateErrorRange(e,t,i,j.InlineTagMissingRightBrace,'The TSDoc inline tag name is missing its closing "}"');case p.Backslash:if(e.readToken(),!bt.isPunctuation(e.peekTokenKind())){var s=this._createFailureForToken(e,j.UnnecessaryBackslash,"A backslash can only be used to escape a punctuation character");return this._backtrackAndCreateErrorRangeForFailure(e,t,i,"Error reading inline TSDoc tag: ",s)}e.readToken();break;case p.LeftCurlyBracket:{var s=this._createFailureForToken(e,j.InlineTagUnescapedBrace,'The "{" character must be escaped with a backslash when used inside a TSDoc inline tag');return this._backtrackAndCreateErrorRangeForFailure(e,t,i,"",s)}case p.RightCurlyBracket:A=!0;break;default:e.readToken();break}var w=e.tryExtractAccumulatedSequence();e.readToken();var E=e.extractAccumulatedSequence(),M={parsed:!0,configuration:this._configuration,openingDelimiterExcerpt:n,tagNameExcerpt:u,tagName:o,spacingAfterTagNameExcerpt:l,tagContentExcerpt:w,closingDelimiterExcerpt:E},F=o.toUpperCase(),K=new Ln(this._parserContext,w||Oe.createEmpty(this._parserContext)),D;switch(F){case L.inheritDoc.tagNameWithUpperCase:D=this._parseInheritDocTag(M,K);break;case L.link.tagNameWithUpperCase:D=this._parseLinkTag(M,K);break;default:D=new ot(M)}var G=this._parserContext.configuration.tryGetTagDefinitionWithUpperCase(F);return this._validateTagDefinition(G,o,!0,u,D),D},r.prototype._parseInheritDocTag=function(e,t){var n=new ot(e),i=an({},e);if(t.peekTokenKind()!==p.EndOfInput){if(i.declarationReference=this._parseDeclarationReference(t,e.tagNameExcerpt,n),!i.declarationReference)return n;if(t.peekTokenKind()!==p.EndOfInput)return t.readToken(),this._parserContext.log.addMessageForTokenSequence(j.InheritDocTagSyntax,"Unexpected character after declaration reference",t.extractAccumulatedSequence(),n),n}return new yt(i)},r.prototype._parseLinkTag=function(e,t){var n=new ot(e),i=an({},e);if(!e.tagContentExcerpt)return this._parserContext.log.addMessageForTokenSequence(j.LinkTagEmpty,"The @link tag content is missing",i.tagNameExcerpt,n),n;for(var o=t.peekTokenKind()===p.Slash&&t.peekTokenAfterKind()===p.Slash,s=t.createMarker(),u=o;!u;)switch(t.peekTokenKind()){case p.AsciiWord:case p.Period:case p.Hyphen:case p.Plus:t.readToken();break;case p.Colon:t.readToken(),o=t.peekTokenKind()===p.Slash&&t.peekTokenAfterKind()===p.Slash,u=!0;break;default:u=!0}if(t.backtrackToMarker(s),o){if(!this._parseLinkTagUrlDestination(t,i,e.tagNameExcerpt,n))return n}else if(!this._parseLinkTagCodeDestination(t,i,e.tagNameExcerpt,n))return n;if(t.peekTokenKind()===p.Spacing)throw new Error("Unconsumed spacing encountered after construct");if(t.peekTokenKind()===p.Pipe){t.readToken(),i.pipeExcerpt=t.extractAccumulatedSequence(),i.spacingAfterPipeExcerpt=this._tryReadSpacingAndNewlines(t),u=!1;for(var l=void 0;!u;)switch(t.peekTokenKind()){case p.EndOfInput:u=!0;break;case p.Pipe:case p.LeftCurlyBracket:var d=t.readToken().toString();return this._parserContext.log.addMessageForTokenSequence(j.LinkTagUnescapedText,'The "'.concat(d,'" character may not be used in the link text without escaping it'),t.extractAccumulatedSequence(),n),n;case p.Spacing:case p.Newline:t.readToken();break;default:l=t.createMarker()+1,t.readToken()}var A=t.tryExtractAccumulatedSequence();A&&(l===void 0?i.spacingAfterLinkTextExcerpt=A:l>=A.endIndex?i.linkTextExcerpt=A:(i.linkTextExcerpt=A.getNewSequence(A.startIndex,l),i.spacingAfterLinkTextExcerpt=A.getNewSequence(l,A.endIndex)))}else if(t.peekTokenKind()!==p.EndOfInput)return t.readToken(),this._parserContext.log.addMessageForTokenSequence(j.LinkTagDestinationSyntax,"Unexpected character after link destination",t.extractAccumulatedSequence(),n),n;return new Jt(i)},r.prototype._parseLinkTagUrlDestination=function(e,t,n,i){for(var o="",s=!1;!s;)switch(e.peekTokenKind()){case p.Spacing:case p.Newline:case p.EndOfInput:case p.Pipe:case p.RightCurlyBracket:s=!0;break;default:o+=e.readToken();break}if(o.length===0)throw new Error("Missing URL in _parseLinkTagUrlDestination()");var u=e.extractAccumulatedSequence(),l=R.explainIfInvalidLinkUrl(o);return l?(this._parserContext.log.addMessageForTokenSequence(j.LinkTagInvalidUrl,l,u,i),!1):(t.urlDestinationExcerpt=u,t.spacingAfterDestinationExcerpt=this._tryReadSpacingAndNewlines(e),!0)},r.prototype._parseLinkTagCodeDestination=function(e,t,n,i){return t.codeDestination=this._parseDeclarationReference(e,n,i),!!t.codeDestination},r.prototype._parseDeclarationReference=function(e,t,n){e.assertAccumulatedSequenceIsEmpty();for(var i=e.createMarker(),o=!1,s=!0,u=!1,l=!1;!l;)switch(e.peekTokenKind()){case p.DoubleQuote:case p.EndOfInput:case p.LeftCurlyBracket:case p.LeftParenthesis:case p.LeftSquareBracket:case p.Newline:case p.Pipe:case p.RightCurlyBracket:case p.RightParenthesis:case p.RightSquareBracket:case p.SingleQuote:case p.Spacing:l=!0;break;case p.PoundSymbol:o=!0,l=!0;break;case p.Slash:case p.AtSign:s&&(u=!0),e.readToken();break;case p.AsciiWord:case p.Period:case p.Hyphen:e.readToken();break;default:s=!1,e.readToken()}if(!o&&u){this._parserContext.log.addMessageForTokenSequence(j.ReferenceMissingHash,'The declaration reference appears to contain a package name or import path, but it is missing the "#" delimiter',e.extractAccumulatedSequence(),n);return}e.backtrackToMarker(i);var d,A,w,E;if(o){if(e.peekTokenKind()!==p.Period){var M=e.peekTokenKind()===p.AtSign,F=!1;for(l=!1;!l;)switch(e.peekTokenKind()){case p.EndOfInput:throw new Error("Expecting pound symbol");case p.Slash:M&&!F?(e.readToken(),F=!0):l=!0;break;case p.PoundSymbol:l=!0;break;default:e.readToken()}if(!e.isAccumulatedSequenceEmpty()){d=e.extractAccumulatedSequence();var K=R.explainIfInvalidPackageName(d.toString());if(K){this._parserContext.log.addMessageForTokenSequence(j.ReferenceMalformedPackageName,K,d,n);return}}}for(l=!1;!l;)switch(e.peekTokenKind()){case p.EndOfInput:throw new Error("Expecting pound symbol");case p.PoundSymbol:l=!0;break;default:e.readToken()}if(!e.isAccumulatedSequenceEmpty()){A=e.extractAccumulatedSequence();var K=R.explainIfInvalidImportPath(A.toString(),!!d);if(K){this._parserContext.log.addMessageForTokenSequence(j.ReferenceMalformedImportPath,K,A,n);return}}if(e.peekTokenKind()!==p.PoundSymbol)throw new Error("Expecting pound symbol");if(e.readToken(),w=e.extractAccumulatedSequence(),E=this._tryReadSpacingAndNewlines(e),d===void 0&&A===void 0){this._parserContext.log.addMessageForTokenSequence(j.ReferenceHashSyntax,"The hash character must be preceded by a package name or import path",w,n);return}}var D=[];for(l=!1;!l;)switch(e.peekTokenKind()){case p.Period:case p.LeftParenthesis:case p.AsciiWord:case p.Colon:case p.LeftSquareBracket:case p.DoubleQuote:var G=D.length>0,ie=this._parseMemberReference(e,G,t,n);if(!ie)return;D.push(ie);break;default:l=!0}if(d===void 0&&A===void 0&&D.length===0){this._parserContext.log.addMessageForTokenSequence(j.MissingReference,"Expecting a declaration reference",t,n);return}return new Yt({parsed:!0,configuration:this._configuration,packageNameExcerpt:d,importPathExcerpt:A,importHashExcerpt:w,spacingAfterImportHashExcerpt:E,memberReferences:D})},r.prototype._parseMemberReference=function(e,t,n,i){var o={parsed:!0,configuration:this._configuration};if(t){if(e.peekTokenKind()!==p.Period){this._parserContext.log.addMessageForTokenSequence(j.ReferenceMissingDot,"Expecting a period before the next component of a declaration reference",n,i);return}e.readToken(),o.dotExcerpt=e.extractAccumulatedSequence(),o.spacingAfterDotExcerpt=this._tryReadSpacingAndNewlines(e)}if(e.peekTokenKind()===p.LeftParenthesis&&(e.readToken(),o.leftParenthesisExcerpt=e.extractAccumulatedSequence(),o.spacingAfterLeftParenthesisExcerpt=this._tryReadSpacingAndNewlines(e)),e.peekTokenKind()===p.LeftSquareBracket){if(o.memberSymbol=this._parseMemberSymbol(e,i),!o.memberSymbol)return}else if(o.memberIdentifier=this._parseMemberIdentifier(e,n,i),!o.memberIdentifier)return;if(o.spacingAfterMemberExcerpt=this._tryReadSpacingAndNewlines(e),e.peekTokenKind()===p.Colon){if(e.readToken(),o.colonExcerpt=e.extractAccumulatedSequence(),o.spacingAfterColonExcerpt=this._tryReadSpacingAndNewlines(e),!o.leftParenthesisExcerpt){this._parserContext.log.addMessageForTokenSequence(j.ReferenceSelectorMissingParens,"Syntax error in declaration reference: the member selector must be enclosed in parentheses",o.colonExcerpt,i);return}if(o.selector=this._parseMemberSelector(e,o.colonExcerpt,i),!o.selector)return;o.spacingAfterSelectorExcerpt=this._tryReadSpacingAndNewlines(e)}else if(o.leftParenthesisExcerpt){this._parserContext.log.addMessageForTokenSequence(j.ReferenceMissingColon,"Expecting a colon after the identifier because the expression is in parentheses",o.leftParenthesisExcerpt,i);return}if(o.leftParenthesisExcerpt){if(e.peekTokenKind()!==p.RightParenthesis){this._parserContext.log.addMessageForTokenSequence(j.ReferenceMissingRightParen,"Expecting a matching right parenthesis",o.leftParenthesisExcerpt,i);return}e.readToken(),o.rightParenthesisExcerpt=e.extractAccumulatedSequence(),o.spacingAfterRightParenthesisExcerpt=this._tryReadSpacingAndNewlines(e)}return new Wt(o)},r.prototype._parseMemberSymbol=function(e,t){if(e.peekTokenKind()!==p.LeftSquareBracket)throw new Error('Expecting "["');e.readToken();var n=e.extractAccumulatedSequence(),i=this._tryReadSpacingAndNewlines(e),o=this._parseDeclarationReference(e,n,t);if(!o){this._parserContext.log.addMessageForTokenSequence(j.ReferenceSymbolSyntax,"Missing declaration reference in symbol reference",n,t);return}if(e.peekTokenKind()!==p.RightSquareBracket){this._parserContext.log.addMessageForTokenSequence(j.ReferenceMissingRightBracket,"Missing closing square bracket for symbol reference",n,t);return}e.readToken();var s=e.extractAccumulatedSequence();return new Xt({parsed:!0,configuration:this._configuration,leftBracketExcerpt:n,spacingAfterLeftBracketExcerpt:i,symbolReference:o,rightBracketExcerpt:s})},r.prototype._parseMemberIdentifier=function(e,t,n){var i=void 0,o=void 0;if(e.peekTokenKind()===p.DoubleQuote){for(e.readToken(),i=e.extractAccumulatedSequence();e.peekTokenKind()!==p.DoubleQuote;){if(e.peekTokenKind()===p.EndOfInput){this._parserContext.log.addMessageForTokenSequence(j.ReferenceMissingQuote,"Unexpected end of input inside quoted member identifier",i,n);return}e.readToken()}if(e.isAccumulatedSequenceEmpty()){this._parserContext.log.addMessageForTokenSequence(j.ReferenceEmptyIdentifier,"The quoted identifier cannot be empty",i,n);return}var s=e.extractAccumulatedSequence();return e.readToken(),o=e.extractAccumulatedSequence(),new jt({parsed:!0,configuration:this._configuration,leftQuoteExcerpt:i,identifierExcerpt:s,rightQuoteExcerpt:o})}else{for(var u=!1;!u;)switch(e.peekTokenKind()){case p.AsciiWord:case p.DollarSign:e.readToken();break;default:u=!0;break}if(e.isAccumulatedSequenceEmpty()){this._parserContext.log.addMessageForTokenSequence(j.ReferenceMissingIdentifier,"Syntax error in declaration reference: expecting a member identifier",t,n);return}var s=e.extractAccumulatedSequence(),l=s.toString(),d=R.explainIfInvalidUnquotedMemberIdentifier(l);if(d){this._parserContext.log.addMessageForTokenSequence(j.ReferenceUnquotedIdentifier,d,s,n);return}return new jt({parsed:!0,configuration:this._configuration,leftQuoteExcerpt:i,identifierExcerpt:s,rightQuoteExcerpt:o})}},r.prototype._parseMemberSelector=function(e,t,n){e.peekTokenKind()!==p.AsciiWord&&this._parserContext.log.addMessageForTokenSequence(j.ReferenceMissingLabel,"Expecting a selector label after the colon",t,n);var i=e.readToken().toString(),o=e.extractAccumulatedSequence(),s=new Qt({parsed:!0,configuration:this._configuration,selectorExcerpt:o,selector:i});if(s.errorMessage){this._parserContext.log.addMessageForTokenSequence(j.ReferenceSelectorSyntax,s.errorMessage,o,n);return}return s},r.prototype._parseHtmlStartTag=function(e){e.assertAccumulatedSequenceIsEmpty();var t=e.createMarker(),n=e.readToken();if(n.kind!==p.LessThan)throw new Error('Expecting an HTML tag starting with "<"');var i=e.extractAccumulatedSequence(),o=this._parseHtmlName(e);if(Tt(o))return this._backtrackAndCreateErrorForFailure(e,t,"Invalid HTML element: ",o);for(var s=this._tryReadSpacingAndNewlines(e),u=[];e.peekTokenKind()===p.AsciiWord;){var l=this._parseHtmlAttribute(e);if(Tt(l))return this._backtrackAndCreateErrorForFailure(e,t,"The HTML element has an invalid attribute: ",l);u.push(l)}e.assertAccumulatedSequenceIsEmpty();var d=e.createMarker(),A=!1;if(e.peekTokenKind()===p.Slash&&(e.readToken(),A=!0),e.peekTokenKind()!==p.GreaterThan){var w=this._createFailureForTokensSince(e,j.HtmlTagMissingGreaterThan,'Expecting an attribute or ">" or "/>"',d);return this._backtrackAndCreateErrorForFailure(e,t,"The HTML tag has invalid syntax: ",w)}e.readToken();var E=e.extractAccumulatedSequence();return new zt({parsed:!0,configuration:this._configuration,openingDelimiterExcerpt:i,nameExcerpt:o,spacingAfterNameExcerpt:s,htmlAttributes:u,selfClosingTag:A,closingDelimiterExcerpt:E})},r.prototype._parseHtmlAttribute=function(e){e.assertAccumulatedSequenceIsEmpty();var t=this._parseHtmlName(e);if(Tt(t))return t;var n=this._tryReadSpacingAndNewlines(e);if(e.peekTokenKind()!==p.Equals)return this._createFailureForToken(e,j.HtmlTagMissingEquals,'Expecting "=" after HTML attribute name');e.readToken();var i=e.extractAccumulatedSequence(),o=this._tryReadSpacingAndNewlines(e),s=this._parseHtmlString(e);if(Tt(s))return s;var u=e.extractAccumulatedSequence(),l=this._tryReadSpacingAndNewlines(e);return new Rt({parsed:!0,configuration:this._configuration,nameExcerpt:t,spacingAfterNameExcerpt:n,equalsExcerpt:i,spacingAfterEqualsExcerpt:o,valueExcerpt:u,spacingAfterValueExcerpt:l})},r.prototype._parseHtmlString=function(e){var t=e.createMarker(),n=e.peekTokenKind();if(n!==p.DoubleQuote&&n!==p.SingleQuote)return this._createFailureForToken(e,j.HtmlTagMissingString,"Expecting an HTML string starting with a single-quote or double-quote character");e.readToken();for(var i="";;){var o=e.peekTokenKind();if(o===n){e.readToken();break}if(o===p.EndOfInput||o===p.Newline)return this._createFailureForToken(e,j.HtmlStringMissingQuote,"The HTML string is missing its closing quote",t);i+=e.readToken().toString()}return e.peekTokenKind()===p.AsciiWord?this._createFailureForToken(e,j.TextAfterHtmlString,"The next character after a closing quote must be spacing or punctuation"):i},r.prototype._parseHtmlEndTag=function(e){e.assertAccumulatedSequenceIsEmpty();var t=e.createMarker(),n=e.peekToken();if(n.kind!==p.LessThan)return this._backtrackAndCreateError(e,t,j.MissingHtmlEndTag,'Expecting an HTML tag starting with "" for the HTML tag');return this._backtrackAndCreateErrorForFailure(e,t,"",l)}e.readToken();var d=e.extractAccumulatedSequence();return new Vt({parsed:!0,configuration:this._configuration,openingDelimiterExcerpt:o,nameExcerpt:s,spacingAfterNameExcerpt:u,closingDelimiterExcerpt:d})},r.prototype._parseHtmlName=function(e){var t=e.createMarker();if(e.peekTokenKind()===p.Spacing)return this._createFailureForTokensSince(e,j.MalformedHtmlName,"A space is not allowed here",t);for(var n=!1;!n;)switch(e.peekTokenKind()){case p.Hyphen:case p.Period:case p.AsciiWord:e.readToken();break;default:n=!0;break}var i=e.tryExtractAccumulatedSequence();if(!i)return this._createFailureForToken(e,j.MalformedHtmlName,"Expecting an HTML name");var o=i.toString(),s=R.explainIfInvalidHtmlName(o);return s?this._createFailureForTokensSince(e,j.MalformedHtmlName,s,t):this._configuration.validation.reportUnsupportedHtmlElements&&!this._configuration.isHtmlElementSupported(o)?this._createFailureForToken(e,j.UnsupportedHtmlElementName,"The HTML element name ".concat(JSON.stringify(o)," is not defined by your TSDoc configuration"),t):i},r.prototype._parseFencedCode=function(e){e.assertAccumulatedSequenceIsEmpty();var t=e.createMarker(),n=t+2;switch(e.peekPreviousTokenKind()){case p.Newline:case p.EndOfInput:break;default:return this._backtrackAndCreateErrorRange(e,t,n,j.CodeFenceOpeningIndent,"The opening backtick for a code fence must appear at the start of the line")}var i="";if(i+=e.readToken(),i+=e.readToken(),i+=e.readToken(),i!=="```")throw new Error("Expecting three backticks");for(var o=e.extractAccumulatedSequence();e.peekTokenKind()===p.Spacing;)e.readToken();for(var s=e.tryExtractAccumulatedSequence(),u=!1,l=void 0;!u;)switch(e.peekTokenKind()){case p.Spacing:case p.Newline:l===void 0&&(l=e.createMarker()),e.peekTokenKind()===p.Newline&&(u=!0),e.readToken();break;case p.Backtick:var d=this._createFailureForToken(e,j.CodeFenceSpecifierSyntax,"The language specifier cannot contain backtick characters");return this._backtrackAndCreateErrorRangeForFailure(e,t,n,"Error parsing code fence: ",d);case p.EndOfInput:var A=this._createFailureForToken(e,j.CodeFenceMissingDelimiter,"Missing closing delimiter");return this._backtrackAndCreateErrorRangeForFailure(e,t,n,"Error parsing code fence: ",A);default:l=void 0,e.readToken();break}var w=e.extractAccumulatedSequence(),E=w.getNewSequence(w.startIndex,l),M=w.getNewSequence(l,w.endIndex),F=-1,K=-1;u=!1;for(var D;!u;)switch(e.peekTokenKind()){case p.EndOfInput:var A=this._createFailureForToken(e,j.CodeFenceMissingDelimiter,"Missing closing delimiter");return this._backtrackAndCreateErrorRangeForFailure(e,t,n,"Error parsing code fence: ",A);case p.Newline:for(D=e.readToken(),F=e.createMarker();e.peekTokenKind()===p.Spacing;)D=e.readToken();if(e.peekTokenKind()!==p.Backtick||(K=e.createMarker(),e.readToken(),e.peekTokenKind()!==p.Backtick)||(e.readToken(),e.peekTokenKind()!==p.Backtick))break;e.readToken(),u=!0;break;default:e.readToken();break}D.kind!==p.Newline&&this._parserContext.log.addMessageForTextRange(j.CodeFenceClosingIndent,"The closing delimiter for a code fence must not be indented",D.range);var G=e.extractAccumulatedSequence(),ie=G.getNewSequence(G.startIndex,F),oe=G.getNewSequence(F,K),z=G.getNewSequence(K,G.endIndex);for(u=!1;!u;)switch(e.peekTokenKind()){case p.Spacing:e.readToken();break;case p.Newline:u=!0,e.readToken();break;case p.EndOfInput:u=!0;break;default:this._parserContext.log.addMessageForTextRange(j.CodeFenceClosingSyntax,"Unexpected characters after closing delimiter for code fence",e.peekToken().range),u=!0;break}var Ke=e.tryExtractAccumulatedSequence();return new Gt({parsed:!0,configuration:this._configuration,openingFenceExcerpt:o,spacingAfterOpeningFenceExcerpt:s,languageExcerpt:E,spacingAfterLanguageExcerpt:M,codeExcerpt:ie,spacingBeforeClosingFenceExcerpt:oe,closingFenceExcerpt:z,spacingAfterClosingFenceExcerpt:Ke})},r.prototype._parseCodeSpan=function(e){e.assertAccumulatedSequenceIsEmpty();var t=e.createMarker();if(e.peekTokenKind()!==p.Backtick)throw new Error('Expecting a code span starting with a backtick character "`"');e.readToken();for(var n=e.extractAccumulatedSequence(),i=void 0,o=void 0;;){var s=e.peekTokenKind();if(s===p.Backtick){if(e.isAccumulatedSequenceEmpty())return this._backtrackAndCreateErrorRange(e,t,t+1,j.CodeSpanEmpty,"A code span must contain at least one character between the backticks");i=e.extractAccumulatedSequence(),e.readToken(),o=e.extractAccumulatedSequence();break}if(s===p.EndOfInput||s===p.Newline)return this._backtrackAndCreateError(e,t,j.CodeSpanMissingDelimiter,"The code span is missing its closing backtick");e.readToken()}return new $t({parsed:!0,configuration:this._configuration,openingDelimiterExcerpt:n,codeExcerpt:i,closingDelimiterExcerpt:o})},r.prototype._tryReadSpacingAndNewlines=function(e){var t=!1;do switch(e.peekTokenKind()){case p.Spacing:case p.Newline:e.readToken();break;default:t=!0;break}while(!t);return e.tryExtractAccumulatedSequence()},r.prototype._createError=function(e,t,n){e.readToken();var i=e.extractAccumulatedSequence(),o=new Re({parsed:!0,configuration:this._configuration,textExcerpt:i,messageId:t,errorMessage:n,errorLocation:i});return this._parserContext.log.addMessageForDocErrorText(o),o},r.prototype._backtrackAndCreateError=function(e,t,n,i){return e.backtrackToMarker(t),this._createError(e,n,i)},r.prototype._backtrackAndCreateErrorRange=function(e,t,n,i,o){for(e.backtrackToMarker(t);e.createMarker()!==n;)e.readToken();e.peekTokenKind()!==p.EndOfInput&&e.readToken();var s=e.extractAccumulatedSequence(),u=new Re({parsed:!0,configuration:this._configuration,textExcerpt:s,messageId:i,errorMessage:o,errorLocation:s});return this._parserContext.log.addMessageForDocErrorText(u),u},r.prototype._backtrackAndCreateErrorForFailure=function(e,t,n,i){e.backtrackToMarker(t),e.readToken();var o=e.extractAccumulatedSequence(),s=new Re({parsed:!0,configuration:this._configuration,textExcerpt:o,messageId:i.failureMessageId,errorMessage:n+i.failureMessage,errorLocation:i.failureLocation});return this._parserContext.log.addMessageForDocErrorText(s),s},r.prototype._backtrackAndCreateErrorRangeForFailure=function(e,t,n,i,o){for(e.backtrackToMarker(t);e.createMarker()!==n;)e.readToken();e.peekTokenKind()!==p.EndOfInput&&e.readToken();var s=e.extractAccumulatedSequence(),u=new Re({parsed:!0,configuration:this._configuration,textExcerpt:s,messageId:o.failureMessageId,errorMessage:i+o.failureMessage,errorLocation:o.failureLocation});return this._parserContext.log.addMessageForDocErrorText(u),u},r.prototype._createFailureForToken=function(e,t,n,i){i||(i=e.createMarker());var o=new Oe({parserContext:this._parserContext,startIndex:i,endIndex:i+1});return{failureMessageId:t,failureMessage:n,failureLocation:o}},r.prototype._createFailureForTokensSince=function(e,t,n,i){var o=e.createMarker();if(osetTimeout(e,r))}function Jr(){return/(<%(?:-|_)?\s*[*~]{0,1})\+((?:.|\s)*?%>)/g}function Yn(r,e){e=(0,re.normalizePath)(e);let t=r.vault.getAbstractFileByPath(e);if(!t)throw new b(`Folder "${e}" doesn't exist`);if(!(t instanceof re.TFolder))throw new b(`${e} is a file, not a folder`);return t}function De(r,e){e=(0,re.normalizePath)(e);let t=r.vault.getAbstractFileByPath(e);if(!t)throw new b(`File "${e}" doesn't exist`);if(!(t instanceof re.TFile))throw new b(`${e} is a folder, not a file`);return t}function je(r,e){let t=Yn(r,e),n=[];return re.Vault.recurseChildren(t,i=>{i instanceof re.TFile&&n.push(i)}),n.sort((i,o)=>i.path.localeCompare(o.path)),n}async function Wr(r,e){return await Promise.all(e.map(async n=>{let i=await r.vault.cachedRead(n);return So(n,i)}))}function So(r,e){let n=new Hn().parseString(e),i=new $n(r);return i.description=Co(n.docComment.summarySection),i.returns=Do(n.docComment.returnsBlock),i.arguments=Po(n.docComment.params),i}function Co(r){try{return r.nodes.map(t=>t.getChildNodes().filter(n=>n instanceof xe).map(n=>n.text).join(` `)).join(` -`)}catch{console.error("Failed to parse summary section")}}function as(n){if(!n)return"";try{return n.content.nodes[0].getChildNodes()[0].text.trim()}catch{return""}}function ss(n){try{return n.blocks.map(r=>{let i=r.parameterName,o=r.content.getChildNodes()[0].getChildNodes().filter(a=>a instanceof Ve).map(a=>a.text).join(" ");return new Ur(i,o)})}catch{return[]}}function Ot(n,e,t){if(t<0||t===n.length)return;let r=n[e];n[e]=n[t],n[t]=r}function vt(n){return n.workspace.activeEditor?.file??n.workspace.getActiveFile()}function lo(n){let e=n.lastIndexOf("/");return e!==-1?n.slice(0,e):""}function jn(n){return n!==null&&typeof n=="object"}function po(n){let e=n.toString(),t=e.indexOf("(");return e.substring(t+1,e.indexOf(")")).replace(/ /g,"").split(",")}function Gr(n,e,t){let r=n instanceof HTMLOListElement?"li":"p",i=n.createEl(r),o=n.createEl("b",{text:e});return i.appendChild(o),i.appendChild(document.createTextNode(`: ${t}`)),i}function ur(n,e){if(Object.keys(e).length!==0){for(let t in e)if(e.hasOwnProperty(t))if(n.hasOwnProperty(t)){let r=n[t],i=e[t];if(Array.isArray(r)||Array.isArray(i)){let o=Array.isArray(r)?r:[r],a=Array.isArray(i)?i:[i];n[t]=o.concat(a).unique()}else jn(r)&&jn(i)?ur(r,i):i!=null&&i!==""&&(n[t]=i)}else n[t]=e[t]}}function vn(n){let e={},t=(0,Te.getFrontMatterInfo)(n);return t.frontmatter&&(e=(0,Te.parseYaml)(t.frontmatter)),{frontmatter:e,content:n.slice(t.contentStart)}}var Bo=X(require("obsidian"));var Mo=X(require("obsidian"));var ie="top",ue="bottom",ce="right",ae="left",fr="auto",wt=[ie,ue,ce,ae],pt="start",Bt="end",uo="clippingParents",dr="viewport",Zt="popper",fo="reference",Wr=wt.reduce(function(n,e){return n.concat([e+"-"+pt,e+"-"+Bt])},[]),mr=[].concat(wt,[fr]).reduce(function(n,e){return n.concat([e,e+"-"+pt,e+"-"+Bt])},[]),cs="beforeRead",ls="read",ps="afterRead",us="beforeMain",fs="main",ds="afterMain",ms="beforeWrite",gs="write",hs="afterWrite",mo=[cs,ls,ps,us,fs,ds,ms,gs,hs];function me(n){return n?(n.nodeName||"").toLowerCase():null}function Z(n){if(n==null)return window;if(n.toString()!=="[object Window]"){var e=n.ownerDocument;return e&&e.defaultView||window}return n}function Me(n){var e=Z(n).Element;return n instanceof e||n instanceof Element}function fe(n){var e=Z(n).HTMLElement;return n instanceof e||n instanceof HTMLElement}function en(n){if(typeof ShadowRoot=="undefined")return!1;var e=Z(n).ShadowRoot;return n instanceof e||n instanceof ShadowRoot}function As(n){var e=n.state;Object.keys(e.elements).forEach(function(t){var r=e.styles[t]||{},i=e.attributes[t]||{},o=e.elements[t];!fe(o)||!me(o)||(Object.assign(o.style,r),Object.keys(i).forEach(function(a){var l=i[a];l===!1?o.removeAttribute(a):o.setAttribute(a,l===!0?"":l)}))})}function _s(n){var e=n.state,t={popper:{position:e.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(e.elements.popper.style,t.popper),e.styles=t,e.elements.arrow&&Object.assign(e.elements.arrow.style,t.arrow),function(){Object.keys(e.elements).forEach(function(r){var i=e.elements[r],o=e.attributes[r]||{},a=Object.keys(e.styles.hasOwnProperty(r)?e.styles[r]:t[r]),l=a.reduce(function(c,d){return c[d]="",c},{});!fe(i)||!me(i)||(Object.assign(i.style,l),Object.keys(o).forEach(function(c){i.removeAttribute(c)}))})}}var go={name:"applyStyles",enabled:!0,phase:"write",fn:As,effect:_s,requires:["computeStyles"]};function ge(n){return n.split("-")[0]}var qe=Math.max,It=Math.min,ut=Math.round;function tn(){var n=navigator.userAgentData;return n!=null&&n.brands&&Array.isArray(n.brands)?n.brands.map(function(e){return e.brand+"/"+e.version}).join(" "):navigator.userAgent}function wn(){return!/^((?!chrome|android).)*safari/i.test(tn())}function Oe(n,e,t){e===void 0&&(e=!1),t===void 0&&(t=!1);var r=n.getBoundingClientRect(),i=1,o=1;e&&fe(n)&&(i=n.offsetWidth>0&&ut(r.width)/n.offsetWidth||1,o=n.offsetHeight>0&&ut(r.height)/n.offsetHeight||1);var a=Me(n)?Z(n):window,l=a.visualViewport,c=!wn()&&t,d=(r.left+(c&&l?l.offsetLeft:0))/i,m=(r.top+(c&&l?l.offsetTop:0))/o,_=r.width/i,w=r.height/o;return{width:_,height:w,top:m,right:d+_,bottom:m+w,left:d,x:d,y:m}}function Ft(n){var e=Oe(n),t=n.offsetWidth,r=n.offsetHeight;return Math.abs(e.width-t)<=1&&(t=e.width),Math.abs(e.height-r)<=1&&(r=e.height),{x:n.offsetLeft,y:n.offsetTop,width:t,height:r}}function bn(n,e){var t=e.getRootNode&&e.getRootNode();if(n.contains(e))return!0;if(t&&en(t)){var r=e;do{if(r&&n.isSameNode(r))return!0;r=r.parentNode||r.host}while(r)}return!1}function we(n){return Z(n).getComputedStyle(n)}function Vr(n){return["table","td","th"].indexOf(me(n))>=0}function Ae(n){return((Me(n)?n.ownerDocument:n.document)||window.document).documentElement}function ft(n){return me(n)==="html"?n:n.assignedSlot||n.parentNode||(en(n)?n.host:null)||Ae(n)}function ho(n){return!fe(n)||we(n).position==="fixed"?null:n.offsetParent}function xs(n){var e=/firefox/i.test(tn()),t=/Trident/i.test(tn());if(t&&fe(n)){var r=we(n);if(r.position==="fixed")return null}var i=ft(n);for(en(i)&&(i=i.host);fe(i)&&["html","body"].indexOf(me(i))<0;){var o=we(i);if(o.transform!=="none"||o.perspective!=="none"||o.contain==="paint"||["transform","perspective"].indexOf(o.willChange)!==-1||e&&o.willChange==="filter"||e&&o.filter&&o.filter!=="none")return i;i=i.parentNode}return null}function Le(n){for(var e=Z(n),t=ho(n);t&&Vr(t)&&we(t).position==="static";)t=ho(t);return t&&(me(t)==="html"||me(t)==="body"&&we(t).position==="static")?e:t||xs(n)||e}function qt(n){return["top","bottom"].indexOf(n)>=0?"x":"y"}function Lt(n,e,t){return qe(n,It(e,t))}function Ao(n,e,t){var r=Lt(n,e,t);return r>t?t:r}function En(){return{top:0,right:0,bottom:0,left:0}}function Tn(n){return Object.assign({},En(),n)}function kn(n,e){return e.reduce(function(t,r){return t[r]=n,t},{})}var ys=function(e,t){return e=typeof e=="function"?e(Object.assign({},t.rects,{placement:t.placement})):e,Tn(typeof e!="number"?e:kn(e,wt))};function js(n){var e,t=n.state,r=n.name,i=n.options,o=t.elements.arrow,a=t.modifiersData.popperOffsets,l=ge(t.placement),c=qt(l),d=[ae,ce].indexOf(l)>=0,m=d?"height":"width";if(!(!o||!a)){var _=ys(i.padding,t),w=Ft(o),b=c==="y"?ie:ae,S=c==="y"?ue:ce,k=t.rects.reference[m]+t.rects.reference[c]-a[c]-t.rects.popper[m],E=a[c]-t.rects.reference[c],O=Le(o),$=O?c==="y"?O.clientHeight||0:O.clientWidth||0:0,K=k/2-E/2,D=_[b],H=$-w[m]-_[S],F=$/2-w[m]/2+K,J=Lt(D,F,H),te=c;t.modifiersData[r]=(e={},e[te]=J,e.centerOffset=J-F,e)}}function vs(n){var e=n.state,t=n.options,r=t.element,i=r===void 0?"[data-popper-arrow]":r;i!=null&&(typeof i=="string"&&(i=e.elements.popper.querySelector(i),!i)||!bn(e.elements.popper,i)||(e.elements.arrow=i))}var _o={name:"arrow",enabled:!0,phase:"main",fn:js,effect:vs,requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function Be(n){return n.split("-")[1]}var ws={top:"auto",right:"auto",bottom:"auto",left:"auto"};function bs(n,e){var t=n.x,r=n.y,i=e.devicePixelRatio||1;return{x:ut(t*i)/i||0,y:ut(r*i)/i||0}}function xo(n){var e,t=n.popper,r=n.popperRect,i=n.placement,o=n.variation,a=n.offsets,l=n.position,c=n.gpuAcceleration,d=n.adaptive,m=n.roundOffsets,_=n.isFixed,w=a.x,b=w===void 0?0:w,S=a.y,k=S===void 0?0:S,E=typeof m=="function"?m({x:b,y:k}):{x:b,y:k};b=E.x,k=E.y;var O=a.hasOwnProperty("x"),$=a.hasOwnProperty("y"),K=ae,D=ie,H=window;if(d){var F=Le(t),J="clientHeight",te="clientWidth";if(F===Z(t)&&(F=Ae(t),we(F).position!=="static"&&l==="absolute"&&(J="scrollHeight",te="scrollWidth")),F=F,i===ie||(i===ae||i===ce)&&o===Bt){D=ue;var ne=_&&F===H&&H.visualViewport?H.visualViewport.height:F[J];k-=ne-r.height,k*=c?1:-1}if(i===ae||(i===ie||i===ue)&&o===Bt){K=ce;var Q=_&&F===H&&H.visualViewport?H.visualViewport.width:F[te];b-=Q-r.width,b*=c?1:-1}}var h=Object.assign({position:l},d&&ws),C=m===!0?bs({x:b,y:k},Z(t)):{x:b,y:k};if(b=C.x,k=C.y,c){var f;return Object.assign({},h,(f={},f[D]=$?"0":"",f[K]=O?"0":"",f.transform=(H.devicePixelRatio||1)<=1?"translate("+b+"px, "+k+"px)":"translate3d("+b+"px, "+k+"px, 0)",f))}return Object.assign({},h,(e={},e[D]=$?k+"px":"",e[K]=O?b+"px":"",e.transform="",e))}function Es(n){var e=n.state,t=n.options,r=t.gpuAcceleration,i=r===void 0?!0:r,o=t.adaptive,a=o===void 0?!0:o,l=t.roundOffsets,c=l===void 0?!0:l,d={placement:ge(e.placement),variation:Be(e.placement),popper:e.elements.popper,popperRect:e.rects.popper,gpuAcceleration:i,isFixed:e.options.strategy==="fixed"};e.modifiersData.popperOffsets!=null&&(e.styles.popper=Object.assign({},e.styles.popper,xo(Object.assign({},d,{offsets:e.modifiersData.popperOffsets,position:e.options.strategy,adaptive:a,roundOffsets:c})))),e.modifiersData.arrow!=null&&(e.styles.arrow=Object.assign({},e.styles.arrow,xo(Object.assign({},d,{offsets:e.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:c})))),e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-placement":e.placement})}var yo={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:Es,data:{}};var gr={passive:!0};function Ts(n){var e=n.state,t=n.instance,r=n.options,i=r.scroll,o=i===void 0?!0:i,a=r.resize,l=a===void 0?!0:a,c=Z(e.elements.popper),d=[].concat(e.scrollParents.reference,e.scrollParents.popper);return o&&d.forEach(function(m){m.addEventListener("scroll",t.update,gr)}),l&&c.addEventListener("resize",t.update,gr),function(){o&&d.forEach(function(m){m.removeEventListener("scroll",t.update,gr)}),l&&c.removeEventListener("resize",t.update,gr)}}var jo={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:Ts,data:{}};var ks={left:"right",right:"left",bottom:"top",top:"bottom"};function nn(n){return n.replace(/left|right|bottom|top/g,function(e){return ks[e]})}var Ss={start:"end",end:"start"};function hr(n){return n.replace(/start|end/g,function(e){return Ss[e]})}function Ht(n){var e=Z(n),t=e.pageXOffset,r=e.pageYOffset;return{scrollLeft:t,scrollTop:r}}function $t(n){return Oe(Ae(n)).left+Ht(n).scrollLeft}function zr(n,e){var t=Z(n),r=Ae(n),i=t.visualViewport,o=r.clientWidth,a=r.clientHeight,l=0,c=0;if(i){o=i.width,a=i.height;var d=wn();(d||!d&&e==="fixed")&&(l=i.offsetLeft,c=i.offsetTop)}return{width:o,height:a,x:l+$t(n),y:c}}function Jr(n){var e,t=Ae(n),r=Ht(n),i=(e=n.ownerDocument)==null?void 0:e.body,o=qe(t.scrollWidth,t.clientWidth,i?i.scrollWidth:0,i?i.clientWidth:0),a=qe(t.scrollHeight,t.clientHeight,i?i.scrollHeight:0,i?i.clientHeight:0),l=-r.scrollLeft+$t(n),c=-r.scrollTop;return we(i||t).direction==="rtl"&&(l+=qe(t.clientWidth,i?i.clientWidth:0)-o),{width:o,height:a,x:l,y:c}}function Kt(n){var e=we(n),t=e.overflow,r=e.overflowX,i=e.overflowY;return/auto|scroll|overlay|hidden/.test(t+i+r)}function Ar(n){return["html","body","#document"].indexOf(me(n))>=0?n.ownerDocument.body:fe(n)&&Kt(n)?n:Ar(ft(n))}function bt(n,e){var t;e===void 0&&(e=[]);var r=Ar(n),i=r===((t=n.ownerDocument)==null?void 0:t.body),o=Z(r),a=i?[o].concat(o.visualViewport||[],Kt(r)?r:[]):r,l=e.concat(a);return i?l:l.concat(bt(ft(a)))}function rn(n){return Object.assign({},n,{left:n.x,top:n.y,right:n.x+n.width,bottom:n.y+n.height})}function Cs(n,e){var t=Oe(n,!1,e==="fixed");return t.top=t.top+n.clientTop,t.left=t.left+n.clientLeft,t.bottom=t.top+n.clientHeight,t.right=t.left+n.clientWidth,t.width=n.clientWidth,t.height=n.clientHeight,t.x=t.left,t.y=t.top,t}function vo(n,e,t){return e===dr?rn(zr(n,t)):Me(e)?Cs(e,t):rn(Jr(Ae(n)))}function Ds(n){var e=bt(ft(n)),t=["absolute","fixed"].indexOf(we(n).position)>=0,r=t&&fe(n)?Le(n):n;return Me(r)?e.filter(function(i){return Me(i)&&bn(i,r)&&me(i)!=="body"}):[]}function Qr(n,e,t,r){var i=e==="clippingParents"?Ds(n):[].concat(e),o=[].concat(i,[t]),a=o[0],l=o.reduce(function(c,d){var m=vo(n,d,r);return c.top=qe(m.top,c.top),c.right=It(m.right,c.right),c.bottom=It(m.bottom,c.bottom),c.left=qe(m.left,c.left),c},vo(n,a,r));return l.width=l.right-l.left,l.height=l.bottom-l.top,l.x=l.left,l.y=l.top,l}function Sn(n){var e=n.reference,t=n.element,r=n.placement,i=r?ge(r):null,o=r?Be(r):null,a=e.x+e.width/2-t.width/2,l=e.y+e.height/2-t.height/2,c;switch(i){case ie:c={x:a,y:e.y-t.height};break;case ue:c={x:a,y:e.y+e.height};break;case ce:c={x:e.x+e.width,y:l};break;case ae:c={x:e.x-t.width,y:l};break;default:c={x:e.x,y:e.y}}var d=i?qt(i):null;if(d!=null){var m=d==="y"?"height":"width";switch(o){case pt:c[d]=c[d]-(e[m]/2-t[m]/2);break;case Bt:c[d]=c[d]+(e[m]/2-t[m]/2);break;default:}}return c}function He(n,e){e===void 0&&(e={});var t=e,r=t.placement,i=r===void 0?n.placement:r,o=t.strategy,a=o===void 0?n.strategy:o,l=t.boundary,c=l===void 0?uo:l,d=t.rootBoundary,m=d===void 0?dr:d,_=t.elementContext,w=_===void 0?Zt:_,b=t.altBoundary,S=b===void 0?!1:b,k=t.padding,E=k===void 0?0:k,O=Tn(typeof E!="number"?E:kn(E,wt)),$=w===Zt?fo:Zt,K=n.rects.popper,D=n.elements[S?$:w],H=Qr(Me(D)?D:D.contextElement||Ae(n.elements.popper),c,m,a),F=Oe(n.elements.reference),J=Sn({reference:F,element:K,strategy:"absolute",placement:i}),te=rn(Object.assign({},K,J)),ne=w===Zt?te:F,Q={top:H.top-ne.top+O.top,bottom:ne.bottom-H.bottom+O.bottom,left:H.left-ne.left+O.left,right:ne.right-H.right+O.right},h=n.modifiersData.offset;if(w===Zt&&h){var C=h[i];Object.keys(Q).forEach(function(f){var Ie=[ce,ue].indexOf(f)>=0?1:-1,Ee=[ie,ue].indexOf(f)>=0?"y":"x";Q[f]+=C[Ee]*Ie})}return Q}function Xr(n,e){e===void 0&&(e={});var t=e,r=t.placement,i=t.boundary,o=t.rootBoundary,a=t.padding,l=t.flipVariations,c=t.allowedAutoPlacements,d=c===void 0?mr:c,m=Be(r),_=m?l?Wr:Wr.filter(function(S){return Be(S)===m}):wt,w=_.filter(function(S){return d.indexOf(S)>=0});w.length===0&&(w=_);var b=w.reduce(function(S,k){return S[k]=He(n,{placement:k,boundary:i,rootBoundary:o,padding:a})[ge(k)],S},{});return Object.keys(b).sort(function(S,k){return b[S]-b[k]})}function Ps(n){if(ge(n)===fr)return[];var e=nn(n);return[hr(n),e,hr(e)]}function Ns(n){var e=n.state,t=n.options,r=n.name;if(!e.modifiersData[r]._skip){for(var i=t.mainAxis,o=i===void 0?!0:i,a=t.altAxis,l=a===void 0?!0:a,c=t.fallbackPlacements,d=t.padding,m=t.boundary,_=t.rootBoundary,w=t.altBoundary,b=t.flipVariations,S=b===void 0?!0:b,k=t.allowedAutoPlacements,E=e.options.placement,O=ge(E),$=O===E,K=c||($||!S?[nn(E)]:Ps(E)),D=[E].concat(K).reduce(function(B,N){return B.concat(ge(N)===fr?Xr(e,{placement:N,boundary:m,rootBoundary:_,padding:d,flipVariations:S,allowedAutoPlacements:k}):N)},[]),H=e.rects.reference,F=e.rects.popper,J=new Map,te=!0,ne=D[0],Q=0;Q=0,Ee=Ie?"width":"height",_e=He(e,{placement:h,boundary:m,rootBoundary:_,altBoundary:w,padding:d}),xe=Ie?f?ce:ae:f?ue:ie;H[Ee]>F[Ee]&&(xe=nn(xe));var Ye=nn(xe),ke=[];if(o&&ke.push(_e[C]<=0),l&&ke.push(_e[xe]<=0,_e[Ye]<=0),ke.every(function(B){return B})){ne=h,te=!1;break}J.set(h,ke)}if(te)for(var Yt=S?3:1,Ue=function(N){var q=D.find(function(ee){var tt=J.get(ee);if(tt)return tt.slice(0,N).every(function(W){return W})});if(q)return ne=q,"break"},et=Yt;et>0;et--){var ye=Ue(et);if(ye==="break")break}e.placement!==ne&&(e.modifiersData[r]._skip=!0,e.placement=ne,e.reset=!0)}}var wo={name:"flip",enabled:!0,phase:"main",fn:Ns,requiresIfExists:["offset"],data:{_skip:!1}};function bo(n,e,t){return t===void 0&&(t={x:0,y:0}),{top:n.top-e.height-t.y,right:n.right-e.width+t.x,bottom:n.bottom-e.height+t.y,left:n.left-e.width-t.x}}function Eo(n){return[ie,ce,ue,ae].some(function(e){return n[e]>=0})}function Ms(n){var e=n.state,t=n.name,r=e.rects.reference,i=e.rects.popper,o=e.modifiersData.preventOverflow,a=He(e,{elementContext:"reference"}),l=He(e,{altBoundary:!0}),c=bo(a,r),d=bo(l,i,o),m=Eo(c),_=Eo(d);e.modifiersData[t]={referenceClippingOffsets:c,popperEscapeOffsets:d,isReferenceHidden:m,hasPopperEscaped:_},e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-reference-hidden":m,"data-popper-escaped":_})}var To={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:Ms};function Os(n,e,t){var r=ge(n),i=[ae,ie].indexOf(r)>=0?-1:1,o=typeof t=="function"?t(Object.assign({},e,{placement:n})):t,a=o[0],l=o[1];return a=a||0,l=(l||0)*i,[ae,ce].indexOf(r)>=0?{x:l,y:a}:{x:a,y:l}}function Bs(n){var e=n.state,t=n.options,r=n.name,i=t.offset,o=i===void 0?[0,0]:i,a=mr.reduce(function(m,_){return m[_]=Os(_,e.rects,o),m},{}),l=a[e.placement],c=l.x,d=l.y;e.modifiersData.popperOffsets!=null&&(e.modifiersData.popperOffsets.x+=c,e.modifiersData.popperOffsets.y+=d),e.modifiersData[r]=a}var ko={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:Bs};function Is(n){var e=n.state,t=n.name;e.modifiersData[t]=Sn({reference:e.rects.reference,element:e.rects.popper,strategy:"absolute",placement:e.placement})}var So={name:"popperOffsets",enabled:!0,phase:"read",fn:Is,data:{}};function Zr(n){return n==="x"?"y":"x"}function Fs(n){var e=n.state,t=n.options,r=n.name,i=t.mainAxis,o=i===void 0?!0:i,a=t.altAxis,l=a===void 0?!1:a,c=t.boundary,d=t.rootBoundary,m=t.altBoundary,_=t.padding,w=t.tether,b=w===void 0?!0:w,S=t.tetherOffset,k=S===void 0?0:S,E=He(e,{boundary:c,rootBoundary:d,padding:_,altBoundary:m}),O=ge(e.placement),$=Be(e.placement),K=!$,D=qt(O),H=Zr(D),F=e.modifiersData.popperOffsets,J=e.rects.reference,te=e.rects.popper,ne=typeof k=="function"?k(Object.assign({},e.rects,{placement:e.placement})):k,Q=typeof ne=="number"?{mainAxis:ne,altAxis:ne}:Object.assign({mainAxis:0,altAxis:0},ne),h=e.modifiersData.offset?e.modifiersData.offset[e.placement]:null,C={x:0,y:0};if(!!F){if(o){var f,Ie=D==="y"?ie:ae,Ee=D==="y"?ue:ce,_e=D==="y"?"height":"width",xe=F[D],Ye=xe+E[Ie],ke=xe-E[Ee],Yt=b?-te[_e]/2:0,Ue=$===pt?J[_e]:te[_e],et=$===pt?-te[_e]:-J[_e],ye=e.elements.arrow,B=b&&ye?Ft(ye):{width:0,height:0},N=e.modifiersData["arrow#persistent"]?e.modifiersData["arrow#persistent"].padding:En(),q=N[Ie],ee=N[Ee],tt=Lt(0,J[_e],B[_e]),W=K?J[_e]/2-Yt-tt-q-Q.mainAxis:Ue-tt-q-Q.mainAxis,je=K?-J[_e]/2+Yt+tt+ee+Q.mainAxis:et+tt+ee+Q.mainAxis,kt=e.elements.arrow&&Le(e.elements.arrow),Mn=kt?D==="y"?kt.clientTop||0:kt.clientLeft||0:0,nt=(f=h==null?void 0:h[D])!=null?f:0,rt=xe+W-nt-Mn,ht=xe+je-nt,St=Lt(b?It(Ye,rt):Ye,xe,b?qe(ke,ht):ke);F[D]=St,C[D]=St-xe}if(l){var On,Bn=D==="x"?ie:ae,In=D==="x"?ue:ce,it=F[H],Ut=H==="y"?"height":"width",Fn=it+E[Bn],qn=it-E[In],pn=[ie,ae].indexOf(O)!==-1,Ct=(On=h==null?void 0:h[H])!=null?On:0,Ln=pn?Fn:it-J[Ut]-te[Ut]-Ct+Q.altAxis,Ge=pn?it+J[Ut]+te[Ut]-Ct-Q.altAxis:qn,se=b&&pn?Ao(Ln,it,Ge):Lt(b?Ln:Fn,it,b?Ge:qn);F[H]=se,C[H]=se-it}e.modifiersData[r]=C}}var Co={name:"preventOverflow",enabled:!0,phase:"main",fn:Fs,requiresIfExists:["offset"]};function ei(n){return{scrollLeft:n.scrollLeft,scrollTop:n.scrollTop}}function ti(n){return n===Z(n)||!fe(n)?Ht(n):ei(n)}function qs(n){var e=n.getBoundingClientRect(),t=ut(e.width)/n.offsetWidth||1,r=ut(e.height)/n.offsetHeight||1;return t!==1||r!==1}function ni(n,e,t){t===void 0&&(t=!1);var r=fe(e),i=fe(e)&&qs(e),o=Ae(e),a=Oe(n,i,t),l={scrollLeft:0,scrollTop:0},c={x:0,y:0};return(r||!r&&!t)&&((me(e)!=="body"||Kt(o))&&(l=ti(e)),fe(e)?(c=Oe(e,!0),c.x+=e.clientLeft,c.y+=e.clientTop):o&&(c.x=$t(o))),{x:a.left+l.scrollLeft-c.x,y:a.top+l.scrollTop-c.y,width:a.width,height:a.height}}function Ls(n){var e=new Map,t=new Set,r=[];n.forEach(function(o){e.set(o.name,o)});function i(o){t.add(o.name);var a=[].concat(o.requires||[],o.requiresIfExists||[]);a.forEach(function(l){if(!t.has(l)){var c=e.get(l);c&&i(c)}}),r.push(o)}return n.forEach(function(o){t.has(o.name)||i(o)}),r}function ri(n){var e=Ls(n);return mo.reduce(function(t,r){return t.concat(e.filter(function(i){return i.phase===r}))},[])}function ii(n){var e;return function(){return e||(e=new Promise(function(t){Promise.resolve().then(function(){e=void 0,t(n())})})),e}}function oi(n){var e=n.reduce(function(t,r){var i=t[r.name];return t[r.name]=i?Object.assign({},i,r,{options:Object.assign({},i.options,r.options),data:Object.assign({},i.data,r.data)}):r,t},{});return Object.keys(e).map(function(t){return e[t]})}var Do={placement:"bottom",modifiers:[],strategy:"absolute"};function Po(){for(var n=arguments.length,e=new Array(n),t=0;t(n%e+e)%e,Oo=class{constructor(e,t,r){this.owner=e,this.containerEl=t,t.on("click",".suggestion-item",this.onSuggestionClick.bind(this)),t.on("mousemove",".suggestion-item",this.onSuggestionMouseover.bind(this)),r.register([],"ArrowUp",i=>{if(!i.isComposing)return this.setSelectedItem(this.selectedItem-1,!0),!1}),r.register([],"ArrowDown",i=>{if(!i.isComposing)return this.setSelectedItem(this.selectedItem+1,!0),!1}),r.register([],"Enter",i=>{if(!i.isComposing)return this.useSelectedItem(i),!1})}onSuggestionClick(e,t){e.preventDefault();let r=this.suggestions.indexOf(t);this.setSelectedItem(r,!1),this.useSelectedItem(e)}onSuggestionMouseover(e,t){let r=this.suggestions.indexOf(t);this.setSelectedItem(r,!1)}setSuggestions(e){this.containerEl.empty();let t=[];e.forEach(r=>{let i=this.containerEl.createDiv("suggestion-item");this.owner.renderSuggestion(r,i),t.push(i)}),this.values=e,this.suggestions=t,this.setSelectedItem(0,!1)}useSelectedItem(e){let t=this.values[this.selectedItem];t&&this.owner.selectSuggestion(t,e)}setSelectedItem(e,t){let r=$s(e,this.suggestions.length),i=this.suggestions[this.selectedItem],o=this.suggestions[r];i?.removeClass("is-selected"),o?.addClass("is-selected"),this.selectedItem=r,t&&o.scrollIntoView(!1)}},Cn=class{constructor(e,t){this.app=e,this.inputEl=t,this.scope=new Mo.Scope,this.suggestEl=createDiv("suggestion-container");let r=this.suggestEl.createDiv("suggestion");this.suggest=new Oo(this,r,this.scope),this.scope.register([],"Escape",this.close.bind(this)),this.inputEl.addEventListener("input",this.onInputChanged.bind(this)),this.inputEl.addEventListener("focus",this.onInputChanged.bind(this)),this.inputEl.addEventListener("blur",this.close.bind(this)),this.suggestEl.on("mousedown",".suggestion-container",i=>{i.preventDefault()})}onInputChanged(){let e=this.inputEl.value,t=this.getSuggestions(e);if(!t){this.close();return}t.length>0?(this.suggest.setSuggestions(t),this.open(this.app.dom.appContainerEl,this.inputEl)):this.close()}open(e,t){this.app.keymap.pushScope(this.scope),e.appendChild(this.suggestEl),this.popper=ai(t,this.suggestEl,{placement:"bottom-start",modifiers:[{name:"sameWidth",enabled:!0,fn:({state:r,instance:i})=>{let o=`${r.rects.reference.width}px`;r.styles.popper.width!==o&&(r.styles.popper.width=o,i.update())},phase:"beforeWrite",requires:["computeStyles"]}]})}close(){this.app.keymap.popScope(this.scope),this.suggest.setSuggestions([]),this.popper&&this.popper.destroy(),this.suggestEl.detach()}};var $e;(function(t){t[t.TemplateFiles=0]="TemplateFiles",t[t.ScriptFiles=1]="ScriptFiles"})($e||($e={}));var on=class extends Cn{constructor(e,t,r){super(t.app,e);this.inputEl=e;this.plugin=t;this.mode=r}get_folder(e){switch(e){case 0:return this.plugin.settings.templates_folder;case 1:return this.plugin.settings.user_scripts_folder}}get_error_msg(e){switch(e){case 0:return"Templates folder doesn't exist";case 1:return"User Scripts folder doesn't exist"}}getSuggestions(e){let t=Ce(()=>Je(this.plugin.app,this.get_folder(this.mode)),this.get_error_msg(this.mode));if(!t)return[];let r=[],i=e.toLowerCase();return t.forEach(o=>{o instanceof Bo.TFile&&o.extension==="md"&&o.path.toLowerCase().contains(i)&&r.push(o)}),r.slice(0,1e3)}renderSuggestion(e,t){t.setText(e.path)}selectSuggestion(e){this.inputEl.value=e.path,this.inputEl.trigger("input"),this.close()}};var Io=X(require("obsidian"));var Dn=class extends Cn{constructor(e,t){super(e,t)}getSuggestions(e){let t=this.app.vault.getAllLoadedFiles(),r=[],i=e.toLowerCase();return t.forEach(o=>{o instanceof Io.TFolder&&o.path.toLowerCase().contains(i)&&r.push(o)}),r.slice(0,1e3)}renderSuggestion(e,t){t.setText(e.path)}selectSuggestion(e){this.inputEl.value=e.path,this.inputEl.trigger("input"),this.close()}};var dt;(function(o){o[o.Off=0]="Off",o[o.RenderDescriptionParameterReturn=1]="RenderDescriptionParameterReturn",o[o.RenderDescriptionParameterList=2]="RenderDescriptionParameterList",o[o.RenderDescriptionReturn=3]="RenderDescriptionReturn",o[o.RenderDescriptionOnly=4]="RenderDescriptionOnly"})(dt||(dt={}));function Fo(n){return isBoolean(n)?n:[1,3].includes(n)}function qo(n){return isBoolean(n)?n:[1,2].includes(n)}function Lo(n){return isBoolean(n)?n:n!=0}var Ho={command_timeout:5,templates_folder:"",templates_pairs:[["",""]],trigger_on_file_creation:!1,auto_jump_to_cursor:!1,enable_system_commands:!1,shell_path:"",user_scripts_folder:"",enable_folder_templates:!0,folder_templates:[{folder:"",template:""}],enable_file_templates:!1,file_templates:[{regex:".*",template:""}],syntax_highlighting:!0,syntax_highlighting_mobile:!1,enabled_templates_hotkeys:[""],startup_templates:[""],intellisense_render:dt.RenderDescriptionParameterReturn},si=class extends L.PluginSettingTab{constructor(e){super(e.app,e);this.plugin=e;this.icon="templater-icon"}display(){this.containerEl.empty(),this.add_template_folder_setting(),this.add_internal_functions_setting(),this.add_syntax_highlighting_settings(),this.add_auto_jump_to_cursor(),this.add_trigger_on_new_file_creation_setting(),this.plugin.settings.trigger_on_file_creation&&(this.add_folder_templates_setting(),this.add_file_templates_setting()),this.add_templates_hotkeys_setting(),this.add_startup_templates_setting(),this.add_user_script_functions_setting(),this.add_user_system_command_functions_setting(),this.add_donating_setting()}add_template_folder_setting(){new L.Setting(this.containerEl).setName("Template folder location").setDesc("Files in this folder will be available as templates.").addSearch(e=>{new Dn(this.app,e.inputEl),e.setPlaceholder("Example: folder1/folder2").setValue(this.plugin.settings.templates_folder).onChange(t=>{t=t.trim(),t=t.replace(/\/$/,""),this.plugin.settings.templates_folder=t,this.plugin.save_settings()}),e.containerEl.addClass("templater_search")})}add_internal_functions_setting(){let e=document.createDocumentFragment();e.append("Templater provides multiples predefined variables / functions that you can use.",e.createEl("br"),"Check the ",e.createEl("a",{href:"https://silentvoid13.github.io/Templater/",text:"documentation"})," to get a list of all the available internal variables / functions."),new L.Setting(this.containerEl).setName("Internal variables and functions").setDesc(e)}add_syntax_highlighting_settings(){let e=document.createDocumentFragment();e.append("Adds syntax highlighting for Templater commands in edit mode.");let t=document.createDocumentFragment();t.append("Adds syntax highlighting for Templater commands in edit mode on mobile. Use with caution: this may break live preview on mobile platforms."),new L.Setting(this.containerEl).setName("Syntax highlighting on desktop").setDesc(e).addToggle(r=>{r.setValue(this.plugin.settings.syntax_highlighting).onChange(i=>{this.plugin.settings.syntax_highlighting=i,this.plugin.save_settings(),this.plugin.event_handler.update_syntax_highlighting()})}),new L.Setting(this.containerEl).setName("Syntax highlighting on mobile").setDesc(t).addToggle(r=>{r.setValue(this.plugin.settings.syntax_highlighting_mobile).onChange(i=>{this.plugin.settings.syntax_highlighting_mobile=i,this.plugin.save_settings(),this.plugin.event_handler.update_syntax_highlighting()})})}add_auto_jump_to_cursor(){let e=document.createDocumentFragment();e.append("Automatically triggers ",e.createEl("code",{text:"tp.file.cursor"})," after inserting a template.",e.createEl("br"),"You can also set a hotkey to manually trigger ",e.createEl("code",{text:"tp.file.cursor"}),"."),new L.Setting(this.containerEl).setName("Automatic jump to cursor").setDesc(e).addToggle(t=>{t.setValue(this.plugin.settings.auto_jump_to_cursor).onChange(r=>{this.plugin.settings.auto_jump_to_cursor=r,this.plugin.save_settings()})})}add_trigger_on_new_file_creation_setting(){let e=document.createDocumentFragment();e.append("Templater will listen for the new file creation event, and, if it matches a rule you've set, replace every command it finds in the new file's content. ","This makes Templater compatible with other plugins like the Daily note core plugin, Calendar plugin, Review plugin, Note refactor plugin, etc. ",e.createEl("br"),e.createEl("br"),"Make sure to set up rules under either folder templates or file regex template below.",e.createEl("br"),e.createEl("br"),e.createEl("b",{text:"Warning: "}),"This can be dangerous if you create new files with unknown / unsafe content on creation. Make sure that every new file's content is safe on creation."),new L.Setting(this.containerEl).setName("Trigger Templater on new file creation").setDesc(e).addToggle(t=>{t.setValue(this.plugin.settings.trigger_on_file_creation).onChange(r=>{this.plugin.settings.trigger_on_file_creation=r,this.plugin.save_settings(),this.plugin.event_handler.update_trigger_file_on_creation(),this.display()})})}add_templates_hotkeys_setting(){new L.Setting(this.containerEl).setName("Template hotkeys").setHeading();let e=document.createDocumentFragment();e.append("Template hotkeys allows you to bind a template to a hotkey."),new L.Setting(this.containerEl).setDesc(e),this.plugin.settings.enabled_templates_hotkeys.forEach((t,r)=>{new L.Setting(this.containerEl).addSearch(o=>{new on(o.inputEl,this.plugin,$e.TemplateFiles),o.setPlaceholder("Example: folder1/template_file").setValue(t).onChange(a=>{if(a&&this.plugin.settings.enabled_templates_hotkeys.contains(a)){oe(new P("This template is already bound to a hotkey"));return}this.plugin.command_handler.add_template_hotkey(this.plugin.settings.enabled_templates_hotkeys[r],a),this.plugin.settings.enabled_templates_hotkeys[r]=a,this.plugin.save_settings()}),o.containerEl.addClass("templater_search")}).addExtraButton(o=>{o.setIcon("any-key").setTooltip("Configure Hotkey").onClick(()=>{this.app.setting.openTabById("hotkeys");let a=this.app.setting.activeTab;a.searchComponent.inputEl.value=t,a.updateHotkeyVisibility()})}).addExtraButton(o=>{o.setIcon("up-chevron-glyph").setTooltip("Move up").onClick(()=>{Ot(this.plugin.settings.enabled_templates_hotkeys,r,r-1),this.plugin.save_settings(),this.display()})}).addExtraButton(o=>{o.setIcon("down-chevron-glyph").setTooltip("Move down").onClick(()=>{Ot(this.plugin.settings.enabled_templates_hotkeys,r,r+1),this.plugin.save_settings(),this.display()})}).addExtraButton(o=>{o.setIcon("cross").setTooltip("Delete").onClick(()=>{this.plugin.command_handler.remove_template_hotkey(this.plugin.settings.enabled_templates_hotkeys[r]),this.plugin.settings.enabled_templates_hotkeys.splice(r,1),this.plugin.save_settings(),this.display()})}).infoEl.remove()}),new L.Setting(this.containerEl).addButton(t=>{t.setButtonText("Add new hotkey for template").setCta().onClick(()=>{this.plugin.settings.enabled_templates_hotkeys.push(""),this.plugin.save_settings(),this.display()})})}add_folder_templates_setting(){new L.Setting(this.containerEl).setName("Folder templates").setHeading();let e=document.createDocumentFragment();e.append("Folder templates are triggered when a new ",e.createEl("strong",{text:"empty "}),"file is created in a given folder.",e.createEl("br"),"Templater will fill the empty file with the specified template.",e.createEl("br"),"The deepest match is used. A global default template would be defined on the root ",e.createEl("code",{text:"/"}),"."),new L.Setting(this.containerEl).setDesc(e);let t=document.createDocumentFragment();t.append("When enabled, Templater will make use of the folder templates defined below. This option is mutually exclusive with file regex templates below, so enabling one will disable the other."),new L.Setting(this.containerEl).setName("Enable folder templates").setDesc(t).addToggle(r=>{r.setValue(this.plugin.settings.enable_folder_templates).onChange(i=>{this.plugin.settings.enable_folder_templates=i,i&&(this.plugin.settings.enable_file_templates=!1),this.plugin.save_settings(),this.display()})}),!!this.plugin.settings.enable_folder_templates&&(this.plugin.settings.folder_templates.forEach((r,i)=>{new L.Setting(this.containerEl).addSearch(a=>{new Dn(this.app,a.inputEl),a.setPlaceholder("Folder").setValue(r.folder).onChange(l=>{if(l&&this.plugin.settings.folder_templates.some(c=>c.folder==l)){oe(new P("This folder already has a template associated with it"));return}this.plugin.settings.folder_templates[i].folder=l,this.plugin.save_settings()}),a.containerEl.addClass("templater_search")}).addSearch(a=>{new on(a.inputEl,this.plugin,$e.TemplateFiles),a.setPlaceholder("Template").setValue(r.template).onChange(l=>{this.plugin.settings.folder_templates[i].template=l,this.plugin.save_settings()}),a.containerEl.addClass("templater_search")}).addExtraButton(a=>{a.setIcon("up-chevron-glyph").setTooltip("Move up").onClick(()=>{Ot(this.plugin.settings.folder_templates,i,i-1),this.plugin.save_settings(),this.display()})}).addExtraButton(a=>{a.setIcon("down-chevron-glyph").setTooltip("Move down").onClick(()=>{Ot(this.plugin.settings.folder_templates,i,i+1),this.plugin.save_settings(),this.display()})}).addExtraButton(a=>{a.setIcon("cross").setTooltip("Delete").onClick(()=>{this.plugin.settings.folder_templates.splice(i,1),this.plugin.save_settings(),this.display()})}).infoEl.remove()}),new L.Setting(this.containerEl).addButton(r=>{r.setButtonText("Add new folder template").setTooltip("Add additional folder template").setCta().onClick(()=>{this.plugin.settings.folder_templates.push({folder:"",template:""}),this.plugin.save_settings(),this.display()})}))}add_file_templates_setting(){new L.Setting(this.containerEl).setName("File regex templates").setHeading();let e=document.createDocumentFragment();e.append("File regex templates are triggered when a new ",e.createEl("strong",{text:"empty"})," file is created that matches one of them. Templater will fill the empty file with the specified template.",e.createEl("br"),"The first match from the top is used, so the order of the rules is important.",e.createEl("br"),"Use ",e.createEl("code",{text:".*"})," as a final catch-all, if you need it."),new L.Setting(this.containerEl).setDesc(e);let t=document.createDocumentFragment();t.append("When enabled, Templater will make use of the file regex templates defined below. This option is mutually exclusive with folder templates above, so enabling one will disable the other."),new L.Setting(this.containerEl).setName("Enable file regex templates").setDesc(t).addToggle(r=>{r.setValue(this.plugin.settings.enable_file_templates).onChange(i=>{this.plugin.settings.enable_file_templates=i,i&&(this.plugin.settings.enable_folder_templates=!1),this.plugin.save_settings(),this.display()})}),!!this.plugin.settings.enable_file_templates&&(this.plugin.settings.file_templates.forEach((r,i)=>{new L.Setting(this.containerEl).addText(a=>{a.setPlaceholder("File regex").setValue(r.regex).onChange(l=>{this.plugin.settings.file_templates[i].regex=l,this.plugin.save_settings()}),a.inputEl.addClass("templater_search")}).addSearch(a=>{new on(a.inputEl,this.plugin,$e.TemplateFiles),a.setPlaceholder("Template").setValue(r.template).onChange(l=>{this.plugin.settings.file_templates[i].template=l,this.plugin.save_settings()}),a.containerEl.addClass("templater_search")}).addExtraButton(a=>{a.setIcon("up-chevron-glyph").setTooltip("Move up").onClick(()=>{Ot(this.plugin.settings.file_templates,i,i-1),this.plugin.save_settings(),this.display()})}).addExtraButton(a=>{a.setIcon("down-chevron-glyph").setTooltip("Move down").onClick(()=>{Ot(this.plugin.settings.file_templates,i,i+1),this.plugin.save_settings(),this.display()})}).addExtraButton(a=>{a.setIcon("cross").setTooltip("Delete").onClick(()=>{this.plugin.settings.file_templates.splice(i,1),this.plugin.save_settings(),this.display()})}).infoEl.remove()}),new L.Setting(this.containerEl).addButton(r=>{r.setButtonText("Add new file regex").setTooltip("Add additional file regex").setCta().onClick(()=>{this.plugin.settings.file_templates.push({regex:"",template:""}),this.plugin.save_settings(),this.display()})}))}add_startup_templates_setting(){new L.Setting(this.containerEl).setName("Startup templates").setHeading();let e=document.createDocumentFragment();e.append("Startup templates are templates that will get executed once when Templater starts.",e.createEl("br"),"These templates won't output anything.",e.createEl("br"),"This can be useful to set up templates adding hooks to Obsidian events for example."),new L.Setting(this.containerEl).setDesc(e),this.plugin.settings.startup_templates.forEach((t,r)=>{new L.Setting(this.containerEl).addSearch(o=>{new on(o.inputEl,this.plugin,$e.TemplateFiles),o.setPlaceholder("Example: folder1/template_file").setValue(t).onChange(a=>{if(a&&this.plugin.settings.startup_templates.contains(a)){oe(new P("This startup template already exist"));return}this.plugin.settings.startup_templates[r]=a,this.plugin.save_settings()}),o.containerEl.addClass("templater_search")}).addExtraButton(o=>{o.setIcon("cross").setTooltip("Delete").onClick(()=>{this.plugin.settings.startup_templates.splice(r,1),this.plugin.save_settings(),this.display()})}).infoEl.remove()}),new L.Setting(this.containerEl).addButton(t=>{t.setButtonText("Add new startup template").setCta().onClick(()=>{this.plugin.settings.startup_templates.push(""),this.plugin.save_settings(),this.display()})})}add_user_script_functions_setting(){new L.Setting(this.containerEl).setName("User script functions").setHeading();let e=document.createDocumentFragment();e.append("All JavaScript files in this folder will be loaded as CommonJS modules, to import custom user functions.",e.createEl("br"),"The folder needs to be accessible from the vault.",e.createEl("br"),"Check the ",e.createEl("a",{href:"https://silentvoid13.github.io/Templater/",text:"documentation"})," for more information."),new L.Setting(this.containerEl).setName("Script files folder location").setDesc(e).addSearch(r=>{new Dn(this.app,r.inputEl),r.setPlaceholder("Example: folder1/folder2").setValue(this.plugin.settings.user_scripts_folder).onChange(i=>{this.plugin.settings.user_scripts_folder=i,this.plugin.save_settings()}),r.containerEl.addClass("templater_search")}),new L.Setting(this.containerEl).setName("User script intellisense").setDesc("Determine how you'd like to have user script intellisense render. Note values will not render if not in the script.").addDropdown(r=>{r.addOption("0","Turn off intellisense").addOption("1","Render method description, parameters list, and return").addOption("2","Render method description and parameters list").addOption("3","Render method description and return").addOption("4","Render method description").setValue(this.plugin.settings.intellisense_render.toString()).onChange(i=>{this.plugin.settings.intellisense_render=parseInt(i),this.plugin.save_settings()})}),e=document.createDocumentFragment();let t;if(!this.plugin.settings.user_scripts_folder)t="No user scripts folder set";else{let r=Ce(()=>Je(this.app,this.plugin.settings.user_scripts_folder),"User scripts folder doesn't exist");if(!r||r.length===0)t="No user scripts detected";else{let i=0;for(let o of r)o.extension==="js"&&(i++,e.append(e.createEl("li",{text:`tp.user.${o.basename}`})));t=`Detected ${i} User Script(s)`}}new L.Setting(this.containerEl).setName(t).setDesc(e).addExtraButton(r=>{r.setIcon("sync").setTooltip("Refresh").onClick(()=>{this.display()})})}add_user_system_command_functions_setting(){let e=document.createDocumentFragment();if(e.append("Allows you to create user functions linked to system commands.",e.createEl("br"),e.createEl("b",{text:"Warning: "}),"It can be dangerous to execute arbitrary system commands from untrusted sources. Only run system commands that you understand, from trusted sources."),new L.Setting(this.containerEl).setName("User system command functions").setHeading(),new L.Setting(this.containerEl).setName("Enable user system command functions").setDesc(e).addToggle(t=>{t.setValue(this.plugin.settings.enable_system_commands).onChange(r=>{this.plugin.settings.enable_system_commands=r,this.plugin.save_settings(),this.display()})}),this.plugin.settings.enable_system_commands){new L.Setting(this.containerEl).setName("Timeout").setDesc("Maximum timeout in seconds for a system command.").addText(o=>{o.setPlaceholder("Timeout").setValue(this.plugin.settings.command_timeout.toString()).onChange(a=>{let l=Number(a);if(isNaN(l)){oe(new P("Timeout must be a number"));return}this.plugin.settings.command_timeout=l,this.plugin.save_settings()})}),e=document.createDocumentFragment(),e.append("Full path to the shell binary to execute the command with.",e.createEl("br"),"This setting is optional and will default to the system's default shell if not specified.",e.createEl("br"),"You can use forward slashes ('/') as path separators on all platforms if in doubt."),new L.Setting(this.containerEl).setName("Shell binary location").setDesc(e).addText(o=>{o.setPlaceholder("Example: /bin/bash, ...").setValue(this.plugin.settings.shell_path).onChange(a=>{this.plugin.settings.shell_path=a,this.plugin.save_settings()})});let t=1;this.plugin.settings.templates_pairs.forEach(o=>{let a=this.containerEl.createEl("div");a.addClass("templater_div");let l=this.containerEl.createEl("h4",{text:"User function n\xB0"+t});l.addClass("templater_title"),new L.Setting(this.containerEl).addExtraButton(d=>{d.setIcon("cross").setTooltip("Delete").onClick(()=>{let m=this.plugin.settings.templates_pairs.indexOf(o);m>-1&&(this.plugin.settings.templates_pairs.splice(m,1),this.plugin.save_settings(),this.display())})}).addText(d=>{let m=d.setPlaceholder("Function name").setValue(o[0]).onChange(_=>{let w=this.plugin.settings.templates_pairs.indexOf(o);w>-1&&(this.plugin.settings.templates_pairs[w][0]=_,this.plugin.save_settings())});return m.inputEl.addClass("templater_template"),m}).addTextArea(d=>{let m=d.setPlaceholder("System command").setValue(o[1]).onChange(_=>{let w=this.plugin.settings.templates_pairs.indexOf(o);w>-1&&(this.plugin.settings.templates_pairs[w][1]=_,this.plugin.save_settings())});return m.inputEl.setAttr("rows",2),m.inputEl.addClass("templater_cmd"),m}).infoEl.remove(),a.appendChild(l),a.appendChild(this.containerEl.lastChild),t+=1});let r=this.containerEl.createEl("div");r.addClass("templater_div2"),new L.Setting(this.containerEl).addButton(o=>{o.setButtonText("Add new user function").setCta().onClick(()=>{this.plugin.settings.templates_pairs.push(["",""]),this.plugin.save_settings(),this.display()})}).infoEl.remove(),r.appendChild(this.containerEl.lastChild)}}add_donating_setting(){let e=new L.Setting(this.containerEl).setName("Donate").setDesc("If you like this Plugin, consider donating to support continued development."),t=document.createElement("a");t.setAttribute("href","https://github.com/sponsors/silentvoid13"),t.addClass("templater_donating");let r=document.createElement("img");r.src="https://img.shields.io/static/v1?label=Sponsor&message=%E2%9D%A4&logo=GitHub&color=%23fe8e86",t.appendChild(r);let i=document.createElement("a");i.setAttribute("href","https://www.paypal.com/donate?hosted_button_id=U2SRGAFYXT32Q"),i.addClass("templater_donating");let o=document.createElement("img");o.src="https://img.shields.io/badge/paypal-silentvoid13-yellow?style=social&logo=paypal",i.appendChild(o),e.settingEl.appendChild(t),e.settingEl.appendChild(i)}};var _r=X(require("obsidian"));var an;(function(t){t[t.InsertTemplate=0]="InsertTemplate",t[t.CreateNoteTemplate=1]="CreateNoteTemplate"})(an||(an={}));var ci=class extends _r.FuzzySuggestModal{constructor(e){super(e.app);this.plugin=e,this.setPlaceholder("Type name of a template...")}getItems(){if(!this.plugin.settings.templates_folder)return this.app.vault.getMarkdownFiles();let e=Ce(()=>Je(this.plugin.app,this.plugin.settings.templates_folder),`Couldn't retrieve template files from templates folder ${this.plugin.settings.templates_folder}`);return e||[]}getItemText(e){let t=e.path;if(e.path.startsWith(this.plugin.settings.templates_folder)&&(0,_r.normalizePath)(this.plugin.settings.templates_folder)!="/"){let r=this.plugin.settings.templates_folder.length,i=this.plugin.settings.templates_folder.endsWith("/")?r:r+1;t=e.path.slice(i)}return t.split(".").slice(0,-1).join(".")}onChooseItem(e){switch(this.open_mode){case 0:this.plugin.templater.append_template_to_active_file(e);break;case 1:this.plugin.templater.create_new_note_from_template(e,this.creation_folder);break}}start(){try{this.open()}catch(e){oe(e)}}insert_template(){this.open_mode=0,this.start()}create_new_note_from_template(e){this.creation_folder=e,this.open_mode=1,this.start()}};var $o="Error_MobileUnsupportedTemplate",Ko='';var de=X(require("obsidian"));var mt=X(require("obsidian"));var be=class{constructor(e){this.plugin=e;this.static_functions=new Map;this.dynamic_functions=new Map}getName(){return this.name}async init(){await this.create_static_templates(),this.static_object=Object.fromEntries(this.static_functions)}async generate_object(e){return this.config=e,await this.create_dynamic_templates(),{...this.static_object,...Object.fromEntries(this.dynamic_functions)}}};var li=class extends be{constructor(){super(...arguments);this.name="date"}async create_static_templates(){this.static_functions.set("now",this.generate_now()),this.static_functions.set("tomorrow",this.generate_tomorrow()),this.static_functions.set("weekday",this.generate_weekday()),this.static_functions.set("yesterday",this.generate_yesterday())}async create_dynamic_templates(){}async teardown(){}generate_now(){return(e="YYYY-MM-DD",t,r,i)=>{if(r&&!(0,mt.moment)(r,i).isValid())throw new P("Invalid reference date format, try specifying one with the argument 'reference_format'");let o;return typeof t=="string"?o=mt.moment.duration(t):typeof t=="number"&&(o=mt.moment.duration(t,"days")),(0,mt.moment)(r,i).add(o).format(e)}}generate_tomorrow(){return(e="YYYY-MM-DD")=>(0,mt.moment)().add(1,"days").format(e)}generate_weekday(){return(e="YYYY-MM-DD",t,r,i)=>{if(r&&!(0,mt.moment)(r,i).isValid())throw new P("Invalid reference date format, try specifying one with the argument 'reference_format'");return(0,mt.moment)(r,i).weekday(t).format(e)}}generate_yesterday(){return(e="YYYY-MM-DD")=>(0,mt.moment)().add(-1,"days").format(e)}};var le=X(require("obsidian"));var Ro=10,pi=class extends be{constructor(){super(...arguments);this.name="file";this.include_depth=0;this.create_new_depth=0;this.linkpath_regex=new RegExp("^\\[\\[(.*)\\]\\]$")}async create_static_templates(){this.static_functions.set("creation_date",this.generate_creation_date()),this.static_functions.set("create_new",this.generate_create_new()),this.static_functions.set("cursor",this.generate_cursor()),this.static_functions.set("cursor_append",this.generate_cursor_append()),this.static_functions.set("exists",this.generate_exists()),this.static_functions.set("find_tfile",this.generate_find_tfile()),this.static_functions.set("folder",this.generate_folder()),this.static_functions.set("include",this.generate_include()),this.static_functions.set("last_modified_date",this.generate_last_modified_date()),this.static_functions.set("move",this.generate_move()),this.static_functions.set("path",this.generate_path()),this.static_functions.set("rename",this.generate_rename()),this.static_functions.set("selection",this.generate_selection())}async create_dynamic_templates(){this.dynamic_functions.set("content",await this.generate_content()),this.dynamic_functions.set("tags",this.generate_tags()),this.dynamic_functions.set("title",this.generate_title())}async teardown(){}async generate_content(){return await this.plugin.app.vault.read(this.config.target_file)}generate_create_new(){return async(e,t,r=!1,i)=>{if(this.create_new_depth+=1,this.create_new_depth>Ro)throw this.create_new_depth=0,new P("Reached create_new depth limit (max = 10)");let o=await this.plugin.templater.create_new_note_from_template(e,i,t,r);return this.create_new_depth-=1,o}}generate_creation_date(){return(e="YYYY-MM-DD HH:mm")=>(0,le.moment)(this.config.target_file.stat.ctime).format(e)}generate_cursor(){return e=>`<% tp.file.cursor(${e??""}) %>`}generate_cursor_append(){return e=>{let t=this.plugin.app.workspace.activeEditor;if(!t||!t.editor){oe(new P("No active editor, can't append to cursor."));return}return t.editor.getDoc().replaceSelection(e),""}}generate_exists(){return async e=>{let t=(0,le.normalizePath)(e);return await this.plugin.app.vault.exists(t)}}generate_find_tfile(){return e=>{let t=(0,le.normalizePath)(e);return this.plugin.app.metadataCache.getFirstLinkpathDest(t,"")}}generate_folder(){return(e=!1)=>{let t=this.config.target_file.parent,r;return e?r=t.path:r=t.name,r}}generate_include(){return async e=>{if(this.include_depth+=1,this.include_depth>Ro)throw this.include_depth-=1,new P("Reached inclusion depth limit (max = 10)");let t;if(e instanceof le.TFile)t=await this.plugin.app.vault.read(e);else{let r;if((r=this.linkpath_regex.exec(e))===null)throw this.include_depth-=1,new P("Invalid file format, provide an obsidian link between quotes.");let{path:i,subpath:o}=(0,le.parseLinktext)(r[1]),a=this.plugin.app.metadataCache.getFirstLinkpathDest(i,"");if(!a)throw this.include_depth-=1,new P(`File ${e} doesn't exist`);if(t=await this.plugin.app.vault.read(a),o){let l=this.plugin.app.metadataCache.getFileCache(a);if(l){let c=(0,le.resolveSubpath)(l,o);c&&(t=t.slice(c.start.offset,c.end?.offset))}}}try{let r=await this.plugin.templater.parser.parse_commands(t,this.plugin.templater.current_functions_object);return this.include_depth-=1,r}catch(r){throw this.include_depth-=1,r}}}generate_last_modified_date(){return(e="YYYY-MM-DD HH:mm")=>(0,le.moment)(this.config.target_file.stat.mtime).format(e)}generate_move(){return async(e,t)=>{let r=t||this.config.target_file,i=(0,le.normalizePath)(`${e}.${r.extension}`),o=i.replace(/\\/g,"/").split("/");if(o.pop(),o.length){let a=o.join("/");this.plugin.app.vault.getAbstractFileByPath(a)||await this.plugin.app.vault.createFolder(a)}return await this.plugin.app.fileManager.renameFile(r,i),""}}generate_path(){return(e=!1)=>{let t="";if(le.Platform.isMobile){let r=this.plugin.app.vault.adapter.fs.uri,i=this.plugin.app.vault.adapter.basePath;t=`${r}/${i}`}else if(this.plugin.app.vault.adapter instanceof le.FileSystemAdapter)t=this.plugin.app.vault.adapter.getBasePath();else throw new P("app.vault is not a FileSystemAdapter instance");return e?this.config.target_file.path:`${t}/${this.config.target_file.path}`}}generate_rename(){return async e=>{if(e.match(/[\\/:]+/g))throw new P("File name cannot contain any of these characters: \\ / :");let t=(0,le.normalizePath)(`${this.config.target_file.parent.path}/${e}.${this.config.target_file.extension}`);return await this.plugin.app.fileManager.renameFile(this.config.target_file,t),""}}generate_selection(){return()=>{let e=this.plugin.app.workspace.activeEditor;if(!e||!e.editor)throw new P("Active editor is null, can't read selection.");return e.editor.getSelection()}}generate_tags(){let e=this.plugin.app.metadataCache.getFileCache(this.config.target_file);return e?(0,le.getAllTags)(e):null}generate_title(){return this.config.target_file.basename}};var Yo=X(require("obsidian"));var ui=class extends be{constructor(){super(...arguments);this.name="web"}async create_static_templates(){this.static_functions.set("daily_quote",this.generate_daily_quote()),this.static_functions.set("request",this.generate_request()),this.static_functions.set("random_picture",this.generate_random_picture())}async create_dynamic_templates(){}async teardown(){}async getRequest(e){try{let t=await(0,Yo.requestUrl)(e);if(t.status<200&&t.status>=300)throw new P("Error performing GET request");return t}catch{throw new P("Error performing GET request")}}generate_daily_quote(){return async()=>{try{let t=(await this.getRequest("https://raw.githubusercontent.com/Zachatoo/quotes-database/refs/heads/main/quotes.json")).json,r=t[Math.floor(Math.random()*t.length)],{quote:i,author:o}=r;return`> [!quote] ${i} -> \u2014 ${o}`}catch{return new P("Error generating daily quote"),"Error generating daily quote"}}}generate_random_picture(){return async(e,t,r=!1)=>{try{let i=await this.getRequest(`https://templater-unsplash-2.fly.dev/${t?"?q="+t:""}`).then(a=>a.json),o=i.full;if(e&&!r)if(e.includes("x")){let[a,l]=e.split("x");o=o.concat(`&w=${a}&h=${l}`)}else o=o.concat(`&w=${e}`);return r?`![photo by ${i.photog}(${i.photogUrl}) on Unsplash|${e}](${o})`:`![photo by ${i.photog}(${i.photogUrl}) on Unsplash](${o})`}catch{return new P("Error generating random picture"),"Error generating random picture"}}}generate_request(){return async(e,t)=>{try{let i=await(await this.getRequest(e)).json;return t&&i?t.split(".").reduce((o,a)=>{if(o&&o.hasOwnProperty(a))return o[a];throw new Error(`Path ${t} not found in the JSON response`)},i):i}catch(r){throw console.error(r),new P("Error fetching and extracting value")}}}};var fi=class extends be{constructor(){super(...arguments);this.name="hooks";this.event_refs=[]}async create_static_templates(){this.static_functions.set("on_all_templates_executed",this.generate_on_all_templates_executed())}async create_dynamic_templates(){}async teardown(){this.event_refs.forEach(e=>{e.e.offref(e)}),this.event_refs=[]}generate_on_all_templates_executed(){return e=>{let t=this.plugin.app.workspace.on("templater:all-templates-executed",async()=>{await jt(1),e()});t&&this.event_refs.push(t)}}};var di=class extends be{constructor(){super(...arguments);this.name="frontmatter"}async create_static_templates(){}async create_dynamic_templates(){let e=this.plugin.app.metadataCache.getFileCache(this.config.target_file);this.dynamic_functions=new Map(Object.entries(e?.frontmatter||{}))}async teardown(){}};var Qe=X(require("obsidian"));var mi=class extends Qe.Modal{constructor(e,t,r,i){super(e);this.prompt_text=t;this.default_value=r;this.multi_line=i;this.submitted=!1}onOpen(){this.titleEl.setText(this.prompt_text),this.createForm()}onClose(){this.contentEl.empty(),this.submitted||this.reject(new P("Cancelled prompt"))}createForm(){let e=this.contentEl.createDiv();e.addClass("templater-prompt-div");let t;this.multi_line?t=new Qe.TextAreaComponent(e):t=new Qe.TextComponent(e);let r=this.contentEl.createDiv();r.addClass("templater-button-div");let i=new Qe.ButtonComponent(r);i.buttonEl.addClass("mod-cta"),i.setButtonText("Submit").onClick(o=>{this.resolveAndClose(o)}),this.value=this.default_value??"",t.inputEl.addClass("templater-prompt-input"),t.setPlaceholder("Type text here"),t.setValue(this.value),t.onChange(o=>this.value=o),t.inputEl.focus(),t.inputEl.addEventListener("keydown",o=>this.enterCallback(o))}enterCallback(e){e.isComposing||e.keyCode===229||(this.multi_line?Qe.Platform.isDesktop&&e.key==="Enter"&&!e.shiftKey&&this.resolveAndClose(e):e.key==="Enter"&&this.resolveAndClose(e))}resolveAndClose(e){this.submitted=!0,e.preventDefault(),this.resolve(this.value),this.close()}async openAndGetValue(e,t){this.resolve=e,this.reject=t,this.open()}};var Uo=X(require("obsidian")),gi=class extends Uo.FuzzySuggestModal{constructor(e,t,r,i,o){super(e);this.text_items=t;this.items=r;this.submitted=!1;this.setPlaceholder(i),o&&(this.limit=o)}getItems(){return this.items}onClose(){this.submitted||this.reject(new P("Cancelled prompt"))}selectSuggestion(e,t){this.submitted=!0,this.close(),this.onChooseSuggestion(e,t)}getItemText(e){return this.text_items instanceof Function?this.text_items(e):this.text_items[this.items.indexOf(e)]||"Undefined Text Item"}onChooseItem(e){this.resolve(e)}async openAndGetValue(e,t){this.resolve=e,this.reject=t,this.open()}};var De=X(require("obsidian")),hi=class extends De.Modal{constructor(e,t,r,i,o){super(e);this.text_items=t;this.items=r;this.submitted=!1;this.selectedItems=[];this.setTitle(i),this.listEl=this.contentEl.createDiv("templater-multisuggester-list");let a=this.contentEl.createDiv("templater-multisuggester-div"),l=new De.TextComponent(a);l.inputEl.addClass("templater-multisuggester-input"),this.suggester=new Go(e,l.inputEl,this.getItemText.bind(this),r,o).onSelect(this.onChooseItem.bind(this));let c=this.contentEl.createDiv("modal-button-container");new De.ButtonComponent(c).setButtonText("Save").setCta().onClick(()=>this.save()),new De.ButtonComponent(c).setButtonText("Cancel").onClick(()=>this.close())}onOpen(){this.display()}display(){this.listEl.empty(),this.selectedItems.forEach(e=>{let t=this.listEl.createDiv("mobile-option-setting-item");t.createSpan("mobile-option-setting-item-name").setText(this.getItemText(e)),t.createDiv("clickable-icon mobile-option-setting-item-option-icon",r=>{(0,De.setIcon)(r,"lucide-x"),r.addEventListener("click",()=>{this.onRemoveItem(e)})})})}getItemText(e){return this.text_items instanceof Function?this.text_items(e):this.text_items[this.items.indexOf(e)]||"Undefined Text Item"}onChooseItem(e){this.selectedItems.push(e);let t=this.items.filter(r=>!this.selectedItems.some(i=>i===r));this.suggester.setItems(t),this.display()}onRemoveItem(e){this.selectedItems=this.selectedItems.filter(r=>r!==e);let t=this.items.filter(r=>!this.selectedItems.some(i=>i===r));this.suggester.setItems(t),this.display()}save(){this.submitted=!0,this.close(),this.resolve(this.selectedItems)}onClose(){this.submitted||this.reject(new P("Cancelled prompt"))}async openAndGetValue(e,t){this.resolve=e,this.reject=t,this.open()}},Go=class extends De.AbstractInputSuggest{constructor(e,t,r,i,o){super(e,t);this.getItemText=r;this.items=i;o&&(this.limit=o)}getSuggestions(e){let t=(0,De.prepareFuzzySearch)(e);return this.items.reduce((r,i)=>{let o=this.getItemText(i);return t(o)&&r.push(i),r},[])}renderSuggestion(e,t){t.createDiv("suggestion-content").setText(this.getItemText(e))}setItems(e){this.items=e}selectSuggestion(e,t){this.setValue(""),this.close(),super.selectSuggestion(e,t)}};var Ai=class extends be{constructor(){super(...arguments);this.name="system"}async create_static_templates(){this.static_functions.set("clipboard",this.generate_clipboard()),this.static_functions.set("prompt",this.generate_prompt()),this.static_functions.set("suggester",this.generate_suggester()),this.static_functions.set("multi_suggester",this.generate_multi_suggester())}async create_dynamic_templates(){}async teardown(){}generate_clipboard(){return async()=>await navigator.clipboard.readText()}generate_prompt(){return async(e,t,r=!1,i=!1)=>{let o=new mi(this.plugin.app,e,t,i),a=new Promise((l,c)=>o.openAndGetValue(l,c));try{return await a}catch(l){if(r)throw l;return null}}}generate_suggester(){return async(e,t,r=!1,i="",o)=>{let a=new gi(this.plugin.app,e,t,i,o),l=new Promise((c,d)=>a.openAndGetValue(c,d));try{return await l}catch(c){if(r)throw c;return null}}}generate_multi_suggester(){return async(e,t,r=!1,i="",o)=>{let a=new hi(this.plugin.app,e,t,i,o),l=new Promise((c,d)=>a.openAndGetValue(c,d));try{return await l}catch(c){if(r)throw c;return[]}}}};var _i=class extends be{constructor(){super(...arguments);this.name="config"}async create_static_templates(){}async create_dynamic_templates(){}async teardown(){}async generate_object(e){return e}};var xi=class{constructor(e){this.plugin=e;this.modules_array=[];this.modules_array.push(new li(this.plugin)),this.modules_array.push(new pi(this.plugin)),this.modules_array.push(new ui(this.plugin)),this.modules_array.push(new di(this.plugin)),this.modules_array.push(new fi(this.plugin)),this.modules_array.push(new Ai(this.plugin)),this.modules_array.push(new _i(this.plugin))}async init(){for(let e of this.modules_array)await e.init()}async teardown(){for(let e of this.modules_array)await e.teardown()}async generate_object(e){let t={};for(let r of this.modules_array)t[r.getName()]=await r.generate_object(e);return t}};var Pn=X(require("obsidian"));var yi=class{constructor(e){this.plugin=e;if(Pn.Platform.isMobile||!(this.plugin.app.vault.adapter instanceof Pn.FileSystemAdapter))this.cwd="";else{this.cwd=this.plugin.app.vault.adapter.getBasePath();let{promisify:t}=require("util"),{exec:r}=require("child_process");this.exec_promise=t(r)}}async generate_system_functions(e){let t=new Map,r=await this.plugin.templater.functions_generator.generate_object(e,Xe.INTERNAL);for(let i of this.plugin.settings.templates_pairs){let o=i[0],a=i[1];!o||!a||(Pn.Platform.isMobile?t.set(o,()=>new Promise(l=>l($o))):(a=await this.plugin.templater.parser.parse_commands(a,r),t.set(o,async l=>{let c={...process.env,...l},d={timeout:this.plugin.settings.command_timeout*1e3,cwd:this.cwd,env:c,...this.plugin.settings.shell_path&&{shell:this.plugin.settings.shell_path}};try{let{stdout:m}=await this.exec_promise(a,d);return m.trimRight()}catch(m){throw new P(`Error with User Template ${o}`,m)}})))}return t}async generate_object(e){let t=await this.generate_system_functions(e);return Object.fromEntries(t)}};var ji=class{constructor(e){this.plugin=e}async generate_user_script_functions(){let e=new Map,t=Ce(()=>Je(this.plugin.app,this.plugin.settings.user_scripts_folder),`Couldn't find user script folder "${this.plugin.settings.user_scripts_folder}"`);if(!t)return new Map;for(let r of t)r.extension.toLowerCase()==="js"&&await this.load_user_script_function(r,e);return e}async load_user_script_function(e,t){let r=c=>window.require&&window.require(c),i={},o={exports:i},a=await this.plugin.app.vault.read(e);try{window.eval("(function anonymous(require, module, exports){"+a+` -})`)(r,o,i)}catch(c){throw new P(`Failed to load user script at "${e.path}".`,c.message)}let l=i.default??o.exports;if(!l)throw new P(`Failed to load user script at "${e.path}". No exports detected.`);if(typeof l=="function")t.set(e.basename,l);else if(typeof l=="object"&&l!==null){if(!Object.values(l).every(d=>typeof d=="function"))throw new P(`Exported object in "${e.path}" must contain only functions.`);t.set(e.basename,l)}else throw new P(`Invalid export in "${e.path}". Must be a function or object of functions.`)}async generate_object(){let e=await this.generate_user_script_functions();return Object.fromEntries(e)}};var vi=class{constructor(e){this.plugin=e;this.user_system_functions=new yi(e),this.user_script_functions=new ji(e)}async generate_object(e){let t={},r={};return this.plugin.settings.enable_system_commands&&(t=await this.user_system_functions.generate_object(e)),this.plugin.settings.user_scripts_folder&&(r=await this.user_script_functions.generate_object()),{...t,...r}}};var Ks=X(require("obsidian")),Xe;(function(t){t[t.INTERNAL=0]="INTERNAL",t[t.USER_INTERNAL=1]="USER_INTERNAL"})(Xe||(Xe={}));var wi=class{constructor(e){this.plugin=e;this.internal_functions=new xi(this.plugin),this.user_functions=new vi(this.plugin)}async init(){await this.internal_functions.init()}async teardown(){await this.internal_functions.teardown()}additional_functions(){return{app:this.plugin.app,obsidian:Ks}}async generate_object(e,t=1){let r={},i=this.additional_functions(),o=await this.internal_functions.generate_object(e),a={};switch(Object.assign(r,i),t){case 0:Object.assign(r,o);break;case 1:a=await this.user_functions.generate_object(e),Object.assign(r,{...o,user:a});break}return r}};var Xs={},M,Ke=new Array(32).fill(void 0);Ke.push(void 0,null,!0,!1);function Pe(n){return Ke[n]}var Nn=Ke.length;function Rs(n){n<36||(Ke[n]=Nn,Nn=n)}function bi(n){let e=Pe(n);return Rs(n),e}var Wo=new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0});Wo.decode();var xr=new Uint8Array;function yr(){return xr.byteLength===0&&(xr=new Uint8Array(M.memory.buffer)),xr}function Et(n,e){return Wo.decode(yr().subarray(n,n+e))}function Tt(n){Nn===Ke.length&&Ke.push(Ke.length+1);let e=Nn;return Nn=Ke[e],Ke[e]=n,e}var Re=0,jr=new TextEncoder("utf-8"),Ys=typeof jr.encodeInto=="function"?function(n,e){return jr.encodeInto(n,e)}:function(n,e){let t=jr.encode(n);return e.set(t),{read:n.length,written:t.length}};function gt(n,e,t){if(t===void 0){let l=jr.encode(n),c=e(l.length);return yr().subarray(c,c+l.length).set(l),Re=l.length,c}let r=n.length,i=e(r),o=yr(),a=0;for(;a127)break;o[i+a]=l}if(a!==r){a!==0&&(n=n.slice(a)),i=t(i,r,r=a+n.length*3);let l=yr().subarray(i+a,i+r);a+=Ys(n,l).written}return Re=a,i}function Us(n){return n==null}var vr=new Int32Array;function Ne(){return vr.byteLength===0&&(vr=new Int32Array(M.memory.buffer)),vr}function Ei(n){let e=typeof n;if(e=="number"||e=="boolean"||n==null)return`${n}`;if(e=="string")return`"${n}"`;if(e=="symbol"){let i=n.description;return i==null?"Symbol":`Symbol(${i})`}if(e=="function"){let i=n.name;return typeof i=="string"&&i.length>0?`Function(${i})`:"Function"}if(Array.isArray(n)){let i=n.length,o="[";i>0&&(o+=Ei(n[0]));for(let a=1;a1)r=t[1];else return toString.call(n);if(r=="Object")try{return"Object("+JSON.stringify(n)+")"}catch{return"Object"}return n instanceof Error?`${n.name}: ${n.message} -${n.stack}`:r}function Gs(n,e){if(!(n instanceof e))throw new Error(`expected instance of ${e.name}`);return n.ptr}var wr=32;function Ws(n){if(wr==1)throw new Error("out of js stack");return Ke[--wr]=n,wr}function Ti(n,e){try{return n.apply(this,e)}catch(t){M.__wbindgen_exn_store(Tt(t))}}var Rt=class{static __wrap(e){let t=Object.create(Rt.prototype);return t.ptr=e,t}__destroy_into_raw(){let e=this.ptr;return this.ptr=0,e}free(){let e=this.__destroy_into_raw();M.__wbg_parserconfig_free(e)}get interpolate(){let e=M.__wbg_get_parserconfig_interpolate(this.ptr);return String.fromCodePoint(e)}set interpolate(e){M.__wbg_set_parserconfig_interpolate(this.ptr,e.codePointAt(0))}get execution(){let e=M.__wbg_get_parserconfig_execution(this.ptr);return String.fromCodePoint(e)}set execution(e){M.__wbg_set_parserconfig_execution(this.ptr,e.codePointAt(0))}get single_whitespace(){let e=M.__wbg_get_parserconfig_single_whitespace(this.ptr);return String.fromCodePoint(e)}set single_whitespace(e){M.__wbg_set_parserconfig_single_whitespace(this.ptr,e.codePointAt(0))}get multiple_whitespace(){let e=M.__wbg_get_parserconfig_multiple_whitespace(this.ptr);return String.fromCodePoint(e)}set multiple_whitespace(e){M.__wbg_set_parserconfig_multiple_whitespace(this.ptr,e.codePointAt(0))}constructor(e,t,r,i,o,a,l){let c=gt(e,M.__wbindgen_malloc,M.__wbindgen_realloc),d=Re,m=gt(t,M.__wbindgen_malloc,M.__wbindgen_realloc),_=Re,w=gt(l,M.__wbindgen_malloc,M.__wbindgen_realloc),b=Re,S=M.parserconfig_new(c,d,m,_,r.codePointAt(0),i.codePointAt(0),o.codePointAt(0),a.codePointAt(0),w,b);return Rt.__wrap(S)}get opening_tag(){try{let r=M.__wbindgen_add_to_stack_pointer(-16);M.parserconfig_opening_tag(r,this.ptr);var e=Ne()[r/4+0],t=Ne()[r/4+1];return Et(e,t)}finally{M.__wbindgen_add_to_stack_pointer(16),M.__wbindgen_free(e,t)}}set opening_tag(e){let t=gt(e,M.__wbindgen_malloc,M.__wbindgen_realloc),r=Re;M.parserconfig_set_opening_tag(this.ptr,t,r)}get closing_tag(){try{let r=M.__wbindgen_add_to_stack_pointer(-16);M.parserconfig_closing_tag(r,this.ptr);var e=Ne()[r/4+0],t=Ne()[r/4+1];return Et(e,t)}finally{M.__wbindgen_add_to_stack_pointer(16),M.__wbindgen_free(e,t)}}set closing_tag(e){let t=gt(e,M.__wbindgen_malloc,M.__wbindgen_realloc),r=Re;M.parserconfig_set_closing_tag(this.ptr,t,r)}get global_var(){try{let r=M.__wbindgen_add_to_stack_pointer(-16);M.parserconfig_global_var(r,this.ptr);var e=Ne()[r/4+0],t=Ne()[r/4+1];return Et(e,t)}finally{M.__wbindgen_add_to_stack_pointer(16),M.__wbindgen_free(e,t)}}set global_var(e){let t=gt(e,M.__wbindgen_malloc,M.__wbindgen_realloc),r=Re;M.parserconfig_set_global_var(this.ptr,t,r)}},sn=class{static __wrap(e){let t=Object.create(sn.prototype);return t.ptr=e,t}__destroy_into_raw(){let e=this.ptr;return this.ptr=0,e}free(){let e=this.__destroy_into_raw();M.__wbg_renderer_free(e)}constructor(e){Gs(e,Rt);var t=e.ptr;e.ptr=0;let r=M.renderer_new(t);return sn.__wrap(r)}render_content(e,t){try{let a=M.__wbindgen_add_to_stack_pointer(-16),l=gt(e,M.__wbindgen_malloc,M.__wbindgen_realloc),c=Re;M.renderer_render_content(a,this.ptr,l,c,Ws(t));var r=Ne()[a/4+0],i=Ne()[a/4+1],o=Ne()[a/4+2];if(o)throw bi(i);return bi(r)}finally{M.__wbindgen_add_to_stack_pointer(16),Ke[wr++]=void 0}}};async function Vs(n,e){if(typeof Response=="function"&&n instanceof Response){if(typeof WebAssembly.instantiateStreaming=="function")try{return await WebAssembly.instantiateStreaming(n,e)}catch(r){if(n.headers.get("Content-Type")!="application/wasm")console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n",r);else throw r}let t=await n.arrayBuffer();return await WebAssembly.instantiate(t,e)}else{let t=await WebAssembly.instantiate(n,e);return t instanceof WebAssembly.Instance?{instance:t,module:n}:t}}function zs(){let n={};return n.wbg={},n.wbg.__wbindgen_object_drop_ref=function(e){bi(e)},n.wbg.__wbindgen_string_new=function(e,t){let r=Et(e,t);return Tt(r)},n.wbg.__wbindgen_string_get=function(e,t){let r=Pe(t),i=typeof r=="string"?r:void 0;var o=Us(i)?0:gt(i,M.__wbindgen_malloc,M.__wbindgen_realloc),a=Re;Ne()[e/4+1]=a,Ne()[e/4+0]=o},n.wbg.__wbg_call_97ae9d8645dc388b=function(){return Ti(function(e,t){let r=Pe(e).call(Pe(t));return Tt(r)},arguments)},n.wbg.__wbg_new_8d2af00bc1e329ee=function(e,t){let r=new Error(Et(e,t));return Tt(r)},n.wbg.__wbg_message_fe2af63ccc8985bc=function(e){let t=Pe(e).message;return Tt(t)},n.wbg.__wbg_newwithargs_8fe23e3842840c8e=function(e,t,r,i){let o=new Function(Et(e,t),Et(r,i));return Tt(o)},n.wbg.__wbg_call_168da88779e35f61=function(){return Ti(function(e,t,r){let i=Pe(e).call(Pe(t),Pe(r));return Tt(i)},arguments)},n.wbg.__wbg_call_3999bee59e9f7719=function(){return Ti(function(e,t,r,i){let o=Pe(e).call(Pe(t),Pe(r),Pe(i));return Tt(o)},arguments)},n.wbg.__wbindgen_debug_string=function(e,t){let r=Ei(Pe(t)),i=gt(r,M.__wbindgen_malloc,M.__wbindgen_realloc),o=Re;Ne()[e/4+1]=o,Ne()[e/4+0]=i},n.wbg.__wbindgen_throw=function(e,t){throw new Error(Et(e,t))},n}function Js(n,e){}function Qs(n,e){return M=n.exports,Vo.__wbindgen_wasm_module=e,vr=new Int32Array,xr=new Uint8Array,M}async function Vo(n){typeof n=="undefined"&&(n=new URL("rusty_engine_bg.wasm",Xs.url));let e=zs();(typeof n=="string"||typeof Request=="function"&&n instanceof Request||typeof URL=="function"&&n instanceof URL)&&(n=fetch(n)),Js(e);let{instance:t,module:r}=await Vs(await n,e);return Qs(t,r)}var zo=Vo;var Jo=Ji("AGFzbQEAAAABvwEaYAJ/fwBgAn9/AX9gAX8Bf2ADf39/AX9gA39/fwBgAX8AYAV/f39/fwBgBH9/f38AYAR/f39/AX9gAABgBX9/f39/AX9gAX8BfmAAAX9gBn9/f39/fwBgB39/f39/f38AYAV/f35/fwBgBX9/fX9/AGAFf398f38AYAR/fn9/AGAFf35/f38AYAR/fX9/AGAEf3x/fwBgBn9/f39/fwF/YAd/f39/f39/AX9gCn9/f39/f39/f38Bf2ACfn8BfwLkAgsDd2JnGl9fd2JpbmRnZW5fb2JqZWN0X2Ryb3BfcmVmAAUDd2JnFV9fd2JpbmRnZW5fc3RyaW5nX25ldwABA3diZxVfX3diaW5kZ2VuX3N0cmluZ19nZXQAAAN3YmcbX193YmdfY2FsbF85N2FlOWQ4NjQ1ZGMzODhiAAEDd2JnGl9fd2JnX25ld184ZDJhZjAwYmMxZTMyOWVlAAEDd2JnHl9fd2JnX21lc3NhZ2VfZmUyYWY2M2NjYzg5ODViYwACA3diZyJfX3diZ19uZXd3aXRoYXJnc184ZmUyM2UzODQyODQwYzhlAAgDd2JnG19fd2JnX2NhbGxfMTY4ZGE4ODc3OWUzNWY2MQADA3diZxtfX3diZ19jYWxsXzM5OTliZWU1OWU5Zjc3MTkACAN3YmcXX193YmluZGdlbl9kZWJ1Z19zdHJpbmcAAAN3YmcQX193YmluZGdlbl90aHJvdwAAA7kBtwECBwAGAgYEBAcBBQMKCAAEBgYAAwcCAAEADgETAQQXAQICAQAAAwcZAQAFAQwABgACAgAAAgAEBAAGAQAAAAAEBw0CAQUEBQYCDBgAAQAAAAQBAQEAAQABBAQEBgMDBwMJAwQIAAAABQkAAgEAAAAABwAAAgICAgAFBQMEFgoGEQ8QAAUHAwIBAgABBQEBCAACAQEBBQEAAgECAgACAQEBAgAJCQICAgIAAAAAAwMDAQECAgsLCwUEBQFwATs7BQMBABEGCQF/AUGAgMAACwfcBRkGbWVtb3J5AgAXX193YmdfcGFyc2VyY29uZmlnX2ZyZWUAUSJfX3diZ19nZXRfcGFyc2VyY29uZmlnX2ludGVycG9sYXRlAH4iX193Ymdfc2V0X3BhcnNlcmNvbmZpZ19pbnRlcnBvbGF0ZQB3IF9fd2JnX2dldF9wYXJzZXJjb25maWdfZXhlY3V0aW9uAH8gX193Ymdfc2V0X3BhcnNlcmNvbmZpZ19leGVjdXRpb24AeChfX3diZ19nZXRfcGFyc2VyY29uZmlnX3NpbmdsZV93aGl0ZXNwYWNlAIABKF9fd2JnX3NldF9wYXJzZXJjb25maWdfc2luZ2xlX3doaXRlc3BhY2UAeSpfX3diZ19nZXRfcGFyc2VyY29uZmlnX211bHRpcGxlX3doaXRlc3BhY2UAgQEqX193Ymdfc2V0X3BhcnNlcmNvbmZpZ19tdWx0aXBsZV93aGl0ZXNwYWNlAHoQcGFyc2VyY29uZmlnX25ldwBVGHBhcnNlcmNvbmZpZ19vcGVuaW5nX3RhZwBGHHBhcnNlcmNvbmZpZ19zZXRfb3BlbmluZ190YWcAYxhwYXJzZXJjb25maWdfY2xvc2luZ190YWcARxxwYXJzZXJjb25maWdfc2V0X2Nsb3NpbmdfdGFnAGQXcGFyc2VyY29uZmlnX2dsb2JhbF92YXIASBtwYXJzZXJjb25maWdfc2V0X2dsb2JhbF92YXIAZRNfX3diZ19yZW5kZXJlcl9mcmVlAE8McmVuZGVyZXJfbmV3ACAXcmVuZGVyZXJfcmVuZGVyX2NvbnRlbnQAORFfX3diaW5kZ2VuX21hbGxvYwB1El9fd2JpbmRnZW5fcmVhbGxvYwCFAR9fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyAKsBD19fd2JpbmRnZW5fZnJlZQCaARRfX3diaW5kZ2VuX2V4bl9zdG9yZQCfAQllAQBBAQs6mAGdAaoBPzzBAZUBlgFOkgGOAWotYsEBwQFnKl3BAXaIAUyJAYgBhwGQAY8BiQGJAYwBigGLAZgBX8EBaKABXo4BvwG+AYQBOElwoQHBAWioAWCjAVclqQGcAcEBwAEK2dYCtwG8IAIPfwF+IwBBEGsiCyQAAkACQCAAQfUBTwRAQYCAfEEIQQgQlwFBFEEIEJcBakEQQQgQlwFqa0F3cUF9aiICQQBBEEEIEJcBQQJ0ayIBIAEgAksbIABNDQIgAEEEakEIEJcBIQRBrK7AACgCAEUNAUEAIARrIQMCQAJAAn9BACAEQYACSQ0AGkEfIARB////B0sNABogBEEGIARBCHZnIgBrdkEBcSAAQQF0a0E+agsiBkECdEG4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EBBBIAQoAgAiBSAAKAIAaiIGQdSDwAApAAA3AAAgBCAFQRBqNgIAIAZBCGpB3IPAACkAADcAACADQQE2AiwgAyABKAIIQShqIgU2AiggAyAANgIYIANB3ABqQQE2AgAgA0ICNwJMIANB8IPAADYCSCADIANBKGo2AlgCQAJAAkACQAJAAkAgA0EYakGYisAAIANByABqEB5FBEAgAigCACEIAkAgAigCCCIBRQ0AIAFBBHQhCkGQhMAAIQZBACEBQQAhBANAAn8gASAIaiIHQQRqIgkgBygCAEUNABoCQCAERQ0AIANBEGogBCgCACAEKAIEQQAgBiAGLQAAQQJGG0EBEBAgA0EIaiADKAIQIAMoAhRBACAHQQ1qIgQgBC0AAEECRhtBABAQIANBGGogAygCCCADKAIMEBIgA0EBNgI0IANBATYCLCADIAU2AiggAyADQRhqNgIwIAMgADYCRCADQQI2AlwgA0IDNwJMIANBmITAADYCSCADIANBKGo2AlggA0HEAGpBmIrAACADQcgAahAeDQUgAygCHEUNACADKAIYEBULIAdBDmohBgJAIAdBDGotAABFBEAgA0ECNgIsIAMgCTYCKCADIAA2AhggA0EBNgJcIANCAjcCTCADQfSEwAA2AkggAyADQShqNgJYIANBGGpBmIrAACADQcgAahAeDQcgA0ECNgI0IANBoIXAADYCMCADQQE2AiwgAyAFNgIoIAMgADYCGCADQQI2AlwgA0IDNwJMIANBmITAADYCSCADIANBKGo2AlggA0EYakGYisAAIANByABqEB5FDQFBq4HAAEErIANByABqQdiBwABBqIXAABBSAAsgA0ECNgIsIAMgCTYCKCADIAA2AhggA0EBNgJcIANCAjcCTCADQcSEwAA2AkggAyADQShqNgJYIANBGGpBmIrAACADQcgAahAeDQcLQQALIQQgCiABQRBqIgFHDQALIARFDQAgAyAEKAIAIAQoAgRBACAGIAYtAABBAkYbQQEQECADQRhqIAMoAgAgAygCBBASIANBNGpBATYCACADQQE2AiwgAyAFNgIoIAMgA0EYajYCMCADIAA2AkQgA0HcAGpBAjYCACADQgM3AkwgA0GYhMAANgJIIAMgA0EoajYCWCADQcQAakGYisAAIANByABqEB4NBSADKAIcRQ0AIAMoAhgQFQsgAEEEaigCACAAQQhqIgQoAgAiAWtBJ00EQCAAIAFBKBBBIAQoAgAhAQsgBCABQShqNgIAIAAoAgAgAWoiAUHIhcAAKQAANwAAIAFBCGpB0IXAACkAADcAACABQRBqQdiFwAApAAA3AAAgAUEYakHghcAAKQAANwAAIAFBIGpB6IXAACkAADcAACADQTxqQQI2AgAgA0E0akEBNgIAIANBoIXAADYCOCADIAU2AjAgA0EBNgIsIAMgBTYCKCADIAA2AhggA0HcAGoiAUEDNgIAIANCBDcCTCADQZiGwAA2AkggAyADQShqNgJYIANBGGpBmIrAACADQcgAahAeDQUgA0EBNgIsIAMgBTYCKCADIAA2AhggAUEBNgIAIANCAjcCTCADQdCGwAA2AkggAyADQShqNgJYIANBGGpBmIrAACADQcgAahAeDQYgAkEEaigCAARAIAgQFQsgA0HgAGokAA8LQauBwABBKyADQcgAakHYgcAAQYCEwAAQUgALQauBwABBKyADQcgAakHYgcAAQbCEwAAQUgALQauBwABBKyADQcgAakHYgcAAQYSFwAAQUgALQauBwABBKyADQcgAakHYgcAAQdSEwAAQUgALQauBwABBKyADQcgAakHYgcAAQbiFwAAQUgALQauBwABBKyADQcgAakHYgcAAQbiGwAAQUgALQauBwABBKyADQcgAakHYgcAAQeCGwAAQUgAL7QkCCH8GfiMAQdAAayIDJAACQAJAAkAQVCIEBEAgA0EgakIANwMAIANBHGpBkIrAADYCACAEIAQpAwAiC0IBfDcDACADQQA2AhggAyALNwMIIAMgBEEIaikDADcDECADQqeAgIDwBDcDSCADQo2AgICgDjcDQCADQoqAgIDgDTcDOCADQtyAgIDACzcDMCADQQhqIANBMGoQGSADQQA2AjggA0IENwMwIAJFBEAgAEEANgIIIABCATcCAEEEIQRBBCEBDAQLIAEgAmohCEEAIQIDQAJ/IAEsAAAiBEF/SgRAIARB/wFxIQQgAUEBagwBCyABLQABQT9xIQUgBEEfcSEGIARBX00EQCAGQQZ0IAVyIQQgAUECagwBCyABLQACQT9xIAVBBnRyIQUgBEFwSQRAIAUgBkEMdHIhBCABQQNqDAELIAZBEnRBgIDwAHEgAS0AA0E/cSAFQQZ0cnIiBEGAgMQA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ASACIANqQQFqIgM2AhAgAyAHT0EAIAMgDE0bRQRAIAYgA08NAQwDCwsgB0EEELUBAAsgASAGNgIQCyABLQAkIAEoAgAiAiABKAIEIgRHckUNASABQQE6ACUgBCACawshAyAIRQ0AIAIgCGohCyADRQRAQQAhAgwBCyADQX9qIgEgAyABIAtqLQAAQQ1GGyECCyAAIAI2AgQgACALNgIAIAVBEGokAAv+BAEKfyMAQTBrIgMkACADQSRqIAE2AgAgA0EDOgAoIANCgICAgIAENwMIIAMgADYCICADQQA2AhggA0EANgIQAkACQAJAIAIoAggiCkUEQCACQRRqKAIAIgRFDQEgAigCACEBIAIoAhAhACAEQX9qQf////8BcUEBaiIHIQQDQCABQQRqKAIAIgUEQCADKAIgIAEoAgAgBSADKAIkKAIMEQMADQQLIAAoAgAgA0EIaiAAQQRqKAIAEQEADQMgAEEIaiEAIAFBCGohASAEQX9qIgQNAAsMAQsgAkEMaigCACIARQ0AIABBBXQhCyAAQX9qQf///z9xQQFqIQcgAigCACEBA0AgAUEEaigCACIABEAgAygCICABKAIAIAAgAygCJCgCDBEDAA0DCyADIAQgCmoiBUEcai0AADoAKCADIAVBBGopAgBCIIk3AwggBUEYaigCACEGIAIoAhAhCEEAIQlBACEAAkACQAJAIAVBFGooAgBBAWsOAgACAQsgBkEDdCAIaiIMKAIEQTdHDQEgDCgCACgCACEGC0EBIQALIAMgBjYCFCADIAA2AhAgBUEQaigCACEAAkACQAJAIAVBDGooAgBBAWsOAgACAQsgAEEDdCAIaiIGKAIEQTdHDQEgBigCACgCACEAC0EBIQkLIAMgADYCHCADIAk2AhggCCAFKAIAQQN0aiIAKAIAIANBCGogACgCBBEBAA0CIAFBCGohASALIARBIGoiBEcNAAsLQQAhACAHIAIoAgRJIgFFDQEgAygCICACKAIAIAdBA3RqQQAgARsiASgCACABKAIEIAMoAiQoAgwRAwBFDQELQQEhAAsgA0EwaiQAIAALwgQBCH8jAEHQAGsiBCQAIARBEGogASACIAMoAgAgA0EIaigCABAOAkACQAJAAkACQAJAIAQoAhBFBEAgBEEeai0AAA0EIARBxABqKAIAIQYgBCgCQCEHIARBHGot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AkAgAUGAAU8EQCACQQA2AgwgAUGAEEkNASABQYCABE8NAiACIAFBP3FBgAFyOgAOIAIgAUEMdkHgAXI6AAwgAiABQQZ2QT9xQYABcjoADUEDDAMLIAAoAggiAyAAQQRqKAIARgR/IAAgAxBAIAAoAggFIAMLIAAoAgBqIAE6AAAgACAAKAIIQQFqNgIIDAMLIAIgAUE/cUGAAXI6AA0gAiABQQZ2QcABcjoADEECDAELIAIgAUE/cUGAAXI6AA8gAiABQQZ2QT9xQYABcjoADiACIAFBDHZBP3FBgAFyOgANIAIgAUESdkEHcUHwAXI6AAxBBAshASAAQQRqKAIAIABBCGoiBCgCACIDayABSQRAIAAgAyABEEEgBCgCACEDCyAAKAIAIANqIAJBDGogARC5ARogBCABIANqNgIACyACQRBqJABBAAvVAgEDfyMAQRBrIgIkAAJAAn8CQCABQYABTwRAIAJBADYCDCABQYAQTw0BIAIgAUE/cUGAAXI6AA0gAiABQQZ2QcABcjoADEECDAILIAAoAggiAyAAQQRqKAIARgRAIAAgAxBDIAAoAgghAwsgACADQQFqNgIIIAAoAgAgA2ogAToAAAwCCyABQYCABE8EQCACIAFBP3FBgAFyOgAPIAIgAUEGdkE/cUGAAXI6AA4gAiABQQx2QT9xQYABcjoADSACIAFBEnZBB3FB8AFyOgAMQQQMAQsgAiABQT9xQYABcjoADiACIAFBDHZB4AFyOgAMIAIgAUEGdkE/cUGAAXI6AA1BAwshASAAQQRqKAIAIABBCGoiBCgCACIDayABSQRAIAAgAyABEEIgBCgCACEDCyAAKAIAIANqIAJBDGogARC5ARogBCABIANqNgIACyACQRBqJAAL1wIBA38jAEEQayICJAACQAJ/AkACQCABQYABTwRAIAJBADYCDCABQYAQSQ0BIAFBgIAETw0CIAIgAUE/cUGAAXI6AA4gAiABQQx2QeABcjoADCACIAFBBnZBP3FBgAFyOgANQQMMAwsgACgCCCIDIABBBGooAgBGBEAgACADEEMgACgCCCEDCyAAIANBAWo2AgggACgCACADaiABOgAADAMLIAIgAUE/cUGAAXI6AA0gAiABQQZ2QcABcjoADEECDAELIAIgAUE/cUGAAXI6AA8gAiABQQZ2QT9xQYABcjoADiAC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AiADKAIIIgRNBEAgASECDAELIARFBEBBASECIAEQFQwBCyABIAJBASAEEJkBIgJFDQMLIAAgBDYCBCAAIAI2AgAgA0EQaiQADwsQrQEACxCuAQALIARBARCzAQALrAEBA38jAEEQayIDJAACQAJAIAEEQCABKAIAIgJBf0YNASABIAJBAWo2AgAgAyABQRBqEGEgASABKAIAQX9qNgIAIAMoAgAhAQJAIAMoAgQiAiADKAIIIgRNBEAgASECDAELIARFBEBBASECIAEQFQwBCyABIAJBASAEEJkBIgJFDQMLIAAgBDYCBCAAIAI2AgAgA0EQaiQADwsQrQEACxCuAQALIARBARCzAQALrAEBA38jAEEQayIDJAACQAJAIAEEQCABKAIAIgJBf0YNASABIAJBAWo2AgAgAyABQSxqEGEgASABKAIAQX9qNgIAIAMoAgAhAQJAIAMoAgQiAiADKAIIIgRNBEAgASECDAELIARFBEBBASECIAEQFQwBCyABIAJBASAEEJkBIgJFDQMLIAAgBDYCBCAAIAI2AgAgA0EQaiQADwsQrQEACxCuAQALIARBARCzAQALrAEBA38jAEEwayICJAAgAUEEaiEDIAEoAgRFBEAgASgCACEBIAJBEGoiBEEANgIAIAJCATcDCCACIAJBCGo2AhQgAkEoaiABQRBqKQIANwMAIAJBIGogAUEIaikCADcDACACIAEpAgA3AxggAkEUakGAjsAAIAJBGGoQHhogA0EIaiAEKAIANgIAIAMgAikDCDcCAAsgAEHoj8AANgIEIAAgAzYCACACQTBqJAALkAEBAn8CQAJ/AkACQAJAAn9BASIDIAFBAEgNABogAigCCEUNAiACKAIEIgQNASABDQNBAQwECyEDQQAhAQwECyACKAIAIARBASABEJkBDAILIAENAEEBDAELIAFBARCeAQsiAgRAIAAgAjYCBEEAIQMMAQsgACABNgIEQQEhAQsgACADNgIAIABBCGogATYCAAunAQECfwJAAkACQAJAAkACQAJAAn8gAgRAQQEiBCABQQBIDQEaIAMoAghFDQMgAygCBCIFDQIgAQ0EDAYLIAAgATYCBEEBCyEEQQAhAQwGCyADKAIAIAUgAiABEJkBIgNFDQIMBAsgAUUNAgsgASACEJ4BIgMNAgsgACABNgIEIAIhAQwCCyACIQML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AX8jAEEwayICJAAgAiABNgIEIAIgADYCACACQRxqQQI2AgAgAkEsakEDNgIAIAJCAjcCDCACQfSWwAA2AgggAkEDNgIkIAIgAkEgajYCGCACIAJBBGo2AiggAiACNgIgIAJBCGpBhJfAABB0AAtsAQF/IwBBMGsiAyQAIAMgATYCBCADIAA2AgAgA0EcakECNgIAIANBLGpBAzYCACADQgI3AgwgA0HAk8AANgIIIANBAzYCJCADIANBIGo2AhggAyADNgIoIAMgA0EEajYCICADQQhqIAIQdAALVgECfyMAQSBrIgIkACAAQRxqKAIAIQMgACgCGCACQRhqIAFBEGopAgA3AwAgAkEQaiABQQhqKQIANwMAIAIgASkCADcDCCADIAJBCGoQHiACQSBqJAALWQEBfyMAQSBrIgIkACACIAAoAgA2AgQgAkEYaiABQRBqKQIANwMAIAJBEGogAUEIaikCADcDACACIAEpAgA3AwggAkEEakGYisAAIAJBCGoQHiACQSBqJAALWQEBfyMAQSBrIgIkACACIAAoAgA2AgQgAkEYaiABQRBqKQIANwMAIAJBEGogAUEIaikCADcDACACIAEpAgA3AwggAkEEakGAjsAAIAJBCGoQHiACQSBqJAALZwAjAEEwayIBJABB2K3AAC0AAARAIAFBHGpBATYCACABQgI3AgwgAUH0jsAANgIIIAFBAzYCJCABIAA2AiwgASABQSBqNgIYIAEgAUEsajYCICABQQhqQZyPwAAQdAALIAFBMGokAAtZAQF/IwBBIGsiAiQAIAIgACgCADYCBCACQRhqIAFBEGopAgA3AwAgAkEQaiABQQhqKQIANwMAIAIgASkCADcDCCACQQRqQbSRwAAgAkEIahAeIAJBIGokAAtnAQJ/IAEoAgAhAwJAAkACQCABQQhqKAIAIgFFBEBBASECDAELIAFBf0wNASABQQEQngEiAkUNAgsgAiADIAEQuQEhAiAAIAE2AgggACABNgIEIAAgAjYCAA8LEHMACyABQQEQswEAC1YBAX8jAEEgayICJAAgAiAANgIEIAJBGGogAUEQaikCADcDACACQRBqIAFBCGopAgA3AwAgAiABKQIANwMIIAJBBGpBmIrAACACQQhqEB4gAkEgaiQAC1YBAX8CQCAABEAgACgCAA0BIABBfzYCACAAQQhqIgMoAgAEQCAAKAIEEBULIAAgATYCBCAAQQA2AgAgAEEMaiACNgIAIAMgAjYCAA8LEK0BAAsQrgEAC1YBAX8CQCAABEAgACgCAA0BIABBfzYCACAAQRRqIgMoAgAEQCAAKAIQEBULIAAgATYCECAAQQA2AgAgAEEYaiACNgIAIAMgAjYCAA8LEK0BAAsQrgEAC1YBAX8CQCAABEAgACgCAA0BIABBfzYCACAAQTBqIgMoAgAEQCAAKAIsEBULIAAgATYCLCAAQQA2AgAgAEE0aiACNgIAIAMgAjYCAA8LEK0BAAsQrgEAC1YBAX8jAEEQayIFJAAgASgCACACKAIAIAMoAgAgBCgCABAIIQEgBUEIahCDASAFKAIMIQIgACAFKAIIIgNBAEc2AgAgACACIAEgAxs2AgQgBUEQaiQAC08BAn8gACgCACIDQQRqKAIAIANBCGoiBCgCACIAayACSQRAIAMgACACEEEgBCgCACEACyADKAIAIABqIAEgAhC5ARogBCAAIAJqNgIAQQALTwECfyAAKAIAIgNBBGooAgAgA0EIaiIEKAIAIgBrIAJJBEAgAyAAIAIQQiAEKAIAIQALIAMoAgAgAGogASACELkBGiAEIAAgAmo2AgBBAAtRAQF/IwBBEGsiBCQAIAEoAgAgAigCACADKAIAEAchASAEQQhqEIMBIAQoAgwhAiAAIAQoAggiA0EARzYCACAAIAIgASADGzYCBCAEQRBqJAALSgECfyAAQQRqKAIAIABBCGoiBCgCACIDayACSQRAIAAgAyACEEEgBCgCACEDCyAAKAIAIANqIAEgAhC5ARogBCACIANqNgIAQQALPwEBfyMAQSBrIgAkACAAQRxqQQA2AgAgAEGwkMAANgIYIABCATcCDCAAQcyQwAA2AgggAEEIakGkkcAAEHQAC0MBA38CQCACRQ0AA0AgAC0AACIEIAEtAAAiBUYEQCAAQQFqIQAgAUEBaiEBIAJBf2oiAg0BDAILCyAEIAVrIQMLIAMLTAECfyMAQRBrIgMkACABKAIAIAIoAgAQAyEBIANBCGoQgwEgAygCDCECIAAgAygCCCIEQQBHNgIAIAAgAiABIAQbNgIEIANBEGokAAtLAAJAAn8gAUGAgMQARwRAQQEgACgCGCABIABBHGooAgAoAhARAQANARoLIAINAUEACw8LIAAoAhggAiADIABBHGooAgAoAgwRAwALRwEBfyMAQSBrIgIkACACQRRqQQA2AgAgAkGAk8AANgIQIAJCATcCBCACQSs2AhwgAiAANgIYIAIgAkEYajYCACACIAEQdAALRgECfyABKAIEIQIgASgCACEDQQhBBBCeASIBRQRAQQhBBBCzAQALIAEgAjYCBCABIAM2AgAgAEH4j8AANgIEIAAgATYCAAs5AQF/IAFBEHZAACECIABBADYCCCAAQQAgAUGAgHxxIAJBf0YiARs2AgQgAEEAIAJBEHQgARs2AgALZAEDfyMAQRBrIgEkACAAKAIMIgJFBEBBmI7AAEHIj8AAEG8ACyAAKAIIIgNFBEBBmI7AAEHYj8AAEG8ACyABIAI2AgggASAANgIEIAEgAzYCACABKAIAIAEoAgQgASgCCBBQAAs/AQF/IwBBIGsiACQAIABBHGpBADYCACAAQcyRwAA2AhggAEIBNwIMIABBjJLAADYCCCAAQQhqQZSSwAAQdAALPgEBfyMAQSBrIgIkACACQQE6ABggAiABNgIUIAIgADYCECACQfyTwAA2AgwgAkGAk8AANgIIIAJBCGoQcgALKwACQCAAQXxLDQAgAEUEQEEEDwsgACAAQX1JQQJ0EJ4BIgBFDQAgAA8LAAsiACMAQRBrIgAkACAAQQhqIAEQfSAAQQhqEFMgAEEQaiQACysAAkAgAARAIAAoAgANASAAQQA2AgAgAEEcaiABNgIADwsQrQEACxCuAQALKwACQCAABEAgACgCAA0BIABBADYCACAAQSBqIAE2AgAPCxCtAQALEK4BAAsrAAJAIAAEQCAAKAIADQEgAEEANgIAIABBJGogATYCAA8LEK0BAAsQrgEACysAAkAgAARAIAAoAgANASAAQQA2AgAgAEEoaiABNgIADwsQrQEACxCuAQALQAEBfyMAQRBrIgQkACAEIAM2AgwgBCACNgIIIAQgATYCBCAEIAA2AgAgBCgCACAEKAIEIAQoAgggBCgCDBATAAs3ACAAQQM6ACAgAEKAgICAgAQ3AgAgACABNgIYIABBADYCECAAQQA2AgggAEEcakHEh8AANgIACzUBAX8gASgCGEHDjsAAQQsgAUEcaigCACgCDBEDACECIABBADoABSAAIAI6AAQgACABNgIACyUAAkAgAARAIAAoAgBBf0YNASAAQRxqKAIADwsQrQEACxCuAQALJQACQCAABEAgACgCAEF/Rg0BIABBIGooAgAPCxCtAQALEK4BAAslAAJAIAAEQCAAKAIAQX9GDQEgAEEkaigCAA8LEK0BAAsQrgEACyUAAkAgAARAIAAoAgBBf0YNASAAQShqKAIADwsQrQEACxCuAQALJwAgACAAKAIEQQFxIAFyQQJyNgIEIAAgAWoiACAAKAIEQQFyNgIECzoBAn9B3K3AAC0AACEBQdytwABBADoAAEHgrcAAKAIAIQJB4K3AAEEANgIAIAAgAjYCBCAAIAE2AgALIAEBfwJAIAAoAgQiAUUNACAAQQhqKAIARQ0AIAEQFQsLHwACQCABQXxNBEAgACABQQQgAhCZASIADQELAAsgAAsjACACIAIoAgRBfnE2AgQgACABQQFyNgIEIAAgAWogATYCAAslACAARQRAQciMwABBMBCsAQALIAAgAiADIAQgBSABKAIQEQoACyMAIABFBEBByIzAAEEwEKwBAAsgACACIAMgBCABKAIQEQgACyMAIABFBEBByIzAAEEwEKwBAAsgACACIAMgBCABKAIQEQcACyMAIABFBEBByIzAAEEwEKwBAAsgACACIAMgBCABKAIQERUACyMAIABFBEBByIzAAEEwEKwBAAsgACACIAMgBCABKAIQERIACyMAIABFBEBByIzAAEEwEKwBAAsgACACIAMgBCABKAIQERQACx4AIAAgAUEDcjYCBCAAIAFqIgAgACgCBEEBcjYCBAsUACAAQQRqKAIABEAgACgCABAVCwshACAARQRAQciMwABBMBCsAQALIAAgAiADIAEoAhARBAALHwAgAEUEQEHIjMAAQTAQrAEACyAAIAIgASgCEBEBAAsZAQF/IAAoAhAiAQR/IAEFIABBFGooAgALCxkAIAAoAgAiACgCACAAQQhqKAIAIAEQtwELEgBBAEEZIABBAXZrIABBH0YbCxYAIAAgAUEBcjYCBCAAIAFqIAE2AgALHAAgASgCGEHgpsAAQQUgAUEcaigCACgCDBEDAAsTACAAKAIAIgBBJE8EQCAAEAALCxAAIAAgAWpBf2pBACABa3ELFAAgACgCACAAQQhqKAIAIAEQtwELDAAgACABIAIgAxAYCwsAIAEEQCAAEBULCw8AIABBAXQiAEEAIABrcgsUACAAKAIAIAEg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BAAAAAQAAAARAAAAEgAAABMAAABjYW5ub3QgYWNjZXNzIGEgVGhyZWFkIExvY2FsIFN0b3JhZ2UgdmFsdWUgZHVyaW5nIG9yIGFmdGVyIGRlc3RydWN0aW9uL3J1c3RjL2E1NWRkNzFkNWZiMGVjNWE2YTNhOWU4YzI3YjIxMjdiYTQ5MWNlNTIvbGlicmFyeS9zdGQvc3JjL3RocmVhZC9sb2NhbC5ycwAAAHYFEABPAAAApQEAABoAAAAUAAAAAAAAAAEAAAAVAAAAL3J1c3RjL2E1NWRkNzFkNWZiMGVjNWE2YTNhOWU4YzI3YjIxMjdiYTQ5MWNlNTIvbGlicmFyeS9jb3JlL3NyYy9zdHIvcGF0dGVybi5ycwDoBRAATwAAALcBAAAmAAAAY2xvc3VyZSBpbnZva2VkIHJlY3Vyc2l2ZWx5IG9yIGRlc3Ryb3llZCBhbHJlYWR5SnNWYWx1ZSgpAAAAeAYQAAgAAACABhAAAQAAAG51bGwgcG9pbnRlciBwYXNzZWQgdG8gcnVzdHJlY3Vyc2l2ZSB1c2Ugb2YgYW4gb2JqZWN0IGRldGVjdGVkIHdoaWNoIHdvdWxkIGxlYWQgdG8gdW5zYWZlIGFsaWFzaW5nIGluIHJ1c3QAACQAAAAEAAAABAAAACUAAAAmAAAAJwAAAGNhbGxlZCBgT3B0aW9uOjp1bndyYXAoKWAgb24gYSBgTm9uZWAgdmFsdWVBY2Nlc3NFcnJvcm1lbW9yeSBhbGxvY2F0aW9uIG9mICBieXRlcyBmYWlsZWQKAAAATgcQABUAAABjBxAADgAAAGxpYnJhcnkvc3RkL3NyYy9hbGxvYy5yc4QHEAAYAAAAUgEAAAkAAABsaWJyYXJ5L3N0ZC9zcmMvcGFuaWNraW5nLnJzrAcQABwAAABGAgAAHwAAAKwHEAAcAAAARwIAAB4AAAAoAAAADAAAAAQAAAApAAAAJAAAAAgAAAAEAAAAKgAAACsAAAAQAAAABAAAACwAAAAtAAAAJAAAAAgAAAAEAAAALgAAAC8AAABIYXNoIHRhYmxlIGNhcGFjaXR5IG92ZXJmbG93MAgQABwAAAAvY2FyZ28vcmVnaXN0cnkvc3JjL2dpdGh1Yi5jb20tMWVjYzYyOTlkYjllYzgyMy9oYXNoYnJvd24tMC4xMi4zL3NyYy9yYXcvbW9kLnJzAFQIEABPAAAAWgAAACgAAAAwAAAABAAAAAQAAAAxAAAAMgAAADMAAAAwAAAAAAAAAAEAAAAHAAAAbGlicmFyeS9hbGxvYy9zcmMvcmF3X3ZlYy5yc2NhcGFjaXR5IG92ZXJmbG93AAAA+AgQABEAAADcCBAAHAAAAAYCAAAFAAAAYSBmb3JtYXR0aW5nIHRyYWl0IGltcGxlbWVudGF0aW9uIHJldHVybmVkIGFuIGVycm9ybGlicmFyeS9hbGxvYy9zcmMvZm10LnJzAFcJEAAYAAAAZAIAACAAAAAuLgAAgAkQAAIAAABpbmRleCBvdXQgb2YgYm91bmRzOiB0aGUgbGVuIGlzICBidXQgdGhlIGluZGV4IGlzIAAAjAkQACAAAACsCRAAEgAAAGNhbGxlZCBgT3B0aW9uOjp1bndyYXAoKWAgb24gYSBgTm9uZWAgdmFsdWUAOQAAAAAAAAABAAAAOgAAAGA6IACACRAAAAAAAA0KEAACAAAAfSB9MHgwMDAxMDIwMzA0MDUwNjA3MDgwOTEwMTExMjEzMTQxNTE2MTcxODE5MjAyMTIyMjMyNDI1MjYyNzI4MjkzMDMxMzIzMzM0MzUzNjM3MzgzOTQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NTA1MTUyNTM1NDU1NTY1NzU4NTk2MDYxNjI2MzY0NjU2NjY3Njg2OTcwNzE3MjczNzQ3NTc2Nzc3ODc5ODA4MTgyODM4NDg1ODY4Nzg4ODk5MDkxOTI5Mzk0OTU5Njk3OTg5OXJhbmdlIHN0YXJ0IGluZGV4ICBvdXQgb2YgcmFuZ2UgZm9yIHNsaWNlIG9mIGxlbmd0aCAAAADtChAAEgAAAP8KEAAiAAAAbGlicmFyeS9jb3JlL3NyYy9zbGljZS9pbmRleC5ycwA0CxAAHwAAADQAAAAFAAAAcmFuZ2UgZW5kIGluZGV4IGQLEAAQAAAA/woQACIAAAA0CxAAHwAAAEkAAAAFAAAAc2xpY2UgaW5kZXggc3RhcnRzIGF0ICBidXQgZW5kcyBhdCAAlAsQABYAAACqCxAADQAAADQLEAAfAAAAXAAAAAUAAABsaWJyYXJ5L2NvcmUvc3JjL3N0ci9wYXR0ZXJuLnJzANgLEAAfAAAAGgYAABUAAADYCxAAHwAAAEgGAAAVAAAA2AsQAB8AAABJBgAA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");var ki=class{async init(){await zo(Jo);let e=new Rt("<%","%>","\0","*","-","_","tR");this.renderer=new sn(e)}async parse_commands(e,t){return this.renderer.render_content(e,t)}};var Ze;(function(a){a[a.CreateNewFromTemplate=0]="CreateNewFromTemplate",a[a.AppendActiveFile=1]="AppendActiveFile",a[a.OverwriteFile=2]="OverwriteFile",a[a.OverwriteActiveFile=3]="OverwriteActiveFile",a[a.DynamicProcessor=4]="DynamicProcessor",a[a.StartupTemplate=5]="StartupTemplate"})(Ze||(Ze={}));var cn=class{constructor(e){this.plugin=e;this.functions_generator=new wi(this.plugin),this.parser=new ki}async setup(){this.files_with_pending_templates=new Set,await this.parser.init(),await this.functions_generator.init(),this.plugin.registerMarkdownPostProcessor((e,t)=>this.process_dynamic_templates(e,t))}create_running_config(e,t,r){let i=vt(this.plugin.app);return{template_file:e,target_file:t,run_mode:r,active_file:i}}async read_and_parse_template(e){let t=await this.plugin.app.vault.read(e.template_file);return this.parse_template(e,t)}async parse_template(e,t){let r=await this.functions_generator.generate_object(e,Xe.USER_INTERNAL);return this.current_functions_object=r,await this.parser.parse_commands(t,r)}start_templater_task(e){this.files_with_pending_templates.add(e)}async end_templater_task(e){this.files_with_pending_templates.delete(e),this.files_with_pending_templates.size===0&&(this.plugin.app.workspace.trigger("templater:all-templates-executed"),await this.functions_generator.teardown())}async create_new_note_from_template(e,t,r,i=!0){if(!t)switch(this.plugin.app.vault.getConfig("newFileLocation")){case"current":{let _=vt(this.plugin.app);_&&(t=_.parent);break}case"folder":t=this.plugin.app.fileManager.getNewFileParent("");break;case"root":t=this.plugin.app.vault.getRoot();break;default:break}let o=e instanceof de.TFile&&e.extension||"md",a=await Se(async()=>{let m=t instanceof de.TFolder?t.path:t,_=this.plugin.app.vault.getAvailablePath((0,de.normalizePath)(`${m??""}/${r||"Untitled"}`),o),w=lo(_);return w&&!this.plugin.app.vault.getAbstractFileByPathInsensitive(w)&&await this.plugin.app.vault.createFolder(w),this.plugin.app.vault.create(_,"")},`Couldn't create ${o} file.`);if(a==null)return;let{path:l}=a;this.start_templater_task(l);let c,d;if(e instanceof de.TFile?(c=this.create_running_config(e,a,0),d=await Se(async()=>this.read_and_parse_template(c),"Template parsing error, aborting.")):(c=this.create_running_config(void 0,a,0),d=await Se(async()=>this.parse_template(c,e),"Template parsing error, aborting.")),d==null){await this.plugin.app.vault.delete(a),await this.end_templater_task(l);return}if(await this.plugin.app.vault.modify(a,d),this.plugin.app.workspace.trigger("templater:new-note-from-template",{file:a,content:d}),i){let m=this.plugin.app.workspace.getLeaf(!1);if(!m){oe(new P("No active leaf"));return}await m.openFile(a,{state:{mode:"source"}}),await this.plugin.editor_handler.jump_to_next_cursor_location(a,!0),m.setEphemeralState({rename:"all"})}return await this.end_templater_task(l),a}async append_template_to_active_file(e){let t=this.plugin.app.workspace.getActiveViewOfType(de.MarkdownView),r=this.plugin.app.workspace.activeEditor;if(!r||!r.file||!r.editor){oe(new P("No active editor, can't append templates."));return}let{path:i}=r.file;this.start_templater_task(i);let o=this.create_running_config(e,r.file,1),a=await Se(async()=>this.read_and_parse_template(o),"Template parsing error, aborting.");if(a==null){await this.end_templater_task(i);return}let{content:l,frontmatter:c}=vn(a),m=r.editor.getDoc(),_=m.listSelections();m.replaceSelection(l),t&&(Object.keys(c).length>0&&t instanceof de.MarkdownView&&typeof t.metadataEditor?.insertProperties=="function"&&t.metadataEditor.insertProperties(c),await jt(100),await t.save()),this.plugin.app.workspace.trigger("templater:template-appended",{view:t,editor:r,content:a,oldSelections:_,newSelections:m.listSelections()}),await this.plugin.editor_handler.jump_to_next_cursor_location(r.file,!0),await this.end_templater_task(i)}async write_template_to_file(e,t){let{path:r}=t;this.start_templater_task(r);let i=this.plugin.app.workspace.getActiveViewOfType(de.MarkdownView),o=this.plugin.app.workspace.activeEditor,a=vt(this.plugin.app),l=this.create_running_config(e,t,2),c=await Se(async()=>this.read_and_parse_template(l),"Template parsing error, aborting.");if(c==null){await this.end_templater_task(r);return}let{content:d,frontmatter:m}=vn(c);if(a?.path===t.path&&o&&o.editor&&i){let _="",{content:w,frontmatter:b}=vn(o.editor.getValue());ur(b,m),Object.keys(b).length>0&&(_+=`--- -${(0,de.stringifyYaml)(b)}--- -`),_+=w+d,o.editor.setValue(_),o.editor.setSelection({line:0,ch:0},{line:0,ch:0}),await jt(100),await i.save()}else await this.plugin.app.vault.process(t,_=>{let w="",{content:b,frontmatter:S}=vn(_);return ur(S,m),Object.keys(S).length>0&&(w+=`--- -${(0,de.stringifyYaml)(S)}--- -`),w+=b+d,c=w,w});this.plugin.app.workspace.trigger("templater:new-note-from-template",{file:t,content:c}),await this.plugin.editor_handler.jump_to_next_cursor_location(t,!0),await this.end_templater_task(r)}overwrite_active_file_commands(){let e=this.plugin.app.workspace.activeEditor;if(!e||!e.file){oe(new P("Active editor is null, can't overwrite content"));return}this.overwrite_file_commands(e.file,!0)}async overwrite_file_commands(e,t=!1){let{path:r}=e;this.start_templater_task(r);let i=this.create_running_config(e,e,t?3:2),o=await Se(async()=>this.read_and_parse_template(i),"Template parsing error, aborting.");if(o==null){await this.end_templater_task(r);return}await this.plugin.app.vault.modify(e,o),this.plugin.app.workspace.trigger("templater:overwrite-file",{file:e,content:o}),await this.plugin.editor_handler.jump_to_next_cursor_location(e,!0),await this.end_templater_task(r)}async process_dynamic_templates(e,t){let r=so(),i=document.createNodeIterator(e,NodeFilter.SHOW_TEXT),o,a=!1,l;for(;o=i.nextNode();){let c=o.nodeValue;if(c!==null){let d=r.exec(c);if(d!==null){let m=this.plugin.app.metadataCache.getFirstLinkpathDest("",t.sourcePath);if(!m||!(m instanceof de.TFile))return;if(!a){a=!0;let _=this.create_running_config(m,m,4);l=await this.functions_generator.generate_object(_,Xe.USER_INTERNAL),this.current_functions_object=l}}for(;d!=null;){let m=d[1]+d[2],_=await Se(async()=>await this.parser.parse_commands(m,l),`Command Parsing error in dynamic command '${m}'`);if(_==null)return;let w=r.lastIndex-d[0].length,b=r.lastIndex;c=c.substring(0,w)+_+c.substring(b),r.lastIndex+=_.length-d[0].length,d=r.exec(c)}o.nodeValue=c}}}get_new_file_template_for_folder(e){do{let t=this.plugin.settings.folder_templates.find(r=>r.folder==e.path);if(t&&t.template)return t.template;e=e.parent}while(e)}get_new_file_template_for_file(e){let t=this.plugin.settings.file_templates.find(r=>new RegExp(r.regex).test(e.path));if(t&&t.template)return t.template}static async on_file_creation(e,t,r){if(!(r instanceof de.TFile)||r.extension!=="md")return;let i=(0,de.normalizePath)(e.plugin.settings.templates_folder);if(r.path.includes(i)&&i!=="/"||(await jt(300),e.files_with_pending_templates.has(r.path)))return;let o=await t.vault.read(r),a=(0,de.getFrontMatterInfo)(o),l=o.length-a.contentStart;if(l==0&&e.plugin.settings.enable_folder_templates){let c=e.get_new_file_template_for_folder(r.parent);if(!c)return;let d=await Se(async()=>Mt(t,c),`Couldn't find template ${c}`);if(d==null)return;await e.write_template_to_file(d,r)}else if(l==0&&e.plugin.settings.enable_file_templates){let c=e.get_new_file_template_for_file(r);if(!c)return;let d=await Se(async()=>Mt(t,c),`Couldn't find template ${c}`);if(d==null)return;await e.write_template_to_file(d,r)}else{let c=1e5;r.stat.size<=c?await e.overwrite_file_commands(r):console.log(`Templater skipped parsing ${r.path} because file size exceeds ${c}`)}}async execute_startup_scripts(){for(let e of this.plugin.settings.startup_templates){if(!e)continue;let t=Ce(()=>Mt(this.plugin.app,e),`Couldn't find startup template "${e}"`);if(!t)continue;let{path:r}=t;this.start_templater_task(r);let i=this.create_running_config(t,t,5);await Se(async()=>this.read_and_parse_template(i),"Startup Template parsing error, aborting."),await this.end_templater_task(r)}}};var ln=X(require("obsidian"));var br=class{constructor(e,t,r){this.plugin=e;this.templater=t;this.settings=r}setup(){this.plugin.app.workspace.onLayoutReady(()=>{if(this.settings.trigger_on_file_creation&&this.plugin.app.vault.getConfig("openBehavior")==="daily"){let t=this.plugin.app.internalPlugins.getEnabledPluginById("daily-notes");if(t){let{folder:r,format:i}=t.options,o=(0,ln.normalizePath)(`${r}/${(0,ln.moment)().format(i)}.md`),a=vt(this.plugin.app);a?.path===o&&cn.on_file_creation(this.templater,this.plugin.app,a)}}this.update_trigger_file_on_creation()}),this.update_syntax_highlighting(),this.update_file_menu()}update_syntax_highlighting(){let e=this.plugin.editor_handler.desktopShouldHighlight(),t=this.plugin.editor_handler.mobileShouldHighlight();e||t?this.plugin.editor_handler.enable_highlighter():this.plugin.editor_handler.disable_highlighter()}update_trigger_file_on_creation(){this.settings.trigger_on_file_creation?(this.trigger_on_file_creation_event=this.plugin.app.vault.on("create",e=>cn.on_file_creation(this.templater,this.plugin.app,e)),this.plugin.registerEvent(this.trigger_on_file_creation_event)):this.trigger_on_file_creation_event&&(this.plugin.app.vault.offref(this.trigger_on_file_creation_event),this.trigger_on_file_creation_event=void 0)}update_file_menu(){this.plugin.registerEvent(this.plugin.app.workspace.on("file-menu",(e,t)=>{t instanceof ln.TFolder&&e.addItem(r=>{r.setTitle("Create new note from template").setIcon("templater-icon").onClick(()=>{this.plugin.fuzzy_suggester.create_new_note_from_template(t)})})}))}};var Er=X(require("obsidian"));var Si=class{constructor(e){this.plugin=e}setup(){this.plugin.addCommand({id:"insert-templater",name:"Open insert template modal",icon:"templater-icon",hotkeys:Er.Platform.isMacOS?void 0:[{modifiers:["Alt"],key:"e"}],callback:()=>{this.plugin.fuzzy_suggester.insert_template()}}),this.plugin.addCommand({id:"replace-in-file-templater",name:"Replace templates in the active file",icon:"templater-icon",hotkeys:Er.Platform.isMacOS?void 0:[{modifiers:["Alt"],key:"r"}],callback:()=>{this.plugin.templater.overwrite_active_file_commands()}}),this.plugin.addCommand({id:"jump-to-next-cursor-location",name:"Jump to next cursor location",icon:"text-cursor",hotkeys:[{modifiers:["Alt"],key:"Tab"}],callback:()=>{this.plugin.editor_handler.jump_to_next_cursor_location()}}),this.plugin.addCommand({id:"create-new-note-from-template",name:"Create new note from template",icon:"templater-icon",hotkeys:Er.Platform.isMacOS?void 0:[{modifiers:["Alt"],key:"n"}],callback:()=>{this.plugin.fuzzy_suggester.create_new_note_from_template()}}),this.register_templates_hotkeys()}register_templates_hotkeys(){this.plugin.settings.enabled_templates_hotkeys.forEach(e=>{e&&this.add_template_hotkey(null,e)})}add_template_hotkey(e,t){if(this.remove_template_hotkey(e),t){let r=this.plugin.settings.templates_folder?this.plugin.settings.templates_folder.length+1:0,i=t.slice(r,-3);this.plugin.addCommand({id:t,name:`Insert ${i}`,icon:"templater-icon",callback:()=>{let o=Ce(()=>Mt(this.plugin.app,t),"Couldn't find the template file associated with this hotkey");!o||this.plugin.templater.append_template_to_active_file(o)}}),this.plugin.addCommand({id:`create-${t}`,name:`Create ${i}`,icon:"templater-icon",callback:()=>{let o=Ce(()=>Mt(this.plugin.app,t),"Couldn't find the template file associated with this hotkey");!o||this.plugin.templater.create_new_note_from_template(o)}})}}remove_template_hotkey(e){e&&(this.plugin.removeCommand(`${e}`),this.plugin.removeCommand(`create-${e}`))}};var Oi=X(require("obsidian"));var Ci=X(require("obsidian"));var Di=class{constructor(e){this.app=e}async jump_to_next_cursor_location(){let e=this.app.workspace.activeEditor;if(!e?.editor)return;let t=e.editor.getValue(),{cursor_matches:r,positions:i}=this.get_cursor_matches_and_positions(t);if(!i||!r)return;let o=e instanceof Ci.MarkdownView?e.currentMode.getFoldInfo():null,a=[];for(let l=r.length-1;l>=0;l--){let c=r[l],d=this.get_editor_position_from_index(t,c.index),m=this.get_editor_position_from_index(t,c.index+c[0].length);a.push({from:d,to:m,text:""})}e.editor.transaction({changes:a,selections:i.map(l=>({from:l}))}),o&&Array.isArray(o.folds)&&(i.forEach(l=>{o.folds=o.folds.filter(c=>c.from>l.line||c.to[0-9]*)\)\s*%>/g,r=Array.from(e.matchAll(t));if(r.length===0)return{};r.sort((d,m)=>Number(d.groups?.order||0)-Number(m.groups?.order||0));let i=r[0][0],o=r.filter(d=>d[0]===i),a=o[0][1]===""?[o[0]]:o,l=[],c=0;for(let d of a){let m=d.index-c;l.push(this.get_editor_position_from_index(e,m)),e=e.slice(0,m)+e.slice(m+d[0].length),c+=d[0].length}return{cursor_matches:a,positions:l}}};var ea=X(require("obsidian"));var ec={app:{name:"app",description:"This module exposes the app instance. Prefer to use this over the global app instance."},user:{name:"user",description:"This module exposes custom made scripts, written by yourself within the script file folder location"},config:{name:"config",description:`This module exposes Templater's running configuration. +`)}catch{console.error("Failed to parse summary section")}}function Do(r){if(!r)return"";try{return r.content.nodes[0].getChildNodes()[0].text.trim()}catch{return""}}function Po(r){try{return r.blocks.map(n=>{let i=n.parameterName,o=n.content.getChildNodes()[0].getChildNodes().filter(s=>s instanceof xe).map(s=>s.text).join(" ");return new Kn(i,o)})}catch{return[]}}function ze(r,e,t){if(t<0||t===r.length)return;let n=r[e];r[e]=r[t],r[t]=n}function Le(r){return r.workspace.activeEditor?.file??r.workspace.getActiveFile()}function sn(r){let e=r.lastIndexOf("/");return e!==-1?r.slice(0,e):""}function Et(r){return r!==null&&typeof r=="object"}function Qr(r){let e=r.toString(),t=e.indexOf("(");return e.substring(t+1,e.indexOf(")")).replace(/ /g,"").split(",")}function Un(r,e,t){let n=r instanceof HTMLOListElement?"li":"p",i=r.createEl(n),o=r.createEl("b",{text:e});return i.appendChild(o),i.appendChild(document.createTextNode(`: ${t}`)),i}function cn(r,e){if(Object.keys(e).length!==0){for(let t in e)if(e.hasOwnProperty(t))if(r.hasOwnProperty(t)){let n=r[t],i=e[t];if(Array.isArray(n)||Array.isArray(i)){let o=Array.isArray(n)?n:[n],s=Array.isArray(i)?i:[i];r[t]=o.concat(s).unique()}else Et(n)&&Et(i)?cn(n,i):i!=null&&i!==""&&(r[t]=i)}else r[t]=e[t]}}function kt(r){let e={},t=(0,re.getFrontMatterInfo)(r);return t.frontmatter&&(e=(0,re.parseYaml)(t.frontmatter)),{frontmatter:e,content:r.slice(t.contentStart)}}var ln=U(require("obsidian"));var me;(function(t){t[t.TemplateFiles=0]="TemplateFiles",t[t.ScriptFiles=1]="ScriptFiles"})(me||(me={}));var ct=class extends ln.AbstractInputSuggest{constructor(e,t,n){super(t.app,e);this.inputEl=e;this.plugin=t;this.mode=n}get_folder(e){switch(e){case 0:return this.plugin.settings.templates_folder;case 1:return this.plugin.settings.user_scripts_folder}}get_error_msg(e){switch(e){case 0:return"Templates folder doesn't exist";case 1:return"User Scripts folder doesn't exist"}}getSuggestions(e){let t=ce(()=>je(this.plugin.app,this.get_folder(this.mode)),this.get_error_msg(this.mode));if(!t)return[];let n=[],i=e.toLowerCase();return t.forEach(o=>{o instanceof ln.TFile&&o.extension==="md"&&o.path.toLowerCase().includes(i)&&n.push(o)}),n.slice(0,1e3)}renderSuggestion(e,t){t.setText(e.path)}selectSuggestion(e){this.setValue(e.path),this.inputEl.trigger("input"),this.close()}};var un=U(require("obsidian")),St=class extends un.AbstractInputSuggest{constructor(e,t){super(e,t);this.inputEl=t}getSuggestions(e){let t=this.app.vault.getAllLoadedFiles(),n=[],i=e.toLowerCase();return t.forEach(o=>{o instanceof un.TFolder&&o.path.toLowerCase().includes(i)&&n.push(o)}),n.slice(0,1e3)}renderSuggestion(e,t){t.setText(e.path)}selectSuggestion(e){this.setValue(e.path),this.inputEl.trigger("input"),this.close()}};var Pe;(function(o){o[o.Off=0]="Off",o[o.RenderDescriptionParameterReturn=1]="RenderDescriptionParameterReturn",o[o.RenderDescriptionParameterList=2]="RenderDescriptionParameterList",o[o.RenderDescriptionReturn=3]="RenderDescriptionReturn",o[o.RenderDescriptionOnly=4]="RenderDescriptionOnly"})(Pe||(Pe={}));function Xr(r){return isBoolean(r)?r:[1,3].includes(r)}function Zr(r){return isBoolean(r)?r:[1,2].includes(r)}function ei(r){return isBoolean(r)?r:r!=0}var ti={command_timeout:5,templates_folder:"",templates_pairs:[["",""]],trigger_on_file_creation:!1,auto_jump_to_cursor:!1,enable_system_commands:!1,shell_path:"",user_scripts_folder:"",enable_folder_templates:!0,folder_templates:[{folder:"",template:""}],enable_file_templates:!1,file_templates:[{regex:".*",template:""}],syntax_highlighting:!0,syntax_highlighting_mobile:!1,enabled_templates_hotkeys:[""],startup_templates:[""],intellisense_render:Pe.RenderDescriptionParameterReturn},Gn=class extends N.PluginSettingTab{constructor(e){super(e.app,e);this.plugin=e;this.icon="templater-icon"}display(){this.containerEl.empty(),this.add_template_folder_setting(),this.add_internal_functions_setting(),this.add_syntax_highlighting_settings(),this.add_auto_jump_to_cursor(),this.add_trigger_on_new_file_creation_setting(),this.plugin.settings.trigger_on_file_creation&&(this.add_folder_templates_setting(),this.add_file_templates_setting()),this.add_templates_hotkeys_setting(),this.add_startup_templates_setting(),this.add_user_script_functions_setting(),this.add_user_system_command_functions_setting(),this.add_donating_setting()}add_template_folder_setting(){new N.Setting(this.containerEl).setName("Template folder location").setDesc("Files in this folder will be available as templates.").addSearch(e=>{new St(this.app,e.inputEl),e.setPlaceholder("Example: folder1/folder2").setValue(this.plugin.settings.templates_folder).onChange(t=>{t=t.trim(),t=t.replace(/\/$/,""),this.plugin.settings.templates_folder=t,this.plugin.save_settings()}),e.containerEl.addClass("templater_search")})}add_internal_functions_setting(){let e=document.createDocumentFragment();e.append("Templater provides multiples predefined variables / functions that you can use.",e.createEl("br"),"Check the ",e.createEl("a",{href:"https://silentvoid13.github.io/Templater/",text:"documentation"})," to get a list of all the available internal variables / functions."),new N.Setting(this.containerEl).setName("Internal variables and functions").setDesc(e)}add_syntax_highlighting_settings(){let e=document.createDocumentFragment();e.append("Adds syntax highlighting for Templater commands in edit mode.");let t=document.createDocumentFragment();t.append("Adds syntax highlighting for Templater commands in edit mode on mobile. Use with caution: this may break live preview on mobile platforms."),new N.Setting(this.containerEl).setName("Syntax highlighting on desktop").setDesc(e).addToggle(n=>{n.setValue(this.plugin.settings.syntax_highlighting).onChange(i=>{this.plugin.settings.syntax_highlighting=i,this.plugin.save_settings(),this.plugin.event_handler.update_syntax_highlighting()})}),new N.Setting(this.containerEl).setName("Syntax highlighting on mobile").setDesc(t).addToggle(n=>{n.setValue(this.plugin.settings.syntax_highlighting_mobile).onChange(i=>{this.plugin.settings.syntax_highlighting_mobile=i,this.plugin.save_settings(),this.plugin.event_handler.update_syntax_highlighting()})})}add_auto_jump_to_cursor(){let e=document.createDocumentFragment();e.append("Automatically triggers ",e.createEl("code",{text:"tp.file.cursor"})," after inserting a template.",e.createEl("br"),"You can also set a hotkey to manually trigger ",e.createEl("code",{text:"tp.file.cursor"}),"."),new N.Setting(this.containerEl).setName("Automatic jump to cursor").setDesc(e).addToggle(t=>{t.setValue(this.plugin.settings.auto_jump_to_cursor).onChange(n=>{this.plugin.settings.auto_jump_to_cursor=n,this.plugin.save_settings()})})}add_trigger_on_new_file_creation_setting(){let e=document.createDocumentFragment();e.append("Templater will listen for the new file creation event, and, if it matches a rule you've set, replace every command it finds in the new file's content. ","This makes Templater compatible with other plugins like the Daily note core plugin, Calendar plugin, Review plugin, Note refactor plugin, etc. ",e.createEl("br"),e.createEl("br"),"Make sure to set up rules under either folder templates or file regex template below.",e.createEl("br"),e.createEl("br"),e.createEl("b",{text:"Warning: "}),"This can be dangerous if you create new files with unknown / unsafe content on creation. Make sure that every new file's content is safe on creation."),new N.Setting(this.containerEl).setName("Trigger Templater on new file creation").setDesc(e).addToggle(t=>{t.setValue(this.plugin.settings.trigger_on_file_creation).onChange(n=>{this.plugin.settings.trigger_on_file_creation=n,this.plugin.save_settings(),this.plugin.event_handler.update_trigger_file_on_creation(),this.display()})})}add_templates_hotkeys_setting(){new N.Setting(this.containerEl).setName("Template hotkeys").setHeading();let e=document.createDocumentFragment();e.append("Template hotkeys allows you to bind a template to a hotkey."),new N.Setting(this.containerEl).setDesc(e),this.plugin.settings.enabled_templates_hotkeys.forEach((t,n)=>{new N.Setting(this.containerEl).addSearch(o=>{new ct(o.inputEl,this.plugin,me.TemplateFiles),o.setPlaceholder("Example: folder1/template_file").setValue(t).onChange(s=>{if(s&&this.plugin.settings.enabled_templates_hotkeys.contains(s)){V(new b("This template is already bound to a hotkey"));return}this.plugin.command_handler.add_template_hotkey(this.plugin.settings.enabled_templates_hotkeys[n],s),this.plugin.settings.enabled_templates_hotkeys[n]=s,this.plugin.save_settings()}),o.containerEl.addClass("templater_search")}).addExtraButton(o=>{o.setIcon("any-key").setTooltip("Configure Hotkey").onClick(()=>{this.app.setting.openTabById("hotkeys");let s=this.app.setting.activeTab;s.searchComponent.inputEl.value=t,s.updateHotkeyVisibility()})}).addExtraButton(o=>{o.setIcon("up-chevron-glyph").setTooltip("Move up").onClick(()=>{ze(this.plugin.settings.enabled_templates_hotkeys,n,n-1),this.plugin.save_settings(),this.display()})}).addExtraButton(o=>{o.setIcon("down-chevron-glyph").setTooltip("Move down").onClick(()=>{ze(this.plugin.settings.enabled_templates_hotkeys,n,n+1),this.plugin.save_settings(),this.display()})}).addExtraButton(o=>{o.setIcon("cross").setTooltip("Delete").onClick(()=>{this.plugin.command_handler.remove_template_hotkey(this.plugin.settings.enabled_templates_hotkeys[n]),this.plugin.settings.enabled_templates_hotkeys.splice(n,1),this.plugin.save_settings(),this.display()})}).infoEl.remove()}),new N.Setting(this.containerEl).addButton(t=>{t.setButtonText("Add new hotkey for template").setCta().onClick(()=>{this.plugin.settings.enabled_templates_hotkeys.push(""),this.plugin.save_settings(),this.display()})})}add_folder_templates_setting(){new N.Setting(this.containerEl).setName("Folder templates").setHeading();let e=document.createDocumentFragment();e.append("Folder templates are triggered when a new ",e.createEl("strong",{text:"empty "}),"file is created in a given folder.",e.createEl("br"),"Templater will fill the empty file with the specified template.",e.createEl("br"),"The deepest match is used. A global default template would be defined on the root ",e.createEl("code",{text:"/"}),"."),new N.Setting(this.containerEl).setDesc(e);let t=document.createDocumentFragment();t.append("When enabled, Templater will make use of the folder templates defined below. This option is mutually exclusive with file regex templates below, so enabling one will disable the other."),new N.Setting(this.containerEl).setName("Enable folder templates").setDesc(t).addToggle(n=>{n.setValue(this.plugin.settings.enable_folder_templates).onChange(i=>{this.plugin.settings.enable_folder_templates=i,i&&(this.plugin.settings.enable_file_templates=!1),this.plugin.save_settings(),this.display()})}),!!this.plugin.settings.enable_folder_templates&&(this.plugin.settings.folder_templates.forEach((n,i)=>{new N.Setting(this.containerEl).addSearch(s=>{new St(this.app,s.inputEl),s.setPlaceholder("Folder").setValue(n.folder).onChange(u=>{if(u&&this.plugin.settings.folder_templates.some(l=>l.folder==u)){V(new b("This folder already has a template associated with it"));return}this.plugin.settings.folder_templates[i].folder=u,this.plugin.save_settings()}),s.containerEl.addClass("templater_search")}).addSearch(s=>{new ct(s.inputEl,this.plugin,me.TemplateFiles),s.setPlaceholder("Template").setValue(n.template).onChange(u=>{this.plugin.settings.folder_templates[i].template=u,this.plugin.save_settings()}),s.containerEl.addClass("templater_search")}).addExtraButton(s=>{s.setIcon("up-chevron-glyph").setTooltip("Move up").onClick(()=>{ze(this.plugin.settings.folder_templates,i,i-1),this.plugin.save_settings(),this.display()})}).addExtraButton(s=>{s.setIcon("down-chevron-glyph").setTooltip("Move down").onClick(()=>{ze(this.plugin.settings.folder_templates,i,i+1),this.plugin.save_settings(),this.display()})}).addExtraButton(s=>{s.setIcon("cross").setTooltip("Delete").onClick(()=>{this.plugin.settings.folder_templates.splice(i,1),this.plugin.save_settings(),this.display()})}).infoEl.remove()}),new N.Setting(this.containerEl).addButton(n=>{n.setButtonText("Add new folder template").setTooltip("Add additional folder template").setCta().onClick(()=>{this.plugin.settings.folder_templates.push({folder:"",template:""}),this.plugin.save_settings(),this.display()})}))}add_file_templates_setting(){new N.Setting(this.containerEl).setName("File regex templates").setHeading();let e=document.createDocumentFragment();e.append("File regex templates are triggered when a new ",e.createEl("strong",{text:"empty"})," file is created that matches one of them. Templater will fill the empty file with the specified template.",e.createEl("br"),"The first match from the top is used, so the order of the rules is important.",e.createEl("br"),"Use ",e.createEl("code",{text:".*"})," as a final catch-all, if you need it."),new N.Setting(this.containerEl).setDesc(e);let t=document.createDocumentFragment();t.append("When enabled, Templater will make use of the file regex templates defined below. This option is mutually exclusive with folder templates above, so enabling one will disable the other."),new N.Setting(this.containerEl).setName("Enable file regex templates").setDesc(t).addToggle(n=>{n.setValue(this.plugin.settings.enable_file_templates).onChange(i=>{this.plugin.settings.enable_file_templates=i,i&&(this.plugin.settings.enable_folder_templates=!1),this.plugin.save_settings(),this.display()})}),!!this.plugin.settings.enable_file_templates&&(this.plugin.settings.file_templates.forEach((n,i)=>{new N.Setting(this.containerEl).addText(s=>{s.setPlaceholder("File regex").setValue(n.regex).onChange(u=>{this.plugin.settings.file_templates[i].regex=u,this.plugin.save_settings()}),s.inputEl.addClass("templater_search")}).addSearch(s=>{new ct(s.inputEl,this.plugin,me.TemplateFiles),s.setPlaceholder("Template").setValue(n.template).onChange(u=>{this.plugin.settings.file_templates[i].template=u,this.plugin.save_settings()}),s.containerEl.addClass("templater_search")}).addExtraButton(s=>{s.setIcon("up-chevron-glyph").setTooltip("Move up").onClick(()=>{ze(this.plugin.settings.file_templates,i,i-1),this.plugin.save_settings(),this.display()})}).addExtraButton(s=>{s.setIcon("down-chevron-glyph").setTooltip("Move down").onClick(()=>{ze(this.plugin.settings.file_templates,i,i+1),this.plugin.save_settings(),this.display()})}).addExtraButton(s=>{s.setIcon("cross").setTooltip("Delete").onClick(()=>{this.plugin.settings.file_templates.splice(i,1),this.plugin.save_settings(),this.display()})}).infoEl.remove()}),new N.Setting(this.containerEl).addButton(n=>{n.setButtonText("Add new file regex").setTooltip("Add additional file regex").setCta().onClick(()=>{this.plugin.settings.file_templates.push({regex:"",template:""}),this.plugin.save_settings(),this.display()})}))}add_startup_templates_setting(){new N.Setting(this.containerEl).setName("Startup templates").setHeading();let e=document.createDocumentFragment();e.append("Startup templates are templates that will get executed once when Templater starts.",e.createEl("br"),"These templates won't output anything.",e.createEl("br"),"This can be useful to set up templates adding hooks to Obsidian events for example."),new N.Setting(this.containerEl).setDesc(e),this.plugin.settings.startup_templates.forEach((t,n)=>{new N.Setting(this.containerEl).addSearch(o=>{new ct(o.inputEl,this.plugin,me.TemplateFiles),o.setPlaceholder("Example: folder1/template_file").setValue(t).onChange(s=>{if(s&&this.plugin.settings.startup_templates.contains(s)){V(new b("This startup template already exist"));return}this.plugin.settings.startup_templates[n]=s,this.plugin.save_settings()}),o.containerEl.addClass("templater_search")}).addExtraButton(o=>{o.setIcon("cross").setTooltip("Delete").onClick(()=>{this.plugin.settings.startup_templates.splice(n,1),this.plugin.save_settings(),this.display()})}).infoEl.remove()}),new N.Setting(this.containerEl).addButton(t=>{t.setButtonText("Add new startup template").setCta().onClick(()=>{this.plugin.settings.startup_templates.push(""),this.plugin.save_settings(),this.display()})})}add_user_script_functions_setting(){new N.Setting(this.containerEl).setName("User script functions").setHeading();let e=document.createDocumentFragment();e.append("All JavaScript files in this folder will be loaded as CommonJS modules, to import custom user functions.",e.createEl("br"),"The folder needs to be accessible from the vault.",e.createEl("br"),"Check the ",e.createEl("a",{href:"https://silentvoid13.github.io/Templater/",text:"documentation"})," for more information."),new N.Setting(this.containerEl).setName("Script files folder location").setDesc(e).addSearch(n=>{new St(this.app,n.inputEl),n.setPlaceholder("Example: folder1/folder2").setValue(this.plugin.settings.user_scripts_folder).onChange(i=>{this.plugin.settings.user_scripts_folder=i,this.plugin.save_settings()}),n.containerEl.addClass("templater_search")}),new N.Setting(this.containerEl).setName("User script intellisense").setDesc("Determine how you'd like to have user script intellisense render. Note values will not render if not in the script.").addDropdown(n=>{n.addOption("0","Turn off intellisense").addOption("1","Render method description, parameters list, and return").addOption("2","Render method description and parameters list").addOption("3","Render method description and return").addOption("4","Render method description").setValue(this.plugin.settings.intellisense_render.toString()).onChange(i=>{this.plugin.settings.intellisense_render=parseInt(i),this.plugin.save_settings()})}),e=document.createDocumentFragment();let t;if(!this.plugin.settings.user_scripts_folder)t="No user scripts folder set";else{let n=ce(()=>je(this.app,this.plugin.settings.user_scripts_folder),"User scripts folder doesn't exist");if(!n||n.length===0)t="No user scripts detected";else{let i=0;for(let o of n)o.extension==="js"&&(i++,e.append(e.createEl("li",{text:`tp.user.${o.basename}`})));t=`Detected ${i} User Script(s)`}}new N.Setting(this.containerEl).setName(t).setDesc(e).addExtraButton(n=>{n.setIcon("sync").setTooltip("Refresh").onClick(()=>{this.display()})})}add_user_system_command_functions_setting(){let e=document.createDocumentFragment();if(e.append("Allows you to create user functions linked to system commands.",e.createEl("br"),e.createEl("b",{text:"Warning: "}),"It can be dangerous to execute arbitrary system commands from untrusted sources. Only run system commands that you understand, from trusted sources."),new N.Setting(this.containerEl).setName("User system command functions").setHeading(),new N.Setting(this.containerEl).setName("Enable user system command functions").setDesc(e).addToggle(t=>{t.setValue(this.plugin.settings.enable_system_commands).onChange(n=>{this.plugin.settings.enable_system_commands=n,this.plugin.save_settings(),this.display()})}),this.plugin.settings.enable_system_commands){new N.Setting(this.containerEl).setName("Timeout").setDesc("Maximum timeout in seconds for a system command.").addText(o=>{o.setPlaceholder("Timeout").setValue(this.plugin.settings.command_timeout.toString()).onChange(s=>{let u=Number(s);if(isNaN(u)){V(new b("Timeout must be a number"));return}this.plugin.settings.command_timeout=u,this.plugin.save_settings()})}),e=document.createDocumentFragment(),e.append("Full path to the shell binary to execute the command with.",e.createEl("br"),"This setting is optional and will default to the system's default shell if not specified.",e.createEl("br"),"You can use forward slashes ('/') as path separators on all platforms if in doubt."),new N.Setting(this.containerEl).setName("Shell binary location").setDesc(e).addText(o=>{o.setPlaceholder("Example: /bin/bash, ...").setValue(this.plugin.settings.shell_path).onChange(s=>{this.plugin.settings.shell_path=s,this.plugin.save_settings()})});let t=1;this.plugin.settings.templates_pairs.forEach(o=>{let s=this.containerEl.createEl("div");s.addClass("templater_div");let u=this.containerEl.createEl("h4",{text:"User function n\xB0"+t});u.addClass("templater_title"),new N.Setting(this.containerEl).addExtraButton(d=>{d.setIcon("cross").setTooltip("Delete").onClick(()=>{let A=this.plugin.settings.templates_pairs.indexOf(o);A>-1&&(this.plugin.settings.templates_pairs.splice(A,1),this.plugin.save_settings(),this.display())})}).addText(d=>{let A=d.setPlaceholder("Function name").setValue(o[0]).onChange(w=>{let E=this.plugin.settings.templates_pairs.indexOf(o);E>-1&&(this.plugin.settings.templates_pairs[E][0]=w,this.plugin.save_settings())});return A.inputEl.addClass("templater_template"),A}).addTextArea(d=>{let A=d.setPlaceholder("System command").setValue(o[1]).onChange(w=>{let E=this.plugin.settings.templates_pairs.indexOf(o);E>-1&&(this.plugin.settings.templates_pairs[E][1]=w,this.plugin.save_settings())});return A.inputEl.setAttr("rows",2),A.inputEl.addClass("templater_cmd"),A}).infoEl.remove(),s.appendChild(u),s.appendChild(this.containerEl.lastChild),t+=1});let n=this.containerEl.createEl("div");n.addClass("templater_div2"),new N.Setting(this.containerEl).addButton(o=>{o.setButtonText("Add new user function").setCta().onClick(()=>{this.plugin.settings.templates_pairs.push(["",""]),this.plugin.save_settings(),this.display()})}).infoEl.remove(),n.appendChild(this.containerEl.lastChild)}}add_donating_setting(){let e=new N.Setting(this.containerEl).setName("Donate").setDesc("If you like this Plugin, consider donating to support continued development."),t=document.createElement("a");t.setAttribute("href","https://github.com/sponsors/silentvoid13"),t.addClass("templater_donating");let n=document.createElement("img");n.src="https://img.shields.io/static/v1?label=Sponsor&message=%E2%9D%A4&logo=GitHub&color=%23fe8e86",t.appendChild(n);let i=document.createElement("a");i.setAttribute("href","https://www.paypal.com/donate?hosted_button_id=U2SRGAFYXT32Q"),i.addClass("templater_donating");let o=document.createElement("img");o.src="https://img.shields.io/badge/paypal-silentvoid13-yellow?style=social&logo=paypal",i.appendChild(o),e.settingEl.appendChild(t),e.settingEl.appendChild(i)}};var pn=U(require("obsidian"));var lt;(function(t){t[t.InsertTemplate=0]="InsertTemplate",t[t.CreateNoteTemplate=1]="CreateNoteTemplate"})(lt||(lt={}));var Rn=class extends pn.FuzzySuggestModal{constructor(e){super(e.app);this.plugin=e,this.setPlaceholder("Type name of a template...")}getItems(){if(!this.plugin.settings.templates_folder)return this.app.vault.getMarkdownFiles();let e=ce(()=>je(this.plugin.app,this.plugin.settings.templates_folder),`Couldn't retrieve template files from templates folder ${this.plugin.settings.templates_folder}`);return e||[]}getItemText(e){let t=e.path;if(e.path.startsWith(this.plugin.settings.templates_folder)&&(0,pn.normalizePath)(this.plugin.settings.templates_folder)!="/"){let n=this.plugin.settings.templates_folder.length,i;n===0?i=0:this.plugin.settings.templates_folder.endsWith("/")?i=n:i=n+1,t=e.path.slice(i)}return t.split(".").slice(0,-1).join(".")}onChooseItem(e){switch(this.open_mode){case 0:this.plugin.templater.append_template_to_active_file(e);break;case 1:this.plugin.templater.create_new_note_from_template(e,this.creation_folder);break}}start(){try{this.open()}catch(e){V(e)}}insert_template(){this.open_mode=0,this.start()}create_new_note_from_template(e){this.creation_folder=e,this.open_mode=1,this.start()}};var ni="Error_MobileUnsupportedTemplate",ri='';var Q=U(require("obsidian"));var Ne=U(require("obsidian"));var ne=class{constructor(e){this.plugin=e;this.static_functions=new Map;this.dynamic_functions=new Map}getName(){return this.name}async init(){await this.create_static_templates(),this.static_object=Object.fromEntries(this.static_functions)}async generate_object(e){return this.config=e,await this.create_dynamic_templates(),{...this.static_object,...Object.fromEntries(this.dynamic_functions)}}};var Vn=class extends ne{constructor(){super(...arguments);this.name="date"}async create_static_templates(){this.static_functions.set("now",this.generate_now()),this.static_functions.set("tomorrow",this.generate_tomorrow()),this.static_functions.set("weekday",this.generate_weekday()),this.static_functions.set("yesterday",this.generate_yesterday())}async create_dynamic_templates(){}async teardown(){}generate_now(){return(e="YYYY-MM-DD",t,n,i)=>{if(n&&!(0,Ne.moment)(n,i).isValid())throw new b("Invalid reference date format, try specifying one with the argument 'reference_format'");let o;return typeof t=="string"?o=Ne.moment.duration(t):typeof t=="number"&&(o=Ne.moment.duration(t,"days")),(0,Ne.moment)(n,i).add(o).format(e)}}generate_tomorrow(){return(e="YYYY-MM-DD")=>(0,Ne.moment)().add(1,"days").format(e)}generate_weekday(){return(e="YYYY-MM-DD",t,n,i)=>{if(n&&!(0,Ne.moment)(n,i).isValid())throw new b("Invalid reference date format, try specifying one with the argument 'reference_format'");return(0,Ne.moment)(n,i).weekday(t).format(e)}}generate_yesterday(){return(e="YYYY-MM-DD")=>(0,Ne.moment)().add(-1,"days").format(e)}};var J=U(require("obsidian"));var ii=10,zn=class extends ne{constructor(){super(...arguments);this.name="file";this.include_depth=0;this.create_new_depth=0;this.linkpath_regex=new RegExp("^\\[\\[(.*)\\]\\]$")}async create_static_templates(){this.static_functions.set("creation_date",this.generate_creation_date()),this.static_functions.set("create_new",this.generate_create_new()),this.static_functions.set("cursor",this.generate_cursor()),this.static_functions.set("cursor_append",this.generate_cursor_append()),this.static_functions.set("exists",this.generate_exists()),this.static_functions.set("find_tfile",this.generate_find_tfile()),this.static_functions.set("folder",this.generate_folder()),this.static_functions.set("include",this.generate_include()),this.static_functions.set("last_modified_date",this.generate_last_modified_date()),this.static_functions.set("move",this.generate_move()),this.static_functions.set("path",this.generate_path()),this.static_functions.set("rename",this.generate_rename()),this.static_functions.set("selection",this.generate_selection())}async create_dynamic_templates(){this.dynamic_functions.set("content",await this.generate_content()),this.dynamic_functions.set("tags",this.generate_tags()),this.dynamic_functions.set("title",this.generate_title())}async teardown(){}async generate_content(){return await this.plugin.app.vault.read(this.config.target_file)}generate_create_new(){return async(e,t,n=!1,i)=>{if(this.create_new_depth+=1,this.create_new_depth>ii)throw this.create_new_depth=0,new b("Reached create_new depth limit (max = 10)");let o=await this.plugin.templater.create_new_note_from_template(e,i,t,n);return this.create_new_depth-=1,o}}generate_creation_date(){return(e="YYYY-MM-DD HH:mm")=>(0,J.moment)(this.config.target_file.stat.ctime).format(e)}generate_cursor(){return e=>`<% tp.file.cursor(${e??""}) %>`}generate_cursor_append(){return e=>{let t=this.plugin.app.workspace.activeEditor;if(!t||!t.editor){V(new b("No active editor, can't append to cursor."));return}return t.editor.getDoc().replaceSelection(e),""}}generate_exists(){return async e=>{let t=(0,J.normalizePath)(e);return await this.plugin.app.vault.exists(t)}}generate_find_tfile(){return e=>{let t=(0,J.normalizePath)(e);return this.plugin.app.metadataCache.getFirstLinkpathDest(t,"")}}generate_folder(){return(e=!1)=>{let t=this.config.target_file.parent,n;return e?n=t.path:n=t.name,n}}generate_include(){return async e=>{if(this.include_depth+=1,this.include_depth>ii)throw this.include_depth-=1,new b("Reached inclusion depth limit (max = 10)");let t;if(e instanceof J.TFile)t=await this.plugin.app.vault.read(e);else{let n;if((n=this.linkpath_regex.exec(e))===null)throw this.include_depth-=1,new b("Invalid file format, provide an obsidian link between quotes.");let{path:i,subpath:o}=(0,J.parseLinktext)(n[1]),s=this.plugin.app.metadataCache.getFirstLinkpathDest(i,"");if(!s)throw this.include_depth-=1,new b(`File ${e} doesn't exist`);if(t=await this.plugin.app.vault.read(s),o){let u=this.plugin.app.metadataCache.getFileCache(s);if(u){let l=(0,J.resolveSubpath)(u,o);l&&(t=t.slice(l.start.offset,l.end?.offset))}}}try{let n=await this.plugin.templater.parser.parse_commands(t,this.plugin.templater.current_functions_object);return this.include_depth-=1,n}catch(n){throw this.include_depth-=1,n}}}generate_last_modified_date(){return(e="YYYY-MM-DD HH:mm")=>(0,J.moment)(this.config.target_file.stat.mtime).format(e)}generate_move(){return async(e,t)=>{let n=t||this.config.target_file,i=(0,J.normalizePath)(`${e}.${n.extension}`),o=i.replace(/\\/g,"/").split("/");if(o.pop(),o.length){let s=o.join("/");this.plugin.app.vault.getAbstractFileByPath(s)||await this.plugin.app.vault.createFolder(s)}return await this.plugin.app.fileManager.renameFile(n,i),""}}generate_path(){return(e=!1)=>{let t="";if(J.Platform.isMobile){let n=this.plugin.app.vault.adapter.fs.uri,i=this.plugin.app.vault.adapter.basePath;t=`${n}/${i}`}else if(this.plugin.app.vault.adapter instanceof J.FileSystemAdapter)t=this.plugin.app.vault.adapter.getBasePath();else throw new b("app.vault is not a FileSystemAdapter instance");return e?this.config.target_file.path:`${t}/${this.config.target_file.path}`}}generate_rename(){return async e=>{if(e.match(/[\\/:]+/g))throw new b("File name cannot contain any of these characters: \\ / :");let t=(0,J.normalizePath)(`${this.config.target_file.parent.path}/${e}.${this.config.target_file.extension}`);return await this.plugin.app.fileManager.renameFile(this.config.target_file,t),""}}generate_selection(){return()=>{let e=this.plugin.app.workspace.activeEditor;if(!e||!e.editor)throw new b("Active editor is null, can't read selection.");return e.editor.getSelection()}}generate_tags(){let e=this.plugin.app.metadataCache.getFileCache(this.config.target_file);return e?(0,J.getAllTags)(e):null}generate_title(){return this.config.target_file.basename}};var oi=U(require("obsidian"));var Jn=class extends ne{constructor(){super(...arguments);this.name="web"}async create_static_templates(){this.static_functions.set("daily_quote",this.generate_daily_quote()),this.static_functions.set("request",this.generate_request()),this.static_functions.set("random_picture",this.generate_random_picture())}async create_dynamic_templates(){}async teardown(){}async getRequest(e){try{let t=await(0,oi.requestUrl)(e);if(t.status<200&&t.status>=300)throw new b("Error performing GET request");return t}catch{throw new b("Error performing GET request")}}generate_daily_quote(){return async()=>{try{let t=(await this.getRequest("https://raw.githubusercontent.com/Zachatoo/quotes-database/refs/heads/main/quotes.json")).json,n=t[Math.floor(Math.random()*t.length)],{quote:i,author:o}=n;return`> [!quote] ${i} +> \u2014 ${o}`}catch{return new b("Error generating daily quote"),"Error generating daily quote"}}}generate_random_picture(){return async(e,t,n=!1)=>{try{let i=await this.getRequest(`https://templater-unsplash-2.fly.dev/${t?"?q="+t:""}`).then(s=>s.json),o=i.full;if(e&&!n)if(e.includes("x")){let[s,u]=e.split("x");o=o.concat(`&w=${s}&h=${u}`)}else o=o.concat(`&w=${e}`);return n?`![photo by ${i.photog}(${i.photogUrl}) on Unsplash|${e}](${o})`:`![photo by ${i.photog}(${i.photogUrl}) on Unsplash](${o})`}catch{return new b("Error generating random picture"),"Error generating random picture"}}}generate_request(){return async(e,t)=>{try{let i=await(await this.getRequest(e)).json;return t&&i?t.split(".").reduce((o,s)=>{if(o&&o.hasOwnProperty(s))return o[s];throw new Error(`Path ${t} not found in the JSON response`)},i):i}catch(n){throw console.error(n),new b("Error fetching and extracting value")}}}};var Wn=class extends ne{constructor(){super(...arguments);this.name="hooks";this.event_refs=[]}async create_static_templates(){this.static_functions.set("on_all_templates_executed",this.generate_on_all_templates_executed())}async create_dynamic_templates(){}async teardown(){this.event_refs.forEach(e=>{e.e.offref(e)}),this.event_refs=[]}generate_on_all_templates_executed(){return e=>{let t=this.plugin.app.workspace.on("templater:all-templates-executed",async()=>{await qe(1),e()});t&&this.event_refs.push(t)}}};var Qn=class extends ne{constructor(){super(...arguments);this.name="frontmatter"}async create_static_templates(){}async create_dynamic_templates(){let e=this.plugin.app.metadataCache.getFileCache(this.config.target_file);this.dynamic_functions=new Map(Object.entries(e?.frontmatter||{}))}async teardown(){}};var we=U(require("obsidian"));var Xn=class extends we.Modal{constructor(e,t,n,i){super(e);this.prompt_text=t;this.default_value=n;this.multi_line=i;this.submitted=!1}onOpen(){this.titleEl.setText(this.prompt_text),this.createForm()}onClose(){this.contentEl.empty(),this.submitted||this.reject(new b("Cancelled prompt"))}createForm(){let e=this.contentEl.createDiv();e.addClass("templater-prompt-div");let t;this.multi_line?t=new we.TextAreaComponent(e):t=new we.TextComponent(e);let n=this.contentEl.createDiv();n.addClass("templater-button-div");let i=new we.ButtonComponent(n);i.buttonEl.addClass("mod-cta"),i.setButtonText("Submit").onClick(o=>{this.resolveAndClose(o)}),this.value=this.default_value??"",t.inputEl.addClass("templater-prompt-input"),t.setPlaceholder("Type text here"),t.setValue(this.value),t.onChange(o=>this.value=o),t.inputEl.focus(),t.inputEl.addEventListener("keydown",o=>this.enterCallback(o))}enterCallback(e){e.isComposing||e.keyCode===229||(this.multi_line?we.Platform.isDesktop&&e.key==="Enter"&&!e.shiftKey&&this.resolveAndClose(e):e.key==="Enter"&&this.resolveAndClose(e))}resolveAndClose(e){this.submitted=!0,e.preventDefault(),this.resolve(this.value),this.close()}async openAndGetValue(e,t){this.resolve=e,this.reject=t,this.open()}};var ai=U(require("obsidian")),Zn=class extends ai.FuzzySuggestModal{constructor(e,t,n,i,o,s){super(e);this.text_items=t;this.items=n;this.default_value=s;this.submitted=!1;this.setPlaceholder(i),o&&(this.limit=o)}getItems(){return this.items}onOpen(){this.default_value!==void 0&&(this.inputEl.value=this.getItemText(this.default_value),this.inputEl.dispatchEvent(new InputEvent("input")))}onClose(){this.submitted||this.reject(new b("Cancelled prompt"))}selectSuggestion(e,t){this.submitted=!0,this.close(),this.onChooseSuggestion(e,t)}getItemText(e){return this.text_items instanceof Function?this.text_items(e):this.text_items[this.items.indexOf(e)]||"Undefined Text Item"}onChooseItem(e){this.resolve(e)}async openAndGetValue(e,t){this.resolve=e,this.reject=t,this.open()}};var le=U(require("obsidian")),er=class extends le.Modal{constructor(e,t,n,i,o,s){super(e);this.text_items=t;this.items=n;this.submitted=!1;this.selectedItems=[];this.setTitle(i),this.listEl=this.contentEl.createDiv("templater-multisuggester-list");let u=this.contentEl.createDiv("templater-multisuggester-div"),l=new le.TextComponent(u);l.inputEl.addClass("templater-multisuggester-input"),this.suggester=new si(e,l.inputEl,this.getItemText.bind(this),n,o).onSelect(this.onChooseItem.bind(this));let d=this.contentEl.createDiv("modal-button-container");new le.ButtonComponent(d).setButtonText("Save").setCta().onClick(()=>this.save()),new le.ButtonComponent(d).setButtonText("Cancel").onClick(()=>this.close()),s&&(this.selectedItems=s)}onOpen(){this.processSelectedItems()}display(){this.listEl.empty(),this.selectedItems.forEach(e=>{let t=this.listEl.createDiv("mobile-option-setting-item");t.createSpan("mobile-option-setting-item-name").setText(this.getItemText(e)),t.createDiv("clickable-icon mobile-option-setting-item-option-icon",n=>{(0,le.setIcon)(n,"lucide-x"),n.addEventListener("click",()=>{this.onRemoveItem(e)})})})}getItemText(e){return this.text_items instanceof Function?this.text_items(e):this.text_items[this.items.indexOf(e)]||"Undefined Text Item"}onChooseItem(e){this.selectedItems.push(e),this.processSelectedItems()}processSelectedItems(){let e=this.items.filter(t=>!this.selectedItems.some(n=>n===t));this.suggester.setItems(e),this.display()}onRemoveItem(e){this.selectedItems=this.selectedItems.filter(n=>n!==e);let t=this.items.filter(n=>!this.selectedItems.some(i=>i===n));this.suggester.setItems(t),this.display()}save(){this.submitted=!0,this.close(),this.resolve(this.selectedItems)}onClose(){this.submitted||this.reject(new b("Cancelled prompt"))}async openAndGetValue(e,t){this.resolve=e,this.reject=t,this.open()}},si=class extends le.AbstractInputSuggest{constructor(e,t,n,i,o){super(e,t);this.getItemText=n;this.items=i;o&&(this.limit=o)}getSuggestions(e){let t=(0,le.prepareFuzzySearch)(e);return this.items.reduce((n,i)=>{let o=this.getItemText(i);return t(o)&&n.push(i),n},[])}renderSuggestion(e,t){t.createDiv("suggestion-content").setText(this.getItemText(e))}setItems(e){this.items=e}selectSuggestion(e,t){this.setValue(""),this.close(),super.selectSuggestion(e,t)}};var tr=class extends ne{constructor(){super(...arguments);this.name="system"}async create_static_templates(){this.static_functions.set("clipboard",this.generate_clipboard()),this.static_functions.set("prompt",this.generate_prompt()),this.static_functions.set("suggester",this.generate_suggester()),this.static_functions.set("multi_suggester",this.generate_multi_suggester())}async create_dynamic_templates(){}async teardown(){}generate_clipboard(){return async()=>await navigator.clipboard.readText()}generate_prompt(){return async(e,t,n=!1,i=!1)=>{let o=new Xn(this.plugin.app,e,t,i),s=new Promise((u,l)=>o.openAndGetValue(u,l));try{return await s}catch(u){if(n)throw u;return null}}}generate_suggester(){return async(e,t,n=!1,i="",o,s)=>{let u=new Zn(this.plugin.app,e,t,i,o,s),l=new Promise((d,A)=>u.openAndGetValue(d,A));try{return await l}catch(d){if(n)throw d;return null}}}generate_multi_suggester(){return async(e,t,n=!1,i="",o,s)=>{let u=new er(this.plugin.app,e,t,i,o,s),l=new Promise((d,A)=>u.openAndGetValue(d,A));try{return await l}catch(d){if(n)throw d;return[]}}}};var nr=class extends ne{constructor(){super(...arguments);this.name="config"}async create_static_templates(){}async create_dynamic_templates(){}async teardown(){}async generate_object(e){return e}};var rr=class{constructor(e){this.plugin=e;this.modules_array=[];this.modules_array.push(new Vn(this.plugin)),this.modules_array.push(new zn(this.plugin)),this.modules_array.push(new Jn(this.plugin)),this.modules_array.push(new Qn(this.plugin)),this.modules_array.push(new Wn(this.plugin)),this.modules_array.push(new tr(this.plugin)),this.modules_array.push(new nr(this.plugin))}async init(){for(let e of this.modules_array)await e.init()}async teardown(){for(let e of this.modules_array)await e.teardown()}async generate_object(e){let t={};for(let n of this.modules_array)t[n.getName()]=await n.generate_object(e);return t}};var Ct=U(require("obsidian"));var ir=class{constructor(e){this.plugin=e;if(Ct.Platform.isMobile||!(this.plugin.app.vault.adapter instanceof Ct.FileSystemAdapter))this.cwd="";else{this.cwd=this.plugin.app.vault.adapter.getBasePath();let{promisify:t}=require("util"),{exec:n}=require("child_process");this.exec_promise=t(n)}}async generate_system_functions(e){let t=new Map,n=await this.plugin.templater.functions_generator.generate_object(e,ve.INTERNAL);for(let i of this.plugin.settings.templates_pairs){let o=i[0],s=i[1];!o||!s||(Ct.Platform.isMobile?t.set(o,()=>new Promise(u=>u(ni))):(s=await this.plugin.templater.parser.parse_commands(s,n),t.set(o,async u=>{let l={...process.env,...u},d={timeout:this.plugin.settings.command_timeout*1e3,cwd:this.cwd,env:l,...this.plugin.settings.shell_path&&{shell:this.plugin.settings.shell_path}};try{let{stdout:A}=await this.exec_promise(s,d);return A.trimRight()}catch(A){throw new b(`Error with User Template ${o}`,A)}})))}return t}async generate_object(e){let t=await this.generate_system_functions(e);return Object.fromEntries(t)}};var or=class{constructor(e){this.plugin=e}async generate_user_script_functions(){let e=new Map,t=ce(()=>je(this.plugin.app,this.plugin.settings.user_scripts_folder),`Couldn't find user script folder "${this.plugin.settings.user_scripts_folder}"`);if(!t)return new Map;for(let n of t)n.extension.toLowerCase()==="js"&&await this.load_user_script_function(n,e);return e}async load_user_script_function(e,t){let n=l=>window.require&&window.require(l),i={},o={exports:i},s=await this.plugin.app.vault.read(e);try{window.eval("(function anonymous(require, module, exports){"+s+` +})`)(n,o,i)}catch(l){throw new b(`Failed to load user script at "${e.path}".`,l.message)}let u=i.default??o.exports;if(!u)throw new b(`Failed to load user script at "${e.path}". No exports detected.`);if(typeof u=="function")t.set(e.basename,u);else if(typeof u=="object"&&u!==null){if(!Object.values(u).every(d=>typeof d=="function"))throw new b(`Exported object in "${e.path}" must contain only functions.`);t.set(e.basename,u)}else throw new b(`Invalid export in "${e.path}". Must be a function or object of functions.`)}async generate_object(){let e=await this.generate_user_script_functions();return Object.fromEntries(e)}};var ar=class{constructor(e){this.plugin=e;this.user_system_functions=new ir(e),this.user_script_functions=new or(e)}async generate_object(e){let t={},n={};return this.plugin.settings.enable_system_commands&&(t=await this.user_system_functions.generate_object(e)),this.plugin.settings.user_scripts_folder&&(n=await this.user_script_functions.generate_object()),{...t,...n}}};var No=U(require("obsidian")),ve;(function(t){t[t.INTERNAL=0]="INTERNAL",t[t.USER_INTERNAL=1]="USER_INTERNAL"})(ve||(ve={}));var sr=class{constructor(e){this.plugin=e;this.internal_functions=new rr(this.plugin),this.user_functions=new ar(this.plugin)}async init(){await this.internal_functions.init()}async teardown(){await this.internal_functions.teardown()}additional_functions(){return{app:this.plugin.app,obsidian:No}}async generate_object(e,t=1){let n={},i=this.additional_functions(),o=await this.internal_functions.generate_object(e),s={};switch(Object.assign(n,i),t){case 0:Object.assign(n,o);break;case 1:s=await this.user_functions.generate_object(e),Object.assign(n,{...o,user:s});break}return n}};var Ko={},T,he=new Array(32).fill(void 0);he.push(void 0,null,!0,!1);function ue(r){return he[r]}var Dt=he.length;function Mo(r){r<36||(he[r]=Dt,Dt=r)}function cr(r){let e=ue(r);return Mo(r),e}var ci=new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0});ci.decode();var fn=new Uint8Array;function dn(){return fn.byteLength===0&&(fn=new Uint8Array(T.memory.buffer)),fn}function He(r,e){return ci.decode(dn().subarray(r,r+e))}function $e(r){Dt===he.length&&he.push(he.length+1);let e=Dt;return Dt=he[e],he[e]=r,e}var Ae=0,gn=new TextEncoder("utf-8"),Io=typeof gn.encodeInto=="function"?function(r,e){return gn.encodeInto(r,e)}:function(r,e){let t=gn.encode(r);return e.set(t),{read:r.length,written:t.length}};function Me(r,e,t){if(t===void 0){let u=gn.encode(r),l=e(u.length);return dn().subarray(l,l+u.length).set(u),Ae=u.length,l}let n=r.length,i=e(n),o=dn(),s=0;for(;s127)break;o[i+s]=u}if(s!==n){s!==0&&(r=r.slice(s)),i=t(i,n,n=s+r.length*3);let u=dn().subarray(i+s,i+n);s+=Io(r,u).written}return Ae=s,i}function Fo(r){return r==null}var mn=new Int32Array;function pe(){return mn.byteLength===0&&(mn=new Int32Array(T.memory.buffer)),mn}function lr(r){let e=typeof r;if(e=="number"||e=="boolean"||r==null)return`${r}`;if(e=="string")return`"${r}"`;if(e=="symbol"){let i=r.description;return i==null?"Symbol":`Symbol(${i})`}if(e=="function"){let i=r.name;return typeof i=="string"&&i.length>0?`Function(${i})`:"Function"}if(Array.isArray(r)){let i=r.length,o="[";i>0&&(o+=lr(r[0]));for(let s=1;s1)n=t[1];else return toString.call(r);if(n=="Object")try{return"Object("+JSON.stringify(r)+")"}catch{return"Object"}return r instanceof Error?`${r.name}: ${r.message} +${r.stack}`:n}function Bo(r,e){if(!(r instanceof e))throw new Error(`expected instance of ${e.name}`);return r.ptr}var hn=32;function Oo(r){if(hn==1)throw new Error("out of js stack");return he[--hn]=r,hn}function ur(r,e){try{return r.apply(this,e)}catch(t){T.__wbindgen_exn_store($e(t))}}var Je=class{static __wrap(e){let t=Object.create(Je.prototype);return t.ptr=e,t}__destroy_into_raw(){let e=this.ptr;return this.ptr=0,e}free(){let e=this.__destroy_into_raw();T.__wbg_parserconfig_free(e)}get interpolate(){let e=T.__wbg_get_parserconfig_interpolate(this.ptr);return String.fromCodePoint(e)}set interpolate(e){T.__wbg_set_parserconfig_interpolate(this.ptr,e.codePointAt(0))}get execution(){let e=T.__wbg_get_parserconfig_execution(this.ptr);return String.fromCodePoint(e)}set execution(e){T.__wbg_set_parserconfig_execution(this.ptr,e.codePointAt(0))}get single_whitespace(){let e=T.__wbg_get_parserconfig_single_whitespace(this.ptr);return String.fromCodePoint(e)}set single_whitespace(e){T.__wbg_set_parserconfig_single_whitespace(this.ptr,e.codePointAt(0))}get multiple_whitespace(){let e=T.__wbg_get_parserconfig_multiple_whitespace(this.ptr);return String.fromCodePoint(e)}set multiple_whitespace(e){T.__wbg_set_parserconfig_multiple_whitespace(this.ptr,e.codePointAt(0))}constructor(e,t,n,i,o,s,u){let l=Me(e,T.__wbindgen_malloc,T.__wbindgen_realloc),d=Ae,A=Me(t,T.__wbindgen_malloc,T.__wbindgen_realloc),w=Ae,E=Me(u,T.__wbindgen_malloc,T.__wbindgen_realloc),M=Ae,F=T.parserconfig_new(l,d,A,w,n.codePointAt(0),i.codePointAt(0),o.codePointAt(0),s.codePointAt(0),E,M);return Je.__wrap(F)}get opening_tag(){try{let n=T.__wbindgen_add_to_stack_pointer(-16);T.parserconfig_opening_tag(n,this.ptr);var e=pe()[n/4+0],t=pe()[n/4+1];return He(e,t)}finally{T.__wbindgen_add_to_stack_pointer(16),T.__wbindgen_free(e,t)}}set opening_tag(e){let t=Me(e,T.__wbindgen_malloc,T.__wbindgen_realloc),n=Ae;T.parserconfig_set_opening_tag(this.ptr,t,n)}get closing_tag(){try{let n=T.__wbindgen_add_to_stack_pointer(-16);T.parserconfig_closing_tag(n,this.ptr);var e=pe()[n/4+0],t=pe()[n/4+1];return He(e,t)}finally{T.__wbindgen_add_to_stack_pointer(16),T.__wbindgen_free(e,t)}}set closing_tag(e){let t=Me(e,T.__wbindgen_malloc,T.__wbindgen_realloc),n=Ae;T.parserconfig_set_closing_tag(this.ptr,t,n)}get global_var(){try{let n=T.__wbindgen_add_to_stack_pointer(-16);T.parserconfig_global_var(n,this.ptr);var e=pe()[n/4+0],t=pe()[n/4+1];return He(e,t)}finally{T.__wbindgen_add_to_stack_pointer(16),T.__wbindgen_free(e,t)}}set global_var(e){let t=Me(e,T.__wbindgen_malloc,T.__wbindgen_realloc),n=Ae;T.parserconfig_set_global_var(this.ptr,t,n)}},ut=class{static __wrap(e){let t=Object.create(ut.prototype);return t.ptr=e,t}__destroy_into_raw(){let e=this.ptr;return this.ptr=0,e}free(){let e=this.__destroy_into_raw();T.__wbg_renderer_free(e)}constructor(e){Bo(e,Je);var t=e.ptr;e.ptr=0;let n=T.renderer_new(t);return ut.__wrap(n)}render_content(e,t){try{let s=T.__wbindgen_add_to_stack_pointer(-16),u=Me(e,T.__wbindgen_malloc,T.__wbindgen_realloc),l=Ae;T.renderer_render_content(s,this.ptr,u,l,Oo(t));var n=pe()[s/4+0],i=pe()[s/4+1],o=pe()[s/4+2];if(o)throw cr(i);return cr(n)}finally{T.__wbindgen_add_to_stack_pointer(16),he[hn++]=void 0}}};async function qo(r,e){if(typeof Response=="function"&&r instanceof Response){if(typeof WebAssembly.instantiateStreaming=="function")try{return await WebAssembly.instantiateStreaming(r,e)}catch(n){if(r.headers.get("Content-Type")!="application/wasm")console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n",n);else throw n}let t=await r.arrayBuffer();return await WebAssembly.instantiate(t,e)}else{let t=await WebAssembly.instantiate(r,e);return t instanceof WebAssembly.Instance?{instance:t,module:r}:t}}function Lo(){let r={};return r.wbg={},r.wbg.__wbindgen_object_drop_ref=function(e){cr(e)},r.wbg.__wbindgen_string_new=function(e,t){let n=He(e,t);return $e(n)},r.wbg.__wbindgen_string_get=function(e,t){let n=ue(t),i=typeof n=="string"?n:void 0;var o=Fo(i)?0:Me(i,T.__wbindgen_malloc,T.__wbindgen_realloc),s=Ae;pe()[e/4+1]=s,pe()[e/4+0]=o},r.wbg.__wbg_call_97ae9d8645dc388b=function(){return ur(function(e,t){let n=ue(e).call(ue(t));return $e(n)},arguments)},r.wbg.__wbg_new_8d2af00bc1e329ee=function(e,t){let n=new Error(He(e,t));return $e(n)},r.wbg.__wbg_message_fe2af63ccc8985bc=function(e){let t=ue(e).message;return $e(t)},r.wbg.__wbg_newwithargs_8fe23e3842840c8e=function(e,t,n,i){let o=new Function(He(e,t),He(n,i));return $e(o)},r.wbg.__wbg_call_168da88779e35f61=function(){return ur(function(e,t,n){let i=ue(e).call(ue(t),ue(n));return $e(i)},arguments)},r.wbg.__wbg_call_3999bee59e9f7719=function(){return ur(function(e,t,n,i){let o=ue(e).call(ue(t),ue(n),ue(i));return $e(o)},arguments)},r.wbg.__wbindgen_debug_string=function(e,t){let n=lr(ue(t)),i=Me(n,T.__wbindgen_malloc,T.__wbindgen_realloc),o=Ae;pe()[e/4+1]=o,pe()[e/4+0]=i},r.wbg.__wbindgen_throw=function(e,t){throw new Error(He(e,t))},r}function Ho(r,e){}function $o(r,e){return T=r.exports,li.__wbindgen_wasm_module=e,mn=new Int32Array,fn=new Uint8Array,T}async function li(r){typeof r=="undefined"&&(r=new URL("rusty_engine_bg.wasm",Ko.url));let e=Lo();(typeof r=="string"||typeof Request=="function"&&r instanceof Request||typeof URL=="function"&&r instanceof URL)&&(r=fetch(r)),Ho(e);let{instance:t,module:n}=await qo(await r,e);return $o(t,n)}var ui=li;var pi=qr("AGFzbQEAAAABvwEaYAJ/fwBgAn9/AX9gAX8Bf2ADf39/AX9gA39/fwBgAX8AYAV/f39/fwBgBH9/f38AYAR/f39/AX9gAABgBX9/f39/AX9gAX8BfmAAAX9gBn9/f39/fwBgB39/f39/f38AYAV/f35/fwBgBX9/fX9/AGAFf398f38AYAR/fn9/AGAFf35/f38AYAR/fX9/AGAEf3x/fwBgBn9/f39/fwF/YAd/f39/f39/AX9gCn9/f39/f39/f38Bf2ACfn8BfwLkAgsDd2JnGl9fd2JpbmRnZW5fb2JqZWN0X2Ryb3BfcmVmAAUDd2JnFV9fd2JpbmRnZW5fc3RyaW5nX25ldwABA3diZxVfX3diaW5kZ2VuX3N0cmluZ19nZXQAAAN3YmcbX193YmdfY2FsbF85N2FlOWQ4NjQ1ZGMzODhiAAEDd2JnGl9fd2JnX25ld184ZDJhZjAwYmMxZTMyOWVlAAEDd2JnHl9fd2JnX21lc3NhZ2VfZmUyYWY2M2NjYzg5ODViYwACA3diZyJfX3diZ19uZXd3aXRoYXJnc184ZmUyM2UzODQyODQwYzhlAAgDd2JnG19fd2JnX2NhbGxfMTY4ZGE4ODc3OWUzNWY2MQADA3diZxtfX3diZ19jYWxsXzM5OTliZWU1OWU5Zjc3MTkACAN3YmcXX193YmluZGdlbl9kZWJ1Z19zdHJpbmcAAAN3YmcQX193YmluZGdlbl90aHJvdwAAA7kBtwECBwAGAgYEBAcBBQMKCAAEBgYAAwcCAAEADgETAQQXAQICAQAAAwcZAQAFAQwABgACAgAAAgAEBAAGAQAAAAAEBw0CAQUEBQYCDBgAAQAAAAQBAQEAAQABBAQEBgMDBwMJAwQIAAAABQkAAgEAAAAABwAAAgICAgAFBQMEFgoGEQ8QAAUHAwIBAgABBQEBCAACAQEBBQEAAgECAgACAQEBAgAJCQICAgIAAAAAAwMDAQECAgsLCwUEBQFwATs7BQMBABEGCQF/AUGAgMAACwfcBRkGbWVtb3J5AgAXX193YmdfcGFyc2VyY29uZmlnX2ZyZWUAUSJfX3diZ19nZXRfcGFyc2VyY29uZmlnX2ludGVycG9sYXRlAH4iX193Ymdfc2V0X3BhcnNlcmNvbmZpZ19pbnRlcnBvbGF0ZQB3IF9fd2JnX2dldF9wYXJzZXJjb25maWdfZXhlY3V0aW9uAH8gX193Ymdfc2V0X3BhcnNlcmNvbmZpZ19leGVjdXRpb24AeChfX3diZ19nZXRfcGFyc2VyY29uZmlnX3NpbmdsZV93aGl0ZXNwYWNlAIABKF9fd2JnX3NldF9wYXJzZXJjb25maWdfc2luZ2xlX3doaXRlc3BhY2UAeSpfX3diZ19nZXRfcGFyc2VyY29uZmlnX211bHRpcGxlX3doaXRlc3BhY2UAgQEqX193Ymdfc2V0X3BhcnNlcmNvbmZpZ19tdWx0aXBsZV93aGl0ZXNwYWNlAHoQcGFyc2VyY29uZmlnX25ldwBVGHBhcnNlcmNvbmZpZ19vcGVuaW5nX3RhZwBGHHBhcnNlcmNvbmZpZ19zZXRfb3BlbmluZ190YWcAYxhwYXJzZXJjb25maWdfY2xvc2luZ190YWcARxxwYXJzZXJjb25maWdfc2V0X2Nsb3NpbmdfdGFnAGQXcGFyc2VyY29uZmlnX2dsb2JhbF92YXIASBtwYXJzZXJjb25maWdfc2V0X2dsb2JhbF92YXIAZRNfX3diZ19yZW5kZXJlcl9mcmVlAE8McmVuZGVyZXJfbmV3ACAXcmVuZGVyZXJfcmVuZGVyX2NvbnRlbnQAORFfX3diaW5kZ2VuX21hbGxvYwB1El9fd2JpbmRnZW5fcmVhbGxvYwCFAR9fX3diaW5kZ2VuX2FkZF90b19zdGFja19wb2ludGVyAKsBD19fd2JpbmRnZW5fZnJlZQCaARRfX3diaW5kZ2VuX2V4bl9zdG9yZQCfAQllAQBBAQs6mAGdAaoBPzzBAZUBlgFOkgGOAWotYsEBwQFnKl3BAXaIAUyJAYgBhwGQAY8BiQGJAYwBigGLAZgBX8EBaKABXo4BvwG+AYQBOElwoQHBAWioAWCjAVclqQGcAcEBwAEK2dYCtwG8IAIPfwF+IwBBEGsiCyQAAkACQCAAQfUBTwRAQYCAfEEIQQgQlwFBFEEIEJcBakEQQQgQlwFqa0F3cUF9aiICQQBBEEEIEJcBQQJ0ayIBIAEgAksbIABNDQIgAEEEakEIEJcBIQRBrK7AACgCAEUNAUEAIARrIQMCQAJAAn9BACAEQYACSQ0AGkEfIARB////B0sNABogBEEGIARBCHZnIgBrdkEBcSAAQQF0a0E+agsiBkECdEG4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EBBBIAQoAgAiBSAAKAIAaiIGQdSDwAApAAA3AAAgBCAFQRBqNgIAIAZBCGpB3IPAACkAADcAACADQQE2AiwgAyABKAIIQShqIgU2AiggAyAANgIYIANB3ABqQQE2AgAgA0ICNwJMIANB8IPAADYCSCADIANBKGo2AlgCQAJAAkACQAJAAkAgA0EYakGYisAAIANByABqEB5FBEAgAigCACEIAkAgAigCCCIBRQ0AIAFBBHQhCkGQhMAAIQZBACEBQQAhBANAAn8gASAIaiIHQQRqIgkgBygCAEUNABoCQCAERQ0AIANBEGogBCgCACAEKAIEQQAgBiAGLQAAQQJGG0EBEBAgA0EIaiADKAIQIAMoAhRBACAHQQ1qIgQgBC0AAEECRhtBABAQIANBGGogAygCCCADKAIMEBIgA0EBNgI0IANBATYCLCADIAU2AiggAyADQRhqNgIwIAMgADYCRCADQQI2AlwgA0IDNwJMIANBmITAADYCSCADIANBKGo2AlggA0HEAGpBmIrAACADQcgAahAeDQUgAygCHEUNACADKAIYEBULIAdBDmohBgJAIAdBDGotAABFBEAgA0ECNgIsIAMgCTYCKCADIAA2AhggA0EBNgJcIANCAjcCTCADQfSEwAA2AkggAyADQShqNgJYIANBGGpBmIrAACADQcgAahAeDQcgA0ECNgI0IANBoIXAADYCMCADQQE2AiwgAyAFNgIoIAMgADYCGCADQQI2AlwgA0IDNwJMIANBmITAADYCSCADIANBKGo2AlggA0EYakGYisAAIANByABqEB5FDQFBq4HAAEErIANByABqQdiBwABBqIXAABBSAAsgA0ECNgIsIAMgCTYCKCADIAA2AhggA0EBNgJcIANCAjcCTCADQcSEwAA2AkggAyADQShqNgJYIANBGGpBmIrAACADQcgAahAeDQcLQQALIQQgCiABQRBqIgFHDQALIARFDQAgAyAEKAIAIAQoAgRBACAGIAYtAABBAkYbQQEQECADQRhqIAMoAgAgAygCBBASIANBNGpBATYCACADQQE2AiwgAyAFNgIoIAMgA0EYajYCMCADIAA2AkQgA0HcAGpBAjYCACADQgM3AkwgA0GYhMAANgJIIAMgA0EoajYCWCADQcQAakGYisAAIANByABqEB4NBSADKAIcRQ0AIAMoAhgQFQsgAEEEaigCACAAQQhqIgQoAgAiAWtBJ00EQCAAIAFBKBBBIAQoAgAhAQsgBCABQShqNgIAIAAoAgAgAWoiAUHIhcAAKQAANwAAIAFBCGpB0IXAACkAADcAACABQRBqQdiFwAApAAA3AAAgAUEYakHghcAAKQAANwAAIAFBIGpB6IXAACkAADcAACADQTxqQQI2AgAgA0E0akEBNgIAIANBoIXAADYCOCADIAU2AjAgA0EBNgIsIAMgBTYCKCADIAA2AhggA0HcAGoiAUEDNgIAIANCBDcCTCADQZiGwAA2AkggAyADQShqNgJYIANBGGpBmIrAACADQcgAahAeDQUgA0EBNgIsIAMgBTYCKCADIAA2AhggAUEBNgIAIANCAjcCTCADQdCGwAA2AkggAyADQShqNgJYIANBGGpBmIrAACADQcgAahAeDQYgAkEEaigCAARAIAgQFQsgA0HgAGokAA8LQauBwABBKyADQcgAakHYgcAAQYCEwAAQUgALQauBwABBKyADQcgAakHYgcAAQbCEwAAQUgALQauBwABBKyADQcgAakHYgcAAQYSFwAAQUgALQauBwABBKyADQcgAakHYgcAAQdSEwAAQUgALQauBwABBKyADQcgAakHYgcAAQbiFwAAQUgALQauBwABBKyADQcgAakHYgcAAQbiGwAAQUgALQauBwABBKyADQcgAakHYgcAAQeCGwAAQUgAL7QkCCH8GfiMAQdAAayIDJAACQAJAAkAQVCIEBEAgA0EgakIANwMAIANBHGpBkIrAADYCACAEIAQpAwAiC0IBfDcDACADQQA2AhggAyALNwMIIAMgBEEIaikDADcDECADQqeAgIDwBDcDSCADQo2AgICgDjcDQCADQoqAgIDgDTcDOCADQtyAgIDACzcDMCADQQhqIANBMGoQGSADQQA2AjggA0IENwMwIAJFBEAgAEEANgIIIABCATcCAEEEIQRBBCEBDAQLIAEgAmohCEEAIQIDQAJ/IAEsAAAiBEF/SgRAIARB/wFxIQQgAUEBagwBCyABLQABQT9xIQUgBEEfcSEGIARBX00EQCAGQQZ0IAVyIQQgAUECagwBCyABLQACQT9xIAVBBnRyIQUgBEFwSQRAIAUgBkEMdHIhBCABQQNqDAELIAZBEnRBgIDwAHEgAS0AA0E/cSAFQQZ0cnIiBEGAgMQA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ASACIANqQQFqIgM2AhAgAyAHT0EAIAMgDE0bRQRAIAYgA08NAQwDCwsgB0EEELUBAAsgASAGNgIQCyABLQAkIAEoAgAiAiABKAIEIgRHckUNASABQQE6ACUgBCACawshAyAIRQ0AIAIgCGohCyADRQRAQQAhAgwBCyADQX9qIgEgAyABIAtqLQAAQQ1GGyECCyAAIAI2AgQgACALNgIAIAVBEGokAAv+BAEKfyMAQTBrIgMkACADQSRqIAE2AgAgA0EDOgAoIANCgICAgIAENwMIIAMgADYCICADQQA2AhggA0EANgIQAkACQAJAIAIoAggiCkUEQCACQRRqKAIAIgRFDQEgAigCACEBIAIoAhAhACAEQX9qQf////8BcUEBaiIHIQQDQCABQQRqKAIAIgUEQCADKAIgIAEoAgAgBSADKAIkKAIMEQMADQQLIAAoAgAgA0EIaiAAQQRqKAIAEQEADQMgAEEIaiEAIAFBCGohASAEQX9qIgQNAAsMAQsgAkEMaigCACIARQ0AIABBBXQhCyAAQX9qQf///z9xQQFqIQcgAigCACEBA0AgAUEEaigCACIABEAgAygCICABKAIAIAAgAygCJCgCDBEDAA0DCyADIAQgCmoiBUEcai0AADoAKCADIAVBBGopAgBCIIk3AwggBUEYaigCACEGIAIoAhAhCEEAIQlBACEAAkACQAJAIAVBFGooAgBBAWsOAgACAQsgBkEDdCAIaiIMKAIEQTdHDQEgDCgCACgCACEGC0EBIQALIAMgBjYCFCADIAA2AhAgBUEQaigCACEAAkACQAJAIAVBDGooAgBBAWsOAgACAQsgAEEDdCAIaiIGKAIEQTdHDQEgBigCACgCACEAC0EBIQkLIAMgADYCHCADIAk2AhggCCAFKAIAQQN0aiIAKAIAIANBCGogACgCBBEBAA0CIAFBCGohASALIARBIGoiBEcNAAsLQQAhACAHIAIoAgRJIgFFDQEgAygCICACKAIAIAdBA3RqQQAgARsiASgCACABKAIEIAMoAiQoAgwRAwBFDQELQQEhAAsgA0EwaiQAIAALwgQBCH8jAEHQAGsiBCQAIARBEGogASACIAMoAgAgA0EIaigCABAOAkACQAJAAkACQAJAIAQoAhBFBEAgBEEeai0AAA0EIARBxABqKAIAIQYgBCgCQCEHIARBHGot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AkAgAUGAAU8EQCACQQA2AgwgAUGAEEkNASABQYCABE8NAiACIAFBP3FBgAFyOgAOIAIgAUEMdkHgAXI6AAwgAiABQQZ2QT9xQYABcjoADUEDDAMLIAAoAggiAyAAQQRqKAIARgR/IAAgAxBAIAAoAggFIAMLIAAoAgBqIAE6AAAgACAAKAIIQQFqNgIIDAMLIAIgAUE/cUGAAXI6AA0gAiABQQZ2QcABcjoADEECDAELIAIgAUE/cUGAAXI6AA8gAiABQQZ2QT9xQYABcjoADiACIAFBDHZBP3FBgAFyOgANIAIgAUESdkEHcUHwAXI6AAxBBAshASAAQQRqKAIAIABBCGoiBCgCACIDayABSQRAIAAgAyABEEEgBCgCACEDCyAAKAIAIANqIAJBDGogARC5ARogBCABIANqNgIACyACQRBqJABBAAvVAgEDfyMAQRBrIgIkAAJAAn8CQCABQYABTwRAIAJBADYCDCABQYAQTw0BIAIgAUE/cUGAAXI6AA0gAiABQQZ2QcABcjoADEECDAILIAAoAggiAyAAQQRqKAIARgRAIAAgAxBDIAAoAgghAwsgACADQQFqNgIIIAAoAgAgA2ogAToAAAwCCyABQYCABE8EQCACIAFBP3FBgAFyOgAPIAIgAUEGdkE/cUGAAXI6AA4gAiABQQx2QT9xQYABcjoADSACIAFBEnZBB3FB8AFyOgAMQQQMAQsgAiABQT9xQYABcjoADiACIAFBDHZB4AFyOgAMIAIgAUEGdkE/cUGAAXI6AA1BAwshASAAQQRqKAIAIABBCGoiBCgCACIDayABSQRAIAAgAyABEEIgBCgCACEDCyAAKAIAIANqIAJBDGogARC5ARogBCABIANqNgIACyACQRBqJAAL1wIBA38jAEEQayICJAACQAJ/AkACQCABQYABTwRAIAJBADYCDCABQYAQSQ0BIAFBgIAETw0CIAIgAUE/cUGAAXI6AA4gAiABQQx2QeABcjoADCACIAFBBnZBP3FBgAFyOgANQQMMAwsgACgCCCIDIABBBGooAgBGBEAgACADEEMgACgCCCEDCyAAIANBAWo2AgggACgCACADaiABOgAADAMLIAIgAUE/cUGAAXI6AA0gAiABQQZ2QcABcjoADEECDAELIAIgAUE/cUGAAXI6AA8gAiABQQZ2QT9xQYABcjoADiAC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AiADKAIIIgRNBEAgASECDAELIARFBEBBASECIAEQFQwBCyABIAJBASAEEJkBIgJFDQMLIAAgBDYCBCAAIAI2AgAgA0EQaiQADwsQrQEACxCuAQALIARBARCzAQALrAEBA38jAEEQayIDJAACQAJAIAEEQCABKAIAIgJBf0YNASABIAJBAWo2AgAgAyABQRBqEGEgASABKAIAQX9qNgIAIAMoAgAhAQJAIAMoAgQiAiADKAIIIgRNBEAgASECDAELIARFBEBBASECIAEQFQwBCyABIAJBASAEEJkBIgJFDQMLIAAgBDYCBCAAIAI2AgAgA0EQaiQADwsQrQEACxCuAQALIARBARCzAQALrAEBA38jAEEQayIDJAACQAJAIAEEQCABKAIAIgJBf0YNASABIAJBAWo2AgAgAyABQSxqEGEgASABKAIAQX9qNgIAIAMoAgAhAQJAIAMoAgQiAiADKAIIIgRNBEAgASECDAELIARFBEBBASECIAEQFQwBCyABIAJBASAEEJkBIgJFDQMLIAAgBDYCBCAAIAI2AgAgA0EQaiQADwsQrQEACxCuAQALIARBARCzAQALrAEBA38jAEEwayICJAAgAUEEaiEDIAEoAgRFBEAgASgCACEBIAJBEGoiBEEANgIAIAJCATcDCCACIAJBCGo2AhQgAkEoaiABQRBqKQIANwMAIAJBIGogAUEIaikCADcDACACIAEpAgA3AxggAkEUakGAjsAAIAJBGGoQHhogA0EIaiAEKAIANgIAIAMgAikDCDcCAAsgAEHoj8AANgIEIAAgAzYCACACQTBqJAALkAEBAn8CQAJ/AkACQAJAAn9BASIDIAFBAEgNABogAigCCEUNAiACKAIEIgQNASABDQNBAQwECyEDQQAhAQwECyACKAIAIARBASABEJkBDAILIAENAEEBDAELIAFBARCeAQsiAgRAIAAgAjYCBEEAIQMMAQsgACABNgIEQQEhAQsgACADNgIAIABBCGogATYCAAunAQECfwJAAkACQAJAAkACQAJAAn8gAgRAQQEiBCABQQBIDQEaIAMoAghFDQMgAygCBCIFDQIgAQ0EDAYLIAAgATYCBEEBCyEEQQAhAQwGCyADKAIAIAUgAiABEJkBIgNFDQIMBAsgAUUNAgsgASACEJ4BIgMNAgsgACABNgIEIAIhAQwCCyACIQML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AX8jAEEwayICJAAgAiABNgIEIAIgADYCACACQRxqQQI2AgAgAkEsakEDNgIAIAJCAjcCDCACQfSWwAA2AgggAkEDNgIkIAIgAkEgajYCGCACIAJBBGo2AiggAiACNgIgIAJBCGpBhJfAABB0AAtsAQF/IwBBMGsiAyQAIAMgATYCBCADIAA2AgAgA0EcakECNgIAIANBLGpBAzYCACADQgI3AgwgA0HAk8AANgIIIANBAzYCJCADIANBIGo2AhggAyADNgIoIAMgA0EEajYCICADQQhqIAIQdAALVgECfyMAQSBrIgIkACAAQRxqKAIAIQMgACgCGCACQRhqIAFBEGopAgA3AwAgAkEQaiABQQhqKQIANwMAIAIgASkCADcDCCADIAJBCGoQHiACQSBqJAALWQEBfyMAQSBrIgIkACACIAAoAgA2AgQgAkEYaiABQRBqKQIANwMAIAJBEGogAUEIaikCADcDACACIAEpAgA3AwggAkEEakGYisAAIAJBCGoQHiACQSBqJAALWQEBfyMAQSBrIgIkACACIAAoAgA2AgQgAkEYaiABQRBqKQIANwMAIAJBEGogAUEIaikCADcDACACIAEpAgA3AwggAkEEakGAjsAAIAJBCGoQHiACQSBqJAALZwAjAEEwayIBJABB2K3AAC0AAARAIAFBHGpBATYCACABQgI3AgwgAUH0jsAANgIIIAFBAzYCJCABIAA2AiwgASABQSBqNgIYIAEgAUEsajYCICABQQhqQZyPwAAQdAALIAFBMGokAAtZAQF/IwBBIGsiAiQAIAIgACgCADYCBCACQRhqIAFBEGopAgA3AwAgAkEQaiABQQhqKQIANwMAIAIgASkCADcDCCACQQRqQbSRwAAgAkEIahAeIAJBIGokAAtnAQJ/IAEoAgAhAwJAAkACQCABQQhqKAIAIgFFBEBBASECDAELIAFBf0wNASABQQEQngEiAkUNAgsgAiADIAEQuQEhAiAAIAE2AgggACABNgIEIAAgAjYCAA8LEHMACyABQQEQswEAC1YBAX8jAEEgayICJAAgAiAANgIEIAJBGGogAUEQaikCADcDACACQRBqIAFBCGopAgA3AwAgAiABKQIANwMIIAJBBGpBmIrAACACQQhqEB4gAkEgaiQAC1YBAX8CQCAABEAgACgCAA0BIABBfzYCACAAQQhqIgMoAgAEQCAAKAIEEBULIAAgATYCBCAAQQA2AgAgAEEMaiACNgIAIAMgAjYCAA8LEK0BAAsQrgEAC1YBAX8CQCAABEAgACgCAA0BIABBfzYCACAAQRRqIgMoAgAEQCAAKAIQEBULIAAgATYCECAAQQA2AgAgAEEYaiACNgIAIAMgAjYCAA8LEK0BAAsQrgEAC1YBAX8CQCAABEAgACgCAA0BIABBfzYCACAAQTBqIgMoAgAEQCAAKAIsEBULIAAgATYCLCAAQQA2AgAgAEE0aiACNgIAIAMgAjYCAA8LEK0BAAsQrgEAC1YBAX8jAEEQayIFJAAgASgCACACKAIAIAMoAgAgBCgCABAIIQEgBUEIahCDASAFKAIMIQIgACAFKAIIIgNBAEc2AgAgACACIAEgAxs2AgQgBUEQaiQAC08BAn8gACgCACIDQQRqKAIAIANBCGoiBCgCACIAayACSQRAIAMgACACEEEgBCgCACEACyADKAIAIABqIAEgAhC5ARogBCAAIAJqNgIAQQALTwECfyAAKAIAIgNBBGooAgAgA0EIaiIEKAIAIgBrIAJJBEAgAyAAIAIQQiAEKAIAIQALIAMoAgAgAGogASACELkBGiAEIAAgAmo2AgBBAAtRAQF/IwBBEGsiBCQAIAEoAgAgAigCACADKAIAEAchASAEQQhqEIMBIAQoAgwhAiAAIAQoAggiA0EARzYCACAAIAIgASADGzYCBCAEQRBqJAALSgECfyAAQQRqKAIAIABBCGoiBCgCACIDayACSQRAIAAgAyACEEEgBCgCACEDCyAAKAIAIANqIAEgAhC5ARogBCACIANqNgIAQQALPwEBfyMAQSBrIgAkACAAQRxqQQA2AgAgAEGwkMAANgIYIABCATcCDCAAQcyQwAA2AgggAEEIakGkkcAAEHQAC0MBA38CQCACRQ0AA0AgAC0AACIEIAEtAAAiBUYEQCAAQQFqIQAgAUEBaiEBIAJBf2oiAg0BDAILCyAEIAVrIQMLIAMLTAECfyMAQRBrIgMkACABKAIAIAIoAgAQAyEBIANBCGoQgwEgAygCDCECIAAgAygCCCIEQQBHNgIAIAAgAiABIAQbNgIEIANBEGokAAtLAAJAAn8gAUGAgMQARwRAQQEgACgCGCABIABBHGooAgAoAhARAQANARoLIAINAUEACw8LIAAoAhggAiADIABBHGooAgAoAgwRAwALRwEBfyMAQSBrIgIkACACQRRqQQA2AgAgAkGAk8AANgIQIAJCATcCBCACQSs2AhwgAiAANgIYIAIgAkEYajYCACACIAEQdAALRgECfyABKAIEIQIgASgCACEDQQhBBBCeASIBRQRAQQhBBBCzAQALIAEgAjYCBCABIAM2AgAgAEH4j8AANgIEIAAgATYCAAs5AQF/IAFBEHZAACECIABBADYCCCAAQQAgAUGAgHxxIAJBf0YiARs2AgQgAEEAIAJBEHQgARs2AgALZAEDfyMAQRBrIgEkACAAKAIMIgJFBEBBmI7AAEHIj8AAEG8ACyAAKAIIIgNFBEBBmI7AAEHYj8AAEG8ACyABIAI2AgggASAANgIEIAEgAzYCACABKAIAIAEoAgQgASgCCBBQAAs/AQF/IwBBIGsiACQAIABBHGpBADYCACAAQcyRwAA2AhggAEIBNwIMIABBjJLAADYCCCAAQQhqQZSSwAAQdAALPgEBfyMAQSBrIgIkACACQQE6ABggAiABNgIUIAIgADYCECACQfyTwAA2AgwgAkGAk8AANgIIIAJBCGoQcgALKwACQCAAQXxLDQAgAEUEQEEEDwsgACAAQX1JQQJ0EJ4BIgBFDQAgAA8LAAsiACMAQRBrIgAkACAAQQhqIAEQfSAAQQhqEFMgAEEQaiQACysAAkAgAARAIAAoAgANASAAQQA2AgAgAEEcaiABNgIADwsQrQEACxCuAQALKwACQCAABEAgACgCAA0BIABBADYCACAAQSBqIAE2AgAPCxCtAQALEK4BAAsrAAJAIAAEQCAAKAIADQEgAEEANgIAIABBJGogATYCAA8LEK0BAAsQrgEACysAAkAgAARAIAAoAgANASAAQQA2AgAgAEEoaiABNgIADwsQrQEACxCuAQALQAEBfyMAQRBrIgQkACAEIAM2AgwgBCACNgIIIAQgATYCBCAEIAA2AgAgBCgCACAEKAIEIAQoAgggBCgCDBATAAs3ACAAQQM6ACAgAEKAgICAgAQ3AgAgACABNgIYIABBADYCECAAQQA2AgggAEEcakHEh8AANgIACzUBAX8gASgCGEHDjsAAQQsgAUEcaigCACgCDBEDACECIABBADoABSAAIAI6AAQgACABNgIACyUAAkAgAARAIAAoAgBBf0YNASAAQRxqKAIADwsQrQEACxCuAQALJQACQCAABEAgACgCAEF/Rg0BIABBIGooAgAPCxCtAQALEK4BAAslAAJAIAAEQCAAKAIAQX9GDQEgAEEkaigCAA8LEK0BAAsQrgEACyUAAkAgAARAIAAoAgBBf0YNASAAQShqKAIADwsQrQEACxCuAQALJwAgACAAKAIEQQFxIAFyQQJyNgIEIAAgAWoiACAAKAIEQQFyNgIECzoBAn9B3K3AAC0AACEBQdytwABBADoAAEHgrcAAKAIAIQJB4K3AAEEANgIAIAAgAjYCBCAAIAE2AgALIAEBfwJAIAAoAgQiAUUNACAAQQhqKAIARQ0AIAEQFQsLHwACQCABQXxNBEAgACABQQQgAhCZASIADQELAAsgAAsjACACIAIoAgRBfnE2AgQgACABQQFyNgIEIAAgAWogATYCAAslACAARQRAQciMwABBMBCsAQALIAAgAiADIAQgBSABKAIQEQoACyMAIABFBEBByIzAAEEwEKwBAAsgACACIAMgBCABKAIQEQgACyMAIABFBEBByIzAAEEwEKwBAAsgACACIAMgBCABKAIQEQcACyMAIABFBEBByIzAAEEwEKwBAAsgACACIAMgBCABKAIQERUACyMAIABFBEBByIzAAEEwEKwBAAsgACACIAMgBCABKAIQERIACyMAIABFBEBByIzAAEEwEKwBAAsgACACIAMgBCABKAIQERQACx4AIAAgAUEDcjYCBCAAIAFqIgAgACgCBEEBcjYCBAsUACAAQQRqKAIABEAgACgCABAVCwshACAARQRAQciMwABBMBCsAQALIAAgAiADIAEoAhARBAALHwAgAEUEQEHIjMAAQTAQrAEACyAAIAIgASgCEBEBAAsZAQF/IAAoAhAiAQR/IAEFIABBFGooAgALCxkAIAAoAgAiACgCACAAQQhqKAIAIAEQtwELEgBBAEEZIABBAXZrIABBH0YbCxYAIAAgAUEBcjYCBCAAIAFqIAE2AgALHAAgASgCGEHgpsAAQQUgAUEcaigCACgCDBEDAAsTACAAKAIAIgBBJE8EQCAAEAALCxAAIAAgAWpBf2pBACABa3ELFAAgACgCACAAQQhqKAIAIAEQtwELDAAgACABIAIgAxAYCwsAIAEEQCAAEBULCw8AIABBAXQiAEEAIABrcgsUACAAKAIAIAEg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BAAAAAQAAAARAAAAEgAAABMAAABjYW5ub3QgYWNjZXNzIGEgVGhyZWFkIExvY2FsIFN0b3JhZ2UgdmFsdWUgZHVyaW5nIG9yIGFmdGVyIGRlc3RydWN0aW9uL3J1c3RjL2E1NWRkNzFkNWZiMGVjNWE2YTNhOWU4YzI3YjIxMjdiYTQ5MWNlNTIvbGlicmFyeS9zdGQvc3JjL3RocmVhZC9sb2NhbC5ycwAAAHYFEABPAAAApQEAABoAAAAUAAAAAAAAAAEAAAAVAAAAL3J1c3RjL2E1NWRkNzFkNWZiMGVjNWE2YTNhOWU4YzI3YjIxMjdiYTQ5MWNlNTIvbGlicmFyeS9jb3JlL3NyYy9zdHIvcGF0dGVybi5ycwDoBRAATwAAALcBAAAmAAAAY2xvc3VyZSBpbnZva2VkIHJlY3Vyc2l2ZWx5IG9yIGRlc3Ryb3llZCBhbHJlYWR5SnNWYWx1ZSgpAAAAeAYQAAgAAACABhAAAQAAAG51bGwgcG9pbnRlciBwYXNzZWQgdG8gcnVzdHJlY3Vyc2l2ZSB1c2Ugb2YgYW4gb2JqZWN0IGRldGVjdGVkIHdoaWNoIHdvdWxkIGxlYWQgdG8gdW5zYWZlIGFsaWFzaW5nIGluIHJ1c3QAACQAAAAEAAAABAAAACUAAAAmAAAAJwAAAGNhbGxlZCBgT3B0aW9uOjp1bndyYXAoKWAgb24gYSBgTm9uZWAgdmFsdWVBY2Nlc3NFcnJvcm1lbW9yeSBhbGxvY2F0aW9uIG9mICBieXRlcyBmYWlsZWQKAAAATgcQABUAAABjBxAADgAAAGxpYnJhcnkvc3RkL3NyYy9hbGxvYy5yc4QHEAAYAAAAUgEAAAkAAABsaWJyYXJ5L3N0ZC9zcmMvcGFuaWNraW5nLnJzrAcQABwAAABGAgAAHwAAAKwHEAAcAAAARwIAAB4AAAAoAAAADAAAAAQAAAApAAAAJAAAAAgAAAAEAAAAKgAAACsAAAAQAAAABAAAACwAAAAtAAAAJAAAAAgAAAAEAAAALgAAAC8AAABIYXNoIHRhYmxlIGNhcGFjaXR5IG92ZXJmbG93MAgQABwAAAAvY2FyZ28vcmVnaXN0cnkvc3JjL2dpdGh1Yi5jb20tMWVjYzYyOTlkYjllYzgyMy9oYXNoYnJvd24tMC4xMi4zL3NyYy9yYXcvbW9kLnJzAFQIEABPAAAAWgAAACgAAAAwAAAABAAAAAQAAAAxAAAAMgAAADMAAAAwAAAAAAAAAAEAAAAHAAAAbGlicmFyeS9hbGxvYy9zcmMvcmF3X3ZlYy5yc2NhcGFjaXR5IG92ZXJmbG93AAAA+AgQABEAAADcCBAAHAAAAAYCAAAFAAAAYSBmb3JtYXR0aW5nIHRyYWl0IGltcGxlbWVudGF0aW9uIHJldHVybmVkIGFuIGVycm9ybGlicmFyeS9hbGxvYy9zcmMvZm10LnJzAFcJEAAYAAAAZAIAACAAAAAuLgAAgAkQAAIAAABpbmRleCBvdXQgb2YgYm91bmRzOiB0aGUgbGVuIGlzICBidXQgdGhlIGluZGV4IGlzIAAAjAkQACAAAACsCRAAEgAAAGNhbGxlZCBgT3B0aW9uOjp1bndyYXAoKWAgb24gYSBgTm9uZWAgdmFsdWUAOQAAAAAAAAABAAAAOgAAAGA6IACACRAAAAAAAA0KEAACAAAAfSB9MHgwMDAxMDIwMzA0MDUwNjA3MDgwOTEwMTExMjEzMTQxNTE2MTcxODE5MjAyMTIyMjMyNDI1MjYyNzI4MjkzMDMxMzIzMzM0MzUzNjM3MzgzOTQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NTA1MTUyNTM1NDU1NTY1NzU4NTk2MDYxNjI2MzY0NjU2NjY3Njg2OTcwNzE3MjczNzQ3NTc2Nzc3ODc5ODA4MTgyODM4NDg1ODY4Nzg4ODk5MDkxOTI5Mzk0OTU5Njk3OTg5OXJhbmdlIHN0YXJ0IGluZGV4ICBvdXQgb2YgcmFuZ2UgZm9yIHNsaWNlIG9mIGxlbmd0aCAAAADtChAAEgAAAP8KEAAiAAAAbGlicmFyeS9jb3JlL3NyYy9zbGljZS9pbmRleC5ycwA0CxAAHwAAADQAAAAFAAAAcmFuZ2UgZW5kIGluZGV4IGQLEAAQAAAA/woQACIAAAA0CxAAHwAAAEkAAAAFAAAAc2xpY2UgaW5kZXggc3RhcnRzIGF0ICBidXQgZW5kcyBhdCAAlAsQABYAAACqCxAADQAAADQLEAAfAAAAXAAAAAUAAABsaWJyYXJ5L2NvcmUvc3JjL3N0ci9wYXR0ZXJuLnJzANgLEAAfAAAAGgYAABUAAADYCxAAHwAAAEgGAAAVAAAA2AsQAB8AAABJBgAA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");var pr=class{async init(){await ui(pi);let e=new Je("<%","%>","\0","*","-","_","tR");this.renderer=new ut(e)}async parse_commands(e,t){return this.renderer.render_content(e,t)}};var be;(function(s){s[s.CreateNewFromTemplate=0]="CreateNewFromTemplate",s[s.AppendActiveFile=1]="AppendActiveFile",s[s.OverwriteFile=2]="OverwriteFile",s[s.OverwriteActiveFile=3]="OverwriteActiveFile",s[s.DynamicProcessor=4]="DynamicProcessor",s[s.StartupTemplate=5]="StartupTemplate"})(be||(be={}));var pt=class{constructor(e){this.plugin=e;this.functions_generator=new sr(this.plugin),this.parser=new pr}async setup(){this.files_with_pending_templates=new Set,await this.parser.init(),await this.functions_generator.init(),this.plugin.registerMarkdownPostProcessor((e,t)=>this.process_dynamic_templates(e,t))}create_running_config(e,t,n){let i=Le(this.plugin.app);return{template_file:e,target_file:t,run_mode:n,active_file:i}}async read_and_parse_template(e){let t=await this.plugin.app.vault.read(e.template_file);return this.parse_template(e,t)}async parse_template(e,t){let n=await this.functions_generator.generate_object(e,ve.USER_INTERNAL);return this.current_functions_object=n,await this.parser.parse_commands(t,n)}start_templater_task(e){this.files_with_pending_templates.add(e)}async end_templater_task(e){this.files_with_pending_templates.delete(e),this.files_with_pending_templates.size===0&&(this.plugin.app.workspace.trigger("templater:all-templates-executed"),await this.functions_generator.teardown())}async create_new_note_from_template(e,t,n,i=!0){if(!t)switch(this.plugin.app.vault.getConfig("newFileLocation")){case"current":{let w=Le(this.plugin.app);w&&(t=w.parent);break}case"folder":t=this.plugin.app.fileManager.getNewFileParent("");break;case"root":t=this.plugin.app.vault.getRoot();break;default:break}let o=e instanceof Q.TFile&&e.extension||"md",s=await se(async()=>{let A=t instanceof Q.TFolder?t.path:t,w=this.plugin.app.vault.getAvailablePath((0,Q.normalizePath)(`${A??""}/${n||"Untitled"}`),o),E=sn(w);return E&&!this.plugin.app.vault.getAbstractFileByPathInsensitive(E)&&await this.plugin.app.vault.createFolder(E),this.plugin.app.vault.create(w,"")},`Couldn't create ${o} file.`);if(s==null)return;let{path:u}=s;this.start_templater_task(u);let l,d;if(e instanceof Q.TFile?(l=this.create_running_config(e,s,0),d=await se(async()=>this.read_and_parse_template(l),"Template parsing error, aborting.")):(l=this.create_running_config(void 0,s,0),d=await se(async()=>this.parse_template(l,e),"Template parsing error, aborting.")),d==null){await this.plugin.app.vault.delete(s),await this.end_templater_task(u);return}if(await this.plugin.app.vault.modify(s,d),this.plugin.app.workspace.trigger("templater:new-note-from-template",{file:s,content:d}),i){let A=this.plugin.app.workspace.getLeaf(!1);if(!A){V(new b("No active leaf"));return}await A.openFile(s,{state:{mode:"source"}}),await this.plugin.editor_handler.jump_to_next_cursor_location(s,!0),A.setEphemeralState({rename:"all"})}return await this.end_templater_task(u),s}async append_template_to_active_file(e){let t=this.plugin.app.workspace.getActiveViewOfType(Q.MarkdownView),n=this.plugin.app.workspace.activeEditor;if(!n||!n.file||!n.editor){V(new b("No active editor, can't append templates."));return}let{path:i}=n.file;this.start_templater_task(i);let o=this.create_running_config(e,n.file,1),s=await se(async()=>this.read_and_parse_template(o),"Template parsing error, aborting.");if(s==null){await this.end_templater_task(i);return}let{content:u,frontmatter:l}=kt(s),A=n.editor.getDoc(),w=A.listSelections();A.replaceSelection(u),t&&(Object.keys(l).length>0&&t instanceof Q.MarkdownView&&typeof t.metadataEditor?.insertProperties=="function"&&t.metadataEditor.insertProperties(l),await qe(100),await t.save()),this.plugin.app.workspace.trigger("templater:template-appended",{view:t,editor:n,content:s,oldSelections:w,newSelections:A.listSelections()}),await this.plugin.editor_handler.jump_to_next_cursor_location(n.file,!0),await this.end_templater_task(i)}async write_template_to_file(e,t){let{path:n}=t;this.start_templater_task(n);let i=this.plugin.app.workspace.getActiveViewOfType(Q.MarkdownView),o=this.plugin.app.workspace.activeEditor,s=Le(this.plugin.app),u=this.create_running_config(e,t,2),l=await se(async()=>this.read_and_parse_template(u),"Template parsing error, aborting.");if(l==null){await this.end_templater_task(n);return}let{content:d,frontmatter:A}=kt(l);if(s?.path===t.path&&o&&o.editor&&i){let w="",{content:E,frontmatter:M}=kt(o.editor.getValue());cn(M,A),Object.keys(M).length>0&&(w+=`--- +${(0,Q.stringifyYaml)(M)}--- +`),w+=E+d,o.editor.setValue(w),o.editor.setSelection({line:0,ch:0},{line:0,ch:0}),await qe(100),await i.save()}else await this.plugin.app.vault.process(t,w=>{let E="",{content:M,frontmatter:F}=kt(w);return cn(F,A),Object.keys(F).length>0&&(E+=`--- +${(0,Q.stringifyYaml)(F)}--- +`),E+=M+d,l=E,E});this.plugin.app.workspace.trigger("templater:new-note-from-template",{file:t,content:l}),await this.plugin.editor_handler.jump_to_next_cursor_location(t,!0),await this.end_templater_task(n)}overwrite_active_file_commands(){let e=this.plugin.app.workspace.activeEditor;if(!e||!e.file){V(new b("Active editor is null, can't overwrite content"));return}this.overwrite_file_commands(e.file,!0)}async overwrite_file_commands(e,t=!1){let{path:n}=e;this.start_templater_task(n);let i=this.create_running_config(e,e,t?3:2),o=await se(async()=>this.read_and_parse_template(i),"Template parsing error, aborting.");if(o==null){await this.end_templater_task(n);return}await this.plugin.app.vault.modify(e,o),this.plugin.app.workspace.trigger("templater:overwrite-file",{file:e,content:o}),await this.plugin.editor_handler.jump_to_next_cursor_location(e,!0),await this.end_templater_task(n)}async process_dynamic_templates(e,t){let n=Jr(),i=document.createNodeIterator(e,NodeFilter.SHOW_TEXT),o,s=!1,u;for(;o=i.nextNode();){let l=o.nodeValue;if(l!==null){let d=n.exec(l);if(d!==null){let A=this.plugin.app.metadataCache.getFirstLinkpathDest("",t.sourcePath);if(!A||!(A instanceof Q.TFile))return;if(!s){s=!0;let w=this.create_running_config(A,A,4);u=await this.functions_generator.generate_object(w,ve.USER_INTERNAL),this.current_functions_object=u}}for(;d!=null;){let A=d[1]+d[2],w=await se(async()=>await this.parser.parse_commands(A,u),`Command Parsing error in dynamic command '${A}'`);if(w==null)return;let E=n.lastIndex-d[0].length,M=n.lastIndex;l=l.substring(0,E)+w+l.substring(M),n.lastIndex+=w.length-d[0].length,d=n.exec(l)}o.nodeValue=l}}}get_new_file_template_for_folder(e){do{let t=this.plugin.settings.folder_templates.find(n=>n.folder==e.path);if(t&&t.template)return t.template;e=e.parent}while(e)}get_new_file_template_for_file(e){let t=this.plugin.settings.file_templates.find(n=>new RegExp(n.regex).test(e.path));if(t&&t.template)return t.template}static async on_file_creation(e,t,n){if(!(n instanceof Q.TFile)||n.extension!=="md")return;let i=(0,Q.normalizePath)(e.plugin.settings.templates_folder);if(n.path.includes(i)&&i!=="/"||(await qe(300),e.files_with_pending_templates.has(n.path)))return;let o=await t.vault.read(n),s=(0,Q.getFrontMatterInfo)(o),u=o.length-s.contentStart;if(u==0&&e.plugin.settings.enable_folder_templates){let l=e.get_new_file_template_for_folder(n.parent);if(!l)return;let d=await se(async()=>De(t,l),`Couldn't find template ${l}`);if(d==null)return;await e.write_template_to_file(d,n)}else if(u==0&&e.plugin.settings.enable_file_templates){let l=e.get_new_file_template_for_file(n);if(!l)return;let d=await se(async()=>De(t,l),`Couldn't find template ${l}`);if(d==null)return;await e.write_template_to_file(d,n)}else{let l=1e5;n.stat.size<=l?await e.overwrite_file_commands(n):console.log(`Templater skipped parsing ${n.path} because file size exceeds ${l}`)}}async execute_startup_scripts(){for(let e of this.plugin.settings.startup_templates){if(!e)continue;let t=ce(()=>De(this.plugin.app,e),`Couldn't find startup template "${e}"`);if(!t)continue;let{path:n}=t;this.start_templater_task(n);let i=this.create_running_config(t,t,5);await se(async()=>this.read_and_parse_template(i),"Startup Template parsing error, aborting."),await this.end_templater_task(n)}}};var ft=U(require("obsidian"));var An=class{constructor(e,t,n){this.plugin=e;this.templater=t;this.settings=n}setup(){this.plugin.app.workspace.onLayoutReady(()=>{if(this.settings.trigger_on_file_creation&&this.plugin.app.vault.getConfig("openBehavior")==="daily"){let t=this.plugin.app.internalPlugins.getEnabledPluginById("daily-notes");if(t){let{folder:n,format:i}=t.options,o=(0,ft.normalizePath)(`${n}/${(0,ft.moment)().format(i)}.md`),s=Le(this.plugin.app);s?.path===o&&pt.on_file_creation(this.templater,this.plugin.app,s)}}this.update_trigger_file_on_creation()}),this.update_syntax_highlighting(),this.update_file_menu()}update_syntax_highlighting(){let e=this.plugin.editor_handler.desktopShouldHighlight(),t=this.plugin.editor_handler.mobileShouldHighlight();e||t?this.plugin.editor_handler.enable_highlighter():this.plugin.editor_handler.disable_highlighter()}update_trigger_file_on_creation(){this.settings.trigger_on_file_creation?(this.trigger_on_file_creation_event=this.plugin.app.vault.on("create",e=>pt.on_file_creation(this.templater,this.plugin.app,e)),this.plugin.registerEvent(this.trigger_on_file_creation_event)):this.trigger_on_file_creation_event&&(this.plugin.app.vault.offref(this.trigger_on_file_creation_event),this.trigger_on_file_creation_event=void 0)}update_file_menu(){this.plugin.registerEvent(this.plugin.app.workspace.on("file-menu",(e,t)=>{t instanceof ft.TFolder&&e.addItem(n=>{n.setTitle("Create new note from template").setIcon("templater-icon").onClick(()=>{this.plugin.fuzzy_suggester.create_new_note_from_template(t)})})}))}};var We=U(require("obsidian"));var fr=class{constructor(e){this.plugin=e}setup(){this.plugin.addCommand({id:"insert-templater",name:"Open insert template modal",icon:"templater-icon",hotkeys:We.Platform.isMacOS?void 0:[{modifiers:["Alt"],key:"e"}],callback:()=>{this.plugin.fuzzy_suggester.insert_template()}}),this.plugin.addCommand({id:"replace-in-file-templater",name:"Replace templates in the active file",icon:"templater-icon",hotkeys:We.Platform.isMacOS?void 0:[{modifiers:["Alt"],key:"r"}],callback:()=>{this.plugin.templater.overwrite_active_file_commands()}}),this.plugin.addCommand({id:"jump-to-next-cursor-location",name:"Jump to next cursor location",icon:"text-cursor",hotkeys:[{modifiers:["Alt"],key:"Tab"}],callback:()=>{this.plugin.editor_handler.jump_to_next_cursor_location()}}),this.plugin.addCommand({id:"create-new-note-from-template",name:"Create new note from template",icon:"templater-icon",hotkeys:We.Platform.isMacOS?void 0:[{modifiers:["Alt"],key:"n"}],callback:()=>{this.plugin.fuzzy_suggester.create_new_note_from_template()}}),this.register_templates_hotkeys(),this.register_cli_handler()}register_templates_hotkeys(){this.plugin.settings.enabled_templates_hotkeys.forEach(e=>{e&&this.add_template_hotkey(null,e)})}add_template_hotkey(e,t){if(this.remove_template_hotkey(e),t){let n=this.plugin.settings.templates_folder?this.plugin.settings.templates_folder.length+1:0,i=t.slice(n,-3);this.plugin.addCommand({id:t,name:`Insert ${i}`,icon:"templater-icon",callback:()=>{let o=ce(()=>De(this.plugin.app,t),"Couldn't find the template file associated with this hotkey");!o||this.plugin.templater.append_template_to_active_file(o)}}),this.plugin.addCommand({id:`create-${t}`,name:`Create ${i}`,icon:"templater-icon",callback:()=>{let o=ce(()=>De(this.plugin.app,t),"Couldn't find the template file associated with this hotkey");!o||this.plugin.templater.create_new_note_from_template(o)}})}}remove_template_hotkey(e){e&&(this.plugin.removeCommand(`${e}`),this.plugin.removeCommand(`create-${e}`))}register_cli_handler(){this.plugin.registerCliHandler("templater:create-from-template","Create a new note from a Templater template",{template:{value:"",description:"Template file path (relative to vault root or templates folder)",required:!0},file:{value:"",description:"Output file path (relative to vault root)",required:!0},open:{description:"Open the created file in the UI",required:!1}},async e=>this.handle_create_from_template(e))}resolve_template_file(e){let t=e;t.endsWith(".md")||(t=`${t}.md`);try{return De(this.plugin.app,t)}catch{let n=this.plugin.settings.templates_folder;if(n){let i=(0,We.normalizePath)(`${n}/${t}`);return De(this.plugin.app,i)}throw new Error(`Template "${e}" not found`)}}async handle_create_from_template(e){let{template:t,file:n,open:i}=e;if(!t)return"Error: template parameter is required";if(!n)return"Error: file parameter is required";try{let o=this.resolve_template_file(t),s=(0,We.normalizePath)(n),u=sn(s),l=s.slice(u.length+1).replace(/\.md$/,""),d;if(u)try{d=Yn(this.plugin.app,u)}catch{}let A=i==="true",w=await this.plugin.templater.create_new_note_from_template(o,d??u,l,A);return w?w.path:"Error: Failed to create note from template"}catch(o){return`Error: ${o instanceof Error?o.message:String(o)}`}}};var _r=U(require("obsidian"));var dr=U(require("obsidian"));var gr=class{constructor(e){this.app=e}async jump_to_next_cursor_location(){let e=this.app.workspace.activeEditor;if(!e?.editor)return;let t=e.editor.getValue(),{cursor_matches:n,positions:i}=this.get_cursor_matches_and_positions(t);if(!i||!n)return;let o=e instanceof dr.MarkdownView?e.currentMode.getFoldInfo():null,s=[];for(let u=n.length-1;u>=0;u--){let l=n[u],d=this.get_editor_position_from_index(t,l.index),A=this.get_editor_position_from_index(t,l.index+l[0].length);s.push({from:d,to:A,text:""})}e.editor.transaction({changes:s,selections:i.map(u=>({from:u}))}),o&&Array.isArray(o.folds)&&(i.forEach(u=>{o.folds=o.folds.filter(l=>l.from>u.line||l.to[0-9]*)\)\s*%>/g,n=Array.from(e.matchAll(t));if(n.length===0)return{};n.sort((d,A)=>Number(d.groups?.order||0)-Number(A.groups?.order||0));let i=n[0][0],o=n.filter(d=>d[0]===i),s=o[0][1]===""?[o[0]]:o,u=[],l=0;for(let d of s){let A=d.index-l;u.push(this.get_editor_position_from_index(e,A)),e=e.slice(0,A)+e.slice(A+d[0].length),l+=d[0].length}return{cursor_matches:s,positions:u}}};var mi=U(require("obsidian"));var Uo={app:{name:"app",description:"This module exposes the app instance. Prefer to use this over the global app instance."},user:{name:"user",description:"This module exposes custom made scripts, written by yourself within the script file folder location"},config:{name:"config",description:`This module exposes Templater's running configuration. This is mostly useful when writing scripts requiring some context information. -`,functions:{template_file:{name:"template_file",description:"The `TFile` object representing the template file.",definition:"tp.config.template_file"},target_file:{name:"target_file",description:"The `TFile` object representing the target file where the template will be inserted.",definition:"tp.config.target_file"},run_mode:{name:"run_mode",description:"The `RunMode`, representing the way Templater was launched (Create new from template, Append to active file, ...).",definition:"tp.config.run_mode"},active_file:{name:"active_file",description:"The active file (if existing) when launching Templater.",definition:"tp.config.active_file?"}}},date:{name:"date",description:"This module contains every internal function related to dates.",functions:{now:{name:"now",description:"Retrieves the date.",definition:'tp.date.now(format: string = "YYYY-MM-DD", offset?: number\u23AEstring, reference?: string, reference_format?: string)',args:[{name:"format",description:'The format for the date. Defaults to `"YYYY-MM-DD"`. Refer to [format reference](https://momentjs.com/docs/#/displaying/format/).'},{name:"offset",description:"Duration to offset the date from. If a number is provided, duration will be added to the date in days. You can also specify the offset as a string using the ISO 8601 format."},{name:"reference",description:"The date referential, e.g. set this to the note's title."},{name:"reference_format",description:"The format for the reference date. Refer to [format reference](https://momentjs.com/docs/#/displaying/format/)."}],examples:[{name:"Date now",example:"<% tp.date.now() %>"},{name:"Date now with format",example:'<% tp.date.now("Do MMMM YYYY") %>'},{name:"Last week",example:'<% tp.date.now("YYYY-MM-DD", -7) %>'},{name:"Next week",example:'<% tp.date.now("YYYY-MM-DD", 7) %>'},{name:"Last month",example:'<% tp.date.now("YYYY-MM-DD", "P-1M") %>'},{name:"Next year",example:'<% tp.date.now("YYYY-MM-DD", "P1Y") %>'},{name:"File's title date + 1 day (tomorrow)",example:'<% tp.date.now("YYYY-MM-DD", 1, tp.file.title, "YYYY-MM-DD") %>'},{name:"File's title date - 1 day (yesterday)",example:'<% tp.date.now("YYYY-MM-DD", -1, tp.file.title, "YYYY-MM-DD") %>'}]},tomorrow:{name:"tomorrow",description:"Retrieves tomorrow's date.",definition:'tp.date.tomorrow(format: string = "YYYY-MM-DD")',args:[{name:"format",description:'The format for the date. Defaults to `"YYYY-MM-DD"`. Refer to [format reference](https://momentjs.com/docs/#/displaying/format/).'}],examples:[{name:"Date tomorrow",example:"<% tp.date.tomorrow() %>"},{name:"Date tomorrow with format",example:'<% tp.date.tomorrow("Do MMMM YYYY") %>'}]},yesterday:{name:"yesterday",description:"Retrieves yesterday's date.",definition:'tp.date.yesterday(format: string = "YYYY-MM-DD")',args:[{name:"format",description:'The format for the date. Defaults to `"YYYY-MM-DD"`. Refer to [format reference](https://momentjs.com/docs/#/displaying/format/).'}],examples:[{name:"Date yesterday",example:"<% tp.date.yesterday() %>"},{name:"Date yesterday with format",example:'<% tp.date.yesterday("Do MMMM YYYY") %>'}]},weekday:{name:"weekday",description:"",definition:'tp.date.weekday(format: string = "YYYY-MM-DD", weekday: number, reference?: string, reference_format?: string)',args:[{name:"format",description:'The format for the date. Defaults to `"YYYY-MM-DD"`. Refer to [format reference](https://momentjs.com/docs/#/displaying/format/).'},{name:"weekday",description:"Week day number. If the locale assigns Monday as the first day of the week, `0` will be Monday, `-7` will be last week's day."},{name:"reference",description:"The date referential, e.g. set this to the note's title."},{name:"reference_format",description:"The format for the reference date. Refer to [format reference](https://momentjs.com/docs/#/displaying/format/)."}],examples:[{name:"This week's Monday",example:'<% tp.date.weekday("YYYY-MM-DD", 0) %>'},{name:"Next Monday",example:'<% tp.date.weekday("YYYY-MM-DD", 7) %>'},{name:"File's title Monday",example:'<% tp.date.weekday("YYYY-MM-DD", 0, tp.file.title, "YYYY-MM-DD") %>'},{name:"File's title previous Monday",example:'<% tp.date.weekday("YYYY-MM-DD", -7, tp.file.title, "YYYY-MM-DD") %>'}]}},momentjs:{examples:[{name:"Date now",example:'<% moment(tp.file.title, "YYYY-MM-DD").format("YYYY-MM-DD") %>'},{name:"Get start of month from note title",example:'<% moment(tp.file.title, "YYYY-MM-DD").startOf("month").format("YYYY-MM-DD") %>'},{name:"Get end of month from note title",example:'<% moment(tp.file.title, "YYYY-MM-DD").endOf("month").format("YYYY-MM-DD") %>'}]}},file:{name:"file",description:"This module contains every internal function related to files.",functions:{content:{name:"content",description:"The string contents of the file at the time that Templater was executed. Manipulating this string will *not* update the current file.",definition:"tp.file.content",examples:[{name:"Retrieve file content",example:"<% tp.file.content %>"}]},create_new:{name:"create_new",description:"Creates a new file using a specified template or with a specified content.",definition:"tp.file.create_new(template: TFile \u23AE string, filename?: string, open_new: boolean = false, folder?: TFolder | string)",args:[{name:"template",description:"Either the template used for the new file content, or the file content as a string. If it is the template to use, you retrieve it with `tp.file.find_tfile(TEMPLATENAME)`."},{name:"filename",description:'The filename of the new file, defaults to "Untitled".'},{name:"open_new",description:"Whether to open or not the newly created file. Warning: if you use this option, since commands are executed asynchronously, the file can be opened first and then other commands are appended to that new file and not the previous file."},{name:"folder",description:'The folder to put the new file in, defaults to Obsidian\'s default location. If you want the file to appear in a different folder, specify it with `"PATH/TO/FOLDERNAME"` or `tp.app.vault.getAbstractFileByPath("PATH/TO/FOLDERNAME")`.'}],examples:[{name:"File creation",example:'<%* await tp.file.create_new("MyFileContent", "MyFilename") %>'},{name:"File creation with template",example:'<%* await tp.file.create_new(tp.file.find_tfile("MyTemplate"), "MyFilename") %>'},{name:"File creation and open created note",example:'<%* await tp.file.create_new("MyFileContent", "MyFilename", true) %>'},{name:"File creation in current folder",example:'<%* await tp.file.create_new("MyFileContent", "MyFilename", false, tp.file.folder(true)) %>'},{name:"File creation in specified folder with string path",example:'<%* await tp.file.create_new("MyFileContent", "MyFilename", false, "Path/To/MyFolder") %>'},{name:"File creation in specified folder with TFolder",example:'<%* await tp.file.create_new("MyFileContent", "MyFilename", false, tp.app.vault.getAbstractFileByPath("MyFolder")) %>'},{name:"File creation and append link to current note",example:'[[<% (await tp.file.create_new("MyFileContent", "MyFilename")).basename %>]]'}]},creation_date:{name:"creation_date",description:"Retrieves the file's creation date.",definition:'tp.file.creation_date(format: string = "YYYY-MM-DD HH:mm")',args:[{name:"format",description:'The format for the date. Defaults to `"YYYY-MM-DD HH:mm"`. Refer to [format reference](https://momentjs.com/docs/#/displaying/format/).'}],examples:[{name:"File creation date",example:"<% tp.file.creation_date() %>"},{name:"File creation date with format",example:'<% tp.file.creation_date("dddd Do MMMM YYYY HH:mm") %>'}]},cursor:{name:"cursor",description:`Sets the cursor to this location after the template has been inserted. +`,functions:{template_file:{name:"template_file",description:"The `TFile` object representing the template file.",definition:"tp.config.template_file"},target_file:{name:"target_file",description:"The `TFile` object representing the target file where the template will be inserted.",definition:"tp.config.target_file"},run_mode:{name:"run_mode",description:"The `RunMode`, representing the way Templater was launched (Create new from template, Append to active file, ...).",definition:"tp.config.run_mode"},active_file:{name:"active_file",description:"The active file (if existing) when launching Templater.",definition:"tp.config.active_file?"}}},date:{name:"date",description:"This module contains every internal function related to dates.",functions:{now:{name:"now",description:"Retrieves the date.",definition:'tp.date.now(format: string = "YYYY-MM-DD", offset?: number | string, reference?: string, reference_format?: string)',args:[{name:"format",description:'The format for the date. Defaults to `"YYYY-MM-DD"`. Refer to the [Momentjs format reference](https://momentjs.com/docs/#/displaying/format/).'},{name:"offset",description:"Duration to offset the date from. If a number is provided, duration will be added to the date in days. You can also specify the offset as a string using the ISO 8601 format."},{name:"reference",description:"The date to use instead of today's date, e.g. set this to the note's title."},{name:"reference_format",description:"The format for the reference date. Refer to the [Momentjs format reference](https://momentjs.com/docs/#/displaying/format/)."}],examples:[{name:"Date now",example:"<% tp.date.now() %>"},{name:"Date now with format",example:'<% tp.date.now("Do MMMM YYYY") %>'},{name:"Last week",example:'<% tp.date.now("YYYY-MM-DD", -7) %>'},{name:"Next week",example:'<% tp.date.now("YYYY-MM-DD", 7) %>'},{name:"Last month",example:'<% tp.date.now("YYYY-MM-DD", "P-1M") %>'},{name:"Next year",example:'<% tp.date.now("YYYY-MM-DD", "P1Y") %>'},{name:"File's title date + 1 day (tomorrow)",example:'<% tp.date.now("YYYY-MM-DD", 1, tp.file.title, "YYYY-MM-DD") %>'},{name:"File's title date - 1 day (yesterday)",example:'<% tp.date.now("YYYY-MM-DD", -1, tp.file.title, "YYYY-MM-DD") %>'}]},tomorrow:{name:"tomorrow",description:"Retrieves tomorrow's date.",definition:'tp.date.tomorrow(format: string = "YYYY-MM-DD")',args:[{name:"format",description:'The format for the date. Defaults to `"YYYY-MM-DD"`. Refer to the [Momentjs format reference](https://momentjs.com/docs/#/displaying/format/).'}],examples:[{name:"Date tomorrow",example:"<% tp.date.tomorrow() %>"},{name:"Date tomorrow with format",example:'<% tp.date.tomorrow("Do MMMM YYYY") %>'}]},yesterday:{name:"yesterday",description:"Retrieves yesterday's date.",definition:'tp.date.yesterday(format: string = "YYYY-MM-DD")',args:[{name:"format",description:'The format for the date. Defaults to `"YYYY-MM-DD"`. Refer to the [Momentjs format reference](https://momentjs.com/docs/#/displaying/format/).'}],examples:[{name:"Date yesterday",example:"<% tp.date.yesterday() %>"},{name:"Date yesterday with format",example:'<% tp.date.yesterday("Do MMMM YYYY") %>'}]},weekday:{name:"weekday",description:"",definition:'tp.date.weekday(format: string = "YYYY-MM-DD", weekday: number, reference?: string, reference_format?: string)',args:[{name:"format",description:'The format for the date. Defaults to `"YYYY-MM-DD"`. Refer to the [Momentjs format reference](https://momentjs.com/docs/#/displaying/format/).'},{name:"weekday",description:"Week day number. If the locale assigns Monday as the first day of the week, `0` will be Monday, `-7` will be last week's day."},{name:"reference",description:"The reference date to use instead of today, e.g. set this to the note's title."},{name:"reference_format",description:"The format for the reference date. Refer to the [Momentjs format reference](https://momentjs.com/docs/#/displaying/format/)."}],examples:[{name:"This week's Monday",example:'<% tp.date.weekday("YYYY-MM-DD", 0) %>'},{name:"Next Monday",example:'<% tp.date.weekday("YYYY-MM-DD", 7) %>'},{name:"File's title Monday",example:'<% tp.date.weekday("YYYY-MM-DD", 0, tp.file.title, "YYYY-MM-DD") %>'},{name:"File's title previous Monday",example:'<% tp.date.weekday("YYYY-MM-DD", -7, tp.file.title, "YYYY-MM-DD") %>'}]}},momentjs:{examples:[{name:"Date now",example:'<% moment(tp.file.title, "YYYY-MM-DD").format("YYYY-MM-DD") %>'},{name:"Get start of month from note title",example:'<% moment(tp.file.title, "YYYY-MM-DD").startOf("month").format("YYYY-MM-DD") %>'},{name:"Get end of month from note title",example:'<% moment(tp.file.title, "YYYY-MM-DD").endOf("month").format("YYYY-MM-DD") %>'}]}},file:{name:"file",description:"This module contains every internal function related to files.",functions:{content:{name:"content",description:"The string contents of the file at the time that Templater was executed. Manipulating this string will *not* update the current file.",definition:"tp.file.content",examples:[{name:"Retrieve file content",example:"<% tp.file.content %>"}]},create_new:{name:"create_new",description:"Creates a new file using a specified template or with a specified content.",definition:"tp.file.create_new(template: TFile | string, filename: string = 'Untitled', open_new: boolean = false, folder?: TFolder | string)",args:[{name:"template",description:"Either the template used for the new file content, or the file content as a string. If it is the template to use, you retrieve it with `tp.file.find_tfile(TEMPLATENAME)`."},{name:"filename",description:'The filename of the new file, defaults to "Untitled".'},{name:"open_new",description:"Whether to open or not the newly created file. Warning: if you use this option, since commands are executed asynchronously, the file can be opened first and then other commands are appended to that new file and not the previous file."},{name:"folder",description:'The folder to put the new file in, defaults to Obsidian\'s default location. If you want the file to appear in a different folder, specify it with `"PATH/TO/FOLDERNAME"` or `tp.app.vault.getAbstractFileByPath("PATH/TO/FOLDERNAME")`.'}],examples:[{name:"File creation",example:'<%* await tp.file.create_new("MyFileContent", "MyFilename") %>'},{name:"File creation with template",example:'<%* await tp.file.create_new(tp.file.find_tfile("MyTemplate"), "MyFilename") %>'},{name:"File creation and open created note",example:'<%* await tp.file.create_new("MyFileContent", "MyFilename", true) %>'},{name:"File creation in current folder",example:'<%* await tp.file.create_new("MyFileContent", "MyFilename", false, tp.file.folder(true)) %>'},{name:"File creation in specified folder with string path",example:'<%* await tp.file.create_new("MyFileContent", "MyFilename", false, "Path/To/MyFolder") %>'},{name:"File creation in specified folder with TFolder",example:'<%* await tp.file.create_new("MyFileContent", "MyFilename", false, tp.app.vault.getAbstractFileByPath("MyFolder")) %>'},{name:"File creation and append link to current note",example:'[[<% (await tp.file.create_new("MyFileContent", "MyFilename")).basename %>]]'}]},creation_date:{name:"creation_date",description:"Retrieves the current file's creation date.",definition:'tp.file.creation_date(format: string = "YYYY-MM-DD HH:mm")',args:[{name:"format",description:'The format for the date. Defaults to `"YYYY-MM-DD HH:mm"`. Refer to [format reference](https://momentjs.com/docs/#/displaying/format/).'}],examples:[{name:"File creation date",example:"<% tp.file.creation_date() %>"},{name:"File creation date with format",example:'<% tp.file.creation_date("dddd Do MMMM YYYY HH:mm") %>'}]},cursor:{name:"cursor",description:`Sets the cursor to this location after the template has been inserted. You can navigate between the different cursors using the configured hotkey in Obsidian settings. `,definition:"tp.file.cursor(order?: number)",args:[{name:"order",description:`The order of the different cursors jump, e.g. it will jump from 1 to 2 to 3, and so on. If you specify multiple tp.file.cursor with the same order, the editor will switch to multi-cursor. -`}],examples:[{name:"File cursor",example:"<% tp.file.cursor() %>"},{name:"File multi-cursor",example:"<% tp.file.cursor(1) %>Content<% tp.file.cursor(1) %>"}]},cursor_append:{name:"cursor_append",description:"Appends some content after the active cursor in the file.",definition:"tp.file.cursor_append(content: string)",args:[{name:"content",description:"The content to append after the active cursor."}],examples:[{name:"File cursor append",example:'<% tp.file.cursor_append("Some text") %>'}]},exists:{name:"exists",description:"Check to see if a file exists by it's file path. The full path to the file, relative to the Vault and containing the extension, must be provided.",definition:"tp.file.exists(filepath: string)",args:[{name:"filepath",description:"The full file path of the file we want to check existence for."}],examples:[{name:"File existence",example:'<% await tp.file.exists("MyFolder/MyFile.md") %>'},{name:"File existence of current file",example:'<% await tp.file.exists(tp.file.folder(true) + "/" + tp.file.title + ".md") %>'}]},find_tfile:{name:"find_tfile",description:"Search for a file and returns its `TFile` instance.",definition:"tp.file.find_tfile(filename: string)",args:[{name:"filename",description:"The filename we want to search and resolve as a `TFile`."}],examples:[{name:"File find TFile",example:'<% tp.file.find_tfile("MyFile").basename %>'}]},folder:{name:"folder",description:"Retrieves the file's folder name.",definition:"tp.file.folder(absolute: boolean = false)",args:[{name:"absolute",description:"If set to `true`, returns the vault-absolute path of the folder. If `false`, only returns the basename of the folder (the last part). Defaults to `false`."}],examples:[{name:"File folder (Folder)",example:"<% tp.file.folder() %>"},{name:"File folder with vault-absolute path (Path/To/Folder)",example:"<% tp.file.folder(true) %>"}]},include:{name:"include",description:"Includes the file's link content. Templates in the included content will be resolved.",definition:"tp.file.include(include_link: string \u23AE TFile)",args:[{name:"include_link",description:'The link to the file to include, e.g. `"[[MyFile]]"`, or a TFile object. Also supports sections or blocks inclusions.'}],examples:[{name:"File include",example:'<% await tp.file.include("[[Template1]]") %>'},{name:"File include TFile",example:'<% await tp.file.include(tp.file.find_tfile("MyFile")) %>'},{name:"File include section",example:'<% await tp.file.include("[[MyFile#Section1]]") %>'},{name:"File include block",example:'<% await tp.file.include("[[MyFile#^block1]]") %>'}]},last_modified_date:{name:"last_modified_date",description:"Retrieves the file's last modification date.",definition:'tp.file.last_modified_date(format: string = "YYYY-MM-DD HH:mm")',args:[{name:"format",description:'The format for the date. Defaults to `"YYYY-MM-DD HH:mm"`. Refer to [format reference](https://momentjs.com/docs/#/displaying/format/).'}],examples:[{name:"File last modified date",example:"<% tp.file.last_modified_date() %>"},{name:"File last modified date with format",example:'<% tp.file.last_modified_date("dddd Do MMMM YYYY HH:mm") %>'}]},move:{name:"move",description:"Moves the file to the desired vault location.",definition:"tp.file.move(new_path: string, file_to_move?: TFile)",args:[{name:"new_path",description:'The new vault relative path of the file, without the file extension. Note: the new path needs to include the folder and the filename, e.g. `"/Notes/MyNote"`.'},{name:"file_to_move",description:"The file to move, defaults to the current file."}],examples:[{name:"File move",example:'<%* await tp.file.move("/A/B/" + tp.file.title) %>'},{name:"File move and rename",example:'<%* await tp.file.move("/A/B/NewTitle") %>'}]},path:{name:"path",description:"Retrieves the file's absolute path on the system.",definition:"tp.file.path(relative: boolean = false)",args:[{name:"relative",description:"If set to `true`, only retrieves the vault's relative path."}],examples:[{name:"File path",example:"<% tp.file.path() %>"},{name:"File relative path (relative to vault root)",example:"<% tp.file.path(true) %>"}]},rename:{name:"rename",description:"Renames the file (keeps the same file extension).",definition:"tp.file.rename(new_title: string)",args:[{name:"new_title",description:"The new file title."}],examples:[{name:"File rename",example:'<%* await tp.file.rename("MyNewName") %>'},{name:"File append a 2 to the file name",example:'<%* await tp.file.rename(tp.file.title + "2") %>'}]},selection:{name:"selection",description:"Retrieves the active file's text selection.",definition:"tp.file.selection()",examples:[{name:"File selection",example:"<% tp.file.selection() %>"}]},tags:{name:"tags",description:"Retrieves the file's tags (array of string).",definition:"tp.file.tags",examples:[{name:"File tags",example:"<% tp.file.tags %>"}]},title:{name:"title",definition:"tp.file.title",description:"Retrieves the file's title.",examples:[{name:"File title",example:"<% tp.file.title %>"},{name:"Strip the Zettelkasten ID of title (if space separated)",example:'<% tp.file.title.split(" ")[1] %>'}]}}},frontmatter:{name:"frontmatter",description:"This modules exposes all the frontmatter variables of a file as variables."},hooks:{name:"hooks",description:"This module exposes hooks that allow you to execute code when a Templater event occurs.",functions:{on_all_templates_executed:{name:"on_all_templates_executed",description:"Hooks into when all actively running templates have finished executing. Most of the time this will be a single template, unless you are using `tp.file.include` or `tp.file.create_new`.\n\nMultiple invokations of this method will have their callback functions run in parallel.",definition:"tp.hooks.on_all_templates_executed(callback_function: () => any)",args:[{name:"callback_function",description:"Callback function that will be executed when all actively running templates have finished executing."}]}}},obsidian:{name:"obsidian",description:"This module exposes all the functions and classes from the Obsidian API."},system:{name:"system",description:"This module contains system related functions.",functions:{clipboard:{name:"clipboard",description:"Retrieves the clipboard's content.",definition:"tp.system.clipboard()",examples:[{name:"Clipboard",example:"<% tp.system.clipboard() %>"}]},prompt:{name:"prompt",description:"Spawns a prompt modal and returns the user's input.",definition:"tp.system.prompt(prompt_text?: string, default_value?: string, throw_on_cancel: boolean = false, multiline?: boolean = false)",args:[{name:"prompt_text",description:"Text placed above the input field."},{name:"default_value",description:"A default value for the input field."},{name:"throw_on_cancel",description:"Throws an error if the prompt is canceled, instead of returning a `null` value."},{name:"multiline",description:"If set to `true`, the input field will be a multiline textarea. Defaults to `false`."}],examples:[{name:"Prompt",example:'<% await tp.system.prompt("Please enter a value") %>'},{name:"Prompt with default value",example:'<% await tp.system.prompt("What is your mood today?", "happy") %>'},{name:"Multiline prompt",example:'<% await tp.system.prompt("What is your mood today?", null, false, true) %>'},{name:"Reuse output from prompt",example:`<%* +`}],examples:[{name:"File cursor",example:"<% tp.file.cursor() %>"},{name:"File multi-cursor",example:"<% tp.file.cursor(1) %>Content<% tp.file.cursor(1) %>"}]},cursor_append:{name:"cursor_append",description:"Appends some content after the active cursor in the file.",definition:"tp.file.cursor_append(content: string)",args:[{name:"content",description:"The content to append after the active cursor."}],examples:[{name:"File cursor append",example:'<% tp.file.cursor_append("Some text") %>'}]},exists:{name:"exists",description:"Check to see if a file exists by it's file path. The full path to the file, relative to the Vault and containing the extension, must be provided.",definition:"tp.file.exists(filepath: string)",args:[{name:"filepath",description:"The full file path of the file we want to check existence for."}],examples:[{name:"File existence",example:'<% await tp.file.exists("MyFolder/MyFile.md") %>'},{name:"File existence of current file",example:'<% await tp.file.exists(tp.file.folder(true) + "/" + tp.file.title + ".md") %>'}]},find_tfile:{name:"find_tfile",description:"Search for a file and returns its `TFile` instance.",definition:"tp.file.find_tfile(filename: string)",args:[{name:"filename",description:"The filename we want to search and resolve as a `TFile`."}],examples:[{name:"File find TFile",example:'<% tp.file.find_tfile("MyFile").basename %>'}]},folder:{name:"folder",description:"Retrieves the file's folder name.",definition:"tp.file.folder(absolute: boolean = false)",args:[{name:"absolute",description:"If set to `true`, returns the vault-absolute path of the folder. If `false`, only returns the basename of the folder (the last part). Defaults to `false`."}],examples:[{name:"File folder (Folder)",example:"<% tp.file.folder() %>"},{name:"File folder with vault-absolute path (Path/To/Folder)",example:"<% tp.file.folder(true) %>"}]},include:{name:"include",description:"Includes the file's link content. Templates in the included content will be resolved.",definition:"tp.file.include(include_link: string | TFile)",args:[{name:"include_link",description:'The link to the file to include, e.g. `"[[MyFile]]"`, or a TFile object. Also supports sections or blocks inclusions.'}],examples:[{name:"File include",example:'<% await tp.file.include("[[Template1]]") %>'},{name:"File include TFile",example:'<% await tp.file.include(tp.file.find_tfile("MyFile")) %>'},{name:"File include section",example:'<% await tp.file.include("[[MyFile#Section1]]") %>'},{name:"File include block",example:'<% await tp.file.include("[[MyFile#^block1]]") %>'}]},last_modified_date:{name:"last_modified_date",description:"Retrieves the file's last modification date.",definition:'tp.file.last_modified_date(format: string = "YYYY-MM-DD HH:mm")',args:[{name:"format",description:'The format for the date. Defaults to `"YYYY-MM-DD HH:mm"`. Refer to [format reference](https://momentjs.com/docs/#/displaying/format/).'}],examples:[{name:"File last modified date",example:"<% tp.file.last_modified_date() %>"},{name:"File last modified date with format",example:'<% tp.file.last_modified_date("dddd Do MMMM YYYY HH:mm") %>'}]},move:{name:"move",description:"Moves the file to the desired vault location.",definition:"tp.file.move(new_path: string, file_to_move?: TFile)",args:[{name:"new_path",description:'The new vault relative path of the file, without the file extension. Note: the new path needs to include the folder and the filename, e.g. `"/Notes/MyNote"`.'},{name:"file_to_move",description:"The file to move, defaults to the current file."}],examples:[{name:"File move",example:'<%* await tp.file.move("/A/B/" + tp.file.title) %>'},{name:"File move and rename",example:'<%* await tp.file.move("/A/B/NewTitle") %>'}]},path:{name:"path",description:"Retrieves the file's absolute path on the system.",definition:"tp.file.path(relative: boolean = false)",args:[{name:"relative",description:"If set to `true`, only retrieves the vault's relative path."}],examples:[{name:"File path",example:"<% tp.file.path() %>"},{name:"File relative path (relative to vault root)",example:"<% tp.file.path(true) %>"}]},rename:{name:"rename",description:"Renames the file (keeps the same file extension).",definition:"tp.file.rename(new_title: string)",args:[{name:"new_title",description:"The new file title."}],examples:[{name:"File rename",example:'<%* await tp.file.rename("MyNewName") %>'},{name:"File append a 2 to the file name",example:'<%* await tp.file.rename(tp.file.title + "2") %>'}]},selection:{name:"selection",description:"Retrieves the active file's text selection.",definition:"tp.file.selection()",examples:[{name:"File selection",example:"<% tp.file.selection() %>"}]},tags:{name:"tags",description:"Retrieves the file's tags (array of string).",definition:"tp.file.tags",examples:[{name:"File tags",example:"<% tp.file.tags %>"}]},title:{name:"title",definition:"tp.file.title",description:"Retrieves the file's title.",examples:[{name:"File title",example:"<% tp.file.title %>"},{name:"Strip the Zettelkasten ID of title (if space separated)",example:'<% tp.file.title.split(" ")[1] %>'}]}}},frontmatter:{name:"frontmatter",description:"This modules exposes all the frontmatter variables of a file as variables."},hooks:{name:"hooks",description:"This module exposes hooks that allow you to execute code when a Templater event occurs.",functions:{on_all_templates_executed:{name:"on_all_templates_executed",description:"Hooks into when all actively running templates have finished executing. Most of the time this will be a single template, unless you are using `tp.file.include` or `tp.file.create_new`.\n\nMultiple invokations of this method will have their callback functions run in parallel.",definition:"tp.hooks.on_all_templates_executed(callback_function: () => any)",args:[{name:"callback_function",description:"Callback function that will be executed when all actively running templates have finished executing."}]}}},obsidian:{name:"obsidian",description:"This module exposes all the functions and classes from the Obsidian API."},system:{name:"system",description:"This module contains system related functions.",functions:{clipboard:{name:"clipboard",description:"Retrieves the clipboard's content.",definition:"tp.system.clipboard()",examples:[{name:"Clipboard",example:"<% tp.system.clipboard() %>"}]},prompt:{name:"prompt",description:"Spawns a prompt modal and returns the user's input.",definition:"tp.system.prompt(prompt_text?: string, default_value?: string, throw_on_cancel: boolean = false, multiline?: boolean = false)",args:[{name:"prompt_text",description:"Text placed above the input field."},{name:"default_value",description:"A default value for the input field."},{name:"throw_on_cancel",description:"Throws an error if the prompt is canceled, instead of returning a `null` value."},{name:"multiline",description:"If set to `true`, the input field will be a multiline textarea. Defaults to `false`."}],examples:[{name:"Prompt",example:'<% await tp.system.prompt("Please enter a value") %>'},{name:"Prompt with default value",example:'<% await tp.system.prompt("What is your mood today?", "happy") %>'},{name:"Multiline prompt",example:'<% await tp.system.prompt("What is your mood today?", null, false, true) %>'},{name:"Reuse output from prompt",example:`<%* let value = await tp.system.prompt("Please enter a value"); %> # <% value %> -selected value: <% value %>`}]},suggester:{name:"suggester",description:"Spawns a suggester prompt and returns the user's chosen item.",definition:'tp.system.suggester(text_items: string[] \u23AE ((item: T) => string), items: T[], throw_on_cancel: boolean = false, placeholder: string = "", limit?: number = undefined)',args:[{name:"text_items",description:"Array of strings representing the text that will be displayed for each item in the suggester prompt. This can also be a function that maps an item to its text representation."},{name:"items",description:"Array containing the values of each item in the correct order."},{name:"throw_on_cancel",description:"Throws an error if the prompt is canceled, instead of returning a `null` value."},{name:"placeholder",description:"Placeholder string of the prompt."},{name:"limit",description:"Limit the number of items rendered at once (useful to improve performance when displaying large lists)."}],examples:[{name:"Suggester",example:'<% await tp.system.suggester(["Happy", "Sad", "Confused"], ["Happy", "Sad", "Confused"]) %>'},{name:"Suggester with mapping function (same as above example)",example:'<% await tp.system.suggester((item) => item, ["Happy", "Sad", "Confused"]) %>'},{name:"Suggester for files",example:"[[<% (await tp.system.suggester((item) => item.basename, tp.app.vault.getMarkdownFiles())).basename %>]]"},{name:"Suggester for tags",example:'<% await tp.system.suggester(item => item, Object.keys(tp.app.metadataCache.getTags()).map(x => x.replace("#", ""))) %>'},{name:"Reuse value from suggester",example:`<%* +selected value: <% value %>`}]},suggester:{name:"suggester",description:"Spawns a suggester prompt and returns the user's chosen item.",definition:'tp.system.suggester(text_items: string[] | ((item: T) => string), items: T[], throw_on_cancel: boolean = false, placeholder: string = "", limit?: number = undefined, default_value?: T = undefined)',args:[{name:"text_items",description:"Array of strings representing the text that will be displayed for each item in the suggester prompt. This can also be a function that maps an item to its text representation."},{name:"items",description:"Array containing the values of each item in the correct order."},{name:"throw_on_cancel",description:"Throws an error if the prompt is canceled, instead of returning a `null` value."},{name:"placeholder",description:"Placeholder string of the prompt."},{name:"limit",description:"Limit the number of items rendered at once (useful to improve performance when displaying large lists)."},{name:"default_value",description:"Default value to initialize the suggester with."}],examples:[{name:"Suggester",example:'<% await tp.system.suggester(["Happy", "Sad", "Confused"], ["Happy", "Sad", "Confused"]) %>'},{name:"Suggester with mapping function (same as above example)",example:'<% await tp.system.suggester((item) => item, ["Happy", "Sad", "Confused"]) %>'},{name:"Suggester for files",example:"[[<% (await tp.system.suggester((item) => item.basename, tp.app.vault.getMarkdownFiles())).basename %>]]"},{name:"Suggester for tags",example:'<% await tp.system.suggester(item => item, Object.keys(tp.app.metadataCache.getTags()).map(x => x.replace("#", ""))) %>'},{name:"Reuse value from suggester",example:`<%* let selectedValue = await tp.system.suggester(["Happy", "Sad", "Confused"], ["Happy", "Sad", "Confused"]); %> # <% selectedValue %> -selected value: <% selectedValue %>`}]},multi_suggester:{name:"multi_suggester",description:"Spawns a suggester prompt that supports selecting multiple items and returns the user's chosen items.",definition:'tp.system.multi_suggester(text_items: string[] \u23AE ((item: T) => string), items: T[], throw_on_cancel: boolean = false, title: string = "", limit?: number = undefined)',args:[{name:"text_items",description:"Array of strings representing the text that will be displayed for each item in the suggester prompt. This can also be a function that maps an item to its text representation."},{name:"items",description:"Array containing the values of each item in the correct order."},{name:"throw_on_cancel",description:"Throws an error if the prompt is canceled, instead of returning a `null` value."},{name:"title",description:"Text placed at the top of the modal."},{name:"limit",description:"Limit the number of items rendered at once (useful to improve performance when displaying large lists)."}],examples:[{name:"Multi-suggester",example:'<% await tp.system.multi_suggester(["Happy", "Sad", "Confused"], ["Happy", "Sad", "Confused"]) %>'},{name:"Multi-suggester with mapping function (same as above example)",example:'<% await tp.system.multi_suggester((item) => item, ["Happy", "Sad", "Confused"]) %>'},{name:"Multi-suggester for files",example:"<% (await tp.system.multi_suggester((item) => item.basename, tp.app.vault.getMarkdownFiles())).map(f => `[[${f.basename}]]`) %>"},{name:"Multi-suggester for tags",example:'<% await tp.system.multi_suggester(item => item, Object.keys(tp.app.metadataCache.getTags()).map(x => x.replace("#", ""))) %>'},{name:"Reuse value from multi-suggester",example:`<%* +selected value: <% selectedValue %>`},{name:"Default value for the suggester",example:`<%* +let selectedValue = await tp.system.suggester(["Happy", "Sad", "Confused"], ["Happy", "Sad", "Confused"], false, "", undefined, "Confused"); +%> +# <% selectedValue %> +selected value: <% selectedValue %>`}]},multi_suggester:{name:"multi_suggester",description:"Spawns a suggester prompt that supports selecting multiple items and returns the user's chosen items.",definition:'tp.system.multi_suggester(text_items: string[] | ((item: T) => string), items: T[], throw_on_cancel: boolean = false, title: string = "", limit?: number = undefined, default_values?: T[] = undefined)',args:[{name:"text_items",description:"Array of strings representing the text that will be displayed for each item in the suggester prompt. This can also be a function that maps an item to its text representation."},{name:"items",description:"Array containing the values of each item in the correct order."},{name:"throw_on_cancel",description:"Throws an error if the prompt is canceled, instead of returning a `null` value."},{name:"title",description:"Text placed at the top of the modal."},{name:"limit",description:"Limit the number of items rendered at once (useful to improve performance when displaying large lists)."},{name:"default_values",description:"Default values to initialize the suggester with."}],examples:[{name:"Multi-suggester",example:'<% await tp.system.multi_suggester(["Happy", "Sad", "Confused"], ["Happy", "Sad", "Confused"]) %>'},{name:"Multi-suggester with mapping function (same as above example)",example:'<% await tp.system.multi_suggester((item) => item, ["Happy", "Sad", "Confused"]) %>'},{name:"Multi-suggester for files",example:"<% (await tp.system.multi_suggester((item) => item.basename, tp.app.vault.getMarkdownFiles())).map(f => `[[${f.basename}]]`) %>"},{name:"Multi-suggester for tags",example:'<% await tp.system.multi_suggester(item => item, Object.keys(tp.app.metadataCache.getTags()).map(x => x.replace("#", ""))) %>'},{name:"Reuse value from multi-suggester",example:`<%* let selectedValues = await tp.system.multi_suggester(["Happy", "Sad", "Confused"], ["Happy", "Sad", "Confused"]); %> # <% selectedValues %> -selected values: <% selectedValues %>`}]}}},web:{name:"web",description:"This modules contains every internal function related to the web (making web requests).",functions:{daily_quote:{name:"daily_quote",description:"Retrieves and parses the daily quote from `https://github.com/Zachatoo/quotes-database` as a callout.",definition:"tp.web.daily_quote()",examples:[{name:"Daily quote",example:"<% await tp.web.daily_quote() %>"}]},random_picture:{name:"random_picture",description:"Gets a random image from `https://unsplash.com/`.",definition:"tp.web.random_picture(size?: string, query?: string, include_size?: boolean)",args:[{name:"size",description:"Image size in the format `x`."},{name:"query",description:"Limits selection to photos matching a search term. Multiple search terms can be passed separated by a comma."},{name:"include_size",description:"Optional argument to include the specified size in the image link markdown. Defaults to false."}],examples:[{name:"Random picture",example:"<% await tp.web.random_picture() %>"},{name:"Random picture with size",example:'<% await tp.web.random_picture("200x200") %>'},{name:"Random picture with size and query",example:'<% await tp.web.random_picture("200x200", "landscape,water") %>'}]},request:{name:"request",description:"Makes a HTTP request to the specified URL. Optionally, you can specify a path to extract specific data from the response.",definition:"tp.web.request(url: string, path?: string)",args:[{name:"url",description:"The URL to which the HTTP request will be made."},{name:"path",description:"A path within the response JSON to extract specific data."}],examples:[{name:"Simple request",example:'<% await tp.web.request("https://jsonplaceholder.typicode.com/todos/1") %>'},{name:"Request with path",example:'<% await tp.web.request("https://jsonplaceholder.typicode.com/todos", "0.title") %>'}]}}}},Xo={tp:ec};var tc=["app","config","date","file","frontmatter","hooks","obsidian","system","user","web"],nc=new Set(tc);function Zo(n){return typeof n=="string"&&nc.has(n)}function Pi(n){return!!(n.definition||n.returns||n.args)}var Ni=class{constructor(e){this.plugin=e;this.documentation=Xo}get_all_modules_documentation(){let e=this.documentation.tp;return(!this.plugin.settings||!this.plugin.settings.user_scripts_folder)&&(e=Object.values(e).filter(t=>t.name!=="user")),Object.values(e).map(t=>(t.queryKey=t.name,t))}async get_all_functions_documentation(e,t){if(e==="app")return this.get_app_functions_documentation(this.plugin.app,t);if(e==="user"){if(!this.plugin.settings||!this.plugin.settings.user_scripts_folder)return;let r=await Se(async()=>{let i=Je(this.plugin.app,this.plugin.settings.user_scripts_folder).filter(a=>a.extension=="js");return await co(this.plugin.app,i)},"User Scripts folder doesn't exist");return!r||r.length===0?void 0:r.reduce((i,o)=>o.extension!=="js"?i:[...i,{name:o.basename,queryKey:o.basename,definition:"",description:o.description,returns:o.returns,args:o.arguments.reduce((l,c)=>(l[c.name]={name:c.name,description:c.description},l),{}),example:""}],[])}if(!!this.documentation.tp[e].functions)return Object.values(this.documentation.tp[e].functions).map(r=>(r.queryKey=r.name,r))}get_app_functions_documentation(e,t){if(!jn(e))return[];let r=t.split(".");if(r.length===0)return[];let i=e;for(let c=0;c[a-z]*)?(?\.(?[a-zA-Z_.]*)?)?$/;this.documentation=new Ni(e),this.intellisense_render_setting=e.settings.intellisense_render}onTrigger(e,t,r){let i=t.getRange({line:e.line,ch:0},{line:e.line,ch:e.ch}),o=this.tp_keyword_regex.exec(i);if(!o)return null;let a,l=o.groups&&o.groups.module||"";if(this.module_name=l,o.groups&&o.groups.fn_trigger){if(l==""||!Zo(l))return null;this.function_trigger=!0,this.function_name=o.groups.fn||"",a=this.function_name}else this.function_trigger=!1,a=this.module_name;let c={start:{line:e.line,ch:e.ch-a.length},end:{line:e.line,ch:e.ch},query:a};return this.latest_trigger_info=c,c}async getSuggestions(e){let t;return this.module_name&&this.function_trigger?t=await this.documentation.get_all_functions_documentation(this.module_name,this.function_name):t=this.documentation.get_all_modules_documentation(),t?t.filter(r=>r.queryKey.toLowerCase().startsWith(e.query.toLowerCase())):[]}renderSuggestion(e,t){if(t.createEl("b",{text:e.name}),Pi(e)){if(e.args&&this.getNumberOfArguments(e.args)>0&&qo(this.intellisense_render_setting)){t.createEl("p",{text:"Parameter list:"});let r=t.createEl("ol");for(let[i,o]of Object.entries(e.args))Gr(r,i,o.description)}e.returns&&Fo(this.intellisense_render_setting)&&Gr(t,"Returns",e.returns)}this.function_trigger&&Pi(e)&&t.createEl("code",{text:e.definition}),e.description&&Lo(this.intellisense_render_setting)&&t.createEl("div",{text:e.description})}selectSuggestion(e,t){let r=this.app.workspace.activeEditor;if(!(!r||!r.editor)&&(r.editor.replaceRange(e.queryKey,this.latest_trigger_info.start,this.latest_trigger_info.end),this.latest_trigger_info.start.ch==this.latest_trigger_info.end.ch)){let i=this.latest_trigger_info.end;i.ch+=e.queryKey.length,r.editor.setCursor(i)}}getNumberOfArguments(e){try{return new Map(Object.entries(e)).size}catch{return 0}}updateAutocompleteIntellisenseSetting(e){this.intellisense_render_setting=e}};(function(n){n(window.CodeMirror)})(function(n){"use strict";n.defineMode("javascript",function(e,t){var r=e.indentUnit,i=t.statementIndent,o=t.jsonld,a=t.json||o,l=t.trackScope!==!1,c=t.typescript,d=t.wordCharacters||/[\w$\xa1-\uffff]/,m=function(){function s(ve){return{type:ve,style:"keyword"}}var p=s("keyword a"),A=s("keyword b"),x=s("keyword c"),I=s("keyword d"),Y=s("operator"),z={type:"atom",style:"atom"};return{if:s("if"),while:p,with:p,else:A,do:A,try:A,finally:A,return:I,break:I,continue:I,new:s("new"),delete:x,void:x,throw:x,debugger:s("debugger"),var:s("var"),const:s("var"),let:s("var"),function:s("function"),catch:s("catch"),for:s("for"),switch:s("switch"),case:s("case"),default:s("default"),in:Y,typeof:Y,instanceof:Y,true:z,false:z,null:z,undefined:z,NaN:z,Infinity:z,this:s("this"),class:s("class"),super:s("atom"),yield:x,export:s("export"),import:s("import"),extends:x,await:x}}(),_=/[+\-*&%=<>!?|~^@]/,w=/^@(context|id|value|language|type|container|list|set|reverse|index|base|vocab|graph)"/;function b(s){for(var p=!1,A,x=!1;(A=s.next())!=null;){if(!p){if(A=="/"&&!x)return;A=="["?x=!0:x&&A=="]"&&(x=!1)}p=!p&&A=="\\"}}var S,k;function E(s,p,A){return S=s,k=A,p}function O(s,p){var A=s.next();if(A=='"'||A=="'")return p.tokenize=$(A),p.tokenize(s,p);if(A=="."&&s.match(/^\d[\d_]*(?:[eE][+\-]?[\d_]+)?/))return E("number","number");if(A=="."&&s.match(".."))return E("spread","meta");if(/[\[\]{}\(\),;\:\.]/.test(A))return E(A);if(A=="="&&s.eat(">"))return E("=>","operator");if(A=="0"&&s.match(/^(?:x[\dA-Fa-f_]+|o[0-7_]+|b[01_]+)n?/))return E("number","number");if(/\d/.test(A))return s.match(/^[\d_]*(?:n|(?:\.[\d_]*)?(?:[eE][+\-]?[\d_]+)?)?/),E("number","number");if(A=="/")return s.eat("*")?(p.tokenize=K,K(s,p)):s.eat("/")?(s.skipToEnd(),E("comment","comment")):Vi(s,p,1)?(b(s),s.match(/^\b(([gimyus])(?![gimyus]*\2))+\b/),E("regexp","string-2")):(s.eat("="),E("operator","operator",s.current()));if(A=="`")return p.tokenize=D,D(s,p);if(A=="#"&&s.peek()=="!")return s.skipToEnd(),E("meta","meta");if(A=="#"&&s.eatWhile(d))return E("variable","property");if(A=="<"&&s.match("!--")||A=="-"&&s.match("->")&&!/\S/.test(s.string.slice(0,s.start)))return s.skipToEnd(),E("comment","comment");if(_.test(A))return(A!=">"||!p.lexical||p.lexical.type!=">")&&(s.eat("=")?(A=="!"||A=="=")&&s.eat("="):/[<>*+\-|&?]/.test(A)&&(s.eat(A),A==">"&&s.eat(A))),A=="?"&&s.eat(".")?E("."):E("operator","operator",s.current());if(d.test(A)){s.eatWhile(d);var x=s.current();if(p.lastType!="."){if(m.propertyIsEnumerable(x)){var I=m[x];return E(I.type,I.style,x)}if(x=="async"&&s.match(/^(\s|\/\*([^*]|\*(?!\/))*?\*\/)*[\[\(\w]/,!1))return E("async","keyword",x)}return E("variable","variable",x)}}function $(s){return function(p,A){var x=!1,I;if(o&&p.peek()=="@"&&p.match(w))return A.tokenize=O,E("jsonld-keyword","meta");for(;(I=p.next())!=null&&!(I==s&&!x);)x=!x&&I=="\\";return x||(A.tokenize=O),E("string","string")}}function K(s,p){for(var A=!1,x;x=s.next();){if(x=="/"&&A){p.tokenize=O;break}A=x=="*"}return E("comment","comment")}function D(s,p){for(var A=!1,x;(x=s.next())!=null;){if(!A&&(x=="`"||x=="$"&&s.eat("{"))){p.tokenize=O;break}A=!A&&x=="\\"}return E("quasi","string-2",s.current())}var H="([{}])";function F(s,p){p.fatArrowAt&&(p.fatArrowAt=null);var A=s.string.indexOf("=>",s.start);if(!(A<0)){if(c){var x=/:\s*(?:\w+(?:<[^>]*>|\[\])?|\{[^}]*\})\s*$/.exec(s.string.slice(s.start,A));x&&(A=x.index)}for(var I=0,Y=!1,z=A-1;z>=0;--z){var ve=s.string.charAt(z),We=H.indexOf(ve);if(We>=0&&We<3){if(!I){++z;break}if(--I==0){ve=="("&&(Y=!0);break}}else if(We>=3&&We<6)++I;else if(d.test(ve))Y=!0;else if(/["'\/`]/.test(ve))for(;;--z){if(z==0)return;var ya=s.string.charAt(z-1);if(ya==ve&&s.string.charAt(z-2)!="\\"){z--;break}}else if(Y&&!I){++z;break}}Y&&!I&&(p.fatArrowAt=z)}}var J={atom:!0,number:!0,variable:!0,string:!0,regexp:!0,this:!0,import:!0,"jsonld-keyword":!0};function te(s,p,A,x,I,Y){this.indented=s,this.column=p,this.type=A,this.prev=I,this.info=Y,x!=null&&(this.align=x)}function ne(s,p){if(!l)return!1;for(var A=s.localVars;A;A=A.next)if(A.name==p)return!0;for(var x=s.context;x;x=x.prev)for(var A=x.vars;A;A=A.next)if(A.name==p)return!0}function Q(s,p,A,x,I){var Y=s.cc;for(h.state=s,h.stream=I,h.marked=null,h.cc=Y,h.style=p,s.lexical.hasOwnProperty("align")||(s.lexical.align=!0);;){var z=Y.length?Y.pop():a?W:ee;if(z(A,x)){for(;Y.length&&Y[Y.length-1].lex;)Y.pop()();return h.marked?h.marked:A=="variable"&&ne(s,x)?"variable-2":p}}}var h={state:null,column:null,marked:null,cc:null};function C(){for(var s=arguments.length-1;s>=0;s--)h.cc.push(arguments[s])}function f(){return C.apply(null,arguments),!0}function Ie(s,p){for(var A=p;A;A=A.next)if(A.name==s)return!0;return!1}function Ee(s){var p=h.state;if(h.marked="def",!!l){if(p.context){if(p.lexical.info=="var"&&p.context&&p.context.block){var A=_e(s,p.context);if(A!=null){p.context=A;return}}else if(!Ie(s,p.localVars)){p.localVars=new ke(s,p.localVars);return}}t.globalVars&&!Ie(s,p.globalVars)&&(p.globalVars=new ke(s,p.globalVars))}}function _e(s,p){if(p)if(p.block){var A=_e(s,p.prev);return A?A==p.prev?p:new Ye(A,p.vars,!0):null}else return Ie(s,p.vars)?p:new Ye(p.prev,new ke(s,p.vars),!1);else return null}function xe(s){return s=="public"||s=="private"||s=="protected"||s=="abstract"||s=="readonly"}function Ye(s,p,A){this.prev=s,this.vars=p,this.block=A}function ke(s,p){this.name=s,this.next=p}var Yt=new ke("this",new ke("arguments",null));function Ue(){h.state.context=new Ye(h.state.context,h.state.localVars,!1),h.state.localVars=Yt}function et(){h.state.context=new Ye(h.state.context,h.state.localVars,!0),h.state.localVars=null}function ye(){h.state.localVars=h.state.context.vars,h.state.context=h.state.context.prev}ye.lex=!0;function B(s,p){var A=function(){var x=h.state,I=x.indented;if(x.lexical.type=="stat")I=x.lexical.indented;else for(var Y=x.lexical;Y&&Y.type==")"&&Y.align;Y=Y.prev)I=Y.indented;x.lexical=new te(I,h.stream.column(),s,null,x.lexical,p)};return A.lex=!0,A}function N(){var s=h.state;s.lexical.prev&&(s.lexical.type==")"&&(s.indented=s.lexical.indented),s.lexical=s.lexical.prev)}N.lex=!0;function q(s){function p(A){return A==s?f():s==";"||A=="}"||A==")"||A=="]"?C():f(p)}return p}function ee(s,p){return s=="var"?f(B("vardef",p),Dr,q(";"),N):s=="keyword a"?f(B("form"),kt,ee,N):s=="keyword b"?f(B("form"),ee,N):s=="keyword d"?h.stream.match(/^\s*$/,!1)?f():f(B("stat"),nt,q(";"),N):s=="debugger"?f(q(";")):s=="{"?f(B("}"),et,Hn,N,ye):s==";"?f():s=="if"?(h.state.lexical.info=="else"&&h.state.cc[h.state.cc.length-1]==N&&h.state.cc.pop()(),f(B("form"),kt,ee,N,$i)):s=="function"?f(_t):s=="for"?f(B("form"),et,Ki,ee,ye,N):s=="class"||c&&p=="interface"?(h.marked="keyword",f(B("form",s=="class"?s:p),Yi,N)):s=="variable"?c&&p=="declare"?(h.marked="keyword",f(ee)):c&&(p=="module"||p=="enum"||p=="type")&&h.stream.match(/^\s*\w/,!1)?(h.marked="keyword",p=="enum"?f(Wi):p=="type"?f(Ri,q("operator"),V,q(";")):f(B("form"),Fe,q("{"),B("}"),Hn,N,N)):c&&p=="namespace"?(h.marked="keyword",f(B("form"),W,ee,N)):c&&p=="abstract"?(h.marked="keyword",f(ee)):f(B("stat"),qn):s=="switch"?f(B("form"),kt,q("{"),B("}","switch"),et,Hn,N,N,ye):s=="case"?f(W,q(":")):s=="default"?f(q(":")):s=="catch"?f(B("form"),Ue,tt,ee,N,ye):s=="export"?f(B("stat"),ma,N):s=="import"?f(B("stat"),ga,N):s=="async"?f(ee):p=="@"?f(W,ee):C(B("stat"),W,q(";"),N)}function tt(s){if(s=="(")return f(Dt,q(")"))}function W(s,p){return Mn(s,p,!1)}function je(s,p){return Mn(s,p,!0)}function kt(s){return s!="("?C():f(B(")"),nt,q(")"),N)}function Mn(s,p,A){if(h.state.fatArrowAt==h.stream.start){var x=A?In:Bn;if(s=="(")return f(Ue,B(")"),se(Dt,")"),N,q("=>"),x,ye);if(s=="variable")return C(Ue,Fe,q("=>"),x,ye)}var I=A?ht:rt;return J.hasOwnProperty(s)?f(I):s=="function"?f(_t,I):s=="class"||c&&p=="interface"?(h.marked="keyword",f(B("form"),da,N)):s=="keyword c"||s=="async"?f(A?je:W):s=="("?f(B(")"),nt,q(")"),N,I):s=="operator"||s=="spread"?f(A?je:W):s=="["?f(B("]"),Aa,N,I):s=="{"?un(Ct,"}",null,I):s=="quasi"?C(St,I):s=="new"?f(it(A)):f()}function nt(s){return s.match(/[;\}\)\],]/)?C():C(W)}function rt(s,p){return s==","?f(nt):ht(s,p,!1)}function ht(s,p,A){var x=A==!1?rt:ht,I=A==!1?W:je;if(s=="=>")return f(Ue,A?In:Bn,ye);if(s=="operator")return/\+\+|--/.test(p)||c&&p=="!"?f(x):c&&p=="<"&&h.stream.match(/^([^<>]|<[^<>]*>)*>\s*\(/,!1)?f(B(">"),se(V,">"),N,x):p=="?"?f(W,q(":"),I):f(I);if(s=="quasi")return C(St,x);if(s!=";"){if(s=="(")return un(je,")","call",x);if(s==".")return f(pn,x);if(s=="[")return f(B("]"),nt,q("]"),N,x);if(c&&p=="as")return h.marked="keyword",f(V,x);if(s=="regexp")return h.state.lastType=h.marked="operator",h.stream.backUp(h.stream.pos-h.stream.start-1),f(I)}}function St(s,p){return s!="quasi"?C():p.slice(p.length-2)!="${"?f(St):f(nt,On)}function On(s){if(s=="}")return h.marked="string-2",h.state.tokenize=D,f(St)}function Bn(s){return F(h.stream,h.state),C(s=="{"?ee:W)}function In(s){return F(h.stream,h.state),C(s=="{"?ee:je)}function it(s){return function(p){return p=="."?f(s?Fn:Ut):p=="variable"&&c?f(ca,s?ht:rt):C(s?je:W)}}function Ut(s,p){if(p=="target")return h.marked="keyword",f(rt)}function Fn(s,p){if(p=="target")return h.marked="keyword",f(ht)}function qn(s){return s==":"?f(N,ee):C(rt,q(";"),N)}function pn(s){if(s=="variable")return h.marked="property",f()}function Ct(s,p){if(s=="async")return h.marked="property",f(Ct);if(s=="variable"||h.style=="keyword"){if(h.marked="property",p=="get"||p=="set")return f(Ln);var A;return c&&h.state.fatArrowAt==h.stream.start&&(A=h.stream.match(/^\s*:\s*/,!1))&&(h.state.fatArrowAt=h.stream.pos+A[0].length),f(Ge)}else{if(s=="number"||s=="string")return h.marked=o?"property":h.style+" property",f(Ge);if(s=="jsonld-keyword")return f(Ge);if(c&&xe(p))return h.marked="keyword",f(Ct);if(s=="[")return f(W,Gt,q("]"),Ge);if(s=="spread")return f(je,Ge);if(p=="*")return h.marked="keyword",f(Ct);if(s==":")return C(Ge)}}function Ln(s){return s!="variable"?C(Ge):(h.marked="property",f(_t))}function Ge(s){if(s==":")return f(je);if(s=="(")return C(_t)}function se(s,p,A){function x(I,Y){if(A?A.indexOf(I)>-1:I==","){var z=h.state.lexical;return z.info=="call"&&(z.pos=(z.pos||0)+1),f(function(ve,We){return ve==p||We==p?C():C(s)},x)}return I==p||Y==p?f():A&&A.indexOf(";")>-1?C(s):f(q(p))}return function(I,Y){return I==p||Y==p?f():C(s,x)}}function un(s,p,A){for(var x=3;x"),V);if(s=="quasi")return C(Sr,ot)}function aa(s){if(s=="=>")return f(V)}function kr(s){return s.match(/[\}\)\]]/)?f():s==","||s==";"?f(kr):C(fn,kr)}function fn(s,p){if(s=="variable"||h.style=="keyword")return h.marked="property",f(fn);if(p=="?"||s=="number"||s=="string")return f(fn);if(s==":")return f(V);if(s=="[")return f(q("variable"),ia,q("]"),fn);if(s=="(")return C(Vt,fn);if(!s.match(/[;\}\)\],]/))return f()}function Sr(s,p){return s!="quasi"?C():p.slice(p.length-2)!="${"?f(Sr):f(V,sa)}function sa(s){if(s=="}")return h.marked="string-2",h.state.tokenize=D,f(Sr)}function Cr(s,p){return s=="variable"&&h.stream.match(/^\s*[?:]/,!1)||p=="?"?f(Cr):s==":"?f(V):s=="spread"?f(Cr):C(V)}function ot(s,p){if(p=="<")return f(B(">"),se(V,">"),N,ot);if(p=="|"||s=="."||p=="&")return f(V);if(s=="[")return f(V,q("]"),ot);if(p=="extends"||p=="implements")return h.marked="keyword",f(V);if(p=="?")return f(V,q(":"),V)}function ca(s,p){if(p=="<")return f(B(">"),se(V,">"),N,ot)}function $n(){return C(V,la)}function la(s,p){if(p=="=")return f(V)}function Dr(s,p){return p=="enum"?(h.marked="keyword",f(Wi)):C(Fe,Gt,At,ua)}function Fe(s,p){if(c&&xe(p))return h.marked="keyword",f(Fe);if(s=="variable")return Ee(p),f();if(s=="spread")return f(Fe);if(s=="[")return un(pa,"]");if(s=="{")return un(Hi,"}")}function Hi(s,p){return s=="variable"&&!h.stream.match(/^\s*:/,!1)?(Ee(p),f(At)):(s=="variable"&&(h.marked="property"),s=="spread"?f(Fe):s=="}"?C():s=="["?f(W,q("]"),q(":"),Hi):f(q(":"),Fe,At))}function pa(){return C(Fe,At)}function At(s,p){if(p=="=")return f(je)}function ua(s){if(s==",")return f(Dr)}function $i(s,p){if(s=="keyword b"&&p=="else")return f(B("form","else"),ee,N)}function Ki(s,p){if(p=="await")return f(Ki);if(s=="(")return f(B(")"),fa,N)}function fa(s){return s=="var"?f(Dr,Wt):s=="variable"?f(Wt):C(Wt)}function Wt(s,p){return s==")"?f():s==";"?f(Wt):p=="in"||p=="of"?(h.marked="keyword",f(W,Wt)):C(W,Wt)}function _t(s,p){if(p=="*")return h.marked="keyword",f(_t);if(s=="variable")return Ee(p),f(_t);if(s=="(")return f(Ue,B(")"),se(Dt,")"),N,Li,ee,ye);if(c&&p=="<")return f(B(">"),se($n,">"),N,_t)}function Vt(s,p){if(p=="*")return h.marked="keyword",f(Vt);if(s=="variable")return Ee(p),f(Vt);if(s=="(")return f(Ue,B(")"),se(Dt,")"),N,Li,ye);if(c&&p=="<")return f(B(">"),se($n,">"),N,Vt)}function Ri(s,p){if(s=="keyword"||s=="variable")return h.marked="type",f(Ri);if(p=="<")return f(B(">"),se($n,">"),N)}function Dt(s,p){return p=="@"&&f(W,Dt),s=="spread"?f(Dt):c&&xe(p)?(h.marked="keyword",f(Dt)):c&&s=="this"?f(Gt,At):C(Fe,Gt,At)}function da(s,p){return s=="variable"?Yi(s,p):Kn(s,p)}function Yi(s,p){if(s=="variable")return Ee(p),f(Kn)}function Kn(s,p){if(p=="<")return f(B(">"),se($n,">"),N,Kn);if(p=="extends"||p=="implements"||c&&s==",")return p=="implements"&&(h.marked="keyword"),f(c?V:W,Kn);if(s=="{")return f(B("}"),at,N)}function at(s,p){if(s=="async"||s=="variable"&&(p=="static"||p=="get"||p=="set"||c&&xe(p))&&h.stream.match(/^\s+[\w$\xa1-\uffff]/,!1))return h.marked="keyword",f(at);if(s=="variable"||h.style=="keyword")return h.marked="property",f(dn,at);if(s=="number"||s=="string")return f(dn,at);if(s=="[")return f(W,Gt,q("]"),dn,at);if(p=="*")return h.marked="keyword",f(at);if(c&&s=="(")return C(Vt,at);if(s==";"||s==",")return f(at);if(s=="}")return f();if(p=="@")return f(W,at)}function dn(s,p){if(p=="!"||p=="?")return f(dn);if(s==":")return f(V,At);if(p=="=")return f(je);var A=h.state.lexical.prev,x=A&&A.info=="interface";return C(x?Vt:_t)}function ma(s,p){return p=="*"?(h.marked="keyword",f(Pr,q(";"))):p=="default"?(h.marked="keyword",f(W,q(";"))):s=="{"?f(se(Ui,"}"),Pr,q(";")):C(ee)}function Ui(s,p){if(p=="as")return h.marked="keyword",f(q("variable"));if(s=="variable")return C(je,Ui)}function ga(s){return s=="string"?f():s=="("?C(W):s=="."?C(rt):C(Rn,Gi,Pr)}function Rn(s,p){return s=="{"?un(Rn,"}"):(s=="variable"&&Ee(p),p=="*"&&(h.marked="keyword"),f(ha))}function Gi(s){if(s==",")return f(Rn,Gi)}function ha(s,p){if(p=="as")return h.marked="keyword",f(Rn)}function Pr(s,p){if(p=="from")return h.marked="keyword",f(W)}function Aa(s){return s=="]"?f():C(se(je,"]"))}function Wi(){return C(B("form"),Fe,q("{"),B("}"),se(_a,"}"),N,N)}function _a(){return C(Fe,At)}function xa(s,p){return s.lastType=="operator"||s.lastType==","||_.test(p.charAt(0))||/[,.]/.test(p.charAt(0))}function Vi(s,p,A){return p.tokenize==O&&/^(?:operator|sof|keyword [bcd]|case|new|export|default|spread|[\[{}\(,;:]|=>)$/.test(p.lastType)||p.lastType=="quasi"&&/\{\s*$/.test(s.string.slice(0,s.pos-(A||0)))}return{startState:function(s){var p={tokenize:O,lastType:"sof",cc:[],lexical:new te((s||0)-r,0,"block",!1),localVars:t.localVars,context:t.localVars&&new Ye(null,null,!1),indented:s||0};return t.globalVars&&typeof t.globalVars=="object"&&(p.globalVars=t.globalVars),p},token:function(s,p){if(s.sol()&&(p.lexical.hasOwnProperty("align")||(p.lexical.align=!1),p.indented=s.indentation(),F(s,p)),p.tokenize!=K&&s.eatSpace())return null;var A=p.tokenize(s,p);return S=="comment"?A:(p.lastType=S=="operator"&&(k=="++"||k=="--")?"incdec":S,Q(p,A,S,k,s))},indent:function(s,p){if(s.tokenize==K||s.tokenize==D)return n.Pass;if(s.tokenize!=O)return 0;var A=p&&p.charAt(0),x=s.lexical,I;if(!/^\s*else\b/.test(p))for(var Y=s.cc.length-1;Y>=0;--Y){var z=s.cc[Y];if(z==N)x=x.prev;else if(z!=$i&&z!=ye)break}for(;(x.type=="stat"||x.type=="form")&&(A=="}"||(I=s.cc[s.cc.length-1])&&(I==rt||I==ht)&&!/^[,\.=+\-*:?[\(]/.test(p));)x=x.prev;i&&x.type==")"&&x.prev.type=="stat"&&(x=x.prev);var ve=x.type,We=A==ve;return ve=="vardef"?x.indented+(s.lastType=="operator"||s.lastType==","?x.info.length+1:0):ve=="form"&&A=="{"?x.indented:ve=="form"?x.indented+r:ve=="stat"?x.indented+(xa(s,p)?i||r:0):x.info=="switch"&&!We&&t.doubleIndentSwitch!=!1?x.indented+(/^(?:case|default)\b/.test(p)?r:2*r):x.align?x.column+(We?0:1):x.indented+(We?0:r)},electricInput:/^\s*(?:case .*?:|default:|\{|\})$/,blockCommentStart:a?null:"/*",blockCommentEnd:a?null:"*/",blockCommentContinue:a?null:" * ",lineComment:a?null:"//",fold:"brace",closeBrackets:"()[]{}''\"\"``",helperType:a?"json":"javascript",jsonldMode:o,jsonMode:a,expressionAllowed:Vi,skipExpression:function(s){Q(s,"atom","atom","true",new n.StringStream("",2,null))}}}),n.registerHelper("wordChars","javascript",/[\w$]/),n.defineMIME("text/javascript","javascript"),n.defineMIME("text/ecmascript","javascript"),n.defineMIME("application/javascript","javascript"),n.defineMIME("application/x-javascript","javascript"),n.defineMIME("application/ecmascript","javascript"),n.defineMIME("application/json",{name:"javascript",json:!0}),n.defineMIME("application/x-json",{name:"javascript",json:!0}),n.defineMIME("application/manifest+json",{name:"javascript",json:!0}),n.defineMIME("application/ld+json",{name:"javascript",jsonld:!0}),n.defineMIME("text/typescript",{name:"javascript",typescript:!0}),n.defineMIME("application/typescript",{name:"javascript",typescript:!0})});(function(n){n(window.CodeMirror)})(function(n){"use strict";n.customOverlayMode=function(e,t,r){return{startState:function(){return{base:n.startState(e),overlay:n.startState(t),basePos:0,baseCur:null,overlayPos:0,overlayCur:null,streamSeen:null}},copyState:function(i){return{base:n.copyState(e,i.base),overlay:n.copyState(t,i.overlay),basePos:i.basePos,baseCur:null,overlayPos:i.overlayPos,overlayCur:null}},token:function(i,o){return(i!=o.streamSeen||Math.min(o.basePos,o.overlayPos)0&&(this.activeEditorExtensions.pop(),this.plugin.app.workspace.updateOptions())}async jump_to_next_cursor_location(e=null,t=!1){t&&!this.plugin.settings.auto_jump_to_cursor||e&&vt(this.plugin.app)!==e||await this.cursor_jumper.jump_to_next_cursor_location()}async registerCodeMirrorMode(){if(!this.desktopShouldHighlight()&&!this.mobileShouldHighlight())return;let e=window.CodeMirror.getMode({},"javascript");if(e.name==="null"){oe(new P("Javascript syntax mode couldn't be found, can't enable syntax highlighting."));return}let t=window.CodeMirror.customOverlayMode;if(t==null){oe(new P("Couldn't find customOverlayMode, can't enable syntax highlighting."));return}window.CodeMirror.defineMode(ra,function(r){let i={startState:function(){return{...window.CodeMirror.startState(e),inCommand:!1,tag_class:"",freeLine:!1}},copyState:function(o){return{...window.CodeMirror.startState(e),inCommand:o.inCommand,tag_class:o.tag_class,freeLine:o.freeLine}},blankLine:function(o){return o.inCommand?"line-background-templater-command-bg":null},token:function(o,a){if(o.sol()&&a.inCommand&&(a.freeLine=!0),a.inCommand){let c="";if(o.match(/[-_]{0,1}%>/,!0)){a.inCommand=!1,a.freeLine=!1;let m=a.tag_class;return a.tag_class="",`line-${Ii} ${Bi} ${ic} ${m}`}let d=e.token&&e.token(o,a);return o.peek()==null&&a.freeLine&&(c+=" line-background-templater-command-bg"),a.freeLine||(c+=` line-${Ii}`),`${c} ${Bi} ${d}`}let l=o.match(/<%[-_]{0,1}\s*([*+]{0,1})/,!0);if(l!=null){switch(l[1]){case"*":a.tag_class=ac;break;default:a.tag_class=oc;break}return a.inCommand=!0,`line-${Ii} ${Bi} ${rc} ${a.tag_class}`}for(;o.next()!=null&&!o.match(/<%/,!1););return null}};return t(window.CodeMirror.getMode(r,"hypermd"),i)})}updateEditorIntellisenseSetting(e){this.autocomplete.updateAutocompleteIntellisenseSetting(e)}};var qi=class extends Tr.Plugin{async onload(){await this.load_settings(),this.templater=new cn(this),await this.templater.setup(),this.editor_handler=new Fi(this),await this.editor_handler.setup(),this.fuzzy_suggester=new ci(this),this.event_handler=new br(this,this.templater,this.settings),this.event_handler.setup(),this.command_handler=new Si(this),this.command_handler.setup(),(0,Tr.addIcon)("templater-icon",Ko),this.addRibbonIcon("templater-icon","Templater",async()=>{this.fuzzy_suggester.insert_template()}).setAttribute("id","rb-templater-icon"),this.addSettingTab(new si(this)),this.app.workspace.onLayoutReady(()=>{this.templater.execute_startup_scripts()})}async onExternalSettingsChange(){await this.load_settings()}onunload(){this.templater.functions_generator.teardown()}async save_settings(){await this.saveData(this.settings),this.editor_handler.updateEditorIntellisenseSetting(this.settings.intellisense_render)}async load_settings(){this.settings=Object.assign({},Ho,await this.loadData())}}; +selected values: <% selectedValues %>`},{name:"Default value for the suggester",example:`<%* +let selectedValue = await tp.system.multi_suggester(["Happy", "Sad", "Confused"], ["Happy", "Sad", "Confused"], false, "", undefined, ["Happy", "Confused"]); +%> +# <% selectedValue %> +selected value: <% selectedValue %>`}]}}},web:{name:"web",description:"This modules contains every internal function related to the web (making web requests).",functions:{daily_quote:{name:"daily_quote",description:"Retrieves and parses the daily quote from `https://github.com/Zachatoo/quotes-database` as a callout.",definition:"tp.web.daily_quote()",examples:[{name:"Daily quote",example:"<% await tp.web.daily_quote() %>"}]},random_picture:{name:"random_picture",description:"Gets a random image from `https://unsplash.com/`.",definition:"tp.web.random_picture(size?: string, query?: string, include_size?: boolean)",args:[{name:"size",description:"Image size in the format `x`."},{name:"query",description:"Limits selection to photos matching a search term. Multiple search terms can be passed separated by a comma."},{name:"include_size",description:"Optional argument to include the specified size in the image link markdown. Defaults to false."}],examples:[{name:"Random picture",example:"<% await tp.web.random_picture() %>"},{name:"Random picture with size",example:'<% await tp.web.random_picture("200x200") %>'},{name:"Random picture with size and query",example:'<% await tp.web.random_picture("200x200", "landscape,water") %>'}]},request:{name:"request",description:"Makes a HTTP request to the specified URL. Optionally, you can specify a path to extract specific data from the response.",definition:"tp.web.request(url: string, path?: string)",args:[{name:"url",description:"The URL to which the HTTP request will be made."},{name:"path",description:"A path within the response JSON to extract specific data."}],examples:[{name:"Simple request",example:'<% await tp.web.request("https://jsonplaceholder.typicode.com/todos/1") %>'},{name:"Request with path",example:'<% await tp.web.request("https://jsonplaceholder.typicode.com/todos", "0.title") %>'}]}}}},di={tp:Uo};var Go=["app","config","date","file","frontmatter","hooks","obsidian","system","user","web"],Ro=new Set(Go);function gi(r){return typeof r=="string"&&Ro.has(r)}function mr(r){return!!(r.definition||r.returns||r.args)}var hr=class{constructor(e){this.plugin=e;this.documentation=di}get_all_modules_documentation(){let e=this.documentation.tp;return(!this.plugin.settings||!this.plugin.settings.user_scripts_folder)&&(e=Object.values(e).filter(t=>t.name!=="user")),Object.values(e).map(t=>(t.queryKey=t.name,t))}async get_all_functions_documentation(e,t){if(e==="app")return this.get_app_functions_documentation(this.plugin.app,t);if(e==="user"){if(!this.plugin.settings||!this.plugin.settings.user_scripts_folder)return;let n=await se(async()=>{let i=je(this.plugin.app,this.plugin.settings.user_scripts_folder).filter(s=>s.extension=="js");return await Wr(this.plugin.app,i)},"User Scripts folder doesn't exist");return!n||n.length===0?void 0:n.reduce((i,o)=>o.extension!=="js"?i:[...i,{name:o.basename,queryKey:o.basename,definition:"",description:o.description,returns:o.returns,args:o.arguments.reduce((u,l)=>(u[l.name]={name:l.name,description:l.description},u),{}),example:""}],[])}if(!!this.documentation.tp[e].functions)return Object.values(this.documentation.tp[e].functions).map(n=>(n.queryKey=n.name,n))}get_app_functions_documentation(e,t){if(!Et(e))return[];let n=t.split(".");if(n.length===0)return[];let i=e;for(let l=0;l[a-z]*)?(?\.(?[a-zA-Z_.]*)?)?$/;this.documentation=new hr(e),this.intellisense_render_setting=e.settings.intellisense_render}onTrigger(e,t,n){let i=t.getRange({line:e.line,ch:0},{line:e.line,ch:e.ch}),o=this.tp_keyword_regex.exec(i);if(!o)return null;let s,u=o.groups&&o.groups.module||"";if(this.module_name=u,o.groups&&o.groups.fn_trigger){if(u==""||!gi(u))return null;this.function_trigger=!0,this.function_name=o.groups.fn||"",s=this.function_name}else this.function_trigger=!1,s=this.module_name;let l={start:{line:e.line,ch:e.ch-s.length},end:{line:e.line,ch:e.ch},query:s};return this.latest_trigger_info=l,l}async getSuggestions(e){let t;return this.module_name&&this.function_trigger?t=await this.documentation.get_all_functions_documentation(this.module_name,this.function_name):t=this.documentation.get_all_modules_documentation(),t?t.filter(n=>n.queryKey.toLowerCase().startsWith(e.query.toLowerCase())):[]}renderSuggestion(e,t){if(t.createEl("b",{text:e.name}),mr(e)){if(e.args&&this.getNumberOfArguments(e.args)>0&&Zr(this.intellisense_render_setting)){t.createEl("p",{text:"Parameter list:"});let n=t.createEl("ol");for(let[i,o]of Object.entries(e.args))Un(n,i,o.description)}e.returns&&Xr(this.intellisense_render_setting)&&Un(t,"Returns",e.returns)}this.function_trigger&&mr(e)&&t.createEl("code",{text:e.definition}),e.description&&ei(this.intellisense_render_setting)&&t.createEl("div",{text:e.description})}selectSuggestion(e,t){let n=this.app.workspace.activeEditor;if(!(!n||!n.editor)&&(n.editor.replaceRange(e.queryKey,this.latest_trigger_info.start,this.latest_trigger_info.end),this.latest_trigger_info.start.ch==this.latest_trigger_info.end.ch)){let i=this.latest_trigger_info.end;i.ch+=e.queryKey.length,n.editor.setCursor(i)}}getNumberOfArguments(e){try{return new Map(Object.entries(e)).size}catch{return 0}}updateAutocompleteIntellisenseSetting(e){this.intellisense_render_setting=e}};(function(r){r(window.CodeMirror)})(function(r){"use strict";r.defineMode("javascript",function(e,t){var n=e.indentUnit,i=t.statementIndent,o=t.jsonld,s=t.json||o,u=t.trackScope!==!1,l=t.typescript,d=t.wordCharacters||/[\w$\xa1-\uffff]/,A=function(){function a(te){return{type:te,style:"keyword"}}var c=a("keyword a"),m=a("keyword b"),_=a("keyword c"),C=a("keyword d"),O=a("operator"),$={type:"atom",style:"atom"};return{if:a("if"),while:c,with:c,else:m,do:m,try:m,finally:m,return:C,break:C,continue:C,new:a("new"),delete:_,void:_,throw:_,debugger:a("debugger"),var:a("var"),const:a("var"),let:a("var"),function:a("function"),catch:a("catch"),for:a("for"),switch:a("switch"),case:a("case"),default:a("default"),in:O,typeof:O,instanceof:O,true:$,false:$,null:$,undefined:$,NaN:$,Infinity:$,this:a("this"),class:a("class"),super:a("atom"),yield:_,export:a("export"),import:a("import"),extends:_,await:_}}(),w=/[+\-*&%=<>!?|~^@]/,E=/^@(context|id|value|language|type|container|list|set|reverse|index|base|vocab|graph)"/;function M(a){for(var c=!1,m,_=!1;(m=a.next())!=null;){if(!c){if(m=="/"&&!_)return;m=="["?_=!0:_&&m=="]"&&(_=!1)}c=!c&&m=="\\"}}var F,K;function D(a,c,m){return F=a,K=m,c}function G(a,c){var m=a.next();if(m=='"'||m=="'")return c.tokenize=ie(m),c.tokenize(a,c);if(m=="."&&a.match(/^\d[\d_]*(?:[eE][+\-]?[\d_]+)?/))return D("number","number");if(m=="."&&a.match(".."))return D("spread","meta");if(/[\[\]{}\(\),;\:\.]/.test(m))return D(m);if(m=="="&&a.eat(">"))return D("=>","operator");if(m=="0"&&a.match(/^(?:x[\dA-Fa-f_]+|o[0-7_]+|b[01_]+)n?/))return D("number","number");if(/\d/.test(m))return a.match(/^[\d_]*(?:n|(?:\.[\d_]*)?(?:[eE][+\-]?[\d_]+)?)?/),D("number","number");if(m=="/")return a.eat("*")?(c.tokenize=oe,oe(a,c)):a.eat("/")?(a.skipToEnd(),D("comment","comment")):Br(a,c,1)?(M(a),a.match(/^\b(([gimyus])(?![gimyus]*\2))+\b/),D("regexp","string-2")):(a.eat("="),D("operator","operator",a.current()));if(m=="`")return c.tokenize=z,z(a,c);if(m=="#"&&a.peek()=="!")return a.skipToEnd(),D("meta","meta");if(m=="#"&&a.eatWhile(d))return D("variable","property");if(m=="<"&&a.match("!--")||m=="-"&&a.match("->")&&!/\S/.test(a.string.slice(0,a.start)))return a.skipToEnd(),D("comment","comment");if(w.test(m))return(m!=">"||!c.lexical||c.lexical.type!=">")&&(a.eat("=")?(m=="!"||m=="=")&&a.eat("="):/[<>*+\-|&?]/.test(m)&&(a.eat(m),m==">"&&a.eat(m))),m=="?"&&a.eat(".")?D("."):D("operator","operator",a.current());if(d.test(m)){a.eatWhile(d);var _=a.current();if(c.lastType!="."){if(A.propertyIsEnumerable(_)){var C=A[_];return D(C.type,C.style,_)}if(_=="async"&&a.match(/^(\s|\/\*([^*]|\*(?!\/))*?\*\/)*[\[\(\w]/,!1))return D("async","keyword",_)}return D("variable","variable",_)}}function ie(a){return function(c,m){var _=!1,C;if(o&&c.peek()=="@"&&c.match(E))return m.tokenize=G,D("jsonld-keyword","meta");for(;(C=c.next())!=null&&!(C==a&&!_);)_=!_&&C=="\\";return _||(m.tokenize=G),D("string","string")}}function oe(a,c){for(var m=!1,_;_=a.next();){if(_=="/"&&m){c.tokenize=G;break}m=_=="*"}return D("comment","comment")}function z(a,c){for(var m=!1,_;(_=a.next())!=null;){if(!m&&(_=="`"||_=="$"&&a.eat("{"))){c.tokenize=G;break}m=!m&&_=="\\"}return D("quasi","string-2",a.current())}var Ke="([{}])";function fe(a,c){c.fatArrowAt&&(c.fatArrowAt=null);var m=a.string.indexOf("=>",a.start);if(!(m<0)){if(l){var _=/:\s*(?:\w+(?:<[^>]*>|\[\])?|\{[^}]*\})\s*$/.exec(a.string.slice(a.start,m));_&&(m=_.index)}for(var C=0,O=!1,$=m-1;$>=0;--$){var te=a.string.charAt($),_e=Ke.indexOf(te);if(_e>=0&&_e<3){if(!C){++$;break}if(--C==0){te=="("&&(O=!0);break}}else if(_e>=3&&_e<6)++C;else if(d.test(te))O=!0;else if(/["'\/`]/.test(te))for(;;--$){if($==0)return;var Ui=a.string.charAt($-1);if(Ui==te&&a.string.charAt($-2)!="\\"){$--;break}}else if(O&&!C){++$;break}}O&&!C&&(c.fatArrowAt=$)}}var xn={atom:!0,number:!0,variable:!0,string:!0,regexp:!0,this:!0,import:!0,"jsonld-keyword":!0};function Pt(a,c,m,_,C,O){this.indented=a,this.column=c,this.type=m,this.prev=C,this.info=O,_!=null&&(this.align=_)}function yn(a,c){if(!u)return!1;for(var m=a.localVars;m;m=m.next)if(m.name==c)return!0;for(var _=a.context;_;_=_.prev)for(var m=_.vars;m;m=m.next)if(m.name==c)return!0}function dt(a,c,m,_,C){var O=a.cc;for(h.state=a,h.stream=C,h.marked=null,h.cc=O,h.style=c,a.lexical.hasOwnProperty("align")||(a.lexical.align=!0);;){var $=O.length?O.pop():s?Y:X;if($(m,_)){for(;O.length&&O[O.length-1].lex;)O.pop()();return h.marked?h.marked:m=="variable"&&yn(a,_)?"variable-2":c}}}var h={state:null,column:null,marked:null,cc:null};function k(){for(var a=arguments.length-1;a>=0;a--)h.cc.push(arguments[a])}function f(){return k.apply(null,arguments),!0}function jn(a,c){for(var m=c;m;m=m.next)if(m.name==a)return!0;return!1}function Qe(a){var c=h.state;if(h.marked="def",!!u){if(c.context){if(c.lexical.info=="var"&&c.context&&c.context.block){var m=vr(a,c.context);if(m!=null){c.context=m;return}}else if(!jn(a,c.localVars)){c.localVars=new mt(a,c.localVars);return}}t.globalVars&&!jn(a,c.globalVars)&&(c.globalVars=new mt(a,c.globalVars))}}function vr(a,c){if(c)if(c.block){var m=vr(a,c.prev);return m?m==c.prev?c:new gt(m,c.vars,!0):null}else return jn(a,c.vars)?c:new gt(c.prev,new mt(a,c.vars),!1);else return null}function Nt(a){return a=="public"||a=="private"||a=="protected"||a=="abstract"||a=="readonly"}function gt(a,c,m){this.prev=a,this.vars=c,this.block=m}function mt(a,c){this.name=a,this.next=c}var xi=new mt("this",new mt("arguments",null));function Xe(){h.state.context=new gt(h.state.context,h.state.localVars,!1),h.state.localVars=xi}function wn(){h.state.context=new gt(h.state.context,h.state.localVars,!0),h.state.localVars=null}function de(){h.state.localVars=h.state.context.vars,h.state.context=h.state.context.prev}de.lex=!0;function P(a,c){var m=function(){var _=h.state,C=_.indented;if(_.lexical.type=="stat")C=_.lexical.indented;else for(var O=_.lexical;O&&O.type==")"&&O.align;O=O.prev)C=O.indented;_.lexical=new Pt(C,h.stream.column(),a,null,_.lexical,c)};return m.lex=!0,m}function S(){var a=h.state;a.lexical.prev&&(a.lexical.type==")"&&(a.indented=a.lexical.indented),a.lexical=a.lexical.prev)}S.lex=!0;function B(a){function c(m){return m==a?f():a==";"||m=="}"||m==")"||m=="]"?k():f(c)}return c}function X(a,c){return a=="var"?f(P("vardef",c),kn,B(";"),S):a=="keyword a"?f(P("form"),vn,X,S):a=="keyword b"?f(P("form"),X,S):a=="keyword d"?h.stream.match(/^\s*$/,!1)?f():f(P("stat"),Ze,B(";"),S):a=="debugger"?f(B(";")):a=="{"?f(P("}"),wn,Ft,S,de):a==";"?f():a=="if"?(h.state.lexical.info=="else"&&h.state.cc[h.state.cc.length-1]==S&&h.state.cc.pop()(),f(P("form"),vn,X,S,Cr)):a=="function"?f(Fe):a=="for"?f(P("form"),wn,Dr,X,de,S):a=="class"||l&&c=="interface"?(h.marked="keyword",f(P("form",a=="class"?a:c),Nr,S)):a=="variable"?l&&c=="declare"?(h.marked="keyword",f(X)):l&&(c=="module"||c=="enum"||c=="type")&&h.stream.match(/^\s*\w/,!1)?(h.marked="keyword",c=="enum"?f(Fr):c=="type"?f(Pr,B("operator"),H,B(";")):f(P("form"),ge,B("{"),P("}"),Ft,S,S)):l&&c=="namespace"?(h.marked="keyword",f(P("form"),Y,X,S)):l&&c=="abstract"?(h.marked="keyword",f(X)):f(P("stat"),Ti):a=="switch"?f(P("form"),vn,B("{"),P("}","switch"),wn,Ft,S,S,de):a=="case"?f(Y,B(":")):a=="default"?f(B(":")):a=="catch"?f(P("form"),Xe,yi,X,S,de):a=="export"?f(P("stat"),qi,S):a=="import"?f(P("stat"),Li,S):a=="async"?f(X):c=="@"?f(Y,X):k(P("stat"),Y,B(";"),S)}function yi(a){if(a=="(")return f(Ge,B(")"))}function Y(a,c){return br(a,c,!1)}function ae(a,c){return br(a,c,!0)}function vn(a){return a!="("?k():f(P(")"),Ze,B(")"),S)}function br(a,c,m){if(h.state.fatArrowAt==h.stream.start){var _=m?Er:Tr;if(a=="(")return f(Xe,P(")"),Z(Ge,")"),S,B("=>"),_,de);if(a=="variable")return k(Xe,ge,B("=>"),_,de)}var C=m?et:Ye;return xn.hasOwnProperty(a)?f(C):a=="function"?f(Fe,C):a=="class"||l&&c=="interface"?(h.marked="keyword",f(P("form"),Oi,S)):a=="keyword c"||a=="async"?f(m?ae:Y):a=="("?f(P(")"),Ze,B(")"),S,C):a=="operator"||a=="spread"?f(m?ae:Y):a=="["?f(P("]"),$i,S,C):a=="{"?ht(It,"}",null,C):a=="quasi"?k(Mt,C):a=="new"?f(wi(m)):f()}function Ze(a){return a.match(/[;\}\)\],]/)?k():k(Y)}function Ye(a,c){return a==","?f(Ze):et(a,c,!1)}function et(a,c,m){var _=m==!1?Ye:et,C=m==!1?Y:ae;if(a=="=>")return f(Xe,m?Er:Tr,de);if(a=="operator")return/\+\+|--/.test(c)||l&&c=="!"?f(_):l&&c=="<"&&h.stream.match(/^([^<>]|<[^<>]*>)*>\s*\(/,!1)?f(P(">"),Z(H,">"),S,_):c=="?"?f(Y,B(":"),C):f(C);if(a=="quasi")return k(Mt,_);if(a!=";"){if(a=="(")return ht(ae,")","call",_);if(a==".")return f(Ei,_);if(a=="[")return f(P("]"),Ze,B("]"),S,_);if(l&&c=="as")return h.marked="keyword",f(H,_);if(a=="regexp")return h.state.lastType=h.marked="operator",h.stream.backUp(h.stream.pos-h.stream.start-1),f(C)}}function Mt(a,c){return a!="quasi"?k():c.slice(c.length-2)!="${"?f(Mt):f(Ze,ji)}function ji(a){if(a=="}")return h.marked="string-2",h.state.tokenize=z,f(Mt)}function Tr(a){return fe(h.stream,h.state),k(a=="{"?X:Y)}function Er(a){return fe(h.stream,h.state),k(a=="{"?X:ae)}function wi(a){return function(c){return c=="."?f(a?bi:vi):c=="variable"&&l?f(Ni,a?et:Ye):k(a?ae:Y)}}function vi(a,c){if(c=="target")return h.marked="keyword",f(Ye)}function bi(a,c){if(c=="target")return h.marked="keyword",f(et)}function Ti(a){return a==":"?f(S,X):k(Ye,B(";"),S)}function Ei(a){if(a=="variable")return h.marked="property",f()}function It(a,c){if(a=="async")return h.marked="property",f(It);if(a=="variable"||h.style=="keyword"){if(h.marked="property",c=="get"||c=="set")return f(ki);var m;return l&&h.state.fatArrowAt==h.stream.start&&(m=h.stream.match(/^\s*:\s*/,!1))&&(h.state.fatArrowAt=h.stream.pos+m[0].length),f(Ue)}else{if(a=="number"||a=="string")return h.marked=o?"property":h.style+" property",f(Ue);if(a=="jsonld-keyword")return f(Ue);if(l&&Nt(c))return h.marked="keyword",f(It);if(a=="[")return f(Y,tt,B("]"),Ue);if(a=="spread")return f(ae,Ue);if(c=="*")return h.marked="keyword",f(It);if(a==":")return k(Ue)}}function ki(a){return a!="variable"?k(Ue):(h.marked="property",f(Fe))}function Ue(a){if(a==":")return f(ae);if(a=="(")return k(Fe)}function Z(a,c,m){function _(C,O){if(m?m.indexOf(C)>-1:C==","){var $=h.state.lexical;return $.info=="call"&&($.pos=($.pos||0)+1),f(function(te,_e){return te==c||_e==c?k():k(a)},_)}return C==c||O==c?f():m&&m.indexOf(";")>-1?k(a):f(B(c))}return function(C,O){return C==c||O==c?f():k(a,_)}}function ht(a,c,m){for(var _=3;_"),H);if(a=="quasi")return k(Tn,Te)}function Di(a){if(a=="=>")return f(H)}function bn(a){return a.match(/[\}\)\]]/)?f():a==","||a==";"?f(bn):k(At,bn)}function At(a,c){if(a=="variable"||h.style=="keyword")return h.marked="property",f(At);if(c=="?"||a=="number"||a=="string")return f(At);if(a==":")return f(H);if(a=="[")return f(B("variable"),Si,B("]"),At);if(a=="(")return k(rt,At);if(!a.match(/[;\}\)\],]/))return f()}function Tn(a,c){return a!="quasi"?k():c.slice(c.length-2)!="${"?f(Tn):f(H,Pi)}function Pi(a){if(a=="}")return h.marked="string-2",h.state.tokenize=z,f(Tn)}function En(a,c){return a=="variable"&&h.stream.match(/^\s*[?:]/,!1)||c=="?"?f(En):a==":"?f(H):a=="spread"?f(En):k(H)}function Te(a,c){if(c=="<")return f(P(">"),Z(H,">"),S,Te);if(c=="|"||a=="."||c=="&")return f(H);if(a=="[")return f(H,B("]"),Te);if(c=="extends"||c=="implements")return h.marked="keyword",f(H);if(c=="?")return f(H,B(":"),H)}function Ni(a,c){if(c=="<")return f(P(">"),Z(H,">"),S,Te)}function Bt(){return k(H,Mi)}function Mi(a,c){if(c=="=")return f(H)}function kn(a,c){return c=="enum"?(h.marked="keyword",f(Fr)):k(ge,tt,Ie,Fi)}function ge(a,c){if(l&&Nt(c))return h.marked="keyword",f(ge);if(a=="variable")return Qe(c),f();if(a=="spread")return f(ge);if(a=="[")return ht(Ii,"]");if(a=="{")return ht(Sr,"}")}function Sr(a,c){return a=="variable"&&!h.stream.match(/^\s*:/,!1)?(Qe(c),f(Ie)):(a=="variable"&&(h.marked="property"),a=="spread"?f(ge):a=="}"?k():a=="["?f(Y,B("]"),B(":"),Sr):f(B(":"),ge,Ie))}function Ii(){return k(ge,Ie)}function Ie(a,c){if(c=="=")return f(ae)}function Fi(a){if(a==",")return f(kn)}function Cr(a,c){if(a=="keyword b"&&c=="else")return f(P("form","else"),X,S)}function Dr(a,c){if(c=="await")return f(Dr);if(a=="(")return f(P(")"),Bi,S)}function Bi(a){return a=="var"?f(kn,nt):a=="variable"?f(nt):k(nt)}function nt(a,c){return a==")"?f():a==";"?f(nt):c=="in"||c=="of"?(h.marked="keyword",f(Y,nt)):k(Y,nt)}function Fe(a,c){if(c=="*")return h.marked="keyword",f(Fe);if(a=="variable")return Qe(c),f(Fe);if(a=="(")return f(Xe,P(")"),Z(Ge,")"),S,kr,X,de);if(l&&c=="<")return f(P(">"),Z(Bt,">"),S,Fe)}function rt(a,c){if(c=="*")return h.marked="keyword",f(rt);if(a=="variable")return Qe(c),f(rt);if(a=="(")return f(Xe,P(")"),Z(Ge,")"),S,kr,de);if(l&&c=="<")return f(P(">"),Z(Bt,">"),S,rt)}function Pr(a,c){if(a=="keyword"||a=="variable")return h.marked="type",f(Pr);if(c=="<")return f(P(">"),Z(Bt,">"),S)}function Ge(a,c){return c=="@"&&f(Y,Ge),a=="spread"?f(Ge):l&&Nt(c)?(h.marked="keyword",f(Ge)):l&&a=="this"?f(tt,Ie):k(ge,tt,Ie)}function Oi(a,c){return a=="variable"?Nr(a,c):Ot(a,c)}function Nr(a,c){if(a=="variable")return Qe(c),f(Ot)}function Ot(a,c){if(c=="<")return f(P(">"),Z(Bt,">"),S,Ot);if(c=="extends"||c=="implements"||l&&a==",")return c=="implements"&&(h.marked="keyword"),f(l?H:Y,Ot);if(a=="{")return f(P("}"),Ee,S)}function Ee(a,c){if(a=="async"||a=="variable"&&(c=="static"||c=="get"||c=="set"||l&&Nt(c))&&h.stream.match(/^\s+[\w$\xa1-\uffff]/,!1))return h.marked="keyword",f(Ee);if(a=="variable"||h.style=="keyword")return h.marked="property",f(_t,Ee);if(a=="number"||a=="string")return f(_t,Ee);if(a=="[")return f(Y,tt,B("]"),_t,Ee);if(c=="*")return h.marked="keyword",f(Ee);if(l&&a=="(")return k(rt,Ee);if(a==";"||a==",")return f(Ee);if(a=="}")return f();if(c=="@")return f(Y,Ee)}function _t(a,c){if(c=="!"||c=="?")return f(_t);if(a==":")return f(H,Ie);if(c=="=")return f(ae);var m=h.state.lexical.prev,_=m&&m.info=="interface";return k(_?rt:Fe)}function qi(a,c){return c=="*"?(h.marked="keyword",f(Sn,B(";"))):c=="default"?(h.marked="keyword",f(Y,B(";"))):a=="{"?f(Z(Mr,"}"),Sn,B(";")):k(X)}function Mr(a,c){if(c=="as")return h.marked="keyword",f(B("variable"));if(a=="variable")return k(ae,Mr)}function Li(a){return a=="string"?f():a=="("?k(Y):a=="."?k(Ye):k(qt,Ir,Sn)}function qt(a,c){return a=="{"?ht(qt,"}"):(a=="variable"&&Qe(c),c=="*"&&(h.marked="keyword"),f(Hi))}function Ir(a){if(a==",")return f(qt,Ir)}function Hi(a,c){if(c=="as")return h.marked="keyword",f(qt)}function Sn(a,c){if(c=="from")return h.marked="keyword",f(Y)}function $i(a){return a=="]"?f():k(Z(ae,"]"))}function Fr(){return k(P("form"),ge,B("{"),P("}"),Z(Ki,"}"),S,S)}function Ki(){return k(ge,Ie)}function Yi(a,c){return a.lastType=="operator"||a.lastType==","||w.test(c.charAt(0))||/[,.]/.test(c.charAt(0))}function Br(a,c,m){return c.tokenize==G&&/^(?:operator|sof|keyword [bcd]|case|new|export|default|spread|[\[{}\(,;:]|=>)$/.test(c.lastType)||c.lastType=="quasi"&&/\{\s*$/.test(a.string.slice(0,a.pos-(m||0)))}return{startState:function(a){var c={tokenize:G,lastType:"sof",cc:[],lexical:new Pt((a||0)-n,0,"block",!1),localVars:t.localVars,context:t.localVars&&new gt(null,null,!1),indented:a||0};return t.globalVars&&typeof t.globalVars=="object"&&(c.globalVars=t.globalVars),c},token:function(a,c){if(a.sol()&&(c.lexical.hasOwnProperty("align")||(c.lexical.align=!1),c.indented=a.indentation(),fe(a,c)),c.tokenize!=oe&&a.eatSpace())return null;var m=c.tokenize(a,c);return F=="comment"?m:(c.lastType=F=="operator"&&(K=="++"||K=="--")?"incdec":F,dt(c,m,F,K,a))},indent:function(a,c){if(a.tokenize==oe||a.tokenize==z)return r.Pass;if(a.tokenize!=G)return 0;var m=c&&c.charAt(0),_=a.lexical,C;if(!/^\s*else\b/.test(c))for(var O=a.cc.length-1;O>=0;--O){var $=a.cc[O];if($==S)_=_.prev;else if($!=Cr&&$!=de)break}for(;(_.type=="stat"||_.type=="form")&&(m=="}"||(C=a.cc[a.cc.length-1])&&(C==Ye||C==et)&&!/^[,\.=+\-*:?[\(]/.test(c));)_=_.prev;i&&_.type==")"&&_.prev.type=="stat"&&(_=_.prev);var te=_.type,_e=m==te;return te=="vardef"?_.indented+(a.lastType=="operator"||a.lastType==","?_.info.length+1:0):te=="form"&&m=="{"?_.indented:te=="form"?_.indented+n:te=="stat"?_.indented+(Yi(a,c)?i||n:0):_.info=="switch"&&!_e&&t.doubleIndentSwitch!=!1?_.indented+(/^(?:case|default)\b/.test(c)?n:2*n):_.align?_.column+(_e?0:1):_.indented+(_e?0:n)},electricInput:/^\s*(?:case .*?:|default:|\{|\})$/,blockCommentStart:s?null:"/*",blockCommentEnd:s?null:"*/",blockCommentContinue:s?null:" * ",lineComment:s?null:"//",fold:"brace",closeBrackets:"()[]{}''\"\"``",helperType:s?"json":"javascript",jsonldMode:o,jsonMode:s,expressionAllowed:Br,skipExpression:function(a){dt(a,"atom","atom","true",new r.StringStream("",2,null))}}}),r.registerHelper("wordChars","javascript",/[\w$]/),r.defineMIME("text/javascript","javascript"),r.defineMIME("text/ecmascript","javascript"),r.defineMIME("application/javascript","javascript"),r.defineMIME("application/x-javascript","javascript"),r.defineMIME("application/ecmascript","javascript"),r.defineMIME("application/json",{name:"javascript",json:!0}),r.defineMIME("application/x-json",{name:"javascript",json:!0}),r.defineMIME("application/manifest+json",{name:"javascript",json:!0}),r.defineMIME("application/ld+json",{name:"javascript",jsonld:!0}),r.defineMIME("text/typescript",{name:"javascript",typescript:!0}),r.defineMIME("application/typescript",{name:"javascript",typescript:!0})});(function(r){r(window.CodeMirror)})(function(r){"use strict";r.customOverlayMode=function(e,t,n){return{startState:function(){return{base:r.startState(e),overlay:r.startState(t),basePos:0,baseCur:null,overlayPos:0,overlayCur:null,streamSeen:null}},copyState:function(i){return{base:r.copyState(e,i.base),overlay:r.copyState(t,i.overlay),basePos:i.basePos,baseCur:null,overlayPos:i.overlayPos,overlayCur:null}},token:function(i,o){return(i!=o.streamSeen||Math.min(o.basePos,o.overlayPos)0&&(this.activeEditorExtensions.pop(),this.plugin.app.workspace.updateOptions())}async jump_to_next_cursor_location(e=null,t=!1){t&&!this.plugin.settings.auto_jump_to_cursor||e&&Le(this.plugin.app)!==e||await this.cursor_jumper.jump_to_next_cursor_location()}async registerCodeMirrorMode(){if(!this.desktopShouldHighlight()&&!this.mobileShouldHighlight())return;let e=window.CodeMirror.getMode({},"javascript");if(e.name==="null"){V(new b("Javascript syntax mode couldn't be found, can't enable syntax highlighting."));return}let t=window.CodeMirror.customOverlayMode;if(t==null){V(new b("Couldn't find customOverlayMode, can't enable syntax highlighting."));return}window.CodeMirror.defineMode(_i,function(n){let i={startState:function(){return{...window.CodeMirror.startState(e),inCommand:!1,tag_class:"",freeLine:!1}},copyState:function(o){return{...window.CodeMirror.startState(e),inCommand:o.inCommand,tag_class:o.tag_class,freeLine:o.freeLine}},blankLine:function(o){return o.inCommand?"line-background-templater-command-bg":null},token:function(o,s){if(o.sol()&&s.inCommand&&(s.freeLine=!0),s.inCommand){let l="";if(o.match(/[-_]{0,1}%>/,!0)){s.inCommand=!1,s.freeLine=!1;let A=s.tag_class;return s.tag_class="",`line-${yr} ${xr} ${zo} ${A}`}let d=e.token&&e.token(o,s);return o.peek()==null&&s.freeLine&&(l+=" line-background-templater-command-bg"),s.freeLine||(l+=` line-${yr}`),`${l} ${xr} ${d}`}let u=o.match(/<%[-_]{0,1}\s*([*+]{0,1})/,!0);if(u!=null){switch(u[1]){case"*":s.tag_class=Wo;break;default:s.tag_class=Jo;break}return s.inCommand=!0,`line-${yr} ${xr} ${Vo} ${s.tag_class}`}for(;o.next()!=null&&!o.match(/<%/,!1););return null}};return t(window.CodeMirror.getMode(n,"hypermd"),i)})}updateEditorIntellisenseSetting(e){this.autocomplete.updateAutocompleteIntellisenseSetting(e)}};var wr=class extends _n.Plugin{async onload(){await this.load_settings(),this.templater=new pt(this),await this.templater.setup(),this.editor_handler=new jr(this),await this.editor_handler.setup(),this.fuzzy_suggester=new Rn(this),this.event_handler=new An(this,this.templater,this.settings),this.event_handler.setup(),this.command_handler=new fr(this),this.command_handler.setup(),(0,_n.addIcon)("templater-icon",ri),this.addRibbonIcon("templater-icon","Templater",async()=>{this.fuzzy_suggester.insert_template()}).setAttribute("id","rb-templater-icon"),this.addSettingTab(new Gn(this)),this.app.workspace.onLayoutReady(()=>{this.templater.execute_startup_scripts()})}async onExternalSettingsChange(){await this.load_settings()}onunload(){this.templater.functions_generator.teardown()}async save_settings(){await this.saveData(this.settings),this.editor_handler.updateEditorIntellisenseSetting(this.settings.intellisense_render)}async load_settings(){this.settings=Object.assign({},ti,await this.loadData())}}; /* nosourcemap */ \ No newline at end of file diff --git a/.obsidian/plugins/templater-obsidian/manifest.json b/.obsidian/plugins/templater-obsidian/manifest.json index 07d579b..117e4b3 100644 --- a/.obsidian/plugins/templater-obsidian/manifest.json +++ b/.obsidian/plugins/templater-obsidian/manifest.json @@ -1,9 +1,9 @@ { "id": "templater-obsidian", "name": "Templater", - "version": "2.18.1", + "version": "2.19.1", "description": "Create and use templates", - "minAppVersion": "1.5.0", + "minAppVersion": "1.12.2", "author": "SilentVoid", "authorUrl": "https://github.com/SilentVoid13", "helpUrl": "https://silentvoid13.github.io/Templater/", diff --git a/.obsidian/types.json b/.obsidian/types.json index 3fbe4a5..dcae955 100644 --- a/.obsidian/types.json +++ b/.obsidian/types.json @@ -10,6 +10,7 @@ "excalidraw-export-padding": "number", "excalidraw-export-pngscale": "number", "excalidraw-export-embed-scene": "checkbox", + "excalidraw-export-internal-links": "checkbox", "excalidraw-link-prefix": "text", "excalidraw-url-prefix": "text", "excalidraw-link-brackets": "checkbox", @@ -23,7 +24,6 @@ "excalidraw-autoexport": "text", "excalidraw-embeddable-theme": "text", "excalidraw-open-md": "checkbox", - "excalidraw-embed-md": "checkbox", - "excalidraw-export-internal-links": "checkbox" + "excalidraw-embed-md": "checkbox" } } \ No newline at end of file diff --git a/.obsidian/workspace.json b/.obsidian/workspace.json index fc6e79c..87f77f3 100644 --- a/.obsidian/workspace.json +++ b/.obsidian/workspace.json @@ -4,17 +4,22 @@ "type": "split", "children": [ { - "id": "55f11863890640cb", + "id": "61d6e3de70affb43", "type": "tabs", "children": [ { - "id": "cb080f356dbc4a8c", + "id": "136349dfabcba548", "type": "leaf", "state": { - "type": "empty", - "state": {}, + "type": "markdown", + "state": { + "file": "calendar/diary/2026-04-20.md", + "mode": "source", + "source": false, + "backlinks": false + }, "icon": "lucide-file", - "title": "新标签页" + "title": "2026-04-20" } } ] @@ -50,7 +55,7 @@ "state": { "type": "search", "state": { - "query": "172.21.16.174", + "query": "path:resource/英语 ", "matchingCase": false, "explainSearch": true, "collapseAll": false, @@ -92,7 +97,7 @@ } ], "direction": "horizontal", - "width": 371.5 + "width": 381.5 }, "right": { "id": "ca733f6d5936ae40", @@ -109,12 +114,13 @@ "state": { "type": "outline", "state": { + "file": "calendar/diary/2026-04-20.md", "followCursor": true, "showSearch": false, "searchQuery": "" }, "icon": "lucide-list", - "title": "大纲" + "title": "2026-04-20 的大纲" } }, { @@ -209,7 +215,7 @@ } ], "direction": "horizontal", - "width": 281.5 + "width": 275.5 }, "left-ribbon": { "hiddenItems": { @@ -223,54 +229,54 @@ "templater-obsidian:Templater": true } }, - "active": "cb080f356dbc4a8c", + "active": "c8718c0c63702202", "lastOpenFiles": [ - "000-inbox/开发笔记-%s.md", - "000-inbox/开发笔记1.md", - "000-inbox/开发笔记-.md", - "000-inbox/开发笔记.md", - "000-inbox/0403-165454.md", - "000-inbox/0403-111.md", - "000-inbox/04月03日 1641451.md", - "000-inbox/04月03日 1641351.md", - "000-inbox/04月03日 165100.md", - "attachment/templates/移动杭研-问题记录.md", - "work/移动杭研/问题处理/2023-01/0103-试用单前置校验信安附件问题-BBOSS张蕊.md", - "attachment/templates/移动杭研-开发笔记.md", - "attachment/templates/日常记录-闪念笔记.md", - "attachment/templates/日常记录-日记模板.md", - "attachment/templates/打开控制台.md", + "calendar/diary/2026-04-17.md", + "calendar/diary/2026-04-20.md", + "work/移动杭研/开发记录/7.20.0/开发笔记 7.20.0.md", + "000-inbox/okhttp3.md", + "000-inbox/MCP 学习.md", + "000-inbox/DDD.md", + "kids-coding/个人大纲.md", + "kids-coding", + "000-inbox/04月17日 161753.md", + "calendar/diary/2026-04-10.md", + "calendar/diary/2026-04-18.md", + "calendar/weeks/2026-W16.md", + "calendar/diary/2026-04-16.md", + "calendar/diary/2026-04-15.md", + "calendar/diary/2026-04-14.md", + "calendar/diary/2026-04-13.md", + "calendar/diary/2026-04-19.md", + "calendar/diary/2026-04-09.md", + "resource/java/MCP Json 注解.md", + "resource/java/Maven.md", + "resource/java/JPA 双表查询.md", + "resource/java/JPA 操作规范.md", + "work/移动杭研/AI 项目/ibs-ai 项目梳理.md", + "work/移动杭研/AI 项目/图纸-IBS 智能体-v1-流量查询 demo.md", + "resource/英语/词性.md", + "resource/英语/句子.md", + "resource/英语/形容词最高级.md", + "resource/python", + "work/移动杭研/问题处理/2026-04", + "attachment/images-paste/Pasted image 20260413135741.png", + "attachment/images-uuid/30df1a7f789e4d9cba02297ffcc813be.png", + "attachment/images-uuid/6995374f2632453e95171ac6b2ab325e.png", + "attachment/images-paste/Pasted image 20260413135806.png", + "attachment/images-paste/Pasted image 20260329170137.png", + "attachment/images-paste/Pasted image 20260402090513.png", + "work/移动杭研/开发记录/7.20.0", "attachment/scripts/openTerminal.js", "attachment/scripts", - "000-inbox/04月03日 162825.md", - "000-inbox/未命名.md", - "000-inbox/04月03日 162801.md", - "000-inbox/04月01.md", - "000-inbox/claude code buddy.md", - "000-inbox/MCP 请求数统计.md", - "calendar/diary/2026-04-03.md", - "calendar/diary/2026-04-02.md", - "calendar/diary/2026-04-01.md", - "calendar/diary/2026年/2026-03-31.md", - "calendar/diary/2026年/2026-03-30.md", - "attachment/Pasted image 20260402090513.png", "attachment/Pasted image 20260329165253.png", - "attachment/Pasted image 20260329170137.png", "attachment/Pasted image 20260329165321.png", "attachment/Pasted image 20260329165301.png", "attachment/images-paste/image-20230226203841579.png", - "attachment/Pasted image 20260329133947.png", "attachment/jsscripts/openTerminal.js", "attachment/jsscripts/新建文本文档.txt", "attachment/jsscripts", - "attachment/images-paste/image-20260325102650978.png", - "attachment/images-paste/image-20260325224014579.png", - "attachment/images-paste/image-20260325224132102.png", "resource/ai/大模型安装笔记", - "work/移动杭研/问题处理/2026-03", - "resource/ai/prompts/cosmic 业务版本", - "resource/ai/prompts/cosmic", - "resource/ai/prompts/临时", "000-inbox/未命名.canvas" ] } \ No newline at end of file diff --git a/000-inbox/DDD.md b/000-inbox/DDD.md new file mode 100644 index 0000000..191faf8 --- /dev/null +++ b/000-inbox/DDD.md @@ -0,0 +1 @@ +DDD diff --git a/000-inbox/MCP 学习.md b/000-inbox/MCP 学习.md new file mode 100644 index 0000000..989d4ec --- /dev/null +++ b/000-inbox/MCP 学习.md @@ -0,0 +1,77 @@ +MCP 协议的实现,可以有2种方式, + +1. stdio,把 jar 提供出去,别人本地配置引入即可使用,但这样的方式不太适合做统一网关服务。 +2. sse + +项目采用 [DDD](DDD.md) 架构,首先聚焦 domain 层。 + +### 会话管理服务 + +```java +private final ScheduledExecutorService cleanupScheduler = Executors.newSingleThreadScheduledExecutor(); +``` + +其中 private 说明这个变量这能在类内部访问,声明为 final 则此变量只能赋值一次。`newSingleThreadScheduledExecutor` 代表只有一个工作线程。 + +> 一个带有定时功能的单线程定时队列。 + +```java +private final Map activeSessions = new ConcurrentHashMap<>(); +``` + +考虑点在于这个会话是否会被多个线程操作处理。 + +```java + public SessionManagementService() { + cleanupScheduler.scheduleAtFixedRate(this::cleanupExpiredSessions, 5, 5, TimeUnit.MINUTES); + log.info("会话管理服务已启动,会话超时时间: {} 分钟", SESSION_TIMEOUT_MINUTES); + } +``` + +可以在构造中执行一些方法。 + +### 实时通讯 + +> 对立面轮训 + +SSE(Server sent Events) + +基于普通的 HTTP 长连接,Content-type: text/event-stream + +消息格式,每条消息以 \n\n 结尾, + +![](../attachment/images-paste/Pasted%20image%2020260413135806.png) + +``` +SSE(协议) + ↑ +需要一个好的服务器框架来实现它 + ↓ +Spring WebFlux(响应式 Web 框架) ← 最适合实现 SSE 的框架 + ↑ +因为它是响应式(非阻塞),非常适合长连接 + ↓ +在 WebFlux 里,用 Sinks + Flux 来产生和推送 SSE 事件 +``` + +``` +客户端发起 SSE 请求 + ↓ +Netty EventLoop 接收请求(线程A) + ↓ +Controller 返回 sink.asFlux() → 注册“有新事件时推送”的回调 + ↓ +线程A 立刻释放,去处理其他请求 + ↓ +...(连接保持打开,线程A 忙别的) + +你的服务层调用 sink.tryEmitNext(新消息) + ↓ +Reactor 通知 Netty:“这个连接有数据要写” + ↓ +EventLoop 线程(可能是线程B)被唤醒 + ↓ +执行回调:把消息转成 "data: xxx\n\n" 格式 → 写入 Socket + ↓ +写完后,线程B 立刻释放,继续干别的 +``` diff --git a/000-inbox/claude code buddy.md b/000-inbox/claude code buddy.md deleted file mode 100644 index 157ede0..0000000 --- a/000-inbox/claude code buddy.md +++ /dev/null @@ -1 +0,0 @@ -![](../attachment/Pasted%20image%2020260402090513.png) diff --git a/000-inbox/jinja.md b/000-inbox/jinja.md deleted file mode 100644 index b94181d..0000000 --- a/000-inbox/jinja.md +++ /dev/null @@ -1,3 +0,0 @@ -``` -{% if not add_generation_prompt is defined %}{% set add_generation_prompt = false %}{% endif %}{% set ns = namespace(is_first=false, is_tool=false, is_output_first=true, system_prompt='') %}{%- for message in messages %}{%- if message['role'] == 'system' %}{% set ns.system_prompt = message['content'] %}{%- endif %}{%- endfor %}{{bos_token}}{{ns.system_prompt}}{%- for message in messages %}{%- if message['role'] == 'user' %}{%- set ns.is_tool = false -%}{{'<|User|>' + message['content']}}{%- endif %}{%- if message['role'] == 'assistant' and message['content'] is none %}{%- set ns.is_tool = false -%}{%- for tool in message['tool_calls']%}{%- if not ns.is_first %}{{'<|Assistant|><|tool▁calls▁begin|><|tool▁call▁begin|>' + tool['type'] + '<|tool▁sep|>' + tool['function']['name'] + '\\n' + '```json' + '\\n' + tool['function']['arguments'] + '\\n' + '```' + '<|tool▁call▁end|>'}}{%- set ns.is_first = true -%}{%- else %}{{'\\n' + '<|tool▁call▁begin|>' + tool['type'] + '<|tool▁sep|>' + tool['function']['name'] + '\\n' + '```json' + '\\n' + tool['function']['arguments'] + '\\n' + '```' + '<|tool▁call▁end|>'}}{{'<|tool▁calls▁end|><|end▁of▁sentence|>'}}{%- endif %}{%- endfor %}{%- endif %}{%- if message['role'] == 'assistant' and message['content'] is not none %}{%- if ns.is_tool %}{{'<|tool▁outputs▁end|>' + message['content'] + '<|end▁of▁sentence|>'}}{%- set ns.is_tool = false -%}{%- else %}{% set content = message['content'] %}{% if '' in content %}{% set content = message['content'].replace('', '').split('')[-1] %}{% endif %}{{'<|Assistant|>' + content + '<|end▁of▁sentence|>'}}{%- endif %}{%- endif %}{%- if message['role'] == 'tool' %}{%- set ns.is_tool = true -%}{%- if ns.is_output_first %}{{'<|tool▁outputs▁begin|><|tool▁output▁begin|>' + message['content'] + '<|tool▁output▁end|>'}}{%- set ns.is_output_first = false %}{%- else %}{{'\\n<|tool▁output▁begin|>' + message['content'] + '<|tool▁output▁end|>'}}{%- endif %}{%- endif %}{%- endfor -%}{% if ns.is_tool %}{{'<|tool▁outputs▁end|>'}}{% endif %}{% if add_generation_prompt and not ns.is_tool %}{{'<|Assistant|>'}}{% endif %} -``` diff --git a/000-inbox/okhttp3.md b/000-inbox/okhttp3.md new file mode 100644 index 0000000..c75a6f4 --- /dev/null +++ b/000-inbox/okhttp3.md @@ -0,0 +1,37 @@ +```java +package cn.bugstack.ai.infrastructure.gateway; + +import okhttp3.RequestBody; +import okhttp3.ResponseBody; +import retrofit2.Call; +import retrofit2.http.Body; +import retrofit2.http.GET; +import retrofit2.http.HeaderMap; +import retrofit2.http.POST; +import retrofit2.http.QueryMap; +import retrofit2.http.Url; + +import java.util.Map; + +/** + * 资料:HTTP 框架案例 + */ +public interface GenericHttpGateway { + + @POST + Call post( + @Url String url, + @HeaderMap Map headers, + @Body RequestBody body + ); + + @GET + Call get( + @Url String url, + @HeaderMap Map headers, + @QueryMap Map queryParams + ); + +} + +``` diff --git a/attachment/Pasted image 20260329170137.png b/attachment/images-paste/Pasted image 20260329170137.png similarity index 100% rename from attachment/Pasted image 20260329170137.png rename to attachment/images-paste/Pasted image 20260329170137.png diff --git a/attachment/Pasted image 20260402090513.png b/attachment/images-paste/Pasted image 20260402090513.png similarity index 100% rename from attachment/Pasted image 20260402090513.png rename to attachment/images-paste/Pasted image 20260402090513.png diff --git a/attachment/images-paste/Pasted image 20260413135806.png b/attachment/images-paste/Pasted image 20260413135806.png new file mode 100644 index 0000000..9ce9760 Binary files /dev/null and b/attachment/images-paste/Pasted image 20260413135806.png differ diff --git a/attachment/images-uuid/0132c500e3d841e48731cc036cbf66ab.png b/attachment/images-uuid/0132c500e3d841e48731cc036cbf66ab.png deleted file mode 100644 index db12a4f..0000000 Binary files a/attachment/images-uuid/0132c500e3d841e48731cc036cbf66ab.png and /dev/null differ diff --git a/attachment/images-uuid/08937c72395d4118b90c03de035e6754.png b/attachment/images-uuid/08937c72395d4118b90c03de035e6754.png deleted file mode 100644 index 0786020..0000000 Binary files a/attachment/images-uuid/08937c72395d4118b90c03de035e6754.png and /dev/null differ diff --git a/attachment/images-uuid/0ca5ffed30454dac830991113226dcd5.png b/attachment/images-uuid/0ca5ffed30454dac830991113226dcd5.png deleted file mode 100644 index 8344476..0000000 Binary files a/attachment/images-uuid/0ca5ffed30454dac830991113226dcd5.png and /dev/null differ diff --git a/attachment/images-uuid/0da536be15ff4f16bd4ce35d76b9af0a.png b/attachment/images-uuid/0da536be15ff4f16bd4ce35d76b9af0a.png deleted file mode 100644 index c5d0bc3..0000000 Binary files a/attachment/images-uuid/0da536be15ff4f16bd4ce35d76b9af0a.png and /dev/null differ diff --git a/attachment/images-uuid/0e8425230a6d44a5b58708e8355b82be.png b/attachment/images-uuid/0e8425230a6d44a5b58708e8355b82be.png deleted file mode 100644 index e9e257f..0000000 Binary files a/attachment/images-uuid/0e8425230a6d44a5b58708e8355b82be.png and /dev/null differ diff --git a/attachment/images-uuid/10e58417d0264ce3af827f3ea750e7df.png b/attachment/images-uuid/10e58417d0264ce3af827f3ea750e7df.png deleted file mode 100644 index f81e5de..0000000 Binary files a/attachment/images-uuid/10e58417d0264ce3af827f3ea750e7df.png and /dev/null differ diff --git a/attachment/images-uuid/142974c8e50d4f739544d5876a2e487f.png b/attachment/images-uuid/142974c8e50d4f739544d5876a2e487f.png deleted file mode 100644 index 70fc084..0000000 Binary files a/attachment/images-uuid/142974c8e50d4f739544d5876a2e487f.png and /dev/null differ diff --git a/attachment/images-uuid/1616b4ebfb954d18b8df243eec0bdf34.png b/attachment/images-uuid/1616b4ebfb954d18b8df243eec0bdf34.png deleted file mode 100644 index 6368224..0000000 Binary files a/attachment/images-uuid/1616b4ebfb954d18b8df243eec0bdf34.png and /dev/null differ diff --git a/attachment/images-uuid/1629c7fe49dd4fec9ee610d7f33f8c30.png b/attachment/images-uuid/1629c7fe49dd4fec9ee610d7f33f8c30.png deleted file mode 100644 index 7b09c1d..0000000 Binary files a/attachment/images-uuid/1629c7fe49dd4fec9ee610d7f33f8c30.png and /dev/null differ diff --git a/attachment/images-uuid/1927940a25914eeaa7f712070fe45870.png b/attachment/images-uuid/1927940a25914eeaa7f712070fe45870.png deleted file mode 100644 index 2048ab9..0000000 Binary files a/attachment/images-uuid/1927940a25914eeaa7f712070fe45870.png and /dev/null differ diff --git a/attachment/images-uuid/19e09df12dd049a88b78bd2d5ee7c8f6.png b/attachment/images-uuid/19e09df12dd049a88b78bd2d5ee7c8f6.png deleted file mode 100644 index 6342e7d..0000000 Binary files a/attachment/images-uuid/19e09df12dd049a88b78bd2d5ee7c8f6.png and /dev/null differ diff --git a/attachment/images-uuid/1b7e10bd889a4c5c981364c40f1b3dfe.png b/attachment/images-uuid/1b7e10bd889a4c5c981364c40f1b3dfe.png deleted file mode 100644 index a869e09..0000000 Binary files a/attachment/images-uuid/1b7e10bd889a4c5c981364c40f1b3dfe.png and /dev/null differ diff --git a/attachment/images-uuid/1d4deefb0b5348a485750d691214918f.png b/attachment/images-uuid/1d4deefb0b5348a485750d691214918f.png deleted file mode 100644 index a9a7aa8..0000000 Binary files a/attachment/images-uuid/1d4deefb0b5348a485750d691214918f.png and /dev/null differ diff --git a/attachment/images-uuid/1dd19b15647248c295a4c8e42624a8ce.png b/attachment/images-uuid/1dd19b15647248c295a4c8e42624a8ce.png deleted file mode 100644 index 1cbdbb0..0000000 Binary files a/attachment/images-uuid/1dd19b15647248c295a4c8e42624a8ce.png and /dev/null differ diff --git a/attachment/images-uuid/1f9e71b3f20a4961b943fd7f9781af91.png b/attachment/images-uuid/1f9e71b3f20a4961b943fd7f9781af91.png deleted file mode 100644 index 1a255b3..0000000 Binary files a/attachment/images-uuid/1f9e71b3f20a4961b943fd7f9781af91.png and /dev/null differ diff --git a/attachment/images-uuid/1fffbe5ad2234770bad3637648378a30.png b/attachment/images-uuid/1fffbe5ad2234770bad3637648378a30.png deleted file mode 100644 index b912ac3..0000000 Binary files a/attachment/images-uuid/1fffbe5ad2234770bad3637648378a30.png and /dev/null differ diff --git a/attachment/images-uuid/20343be844ef4d3cbe6f3975531e23c0.png b/attachment/images-uuid/20343be844ef4d3cbe6f3975531e23c0.png deleted file mode 100644 index cdbf977..0000000 Binary files a/attachment/images-uuid/20343be844ef4d3cbe6f3975531e23c0.png and /dev/null differ diff --git a/attachment/images-uuid/2114decb24a4440b87d77813fdaa1aa2.png b/attachment/images-uuid/2114decb24a4440b87d77813fdaa1aa2.png deleted file mode 100644 index 978b281..0000000 Binary files a/attachment/images-uuid/2114decb24a4440b87d77813fdaa1aa2.png and /dev/null differ diff --git a/attachment/images-uuid/263d2de5b97340b29e314ebb1fd9bd39.png b/attachment/images-uuid/263d2de5b97340b29e314ebb1fd9bd39.png deleted file mode 100644 index d2a8eea..0000000 Binary files a/attachment/images-uuid/263d2de5b97340b29e314ebb1fd9bd39.png and /dev/null differ diff --git a/attachment/images-uuid/284bc1f546d9406a894bf5ad0c4a7f33.png b/attachment/images-uuid/284bc1f546d9406a894bf5ad0c4a7f33.png deleted file mode 100644 index cfc3ef9..0000000 Binary files a/attachment/images-uuid/284bc1f546d9406a894bf5ad0c4a7f33.png and /dev/null differ diff --git a/attachment/images-uuid/29229656a19d4cbdada8e986578c4e3f.png b/attachment/images-uuid/29229656a19d4cbdada8e986578c4e3f.png deleted file mode 100644 index 59e8873..0000000 Binary files a/attachment/images-uuid/29229656a19d4cbdada8e986578c4e3f.png and /dev/null differ diff --git a/attachment/images-uuid/2c25eadf5c134865b5923f116a2b122a.png b/attachment/images-uuid/2c25eadf5c134865b5923f116a2b122a.png deleted file mode 100644 index dcd6c60..0000000 Binary files a/attachment/images-uuid/2c25eadf5c134865b5923f116a2b122a.png and /dev/null differ diff --git a/attachment/images-uuid/2c2b227cd4074e02a28d59d9d99bcfc4.png b/attachment/images-uuid/2c2b227cd4074e02a28d59d9d99bcfc4.png deleted file mode 100644 index b3a0805..0000000 Binary files a/attachment/images-uuid/2c2b227cd4074e02a28d59d9d99bcfc4.png and /dev/null differ diff --git a/attachment/images-uuid/30c5bb9f908b4be8ba33facc83ed93ad.png b/attachment/images-uuid/30c5bb9f908b4be8ba33facc83ed93ad.png deleted file mode 100644 index 4b2eca6..0000000 Binary files a/attachment/images-uuid/30c5bb9f908b4be8ba33facc83ed93ad.png and /dev/null differ diff --git a/attachment/images-uuid/31b6e57a69d34283a4f757a0240f0d67.png b/attachment/images-uuid/31b6e57a69d34283a4f757a0240f0d67.png deleted file mode 100644 index ea9e019..0000000 Binary files a/attachment/images-uuid/31b6e57a69d34283a4f757a0240f0d67.png and /dev/null differ diff --git a/attachment/images-uuid/32f6c88fca724c9aa8610ef25f25beb0.png b/attachment/images-uuid/32f6c88fca724c9aa8610ef25f25beb0.png deleted file mode 100644 index ca614cd..0000000 Binary files a/attachment/images-uuid/32f6c88fca724c9aa8610ef25f25beb0.png and /dev/null differ diff --git a/attachment/images-uuid/344ac123e20a4055ad73c376fcdeb96f.png b/attachment/images-uuid/344ac123e20a4055ad73c376fcdeb96f.png deleted file mode 100644 index 3e63d13..0000000 Binary files a/attachment/images-uuid/344ac123e20a4055ad73c376fcdeb96f.png and /dev/null differ diff --git a/attachment/images-uuid/349a55492b2542c7bc5441ce2d54edd3.png b/attachment/images-uuid/349a55492b2542c7bc5441ce2d54edd3.png deleted file mode 100644 index e241e7f..0000000 Binary files a/attachment/images-uuid/349a55492b2542c7bc5441ce2d54edd3.png and /dev/null differ diff --git a/attachment/images-uuid/395d3f4a34a94349aec9d195a60b30ba.png b/attachment/images-uuid/395d3f4a34a94349aec9d195a60b30ba.png deleted file mode 100644 index a3cfd35..0000000 Binary files a/attachment/images-uuid/395d3f4a34a94349aec9d195a60b30ba.png and /dev/null differ diff --git a/attachment/images-uuid/3a49f5d0de6c4450afacc3cfd6b20661.png b/attachment/images-uuid/3a49f5d0de6c4450afacc3cfd6b20661.png deleted file mode 100644 index 1cc1b8b..0000000 Binary files a/attachment/images-uuid/3a49f5d0de6c4450afacc3cfd6b20661.png and /dev/null differ diff --git a/attachment/images-uuid/3acdb54be9074105854f2b5beeebc9f1.png b/attachment/images-uuid/3acdb54be9074105854f2b5beeebc9f1.png deleted file mode 100644 index 3df243d..0000000 Binary files a/attachment/images-uuid/3acdb54be9074105854f2b5beeebc9f1.png and /dev/null differ diff --git a/attachment/images-uuid/3bd531ff898f47eea1064c9640af6f48.png b/attachment/images-uuid/3bd531ff898f47eea1064c9640af6f48.png deleted file mode 100644 index 7abe5d0..0000000 Binary files a/attachment/images-uuid/3bd531ff898f47eea1064c9640af6f48.png and /dev/null differ diff --git a/attachment/images-uuid/3c2c6e5f32204c90b08a11d3d4e93c27.png b/attachment/images-uuid/3c2c6e5f32204c90b08a11d3d4e93c27.png deleted file mode 100644 index 376351d..0000000 Binary files a/attachment/images-uuid/3c2c6e5f32204c90b08a11d3d4e93c27.png and /dev/null differ diff --git a/attachment/images-uuid/3c9b46e572be4a52bd57a15aebe4e237.png b/attachment/images-uuid/3c9b46e572be4a52bd57a15aebe4e237.png deleted file mode 100644 index 621e237..0000000 Binary files a/attachment/images-uuid/3c9b46e572be4a52bd57a15aebe4e237.png and /dev/null differ diff --git a/attachment/images-uuid/3dc058e88a2c44f8b0b08a77e0600c39.png b/attachment/images-uuid/3dc058e88a2c44f8b0b08a77e0600c39.png deleted file mode 100644 index ee5fbc3..0000000 Binary files a/attachment/images-uuid/3dc058e88a2c44f8b0b08a77e0600c39.png and /dev/null differ diff --git a/attachment/images-uuid/3e2b53d98280499e9633dd767776b3cd.png b/attachment/images-uuid/3e2b53d98280499e9633dd767776b3cd.png deleted file mode 100644 index b9e8f86..0000000 Binary files a/attachment/images-uuid/3e2b53d98280499e9633dd767776b3cd.png and /dev/null differ diff --git a/attachment/images-uuid/3e382cc8ec1148548921475e7263a872.png b/attachment/images-uuid/3e382cc8ec1148548921475e7263a872.png deleted file mode 100644 index 7ed822e..0000000 Binary files a/attachment/images-uuid/3e382cc8ec1148548921475e7263a872.png and /dev/null differ diff --git a/attachment/images-uuid/3fd292e3afc84029b24532c29f560bf5.png b/attachment/images-uuid/3fd292e3afc84029b24532c29f560bf5.png deleted file mode 100644 index 06b61f8..0000000 Binary files a/attachment/images-uuid/3fd292e3afc84029b24532c29f560bf5.png and /dev/null differ diff --git a/attachment/images-uuid/412b249c92854152ab9a6529bdc787c7.png b/attachment/images-uuid/412b249c92854152ab9a6529bdc787c7.png deleted file mode 100644 index e695b6d..0000000 Binary files a/attachment/images-uuid/412b249c92854152ab9a6529bdc787c7.png and /dev/null differ diff --git a/attachment/images-uuid/42806f8e828242fba6bfb4d609ce8962.png b/attachment/images-uuid/42806f8e828242fba6bfb4d609ce8962.png deleted file mode 100644 index ff58938..0000000 Binary files a/attachment/images-uuid/42806f8e828242fba6bfb4d609ce8962.png and /dev/null differ diff --git a/attachment/images-uuid/42a06819fad844618ecf6f762ead8e58.png b/attachment/images-uuid/42a06819fad844618ecf6f762ead8e58.png deleted file mode 100644 index 6b375ac..0000000 Binary files a/attachment/images-uuid/42a06819fad844618ecf6f762ead8e58.png and /dev/null differ diff --git a/attachment/images-uuid/4a6d4460c2b847ae97d359a062570788.png b/attachment/images-uuid/4a6d4460c2b847ae97d359a062570788.png deleted file mode 100644 index 57c4ef8..0000000 Binary files a/attachment/images-uuid/4a6d4460c2b847ae97d359a062570788.png and /dev/null differ diff --git a/attachment/images-uuid/4c36935afe3b4357982502248fd0181e.png b/attachment/images-uuid/4c36935afe3b4357982502248fd0181e.png deleted file mode 100644 index a5d6a96..0000000 Binary files a/attachment/images-uuid/4c36935afe3b4357982502248fd0181e.png and /dev/null differ diff --git a/attachment/images-uuid/4c5a7e377a7b484bafaf23dedd80be64.png b/attachment/images-uuid/4c5a7e377a7b484bafaf23dedd80be64.png deleted file mode 100644 index 003fb92..0000000 Binary files a/attachment/images-uuid/4c5a7e377a7b484bafaf23dedd80be64.png and /dev/null differ diff --git a/attachment/images-uuid/4e0337cfbd5a403aa941db4bbd674684.png b/attachment/images-uuid/4e0337cfbd5a403aa941db4bbd674684.png deleted file mode 100644 index 895d63d..0000000 Binary files a/attachment/images-uuid/4e0337cfbd5a403aa941db4bbd674684.png and /dev/null differ diff --git a/attachment/images-uuid/504dfd97a6c84c4ba3166f37934b8fd1.png b/attachment/images-uuid/504dfd97a6c84c4ba3166f37934b8fd1.png deleted file mode 100644 index 0165e89..0000000 Binary files a/attachment/images-uuid/504dfd97a6c84c4ba3166f37934b8fd1.png and /dev/null differ diff --git a/attachment/images-uuid/532d6139007342a59df2191c96708f16.png b/attachment/images-uuid/532d6139007342a59df2191c96708f16.png deleted file mode 100644 index 9a9383f..0000000 Binary files a/attachment/images-uuid/532d6139007342a59df2191c96708f16.png and /dev/null differ diff --git a/attachment/images-uuid/5bc8bff2ace242779749e84bdc540f79.png b/attachment/images-uuid/5bc8bff2ace242779749e84bdc540f79.png deleted file mode 100644 index 864551d..0000000 Binary files a/attachment/images-uuid/5bc8bff2ace242779749e84bdc540f79.png and /dev/null differ diff --git a/attachment/images-uuid/5dbe6113ae014f58a8551c86c45c96fe.png b/attachment/images-uuid/5dbe6113ae014f58a8551c86c45c96fe.png deleted file mode 100644 index 7c20046..0000000 Binary files a/attachment/images-uuid/5dbe6113ae014f58a8551c86c45c96fe.png and /dev/null differ diff --git a/attachment/images-uuid/62e4bc7a25f548f8b31a7750aa8864e9.png b/attachment/images-uuid/62e4bc7a25f548f8b31a7750aa8864e9.png deleted file mode 100644 index bacd591..0000000 Binary files a/attachment/images-uuid/62e4bc7a25f548f8b31a7750aa8864e9.png and /dev/null differ diff --git a/attachment/images-uuid/65ae7eab7ef847d794ef17513af85a1b.png b/attachment/images-uuid/65ae7eab7ef847d794ef17513af85a1b.png deleted file mode 100644 index 25c4a13..0000000 Binary files a/attachment/images-uuid/65ae7eab7ef847d794ef17513af85a1b.png and /dev/null differ diff --git a/attachment/images-uuid/665276f4fcbe4709b7b87da731b865e8.png b/attachment/images-uuid/665276f4fcbe4709b7b87da731b865e8.png deleted file mode 100644 index 8949138..0000000 Binary files a/attachment/images-uuid/665276f4fcbe4709b7b87da731b865e8.png and /dev/null differ diff --git a/attachment/images-uuid/67e21cd9676b4a9990e870c5030eec08.png b/attachment/images-uuid/67e21cd9676b4a9990e870c5030eec08.png deleted file mode 100644 index 9026df8..0000000 Binary files a/attachment/images-uuid/67e21cd9676b4a9990e870c5030eec08.png and /dev/null differ diff --git a/attachment/images-uuid/689f9918f56142afabf7c4c90043277e.png b/attachment/images-uuid/689f9918f56142afabf7c4c90043277e.png deleted file mode 100644 index 61c964f..0000000 Binary files a/attachment/images-uuid/689f9918f56142afabf7c4c90043277e.png and /dev/null differ diff --git a/attachment/images-uuid/6bb1ea1ca7e94bf89445776501e4828f.png b/attachment/images-uuid/6bb1ea1ca7e94bf89445776501e4828f.png deleted file mode 100644 index 65a526b..0000000 Binary files a/attachment/images-uuid/6bb1ea1ca7e94bf89445776501e4828f.png and /dev/null differ diff --git a/attachment/images-uuid/72b926a0f87c4c439ba9fb5f6b26632f.png b/attachment/images-uuid/72b926a0f87c4c439ba9fb5f6b26632f.png deleted file mode 100644 index c661d06..0000000 Binary files a/attachment/images-uuid/72b926a0f87c4c439ba9fb5f6b26632f.png and /dev/null differ diff --git a/attachment/images-uuid/72c1618debf44016a6f716080ccd5cc6.png b/attachment/images-uuid/72c1618debf44016a6f716080ccd5cc6.png deleted file mode 100644 index 1e437c8..0000000 Binary files a/attachment/images-uuid/72c1618debf44016a6f716080ccd5cc6.png and /dev/null differ diff --git a/attachment/images-uuid/78a79a8c60f54540bc12c458f440d06a.png b/attachment/images-uuid/78a79a8c60f54540bc12c458f440d06a.png deleted file mode 100644 index 2402369..0000000 Binary files a/attachment/images-uuid/78a79a8c60f54540bc12c458f440d06a.png and /dev/null differ diff --git a/attachment/images-uuid/78e60da161e74899bd155eeef80a868a.png b/attachment/images-uuid/78e60da161e74899bd155eeef80a868a.png deleted file mode 100644 index 979fd10..0000000 Binary files a/attachment/images-uuid/78e60da161e74899bd155eeef80a868a.png and /dev/null differ diff --git a/attachment/images-uuid/79ac7b2dcac04743a338352be0c2578f.png b/attachment/images-uuid/79ac7b2dcac04743a338352be0c2578f.png deleted file mode 100644 index 8b7c48a..0000000 Binary files a/attachment/images-uuid/79ac7b2dcac04743a338352be0c2578f.png and /dev/null differ diff --git a/attachment/images-uuid/7a38e282cf444d499663c7d9a4e088c7.png b/attachment/images-uuid/7a38e282cf444d499663c7d9a4e088c7.png deleted file mode 100644 index 68cbb13..0000000 Binary files a/attachment/images-uuid/7a38e282cf444d499663c7d9a4e088c7.png and /dev/null differ diff --git a/attachment/images-uuid/7b59359c89574ebeb950787d6c41f46b.png b/attachment/images-uuid/7b59359c89574ebeb950787d6c41f46b.png deleted file mode 100644 index 7c4d612..0000000 Binary files a/attachment/images-uuid/7b59359c89574ebeb950787d6c41f46b.png and /dev/null differ diff --git a/attachment/images-uuid/7bf6a427fd77464b84def3c152917ec3.png b/attachment/images-uuid/7bf6a427fd77464b84def3c152917ec3.png deleted file mode 100644 index 5f48381..0000000 Binary files a/attachment/images-uuid/7bf6a427fd77464b84def3c152917ec3.png and /dev/null differ diff --git a/attachment/images-uuid/7c405c672af443669139399aa2add96e.png b/attachment/images-uuid/7c405c672af443669139399aa2add96e.png deleted file mode 100644 index 2e3382d..0000000 Binary files a/attachment/images-uuid/7c405c672af443669139399aa2add96e.png and /dev/null differ diff --git a/attachment/images-uuid/82ab735fdf5d4e109db080d08c624937.png b/attachment/images-uuid/82ab735fdf5d4e109db080d08c624937.png deleted file mode 100644 index e75b7c7..0000000 Binary files a/attachment/images-uuid/82ab735fdf5d4e109db080d08c624937.png and /dev/null differ diff --git a/attachment/images-uuid/83ee7339b31d4cda9eecacc01c4177d7.png b/attachment/images-uuid/83ee7339b31d4cda9eecacc01c4177d7.png deleted file mode 100644 index 6d86d48..0000000 Binary files a/attachment/images-uuid/83ee7339b31d4cda9eecacc01c4177d7.png and /dev/null differ diff --git a/attachment/images-uuid/848556603d3c4e5d9b75cde9e8bce4d2.png b/attachment/images-uuid/848556603d3c4e5d9b75cde9e8bce4d2.png deleted file mode 100644 index 2e981b3..0000000 Binary files a/attachment/images-uuid/848556603d3c4e5d9b75cde9e8bce4d2.png and /dev/null differ diff --git a/attachment/images-uuid/85f4f03783964924bededbe3cdb8b084.png b/attachment/images-uuid/85f4f03783964924bededbe3cdb8b084.png deleted file mode 100644 index 27a3a62..0000000 Binary files a/attachment/images-uuid/85f4f03783964924bededbe3cdb8b084.png and /dev/null differ diff --git a/attachment/images-uuid/8706f83a3ed9464f971a1dfe5b13cf1b.png b/attachment/images-uuid/8706f83a3ed9464f971a1dfe5b13cf1b.png deleted file mode 100644 index 4271c91..0000000 Binary files a/attachment/images-uuid/8706f83a3ed9464f971a1dfe5b13cf1b.png and /dev/null differ diff --git a/attachment/images-uuid/8e082da914284a13b5cd1e159ebdad72.png b/attachment/images-uuid/8e082da914284a13b5cd1e159ebdad72.png deleted file mode 100644 index ab085bd..0000000 Binary files a/attachment/images-uuid/8e082da914284a13b5cd1e159ebdad72.png and /dev/null differ diff --git a/attachment/images-uuid/8fca9c65be6841c191f7995d4e545abe.png b/attachment/images-uuid/8fca9c65be6841c191f7995d4e545abe.png deleted file mode 100644 index 4267464..0000000 Binary files a/attachment/images-uuid/8fca9c65be6841c191f7995d4e545abe.png and /dev/null differ diff --git a/attachment/images-uuid/90dd5bc4ba7647b5bceaa16f8c775479.png b/attachment/images-uuid/90dd5bc4ba7647b5bceaa16f8c775479.png deleted file mode 100644 index b8016aa..0000000 Binary files a/attachment/images-uuid/90dd5bc4ba7647b5bceaa16f8c775479.png and /dev/null differ diff --git a/attachment/images-uuid/93159cb4ed154deeb595a5e2c972c717.png b/attachment/images-uuid/93159cb4ed154deeb595a5e2c972c717.png deleted file mode 100644 index 352d33e..0000000 Binary files a/attachment/images-uuid/93159cb4ed154deeb595a5e2c972c717.png and /dev/null differ diff --git a/attachment/images-uuid/994325ab0d194137a4d5100abe4e626b.png b/attachment/images-uuid/994325ab0d194137a4d5100abe4e626b.png deleted file mode 100644 index 6327565..0000000 Binary files a/attachment/images-uuid/994325ab0d194137a4d5100abe4e626b.png and /dev/null differ diff --git a/attachment/images-uuid/a0b93fa1dc6540b5b005d45abd13632b.png b/attachment/images-uuid/a0b93fa1dc6540b5b005d45abd13632b.png deleted file mode 100644 index 69658ea..0000000 Binary files a/attachment/images-uuid/a0b93fa1dc6540b5b005d45abd13632b.png and /dev/null differ diff --git a/attachment/images-uuid/a2576bcc969e40aa90c06b52f01712b5.png b/attachment/images-uuid/a2576bcc969e40aa90c06b52f01712b5.png deleted file mode 100644 index a6bb1ed..0000000 Binary files a/attachment/images-uuid/a2576bcc969e40aa90c06b52f01712b5.png and /dev/null differ diff --git a/attachment/images-uuid/a383ef2e7703418597e6e13d334d2dcf.png b/attachment/images-uuid/a383ef2e7703418597e6e13d334d2dcf.png deleted file mode 100644 index 496a270..0000000 Binary files a/attachment/images-uuid/a383ef2e7703418597e6e13d334d2dcf.png and /dev/null differ diff --git a/attachment/images-uuid/a487e809c6ac495f9b45d946834df4c9.png b/attachment/images-uuid/a487e809c6ac495f9b45d946834df4c9.png deleted file mode 100644 index 220a014..0000000 Binary files a/attachment/images-uuid/a487e809c6ac495f9b45d946834df4c9.png and /dev/null differ diff --git a/attachment/images-uuid/a4bf33fe04134b168ecc8dd349e88cf4.png b/attachment/images-uuid/a4bf33fe04134b168ecc8dd349e88cf4.png deleted file mode 100644 index 5932ac9..0000000 Binary files a/attachment/images-uuid/a4bf33fe04134b168ecc8dd349e88cf4.png and /dev/null differ diff --git a/attachment/images-uuid/a5aa3006cfdb4f3abeadb140c1fde6d9.png b/attachment/images-uuid/a5aa3006cfdb4f3abeadb140c1fde6d9.png deleted file mode 100644 index 3f5e4bf..0000000 Binary files a/attachment/images-uuid/a5aa3006cfdb4f3abeadb140c1fde6d9.png and /dev/null differ diff --git a/attachment/images-uuid/a6aea02974374f8f8ea6f3ff88642fb4.png b/attachment/images-uuid/a6aea02974374f8f8ea6f3ff88642fb4.png deleted file mode 100644 index 2ef664a..0000000 Binary files a/attachment/images-uuid/a6aea02974374f8f8ea6f3ff88642fb4.png and /dev/null differ diff --git a/attachment/images-uuid/a9b48c2f92ed4a1ab86373690ccdb15a.png b/attachment/images-uuid/a9b48c2f92ed4a1ab86373690ccdb15a.png deleted file mode 100644 index 5a6f892..0000000 Binary files a/attachment/images-uuid/a9b48c2f92ed4a1ab86373690ccdb15a.png and /dev/null differ diff --git a/attachment/images-uuid/abb2c47ae0c34be5ac09a5c836891f32.png b/attachment/images-uuid/abb2c47ae0c34be5ac09a5c836891f32.png deleted file mode 100644 index 2850818..0000000 Binary files a/attachment/images-uuid/abb2c47ae0c34be5ac09a5c836891f32.png and /dev/null differ diff --git a/attachment/images-uuid/abc31c11583949d384abd286611628a4.png b/attachment/images-uuid/abc31c11583949d384abd286611628a4.png deleted file mode 100644 index 51cebcb..0000000 Binary files a/attachment/images-uuid/abc31c11583949d384abd286611628a4.png and /dev/null differ diff --git a/attachment/images-uuid/ac3a9b2caef547bc96c99a17f01243ed.png b/attachment/images-uuid/ac3a9b2caef547bc96c99a17f01243ed.png deleted file mode 100644 index abd4ed2..0000000 Binary files a/attachment/images-uuid/ac3a9b2caef547bc96c99a17f01243ed.png and /dev/null differ diff --git a/attachment/images-uuid/ac5945f7f46c4f11a6cb334a5b219946.png b/attachment/images-uuid/ac5945f7f46c4f11a6cb334a5b219946.png deleted file mode 100644 index 8dcd71e..0000000 Binary files a/attachment/images-uuid/ac5945f7f46c4f11a6cb334a5b219946.png and /dev/null differ diff --git a/attachment/images-uuid/addfca73e44545b2a7f8318ce964e642.png b/attachment/images-uuid/addfca73e44545b2a7f8318ce964e642.png deleted file mode 100644 index 5188e3f..0000000 Binary files a/attachment/images-uuid/addfca73e44545b2a7f8318ce964e642.png and /dev/null differ diff --git a/attachment/images-uuid/afaa415397c0466e8e3e970614424950.png b/attachment/images-uuid/afaa415397c0466e8e3e970614424950.png deleted file mode 100644 index ff7cdb9..0000000 Binary files a/attachment/images-uuid/afaa415397c0466e8e3e970614424950.png and /dev/null differ diff --git a/attachment/images-uuid/b05de0660bd7493794e83f5fb41c472f.png b/attachment/images-uuid/b05de0660bd7493794e83f5fb41c472f.png deleted file mode 100644 index 013cd08..0000000 Binary files a/attachment/images-uuid/b05de0660bd7493794e83f5fb41c472f.png and /dev/null differ diff --git a/attachment/images-uuid/b0e3eaf53ebf42b19af31d657458e78c.png b/attachment/images-uuid/b0e3eaf53ebf42b19af31d657458e78c.png deleted file mode 100644 index c6cbc45..0000000 Binary files a/attachment/images-uuid/b0e3eaf53ebf42b19af31d657458e78c.png and /dev/null differ diff --git a/attachment/images-uuid/b2a7d42b0f49495a9d0644e68a66fc00.png b/attachment/images-uuid/b2a7d42b0f49495a9d0644e68a66fc00.png deleted file mode 100644 index 486dd87..0000000 Binary files a/attachment/images-uuid/b2a7d42b0f49495a9d0644e68a66fc00.png and /dev/null differ diff --git a/attachment/images-uuid/b385db9b030640b58b9a1db510193d5b.png b/attachment/images-uuid/b385db9b030640b58b9a1db510193d5b.png deleted file mode 100644 index 8d53057..0000000 Binary files a/attachment/images-uuid/b385db9b030640b58b9a1db510193d5b.png and /dev/null differ diff --git a/attachment/images-uuid/b547b9c646ac40c7a0893383fe6bdea5.png b/attachment/images-uuid/b547b9c646ac40c7a0893383fe6bdea5.png deleted file mode 100644 index 1b8a346..0000000 Binary files a/attachment/images-uuid/b547b9c646ac40c7a0893383fe6bdea5.png and /dev/null differ diff --git a/attachment/images-uuid/b9eadbaf3a5c4253854b135ddf31c5fd.png b/attachment/images-uuid/b9eadbaf3a5c4253854b135ddf31c5fd.png deleted file mode 100644 index 6a203a4..0000000 Binary files a/attachment/images-uuid/b9eadbaf3a5c4253854b135ddf31c5fd.png and /dev/null differ diff --git a/attachment/images-uuid/ba3b15bcabe247818636a8cfe587835b.png b/attachment/images-uuid/ba3b15bcabe247818636a8cfe587835b.png deleted file mode 100644 index 1f2c925..0000000 Binary files a/attachment/images-uuid/ba3b15bcabe247818636a8cfe587835b.png and /dev/null differ diff --git a/attachment/images-uuid/bb90a10a98064ecfb06f879995e53dd0.png b/attachment/images-uuid/bb90a10a98064ecfb06f879995e53dd0.png deleted file mode 100644 index 3cffe97..0000000 Binary files a/attachment/images-uuid/bb90a10a98064ecfb06f879995e53dd0.png and /dev/null differ diff --git a/attachment/images-uuid/bd96d193b9984434a1f8aeea2891d531.png b/attachment/images-uuid/bd96d193b9984434a1f8aeea2891d531.png deleted file mode 100644 index c7e4b6a..0000000 Binary files a/attachment/images-uuid/bd96d193b9984434a1f8aeea2891d531.png and /dev/null differ diff --git a/attachment/images-uuid/c0c49a6293e74515a52c55e4c9cee071.png b/attachment/images-uuid/c0c49a6293e74515a52c55e4c9cee071.png deleted file mode 100644 index c20234d..0000000 Binary files a/attachment/images-uuid/c0c49a6293e74515a52c55e4c9cee071.png and /dev/null differ diff --git a/attachment/images-uuid/c2c987472fd942f696e4c487baa93e7a.png b/attachment/images-uuid/c2c987472fd942f696e4c487baa93e7a.png deleted file mode 100644 index f092d05..0000000 Binary files a/attachment/images-uuid/c2c987472fd942f696e4c487baa93e7a.png and /dev/null differ diff --git a/attachment/images-uuid/c39f20fe1c544938be373e025524eef6.png b/attachment/images-uuid/c39f20fe1c544938be373e025524eef6.png deleted file mode 100644 index 2d7f101..0000000 Binary files a/attachment/images-uuid/c39f20fe1c544938be373e025524eef6.png and /dev/null differ diff --git a/attachment/images-uuid/c3f3fd752ddd49bbaa667242b189dcf2.png b/attachment/images-uuid/c3f3fd752ddd49bbaa667242b189dcf2.png deleted file mode 100644 index 4fd5fce..0000000 Binary files a/attachment/images-uuid/c3f3fd752ddd49bbaa667242b189dcf2.png and /dev/null differ diff --git a/attachment/images-uuid/c58112e63c3d431ea21aa7aaa7dc716f.png b/attachment/images-uuid/c58112e63c3d431ea21aa7aaa7dc716f.png deleted file mode 100644 index f64a1a9..0000000 Binary files a/attachment/images-uuid/c58112e63c3d431ea21aa7aaa7dc716f.png and /dev/null differ diff --git a/attachment/images-uuid/c73958dc6bcb4a67a87412eb37afcba7.png b/attachment/images-uuid/c73958dc6bcb4a67a87412eb37afcba7.png deleted file mode 100644 index 20f307a..0000000 Binary files a/attachment/images-uuid/c73958dc6bcb4a67a87412eb37afcba7.png and /dev/null differ diff --git a/attachment/images-uuid/c935d783e92a4ffe962c4f36baed74ef.png b/attachment/images-uuid/c935d783e92a4ffe962c4f36baed74ef.png deleted file mode 100644 index 35ef4b2..0000000 Binary files a/attachment/images-uuid/c935d783e92a4ffe962c4f36baed74ef.png and /dev/null differ diff --git a/attachment/images-uuid/cbfa29d1226c436aabf43c5aa4130065.png b/attachment/images-uuid/cbfa29d1226c436aabf43c5aa4130065.png deleted file mode 100644 index 62e7473..0000000 Binary files a/attachment/images-uuid/cbfa29d1226c436aabf43c5aa4130065.png and /dev/null differ diff --git a/attachment/images-uuid/cc089af0228a4e06b72db5cb48571c9e.png b/attachment/images-uuid/cc089af0228a4e06b72db5cb48571c9e.png deleted file mode 100644 index 18011bc..0000000 Binary files a/attachment/images-uuid/cc089af0228a4e06b72db5cb48571c9e.png and /dev/null differ diff --git a/attachment/images-uuid/d501bc31a8284bceb03c2e0c5bbf2b3c.png b/attachment/images-uuid/d501bc31a8284bceb03c2e0c5bbf2b3c.png deleted file mode 100644 index b95fa1c..0000000 Binary files a/attachment/images-uuid/d501bc31a8284bceb03c2e0c5bbf2b3c.png and /dev/null differ diff --git a/attachment/images-uuid/d70afddfe06f40899a4dac3143d8bb7c.png b/attachment/images-uuid/d70afddfe06f40899a4dac3143d8bb7c.png deleted file mode 100644 index 065a9b5..0000000 Binary files a/attachment/images-uuid/d70afddfe06f40899a4dac3143d8bb7c.png and /dev/null differ diff --git a/attachment/images-uuid/db0cede67fd1418db24632e07ea99daa.png b/attachment/images-uuid/db0cede67fd1418db24632e07ea99daa.png deleted file mode 100644 index f9f7069..0000000 Binary files a/attachment/images-uuid/db0cede67fd1418db24632e07ea99daa.png and /dev/null differ diff --git a/attachment/images-uuid/db87c8cb8bdb4e1f8f67b20c31760e4a.png b/attachment/images-uuid/db87c8cb8bdb4e1f8f67b20c31760e4a.png deleted file mode 100644 index b71ad34..0000000 Binary files a/attachment/images-uuid/db87c8cb8bdb4e1f8f67b20c31760e4a.png and /dev/null differ diff --git a/attachment/images-uuid/e294535a7eba4923963e5592e6e04963.png b/attachment/images-uuid/e294535a7eba4923963e5592e6e04963.png deleted file mode 100644 index 16e300b..0000000 Binary files a/attachment/images-uuid/e294535a7eba4923963e5592e6e04963.png and /dev/null differ diff --git a/attachment/images-uuid/e2f2fe78b82547fdb133e6c35616c5cc.png b/attachment/images-uuid/e2f2fe78b82547fdb133e6c35616c5cc.png deleted file mode 100644 index 3e404e5..0000000 Binary files a/attachment/images-uuid/e2f2fe78b82547fdb133e6c35616c5cc.png and /dev/null differ diff --git a/attachment/images-uuid/e4b012f1aa3d4f65b3d2d8fb02118025.png b/attachment/images-uuid/e4b012f1aa3d4f65b3d2d8fb02118025.png deleted file mode 100644 index e129d8c..0000000 Binary files a/attachment/images-uuid/e4b012f1aa3d4f65b3d2d8fb02118025.png and /dev/null differ diff --git a/attachment/images-uuid/e4c6a5d02a0a4bde9ec06b250fb8aaee.png b/attachment/images-uuid/e4c6a5d02a0a4bde9ec06b250fb8aaee.png deleted file mode 100644 index 174993b..0000000 Binary files a/attachment/images-uuid/e4c6a5d02a0a4bde9ec06b250fb8aaee.png and /dev/null differ diff --git a/attachment/images-uuid/e6f0df76d727423a9b4b26c6ef69cc8f.png b/attachment/images-uuid/e6f0df76d727423a9b4b26c6ef69cc8f.png deleted file mode 100644 index cb9e74b..0000000 Binary files a/attachment/images-uuid/e6f0df76d727423a9b4b26c6ef69cc8f.png and /dev/null differ diff --git a/attachment/images-uuid/e8a649d8c9c540b2bdacc5ba5b39411b.png b/attachment/images-uuid/e8a649d8c9c540b2bdacc5ba5b39411b.png deleted file mode 100644 index dcfff85..0000000 Binary files a/attachment/images-uuid/e8a649d8c9c540b2bdacc5ba5b39411b.png and /dev/null differ diff --git a/attachment/images-uuid/eb2407e50d1f42378a23518fdfc7b25f.png b/attachment/images-uuid/eb2407e50d1f42378a23518fdfc7b25f.png deleted file mode 100644 index 75c8202..0000000 Binary files a/attachment/images-uuid/eb2407e50d1f42378a23518fdfc7b25f.png and /dev/null differ diff --git a/attachment/images-uuid/edcb153df33f48a69d0e66b6b3622537.png b/attachment/images-uuid/edcb153df33f48a69d0e66b6b3622537.png deleted file mode 100644 index d80b2c3..0000000 Binary files a/attachment/images-uuid/edcb153df33f48a69d0e66b6b3622537.png and /dev/null differ diff --git a/attachment/images-uuid/ef30a8d4c65d4826a108efdf0dbd18f9.png b/attachment/images-uuid/ef30a8d4c65d4826a108efdf0dbd18f9.png deleted file mode 100644 index 392a8ef..0000000 Binary files a/attachment/images-uuid/ef30a8d4c65d4826a108efdf0dbd18f9.png and /dev/null differ diff --git a/attachment/images-uuid/f29fd9a2f98f45b5b187ebebc3d55eeb.png b/attachment/images-uuid/f29fd9a2f98f45b5b187ebebc3d55eeb.png deleted file mode 100644 index 252fee3..0000000 Binary files a/attachment/images-uuid/f29fd9a2f98f45b5b187ebebc3d55eeb.png and /dev/null differ diff --git a/attachment/images-uuid/f385ba82b23c4eb5ba348f205cb42aca.png b/attachment/images-uuid/f385ba82b23c4eb5ba348f205cb42aca.png deleted file mode 100644 index 11c749b..0000000 Binary files a/attachment/images-uuid/f385ba82b23c4eb5ba348f205cb42aca.png and /dev/null differ diff --git a/attachment/images-uuid/f67ba90567dd423389aa98897048dabb.png b/attachment/images-uuid/f67ba90567dd423389aa98897048dabb.png deleted file mode 100644 index e32a95a..0000000 Binary files a/attachment/images-uuid/f67ba90567dd423389aa98897048dabb.png and /dev/null differ diff --git a/attachment/images-uuid/f7c22075e4dc4cc08e374f4875833809.png b/attachment/images-uuid/f7c22075e4dc4cc08e374f4875833809.png deleted file mode 100644 index f399cf3..0000000 Binary files a/attachment/images-uuid/f7c22075e4dc4cc08e374f4875833809.png and /dev/null differ diff --git a/attachment/images-uuid/f7f26ba9e6ff4a6280fe4ceac81ce3a8.png b/attachment/images-uuid/f7f26ba9e6ff4a6280fe4ceac81ce3a8.png deleted file mode 100644 index ca66c6c..0000000 Binary files a/attachment/images-uuid/f7f26ba9e6ff4a6280fe4ceac81ce3a8.png and /dev/null differ diff --git a/attachment/images-uuid/f867081d1de14b30ace3999ff30b7167.png b/attachment/images-uuid/f867081d1de14b30ace3999ff30b7167.png deleted file mode 100644 index c04d3ed..0000000 Binary files a/attachment/images-uuid/f867081d1de14b30ace3999ff30b7167.png and /dev/null differ diff --git a/attachment/images-uuid/f8b1cf32fd4f41bda8f49d2ef6508a63.png b/attachment/images-uuid/f8b1cf32fd4f41bda8f49d2ef6508a63.png deleted file mode 100644 index 73bf954..0000000 Binary files a/attachment/images-uuid/f8b1cf32fd4f41bda8f49d2ef6508a63.png and /dev/null differ diff --git a/attachment/images-uuid/f8cae58cb49b4ad09efebbbcf9166e6a.png b/attachment/images-uuid/f8cae58cb49b4ad09efebbbcf9166e6a.png deleted file mode 100644 index 39ea269..0000000 Binary files a/attachment/images-uuid/f8cae58cb49b4ad09efebbbcf9166e6a.png and /dev/null differ diff --git a/attachment/images-uuid/fb284c5cadf34ab7a68fa02e662125e5.png b/attachment/images-uuid/fb284c5cadf34ab7a68fa02e662125e5.png deleted file mode 100644 index ab309ae..0000000 Binary files a/attachment/images-uuid/fb284c5cadf34ab7a68fa02e662125e5.png and /dev/null differ diff --git a/attachment/images-uuid/fc10050eab83486990c6a9a87b6e65d6.png b/attachment/images-uuid/fc10050eab83486990c6a9a87b6e65d6.png deleted file mode 100644 index ef34592..0000000 Binary files a/attachment/images-uuid/fc10050eab83486990c6a9a87b6e65d6.png and /dev/null differ diff --git a/attachment/images-uuid/fe716a138eb341c8a7eab9e903e2c305.png b/attachment/images-uuid/fe716a138eb341c8a7eab9e903e2c305.png deleted file mode 100644 index 8fd2103..0000000 Binary files a/attachment/images-uuid/fe716a138eb341c8a7eab9e903e2c305.png and /dev/null differ diff --git a/calendar/diary/2026-04-04.md b/calendar/diary/2026-04-04.md new file mode 100644 index 0000000..bcbd103 --- /dev/null +++ b/calendar/diary/2026-04-04.md @@ -0,0 +1,31 @@ +# 任务 + +# 日志 + +我现在的需求是实现一个 sing-box 代理工具的配置文件生成工具。 + +sing-box 的配置文件是 JSON 格式的,包含顶层的几大块(比如 log、DNS 等)。由于它的配置经常变动,且生成逻辑非常复杂,导致使用成本很高。 + +我想通过以下方式来优化: + +1. 模块化构建(搭积木方式): + +用户可以选择顶层模块(如 log 模块),系统自动列出该模块下对应的子模块及其默认值。工具仅负责配置文件的生成,不做任何自定义的配置覆盖。 + +2. AI 对话接口: + +提供一个 AI 接口,当用户询问某个配置的作用或搭配建议时,AI 可以根据源码进行分析并给出结果,以此避免文档与源码不匹配的情况。 + +# 总结 + +清明节第一天,昨天晚上又是不知道自己怎么睡着的,晚上起来了好几次,总感觉身上像是发烧一样,早晨起来妈妈已经回家了。 + +上午收拾了下,屋子,我去公司把饭盒拿了回来。 + +中午去吃了鸡公煲,感觉一般,也不知道是不是自己胃口的问题,田宝感觉辣,就带他吃的包子。 + +下午我们出发去了颐和园,这里人真的是超级多,田宝也很给力。我到下午3点整个人又恢复了一些状态。6点回家。田宝在车上睡了一会儿。 + +总感觉自己心里很着急,想干这个干那个。 + +前几天有听到一句很不错的话,如果你 diff --git a/calendar/diary/2026-04-05.md b/calendar/diary/2026-04-05.md new file mode 100644 index 0000000..ccec51e --- /dev/null +++ b/calendar/diary/2026-04-05.md @@ -0,0 +1,26 @@ +# 任务 + +# 日志 + +它做的事情是当用户中断操作时,为所有还没跑完的工具调用生成一个错误结果,而不是让整个消息链断掉,会话得以完整继续,Claude 知道哪里出了问题,从那里接着干。 + +专业工程师在架构决策、关键节点审查、边界情况处理这些地方保留人工判断,把 Claude 当成一个执行层,而不是一个决策层,出了问题,先定位,再告诉 Claude 具体修哪里,修成什么样。 + +``` +/etc/claude-code/CLAUDE.md # 系统级,管理员配置 +~/.claude/CLAUDE.md # 用户级,个人全局偏好 +~/.claude/rules/*.md # 用户级规则模块 +./CLAUDE.md # 项目级,团队共享 +./.claude/rules/*.md # 项目级规则模块 +./CLAUDE.local.md # 本地私有覆盖,加进 .gitignore +``` + +越靠近当前工作目录的文件,加载越晚,在 LLM 的上下文窗口里位置越靠后,而 LLM 对越靠后的内容注意力权重越高。 + +这是整个记忆系统里最值得理解的一个分工。 + +CLAUDE.md 是你写给 Claude 的项目架构、技术栈、编码规范、禁止事项。这些是不变的规则,需要你主动维护。 + +# 总结 + +今天超级大的风,跑了趟白浮泉吹懵逼了。中午吃了火锅。 diff --git a/calendar/diary/2026-04-06.md b/calendar/diary/2026-04-06.md new file mode 100644 index 0000000..09b72bf --- /dev/null +++ b/calendar/diary/2026-04-06.md @@ -0,0 +1,11 @@ +# 任务 + +# 日志 + +# 总结 + +中午小杨做了卤肉饭。我去买了半只烤鸭。中午和田宝一起看了哈哈哈哈哈综艺,不知道田宝有没有看懂也一直跟着乐。哈哈。 + +下午妈妈五点多才到家。田宝又去公园和瑞瑞玩儿了一会儿。 + +晚上又吃了芝士烤冷面。 diff --git a/calendar/diary/2026-04-07.md b/calendar/diary/2026-04-07.md new file mode 100644 index 0000000..5e6d417 --- /dev/null +++ b/calendar/diary/2026-04-07.md @@ -0,0 +1,40 @@ +# 任务 + +- [x] 开发:参加 IBS 项目晨会,同步昨日问题跟进事项。(李春良 0.5) +- [x] 客响:/api/statistic/flow 接口日期异常,这里有个知识点,如果使用 + 号 URL 会默认转义为空格。(佟彤 0.5) +- [x] 开发:MCP 服务开发,增加角色层次,了解 mcp 存储机制。(李春良 7) + +# 日志 + +``` +@ᥫᩣⱄᐝ 您好, 这个加上好,返回如下,辛苦帮忙再看下 +加上之后调用返回400 {'message': 'date error!'} + +url: + +https://p.cdn.10086.cn +/api/statistic/flow +?domain=files.steam.nsclouds.cn +&detail=1 +&start=2026-04-07T08:45:00+08:00 + &end=2026-04-07T09:45:00+08:00 + 2011-12-03T10:15:30+08:00 + + 2023-10-25T11:30:00%2B08:00 + +token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiI1anAwNDRjcy1tbmNzYWJnMmN1YmxuNnNjIiwiZXhwIjoxNzc1NTcwOTUxLCJpYXQiOjE3NzU1Mjc3NTEsImlzcyI6ImNtY2RuIn0=.GUxGk5bAhhuXgEpyxr9qfINcGZ9zLR9XF-ppdzi6Ne0= +``` + +- [x] **开发**:参加 IBS 项目每日晨会,同步昨日开发进度、遗留问题及风险点,明确当日开发任务与协作事项,保障项目迭代节奏。(李春良 0.5) +- [x] **客响**:响应线上问题排查,定位 `/api/statistic/flow` 接口日期参数异常;**关键知识点**:URL 中 `+` 号会被默认解析为空格,导致日期格式化失败,已梳理原因及规范写法,避免同类问题复现。(佟彤 0.5) +- [x] **开发**:推进 MCP 服务核心开发,**新增并实现角色层次结构**,完善权限与层级逻辑;深入研究 MCP 底层存储机制、数据持久化策略及读写流程,为后续功能扩展打下基础。(李春良 7) + +# 总结 + +开始运动,跑步。 + +找张泽弄鞋子。又玩儿了半天 sing-box。 + +下午学英语。 + +早早的回家了。 diff --git a/calendar/diary/2026-04-08.md b/calendar/diary/2026-04-08.md new file mode 100644 index 0000000..09b81b9 --- /dev/null +++ b/calendar/diary/2026-04-08.md @@ -0,0 +1,14 @@ +# 任务 + +- [x] 开发:参加 IBS 项目晨会,同步昨日问题跟进事项。(李春良 0.5) +- [x] 项目:IBS-V7.19.0升级文档。(黄寅杰 0.5) +- [x] 项目:IBS 7.20.0 版本评审。(李春良 1) +- [x] 客响:BPM 必填字段校验,尝试热部署解决。(李春良 1) + +# 日志 + +# 总结 + +跑步。 + +又是 sing-box 的一天,开了几个英语视频,真不能再弄这个网络。 diff --git a/calendar/diary/2026-04-09.md b/calendar/diary/2026-04-09.md new file mode 100644 index 0000000..f97d6f4 --- /dev/null +++ b/calendar/diary/2026-04-09.md @@ -0,0 +1,28 @@ +# 任务 + +- [x] 开发:参加 IBS 项目晨会,同步昨日问题跟进事项。(李春良 0.5) +- [x] 项目:IBS 7.20.0 版本评审。(李春良 1) +- [x] 客响:客户经理管理员数据导出。(佟彤 0.5) +- [x] 开发:IBS 7.20.0 需求分析,自有业务中间话单统计-支持域名全选(李春良 6) + +# 日志 + +为 excalicode 设计的专业标志,扁平矢量风格,几何形状,线条干净,居中排版,高对比度。灵感源自附上的参考图片视觉风格。4k 分辨率,高细节,杰作,工作室级别画质。—— 宽高比 1:1 + +argo 有点意思,但是读音 阿狗 让我感觉有点怪。 + +帮我翻译为英文提示词: 为 null 设计的专业标志,扁平矢量风格,几何形状,线条干净,居中排版,高对比度。灵感源自附上的参考图片视觉风格。内容我有一点想法: + +``` +> null_ (后面跟一个闪烁的光标符) +``` + +4k 分辨率,高细节,杰作,工作室级别画质。—— 宽高比 1:1 + +# 总结 + +爬楼梯。 + +脚手架!!! + +[DDD 脚手架【Maven 在线版】 | 小傅哥 bugstack 虫洞栈](https://bugstack.cn/md/road-map/ddd-archetype-maven.html) diff --git a/calendar/diary/2026-04-10.md b/calendar/diary/2026-04-10.md new file mode 100644 index 0000000..c994fd0 --- /dev/null +++ b/calendar/diary/2026-04-10.md @@ -0,0 +1,14 @@ +# 任务 + +- [x] 开发:参加 IBS 项目晨会,同步昨日问题跟进事项。(李春良 0.5) +- [x] 开发:IBS 7.20.0 需求开发,中国移动CDN信控能力优化需求,开发完成。(李春良 7.5) + +# 日志 + +一款专业极简风格标志设计,呈现文本 `> _` 字样,字体标志。灵感源自计算机终端命令提示符,带闪烁光标下划线。可以设计一个夸张的呈现方式,但不偏离主题。符号要大气,背景和主题色设计的夸张协调一些,颜色不想要偏科技配色。扁平矢量风格,线条利落,适用于企业形象识别、高科技初创公司及UI/UX视觉素材。4K分辨率,细节极致丰富即使当作小头像也要表现清楚突出主题,大师级作品,完美居中构图,画面比例1:1。 + +# 总结 + +海阳、衍君中午在一起溜达了溜达,谈论了一下关于海阳面试的事情。 + +下班给海阳打电话聊了一下关于小红书和直播的事情。 diff --git a/calendar/diary/2026-04-11.md b/calendar/diary/2026-04-11.md new file mode 100644 index 0000000..33b97c9 --- /dev/null +++ b/calendar/diary/2026-04-11.md @@ -0,0 +1,9 @@ +# 任务 + +# 日志 + +claude mcp remove morecup-context + +# 总结 + +公园玩儿了下,傍晚带妈妈去吃了板面。 diff --git a/calendar/diary/2026-04-12.md b/calendar/diary/2026-04-12.md new file mode 100644 index 0000000..570a37c --- /dev/null +++ b/calendar/diary/2026-04-12.md @@ -0,0 +1,9 @@ +# 任务 + +# 日志 + +# 总结 + +早晨陪着小杨去昌平中医医院。然后没回家去了白浮泉森林牧场,感觉这个地方还可以,就是家和稍微的贵一些,有超大的蹦床。 + +田宝理发了,这是他第一次。敢在理发店洗头。 diff --git a/calendar/diary/2026-04-13.md b/calendar/diary/2026-04-13.md new file mode 100644 index 0000000..0b6e77d --- /dev/null +++ b/calendar/diary/2026-04-13.md @@ -0,0 +1,25 @@ +# 任务 + +- [x] 开发:参加 IBS 项目晨会,同步昨日问题跟进事项。(李春良 0.5) +- [x] 开发:IBS 7.20.0 需求开发,7.20.0-自有业务中间话单统计-支持域名全选,开发 50%。(李春良 7.5) + +# 日志 + +Windows\PowerShell\按需下载万象方案-词库-模型-utf-8.ps1 -schemaType 0 -cliTargetFolder "E:\Software\Rime\data" -disableCNB + +我项目里把 backendUrl 换成了 httpUrl,backendMethod 换成了 httpMethod,backendTimeout 换成了 httpTimeout。McpToolEntity 相关的我已经换完了,还有一起其他地方还没换名字,帮我处理一下。 + +``` +# 1. 软重置到指定提交(保留所有更改在暂存区) +git reset --soft 7753f17b1de7add00daeb946b5c98c677c79b996 + +# 2. 提交合并后的更改(请替换为你的提交信息) +git commit -m "项目结构优化" + +# 3. 强制推送到远端(⚠️ 确保远端分支没有其他人基于旧提交工作) +git push --force-with-lease +``` + +# 总结 + +早晨去了中医院,感觉还是有改变的,这次一定要坚持吃药。晚上下班去拿药。 diff --git a/calendar/diary/2026-04-14.md b/calendar/diary/2026-04-14.md new file mode 100644 index 0000000..3bf3f3c --- /dev/null +++ b/calendar/diary/2026-04-14.md @@ -0,0 +1,12 @@ +# 任务 + +- [x] 开发:参加 IBS 项目晨会,同步昨日问题跟进事项。(李春良 0.5) +- [x] 开发:IBS 7.20.0 需求开发,7.20.0-自有业务中间话单统计-支持域名全选,开发完成。(李春良 5.5) +- [x] 客响:icws.jb51.net 高级配置查询问题。(李春良 1) +- [x] 客响:001-20260326005、046-20260402-0047 验收反馈问题。(佟彤 1) + +# 日志 + +# 总结 + +刷完了 ai gateway 的网管课程。 diff --git a/calendar/diary/2026-04-15.md b/calendar/diary/2026-04-15.md new file mode 100644 index 0000000..d82fcab --- /dev/null +++ b/calendar/diary/2026-04-15.md @@ -0,0 +1,33 @@ +# 任务 + +- [x] 开发:参加 IBS 项目晨会,同步昨日问题跟进事项。(李春良 0.5) +- [x] 开发:IBS 7.20.0 版本需求开发,HCDN业务标准化接入-典基平面接入与基础数据模型扩展,50%。(李春良 7) +- [x] 子雯:IBS 7.20.0 版本用例研讨,HCDN业务标准化接入-典基平面接入与基础数据模型扩展。(郑子雯 0.5) + +# 日志 + +当前项目是 spring ai 的源码,我另一个 mcp 网管引入了: + +``` + + org.springframework.ai + spring-ai-starter-mcp-server-webmvc + +``` + +结合源码给我讲讲 mcpSyncServer.addTool(spec); 的原理,以及项目启动 + +``` + @Tool(description = "根据角色 Key 查询该角色下所有可用的工具组信息。" + + "返回 JSON 格式,包含 tool_groups 数组,每个元素有 api_key 和 description。" + + "用于在调用具体工具前,先查询当前角色可用的工具组有哪些。") + public String selectToolGroup(@ToolParam(description = "角色 Key") String roleKey) { +``` + +这种代码是如何注册的。底层数据结构是怎么样的,详细,但是通俗易懂易于理解。 + +最终输出一个 MCP 原理说明 md 文档。 + +# 总结 + +优化了一下 mcp 的项目架构。 diff --git a/calendar/diary/2026-04-16.md b/calendar/diary/2026-04-16.md new file mode 100644 index 0000000..f0c908c --- /dev/null +++ b/calendar/diary/2026-04-16.md @@ -0,0 +1,34 @@ +# 任务 + +- [x] 开发:参加 IBS 项目晨会,同步昨日问题跟进事项。(李春良 0.5) +- [x] 开发:IBS 7.20.0 版本需求开发,HCDN业务标准化接入-典基平面接入与基础数据模型扩展,开发完成。(李春良 7.5) + +# 日志 + +为我的项目补充 readme 文档,但是要求精简,不要太花哨。因为我有专门维护 API 文档的的文件夹。 + +根据我当前的库表设计,我想实现的是用户先创建工具,然后创建工具组可以绑定多个工具,工具也可以绑定多个工具组,然后用户创建角色,角色可以绑定多个工具组,工具组可以绑定多个角色。用户可以用户可以删除工具,解除和工具组的关系,可以删除工具组解除和工具和角色的关系,用户可以删除角色,解除和工具组的关系。 + +帮我看看我的这个功能设计是否合理。然后看下我当前提供的所有 controller 是否能满足场景。 + +相当于我现在这个项目的权限过滤依托于 Filter 是吧。 + +我的整个设计是通过 角色 key 得到 角色 所有工具组的key 然后让智能体决策用哪个工具组,那是不是要改一下filter 的逻辑。针对这个工具RoleToolSelectionTool放开权限因为这时候智能体是用 角色 key 来的。 + + AI 用 roleKey 调 MCP + + → Filter 识别为角色认证,roleAuth=true + + → tools/list 只返回 select_tool_group + + → AI 调 select_tool_group(roleKey) 拿到工具组列表 + + → AI 决策选工具组,改用 toolGroupApiKey 重新连接 MCP + + → Filter 识别为工具组认证,toolGroupId=X + + → tools/list 返回该工具组的工具 + + → AI 正常调用工具 + +# 总结 diff --git a/calendar/diary/2026-04-17.md b/calendar/diary/2026-04-17.md new file mode 100644 index 0000000..6f9fa98 --- /dev/null +++ b/calendar/diary/2026-04-17.md @@ -0,0 +1,12 @@ +# 任务 + +- [x] 开发:参加 IBS 项目晨会,同步昨日问题跟进事项。(李春良 0.5) +- [x] 开发:IBS 7.20.0 版本需求开发,HCDN业务标准化接入-典基平面接入与基础数据模型扩展,开发完成。(李春良 4.5) +- [x] 客响:业务受理 200A260416481673001 重复反馈。(张鹏豪 1) +- [x] 客响:咪咕客户问题,上传IBS证书提示报错,用外部的工具将原有Sectigo的根证书更新成 DigiCert证书后,再次上传成功了,咱IBS证书校验是必须要用DigiCert证书吗?根据客户上传的证书链检测,末端证书在拉取其颁发者证书时失败,无法校验到可信根证书,暂无法确认该证书由正规可信机构颁发。需补充上传完整证书链文件,完成合规性校验。(李春良 2) + +# 日志 + +# 总结 + +海阳离职了,IBS 认识最早的一个人,他确定了下周三离职。聊了很多关于面试的事情。 diff --git a/calendar/diary/2026-04-18.md b/calendar/diary/2026-04-18.md new file mode 100644 index 0000000..a9493f6 --- /dev/null +++ b/calendar/diary/2026-04-18.md @@ -0,0 +1,7 @@ +# 任务 + +# 日志 + +# 总结 + +公园。 diff --git a/calendar/diary/2026-04-19.md b/calendar/diary/2026-04-19.md new file mode 100644 index 0000000..a58ec17 --- /dev/null +++ b/calendar/diary/2026-04-19.md @@ -0,0 +1,9 @@ +# 任务 + +# 日志 + +# 总结 + +约了李万讲解少儿编程的流程。作为自己第一个副业的发展方向。 + +最近在看林兆伦的趣味网络图解从基础到应用,这个书说实话一点页不趣味,很底层。有些内容无法理解还是瞎读了一遍,希望在脑子里有些概念。 diff --git a/calendar/diary/2026-04-20.md b/calendar/diary/2026-04-20.md new file mode 100644 index 0000000..157468a --- /dev/null +++ b/calendar/diary/2026-04-20.md @@ -0,0 +1,9 @@ +# 任务 + +- [x] 开发:参加 IBS 项目晨会,同步昨日问题跟进事项。(李春良 0.5) +- [x] 客响:处理信安信息山东 www.yssylt.com 硕安科技有限公司 鲁ICP备07003074号-1 未备案域名。(赵普明 0.5) +- [ ] 开发:IBS 7.20.0 版本需求开发,3.9 客服智能体一期底层大模型替换&mcp开发。(李春良) + +# 日志 + +# 总结 diff --git a/calendar/diary/2026年/2026-03-30.md b/calendar/diary/2026年/2026-03-30.md index bdc56c8..4db983a 100644 --- a/calendar/diary/2026年/2026-03-30.md +++ b/calendar/diary/2026年/2026-03-30.md @@ -2,6 +2,28 @@ # 日志 +动物园 + +地铁 6 + +门票 14 + +船 50 + +烤肠水 17 + +电瓶车 10 + +儿童乐园 10 + +电瓶车 10 + +吉野家 10.9 + +吉野家 36.9 + +地铁 6 + # 总结 调休,看病,田宝 DWY diff --git a/calendar/weeks/2026-W14.md b/calendar/weeks/2026-W14.md new file mode 100644 index 0000000..80a5c65 --- /dev/null +++ b/calendar/weeks/2026-W14.md @@ -0,0 +1 @@ +动物园、第一天喝药、药的副作用好大、MCP 网关开发、颐和园、白浮泉、火锅 diff --git a/calendar/weeks/2026-W15.md b/calendar/weeks/2026-W15.md new file mode 100644 index 0000000..d989828 --- /dev/null +++ b/calendar/weeks/2026-W15.md @@ -0,0 +1 @@ +烤鸭、杨妈回京、开始运动、鞋子、sing-box、英语视频、爬楼梯、脚手架、海阳衍君、板面、昌平中医医院、森林牧场、 diff --git a/calendar/weeks/2026-W16.md b/calendar/weeks/2026-W16.md new file mode 100644 index 0000000..cdfa788 --- /dev/null +++ b/calendar/weeks/2026-W16.md @@ -0,0 +1 @@ +中医院、ai gateway、mcp 项目架构优化、海阳离职、少儿编程 diff --git a/kids-coding/个人大纲.md b/kids-coding/个人大纲.md new file mode 100644 index 0000000..d0d11e6 --- /dev/null +++ b/kids-coding/个人大纲.md @@ -0,0 +1,87 @@ +# 2026-04-09 了解少儿编程,李万 + +# 2026-04-19 系统学习少儿编程流程,李万,100 元 + +## 一、机器人(硬件+编程) + +### 乐高 + +- 大颗粒(适用于幼儿园小班至大班) +- 小颗粒(侧重机械结构学习) +- Wedo2.0(包含电机及若干传感器) +- EV3+(包含大型、中型电机及多种传感器) + +### Spike + +- 小颗粒(侧重机械结构学习) +- Wedo2.0(包含电机及若干传感器) +- EV3+(包含大型、中型电机及多种传感器) + +### Arduino + +单片机相关编程与应用 + +## 二、编程(纯软件编程) + +### ① 图形化编程(单课时1.5-2小时,适用于二年级至四年级) + +- Scratch:由麻省理工学院开发的编程基础学习软件 +- 国内平台:编程猫-源码编辑器 + +### ② Python编程(适用于三年级至六年级) + +### ③ C++编程(适用于五年级至六年级及以上) + +#### 升学相关(考级、比赛及对应成绩要求) + +- 适用地区:北京、上海、广州、深圳、四川、江苏 +- 初升高特长生名额要求:GESP 4级及以上、白名单赛事省级一等奖及以上 + +#### 学习内容 + +- 语法基础 +- 简单算法(枚举法、二分法、排序、递归) +- 数据结构(链表、图、树、栈、队列) +- 高级算法 + +#### C++练习平台 + +洛谷、上海竞赛平台(OJ在线评判平台) + +## 三、比赛和考级 + +### 比赛 + +- 商业赛 +- 白名单赛事:由教育部、教育厅、教育局背书的官方认可赛事 +- C++相关赛事:中国计算机学会主办——奥林匹克信息学竞赛(面向高中生) +- 中国计算机学会主办——CSP-J/S +- CSP-J:面向初中生 +- CSP-S:面向初中生、高中生 + +### 考级 + +- 机器人考级:中国电子协会青少年机器人考级 +- 编程考级:图形化编程——中国电子协会青少年考级;Python、C++——中国计算机学会GESP考级 + +## 四、薪资待遇 + +### 工作时间 + +周三至周日;周内(周三至周五)14:00-21:00;周末08:00-18:00 + +### 薪资构成 + +- 无责底薪:5000-8000元 +- 业绩提成:1-3个百分点,涵盖报课、续费、比赛报名费 +- 课时费:8-16元/小时/人;以6人班、3小时/课为例,单课课时费计算:6人×3小时×16元/小时/人=288元 +- 综合薪资:10000元以上 + +### 兼职待遇 + +- 上门一对一:150-300元/小时 +- 机构周末代课:500-800元/天(单节课时费约200元) + +### 放假安排 + +错峰放假 diff --git a/personal/个人/情绪价值.md b/personal/个人/情绪价值.md index 1a23dcd..61b2c0d 100644 --- a/personal/个人/情绪价值.md +++ b/personal/个人/情绪价值.md @@ -24,3 +24,7 @@ 至于其他技术,Python 无需刻意系统学习,未来可借助 AI 快速生成和理解脚本,在实践中随用随学即可。而 Web 技术则应继续保持学习广度,因为未来的趋势将是 AI 辅助下的全栈开发。如果你的志向是底层系统,可以挑战一下 Rust,它与 C 将共同主宰未来的底层世界,但学习曲线较陡,量力而行。 最核心的是,你需要转变思维:单纯的“程序员思维”已然落后,未来人人都要具备“产品经理”的视野。我们应从解决问题的角度出发,认识到每种语言都有其擅长的领域,像一个项目主导者一样,灵活运用多种语言和 AI 工具来构建和交付有价值的产品。 + +--- + +真正的问题不是“我没时间创作”,而是“我有没有一个作品,值得我把所有时间都变成它的养料”。 diff --git a/personal/家人/小杨-年报-AI/年度汇报 Prompt.md b/personal/家人/杨昆-年报/年度汇报 Prompt.md similarity index 100% rename from personal/家人/小杨-年报-AI/年度汇报 Prompt.md rename to personal/家人/杨昆-年报/年度汇报 Prompt.md diff --git a/personal/家人/小杨-年报-AI/年度汇报大纲-v1.md b/personal/家人/杨昆-年报/年度汇报大纲-v1.md similarity index 100% rename from personal/家人/小杨-年报-AI/年度汇报大纲-v1.md rename to personal/家人/杨昆-年报/年度汇报大纲-v1.md diff --git a/personal/家人/小杨-年报-AI/年度汇报数据.md b/personal/家人/杨昆-年报/年度汇报数据.md similarity index 100% rename from personal/家人/小杨-年报-AI/年度汇报数据.md rename to personal/家人/杨昆-年报/年度汇报数据.md diff --git a/personal/家人/小杨-年报-AI/年报数据-归档.md b/personal/家人/杨昆-年报/年报数据-归档.md similarity index 100% rename from personal/家人/小杨-年报-AI/年报数据-归档.md rename to personal/家人/杨昆-年报/年报数据-归档.md diff --git a/personal/电影/漫威电影.md b/personal/影视/漫威电影.md similarity index 100% rename from personal/电影/漫威电影.md rename to personal/影视/漫威电影.md diff --git a/personal/电影/直播源.md b/personal/影视/直播源.md similarity index 100% rename from personal/电影/直播源.md rename to personal/影视/直播源.md diff --git a/resource/ai/Beam Search.md b/resource/ai/Beam Search.md new file mode 100644 index 0000000..045ed01 --- /dev/null +++ b/resource/ai/Beam Search.md @@ -0,0 +1,43 @@ +# Beam Search(束搜索)通俗解释 + +一句话:**一种在生成序列(文本、翻译、语音)时,比“贪心”更优、比“穷举”更快的搜索算法**。 + +## 1. 核心场景 + +AI 生成文字时,每一步都要选下一个词: + +- Greedy Search(贪心):**每步只选概率最高的1个**,容易局部最优、整体很差。 +- Exhaustive Search(穷举):**试所有可能**,效果最好但太慢、算力爆炸。 +- **Beam Search**:**每步只保留概率最高的 k 个候选路径**,平衡效果与速度。 + +## 2. 超简单比喻 + +你要走迷宫找终点: + +- 贪心:每步只走眼前最好的一条路。 +- 束搜索(beam=k):**每步保留 top-k 条最好的路**,一起往前走,最后选整条路径概率最大的。 + +## 3. 关键参数 + +- **beam width(束宽)= k** + - k=1 = 贪心搜索 + - k越大 → 效果越好、越慢 + - k=无穷 = 穷举 + +## 4. 工作流程(极简) + +1. 第一步:选出**概率最高的 k 个词**。 +2. 第二步:对这 k 个词,**分别生成下一个词**,再从所有结果里**重新选 top-k**。 +3. 重复直到结束,**选整条序列概率最大**的输出。 + +## 5. 优点 & 缺点 + +✅ 优点: + +- 比贪心**更通顺、更少局部最优** +- 比穷举**快得多、可实际使用** + +❌ 缺点: + +- 仍不是全局最优 +- 可能生成**重复、呆板、过于安全**的句子(现在大模型多用采样代替) diff --git a/resource/ai/Jinja 模板引擎.md b/resource/ai/Jinja 模板引擎.md new file mode 100644 index 0000000..bd522ee --- /dev/null +++ b/resource/ai/Jinja 模板引擎.md @@ -0,0 +1,71 @@ +一种"带插件的文本生成器"。它允许你创建一个包含变量和逻辑的"模板"文件,然后在渲染时填入具体数据,最终生成想要的文本格式(如 HTML、JSON、Markdown 等)。 + +它的语法简单直观,主要有三种核心元素: + +- **`{{ … }}`**:用于输出变量值,例如 `{{ user_name }}` 会在渲染时被具体的用户名替换。 +- **`{% … %}`**:用于执行逻辑,例如循环 `{% for item in items %}` 或判断 `{% if user_logged_in %}`。 +- **`{# … #}`**:用于添加注释,不会出现在最终输出中。 + +### 提示词(Prompt)工程 + +主要用于**动态、精确地构建和管理提示词(Prompt)**。其核心价值在于将"提示词模板"与"可变数据"分离。 + +#### 1. 构建动态、结构化的提示词 + +在实际应用中,很少会发送固定的文本给 AI。你需要将用户问题、聊天历史、检索到的知识等动态拼接到提示词中。Jinja 让这件事变得优雅和可控。 + +**示例:一个智能客服的提示词模板** + +```jinja +你是一名专业的客服助手,名叫"小智"。 +请基于以下提供的资料,回答用户的问题。 +如果资料中找不到答案,请直接说"不知道",不要编造。 + +### 参考资料: +{% for doc in search_results %} +- {{ doc.title }}: {{ doc.content }} +{% endfor %} + +### 对话历史: +{% for msg in chat_history %} +{{ msg.role }}: {{ msg.content }} +{% endfor %} + +### 用户当前的问题是: +{{ current_question }} + +请给出你的回答: +``` + +在这个模板中,`search_results`、`chat_history` 和 `current_question` 都是变量。渲染时,Jinja 会循环填入所有搜索结果和对话记录,生成一个结构清晰、信息完整的提示词。 + +#### 2. 统一聊天模型的提示词格式(Chat Template) + +这是 Jinja 在 AI 领域最"杀手级"的应用。每个大模型(如 Llama、Mistral、ChatGLM)对聊天对话的输入格式要求都不同。**Chat Template** 就是用 Jinja 语法写的一段脚本,定义了如何将 `messages` 数组(包含 role 和 content 的对话)转换成模型能理解的单一字符串。 + +**一个简化的 Chat Template 示例:** + +```jinja +{% for message in messages %} + {% if message['role'] == 'user' %} + {{ '[INST] ' + message['content'] + ' [/INST]' }} + {% elif message['role'] == 'assistant' %} + {{ ' ' + message['content'] + ' ' }} + {% endif %} +{% endfor %} +``` + +- **输入(Messages)**: `[{"role": "user", "content": "你好"}, {"role": "assistant", "content": "你好!有什么可以帮你的?"}]` +- **输出(Prompt String)**: `[INST] 你好 [/INST] 你好!有什么可以帮你的? ` + +AI 框架如 Hugging Face Transformers 已经内置了对 Jinja Chat Template 的支持。你只需调用 `tokenizer.apply_chat_template(messages)`,它就会自动使用模型对应的 Jinja 模板来生成正确的输入,极大地简化了开发流程。 + +#### 3. 在 AI 工作流和数据转换中作为"胶水" + +在复杂的 AI 应用(如 RAG 检索增强生成、Agent)和工作流平台(如阿里云的 AI Studio、Azure 的 Prompt Flow)中,Jinja 常被用作轻量级的**数据处理和格式化工具**。 + +例如,可以将检索到的多个相关文档片段,通过一个 Jinja 模板快速格式化为一个结构清晰的 Markdown 列表,再输入给大模型。 + +``` +{% if not add_generation_prompt is defined %}{% set add_generation_prompt = false %}{% endif %}{% set ns = namespace(is_first=false, is_tool=false, is_output_first=true, system_prompt='') %}{%- for message in messages %}{%- if message['role'] == 'system' %}{% set ns.system_prompt = message['content'] %}{%- endif %}{%- endfor %}{{bos_token}}{{ns.system_prompt}}{%- for message in messages %}{%- if message['role'] == 'user' %}{%- set ns.is_tool = false -%}{{'<|User|>' + message['content']}}{%- endif %}{%- if message['role'] == 'assistant' and message['content'] is none %}{%- set ns.is_tool = false -%}{%- for tool in message['tool_calls']%}{%- if not ns.is_first %}{{'<|Assistant|><|tool▁calls▁begin|><|tool▁call▁begin|>' + tool['type'] + '<|tool▁sep|>' + tool['function']['name'] + '\\n' + '```json' + '\\n' + tool['function']['arguments'] + '\\n' + '```' + '<|tool▁call▁end|>'}}{%- set ns.is_first = true -%}{%- else %}{{'\\n' + '<|tool▁call▁begin|>' + tool['type'] + '<|tool▁sep|>' + tool['function']['name'] + '\\n' + '```json' + '\\n' + tool['function']['arguments'] + '\\n' + '```' + '<|tool▁call▁end|>'}}{{'<|tool▁calls▁end|><|end▁of▁sentence|>'}}{%- endif %}{%- endfor %}{%- endif %}{%- if message['role'] == 'assistant' and message['content'] is not none %}{%- if ns.is_tool %}{{'<|tool▁outputs▁end|>' + message['content'] + '<|end▁of▁sentence|>'}}{%- set ns.is_tool = false -%}{%- else %}{% set content = message['content'] %}{% if '' in content %}{% set content = message['content'].replace('', '').split('')[-1] %}{% endif %}{{'<|Assistant|>' + content + '<|end▁of▁sentence|>'}}{%- endif %}{%- endif %}{%- if message['role'] == 'tool' %}{%- set ns.is_tool = true -%}{%- if ns.is_output_first %}{{'<|tool▁outputs▁begin|><|tool▁output▁begin|>' + message['content'] + '<|tool▁output▁end|>'}}{%- set ns.is_output_first = false %}{%- else %}{{'\\n<|tool▁output▁begin|>' + message['content'] + '<|tool▁output▁end|>'}}{%- endif %}{%- endif %}{%- endfor -%}{% if ns.is_tool %}{{'<|tool▁outputs▁end|>'}}{% endif %}{% if add_generation_prompt and not ns.is_tool %}{{'<|Assistant|>'}}{% endif %} +``` diff --git a/resource/ai/MCP 给 AI 的数据结构.md b/resource/ai/MCP 给 AI 的数据结构.md new file mode 100644 index 0000000..d8d2bee --- /dev/null +++ b/resource/ai/MCP 给 AI 的数据结构.md @@ -0,0 +1,77 @@ +to AI: + +```json +{ + "messages": [ + { + "content": "有哪些工具可以使用", + "role": "user" + } + ], + "model": "gpt-4.1-mini", + "stream": false, + "temperature": 0.7, + "tools": [ + { + "type": "function", + "function": { + "description": "获取公司雇员信息", + "name": "JavaSDKMCPClient_getCompanyEmployee", + "parameters": { + "additionalProperties": false, + "type": "object", + "properties": { + "xxxRequest01": { + "type": "object", + "properties": { + "city": { + "type": "string", + "description": "城市名称,如果是中文汉字请先转换为汉语拼音,例如北京:beijing" + }, + "company": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "公司名称" + }, + "type": { + "type": "string", + "description": "公司类型" + } + }, + "required": [ + "name", + "type" + ], + "description": "公司信息,如果是中文汉字请先转换为汉语拼音,例如北京:jd/alibaba" + } + }, + "required": [ + "city", + "company" + ] + }, + "xxxRequest02": { + "type": "object", + "properties": { + "employeeCount": { + "type": "string", + "description": "雇员姓名" + } + }, + "required": [ + "employeeCount" + ] + } + }, + "required": [ + "xxxRequest01", + "xxxRequest02" + ] + } + } + } + ] +} +``` diff --git a/resource/java/MCP Json 注解.md b/resource/java/MCP Json 注解.md new file mode 100644 index 0000000..9d984b6 --- /dev/null +++ b/resource/java/MCP Json 注解.md @@ -0,0 +1,54 @@ +这些注解可以实现对对象的描述: + +```java +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyDescription; +``` + +此时对象的 json 描述信息 + +```json +{ + "type" : "object", + "id" : "urn:jsonschema:cn:bugstack:ai:mcp:server:test:model:XxxRequest01", + "properties" : { + "city" : { + "type" : "string", + "required" : true, + "description" : "城市名称,如果是中文汉字请先转换为汉语拼音,例如北京:beijing" + }, + "company" : { + "type" : "object", + "id" : "urn:jsonschema:cn:bugstack:ai:mcp:server:test:model:XxxRequest01:Company", + "required" : true, + "description" : "公司信息,如果是中文汉字请先转换为汉语拼音,例如北京:jd/alibaba", + "properties" : { + "name" : { + "type" : "string", + "required" : true, + "description" : "公司名称" + }, + "type" : { + "type" : "string", + "required" : true, + "description" : "公司类型" + }, + "deep" : { + "type" : "object", + "id" : "urn:jsonschema:cn:bugstack:ai:mcp:server:test:model:XxxRequest01:Company:Deep", + "required" : true, + "description" : "测试", + "properties" : { + "x01" : { + "type" : "string", + "required" : true, + "description" : "测试" + } + } + } + } + } + } +} +``` diff --git a/resource/python/python 环境.md b/resource/python/python 环境.md new file mode 100644 index 0000000..417e0aa --- /dev/null +++ b/resource/python/python 环境.md @@ -0,0 +1,28 @@ +scoop 安装的所以 + +全局包: + +``` +E:\MyScoop\Scoop\apps\python\current\Lib\site-packages +``` + +最佳实践:虚拟环境(venv) + +传统: + +``` +python -m venv .venv +.venv\Scripts\Activate.ps1 # 激活 +pip install requests +python main.py +deactivate # 退出 +``` + +用 uv 完全不需要 activate/deactivate: + +``` +uv init +uv add requests # 自动管理 .venv +uv run main.py # 自动用 .venv 里的环境运行 + +``` diff --git a/resource/剪藏/日常科普/1982 年 - 2002 年熊猫金套币回收参考价.md b/resource/剪藏/日常科普/1982 年 - 2002 年熊猫金套币回收参考价.md deleted file mode 100644 index 0469bad..0000000 --- a/resource/剪藏/日常科普/1982 年 - 2002 年熊猫金套币回收参考价.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -url: https://mp.weixin.qq.com/s/8W-wADlHhYVX4hYOaJmQLw -title: 1982 年 - 2002 年熊猫金套币回收参考价 -date: 2024-04-27 09:34:25 -tag: [] -summary: ---- - -**猫金是国内稳健投资品之一,一直备受各方青睐。最近一段时间黄金价格波动异常,很多人动了猫金的心思。给大家整理了一下 1982 年 - 2002 年间套金猫的回收价格,仅供参考!** - -![](../../../attachment/images-uuid/2114decb24a4440b87d77813fdaa1aa2.png) - -

年份

规格

参考价格

2002

金套

45000

2001

金套

33500

2000

金套

40000

1999

金套

40500+

1998

金套

78000+

- -

1997

金套

35000+

1996

金套

45000+

1995

金套

90000+

1994

金套

43800+

1993

金套

33500-33800

- -

1992

金套

33500-33800

1991

金套

33500-33800

1990

金套

33500-33800

1989

金套

33500-33800

1988

金套

33500-33800

- -

1987

金套

33500-33800

1986

金套

33500-33800

1985

金套

33500-33800

1984

金套

33500-33800

1983

金套

33800+

- -

1982

金套

48000+

- -![](../../../attachment/images-uuid/8706f83a3ed9464f971a1dfe5b13cf1b.png) diff --git a/resource/剪藏/日常科普/B 站有哪些宝藏的人文社科老师?.md b/resource/剪藏/日常科普/B 站有哪些宝藏的人文社科老师?.md deleted file mode 100644 index ffa55ad..0000000 --- a/resource/剪藏/日常科普/B 站有哪些宝藏的人文社科老师?.md +++ /dev/null @@ -1,135 +0,0 @@ ---- -url: https://mp.weixin.qq.com/s/fs59hNnrmnkLcZqcQ51s0Q -title: B 站有哪些宝藏的人文社科老师? -date: 2024-04-13 13:52:59 -tag: [] -summary: ---- - -# 1. 杨宁的文学理论课 - -“学中文还有用吗?” - -来自中央民族大学的 **@杨宁老师**,曾因这个话题上过热搜。而他的 B 站授课视频,也一直是网友热议的素材。 - -讲课时,杨老师会随机穿插时下一些热门话题,比如《小时代》《甄嬛传》《奇葩说》《非诚勿扰》等,也会拿他个人的生活经历体验如看电影和相亲等来展开,让原本晦涩的概念变得生动起来。 - -他的《文学理论课程》,被很多网友称为 “梦开始的地方”,播放量超过了 600 万。 - -![](../../../attachment/images-uuid/848556603d3c4e5d9b75cde9e8bce4d2.png) - -杨老师曾说:“文学是文化的一部分,更是生活的一部分。” - -只有加深对文学的理解,才能融入更深广的文化和生活之中,才能在思考中获得更丰富的启发。 - -![](../../../attachment/images-uuid/cc089af0228a4e06b72db5cb48571c9e.png) - -# 2.《红楼梦》公开课 - -想了解《红楼梦》? - -来自台湾大学的中文系教授 **@歐麗娟** 的《红楼梦》公开课,在 B 站有近 1000 万网友观摩。 - -![](../../../attachment/images-uuid/78e60da161e74899bd155eeef80a868a.png) - -她对《红楼梦》的解读,从东西方文学理论、社会学、人类学、哲学、心理学等诸多角度切入,同时补充了大量的历史背景知识。 - -入驻 B 站后,欧老师积累了 117.3 万粉丝,又开了《中国文学史》。《孔雀东南飞》《卫风 · 氓》的讲解,都是从人性的角度去解读婚恋悲剧。 - -听欧丽娟老师的课,不仅能学习课本上的知识,还能学到许多为人处世的道理。 - -![](../../../attachment/images-uuid/c58112e63c3d431ea21aa7aaa7dc716f.png) - -# 3. 世界历史 500 年 - -如果要在 B 站听历史课,很多网友都首推 **@许倬云说历史** 。 - -作为美国匹兹堡大学历史系荣休教授,许倬云是华人世界最具影响力的史学大家。2020 年,许老的一句 “往里走,安顿自己”,让不少年轻人找到了方向。 - -![](../../../attachment/images-uuid/532d6139007342a59df2191c96708f16.png) - -他讲《中国通史》,从华夏文明起源讲到近代中国,“必须了解我们自己,才能再逐渐了解别人”。 - -他也关心年轻人的未来,在焦虑年代如何找到自己、选择职业、坚守本心。 - -2022 年,92 岁的 **@许倬云说历史** 入驻了 B 站,成为了一名知识 UP 主。如今,已经 94 岁的他依然在 B 站更新历史内容。 - -![](../../../attachment/images-uuid/3a49f5d0de6c4450afacc3cfd6b20661.png) - -# 4. 生活中的经济学 - -很多人觉得经济学晦涩难懂,但在 **@靳卫萍老师** 的讲解下,经济学以一种全新的面貌激发了网友的兴趣。 - -作为清华大学副教授,靳老师入驻 B 站后开了《看懂宏观经济思维》《中国经济趋势分析》《经济学思维》三门经济学课程。讲《生活中的经济学》,靳老师会以日常中的经济现象出发,让网友看懂生活中的经济学。 - -在她看来,经济学不仅只是空泛的理论,它不仅关乎宏观,也影响着微观上的专业选择、职业发展、婚恋问题…… - -![](../../../attachment/images-uuid/db87c8cb8bdb4e1f8f67b20c31760e4a.png) - -靳老师也会对当下的经济热点话题进行解析,比如 “美元陷阱”、“住房双轨制”、“日本央行加息” 等蕴含着怎样的规律和趋势,又是如何影响我们日常生活的。 - -靳老师在讲课时曾引用经济学家凯恩斯的话:“经济学理论并没有提供一套立即可用的完整结论。它不是一种教条,只是一种方法。” - -无怪 B 站网友直言:听靳老师讲经济学,走遍天下也不怕。 - -![](../../../attachment/images-uuid/0e8425230a6d44a5b58708e8355b82be.png) - -# 5. 西方美术史 - -艺术是什么?为什么大家看画展都不说话?这年头学艺术还有用吗? - -**@孙乃树** 的艺术学课程,可以培养你对艺术的鉴赏能力。 - -![](../../../attachment/images-uuid/7a38e282cf444d499663c7d9a4e088c7.png) - -孙老师一直在华东师范大学、上海视觉艺术学院教授美术史、艺术概论的课程,他自诩 “艺术传播者”,30 多年来始终向大众科普艺术。 - -很多网友最早从他的音频听起,后来转移到课堂录像,直到孙老师入驻 B 站成为了一名 UP 主,虽然头发变白,但依旧不改飘逸。 - -在他的课堂上,不仅可以了解艺术,学习如何欣赏艺术,更可以学到用艺术的想象力解决生活中的问题。 - -他告诉大家:艺术并不高大上,它属于每一个人。 - -![](../../../attachment/images-uuid/3e382cc8ec1148548921475e7263a872.png) - -# 6. 尼采和《悲剧的诞生》 - -有人说,哲学已经没有用了。 - -但在 **@余明锋的哲学课** 看来,哲学恰恰是这个时代最需要的学科。 - -![](../../../attachment/images-uuid/ac5945f7f46c4f11a6cb334a5b219946.png) - -作为同济大学哲学系副教授,余明锋的《现代西方哲学 150 年》课程,一直很受 B 站网友欢迎。 - -相比于枯燥晦涩的理论,余老师的授课生动形象,他讲哲学大师,尼采是 “emo 大师”,叔本华是欧洲的佛教徒,打破了很多网友对哲学这门课程的刻板印象。 - -更重要的是,余老师的哲学课也让大家了解到,当哲学照进现实,才能 “更为深入地,甚至于更为富有想象力地,去理解我们身处其中的现实”。 - -![](../../../attachment/images-uuid/3e2b53d98280499e9633dd767776b3cd.png) - -# 7. 戴锦华讲电影 - -如果提名当下最权威的影评家,当属 **@戴锦华讲电影** 老师。 - -作为北京大学电影与文化研究中心主任,戴老师是很早一批就入驻 B 站的大学老师。她在 B 站开设的大师电影课《性别与凝视》《中国电影 50 部》累计有 1000 万多网友订阅。 - -无论是探讨女性电影背后的原因和价值,还是一些女性话题,比如耽美的流行是否证明了女性意识的觉醒,戴老师都会给出新的视角作为参考。 - -![](../../../attachment/images-uuid/4c5a7e377a7b484bafaf23dedd80be64.png) - -另一方面,戴老师也会从历史角度,讲述 80 年代到当下以来中国电影文化所形成的历史脉络。 - -她不仅仅是教大家怎么 “看电影”,而是深入剖析电影视听语言,揭示影片背后文化心理和社会意识形态症候。 - -![](../../../attachment/images-uuid/cbfa29d1226c436aabf43c5aa4130065.png) - -如今,越来越多老师入驻 B 站开课,也吸引了越来越多网友上课。 - -每一次的课堂分享,课堂视频上网友的点赞、转发、留言,就是真实课堂上的 “掌声”、反馈和课后提问,老师和网友之间的互动构成了网络课堂这个共同体。 - -正如一位网友所言,每每听课,总感到回归知识最纯粹的本质。 - -![](../../../attachment/images-uuid/67e21cd9676b4a9990e870c5030eec08.png) - -![](../../../attachment/images-uuid/3bd531ff898f47eea1064c9640af6f48.png) diff --git a/resource/剪藏/日常科普/北京 120 非急危重症可拨打这些热线.md b/resource/剪藏/日常科普/北京 120 非急危重症可拨打这些热线.md deleted file mode 100644 index 04310b7..0000000 --- a/resource/剪藏/日常科普/北京 120 非急危重症可拨打这些热线.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -url: https://mp.weixin.qq.com/s?__biz=MzA5NDY5MzUzMQ==&mid=2655460718&idx=1&sn=b656c877a1de7574478f3d403b819d60&chksm=8bf90c9abc8e858c3a294a0f456cf320f749b92ee9502dae53ace1822904cc537ff0c0a908a2&scene=126&sessionid=1672026415&subscene=236&poc_token=HNe_BGaj1mANkwvnRNge6PO7HpzgIV4msiHX_018 -title: 北京 120 日接急救电话最高可达 9 万个!非急危重症可拨打这些热线—— -date: 2024-03-28 08:55:15 -tag: [] -summary: ---- - -![](../../../attachment/images-uuid/eb2407e50d1f42378a23518fdfc7b25f.png) - -![](../../../attachment/images-uuid/a487e809c6ac495f9b45d946834df4c9.png) - -![](../../../attachment/images-uuid/20343be844ef4d3cbe6f3975531e23c0.png) - -![](../../../attachment/images-uuid/f8cae58cb49b4ad09efebbbcf9166e6a.png) diff --git a/resource/剪藏/日常科普/咖啡知识(一).md b/resource/剪藏/日常科普/咖啡知识(一).md deleted file mode 100644 index 5f9fe40..0000000 --- a/resource/剪藏/日常科普/咖啡知识(一).md +++ /dev/null @@ -1,63 +0,0 @@ ---- -url: https://mp.weixin.qq.com/s?__biz=MzI1MTA4MDYwOA==&mid=2650161122&idx=1&sn=be8d15fb04aa25d56f6f812bd83c9a11&chksm=f1fae52dc68d6c3b6d4dfaa7d5023cc7b003f27a1ce7a9da58ab89bdc238b4b9be961d1b47f9&scene=21#wechat_redirect -title: 给你介绍几张 “咖啡知识生动图表” 吧! -date: 2024-04-16 06:39:51 -tag: [] -summary: ---- - -要说从小到大,许多知识为了强化记忆和产生强烈链接,是不是总是会有一些精炼版图文并茂的知识卡片,来帮助你消化并理解呢?确实图表形式言简意赅,而且会让你在脑中建立深刻印象,是个掌握各类知识的好方法。 - -![](../../../attachment/images-uuid/c2c987472fd942f696e4c487baa93e7a.png) - -在咖啡领域里,自然也是有很多通过图表去表达知识点的,大到风味轮、金杯萃取,小到咖啡研磨颗粒度描述、各式器具冲煮技法操作步骤等等。生动有趣的一张张图表,除了很想拥有一份印刷版作为居家装饰海报之外,还能像 “识字卡片” 一样,帮助你掌握一些咖啡相关的基础知识。 - -![](../../../attachment/images-uuid/d70afddfe06f40899a4dac3143d8bb7c.png) - -今天就来给大家介绍几张在网络上比较流行的咖啡知识生动图表,我会将当中的英文部分做好翻译并附在图片上,有需要的话,可以保存收藏啦。 - -![](../../../attachment/images-uuid/0132c500e3d841e48731cc036cbf66ab.png) - -大家接触咖啡更多是从喝咖啡开始的,所以关于咖啡果实、咖啡生豆、咖啡处理法等信息,就显得格外遥远,所以就缺乏具象感知,就拿豆种来说,各种名字和庞杂的咖啡树体系已经让人很摸不着头脑了,所以取其精华,把那些相对来说常见易懂的信息进行提炼,也就一目了然啦。 - -![](../../../attachment/images-uuid/e8a649d8c9c540b2bdacc5ba5b39411b.png) - -提到咖啡果实肯定要先最直接的了解到底果实的构成是怎样的,这个有点生物课的咖啡果实剖面图,就让人比较直观知晓啦。这组图片的好处就是实物解读,非模拟图示,但内容会粗略了一些。例如果肉和咖啡豆之间还有一个果胶层的,这个在图片上也能比较直观看到。但至少笼统认识一颗咖啡果实,一下子就让你记住了。 - -![](../../../attachment/images-uuid/0ca5ffed30454dac830991113226dcd5.png) - -另外,不同咖啡品种的花朵和果实应该大家很少会见到,或者见到最多的也就是阿拉比卡豆种的了,所以这两张图示就将不同咖啡豆种之间果实和花朵的差异做出了直观示意。其中值得注意的是,昨天和大家提到的藏咖啡,在花朵图示里面有哟,注意看,那个小小朵的就是啦,也算是难得看到关于它的图片和信息了。 - -![](../../../attachment/images-uuid/8e082da914284a13b5cd1e159ebdad72.png) - -说完咖啡果实,那接下来就是处理法啦,关于常见的日晒、水洗、蜜处理,这些处理法对于咖啡小白来说,单纯从文字层面去理解是有点晦涩的,不过通过这样的示意图,理解起来就显得容易多了。还有将描述拟人化的方式,看着也是蛮可爱的。 - -![](../../../attachment/images-uuid/395d3f4a34a94349aec9d195a60b30ba.png) - -还有对 bean to cup 做一个简单示意的,这种插画风格确实童趣一点,也让知识变得不那么枯燥了,也许细节并未过多提及,但留给你一个初始印象已经足够了,至少让我们知道自己所喝的咖啡到底是怎么来的。 - -![](../../../attachment/images-uuid/f8b1cf32fd4f41bda8f49d2ef6508a63.png) - -处理之后就是要烘焙啦,在烘焙这部分,我找到的基础信息也比较有限,因为我自己对烘焙研究程度就不算深,例如对于烘豆机一些基础构造的了解,我觉得这样一个插画风格的图示也蛮有趣的,另外对于直火或半直火烘豆机的运作原理也有一个图示解释,至少让我们有个感性认识吧。 - -![](../../../attachment/images-uuid/fb284c5cadf34ab7a68fa02e662125e5.png) - -![](../../../attachment/images-uuid/1927940a25914eeaa7f712070fe45870.png) - -然而我比较想说,距离我们每个消费者最近的,那就是我们要知道烘焙对于咖啡风味的影响,这张图示就通过咖啡从生豆到熟豆这一过程都产生了怎样颜色上的变化,以及不同阶段的风味特征,这样你就知道极浅烘焙就会比较酸,越深苦味会增强,不过这个图示也就到一爆后截止,也算是现在比较主流的烘焙度了,再深的二爆后豆子,连我也不想看到了,哈哈哈。尽管不同烘豆机可能细微数据是有差异的,但这张烘焙图表作为参考足够帮助你了解烘焙咖啡不同阶段的不同状态。 - -![](../../../attachment/images-uuid/42a06819fad844618ecf6f762ead8e58.png) - -影响咖啡风味除了烘焙环节之外,还有在原产地的地缘情况也会有着比较决定性的因素哦,这样一张 “海拔高度对咖啡风味的影响”,也能比较直观了解不同海拔高度种植咖啡的风味特征偏好,这里只是在非特殊处理参与的基础上,较为普通适配的信息,大家也不要过度解读哈。 - -![](../../../attachment/images-uuid/4c36935afe3b4357982502248fd0181e.png) - -最后就再聊几个冲煮方面的吧,我其实并没有节选太多示意图,只是想把这种风格介绍给大家,也希望你日后在接触一些咖啡信息的时候,可以多多留意和收藏这样的知识卡片,深入浅出逐步提升自己的咖啡知识储备吧。 - -![](../../../attachment/images-uuid/c73958dc6bcb4a67a87412eb37afcba7.png) - -关于摩卡壶用到的小伙伴可能不太多,但对于户外爱好者来说,可能有些还挺喜欢用摩卡壶的,这种操作原理的剖面图也比较直观了,如果你还没入手但对这样的萃取原理产生兴趣,不妨也可以购置一个。摩卡壶真心算是咖啡器具里样式、颜色和款式最丰富的了,一眼望去,好多联名限量和特色版本,都想入手了。此前我自己买过一个比乐蒂摩卡壶,被颜值征服的。 - -![](../../../attachment/images-uuid/ba3b15bcabe247818636a8cfe587835b.png) - -最后展示的这张就是想表达,不管你喝什么饮料,记得都不能忽视自身身体健康,要熟悉和了解常见的不同饮料所含咖啡因量,只有结合自身耐受性,才能更愉快的享受它们哟!祝各位:天天美式、天天没事,饮咖愉快! diff --git a/resource/剪藏/日常科普/咖啡知识(二).md b/resource/剪藏/日常科普/咖啡知识(二).md deleted file mode 100644 index 79d1a56..0000000 --- a/resource/剪藏/日常科普/咖啡知识(二).md +++ /dev/null @@ -1,67 +0,0 @@ ---- -url: https://mp.weixin.qq.com/s/uCI0VuLtRegyaEIYw2SYXA -title: “咖啡知识生动图表” 第二弹来啦! -date: 2024-04-15 17:09:49 -tag: [] -summary: ---- - -前不久关于 “[咖啡知识生动图表](http://mp.weixin.qq.com/s?__biz=MzI1MTA4MDYwOA==&mid=2650161122&idx=1&sn=be8d15fb04aa25d56f6f812bd83c9a11&chksm=f1fae52dc68d6c3b6d4dfaa7d5023cc7b003f27a1ce7a9da58ab89bdc238b4b9be961d1b47f9&scene=21#wechat_redirect)”的一篇分享赢得很多小伙伴的喜爱,更是让那篇内容直冲 10w + 的阅读量,所以我就将 “生动图表” 做成系列分享,也会专门创建一个合集,以便大家日后统一查看。那话不多说,就上最新一期的咖啡图表小课堂吧! - -![](../../../attachment/images-uuid/f67ba90567dd423389aa98897048dabb.png) - -这一期我节选的知识卡片虽然会有些细碎,但却是我们日常在接触咖啡知识过程中,特别容易混淆或者理解起来极其晦涩的内容,所以刚好通过图表的方式能帮助大家强化记忆和梳理知识结构,这些小内容可以丰富你的咖啡知识框架信息,也对日后在接触其他咖啡信息时,变得更容易理解了! - -![](../../../attachment/images-uuid/e2f2fe78b82547fdb133e6c35616c5cc.png) - -接下来就由浅入深的来和大家聊聊那些细碎又易混淆的咖啡知识吧,第一个要聊的还是从认识咖啡豆开始,在第一期的分享中也有讲到了,下面这个实物图示会把咖啡从咖啡果实 - 生豆 - 熟豆这一整个过程的形态变化放在一起去直观感受,对于初识咖啡的小伙伴来说,这个内容还是蛮好的。 - -![](../../../attachment/images-uuid/412b249c92854152ab9a6529bdc787c7.png) - -接着就是烘焙了,我们知道的是不同烘焙度对于风味有着重要影响,越深烘焙的豆子苦味就会越强烈,反之烘焙度越浅,酸感就会更明亮(这个在第一期知识卡片的内容里已经涉及了)。但我们去咖啡馆的时候,看到吧台豆仓里的豆子,不太熟悉的小伙伴可能无法辨识到底是什么烘焙度,那么下面这个实物图示就会帮你很好的对比不同烘焙度豆子所呈现的色泽变化,这样下次你再去咖啡馆点单的时候,就可以瞄一眼磨豆机豆仓里的豆子,大致就知道他们店里出品的风格咯。 - -![](../../../attachment/images-uuid/1629c7fe49dd4fec9ee610d7f33f8c30.png) - -![](../../../attachment/images-uuid/42806f8e828242fba6bfb4d609ce8962.png) - -然后再来说说冲煮环节吧,入坑手冲咖啡的小伙伴,多半第一套器具都是从 V60 手冲开始的,这种以其上手快、容错率高的优势,成为不少人咖啡进阶路上的第一套咖啡冲煮器具。那么接下来这个图示属于概括性的介绍不同研磨颗粒度可能对 V60 冲煮产生的影响,属于给刚刚开始上手冲咖啡的小伙伴,有一个逻辑上的知识认知,也就可以更好地帮助你找到在冲煮细节方面,到底哪些因素会影响你的冲煮结果,这样在调整与优化的时候就可以重点考虑这几个因素的改进来帮助你更快找到适合自己的冲煮方案,一下子手冲的乐趣就来了呀! - -![](../../../attachment/images-uuid/fc10050eab83486990c6a9a87b6e65d6.png) - -![](../../../attachment/images-uuid/19e09df12dd049a88b78bd2d5ee7c8f6.png) - -在上一期发布的内容中有小伙伴留言希望了解一下不同研磨度到底应该适配怎样的冲煮器具才合适,那么这张图表算是把主流冲煮器具和研磨度的对应关系做了罗列,大家可以参考哟。如果你已经入手了一套器具,也可以尝试其他不同类型的来体验不同萃取原理之下,这些器具的冲煮乐趣。 - -![](../../../attachment/images-uuid/10e58417d0264ce3af827f3ea750e7df.png) - -再来就说说上点难得的意式啦,不少小伙伴在玩了一段时间手冲之后,就会考虑入手咖啡机来自己做意式了。意式出品不管在资金投入方面,还是技术性方面都会比手冲要大得多,所以入坑之前的必要功课和信息还是要去收集一些的,以免购置一些不必要的内容,关于意式入门的一些必要设备与工具,我以自己的咖啡吧台为例,和大家做个图示说明。首先整体咖啡桌的高度和布局要满足你日常使用顺手易操作的需求,大型设备包括咖啡机、磨豆机、配件专区(我还给自己配置一个小型制冰机,夏天做咖啡用)。 - -![](../../../attachment/images-uuid/addfca73e44545b2a7f8318ce964e642.png) - -在配件专区中绝大多数都是围绕布粉、压粉这个环节的,例如我的针式布粉器、压粉器、拨粉器这几个都是为了做这件事,目的就是要让粉碗里的咖啡粉填压均匀平整。此外拉花缸我是准备好几个,当中主要是偶尔会来回倾倒摇匀一下奶泡,还有就是杯量大小决定偶尔要更换奶缸中的奶量,不过平时用的比较顺手的还是惠家的拉花缸(那款薄荷绿色的),其他就是温度计、拉花针、清洁刷之类的小工具,小零件这些统一收纳。 - -![](../../../attachment/images-uuid/f7f26ba9e6ff4a6280fe4ceac81ce3a8.png) - -OK,刚才就提到做意式前期制备的时候很重要就是粉量填压环节,所以以下这个图示通过剖面的方式来帮助你了解如若填压不正确可能会带来的萃取后果,所以初期做意式咖啡的时候,如果觉得萃取效果不好,其原因可能是多方面的,但一般很可能是在填压环节出了问题哟。此外,为了配合你判断萃取效果,建议大家都用无底手柄,可以实时查看萃取效果和判断填压是否均匀或研磨度是否合适等。 - -![](../../../attachment/images-uuid/85f4f03783964924bededbe3cdb8b084.png) - -萃取出的浓缩咖啡,通常咖啡机是通过定时的方式来控制,当然你也可以通过电子秤辅助判断萃取量,那么不同的萃取量自然也有着不一样的出品名称,关于和三者的概念似乎最近短视频平台上讨论蛮多的,所以在这里也给大家做出一个图示参考。芮斯崔朵在国外咖啡馆 menu 上会比较多(尤其是在欧洲),这种是只萃取了浓缩咖啡的前段咖啡液,总量仅有 15-25 毫升,粉水比浓度自然也是最小的,口感也是属于比较重口味,适合早上短饮一杯。 - -![](../../../attachment/images-uuid/5dbe6113ae014f58a8551c86c45c96fe.png) - -另外我们比较常见的就是中间这个浓缩咖啡,整体在 25-35 毫升。还有一款是相对比较冷门的,叫做 Allongé,这种以法语命名的变体在魁北克很流行,它是通过咖啡机的延长萃取时间而获得的咖啡,也被称为 Lungo。所以不同的萃取时间和粉水比,则会得到不一样的 “浓缩咖啡”,这也为你与牛奶配合出品不同奶咖的时候有所帮助。 - -![](../../../attachment/images-uuid/d501bc31a8284bceb03c2e0c5bbf2b3c.png) - -最后一张图的含金量可就高多啦,大家是不是觉得咖啡知识最让人恼火的就是各种咖啡豆种的名字了,因为有些来自西语、法语,还有一些来自印尼语等等,这些名称与中文的对应关系也因语言习惯的不同可能会有不同的文字表达,这样下来,就更加觉得记不住了。我这边找寻到一个咖啡豆种卡片,当中可查询到的中文名称我都已经标注在图片上了,这一份属于精炼版豆种,当中并没有涵盖罗布斯塔种的那一支,核心围绕的还是阿拉比卡咖啡,也是我们日常生活中比较常见的豆种。 - -![](../../../attachment/images-uuid/1fffbe5ad2234770bad3637648378a30.png) - -通过这份结构图,你不仅可以清晰明了的看到不同豆种之间的关系,也能让你了解到一些日常没怎么接触过的豆种,丰富一下自己的知识信息。例如:巴蒂安(Batian)是一种高大品种,具有高产量、耐咖啡叶锈病、抗咖啡浆果病和良好风味的特点;再比如此前讨论度比较高的云南咖啡新品种萨奇姆,其具有抗叶锈病能力强且抗病基因稳定、产量高、树木高度适中易于管理采摘等特点;再比如杰克逊豆种,它是很强壮、高产量品种,常见于卢旺达和布隆迪。还有印度尼西亚的 Bergendal 铁皮卡(图示中我标注为印尼铁皮卡),具有一种干燥而辛辣的香味,浅烘焙后还会带有轻微水果和混合香料的味道。还有巴西开发的伊卡图豆种,是多代杂交改良品种的杰作。 - -![](../../../attachment/images-uuid/b547b9c646ac40c7a0893383fe6bdea5.png) - -关于豆种方面的信息真的都可以专门再出几期着重分享的了,我也会陆续更新这个知识系列,希望喜欢的小伙伴多多留言提出你想了解的知识需求,只要是和咖啡相关的,就是我乐意分享的,大家一起饮咖愉快! - -![](../../../attachment/images-uuid/3dc058e88a2c44f8b0b08a77e0600c39.png) diff --git a/resource/剪藏/日常科普/哭了!怎么没早点发现这些宝藏网站.md b/resource/剪藏/日常科普/哭了!怎么没早点发现这些宝藏网站.md deleted file mode 100644 index 99a61ad..0000000 --- a/resource/剪藏/日常科普/哭了!怎么没早点发现这些宝藏网站.md +++ /dev/null @@ -1,93 +0,0 @@ ---- -url: https://mp.weixin.qq.com/s/lCWJ78HqATUsZpSMI5Hp_w -title: 哭了!怎么没早点发现这些宝藏网站 -date: 2024-04-13 14:01:37 -tag: [] -summary: ---- - -[Aigclist | AIGC便利店, submit your Ai tools free](https://aigclist.com/) - -[识典古籍-古籍在线阅读平台 (shidianguji.com)](https://www.shidianguji.com/) - -[菜鸟教程 - 学的不仅是技术,更是梦想! (runoob.com)](https://www.runoob.com/) - -[Solo 独立开发者社区-链接每一位独立开发者, 从 Solo 开始](https://solo.xin/) - -卷到老板哭!打工人必备的职场神器 - -[HiPPTER | PPT资源导航 | PPT模板图表等设计素材免费下载](https://hippter.com/) - -**识典古籍** - -![](../../../attachment/images-uuid/b2a7d42b0f49495a9d0644e68a66fc00.png) - -识典古籍是一个古籍智能在线检索、阅读和整理平台。 - -这是一个公益项目,向社会大众免费开放。 - -支持高级搜索,用户可以限定书籍或者作者范围检索。 - -如果你对儒家经典、佛学经典、道家经典、文学经典有兴趣,强烈推荐你来这里看下。 - -这里的提供的古籍包括但不限于: - -儒家经典:《论语》、《孟子》、《荀子》、《周易》、《尔雅》、《礼记》、《周礼》、《仪礼》、《左传》、《尚书》。 - -佛学经典:《心经》、《金刚经》、《坛经》、《法华经》、《周觉经》、《维摩经》、《楞严经》、《楞伽经》、《四十二章经》、《起信论》。 - -道家经典:《老子》、《庄子》、《列子》、《抱朴子》、《庚桑子》、《吕氏春秋》、《广成集》、《云笈七签》、《淮南子》、《关尹子》。 - -文学经典:《诗经》、《楚辞》、《陶渊明集》、《李太白集》、《嵇康集》、《杜甫集》、《韩愈集》、《文心雕龙》、《文选》、《曹植集》。 - -以《诗经》为例,这个平台支持加入书架、记笔记、搜索内容(搜本书、搜全库、查字典)、查看原本影像、注疏、参考译文、简体繁体切换、显示设置(是否显示实体解释和公开笔记),还提供古籍智能助手。 - -![](../../../attachment/images-uuid/29229656a19d4cbdada8e986578c4e3f.png) - -另外,首页的《创世纪》和《永乐大典》,也建议看下,阅读体验太好了~ - -![](../../../attachment/images-uuid/90dd5bc4ba7647b5bceaa16f8c775479.png) - -https://www.shidianguji.com/ - -**菜鸟教程** - -![](../../../attachment/images-uuid/f385ba82b23c4eb5ba348f205cb42aca.png) - -菜鸟教程是一个提供完全免费的基础编程技术教程的网站。 - -这个网站的域名为 runoob.com, runoob 为 Running Noob 的缩写,意为:奔跑的菜鸟。 - -HTML/CSS、JavaScript、服务端、数据库、数据分析、移动端、XML 教程、ASPNET、Web Service、开发工具、网站建设相关的教程可以在这里找到。 - -这里也提供了大量的在线实例,通过实例,用户可以更好地学习如何建站。 - -除了编程学习教程,这个网站还有菜鸟工具、菜鸟笔记、参考手册、用户笔记、测验 / 考试、本地书签、AI 编程助手(个人用户完全免费)。 - -https://www.runoob.com/ - -**Solo 独立开发者社区** - -![](../../../attachment/images-uuid/a5aa3006cfdb4f3abeadb140c1fde6d9.png) - -正如网站 “赋能独立开发者,实现个人影响与快速变现” 所言,Solo 独立开发者社区是一个帮助独立开发者们交流沟通共同学习进步的社区。 - -用户可以在这里交流独立开发过程中的心得体会,共同探讨各种问题。 - -除此之外,这里还提供产品出海、创业日记、分享案例、运营推厂、寻求合作、外包零活、人才招募、反馈建议等服务。 - -https://solo.xin/ - -**AIGC 便利店** - -![](../../../attachment/images-uuid/284bc1f546d9406a894bf5ad0c4a7f33.png) - -AIGC 便利店是一个专注于收录各种 AI 工具资源的免费网站,目前已收录 4186 个 AI 工具。 - -这个网站提供了多个分类的工具资源,主要是:热门领域(亲测好用)、国内 AI、办公场景、AI 图像生成、Al 文字生成、人机嗨聊、AI 视频生成、AI 音频处理、垂直领域 AI、AI 编程、生活小助手、3D、Prompt 等。 - -可以重点看下热门领悟这个分类的产品,这里推荐的 AI 工具如 Stable Video、智谱清言、Gemini by Google 等,都是相对人气比较高口碑还不错的。 - -如果你想找一些好用的 AI 工具来辅助你提高工作效率或娱乐休闲等,可以来这里看下。 - -https://aigclist.com/ diff --git a/resource/剪藏/日常科普/手把手教你(最小记忆量,仅三个公式)三阶魔方还原.md b/resource/剪藏/日常科普/手把手教你(最小记忆量,仅三个公式)三阶魔方还原.md deleted file mode 100644 index 2327cb0..0000000 --- a/resource/剪藏/日常科普/手把手教你(最小记忆量,仅三个公式)三阶魔方还原.md +++ /dev/null @@ -1,119 +0,0 @@ ---- -url: https://mp.weixin.qq.com/s/I8LByf2CKQSmcxJMd_LF7g -title: 手把手教你(最小记忆量,仅三个公式)三阶魔方还原 -date: 2024-04-21 21:09:25 -tag: [] -summary: ---- - -    魔方通常是指三阶魔方,也就是 26 个块的那种。 - -    我的魔方认知是小学四年级,读大学的叔叔带回来一个魔方,6 个面,没有互联网,没有老师,没有信息,不知 CFOP 更不知层先是啥,最好的记录就是相邻的 2 个面完成。6 面还原的唯一办法就是拆开,装回去。 - -    直至 2007 年,魔方要还原的念头重新出来,认识了魔方小站,知道了层先是啥,知道了如何还原三阶魔方,taobao 买了一个 60 元的国乙魔方,贴纸的,不管时间长短,总是做到能够还原了。 - -    再就是随着最强大脑的热播,知道了那么多大神,了解了 CFOP,结合层先,总结了适合自己的最少记忆魔方还原法。分享给大家。 - -**归纳为:2 个手法,3 个公式,** - -**两个手法:上左下右,RUR‘U’;** - - **上右下左,L‘U’LU** - -**三个公式:小鱼 1,下右上右下右右上** - - **小鱼 2,上左下左上左左下** - - **上上底底下右上底底下左下** - -这五个要形成肌肉记忆,也就是说要拿到手指头自然就做完的动作!!! - -核心就是下面这张图。 - -![](../../../attachment/images-uuid/e4c6a5d02a0a4bde9ec06b250fb8aaee.png) - -![](../../../attachment/images-uuid/db0cede67fd1418db24632e07ea99daa.png) - -![](../../../attachment/images-uuid/ac3a9b2caef547bc96c99a17f01243ed.png) - -![](../../../attachment/images-uuid/08937c72395d4118b90c03de035e6754.png) - -下面几个公式有助于提高速度的。 - -![](../../../attachment/images-uuid/a383ef2e7703418597e6e13d334d2dcf.png) - -![](../../../attachment/images-uuid/c39f20fe1c544938be373e025524eef6.png) - -![](../../../attachment/images-uuid/504dfd97a6c84c4ba3166f37934b8fd1.png) - -如何熟练运用这些手法和公式来完成魔方还原。 - -—————————————————————————————— - -后面可以不用看了,简单阐述下最简单的手法。 - - **一层十字** - -一层十字,就是把白色的 4 个棱块还原到位。 - -![](../../../attachment/images-uuid/a2576bcc969e40aa90c06b52f01712b5.png) - -这个部分更多是自己研究较好,如下参考: - -下面的内容是教初学魔友拼成十字的,也仅仅是拼十字,没有需要的魔友可以跳过了去看下一小节了。这里把打乱时底色棱块的位置分为了三级,无须管朝向,附有相应的处理办法(白色为底)。 - -第一级:需复原棱块在中层,棱块有两个颜色,占据两个面,我们只需要转动不是底色所在的那一面九十度,就可使底色棱块到达底层。 - -![](../../../attachment/images-uuid/142974c8e50d4f739544d5876a2e487f.png) - -![](../../../attachment/images-uuid/a0b93fa1dc6540b5b005d45abd13632b.png) - -第二级:需复原棱块在顶面,通过转动棱块九十度所在侧面,即可转化成第一级,按一级情况处理。 - -![](../../../attachment/images-uuid/7b59359c89574ebeb950787d6c41f46b.png) - -![](../../../attachment/images-uuid/f29fd9a2f98f45b5b187ebebc3d55eeb.png) - -第三级:需复原棱块在底面,这里我们只看一种朝向情况,同二级情况,转动棱块所在侧面九十度,即可转化成一级情况。 - -![](../../../attachment/images-uuid/82ab735fdf5d4e109db080d08c624937.png) - -![](../../../attachment/images-uuid/1d4deefb0b5348a485750d691214918f.png) - -按上述方法调整位置时,应避免与已经归位的棱块相冲突,此时可以转动 D 层,来达到避让的效果。 - -![](../../../attachment/images-uuid/93159cb4ed154deeb595a5e2c972c717.png) - -还有一种特别简单的情况,如下图,只需要转动棱块所在面 180 度即可。 - -![](../../../attachment/images-uuid/349a55492b2542c7bc5441ce2d54edd3.png) - -![](../../../attachment/images-uuid/31b6e57a69d34283a4f757a0240f0d67.png) - -之所以没有每种情况都给出相应的公式,一是没必要,二是十字就是需要多动脑的一步,所以只是给出了大致思路,对于初学者,能理解并灵活运用最好。 - -当十字完成后,发现有的对错了,也不要慌,十字通过转动底层可以发现,只有两种错法。情况如下: - -![](../../../attachment/images-uuid/7c405c672af443669139399aa2add96e.png) - -![](../../../attachment/images-uuid/c935d783e92a4ffe962c4f36baed74ef.png) - -这是第一种,只有相邻的错误,处理方法很简单,如图中,蓝色中心块朝向自己,做 RDR’D’R 就可以矫正。第二种情况如下: - -![](../../../attachment/images-uuid/2c2b227cd4074e02a28d59d9d99bcfc4.png) - -也就是对棱错了,解决方法也很简单,将如图中蓝色中心块,或绿色中心块朝向自己,做 M'2 U2 M'2 就可以矫正了。以上两种情况的处理方法并不能说是标准公式,正所谓法无定法,有心的魔友可以自己探索下更多解决方法和解决角度,方法并不唯一。 - -![](../../../attachment/images-uuid/e6f0df76d727423a9b4b26c6ef69cc8f.png) - -一层四个角块 - -底面一层还原 - -**1. 预览底面一层还原后的效果** - -底层还原后,四个侧面出现倒 “T” 字形,这一特点是判断这一步是否还原正确的标志 - -![](../../../attachment/images-uuid/994325ab0d194137a4d5100abe4e626b.png) - -底层还原后效果   图 diff --git a/resource/剪藏/日常科普/推荐 4 款让人骄傲的国产软件,良心到心疼,你不要错过.md b/resource/剪藏/日常科普/推荐 4 款让人骄傲的国产软件,良心到心疼,你不要错过.md deleted file mode 100644 index 27ced41..0000000 --- a/resource/剪藏/日常科普/推荐 4 款让人骄傲的国产软件,良心到心疼,你不要错过.md +++ /dev/null @@ -1,185 +0,0 @@ ---- -url: https://mp.weixin.qq.com/s/Y5nhbiqaxmYQmD0hHc5FVQ -title: 推荐 4 款让人骄傲的国产软件,良心到心疼,你不要错过 -date: 2024-10-27 17:33:50 -tag: [] -summary: ---- - -说起国产软件,大家总是容易给它们打上 “流氓、要钱、广告满天飞” 的标签,其实,有一些软件超级好用,功能强大又不耍流氓,真心不该被一棍子打死。 - -下面给大家分享一些非常好的几款国产软件,深受大家喜欢,而且太良心好用。 - -**一、PPT 超强插件:OneKeyTools** - -OneKeyTools(简称 OK 插件)是一款免费开源的 MS Office PowerPoint 和 WPS 演示第三方平面设计辅助插件。它包含了近 300 个功能,覆盖了形状、调色、三维、图片处理、音频、表格、图表、辅助功能等多个领域,旨在帮助用户提高 PPT 设计和制作效率。OneKeyTools 的功能丰富,包括形状组、颜色组、图片组、其他组等,能够满足专业设计师和普通用户在制作演示文稿时的多样化需求。 - -![](<../../../attachment/images-uuid/65ae7eab7ef847d794ef17513af85a1b.png>) - -官网地址 - -OneKeyTools 的官方网站地址是 http://oktools.xyz/,用户可以通过该网站下载插件并获取相关的使用教程。 - -### 核心功能详细介绍 - -- 形状组:提供形状插入、矩阵复制、原位复制、顶点相关复制、一键分形等功能,支持三角分形、正方形分形、梯形分形等复杂图形的创建。此外,还支持 EMF 导入和文本拆分等操作。 - -- 颜色组:包括纯色递进、补色、HSL 补色、渐纯互转、渐变以及取色器等功能,便于用户调整和统一演示文稿中的颜色方案。 - -- 图片组:提供图片混合、一键特效、页面导图等功能,支持图片极坐标、剪影辅助、弧化、画中画等效果的应用。 - -- 其他组:包括分割线与辅助功能、时钟、定时器、倒计时等新颖工具,以及 GIF 工具,用于将多张图片转换为 GIF 动画。 - -### 使用技巧及注意事项 - -- 安装和激活:用户需要下载合适版本的插件安装包,并按照指示完成安装。安装后,插件会自动添加到 PowerPoint 或 WPS 的功能区中。 - -- 功能探索:由于插件功能繁多,建议用户通过官方网站提供的教程或视频资源来学习各个功能的具体使用方法。 - -- 兼容性:确保您的操作系统和 Office 或 WPS 版本符合插件的运行要求。OneKeyTools 通常支持 Windows XP 以上版本的操作系统和 Microsoft Office PowerPoint 2007 以上版本。 - -- 更新和维护:虽然 OneKeyTools 的常规更新已经停止,但开发者仍会进行必要的 BUG 修复和功能微调。用户应定期检查更新,以获得最佳的使用体验和新功能。 - -总之, OneKeyTools 插件(简称 OK 插件)是一款专为 PowerPoint 用户设计的平面设计辅助工具,其核心功能涵盖形状、调色、三维、图片处理、演示辅助、表格处理、音频处理等多个领域。该插件不仅支持在 Microsoft PowerPoint 内安装使用,还可以在 WPS Office 和永中 Office 上安装使用。 - -![](<../../../attachment/images-uuid/78a79a8c60f54540bc12c458f440d06a.png>) - -**二、实现无损扩容 C 盘的神器:DiskGenius** - -DiskGenius 是一款功能强大的磁盘管理工具,它集成了数据恢复、分区调整、磁盘克隆等多种实用功能。软件支持多种文件系统,包括 FAT12、FAT16、FAT32、NTFS、EXT2/EXT3/EXT4 等,适用于 Windows 操作系统。DiskGenius 的设计注重用户体验,界面友好,操作简便,适合普通用户和专业人士使用。 - -![](<../../../attachment/images-uuid/b0e3eaf53ebf42b19af31d657458e78c.png>) - -官网地址 - -搜索结果中没有直接提供 DiskGenius 的官网地址。通常,软件的官方网站可以通过搜索引擎查找获得,或者在软件的安装包中包含官方网站的链接。 - -核心功能详细介绍 - -- 数据恢复:支持多种情况下的文件恢复、分区恢复,包括误删除文件恢复、分区误格式化后的文件恢复等。此外,还提供文件预览、扇区编辑、加密分区恢复、Ext4 分区恢复、RAID 恢复等高级功能. - -- 分区管理:提供创建分区、删除分区、格式化分区、隐藏分区、分配盘符等基本功能,以及快速分区、无损调整分区大小、分区表备份恢复等高阶功能. - -- 磁盘克隆:支持将整个磁盘或分区克隆到另一个磁盘,包括系统迁移到新硬盘的功能. - -- 备份还原:可以备份或克隆硬盘或分区,支持增量备份和还原. - -- 硬盘健康检测:提供硬盘健康状况的检测功能,帮助用户预防潜在的硬件问题. - -- 磁盘修复:支持修复 MBR、修复分区表等操作,解决硬盘问题. - -- 虚拟磁盘操作:支持创建、调整虚拟磁盘等操作,管理虚拟环境中的磁盘. - -- 大容量存储设备支持:支持管理大容量存储设备,如 RAID、NAS 等. - -- 插件及其他高级功能:提供插件功能和其他高级功能,扩展软件的使用范围. - -### 使用技巧及注意事项 - -- 数据恢复:在进行数据恢复之前,建议关闭相关磁盘的写入操作,以避免数据覆盖。使用 DiskGenius 的扫描功能仔细搜索丢失的文件,并在恢复前进行文件预览以确认其完整性。 - -- 分区管理:在调整分区大小或创建新分区时,确保有足够的未分配空间,并注意不要破坏现有数据。使用软件的分区表备份功能可以在操作前创建恢复点。 - -- 磁盘克隆:在克隆磁盘之前,确保目标磁盘的容量足够大,并且在克隆过程中保持电源供应稳定,以避免数据损坏。 - -- 备份还原:定期进行数据备份,以防止数据丢失。在还原数据时,遵循软件的指引,确保数据正确恢复到预期位置。 - -- 硬盘健康检测:定期运行硬盘健康检测,及时发现并处理硬盘问题。 - -- 磁盘修复:在修复硬盘之前,确保数据已经备份,因为修复操作可能会导致数据丢失。 - -总结 一下,DiskGenius 是一款功能强大的磁盘管理及数据恢复软件,支持对 GPT 磁盘(使用 GUID 分区表)的分区操作。它不仅具备基本的建立分区、删除分区、格式化分区等磁盘管理功能,还提供了强大的已丢失分区恢复功能、误删除文件恢复、分区被格式化及分区被破坏后的文件恢复功能。 - -![](<../../../attachment/images-uuid/a6aea02974374f8f8ea6f3ff88642fb4.png>) - -**三、深受大家喜爱的老牌国产格式转换软件:格式工厂 Format Factory** - -格式工厂(Format Factory)是一款万能多媒体格式转换软件,支持视频、音频、图片等多种文件格式之间的相互转换。软件具有直观的用户界面,支持批量转换,并且在转换过程中可以修复某些损坏的视频文件。格式工厂还提供了文件压缩、视频剪辑、图片编辑等附加功能,适用于多种移动设备和光驱设备的文件格式转换需求。 - -![](<../../../attachment/images-uuid/3c9b46e572be4a52bd57a15aebe4e237.png>) - -官网地址 - -格式工厂的官方网站地址是 `http://www.pcfreetime.com/formatfactory/CN/index.html`,用户可以从该网站下载最新版本的软件。 - -### 核心功能详细介绍 - -- 视频格式转换:支持将多种视频格式转换为 MP4、3GP、AVI、MKV、WMV 等格式,新版支持 RMVB 和 xv 格式转换。 - -- 音频格式转换:支持将音频文件转换为 MP3、WMA、FLAC、AAC 等格式。 - -- 图片格式转换:支持将图片文件转换为 JPG、PNG、BMP、GIF 等格式。 - -- 文件压缩:可以对多媒体文件进行压缩,减少文件大小。 - -- 修复损坏文件:在转换过程中,软件能够修复某些损坏的视频文件。 - -- 裁剪功能:支持视频的裁剪,选择需要的部分进行转换。 - -- 支持多种设备:适配 iPhone、iPod、PSP 等多种移动设备的文件格式。 - -- 其他功能:包括从 DVD 复制视频、从 CD 复制音乐、视频截图、音频提取、图片编辑等。 - -### 使用技巧及注意事项 - -- 设置配置:用户可以根据需求对输出文件进行单独设置,如视频分辨率、码率、帧率等。 - -- 批量转换:格式工厂支持批量添加文件进行转换,提高工作效率。 - -- 预览功能:在转换之前,用户可以预览文件,确保选择正确的输出格式和设置。 - -- 软件更新:定期检查软件更新,以获取最新功能和改进。 - -- 安全性:格式工厂在使用过程中可能会访问用户的本地文件,因此建议用户确保软件来源可靠,避免潜在的安全风险。 - -因而,格式工厂(Format Factory)是一款由上海格诗网络科技有限公司于 2008 年 2 月创立的多功能多媒体文件转换软件,面向全球用户。它不仅支持常见的音频、视频、图片和文档格式之间的相互转换,还具备剪辑、合并、分割、混流、裁剪和去水印等多种功能。 - -![](<../../../attachment/images-uuid/abc31c11583949d384abd286611628a4.png>) - -**四、免费跨平台的 UI 设计工具 (Sketch/Figma 的替代品):MasterGo** - -MasterGo 是一款由中国团队研发的免费跨平台 UI 设计工具,它提供了网页端和客户端服务,支持 Mac、Windows 和 Web 平台。MasterGo 的设计理念是集成原型设计、UI 设计到交付评审的所有功能,旨在提高设计团队的工作效率。它支持实时协作,允许多人同时编辑同一个设计文件,并且支持一键导入 Sketch、Figma 等设计文件,方便设计师在不同工具间迁移工作。 - -![](<../../../attachment/images-uuid/665276f4fcbe4709b7b87da731b865e8.png>) - -官网地址 - -MasterGo 的官方网站地址是 https://www.mastergo.com/. - -### 核心功能详细介绍 - -- 自动布局:MasterGo 提供了智能布局功能,可以根据内容的大小或数量自动调整元素的宽度和高度,简化响应式设计工作. - -- 设计系统:支持创建可复用的样式和组件,确保设计的一致性,并支持快速编辑和设置覆盖. - -- 云端字体:提供海量可商用字体,无需安装字体即可使用. - -- 智能辅助:快速填充素材、颜色选集等功能,帮助设计师高效地进行创作. - -- 多人协作:支持多达 500 人同时在线协作,适合团队合作和项目管理. - -- 原型设计:连接界面、设置交互事件,模拟产品使用流程,智能动画可以轻松创建高保真原型. - -- 设计交付:实时更新同步,工程师可以随时查看标注、获取代码、下载切图. - -- 导入导出:支持从 Sketch、Adobe XD 等设计工具的文件导入,以及导出为多种格式,方便与开发团队协作. - -### 使用技巧及注意事项 - -- 图层管理:合理管理图层,避免命名混乱,使用提供的图层整理插件可以有效地管理和定位图层. - -- 自动布局技巧:利用自动布局功能创建响应式界面,使用分布式排列功能控制图层间距. - -- 一键操作:MasterGo 支持一键填充图片、一键生成字段、一键批量重命名等功能,提高设计效率. - -- 交付设计:使用标注和切图功能,以便工程师快速获取必要的代码和资源. - -- 注意事项:在使用自动布局功能时,应注意布局规则的设置,以免影响设计的灵活性和响应性。在团队协作时,保持良好的沟通,以确保设计的统一性和及时更新。 - -综上, MasterGo 是一款协同时代的产品设计工具,支持最多 500 人同时在线协同工作,产品经理可以随时进行线上评审,工程师可以随时查看标注、获取代码和下载切图。它不仅覆盖了界面设计、交互原型、设计系统、分享预览、沟通评审、标注和切图、插件扩展和 OpenAPI、文件和版本管理、云存储等多个方面,还实现了围绕设计的产研协同 All-in-One。 - -![](<../../../attachment/images-uuid/1f9e71b3f20a4961b943fd7f9781af91.png>) - -以上介绍了四款优秀的国产软件,它们分别是:OneKeyTools,一款功能强大的 PPT 插件,提供近 300 个设计辅助功能;DiskGenius,一款磁盘管理及数据恢复软件,具备数据恢复、分区管理等高级功能;格式工厂,一款支持多种格式转换的多媒体软件,提供视频剪辑、图片编辑等附加功能;MasterGo,一款免费跨平台的 UI 设计工具,支持实时协作和设计系统管理。 - -这些软件以其实用性和易用性,改变了人们对国产软件的固有印象。 diff --git a/resource/剪藏/理财相关/19 家顶级 Web3 投资机构简介丨 Web3 创业者必看.md b/resource/剪藏/理财相关/19 家顶级 Web3 投资机构简介丨 Web3 创业者必看.md deleted file mode 100644 index b8d90ee..0000000 --- a/resource/剪藏/理财相关/19 家顶级 Web3 投资机构简介丨 Web3 创业者必看.md +++ /dev/null @@ -1,332 +0,0 @@ ---- -url: https://mp.weixin.qq.com/s/7igA_hMoSpivdXgoziIJLw -title: 19 家顶级 Web3 投资机构简介丨 Web3 创业者必看 -date: 2024-05-08 10:01:42 -tag: [] -summary: ---- - -**Web3.0 被认为是互联网的下一个时代,区块链、去中心化、加密货币、NFT 等概念是这个时代的关键词。** - -来源丨马清泉律师 - -Web3.0 是结合了去中心化和代币(Token)经济学等概念,基于区块链技术的全新的互联网迭代方向,意在解决 Web2.0 带来的生态不平衡、发展不透明等问题。 - -**与 “只读” 模式的 Web1.0 时代和被 Google、Meta(Facebook)、Twitter 等互联网企业以中心化模式牢牢掌握信息数据的 Web2.0 时代相比,Web3.0 向人们描绘了一个平等、民主和透明的未来互联网世界。** - -目前 Web3.0 处于发展早期,但势能强,2021 年全球区块链初创企业融资金额达 252 亿美元,同比增长超 700%。 - -我们认为 Web3.0 将与 AR/VR、AI 等技术融合发展,开创新阶段,相应也就诞生了非常多的 Web3 创业者与相关项目。 - -**相比大量地发行代币,更多处于早期发展阶段或者刚刚起步的 Web3 团队更愿意选择从投资机构处获得资金,从而实现产品先行,代币经济次之的发展思路。** - -因此,在 Web3 发展的进程中,涌现了一批头部的投资机构。他们广撒网,倾向于在早期介入项目,寻找 Web3 头部企业及中坚力量。 - -本文将参考《全球 Web3 生态创新观察报告》等报告,结合对 Web3 的研究,围绕部分头部 Web3 投资机构做一些简单的整理和介绍,以便 Web 创业者对其有所了解。 - -**特别说明:** - -对于大部分读者而言,我们有必要提醒,虽然投资机构看好的项目都存在他们的独到之处,但这并不意味着他们投资的所有项目都会实现 100% 的回报率,因此不建议大家盲目跟从投资机构的投资组合,但可以从中进行参考和思考。 - -![](../../../attachment/images-uuid/1dd19b15647248c295a4c8e42624a8ce.png) - -以下投资机构按首字母排序。 - -**01** - -**a16zcrypto** - -![](../../../attachment/images-uuid/32f6c88fca724c9aa8610ef25f25beb0.png) - -a16z crypto 是顶级 VCa16z 旗下的加密基金。 - -a16z,全称为 Andreessen Horowitz,由 Marc Andreessen 和 Ben Horowitz 于 2009 年创立于硅谷,投资范围涵盖消费、生物医疗、金融科技、游戏、crypto 等,目前旗下多个基金管理着约 333 亿美元的资产(数据来自官方介绍)。 - -a16z 共推出了四支加密基金,其中最近的一支于 2022 年 5 月公布,基金规模为 45 亿美元。这也使得 a16zcrypto 管理的资产达到了 76 亿美元。 - -a16z crypto 相信,我们当前处于互联网发展的第三个阶段,也就是 Web3 时代。 - -这个时代将开启新一轮的创造力和创业精神。a16z crypto 的投资组合包括 Yuga Labs、Optimism、MakerDAO、OpenSea 以及 Uniswap 等知名 Web3 领军团队。 - -官网:https://a16zcrypto.com/ - -**02** - -**Alameda Research** - -![](../../../attachment/images-uuid/6bb1ea1ca7e94bf89445776501e4828f.png) - -Alameda Research 集投资与交易为一体,是加密货币衍生品交易所 FTX 的姊妹公司,同样都由 Sam Bankman-Fried(SBF)创立。 - -除了是无情的交易机器,Alameda Research 还投资于大量的加密相关项目,投资范围涵盖 DeFi、公链、CeFi、Web3 等,其在 Web3 领域的投资布局有 Immutable X、DAOSquare、Jambo、MaskNetwork 等。 - -官网:https://www.alameda-research.com/ - -**03** - -**Animoca Brands** - -![](../../../attachment/images-uuid/0da536be15ff4f16bd4ce35d76b9af0a.png) - -Animoca Brands 成立于 2014 年,创始人 Yat Siu 是一位香港企业家和天使投资人。 - -在 2021 的 NFT 与元宇宙概念的热潮中,Animoca Brands 堪称是最大的赢家之一,旗下 The Sandbox 是当前最热门的 NFT 项目之一,此外还是 AxieInfinity 开发商。 - -除了项目开发,Animoca Brands 还摇身一变成为了投资人,主要投资于 NFT 和元宇宙相关项目,其是 Sky Mavis、Decentraland、Dapper Labs 等明星项目的早期投资者,目前累计投资超过 150 个 NFT 和元宇宙项目。 - -官网:https://linktr.ee/animocabrands - -**04** - -**Binance Labs** - -![](../../../attachment/images-uuid/c3f3fd752ddd49bbaa667242b189dcf2.png) - -与 Coinbase Ventures 一样,Binance Labs 依托于加密领域头部交易所币安(Binance)。成立于 2017 年,在近 5 年的运营过程中,Binance Labs 在全球 25 个国家投资了超过 180 个项目。 - -Binance Labs 投资组合非常多样化,其范围包括从最基本的 DeFi 加密乐高到最新的 NFT、游戏和元宇宙都能看到他们的身影,投资项目包括 Axie Infinity、STEPN、LayerZero 等。 - -官网:https://labs.binance.com/ - -**05** - -**Coinbase Ventures** - -![](../../../attachment/images-uuid/72b926a0f87c4c439ba9fb5f6b26632f.png) - -作为老牌加密货币交易所 Coinbase 旗下的投资机构,Coinbase Ventures 的每一次出手都备受瞩目。 - -成立于 2018 年,Coinbase Ventures 和其他投资公司的比较大的区别就是 Coinbase Ventures 不像一家公司:因为它没有固定的基金规模,且全职员工数量为零,这与其支持的去中心化理念密不可分。 - -根据 Coinbase 透露,仅在 2022 年第一季度,Coinbase Ventures 就完成了 70 多笔投资,迄今为止已超过 300 笔。 - -Coinbase Ventures 的投资组合包括 OpenSea、Starkware、DapperLabs、Immutable 等。 - -官网:https://www.coinbase.com/ventures - -**06** - -**DeFiance Capital** - -![](../../../attachment/images-uuid/79ac7b2dcac04743a338352be0c2578f.png) - -DeFiance Capital 是活跃于 Web3 和 crypto 投资的风险基金之一,专注于 DeFi 和 Web3 游戏。 - -DeFiance Capital 认为,随着过去十年软件吞噬了世界,DeFi 将在未来十年吞噬传统金融。 - -另外,DeFiance Capital 相信,Web3 游戏正在通过重新定义玩家和开发者的价值主张来改变游戏行业。 - -DeFiance Capital 投资的项目包括 Axie Infinity、Mintable、Ultiverse、Balancer 等。 - -官网:https://www.defiance.capital/ - -**07** - -**Delphi Digital** - -![](../../../attachment/images-uuid/e4b012f1aa3d4f65b3d2d8fb02118025.png) - -Delphi Digital 是典型的研究型投资机构,其擅长对各个赛道进行深入的研究从而进行投资。 - -他们有专注于数字资产各个领域的专业分析师,可以对一个项目进行拆解并评估,从具体的用例和经济模型,到他们的社区和文化影响,都不能逃过他们的审视。 - -Delphi Digital 的投资项目包括 Immutable X、Axie Infinity、YGG、Illuvium 等。 - -官网:https://delphidigital.io/ventures - -**08** - -**Digital Currency Group** - -![](../../../attachment/images-uuid/b385db9b030640b58b9a1db510193d5b.png) - -Digital Currency Group(DCG)是数字货币先驱 Barry Silbert 在 2015 年创立的。 - -DCG 目前的主营业务有:CoinDesk(行业领先的媒体、研究和活动平台)、Genesis Trading(行业领先的机构贷款和经纪公司)、Grayscale(最大的数字货币资产管理公司)、Foundry(一家专注于数字资产挖掘和抵押的融资和咨询公司)、Luno(全球领先的数字资产 CEX 和钱包)。 - -Barry Silbert 希望将 DCG 打造为加密货币领域的伯克希尔哈撒韦公司。DCG 也一直是数字货币行业最活跃的投资者,投资于 30 个不同国家的 150 多家公司。 - -DCG 在 Web3 领域的投资主要集中在游戏板块,包括 Dencentraland、Horizon Blockchain Games 等。 - -官网:https://dcg.co/ - -**09** - -**Dragonfly Capital** - -![](../../../attachment/images-uuid/4a6d4460c2b847ae97d359a062570788.png) - -从 2018 年 10 月的第一笔 1 亿美元基金募资到 2021 年的 2.25 亿美元第二期基金,再到 2022 年 4 月 6.5 亿美元的新基金,Dragonfly Capital 每一期的基金都聚焦于不同领域。如今,他们把目光放在了 Web3 和元宇宙。 - -Dragonfly Capital 的团队特点是全球化,管理合伙人一共有 2 名:中国早期互联网时代的传奇人物冯波和从职业扑克手转型为投资人的 Haseeb Qureshi。 - -这个团队的 slogan 是 “从第一天起全球化”,因为在加密领域取得成功,从第一天开始就必须考虑全球化的发展。 - -Dragonfly Capital 的投资组合包括 Compound、dYdX、1inch、MatterLabs 等。 - -官网:https://www.dcp.capital/ - -**10** - -**Framework Ventures** - -![](../../../attachment/images-uuid/f867081d1de14b30ace3999ff30b7167.png) - -成立仅仅两年,Framework Ventures 已经在 2022 年 4 月开始募集第三支基金,预计规模为 4 亿美元,其中 2 亿美元将被用于区块链游戏领域。这也将使其旗下基金规模达到 14 亿美元。 - -Framework Ventures 联合创始人 Michael Anderson 表示,相信区块链行业的下一阶段将吸引众多新用户的加入,区块链游戏仍处于早期并充满机会。 - -P2E 的经济学模型与真正有趣的 3A 游戏融合在一起,将为该领域带来爆发式的增长。 - -该公司在 Web3 领域的投资有 RabbitHole、Illuvium 等。 - -官网:https://framework.ventures/ - -**11** - -**Hashed** - -![](../../../attachment/images-uuid/263d2de5b97340b29e314ebb1fd9bd39.png) - -Hashed 成立于 2017 年,四个来自韩国的工程师自发筹集了 70 万美元,进行加密投资。5 年过去了,经过 150 多项投资,他们的资金管理规模总计超过 40 亿美元,而且没有任何外部 LP。 - -Hashed 有两个大的投资方向,一个是去中心化稳定币,另一个是游戏和元宇宙。其投资的项目有 Axie Infinity、Decentraland、The Sandbox、Yuga Labs 等。 - -官网:https://www.hashed.com/ - -**12** - -**Multicoin Capital** - -![](../../../attachment/images-uuid/b9eadbaf3a5c4253854b135ddf31c5fd.png) - -Multicoin Capital 可能是回报率最高的风险投资基金。2017 年,Multicoin Capital 的两位创始人 Kyle Samani 和 Tushar Jain 在经历了 ICO 泡沫之后,启动了这个风投基金。 - -与其他 VC 的创始团队不同的是,Kyle 和 Tushar 既没有投资方面的工作经验,也没有在新兴初创公司工作过,更没有建立过任何协议。 - -但凭着他们 “局外人” 的独特视角,“打败”了一众 VC,在竞争激烈的加密领域获得了一席之地。 - -Multicoin 的投资三大主题分别是:开放金融、Web3 和非主权货币。其典型的投资项目包括 Flow、Fluence、LayerZero、ProjectGalaxy 等。 - -官网:https://multicoin.capital/ - -**13** - -**Pantera Capital** - -![](../../../attachment/images-uuid/3acdb54be9074105854f2b5beeebc9f1.png) - -Pantera Capital 由前 Tiger Management 的宏观交易负责人兼 CFO Dan Morehead 于 2003 年创立。 - -Pantera 的全球宏观战略投资超过了 10 亿美元,Pantera 比特币基金自成立以来上涨了 57,500%,Pantera Venture Funds 在 26 家公司的 2300 万美元投资资本中实现了 1.25 亿美元的利润。 - -其投资项目涵盖区块链基础设施项目、金融类项目、企业类项目、Web3 应用等各个方面,其在 Web3 领域的投资聚焦于 DeFi 板块(包括 0x、1inch、Balancer 等),目前尚未在 NFT 或链游领域发力。 - -官网:https://panteracapital.com/firm/ - -**14** - -**Paradigm** - -![](../../../attachment/images-uuid/4e0337cfbd5a403aa941db4bbd674684.png) - -创立于 2018 年,年轻的 Paradigm 早已被公认为 Web3 头部 VC。 - -Paradigm 是由 Coinbase 的联合创始人 Fred Ehrsam 和前红杉合伙人 Matt Huang 共同创立的,获得了耶鲁、哈佛和斯坦福这三大高校的捐赠,同时还有知名风投红杉的加持。 - -他们认为,如果说互联网定义了过去几十年的创新,那么未来几十年的创新将由 crypto 来定义。 - -Paradigm 的投资组合包括 Uniswap、OpenSea、Starkware、Optimism、Gitcoin 等知名项目,投资金额在 100 万美元到 1 亿美元不等。 - -官网:https://www.paradigm.xyz/ - -**15** - -**Polychain Capital** - -![](../../../attachment/images-uuid/afaa415397c0466e8e3e970614424950.png) - -Polychain Capital 成立于 2016 年,是最初出现的原生加密对冲基金之一,它投资了众多早期初创公司和协议。 - -该基金由 Coinbase 的首位员工 Olaf CarlsonWee 创立,吸引了众多知名风险投资公司的投资,包括:Andreessen Horowitz、Union Square Ventures 和 Sequoia Capital(红杉资本)。 - -该公司一直坚信,随着加密货币生态系统的发展,将会出现许多不同的协议来适应不同的用例,因此基金被命名为 “Polychain”。截至 2022 年 2 月,Polychain 的资产为 50 亿美元,自成立以来增长了 125,000%。 - -Polychain Capital 的投资组合包括 Horizon Blockchain Games、Web3 Foundation、Coinbase 等。 - -官网:https://polychain.capital/ - -**16** - -**红杉资本(Sequoia Capital)** - -![](../../../attachment/images-uuid/fe716a138eb341c8a7eab9e903e2c305.png) - -红杉资本创立于 1972 年,曾作为第一个机构投资人投资于苹果、谷歌、思科、甲骨文、雅虎和领英等老牌互联网企业。然而,创立时间早也并未成为红杉资本拥抱创新路上的绊脚石。这家老牌 VC 如今也活跃于新兴的 Web3 领域。 - -2022 年 6 月,红杉资本分别在印度和东南亚推出两支总规模为 28.5 亿美元的新基金,以扩大其在 Web3 领域的投资。 - -“下注赛道比下注赛手更重要”,这是对红杉资本创始人 Don Valentine 投资风格的精辟总结。 - -红杉资本在 Web3 领域押注的项目包括 LayerZero、StarkWare、Polygon、Parallel Finance 等。 - -官网:https://www.sequoiacap.com/ - -**17** - -**Spartan Group** - -![](../../../attachment/images-uuid/edcb153df33f48a69d0e66b6b3622537.png) - -Spartan Group 总部位于亚洲,投资团队在高盛、Indus Capital 等顶级公司的投资研究和资本管理方面拥有超过 20 年的经验。 - -2022 年 3 月,Spartan Group 宣布其计划推出价值 2 亿美元的元宇宙基金,该基金将专注于在元宇宙中建设的项目,特别是支持 “数字所有权” 的虚拟世界。 - -Spartan Group 的投资组合包括 BitDAO、Arbitrum、LayerZero、Zapper 等。 - -官网:http://spartangroup.io/index.html - -**18** - -**Tiger Global** - -![](../../../attachment/images-uuid/a4bf33fe04134b168ecc8dd349e88cf4.png) - -早在 2015 年就开启了在加密领域的投资,知名对冲基金及风险投资公司 Tiger Global 从 2021 年 4 月开始加速在 crypto 领域的布局。 - -据 Crunchbase 数据,至今 Tiger Global 在 Crypto 已投资了大约 41 个项目,累计出手 46 次,涉及到 8 个垂直领域,项目融资总额则达到了 71.7 亿美元。 - -Tiger Global 这只 20 余岁的 “老虎” 捕获了 Meta、Uber、字节跳动以及京东等科技巨头,如今又以雷厉风行的投资风格在加密投资领域中杀出一条血路,并从 2022 年开始加大在 Web3 领域的投入。 - -其投资组合包括 Yuga Labs、Nansen、LayerZero、Polygon 等。 - -官网:https://www.tigerglobal.com/ - -**19** - -**Union Square Ventures** - -![](../../../attachment/images-uuid/3fd292e3afc84029b24532c29f560bf5.png) - -Union Square Ventures(USV)成立于 2003 年,是美国最知名的风险投资机构之一。 - -创始人 Fred Wilson 是加密货币领域的风向标。USV 可能是初创企业投资中最可靠的投资者。自 2003 年成立以来,很少有其他基金能在这么长时间内保持如此高的业绩。 - -USV 在其所投资的行业中的表现一直处于前四名的水平。尽管在投资方面取得了成功,但 USV 一直保持小规模的资金体量,这或许是其在多年来保持业内常青的原因之一。 - -成立近 10 年时间,USV 的投资策略仍十分谨慎,投资的公司仅 100 余家(包括加密和非加密企业)。 - -其在加密领域的投资项目包括 Polygon、Matter Labs、Dapper Labs、Coinbase 等。 - -官网:https://www.usv.com/ - -_ -END_ - -【风险警示】:本公众号所有文章仅供读者参考,对转载、分享的内容观点保持中立,不构成任何投资建议! - -【版权声明】:图文转载于网络的,版权归原作者所有,仅供学习参考之用。如有异议,请联系本公众号删除。 - -![](../../../attachment/images-uuid/72c1618debf44016a6f716080ccd5cc6.png) - -![](../../../attachment/images-uuid/8fca9c65be6841c191f7995d4e545abe.png) diff --git a/resource/剪藏/理财相关/47 家机构持有 GBTC,除灰度外还有哪些机构、公司在布局比特币?.md b/resource/剪藏/理财相关/47 家机构持有 GBTC,除灰度外还有哪些机构、公司在布局比特币?.md deleted file mode 100644 index 24b5a6d..0000000 --- a/resource/剪藏/理财相关/47 家机构持有 GBTC,除灰度外还有哪些机构、公司在布局比特币?.md +++ /dev/null @@ -1,168 +0,0 @@ ---- -url: https://mp.weixin.qq.com/s/tv7h8Ngi1ul8GWcde2VA2Q -title: 47 家机构持有 GBTC,除灰度外还有哪些机构、公司在布局比特币? -date: 2024-05-08 10:01:56 -tag: [] -summary: ---- - -2021 年 2 月 23 日,美联储主席鲍威尔出席参议院听证会,再次重申宽松货币政策姿态,将保持利率接近 0,直到充分就业和通货膨胀上升到 2%,并有望在一段时间内适当超过 2%。 - -2 月 22 日,比特币价格经历了日内 1 万美金的跌幅,而在比特币大跌期间,特斯拉股票也暴跌超 8%,纳斯达克指数跌超 2%。市场上有很多声音称 “比特币带崩了特斯拉股票,特斯拉带崩了美股,所以美联储不敢关水龙头”。 - -近半年时间内,比特币价格几乎翻了 5 倍之余。**对于这一轮比特币持续暴涨的市场形态,几乎没有争议的一点是,这是由机构主导的 “机构牛” 行情。此外,还有一个不容忽视的主要原因是通胀预期的升高,而高通胀预期是来自美联储史无前例的量化宽松政策。** - -2021 年年初以来,比特币依旧延续强劲涨势。 - -在比特币巨大升值潜力和投资回报率的吸引下,华尔街对比特币的态度有了显著变化,金融巨头们也产生了浓厚的兴趣。我们已经看到了一些转变的迹象:去年下半年到今年,文艺复兴旗下的对冲基金、保罗 · 都铎 · 琼斯、贝莱德都宣布参与到比特币衍生品市场。 - -华尔街对比特币态度的转变,对比特币迈向全球化资产方面起到了重要的推动作用。在华尔街资金的力量的加持下,比特币市值一度超过 Facebook、特斯拉,在全球有价资产中市值排行第六。 - -![](../../../attachment/images-uuid/e294535a7eba4923963e5592e6e04963.png) - -除了人尽皆知的 “巨鲸” 灰度之外,有很多机构、公司都在以各种渠道和方式投资比特币。**根据目前已公开披露的消息,欧易 OKEx 情报局盘点了灰度及灰度以外一些持有比特币的知名机构与公司,除了直接购买,它们主要通过 ETF 基金、加密衍生品等方式参与比特币市场。** - -![](../../../attachment/images-uuid/ef30a8d4c65d4826a108efdf0dbd18f9.png) - -![](../../../attachment/images-uuid/b05de0660bd7493794e83f5fb41c472f.png) - -**灰度投资管理公司** - -Grayscale Invetments 是全球最大的加密资产管理公司,目前资产管理规模约 424 亿美元。**截至 2 月 22 日,Grayscale Bitcoin Trust(灰度比特币信托基金)共持有 680,081 枚比特币。** - -灰度投资公司的前身是 Barry Silbert 创建的 SecondMarket(一家私募股权交易平台)旗下的一支比特币投资基金。2014 年,Barry Silbert 将这只比特币投资基金从原公司脱离出来并单独成立了灰度投资公司(Grayscale Investments)。2015 年,灰度投资公司被归到 Barry Silbert 新成立的数字货币集团(Digital Currency Group,简称 DCG)旗下,目前 DCG 是全球最大的比特币和区块链投资公司之一,除 Grayscale 之外,DCG 旗下还有 Genesis、Coindesk 以及其它 150 多家区块链公司。 - -**灰度比特币信托(GBTC)是灰度旗下规模最大的加密数字资产信托产品,其规模占据灰度总体资产管理规模的 90% 以上。**除了比特币信托基金之外,灰度投资公司还推出了 ETH, BCH, ETC, LTC, XRP 等加密货币的信托基金,以及包含多种主流币种的大盘指数基金(Grayscale Digital Large Cap Fund)。以下是灰度产品成立时间轴: - -![](../../../attachment/images-uuid/a9b48c2f92ed4a1ab86373690ccdb15a.png) - -灰度的比特币信托基金现在成为公司机构、个人投资者、家族理财基金等投资比特币的主要方式。**数据显示,目前共有 47 家机构账户持有 8,977,784 灰度比特币信托份额。**其中 特斯拉的投资者 ARK INVESTMENT 是灰度比特币信托的最大持仓者,持有约 730 万份信托份额。 - -![](../../../attachment/images-uuid/3c2c6e5f32204c90b08a11d3d4e93c27.png) - -来源:Nasdaq - -![](../../../attachment/images-uuid/689f9918f56142afabf7c4c90043277e.png) - - **ARK Investment Management** - -根据 2 月 12 日提交的 13F 持仓报告,方舟投资管理公司称截至 2020 年 12 月 31 日拥有 7,307,228 份 GBTC,按照 2 月 11 日 GBTC 每份价格 48 美元来计算,该公司持有的基金金额超 3.5 亿美元。而在 2020 年 11 月份,该公司持有 5,170,460 份 GBTC。 - -ARK Investment 是由被称为 “女版巴菲特” 的 ARK 女股神 Catherine Wood 于 2013 年创办的方舟投资管理公司。据美国证券交易委员会官网,主流机构方舟投资管理公司(ARK Investment Management)增加了其对灰度比特币信托基金(GBTC)的投资。 - -方舟公司旗下有 5 只主动管理 ETF,分别是:ARKK、ARKQ、ARKW、ARKG、ARKF。早在 2015 年,ARK 旗下的 “下一代互联网 ETF”ARKW 就投资了灰度投资发行的 GBTC。GBTC 是 ARKW 第三大重仓股,占其总资金的 4.73%。 - -![](../../../attachment/images-uuid/2c25eadf5c134865b5923f116a2b122a.png) - -**Rothschild Investment** - -2021 年 1 月 26 日,根据美国证券交易委员会(SEC)的新文件,罗斯柴尔德投资公司(Rothschild Investment Corporation)增加了其在 GBTC 中的投资份额。根据 13F-HR 表格(又称机构经理持仓报告),罗斯柴尔德报告称,**截至 2020 年 12 月 31 日其拥有 30,454 份 GBTC**,而在 2020 年 10 月份的文件中,该公司披露其持有 24,500 份 GBTC。 - -罗斯柴尔德投资公司(Rothschild Investment Corporation)是由门罗 · 罗斯柴尔德(Monroe Rothschild)和其姐夫塞缪尔 · 卡格 (Samuel Karger)于 1908 年成立的一家全方位服务的区域性经纪公司,总部位于芝加哥。目前,罗斯柴尔德公司管理的资产规模为 12.7 亿美元。2017 年,罗斯柴尔德投资公司首次从 Grayscale 的比特币信托基金购买了 539 份股票。 - -![](../../../attachment/images-uuid/30c5bb9f908b4be8ba33facc83ed93ad.png) - -**Tudor Investment** - -2020 年 5 月,Jones 表示通过旗下的 Tudor BVI Global Fund(1986 年成立,自成立以来年化收益率 23%)购买了比特币,购买的比特币资产占其投资管理规模的 1%-2%。 - -Tudor Investment Corporation 是由现代对冲基金行业先驱、传奇投资人 Paul Tudor Jones Ⅱ(保罗 · 都铎 · 琼斯二世)1980 年创建的资产管理公司,公司多年来一直保持两位数的投资回报率。**目前,都铎投资公司仍管理着约 396.6 亿美元的资产,其中 Tudor BVI 全球基金占 223 亿美元。**截至 2020 年 4 月,Paul Tudor Jones 的净资产达到 53 亿美元,在全球亿万富豪排行榜中名列第 320 位。 - -![](../../../attachment/images-uuid/1b7e10bd889a4c5c981364c40f1b3dfe.png) - -![](../../../attachment/images-uuid/bd96d193b9984434a1f8aeea2891d531.png) - -**Ruffer Investment** - -2020 年 12 月中旬,Ruffer Investment(鲁弗投资公司) 对 Coindesk 表示,**该公司对比特币的投资总额约为 5.5 亿英镑(约合 7.44 亿美元),约占公司资产管理规模的 2.7%。按 2020 年 11 月的价格计算,鲁弗投资公司共持有约 4.5 万枚比特币**。据鲁弗投资的投资总监 Duncan MacInnes 透露,该公司在过去几个月出售了部分比特币(目前仍持有 7 亿美元),总体已获得 7.5 亿美元的利润。 - -此外,根据其发布的 2020 年下半年投资期末评估文件显示,截至 2020 年 12 月 31 日,**该公司通过 Ruffer Multi Strategies Fund 以及 Microstrategy 和 Galaxy Digital 的股权共持有略高于 3%的比特币敞口**。其中,分别持有 Microstrategy 的 4,009 股股票(MSTR)和 Galaxy Digital 的 350,000 股股票(GLXY)。 - -Ruffer Investment 是一家成立于 1994 年并已在伦敦证券交易所上市的英国投资管理公司,在全球约有 6,600 个客户,涉及个人和家庭、养老基金和慈善机构。根据 Ruffer Investment 官网显示,截至 2020 年 12 月 31 日,该公司资产管理规模达 210 亿美元。 - -![](../../../attachment/images-uuid/c0c49a6293e74515a52c55e4c9cee071.png) - -**天桥资本** - -2021 年 1 月 4 日,**美国投资管理公司天桥资本(SkyBridge Capital)宣布推出比特币基金——SkyBridge Bitcoin Fund L.P.** ,为投资者提供对比特币进行投资的机构级别的工具。在启动前天桥资本及其关联公司已经向该基金注资 2530 万美元。此外,天桥资本代表其旗舰基金在 2020 年 11 月及 12 月投资于比特币的基金头寸已达 3.1 亿美元。 - -SkyBridge 位于美国纽约,由对冲基金大鳄安东尼 · 斯卡拉穆奇(Anthony Scaramucci)于 2005 年创立,目前,该基金资产管理规模已超过 122.2 亿美元。该基金通过把散户和机构投资者的资金投向知名对冲基金管理公司,从中收取提成。 - -据天桥资本官网显示,天桥比特币基金由富达数字资产公司担任比特币托管人,安永会计事务所担任审计师。该基金只收取 0.75% 的管理费,不收取激励费,可直接通过官网认购基金,但必须是符合 SEC 要求的合格投资者。 - -![](../../../attachment/images-uuid/5bc8bff2ace242779749e84bdc540f79.png) - -![](../../../attachment/images-uuid/bb90a10a98064ecfb06f879995e53dd0.png) - -**MicroStrategy** - -MicroStrategy 于 2020 年 8 月首次公开宣称将把比特币作为该公司的主要财政储备资产,在 8-9 月分别两次共投资了 4.25 亿美元买入 38,250 BTC。此后,MicroStrategy 一直在稳步增加比特币,**截至 2021 年 2 月 22 日,该公司共持有 71,079 枚比特币,当前持仓价值约为 39.92 亿美元,是全球持有比特币数量最多的上市公司**。 - -此外,在 2020 年 12 月和 2021 年 2 月,MicroStrategy 分别宣布计划发行 6.9 亿、9 亿美元的优先级可转换债券,所募集的资金将用于购买更多比特币。 - -MicroStrategy(微策略) 成立于 1989 年,是美国商业智能软件巨头,也是全球最大的独立 BI(Business Intelligence)公司(纳斯达克股票代码:MSTR)。该公司自成立以来保持了 20 年的持续增长, 年营收超过 5 亿美金, 主要来自商业智能软件和服务。 - -MicroStrategy 的高调布局掀起了上市公司的比特币购买潮,也成为了华尔街大公司巨头跑步入场的一个重要转折点。越来越多的公司、机构、银行通过持有 MicroStrategy 的股票,间接增加对比特币的投资。其中,全球投资银行摩根士丹利(Morgan Stanley)持有 MicroStrategy 公司 10.9% 的股份,具体来说,拥有 792,627 股微策公司的股票。 - -![](../../../attachment/images-uuid/83ee7339b31d4cda9eecacc01c4177d7.png) - -**Tesla** - -2021 年 2 月,根据美国证券交易委员会的正式年度报告 Form 10-K 显示,特斯拉已在比特币上总计投资了 15 亿美元(折合人民币约 100 亿元),并期望在不久的将来接受数字资产作为购买汽车和其他产品的支付选择。按照特斯拉持有的比特币数量,该公司今年比特币投资利润比 2020 年汽车销售利润高出近 30%。 - -据财联社报道,自特斯拉向 SEC 递交的文件获悉,2020 年特斯拉在中国市场收入达 66.62 亿美元,同比大增 123.6%。但美国仍然是特斯拉的最大市场,营收达 152.07 亿美元,中国和美国外的其他市场收入为 96.67 亿美元。 - -![](../../../attachment/images-uuid/62e4bc7a25f548f8b31a7750aa8864e9.png) - -**Square** - -2020 年 10 月 8 日,美国移动支付公司 Square 宣布,已用 5000 万美元购买了 4709 枚比特币(平均每枚比特币 10,600 美元)。2021 年 2 月,Square 在一份公开声明中表示已经以 1.7 亿美元购买了大约 3318 个比特币。加上此前购买的 5000 万美元比特币,截至 2020 年 12 月 31 日,Square 持有的比特币大约占 Square 的现金、现金等价物和有价证券总额的 5%。 - -Square 由 Twitter 的创始人兼 CEO Jack Dorsey 创办,最早在 2014 年,Square 就开始接受比特币作为支付方式。2018 年 1 月,Square 旗下的手机应用程序 Cash App 开始正式向用户提供比特币购买服务。2021 年 2 月 24 日,根据 Square 提交给美国证券交易委员会(SEC)的公司收入报告,Square 在 2020 年比特币收入为 45.7 亿美元,其中 9700 万美元成为公司的毛利润。比特币收入同比增长了 785%。Cash App 已成为美国主流市场中零售消费者进入比特币市场的主要通道。Square 通过在 Cash App 上出售比特币所获得的收入贡献了 “2020 年综合总收入的 48%,综合净收益增加总额的 85%”。 - -![](../../../attachment/images-uuid/1616b4ebfb954d18b8df243eec0bdf34.png) - -**MassMutual** - -2020 年 12 月 11 日,美国万通人寿保险公司(MassMutual)宣布通过纽约数字投资集团(NYDIG)为其普通保险帐户购买了价值 1 亿美元的比特币( 按照当时价格 18,279 美元约为 5,470 BTC)。这笔投资占 MassMutual 投资账户资金的 0.04%。此外,MassMutual 还购买了纽约数字投资集团 500 万美元的股权,该公司持有 23 亿美元的加密货币。 - -MassMutual(万通人寿)是美国五大寿险公司之一,是一家拥有 500 万客户的美国共同人寿保险公司,管理着超过 2350 亿美元的保险账户。其成立于 1851 年,总部位于美国马萨诸塞州,已经有近 170 年丰富风险及财富管理经验。 - -![](../../../attachment/images-uuid/abb2c47ae0c34be5ac09a5c836891f32.png) - -**Galaxy Digital Holdings** - -Galaxy Digital Holdings(银河数字控股)是比特币持仓数量第三的上市公司,目前共持有 16,402 BTC,价值 7.82 亿美元。 - -2020 年 11 月,**银河数字控股下属的银河数字资本管理有限公司 Galaxy Digital Capital Management LP(以下简称 Galaxy Digital)与加拿大投资公司 CI 全球资产管理公司携手推出的封闭式比特币基金(CI Galaxy)完成了 7200 万美元的 IPO** ,将为加拿大投资者提供比特币的敞口。此前,Galaxy Digital 还推出了两只比特币基金——银河比特币基金(Galaxy Bitcoin Fund)和银河机构比特币基金(Galaxy Institutional Bitcoin Fund)。 - -此外,2021 年 1 月,Galaxy Digital 透露该公司已成立一个新部门 Galaxy Digital Mining,将为比特币矿工提供金融服务和产品,在比特币挖矿领域进行新的尝试。 - -Galaxy Digital 是一家由亿万富翁 Mike Novogratz 创立的金融服务和加密货币投资管理公司,也被称为加密领域的 “高盛”,主要业务包括投资、交易、咨询、证券经纪、资产管理等。该公司运营着 4 只加密货币基金, 截至 2021 年 1 月 31 日,Galaxy Digital Capital Management LP 管理的初步资产为 8.347 亿美元。 - -**以上这些基金、机构巨头带来的示范效应,可能会吸引大量资金进入比特币市场寻求回报。**比特币走向主流金融市场正在成为一种必然趋势。根据数据统计,上市公司持有的比特币数量在过去 12 个月内飙升了 400%。去年,上市公司仅持有不到 2 万枚比特币。而今天,19 家上市公司共持有 105,837 枚比特币,价值超过 36 亿美元。 - -引用 ARK 在 2021 Big Ideas 中所称,**“未来比特币将成为众多机构和上市公司资产负债表的一部分,迎接比特币的将会是星辰大海”**。伴随着比特币价格屡次刷新历史记录,我们将共同见证一个属于比特币的新时代。 - -【直播预告】 - -**时间:2021 年 2 月 25 日 19:00 -** - -**嘉宾:Ownbit 钱包创始人谈国鹏 -** - -**主题:解决以太坊拥堵,Layer2 正全面爆发? -** - -![](../../../attachment/images-uuid/7bf6a427fd77464b84def3c152917ec3.png) - -扫码参与 ↑ ↑ ↑ - -**- END -** - -![](../../../attachment/images-uuid/f7c22075e4dc4cc08e374f4875833809.png) - -![](../../../attachment/images-uuid/344ac123e20a4055ad73c376fcdeb96f.png) - -☟ diff --git a/resource/工具/obsidian/Templater.md b/resource/工具/obsidian/Templater.md deleted file mode 100644 index ca5103f..0000000 --- a/resource/工具/obsidian/Templater.md +++ /dev/null @@ -1,123 +0,0 @@ -# 闪念 - -``` -<%* -// 查找当前日期对应的文件 -const file = tp.file.find_tfile(tp.date.now("YYYY-MM-DD")); - -if (!file) { - // 如果没有找到对应的文件,弹出通知 - new Notice("No Daily Note Found!"); - return; // 早期返回,避免更深的嵌套 -} - -// 弹出提示框,获取用户输入的日记内容 -const loggedItem = await tp.system.prompt("What's Up?"); -if (loggedItem === undefined || loggedItem === null || loggedItem.trim().length === 0) { - // 如果输入为undefined、null、空串或仅包含空格,不执行任何操作,弹出通知 - new Notice("Input is empty or invalid!"); - return; // 早期返回,避免更深的嵌套 -} - -// 获取当前时间 -const time = tp.date.now("HH:mm"); -// 读取文件内容,并按行分割成数组 -const content = (await app.vault.read(file)).split("\n"); -// 找到“# 杂记”标题的位置 -const index = content.indexOf("# 杂记"); - -// 检查“# 杂记”标题下一行是否为空行 -if (content[index + 1].trim() === "") { - // 如果下一行是空行,就在空行下添加新内容 - content.splice(index + 2, 0, `- ${time} - ${loggedItem}`); -} else { - // 如果下一行不是空行,就先添加一个空行,然后添加新内容 - content.splice(index + 1, 0, "", `- ${time} - ${loggedItem}`); -} - -// 将修改后的内容写回文件 -await app.vault.modify(file, content.join("\n")); --%> -``` - -# 问题记录模板 - -``` -<%* -// 弹出提示框获取文件标题 -const title = await tp.system.prompt("Enter file title"); - -// !!!!!!!!!!!!!!!!每个人自定义区域!!!!!!!!!!!!!!!! -// 定义待创建文件的目录 -const inboxDirectory = "000-Inbox"; -// 定义文档中会用到的特定标题,方便将来修改 -const detailHeader = "# 问题详情"; -// !!!!!!!!!!!!!!!!每个人自定义区域!!!!!!!!!!!!!!!! - -// 检查用户输入的标题是否有效(非空且非纯空格) -if (!title || title.trim().length === 0) { - new Notice("Title is empty or invalid!"); - return; // 如果标题为空或无效,则显示通知并停止执行 -} - -// 获取当前日期并格式化为 YYYY-MM-DD 用于文件属性 -const currentDate = tp.date.now("YYYY-MM-DD"); -// 获取当前时间并格式化为 HH:mm 用于文件属性 -const currentTime = tp.date.now("HH:mm"); -// 获取当前日期并格式化为 MMDD 用于文件名前缀 -const datePrefix = tp.date.now("MMDD"); - -// 构造待写入新文件中的内容,使用 YAML front matter 和 Markdown 格式 -const content = `--- -日期: ${currentDate} ${currentTime} -来源: ---- - -# 问题详情 - - - -# 处理过程 - - - -# 总结 - - -`; - -// 根据日期前缀和用户输入的标题构造文件名 -const myFilename = `${datePrefix}-${title}`; - -// 尝试创建新文件并写入构造好的内容 -try { - await tp.file.create_new(content, myFilename, false, app.vault.getAbstractFileByPath(inboxDirectory)); - new Notice("File created successfully!"); // 如果成功,弹出通知 - - // 根据文件名和目录获取新创建的文件 - const createdFile = app.vault.getAbstractFileByPath(`${inboxDirectory}/${myFilename}.md`); - // 获取新窗口叶节点 - const leaf = app.workspace.getLeaf(true); - // 在新叶节点中打开新创建的文件 - await leaf.openFile(createdFile); - - // 等待新视图加载完成 - await leaf.view.awaitingView; - - // 获取编辑器实例 - const editor = leaf.view.sourceMode.cmEditor; - // 寻找文件中的特定标题行 - const line_number = editor.lastLine(); - for(let i = 0; i <= line_number; i++) { - const line = editor.getLine(i); - if(line.includes(detailHeader)) { // 如果找到指定的标题行 - // 将光标移动到该标题下一行的开始位置 - editor.setCursor({line: i+2, ch: 0}); - break; - } - } -} catch (e) { // 如果尝试创建或打开文件出现错误 - new Notice("Failed to create or open file: " + e.message); // 弹出错误通知 -} --%> -``` diff --git a/resource/工具/obsidian/x-callback-url.md b/resource/工具/obsidian/x-callback-url.md index bd3dccf..4381395 100644 --- a/resource/工具/obsidian/x-callback-url.md +++ b/resource/工具/obsidian/x-callback-url.md @@ -1,11 +1,13 @@ -要在 Windows 系统上测试 Obsidian 的 `x-callback-url` 功能,可以创建一个简单的场景,在该场景中,你将使用浏览器(如 Edge 或 Chrome)来构造 URL 请求,并利用 Obsidian 和一个 web 服务(比如用一些免费在线服务作为 `x-success` 回调目标)来测试。以下是一个可以直接体验的步骤: +## x-callback-url 使用方法 -# 准备工作: +创建一个简单的场景,在该场景中,使用浏览器来构造 URL 请求,并利用 Obsidian 和一个 web 服务(比如用一些免费在线服务作为 `x-success` 回调目标)来测试。以下是一个可以直接体验的步骤: + +### 准备工作 1. **确保已安装 Obsidian** 并且已经在本地创建一个名为 `TestVault` 的笔记库。 -2. **确认 Obsidian 可以处理 URL Scheme**:在 Obsidian 中,启用 `URI` 插件(如果有),确保它能接收 `obsidian://` 协议的链接。 +2. **确认 Obsidian 可以处理 URL Scheme**:在 Obsidian 中,启用 `URI` 回调功能,确保它能接收 `obsidian://` 协议的链接。 -# 测试步骤: +### 测试步骤 1. 打开浏览器,复制并粘贴以下 URL 到地址栏中,然后回车: @@ -27,7 +29,7 @@ 4. **查看回调结果**: - 回到 `Webhook.site` 页面,你会看到 Obsidian 请求回调的详细信息,包括笔记的名称和相关信息。 -# 结果: +### 结果 - 如果操作成功,你应该会在 Obsidian 中的 `TestVault` 笔记库中看到一个名为 `TestNote` 的新笔记。 - 同时,在 `Webhook.site` 上可以查看到一个包含 `name` 参数的请求,比如: diff --git a/resource/系统/VIP Cloud.md b/resource/系统/VIP Cloud.md index 3429e6e..c4a10ba 100644 --- a/resource/系统/VIP Cloud.md +++ b/resource/系统/VIP Cloud.md @@ -1,3 +1,3 @@ -![](../../attachment/Pasted%20image%2020260329170137.png) +![](../../attachment/images-paste/Pasted%20image%2020260329170137.png) 2026-01-13 21:46 diff --git a/resource/系统/windows.md b/resource/系统/windows.md new file mode 100644 index 0000000..643ebf5 --- /dev/null +++ b/resource/系统/windows.md @@ -0,0 +1,14 @@ + +``` +powercfg -h off +``` + +powercfg -h off 可以释放 C 盘空间。 + +会立即删除系统盘根目录下的隐藏系统文件 hiberfil.sys。 + +会禁用休眠模式(关机时内存数据存盘,下次开机恢复状态)。依赖于此文件的 “快速启动” 功能也会一并失效。 + +系统默认会根据物理内存的大小来管理该文件,如果你的电脑内存是16GB,系统就可能分配一个16GB的页面文件 + +pagefile.sys diff --git a/resource/英语/形容词最高级.md b/resource/英语/形容词最高级.md new file mode 100644 index 0000000..e573f9d --- /dev/null +++ b/resource/英语/形容词最高级.md @@ -0,0 +1,113 @@ +**形容词最高级** 是英语里比较级的一部分,表示: + +> **三个或三个以上的人/事物中“最……”的那个。** + +比如: + +- Tom is **the tallest** boy in his class. + 汤姆是班里**最高的**男孩。 +- This is **the most interesting** book. + 这是**最有趣的**书。 + +--- + +## 1. 最高级的基本形式 + +### 1)一般在形容词后加 **-est** + +- tall → tallest +- small → smallest +- long → longest + +### 2)以 **e** 结尾,直接加 **-st** + +- large → largest +- nice → nicest + +### 3)“辅音字母+y”结尾,变 **y 为 i** 再加 **-est** + +- easy → easiest +- happy → happiest + +### 4)重读闭音节,末尾只有一个辅音字母时,双写再加 **-est** + +- big → biggest +- hot → hottest +- thin → thinnest + +### 5)多音节形容词常在前面加 **most** + +- beautiful → most beautiful +- interesting → most interesting +- difficult → most difficult + +--- + +## 2. 最高级前通常要加 **the** + +这是你这道题的核心知识点。 + +例如: + +- He is **the tallest** student in the class. +- New York is one of **the biggest** cities in the world. + +因为“最高级”表示范围中最突出的一个,所以前面一般用 **the**。 + +你图片里的句子: + +> New York is **the biggest** city in **the** world. + +这里 **biggest** 是最高级,所以前面要用 **the**。 + +--- + +## 3. 常见句型 + +### (1)the + 最高级 + 名词 + 范围 + +- She is **the best student** in our class. +- It is **the longest river** in the country. + +### (2)主语 + be + the + 最高级 + in/of… + +- He is **the tallest** in his family. +- This book is **the most useful** of all. + +### (3)one of the + 最高级 + 名词复数 + +表示“最……之一” + +- She is one of **the most popular teachers** in the school. +- Shanghai is one of **the biggest cities** in China. + +--- + +## 4. 比较级和最高级的区别 + +- **原级**:tall 高 +- **比较级**:taller 更高(两者比较) +- **最高级**:tallest 最高(三者及以上比较) + +例子: + +- Tom is tall. +- Tom is taller than Jim. +- Tom is the tallest in his class. + +--- + +## 5. 常见不规则变化 + +这些要单独记: + +- good / well → **best** +- bad / ill → **worst** +- many / much → **most** +- little → **least** +- far → **farthest / furthest** + +例如: + +- This is **the best** answer. +- He did **the worst** in the test. diff --git a/resource/英语/曹胖学位英语-代词.md b/resource/英语/曹胖学位英语-代词.md new file mode 100644 index 0000000..3ebdcdd --- /dev/null +++ b/resource/英语/曹胖学位英语-代词.md @@ -0,0 +1,52 @@ +David left `_______` raincoat in the room and went out. + +这里选择 his,但是更重要的是这里 left 考的是落下的意思,不是离开。 + +few 修饰的可数名词,little 修饰的不可数名词。不加 a 表示否定。 + +几乎没有朋友,用 few。little 修饰不可数名词,比如水。 + +有 not 选 any,考否定。any 在肯定句是任何。 + +both 复数 either 单数 + +``` +1. In this workshop, the output of July was three times ______ of January. +A. that   B. this   C. one   D. it + +答案:A + +句意:本车间七月份的产量是一月份产量的三倍。 + +解析:本题考查英文倍数的表达。在“倍数 + that + of”结构中,that 指代与前文相同的名词。故选 A。 +``` + +``` +**2. There are many fashion shops and expensive restaurants on _____ sides of the street.** + +A. all +B. each +C. both +D. every + +**答案:C** + +**句意:** 街道两旁有许多时装店和高价餐厅。 + +**解析:** 本题考查一般词汇。all 和 both 都有“都”的意思,但 all 多指三者及以上,both 多用于两者;each 和 every 无法和复数名词 sides 搭配。故选 C。 +``` + +``` +3. Alan sold most of his belongings. He has scarcely ______ left in the house. + +A. everything +B. something +C. anything +D. nothing + +答案:C + +句意:艾伦把他大部分的东西都卖了。家里没剩下什么了。 +``` + +each 两者中的每一个 diff --git a/resource/英语/曹胖学位英语-冠词真题笔记.md b/resource/英语/曹胖学位英语-冠词真题笔记.md new file mode 100644 index 0000000..7d4fccd --- /dev/null +++ b/resource/英语/曹胖学位英语-冠词真题笔记.md @@ -0,0 +1,168 @@ +# 冠词 + +``` +______ singer and ______ dancer is also good at drawing. + +A. The; a +B. The; the +C. a; a +D. The; / +``` + +此题选择 D,因为看到 is 说明是三单,则前边应是一个则第二个空不能填写。一个冠词,表示同一个人,两个冠词,表示两个人。 + +``` +I went to ______ London yesterday and saw ______ strange old man and a little girl, begging by the roadside. + +A. /; a +B. a; / +C. /; the +D. the; / +``` + +城市前边不加冠词,看到 and 前后一直,所以选择 A。 + +``` +It was ______ winter night and a pale moon hung low in ______ sky. + +A. a; a +B. the; the +C. a; the +D. the; a +``` + +看到 and 前后一直,独一无二 sky 选择 the。选 C。 + +``` +I am not sure whether New York is ______ biggest city in ______ world or not. + +A. a; a +B. a; the +C. the; the +D. the; a +``` + +考查定冠词与不定冠词用法。biggest 是形容词最高级,在形容词最高级前面要使用定冠词;世界上独一无二的事物前也要使用定冠词,world(世界)只有一个。故选 C。 + +``` +______ Yellow River is known to be ______ second longest river in China. + +A. The; the +B. /; / +C. The; / +D. /; the +``` + +考查冠词的用法。江河、湖海、山脉前用定冠词 the;序数词、形容词或最高级所修饰的词前用定冠词 the。故选 A。 + +``` +Shanghai is ______ biggest city in ______ China in terms of population. + +A. the; the +B. the; / +C. /; the +D. /; / +``` + +考查冠词用法。形容词最高级前用定冠词 the;专有名词、物质名词、抽象名词前不用冠词。故选 B。 + +这里如果是中华人民共和国加 the。 + +``` +I went to ______ Shanghai yesterday. On ______ train I met a famous pop star. + +A. the; / +B. /; the +C. the; the +D. /; / +``` + +本题考查冠词用法。专有名词前不用冠词;特指的名词前用 the。故选 B。 + +``` +______ Hong Kong is one of ______ busiest seaports in the world. + +A. The; the +B. /; / +C. The; / +D. /; the +``` + +本题考查冠词用法。专有名词、地名前不加 the;最高级前用 the 修饰。故选 D。 + +``` +Beijing, as the capital of ______ People’s Republic of China, enjoys ______ diverse range of people and cultures. + +A. the; the +B. a; a +C. the; a +D. a; the +``` + +本题考查冠词用法。中国的全称是固定的表达,是独一无二的事物,要用 the;a range of 是固定搭配,意为“一系列”。故选 C。 + +``` +Yesterday Mr. Smith bought _____ English dictionary while I got a Russian novel in the bookstore. + +A. a +B. an +C. the +D. / +``` + +本题考查冠词用法。以元音音素开头的单词前用不定冠词 an 修饰。故选 B。 + +``` +Becoming ______ American citizen takes a lot of work. + +A. / +B. an +C. a +D. the +``` + +考查冠词。英语中的冠词分为两类:不定冠词 a/an(泛指)和定冠词 the(特指)。根据句意,美国公民是泛指,用不定冠词;而 American 以元音音素开头,应该用不定冠词 an。故选 B。 + +``` +______ Pacific Ocean is ______ very large sea to the west of North and South America, and to the east of Asia and Australia. + +A. The; a +B. A; the +C. The; the +D. A; a +``` + +大海选择 the,第二个空用 **a**,因为这里的 **sea** 是**可数名词单数**,而且表示的是“**一种/一个很大的海洋**”,属于**泛指**,不是特指。 + +``` +The education of ______ young is always ______ hot and serious topic. + +A. /, / +B. the, a +C. /, the +D. the, the +``` + +本题考查冠词的用法。the 加形容词表示一类人,例如 the poor 穷人;the rich 富人。后面的空用不定冠词 a,表泛指。故选 B。 + +``` +14. It is known that ______ Galileo invented ______ telescope. + +A. the; the +B. /; the +C. a; / +D. the; a +``` + +本题考查冠词的用法。人名之前不加冠词;the 加单数名词表示某一类事物,the telescope 望远镜。故选 B。 + +``` +_____ Hongkong is often regarded as _____ international centre for business, finance and tourism. + +A. /; an +B. An; / +C. The; / +D. /; the +``` + +**解析:** 本题考查冠词的用法。地名前不加冠词。国际中心非特指,用不定冠词 **a**。故选 A。 diff --git a/resource/英语/曹胖学位英语-比较级最高级.md b/resource/英语/曹胖学位英语-比较级最高级.md new file mode 100644 index 0000000..c40348f --- /dev/null +++ b/resource/英语/曹胖学位英语-比较级最高级.md @@ -0,0 +1,5 @@ +比较级 +er 最高级 +est + +长单词 more most + +不规则不考。 diff --git a/resource/配置/PowerShell 配置文件.md b/resource/配置/PowerShell 配置文件.md index aff739d..0d47b94 100644 --- a/resource/配置/PowerShell 配置文件.md +++ b/resource/配置/PowerShell 配置文件.md @@ -14,9 +14,6 @@ if ($Host.Name -eq 'ConsoleHost' -and $Host.UI.SupportsVirtualTerminal) { Set-PSReadLineOption -PredictionSource HistoryAndPlugin Set-PSReadLineOption -PredictionViewStyle ListView Set-PSReadLineKeyHandler -Key Tab -Function MenuComplete - # --- 历史记录优化 --- - Set-PSReadLineOption -HistoryNoDuplicates - Set-PSReadLineOption -MaximumHistoryCount 10000 } catch { Write-Verbose "PSReadLine 配置未生效: $($_.Exception.Message)" @@ -79,8 +76,6 @@ function Get-EmptyDirectory { } } -Set-Alias -Name fempty -Value Get-EmptyDirectory - #---------------------------------------------------------------------- # 函数: Get-GitCodeLines #---------------------------------------------------------------------- diff --git a/resource/配置/claude code buddy.md b/resource/配置/claude code buddy.md new file mode 100644 index 0000000..01aa660 --- /dev/null +++ b/resource/配置/claude code buddy.md @@ -0,0 +1 @@ +![](../../attachment/images-paste/Pasted%20image%2020260402090513.png) diff --git a/000-inbox/MCP 请求数统计.md b/work/移动杭研/AI 项目/AI 工具需求-MCP 请求数统计.md similarity index 100% rename from 000-inbox/MCP 请求数统计.md rename to work/移动杭研/AI 项目/AI 工具需求-MCP 请求数统计.md diff --git a/000-inbox/需求-命中率计算.md b/work/移动杭研/AI 项目/AI 工具需求-命中率计算.md similarity index 100% rename from 000-inbox/需求-命中率计算.md rename to work/移动杭研/AI 项目/AI 工具需求-命中率计算.md diff --git a/work/移动杭研/AI 项目/CLAUDE.md.md b/work/移动杭研/AI 项目/CLAUDE.md.md index 515dfa5..e51969e 100644 --- a/work/移动杭研/AI 项目/CLAUDE.md.md +++ b/work/移动杭研/AI 项目/CLAUDE.md.md @@ -1,31 +1,31 @@ -# CLAUDE.md +# CLAUDE.md -This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. +This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. -本文件用于指导 Claude Code(claude.ai/code)在此仓库中开展工作。 +本文件用于指导 Claude Code(claude.ai/code)在此仓库中开展工作。 -## 技术栈 +## 技术栈 -- Java:`21`(``) -- 后端框架:Spring Boot `4.0.3` -- 后端框架:Spring Ai `1.1.2` +- Java:`21`(``) +- 后端框架:Spring Boot `4.0.5` +- 后端框架:Spring Ai `1.1.4` -## 开发规范 +## 开发规范 -如果涉及改动对外提供的 RESTful API 需对 MCP 动态工具管理 API 文档进行及时更新。 +如果涉及改动对外提供的 RESTful API 需对 `docs/API-概览.md` 及对应模块文档进行及时更新。 -开发 MCP 相关功能需要遵守 MCP 协议说明。 +开发 MCP 相关功能需要遵守 `docs/MCP-协议说明.md`。 -## 日志和注释 +## 日志和注释 -- 日志和注释使用中文 -- 关键位置须有日志,日志级别仅需要 `info` 和 `error` 两个级别 -- public 方法必须提供注释说明,关键位置也可以适量增加注释说明 +- 日志和注释使用中文 +- 关键位置须有日志,日志级别仅需要 `info` 和 `error` 两个级别 +- public 方法必须提供注释说明,关键位置也可以适量增加注释说明 -## 测试规范(强约束) +## 测试规范(强约束) -- 新增功能、修复问题、修改业务行为:必须新增/更新对应的测试用例(优先单元测试),覆盖核心规则与边界条件 -- 修复 Bug:必须提供回归测试(修复前失败、修复后通过) -- 纯代码格式/注释调整:可以不新增测试,但必须确保现有测试全部通过 -- 必要时才写集成测试(如持久化/序列化/校验):控制数量,避免把所有测试都写成 `@SpringBootTest` +- 新增功能、修复问题、修改业务行为:必须新增/更新对应的测试用例(优先单元测试),覆盖核心规则与边界条件 +- 修复 Bug:必须提供回归测试(修复前失败、修复后通过) +- 纯代码格式/注释调整:可以不新增测试,但必须确保现有测试全部通过 +- 必要时才写集成测试(如持久化/序列化/校验):控制数量,避免把所有测试都写成 `@SpringBootTest` - 提交前必须在仓库根目录运行 `mvn test` 并确保全部通过;测试未通过禁止提交 diff --git a/work/移动杭研/AI 项目/getHitRatio接口分析.md b/work/移动杭研/AI 项目/getHitRatio接口分析.md new file mode 100644 index 0000000..52f437e --- /dev/null +++ b/work/移动杭研/AI 项目/getHitRatio接口分析.md @@ -0,0 +1,358 @@ +# `getHitRatio` 接口分析 + +## 1. 接口概述 + +- **路由**: `GET /statistics/getHitRatio` +- **所在类**: `StatisticsController` +- **方法**: `getHitRatio(QueryParam param)` +- **注解**: `@StaticQueryCpCheckByDomain`(静态查询CP域名校验) +- **返回**: `JSONObject`,包含 `errCode`、`data`(命中率列表)、`reqUnit`("%") +- **功能**: 查询命中率数据,以时间维度返回各时间点的命中率百分比 + +--- + +## 2. 输入参数(`QueryParam`) + +| 参数名 | 类型 | 说明 | +|--------|------|------| +| `cpId` | String | 企业ID | +| `domainNames` | List\ | 域名列表 | +| `product` | String | 产品类型(如 "all"、具体产品ID) | +| `granular` | String | 时间粒度(minute/hour/day) | +| `providers` | List\ | 加速厂商/平台列表 | +| `affectAreas` | List\ | 加速区域/省份 | +| `isps` | List\ | 运营商列表 | +| `operator` | String | 运营商(具体值) | +| `productId` | String | 订购ID | +| `startTime` | String | 开始时间(yyyy-MM-dd HH:mm) | +| `endTime` | String | 结束时间(yyyy-MM-dd HH:mm) | +| `userType` | String | 用户类型(省代码,SA_PRV角色使用) | +| `cpIds` | List\ | 企业ID列表(内部使用) | +| `historyCpIdsByDomains` | List\ | 按域名的历史企业ID | + +--- + +## 3. 校验流程 + +### 3.1 注解级校验 + +`@StaticQueryCpCheckByDomain` — 在调用方法前进行静态查询CP域名的权限校验(切面/拦截器实现),确保当前用户有权限查询所提供域名的数据。 + +### 3.2 `paramVerify(param, roleId)` — 核心参数校验 + +#### 3.2.1 用户登录校验 + +- 通过 `getUser()` 获取当前用户,为 null 则返回错误:"无用户登录!" + +#### 3.2.2 加速厂商(平台)校验 + +- 调用 `validServicePlatform(param)`: + - `provider` 为 `"*"` 或 `"all"` → 重置为 `"all"`,返回 true + - 否则检查 `ServicePlatformEnum.getByCode(provider)` 是否存在,不存在返回错误 + +#### 3.2.3 带宽单位进制校验 + +- `unitScale < 1` → 返回错误:"所选带宽单位进制不规范!" + +#### 3.2.4 日期时间校验 + +**默认行为**:如果 `startTime` 或 `endTime` 为空,则默认当天 00:00 ~ 23:59。 + +**日期参数明确时**: + +| 条件 | 错误信息 | +|------|---------| +| 结束时间在未来1小时之后 | "只能查询到1小时前的数据" | +| 开始时间距今超过5年 | "只能查询五年内的数据" | +| 结束时间距今超过2分钟 且 跨度超过90天 | "跨度不能超过90天" | +| 超过1年 且 粒度为"小时" | "小时粒度数据仅支持1年内数据查询" | + +**粒度与时间跨度校验**: + +| 时间跨度条件 | 支持的粒度 | +|------------|-----------| +| ≤2分钟 且 距今≤60分钟,或 跨度=1分钟 | minute / hour | +| ≤2分钟 且 距今>60分钟 | hour / day | +| >2分钟 且 ≤31天 | hour / day | +| >31天 | day(仅支持按天) | + +#### 3.2.5 角色相关校验 + +根据 `roleId`(`SecurityUserUtil.getRoleId()`)进行不同处理: + +**角色 = ROLE_CROP(企业门户)**: + +- 必须有且仅有一个匹配的企业 +- 只能查询自己所属企业的数据(越权检查) +- `cpIds` 只含自己的 `enterpriseId` + +**角色 = ROLE_MANAGER / ROLE_MANAGER_ZQ(经理类)**: + +- `cpId` 不能为空且不能为 `"*"` → 错误:"请选定一个企业!" + +**角色 = ROLE_OPT(运维类)**: + +- `cpId` 为空或 `"*"` → `cpIds` 设为 `["all"]`(查所有) + +#### 3.2.6 域名越权校验 + +- 获取用户有权查看的所有域名列表 +- 遍历请求的 `domainNames`,必须在有权域名列表中,或在删除域名记录表中 +- 若不在,且为 SA_PRV 角色,还会额外检查是否在 `STATISTICS_KEY_ENTERPRISE` 配置的企业列表中 +- 不在任何一个列表中 → 错误:"has no domain in cps!" + +#### 3.2.7 加速区域(省份)处理 + +- 区域为空 → 默认为 `["all"]`(全国) +- 区域非空 → 将省份名称转换为省份短码(`provinceRepository.findByName`) +- 特殊值 `Constants.OTHER_PROVINCE`(其他省)→ 替换为 `Constants.OTHER_PROVINCE_SHORT_CODE` + +#### 3.2.8 产品类型默认值 + +- `"*"` → 重置为 `"all"` + +#### 3.2.9 历史企业ID合并 + +- 若 `historyCpIdsByDomains` 非空,且 `cpIds` 首个值不是 `"*"` 或 `"all"`,则合并历史企业ID + +#### 3.2.10 SA_PRV 角色的特殊处理 + +- 若角色为 SA_PRV(非企业门户),且用户的省份简称非空 → 设置 `param.userType = 用户省份短码` +- 否则 `userType` 设为 null + +#### 3.2.11 `paramVerify` 输出 + +- 成功时返回 `code=Constants.OK`,附带 `param`(处理后的 `StatisticQueryParam`)和 `cpIds` + +--- + +## 4. `getHitRatio` 方法体内的后续处理 + +### 4.1 `hitReqCheck(param)` — 时间粒度调整 + +根据开始时间和结束时间差,自动修正 `seconds` 参数(查询粒度): + +``` +if (开始+29天 之前于结束) → seconds = 86400(天粒度) +else if (开始+1天 之前于结束) → seconds = 3600(小时粒度) +else → seconds = 300(5分钟粒度) +``` + +### 4.2 `cpDomainProductAreaCheck(param)` — 域名/产品/区域默认值补全 + +| 字段 | 空值时的默认值 | +|------|--------------| +| `cpId` | `"all"` | +| `domainNames` | `["all"]` | +| `product` | `"all"` | +| `affectAreas` | `["all"]` | +| 多域名(size>1)| 设置 `isGenericDomain=true`,`genericDomain="domainCollect"` | + +### 4.3 cpIds 非空二次检查 + +- 若 `cpIds` 为空或 null → 返回错误:"无法获得相关企业信息!" + +### 4.4 状态码强制设值 + +```java +param.setStatusCodes(new ArrayList<>()); +param.getStatusCodes().add("all"); +``` + +> 注意:这里忽略了传入的 `statusCodes`,直接强制设为 `["all"]`,意味着命中率接口不看状态码筛选。 + +### 4.5 运营商 ISP 默认值 + +```java +if (CommonUtil.listIsNullOrSizeEqualZero(param.getIsps())) { + param.setIsps(Arrays.asList("all")); +} +``` + +### 4.6 CROP 角色特殊处理:域名转换 + +```java +Map domainMap = getDomainAndCpDomainMap(param.getDomainNames(), param.getCpId()); +convertDomain(domainMap, param, param.getCpId()); +``` + +- **作用**:处理"冲突域名"场景,即 `SelfServiceDomainConfigPO` 中 `domain` 和 `cpDomain` 字段不一致的情况 +- `getDomainAndCpDomainMap`:查询 `selfServiceDomainConfigDao.findByTenantIdAndCpDomainIn`,找出请求域名中哪些是冲突域名(domain ≠ cpDomain),返回 Map\ +- `convertDomain`:如果请求的所有域名都在冲突域名 Map 中,则用转换后的域名列表替换 + +--- + +## 5. 参数转换工厂 `StatisticParamFactory` + +### 5.1 `getWebRequest2(param)` — 构建请求数统计参数 + +```java +getByWebStatisticParam(param) + .metric(StatisticEnum.PARAMMETRIC.REQ.getValue()) // "req" + .isps(param.getIsps()) + .dimensions([DOMAIN, TIME, AREA]) + .needParamSum(15) +``` + +**`getByWebStatisticParam(param)` 内部逻辑**: + +| 字段 | 转换逻辑 | +|------|--------| +| `cpIds` | `cpId` 含逗号则 split,否则单值;历史域名则用 `historyCpIdsByDomains` | +| `domainNames` | 多个域名设 `genericDomain=true` | +| `productIds` | `"*"/空`→`all`;`"11"`→`[0,1,2]`(点播);`"12"`→`[5,6]`(直播);`"13"`→`[8,9]`(全站);`"14"`→`[7]`(超低时延);其他→原值 | +| `areas` | 空→`["all"]`;否则传入 | +| `providers` | 空或不匹配→`ServicePlatformEnum.getCRSPlatformCodesNew()`;否则传入 | +| `startTime/endTime` | 格式化为 ISO_OFFSET_DATE_TIME | +| `seconds` | 根据时间跨度自动判断(见下方 `checkSeconds`) | +| `userType` | 仅当 `cpId="all"` 时设置 | +| `granular` → `seconds` | `hour`→3600;`minute`→300;`day`→86400 | +| `operator` | 非空则传入 | +| `orderId` | `productId` 非空非"*"非"all" → 设置;否则 `"all"` | + +**`checkSeconds(start, end)` 自动判断粒度**: + +| 条件 | seconds | 含义 | +|------|---------|------| +| 跨度 > 29天 | 86400 | 天粒度 | +| 跨度 > 1天 且 ≤29天 | 3600 | 小时粒度 | +| 跨度 ≤ 1天 | 300 | 5分钟粒度 | + +### 5.2 `getWebHitreq2(param)` — 构建命中请求数统计参数 + +```java +getByWebStatisticParam(param) + .isps(param.getIsps()) + .needParamSum(13) +``` + +> 与 `getWebRequest2` 的区别:**不设置 `metric`**,且 `needParamSum=13`(请求数参数 15,命中请求 13) + +--- + +## 6. 三方接口调用 + +### 6.1 `HttpStateService.getHitRatio(request, hitReq)` + +调用链路(`data-service/HttpStateServiceImpl`): + +``` +1. getHitRatio(request, hitReq) + └→ getRequest(request) // 请求数(metric=req) + └→ handleToDataProcess(url: MULTI_METRIC_URL, data: request) + └→ getHitReq(hitReq) // 命中请求数(无metric) + └→ handleToDataProcess(url: MULTI_METRIC_URL, data: hitReq) + └→ req.getData().mergeHitReqIntoThis(hit.getData()) // 合并,计算命中率 +``` + +- 调用 `getDataIP() + MULTI_METRIC_URL`(大数据平台接口) +- 将请求数结果 `DataProcess` 和命中请求数结果 `DataProcess` 通过 `mergeHitReqIntoThis` 合并 +- 合并内部逻辑:命中率 = 命中请求数 / 总请求数 + +### 6.2 `DATACHECK` 线程变量检查 + +```java +if (httpStateService.DATACHECK.get() != null) { + resultMap.put("errCode", Constants.ERROR); + resultMap.put("error", "查询失败"); + httpStateService.DATACHECK.remove(); + return new JSONObject(resultMap); +} +``` + +> `DATACHECK` 是一个 `ThreadLocal`,三方接口内部可能将其设置为非 null 以标记查询失败。接口返回前必须清理。 + +--- + +## 7. 响应数据处理 + +### 7.1 数据转换逻辑 + +```java +hitRatioList = vo.getData().getDomains().get(0).getTimes().stream() + .sorted((t1, t2) -> t1.getTime().compareTo(t2.getTime())) // 时间升序 + .map(t -> { + StatisticResult temp = new StatisticResult(); + // 根据粒度决定时间格式 + formatter = DAY粒度 ? "yyyy-MM-dd" : "yyyy-MM-dd HH:mm" + temp.setName(formatter.format(解析(t.getTime()))) + // 原始值 * 100,转百分比,小数保留2位 + temp.setValue(UnitConverUtil.getDecimal(t.getProvinces().get(0).getValue().doubleValue() * 100)) + return temp; + }).collect(Collectors.toList()); +``` + +### 7.2 最终响应结构 + +```json +{ + "errCode": 0, + "data": [ + { "name": "2026-03-27 10:00", "value": 85.23 }, + { "name": "2026-03-27 10:05", "value": 86.45 } + ], + "reqUnit": "%" +} +``` + +| 字段 | 说明 | +|------|------| +| `errCode` | 0=成功,其他=失败 | +| `data[].name` | 时间字符串,格式由粒度决定(day="yyyy-MM-dd",其他="yyyy-MM-dd HH:mm") | +| `data[].value` | 命中率百分比,2位小数(如 85.23 表示 85.23%) | +| `reqUnit` | 固定为 "%" | + +--- + +## 8. 完整调用时序 + +``` +前端请求 + ↓ +@StaticQueryCpCheckByDomain 注解校验 + ↓ +paramVerify(param, roleId) + ├─ 用户登录校验 + ├─ 加速厂商有效性校验 + ├─ 带宽单位进制校验 + ├─ 日期时间范围校验 + 粒度校验 + ├─ 角色相关cpId/域名越权校验 + ├─ 省份区域转换 + └─ SA_PRV角色 userType 注入 + ↓ +hitReqCheck(param) // 自动修正 seconds 粒度 + ↓ +cpDomainProductAreaCheck(param) // cpId/domain/product/area 默认值 + ↓ +cpIds 非空检查 + ↓ +[仅CROP角色] getDomainAndCpDomainMap + convertDomain // 冲突域名转换 + ↓ +isps 默认值 ["all"] + ↓ +statisticParamFactory.getWebRequest2(param) // 构建请求数参数 + ↓ +statisticParamFactory.getWebHitreq2(param) // 构建命中请求数参数 + ↓ +httpStateService.getHitRatio(request, hitReq) + ├─ getRequest(request) → 大数据平台(请求数) + ├─ getHitReq(hitReq) → 大数据平台(命中请求数) + └─ mergeHitReqIntoThis() → 计算命中率 = 命中/请求 + ↓ +数据排序 + 时间格式化 + *100 转百分比 + ↓ +返回 JSONObject { errCode, data[], reqUnit:"%" } +``` + +--- + +## 9. 关键细节总结 + +1. **时间默认**:前后端均未传时间时,默认当天 00:00~23:59(分钟粒度数据) +2. **粒度自动推断**:不传 `granular` 时,`checkSeconds` 根据跨度自动判断(300s/3600s/86400s) +3. **statusCodes 被强制覆盖**:接口内部强制将 `statusCodes` 设为 `["all"]`,忽略前端传入值 +4. **isps 默认 ["all"]**:只有 `isps` 为空时才默认全选,不为空时使用传入值 +5. **CROP 角色域名转换**:仅企业门户角色会走冲突域名转换逻辑,普通角色不转换 +6. **SA_PRV 的 userType**:仅当 `cpId="all"` 时才设置 `userType`(省份短码),用于限制只能查询本省数据 +7. **needParamSum 参数校验**:内部通过参数个数校验来确保必填参数完整 +8. **ThreadLocal 清理**:`DATACHECK` 用完必须 remove,防止线程污染 diff --git a/work/移动杭研/开发记录/7.20.0/开发笔记 7.20.0.md b/work/移动杭研/开发记录/7.20.0/开发笔记 7.20.0.md new file mode 100644 index 0000000..c857c3c --- /dev/null +++ b/work/移动杭研/开发记录/7.20.0/开发笔记 7.20.0.md @@ -0,0 +1,57 @@ +# HCDN业务标准化接入-典基平面接入与基础数据模型扩展 + +2 + +## 需求评审 + +NRWLXT-30894 + +## 需求备注 + +## 需求开发 + +# 中国移动CDN信控能力优化需求 + +1 + +## 需求评审 + +NRWLXT-30899 + +## 需求备注 + +## 需求开发 + +# 自有业务中间话单统计-支持域名全选 + +2 + +## 需求评审 + +NRWLXT-30908 + +## 需求备注 + +``` +https://inte.p.cdn.10086.cn + +/query/cmcc/party/enterprise/95/bw/info + +?area=%E5%AE%89%E5%BE%BD +&enterpriseId=fr8v9e34-rnfrte8htfnlut1o +&domains=20250625160340.komect.com,20250625161433.komect.com,cach.test.eos.34580.com +&distributionPlanes=1 +&flowTypes=2 +&unitScale=1000 +&startTime=2026-04-07%2000:00 +&endTime=2026-04-07%2023:59 +&dataSource=bw +&_=1775617054166 + +``` + +## 需求开发 + +# 用例评审 + +# 冒烟自测 diff --git a/work/移动杭研/问题处理/2026-04/0414-icws.jb51.net 高级配置查询问题.md b/work/移动杭研/问题处理/2026-04/0414-icws.jb51.net 高级配置查询问题.md new file mode 100644 index 0000000..1e8d458 --- /dev/null +++ b/work/移动杭研/问题处理/2026-04/0414-icws.jb51.net 高级配置查询问题.md @@ -0,0 +1,20 @@ +--- +日期: 2026-04-14 10:45 +来源: 客响 +--- + +# 问题详情 + +# 处理过程 + +``` +10:00:51.561 +【域名高级配置修改】 下发配管, domain:icws.jb51.net, request:{"cache":{"enable":true,"detail":[{"unit":"hour","followsource":1,"weight":10,"type":0,"ttl":10,"content":"/pic/sparkline/"},{"unit":"hour","followsource":1,"weight":10,"type":0,"ttl":10,"content":"/pic/graph/"}]},"plain":[1],"task_id":"a6df87752a72447f8cb93cb7b75f8532"} + +10:05:01.677 +manage domain callBack request:{"callback_type":"create","operate_logo":"advanced_update","plain":[1],"domains":[{"result":1,"error_msg":{"message":"invoke api interface all failed.The parameter cache_rules.priority is duplicate."},"domain":"icws.jb51.net"}],"task_id":"a6df87752a72447f8cb93cb7b75f8532"} +``` + +# 总结 + +权重重复。 diff --git a/work/移动杭研/项目备忘/值班.md b/work/移动杭研/项目备忘/值班.md new file mode 100644 index 0000000..6c8692a --- /dev/null +++ b/work/移动杭研/项目备忘/值班.md @@ -0,0 +1,23 @@ +值班 + +寅杰Dell电脑开机密码:Nihao#1030 + +4A账号密码: cmhi_huangyinjie dMK$PNv8 + +汉春Lenovo 电脑开机密码:cmcc1234 + +4A账号密码:cmhi_liuhanchun ##%s63!8 + +志龙电脑没有开机密码。 + +刘汉春 13522310992 + +黄寅杰 13671023856 + +周先福 18810606017 + +后端机器 + +39.135.122.116/117 + +39.135.122.102/103