├── .github └── workflows │ └── release.yml ├── .gitignore ├── .prettierrc ├── LICENSE ├── README.md ├── esbuild.config.mjs ├── images ├── enable.png ├── example.gif └── settings.png ├── main.ts ├── manifest.json ├── package.json ├── src ├── commands │ ├── default.ts │ ├── exampleless.ts │ └── index.ts ├── commandsSuggest.ts ├── i18n.ts ├── index.ts └── settings.ts ├── tsconfig.json ├── version-bump.mjs ├── versions.json └── yarn.lock /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | name: Build obsidian plugin 2 | 3 | on: 4 | push: 5 | tags: 6 | - "*" 7 | 8 | env: 9 | PLUGIN_NAME: markdown-commands 10 | 11 | jobs: 12 | build: 13 | runs-on: ubuntu-latest 14 | 15 | steps: 16 | - uses: actions/checkout@v2 17 | - name: Use Node.js 18 | uses: actions/setup-node@v1 19 | with: 20 | node-version: "14.x" # You might need to adjust this value to your own version 21 | - name: Build 22 | id: build 23 | run: | 24 | yarn 25 | yarn run build --if-present 26 | mkdir ${{ env.PLUGIN_NAME }} 27 | cp main.js manifest.json ${{ env.PLUGIN_NAME }} 28 | zip -r ${{ env.PLUGIN_NAME }}.zip ${{ env.PLUGIN_NAME }} 29 | ls 30 | echo "::set-output name=tag_name::$(git tag --sort version:refname | tail -n 1)" 31 | - name: Create Release 32 | id: create_release 33 | uses: actions/create-release@v1 34 | env: 35 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 36 | VERSION: ${{ github.ref }} 37 | with: 38 | tag_name: ${{ github.ref }} 39 | release_name: ${{ github.ref }} 40 | draft: false 41 | prerelease: false 42 | - name: Upload zip file 43 | id: upload-zip 44 | uses: actions/upload-release-asset@v1 45 | env: 46 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 47 | with: 48 | upload_url: ${{ steps.create_release.outputs.upload_url }} 49 | asset_path: ./${{ env.PLUGIN_NAME }}.zip 50 | asset_name: ${{ env.PLUGIN_NAME }}-${{ steps.build.outputs.tag_name }}.zip 51 | asset_content_type: application/zip 52 | - name: Upload main.js 53 | id: upload-main 54 | uses: actions/upload-release-asset@v1 55 | env: 56 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 57 | with: 58 | upload_url: ${{ steps.create_release.outputs.upload_url }} 59 | asset_path: ./main.js 60 | asset_name: main.js 61 | asset_content_type: text/javascript 62 | - name: Upload manifest.json 63 | id: upload-manifest 64 | uses: actions/upload-release-asset@v1 65 | env: 66 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 67 | with: 68 | upload_url: ${{ steps.create_release.outputs.upload_url }} 69 | asset_path: ./manifest.json 70 | asset_name: manifest.json 71 | asset_content_type: application/json 72 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # vscode 2 | .vscode 3 | 4 | # Intellij 5 | *.iml 6 | .idea 7 | 8 | # npm 9 | node_modules 10 | 11 | # Don't include the compiled main.js file in the repo. 12 | # They should be uploaded to GitHub releases instead. 13 | main.js 14 | 15 | # Exclude sourcemaps 16 | *.map 17 | 18 | # obsidian 19 | data.json 20 | 21 | # Exclude macOS Finder (System Explorer) View States 22 | .DS_Store 23 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "arrowParens": "avoid", 3 | "tabWidth": 4, 4 | "semi": false 5 | } 6 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright 2022 Jules Guesnon 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 4 | 5 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 6 | 7 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 8 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | [![Release number](https://img.shields.io/github/release/JulesGuesnon/obsidian-markdown-commands.svg)](https://GitHub.com/Naereen/StrapDown.js/releases/) [![Github all releases](https://img.shields.io/github/downloads/JulesGuesnon/obsidian-markdown-commands/total.svg)](https://GitHub.com/Naereen/StrapDown.js/releases/) 2 | 3 | # Obsidian Markdown Shortcuts 4 | 5 | This is a plugin for Obsidian (https://obsidian.md). 6 | 7 | # Why? 8 | 9 | If you're used to software like Notion, going from assisted markdown to plain markdown may be a bit hard if you're not used to it. You'll probably have to work with a [cheatsheet](https://www.markdownguide.org/cheat-sheet/) open in a tab in order to make sure you're not doing it wrong.
10 | 11 | Also some syntaxes are a bit cumbersome to write like the [table](https://www.markdownguide.org/cheat-sheet/#extended-syntax) one. 12 | 13 | So, if you're learning markdown or too lazy to write a table, this plugin is for you. 14 | 15 | # How it works? 16 | 17 | ## Show the commands 18 | 19 | All you have to do is to write a `>` whenever you want in a file, then make your choice. 20 | 21 | ![example.gif](./images/example.gif) 22 | 23 | ## Configure the plugin 24 | 25 | - `Trigger character` Set the character that will trigger the commands. 26 | - `Simple commands` Insert commands without examples. 27 | 28 | ![settings.png](./images/settings.png) 29 | 30 | # How to install? 31 | 32 | First, you need to have `Obsidian v0.12.17+`. 33 | 34 | - Go to `Settings > Community plugins` 35 | 36 | - Turn safe mode to `off` 37 | 38 | - Go to the [releases page](https://github.com/JulesGuesnon/obsidian-markdown-commands/releases) 39 | 40 | - Download the latest `markdown-commands-.zip` 41 | 42 | - Put the zip into `/.obsidian/plugins` (if the folder plugins doesn't exist you can create it) 43 | 44 | - Extract it 45 | 46 | - Enable the plugin in the settings and you're ready to go 47 | 48 | ![enable.png](./images/enable.png) 49 | 50 | # Any issue or suggestion? 51 | 52 | If you're facing an issue feel free to [open a new one](https://github.com/JulesGuesnon/obsidian-markdown-commands/issues/new) and describe as much as possible the issue, the context of the issue, etc... 53 | 54 | If you think that the plugin is missing something or could be improved, feel free to [open an issue](https://github.com/JulesGuesnon/obsidian-markdown-commands/issues/new) and describe your idea. 55 | -------------------------------------------------------------------------------- /esbuild.config.mjs: -------------------------------------------------------------------------------- 1 | import esbuild from "esbuild" 2 | import process from "process" 3 | import builtins from "builtin-modules" 4 | 5 | const banner = `/* 6 | THIS IS A GENERATED/BUNDLED FILE BY ESBUILD 7 | if you want to view the source, please visit the github repository of this plugin 8 | */ 9 | ` 10 | 11 | const prod = process.argv[2] === "production" 12 | 13 | esbuild 14 | .build({ 15 | banner: { 16 | js: banner, 17 | }, 18 | entryPoints: ["main.ts"], 19 | bundle: true, 20 | external: [ 21 | "obsidian", 22 | "electron", 23 | "@codemirror/autocomplete", 24 | "@codemirror/closebrackets", 25 | "@codemirror/collab", 26 | "@codemirror/commands", 27 | "@codemirror/comment", 28 | "@codemirror/fold", 29 | "@codemirror/gutter", 30 | "@codemirror/highlight", 31 | "@codemirror/history", 32 | "@codemirror/language", 33 | "@codemirror/lint", 34 | "@codemirror/matchbrackets", 35 | "@codemirror/panel", 36 | "@codemirror/rangeset", 37 | "@codemirror/rectangular-selection", 38 | "@codemirror/search", 39 | "@codemirror/state", 40 | "@codemirror/stream-parser", 41 | "@codemirror/text", 42 | "@codemirror/tooltip", 43 | "@codemirror/view", 44 | ...builtins, 45 | ], 46 | format: "cjs", 47 | watch: !prod, 48 | target: "es2016", 49 | logLevel: "info", 50 | sourcemap: prod ? false : "inline", 51 | treeShaking: true, 52 | outfile: "main.js", 53 | minify: prod, 54 | }) 55 | .catch(() => process.exit(1)) 56 | -------------------------------------------------------------------------------- /images/enable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulesGuesnon/obsidian-markdown-shortcuts/92e4c21082d56d18beef236f4d63643aca3b52e8/images/enable.png -------------------------------------------------------------------------------- /images/example.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulesGuesnon/obsidian-markdown-shortcuts/92e4c21082d56d18beef236f4d63643aca3b52e8/images/example.gif -------------------------------------------------------------------------------- /images/settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulesGuesnon/obsidian-markdown-shortcuts/92e4c21082d56d18beef236f4d63643aca3b52e8/images/settings.png -------------------------------------------------------------------------------- /main.ts: -------------------------------------------------------------------------------- 1 | import { Editor, MarkdownView, Plugin } from "obsidian" 2 | import { Settings, CommandsSuggest, t } from "./src" 3 | 4 | interface MarkdownShortcutsSettings { 5 | triggerChar: string 6 | examplelessCommands: boolean 7 | } 8 | 9 | const DEFAULT_SETTINGS: MarkdownShortcutsSettings = { 10 | triggerChar: ">", 11 | examplelessCommands: false, 12 | } 13 | 14 | export default class MarkdownShortcuts extends Plugin { 15 | settings: MarkdownShortcutsSettings 16 | 17 | async onload() { 18 | await this.loadSettings() 19 | 20 | this.addSettingTab(new Settings(this.app, this)) 21 | 22 | this.registerEditorSuggest(new CommandsSuggest(this.app, this)) 23 | } 24 | 25 | onunload() {} 26 | 27 | async loadSettings() { 28 | this.settings = { ...DEFAULT_SETTINGS, ...(await this.loadData()) } 29 | } 30 | 31 | async saveSettings() { 32 | await this.saveData(this.settings) 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "markdown-shortcuts", 3 | "name": "Markdown shortcuts", 4 | "version": "0.4.0", 5 | "minAppVersion": "0.12.17", 6 | "description": "Allows to write markdown from shortcuts (example: >h1 -> #).", 7 | "author": "Jules Guesnon", 8 | "authorUrl": "https://github.com/JulesGuesnon", 9 | "isDesktopOnly": false 10 | } 11 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "markdown-shortcuts", 3 | "version": "0.4.0", 4 | "description": "A configurable plugin for Obsidian that allow you to write commands to make markdown (example: >h1 -> #)", 5 | "main": "main.js", 6 | "scripts": { 7 | "dev": "node esbuild.config.mjs", 8 | "build": "tsc -noEmit -skipLibCheck && node esbuild.config.mjs production", 9 | "version": "node version-bump.mjs", 10 | "lint": "prettier --write *.ts ./src" 11 | }, 12 | "keywords": [], 13 | "author": "", 14 | "license": "MIT", 15 | "devDependencies": { 16 | "@types/node": "^16.11.6", 17 | "@typescript-eslint/eslint-plugin": "^5.2.0", 18 | "@typescript-eslint/parser": "^5.2.0", 19 | "builtin-modules": "^3.2.0", 20 | "esbuild": "0.13.12", 21 | "obsidian": "^0.12.17", 22 | "tslib": "2.3.1", 23 | "typescript": "4.4.4" 24 | }, 25 | "dependencies": { 26 | "prettier": "^2.7.1" 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/commands/default.ts: -------------------------------------------------------------------------------- 1 | export default [ 2 | { 3 | label: "h1", 4 | value: "# ", 5 | }, 6 | { 7 | label: "h2", 8 | value: "## ", 9 | }, 10 | { 11 | label: "h3", 12 | value: "### ", 13 | }, 14 | { 15 | label: "h4", 16 | value: "#### ", 17 | }, 18 | { 19 | label: "h5", 20 | value: "##### ", 21 | }, 22 | { 23 | label: "h6", 24 | value: "###### ", 25 | }, 26 | { 27 | label: "bold", 28 | value: "**bold**", 29 | }, 30 | { 31 | label: "italic", 32 | value: "*italic*", 33 | }, 34 | { 35 | label: "strike", 36 | value: "~~strike~~", 37 | }, 38 | { 39 | label: "highlight", 40 | value: "==highlight==", 41 | }, 42 | { 43 | label: "quote", 44 | value: "> ", 45 | }, 46 | { 47 | label: "ordered-list", 48 | value: ` 49 | 1. First item 50 | 2. Second item 51 | 3. Third item`, 52 | }, 53 | { 54 | label: "unordered-list", 55 | value: ` 56 | - First item 57 | - Second item 58 | - Third item`, 59 | }, 60 | { 61 | label: "external-link", 62 | value: "[link text](https://my.link)", 63 | }, 64 | { 65 | label: "image", 66 | value: "![alt text](https://via.placeholder.com/150)", 67 | }, 68 | { 69 | label: "table", 70 | value: ` 71 | |Left aligned text|Centered text| Right aligned text| 72 | |---|:---:|---:| 73 | |Cell|Cell|Cell|`, 74 | }, 75 | { 76 | label: "inline-code", 77 | value: `\`let hello = "world"\``, 78 | }, 79 | { 80 | label: "codeblock", 81 | value: ` 82 | \`\`\`rust 83 | let hello = 'world' 84 | \`\`\``, 85 | }, 86 | { 87 | label: "todo", 88 | value: "- [ ] To do", 89 | }, 90 | { 91 | label: "line-break", 92 | value: "
", 93 | }, 94 | 95 | { 96 | label: "divider", 97 | value: ` 98 | Optional 99 | ---`, 100 | }, 101 | { 102 | label: "footnote", 103 | value: "[^id]: value", 104 | }, 105 | { 106 | label: "link", 107 | value: "[[note|alias]]", 108 | }, 109 | { 110 | label: "embed", 111 | value: "![[page]]", 112 | }, 113 | { 114 | label: "tag", 115 | value: "#tag", 116 | }, 117 | ] 118 | -------------------------------------------------------------------------------- /src/commands/exampleless.ts: -------------------------------------------------------------------------------- 1 | export default [ 2 | { 3 | label: "h1", 4 | value: "# ", 5 | }, 6 | { 7 | label: "h2", 8 | value: "## ", 9 | }, 10 | { 11 | label: "h3", 12 | value: "### ", 13 | }, 14 | { 15 | label: "h4", 16 | value: "#### ", 17 | }, 18 | { 19 | label: "h5", 20 | value: "##### ", 21 | }, 22 | { 23 | label: "h6", 24 | value: "###### ", 25 | }, 26 | { 27 | label: "bold", 28 | value: "****", 29 | }, 30 | { 31 | label: "italic", 32 | value: "**", 33 | }, 34 | { 35 | label: "strike", 36 | value: "~~~~", 37 | }, 38 | { 39 | label: "highlight", 40 | value: "====", 41 | }, 42 | { 43 | label: "quote", 44 | value: "> ", 45 | }, 46 | { 47 | label: "ordered-list", 48 | value: `1. `, 49 | }, 50 | { 51 | label: "unordered-list", 52 | value: `- `, 53 | }, 54 | { 55 | label: "external-link", 56 | value: "[]()", 57 | }, 58 | { 59 | label: "image", 60 | value: "![]()", 61 | }, 62 | { 63 | label: "table", 64 | value: ` 65 | | | | | 66 | |---|:---:|---:| 67 | | | | |`, 68 | }, 69 | { 70 | label: "inline-code", 71 | value: `\`\``, 72 | }, 73 | { 74 | label: "codeblock", 75 | value: ` 76 | \`\`\` 77 | 78 | \`\`\``, 79 | }, 80 | { 81 | label: "todo", 82 | value: "- [ ] ", 83 | }, 84 | { 85 | label: "line-break", 86 | value: "
", 87 | }, 88 | 89 | { 90 | label: "divider", 91 | value: ` 92 | --- 93 | `, 94 | }, 95 | { 96 | label: "footnote", 97 | value: "[^]: ", 98 | }, 99 | { 100 | label: "link", 101 | value: "[[|]]", 102 | }, 103 | { 104 | label: "embed", 105 | value: "![[]]", 106 | }, 107 | { 108 | label: "tag", 109 | value: "#", 110 | }, 111 | ] 112 | -------------------------------------------------------------------------------- /src/commands/index.ts: -------------------------------------------------------------------------------- 1 | import MarkdownShortcuts from "../../main" 2 | import defaultCommands from "./default" 3 | import examplelessCommands from "./exampleless" 4 | 5 | export type Command = { 6 | label: string 7 | value: string 8 | } 9 | 10 | export function resolveCommands(plugin: MarkdownShortcuts) { 11 | if (plugin.settings.examplelessCommands) return examplelessCommands 12 | return defaultCommands 13 | } 14 | -------------------------------------------------------------------------------- /src/commandsSuggest.ts: -------------------------------------------------------------------------------- 1 | import MarkdownShortcuts from "../main" 2 | import { 3 | App, 4 | Editor, 5 | EditorPosition, 6 | EditorSuggest, 7 | EditorSuggestContext, 8 | EditorSuggestTriggerInfo, 9 | TFile, 10 | } from "obsidian" 11 | import { resolveCommands, Command } from "./commands" 12 | import t from "./i18n" 13 | 14 | export default class CommandsSuggest extends EditorSuggest { 15 | inCmd = false 16 | cmdStartCh = 0 17 | plugin: MarkdownShortcuts 18 | 19 | constructor(app: App, plugin: MarkdownShortcuts) { 20 | super(app) 21 | this.plugin = plugin 22 | } 23 | resetInfos() { 24 | this.cmdStartCh = 0 25 | this.inCmd = false 26 | } 27 | 28 | onTrigger( 29 | cursor: EditorPosition, 30 | editor: Editor, 31 | _file: TFile 32 | ): EditorSuggestTriggerInfo { 33 | const currentLine = editor.getLine(cursor.line).slice(0, cursor.ch) 34 | 35 | if ( 36 | !this.inCmd && 37 | currentLine[currentLine.length - 1] !== 38 | this.plugin.settings.triggerChar 39 | ) { 40 | this.resetInfos() 41 | return null 42 | } 43 | 44 | if (!this.inCmd) { 45 | this.cmdStartCh = currentLine.length - 1 46 | this.inCmd = true 47 | } 48 | 49 | const currentCmd = currentLine.slice(this.cmdStartCh, cursor.ch) 50 | 51 | if ( 52 | currentCmd.includes(" ") || 53 | !currentCmd.includes(this.plugin.settings.triggerChar) 54 | ) { 55 | this.resetInfos() 56 | return null 57 | } 58 | 59 | return { start: cursor, end: cursor, query: currentCmd.slice(1) } 60 | } 61 | 62 | getSuggestions( 63 | context: EditorSuggestContext 64 | ): Command[] | Promise { 65 | const suggestions = resolveCommands(this.plugin).filter(({ label }) => 66 | label.includes(context.query) 67 | ) 68 | 69 | return suggestions.length > 0 70 | ? suggestions 71 | : [{ label: t.commandsSuggest.noResult, value: "" }] 72 | } 73 | 74 | renderSuggestion(value: Command, el: HTMLElement): void { 75 | const div = document.createElement("div") 76 | 77 | div.textContent = value.label 78 | 79 | el.appendChild(div) 80 | } 81 | 82 | selectSuggestion(cmd: Command, _evt: MouseEvent | KeyboardEvent): void { 83 | if (cmd.label === t.commandsSuggest.noResult) return 84 | 85 | this.context.editor.replaceRange( 86 | cmd.value, 87 | { ...this.context.start, ch: this.cmdStartCh }, 88 | this.context.end 89 | ) 90 | 91 | this.resetInfos() 92 | 93 | this.close() 94 | } 95 | } 96 | -------------------------------------------------------------------------------- /src/i18n.ts: -------------------------------------------------------------------------------- 1 | class T { 2 | lang: string 3 | 4 | all = { 5 | en: { 6 | settings: { 7 | title: "Markdown commands settings", 8 | description: 9 | "To quickly enable or disable the plugin, you can use the command palette.", 10 | toggle: { 11 | title: "Activated", 12 | description: "Wether or not the suggest will be triggered.", 13 | }, 14 | character: { 15 | title: "Trigger character", 16 | description: 17 | "Which character should show the suggestions. (press a key to replace the current char)", 18 | }, 19 | examplelessCommands: { 20 | title: "Exampleless commands", 21 | description: 22 | "Insert commands without examples: [ ]( ) instead of [link text](https://my.link)", 23 | tooltip: "Exampleless commands", 24 | }, 25 | }, 26 | commandsSuggest: { 27 | noResult: "No result", 28 | }, 29 | commandPalette: { 30 | enable: "Enable", 31 | disabled: "Disable", 32 | }, 33 | }, 34 | fr: { 35 | settings: { 36 | title: "Réglages Commandes Markdown", 37 | description: 38 | "Pour rapidement activer ou désactiver le plugin, vous pouvez utiliser la palette de commande.", 39 | toggle: { 40 | title: "Activé", 41 | description: "Si la suggestion sera déclenchée ou non.", 42 | }, 43 | character: { 44 | title: "Caractère de déclenchement", 45 | description: 46 | "Quel caractère doit déclencher l'affichage des suggestions. (appuyez sur une touche pour remplacer le caractère actuel)", 47 | }, 48 | examplelessCommands: { 49 | title: "Commandes sans exemple", 50 | description: 51 | "Insère des commandes sans exemple: [ ]( ) au lieu de [link text](https://my.link)", 52 | tooltip: "Commandes sans exemple", 53 | }, 54 | }, 55 | commandsSuggest: { 56 | noResult: "Pas de résultat", 57 | }, 58 | commandPalette: { 59 | enable: "Activer", 60 | disabled: "Désactiver", 61 | }, 62 | }, 63 | } 64 | 65 | constructor() { 66 | this.lang = localStorage.getItem("language") 67 | } 68 | 69 | get texts(): typeof this.all.en { 70 | return this.all[this.lang === "fr" ? "fr" : "en"] 71 | } 72 | } 73 | 74 | export default new T().texts 75 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | export { default as Settings } from "./settings" 2 | export { default as CommandsSuggest } from "./commandsSuggest" 3 | export { default as t } from "./i18n" 4 | -------------------------------------------------------------------------------- /src/settings.ts: -------------------------------------------------------------------------------- 1 | import MarkdownShortcuts from "../main" 2 | import { App, PluginSettingTab, Setting } from "obsidian" 3 | import t from "./i18n" 4 | 5 | export default class SettingTab extends PluginSettingTab { 6 | plugin: MarkdownShortcuts 7 | 8 | constructor(app: App, plugin: MarkdownShortcuts) { 9 | super(app, plugin) 10 | this.plugin = plugin 11 | } 12 | 13 | display(): void { 14 | const { containerEl } = this 15 | 16 | containerEl.empty() 17 | 18 | containerEl.createEl("h2", { text: t.settings.title }) 19 | containerEl.createEl("p", { 20 | text: t.settings.description, 21 | }) 22 | 23 | new Setting(containerEl) 24 | .setName(t.settings.character.title) 25 | .setDesc(t.settings.character.description) 26 | .addText(text => { 27 | text.setValue(this.plugin.settings.triggerChar).onChange( 28 | async value => { 29 | if (value.trim().length < 1) { 30 | text.setValue(this.plugin.settings.triggerChar) 31 | return 32 | } 33 | 34 | let char = value[0] 35 | 36 | if (value.trim().length === 2) { 37 | char = value.replace( 38 | this.plugin.settings.triggerChar, 39 | "" 40 | ) 41 | } 42 | 43 | text.setValue(char) 44 | 45 | this.plugin.settings.triggerChar = char 46 | 47 | await this.plugin.saveSettings() 48 | } 49 | ) 50 | }) 51 | 52 | new Setting(containerEl) 53 | .setName(t.settings.examplelessCommands.title) 54 | .setDesc(t.settings.examplelessCommands.description) 55 | .addToggle(toggle => { 56 | toggle 57 | .setTooltip(t.settings.examplelessCommands.tooltip) 58 | .setValue(this.plugin.settings.examplelessCommands) 59 | .onChange(async value => { 60 | this.plugin.settings.examplelessCommands = value 61 | await this.plugin.saveSettings() 62 | }) 63 | }) 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "baseUrl": ".", 4 | "inlineSourceMap": true, 5 | "inlineSources": true, 6 | "module": "ESNext", 7 | "target": "ES6", 8 | "allowJs": true, 9 | "noImplicitAny": true, 10 | "moduleResolution": "node", 11 | "importHelpers": true, 12 | "isolatedModules": true, 13 | "lib": [ 14 | "DOM", 15 | "ES5", 16 | "ES6", 17 | "ES7" 18 | ] 19 | }, 20 | "include": [ 21 | "**/*.ts" 22 | ] 23 | } 24 | -------------------------------------------------------------------------------- /version-bump.mjs: -------------------------------------------------------------------------------- 1 | import { readFileSync, writeFileSync } from "fs"; 2 | 3 | const targetVersion = process.env.npm_package_version; 4 | 5 | // read minAppVersion from manifest.json and bump version to target version 6 | let manifest = JSON.parse(readFileSync("manifest.json", "utf8")); 7 | const { minAppVersion } = manifest; 8 | manifest.version = targetVersion; 9 | writeFileSync("manifest.json", JSON.stringify(manifest, null, "\t")); 10 | 11 | // update versions.json with target version and minAppVersion from manifest.json 12 | let versions = JSON.parse(readFileSync("versions.json", "utf8")); 13 | versions[targetVersion] = minAppVersion; 14 | writeFileSync("versions.json", JSON.stringify(versions, null, "\t")); 15 | -------------------------------------------------------------------------------- /versions.json: -------------------------------------------------------------------------------- 1 | { 2 | "0.1.0": "0.12.17", 3 | "0.1.1": "0.12.17", 4 | "0.2.0": "0.12.17", 5 | "0.2.1": "0.12.17", 6 | "0.2.2": "0.12.17", 7 | "0.2.3": "0.12.17", 8 | "0.3.0": "0.12.17", 9 | "0.3.1": "0.12.17", 10 | "0.4.0": "0.12.17" 11 | } 12 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@nodelib/fs.scandir@2.1.5": 6 | version "2.1.5" 7 | resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" 8 | integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== 9 | dependencies: 10 | "@nodelib/fs.stat" "2.0.5" 11 | run-parallel "^1.1.9" 12 | 13 | "@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": 14 | version "2.0.5" 15 | resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" 16 | integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== 17 | 18 | "@nodelib/fs.walk@^1.2.3": 19 | version "1.2.8" 20 | resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" 21 | integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== 22 | dependencies: 23 | "@nodelib/fs.scandir" "2.1.5" 24 | fastq "^1.6.0" 25 | 26 | "@types/codemirror@0.0.108": 27 | version "0.0.108" 28 | resolved "https://registry.npmjs.org/@types/codemirror/-/codemirror-0.0.108.tgz" 29 | integrity sha512-3FGFcus0P7C2UOGCNUVENqObEb4SFk+S8Dnxq7K6aIsLVs/vDtlangl3PEO0ykaKXyK56swVF6Nho7VsA44uhw== 30 | dependencies: 31 | "@types/tern" "*" 32 | 33 | "@types/estree@*": 34 | version "0.0.51" 35 | resolved "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz" 36 | integrity sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ== 37 | 38 | "@types/json-schema@^7.0.9": 39 | version "7.0.9" 40 | resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz" 41 | integrity sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ== 42 | 43 | "@types/node@^16.11.6": 44 | version "16.11.24" 45 | resolved "https://registry.npmjs.org/@types/node/-/node-16.11.24.tgz" 46 | integrity sha512-Ezv33Rl4mIi6YdSHfIRNBd4Q9kUe5okiaw/ikvJiJDmuQZNW5kfdg7+oQPF8NO6sTcr3woIpj3jANzTXdvEZXA== 47 | 48 | "@types/tern@*": 49 | version "0.23.4" 50 | resolved "https://registry.npmjs.org/@types/tern/-/tern-0.23.4.tgz" 51 | integrity sha512-JAUw1iXGO1qaWwEOzxTKJZ/5JxVeON9kvGZ/osgZaJImBnyjyn0cjovPsf6FNLmyGY8Vw9DoXZCMlfMkMwHRWg== 52 | dependencies: 53 | "@types/estree" "*" 54 | 55 | "@typescript-eslint/eslint-plugin@^5.2.0": 56 | version "5.11.0" 57 | resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.11.0.tgz" 58 | integrity sha512-HJh33bgzXe6jGRocOj4FmefD7hRY4itgjzOrSs3JPrTNXsX7j5+nQPciAUj/1nZtwo2kAc3C75jZO+T23gzSGw== 59 | dependencies: 60 | "@typescript-eslint/scope-manager" "5.11.0" 61 | "@typescript-eslint/type-utils" "5.11.0" 62 | "@typescript-eslint/utils" "5.11.0" 63 | debug "^4.3.2" 64 | functional-red-black-tree "^1.0.1" 65 | ignore "^5.1.8" 66 | regexpp "^3.2.0" 67 | semver "^7.3.5" 68 | tsutils "^3.21.0" 69 | 70 | "@typescript-eslint/parser@^5.2.0": 71 | version "5.11.0" 72 | resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.11.0.tgz" 73 | integrity sha512-x0DCjetHZYBRovJdr3U0zG9OOdNXUaFLJ82ehr1AlkArljJuwEsgnud+Q7umlGDFLFrs8tU8ybQDFocp/eX8mQ== 74 | dependencies: 75 | "@typescript-eslint/scope-manager" "5.11.0" 76 | "@typescript-eslint/types" "5.11.0" 77 | "@typescript-eslint/typescript-estree" "5.11.0" 78 | debug "^4.3.2" 79 | 80 | "@typescript-eslint/scope-manager@5.11.0": 81 | version "5.11.0" 82 | resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.11.0.tgz" 83 | integrity sha512-z+K4LlahDFVMww20t/0zcA7gq/NgOawaLuxgqGRVKS0PiZlCTIUtX0EJbC0BK1JtR4CelmkPK67zuCgpdlF4EA== 84 | dependencies: 85 | "@typescript-eslint/types" "5.11.0" 86 | "@typescript-eslint/visitor-keys" "5.11.0" 87 | 88 | "@typescript-eslint/type-utils@5.11.0": 89 | version "5.11.0" 90 | resolved "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.11.0.tgz" 91 | integrity sha512-wDqdsYO6ofLaD4DsGZ0jGwxp4HrzD2YKulpEZXmgN3xo4BHJwf7kq49JTRpV0Gx6bxkSUmc9s0EIK1xPbFFpIA== 92 | dependencies: 93 | "@typescript-eslint/utils" "5.11.0" 94 | debug "^4.3.2" 95 | tsutils "^3.21.0" 96 | 97 | "@typescript-eslint/types@5.11.0": 98 | version "5.11.0" 99 | resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.11.0.tgz" 100 | integrity sha512-cxgBFGSRCoBEhvSVLkKw39+kMzUKHlJGVwwMbPcTZX3qEhuXhrjwaZXWMxVfxDgyMm+b5Q5b29Llo2yow8Y7xQ== 101 | 102 | "@typescript-eslint/typescript-estree@5.11.0": 103 | version "5.11.0" 104 | resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.11.0.tgz" 105 | integrity sha512-yVH9hKIv3ZN3lw8m/Jy5I4oXO4ZBMqijcXCdA4mY8ull6TPTAoQnKKrcZ0HDXg7Bsl0Unwwx7jcXMuNZc0m4lg== 106 | dependencies: 107 | "@typescript-eslint/types" "5.11.0" 108 | "@typescript-eslint/visitor-keys" "5.11.0" 109 | debug "^4.3.2" 110 | globby "^11.0.4" 111 | is-glob "^4.0.3" 112 | semver "^7.3.5" 113 | tsutils "^3.21.0" 114 | 115 | "@typescript-eslint/utils@5.11.0": 116 | version "5.11.0" 117 | resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.11.0.tgz" 118 | integrity sha512-g2I480tFE1iYRDyMhxPAtLQ9HAn0jjBtipgTCZmd9I9s11OV8CTsG+YfFciuNDcHqm4csbAgC2aVZCHzLxMSUw== 119 | dependencies: 120 | "@types/json-schema" "^7.0.9" 121 | "@typescript-eslint/scope-manager" "5.11.0" 122 | "@typescript-eslint/types" "5.11.0" 123 | "@typescript-eslint/typescript-estree" "5.11.0" 124 | eslint-scope "^5.1.1" 125 | eslint-utils "^3.0.0" 126 | 127 | "@typescript-eslint/visitor-keys@5.11.0": 128 | version "5.11.0" 129 | resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.11.0.tgz" 130 | integrity sha512-E8w/vJReMGuloGxJDkpPlGwhxocxOpSVgSvjiLO5IxZPmxZF30weOeJYyPSEACwM+X4NziYS9q+WkN/2DHYQwA== 131 | dependencies: 132 | "@typescript-eslint/types" "5.11.0" 133 | eslint-visitor-keys "^3.0.0" 134 | 135 | array-union@^2.1.0: 136 | version "2.1.0" 137 | resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" 138 | integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== 139 | 140 | braces@^3.0.1: 141 | version "3.0.2" 142 | resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" 143 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== 144 | dependencies: 145 | fill-range "^7.0.1" 146 | 147 | builtin-modules@^3.2.0: 148 | version "3.2.0" 149 | resolved "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz" 150 | integrity sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA== 151 | 152 | debug@^4.3.2: 153 | version "4.3.3" 154 | resolved "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz" 155 | integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q== 156 | dependencies: 157 | ms "2.1.2" 158 | 159 | dir-glob@^3.0.1: 160 | version "3.0.1" 161 | resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" 162 | integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== 163 | dependencies: 164 | path-type "^4.0.0" 165 | 166 | esbuild-android-arm64@0.13.12: 167 | version "0.13.12" 168 | resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.13.12.tgz#e1f199dc05405cdc6670c00fb6c793822bf8ae4c" 169 | integrity sha512-TSVZVrb4EIXz6KaYjXfTzPyyRpXV5zgYIADXtQsIenjZ78myvDGaPi11o4ZSaHIwFHsuwkB6ne5SZRBwAQ7maw== 170 | 171 | esbuild-darwin-64@0.13.12: 172 | version "0.13.12" 173 | resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.13.12.tgz#f5c59e622955c01f050e5a7ac9c1d41db714b94d" 174 | integrity sha512-c51C+N+UHySoV2lgfWSwwmlnLnL0JWj/LzuZt9Ltk9ub1s2Y8cr6SQV5W3mqVH1egUceew6KZ8GyI4nwu+fhsw== 175 | 176 | esbuild-darwin-arm64@0.13.12: 177 | version "0.13.12" 178 | resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.13.12.tgz#8abae74c2956a8aa568fc52c78829338c4a4b988" 179 | integrity sha512-JvAMtshP45Hd8A8wOzjkY1xAnTKTYuP/QUaKp5eUQGX+76GIie3fCdUUr2ZEKdvpSImNqxiZSIMziEiGB5oUmQ== 180 | 181 | esbuild-freebsd-64@0.13.12: 182 | version "0.13.12" 183 | resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.13.12.tgz#6ad2ab8c0364ee7dd2d6e324d876a8e60ae75d12" 184 | integrity sha512-r6On/Skv9f0ZjTu6PW5o7pdXr8aOgtFOEURJZYf1XAJs0IQ+gW+o1DzXjVkIoT+n1cm3N/t1KRJfX71MPg/ZUA== 185 | 186 | esbuild-freebsd-arm64@0.13.12: 187 | version "0.13.12" 188 | resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.13.12.tgz#6f38155f4c300ac4c8adde1fde3cc6a4440a8294" 189 | integrity sha512-F6LmI2Q1gii073kmBE3NOTt/6zLL5zvZsxNLF8PMAwdHc+iBhD1vzfI8uQZMJA1IgXa3ocr3L3DJH9fLGXy6Yw== 190 | 191 | esbuild-linux-32@0.13.12: 192 | version "0.13.12" 193 | resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.13.12.tgz#b1d15e330188a8c21de75c3f0058628a3eefade7" 194 | integrity sha512-U1UZwG3UIwF7/V4tCVAo/nkBV9ag5KJiJTt+gaCmLVWH3bPLX7y+fNlhIWZy8raTMnXhMKfaTvWZ9TtmXzvkuQ== 195 | 196 | esbuild-linux-64@0.13.12: 197 | version "0.13.12" 198 | resolved "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.13.12.tgz" 199 | integrity sha512-YpXSwtu2NxN3N4ifJxEdsgd6Q5d8LYqskrAwjmoCT6yQnEHJSF5uWcxv783HWN7lnGpJi9KUtDvYsnMdyGw71Q== 200 | 201 | esbuild-linux-arm64@0.13.12: 202 | version "0.13.12" 203 | resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.13.12.tgz#ba582298457cc5c9ac823a275de117620c06537f" 204 | integrity sha512-sgDNb8kb3BVodtAlcFGgwk+43KFCYjnFOaOfJibXnnIojNWuJHpL6aQJ4mumzNWw8Rt1xEtDQyuGK9f+Y24jGA== 205 | 206 | esbuild-linux-arm@0.13.12: 207 | version "0.13.12" 208 | resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.13.12.tgz#6bc81c957bff22725688cc6359c29a25765be09b" 209 | integrity sha512-SyiT/JKxU6J+DY2qUiSLZJqCAftIt3uoGejZ0HDnUM2MGJqEGSGh7p1ecVL2gna3PxS4P+j6WAehCwgkBPXNIw== 210 | 211 | esbuild-linux-mips64le@0.13.12: 212 | version "0.13.12" 213 | resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.13.12.tgz#ef3c4aba3e585d847cbade5945a8b4a5c62c7ce2" 214 | integrity sha512-qQJHlZBG+QwVIA8AbTEtbvF084QgDi4DaUsUnA+EolY1bxrG+UyOuGflM2ZritGhfS/k7THFjJbjH2wIeoKA2g== 215 | 216 | esbuild-linux-ppc64le@0.13.12: 217 | version "0.13.12" 218 | resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.13.12.tgz#a21fb64e80c38bef06122e48283990fc6db578e1" 219 | integrity sha512-2dSnm1ldL7Lppwlo04CGQUpwNn5hGqXI38OzaoPOkRsBRWFBozyGxTFSee/zHFS+Pdh3b28JJbRK3owrrRgWNw== 220 | 221 | esbuild-netbsd-64@0.13.12: 222 | version "0.13.12" 223 | resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.13.12.tgz#1ea7fc8cfce88a20a4047b867ef184049a6641ae" 224 | integrity sha512-D4raxr02dcRiQNbxOLzpqBzcJNFAdsDNxjUbKkDMZBkL54Z0vZh4LRndycdZAMcIdizC/l/Yp/ZsBdAFxc5nbA== 225 | 226 | esbuild-openbsd-64@0.13.12: 227 | version "0.13.12" 228 | resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.13.12.tgz#adde32f2f1b05dc4bd4fc544d6ea5a4379f9ca4d" 229 | integrity sha512-KuLCmYMb2kh05QuPJ+va60bKIH5wHL8ypDkmpy47lzwmdxNsuySeCMHuTv5o2Af1RUn5KLO5ZxaZeq4GEY7DaQ== 230 | 231 | esbuild-sunos-64@0.13.12: 232 | version "0.13.12" 233 | resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.13.12.tgz#a7ecaf52b7364fbee76dc8aa707fa3e1cff3342c" 234 | integrity sha512-jBsF+e0woK3miKI8ufGWKG3o3rY9DpHvCVRn5eburMIIE+2c+y3IZ1srsthKyKI6kkXLvV4Cf/E7w56kLipMXw== 235 | 236 | esbuild-windows-32@0.13.12: 237 | version "0.13.12" 238 | resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.13.12.tgz#a8756033dc905c4b7bea19be69f7ee68809f8770" 239 | integrity sha512-L9m4lLFQrFeR7F+eLZXG82SbXZfUhyfu6CexZEil6vm+lc7GDCE0Q8DiNutkpzjv1+RAbIGVva9muItQ7HVTkQ== 240 | 241 | esbuild-windows-64@0.13.12: 242 | version "0.13.12" 243 | resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.13.12.tgz#ae694aa66ca078acb8509b2da31197ed1f40f798" 244 | integrity sha512-k4tX4uJlSbSkfs78W5d9+I9gpd+7N95W7H2bgOMFPsYREVJs31+Q2gLLHlsnlY95zBoPQMIzHooUIsixQIBjaQ== 245 | 246 | esbuild-windows-arm64@0.13.12: 247 | version "0.13.12" 248 | resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.13.12.tgz#782c5a8bd6d717ea55aaafe648f9926ca36a4a88" 249 | integrity sha512-2tTv/BpYRIvuwHpp2M960nG7uvL+d78LFW/ikPItO+2GfK51CswIKSetSpDii+cjz8e9iSPgs+BU4o8nWICBwQ== 250 | 251 | esbuild@0.13.12: 252 | version "0.13.12" 253 | resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.13.12.tgz" 254 | integrity sha512-vTKKUt+yoz61U/BbrnmlG9XIjwpdIxmHB8DlPR0AAW6OdS+nBQBci6LUHU2q9WbBobMEIQxxDpKbkmOGYvxsow== 255 | optionalDependencies: 256 | esbuild-android-arm64 "0.13.12" 257 | esbuild-darwin-64 "0.13.12" 258 | esbuild-darwin-arm64 "0.13.12" 259 | esbuild-freebsd-64 "0.13.12" 260 | esbuild-freebsd-arm64 "0.13.12" 261 | esbuild-linux-32 "0.13.12" 262 | esbuild-linux-64 "0.13.12" 263 | esbuild-linux-arm "0.13.12" 264 | esbuild-linux-arm64 "0.13.12" 265 | esbuild-linux-mips64le "0.13.12" 266 | esbuild-linux-ppc64le "0.13.12" 267 | esbuild-netbsd-64 "0.13.12" 268 | esbuild-openbsd-64 "0.13.12" 269 | esbuild-sunos-64 "0.13.12" 270 | esbuild-windows-32 "0.13.12" 271 | esbuild-windows-64 "0.13.12" 272 | esbuild-windows-arm64 "0.13.12" 273 | 274 | eslint-scope@^5.1.1: 275 | version "5.1.1" 276 | resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz" 277 | integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== 278 | dependencies: 279 | esrecurse "^4.3.0" 280 | estraverse "^4.1.1" 281 | 282 | eslint-utils@^3.0.0: 283 | version "3.0.0" 284 | resolved "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz" 285 | integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== 286 | dependencies: 287 | eslint-visitor-keys "^2.0.0" 288 | 289 | eslint-visitor-keys@^2.0.0: 290 | version "2.1.0" 291 | resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz" 292 | integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== 293 | 294 | eslint-visitor-keys@^3.0.0: 295 | version "3.3.0" 296 | resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz" 297 | integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== 298 | 299 | esrecurse@^4.3.0: 300 | version "4.3.0" 301 | resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" 302 | integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== 303 | dependencies: 304 | estraverse "^5.2.0" 305 | 306 | estraverse@^4.1.1: 307 | version "4.3.0" 308 | resolved "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz" 309 | integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== 310 | 311 | estraverse@^5.2.0: 312 | version "5.3.0" 313 | resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz" 314 | integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== 315 | 316 | fast-glob@^3.2.9: 317 | version "3.2.11" 318 | resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz" 319 | integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew== 320 | dependencies: 321 | "@nodelib/fs.stat" "^2.0.2" 322 | "@nodelib/fs.walk" "^1.2.3" 323 | glob-parent "^5.1.2" 324 | merge2 "^1.3.0" 325 | micromatch "^4.0.4" 326 | 327 | fastq@^1.6.0: 328 | version "1.13.0" 329 | resolved "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz" 330 | integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== 331 | dependencies: 332 | reusify "^1.0.4" 333 | 334 | fill-range@^7.0.1: 335 | version "7.0.1" 336 | resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" 337 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== 338 | dependencies: 339 | to-regex-range "^5.0.1" 340 | 341 | functional-red-black-tree@^1.0.1: 342 | version "1.0.1" 343 | resolved "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz" 344 | integrity "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==" 345 | 346 | glob-parent@^5.1.2: 347 | version "5.1.2" 348 | resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" 349 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== 350 | dependencies: 351 | is-glob "^4.0.1" 352 | 353 | globby@^11.0.4: 354 | version "11.1.0" 355 | resolved "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz" 356 | integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== 357 | dependencies: 358 | array-union "^2.1.0" 359 | dir-glob "^3.0.1" 360 | fast-glob "^3.2.9" 361 | ignore "^5.2.0" 362 | merge2 "^1.4.1" 363 | slash "^3.0.0" 364 | 365 | ignore@^5.1.8, ignore@^5.2.0: 366 | version "5.2.0" 367 | resolved "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz" 368 | integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== 369 | 370 | is-extglob@^2.1.1: 371 | version "2.1.1" 372 | resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" 373 | integrity "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" 374 | 375 | is-glob@^4.0.1, is-glob@^4.0.3: 376 | version "4.0.3" 377 | resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" 378 | integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== 379 | dependencies: 380 | is-extglob "^2.1.1" 381 | 382 | is-number@^7.0.0: 383 | version "7.0.0" 384 | resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" 385 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 386 | 387 | lru-cache@^6.0.0: 388 | version "6.0.0" 389 | resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" 390 | integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== 391 | dependencies: 392 | yallist "^4.0.0" 393 | 394 | merge2@^1.3.0, merge2@^1.4.1: 395 | version "1.4.1" 396 | resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" 397 | integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== 398 | 399 | micromatch@^4.0.4: 400 | version "4.0.4" 401 | resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz" 402 | integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg== 403 | dependencies: 404 | braces "^3.0.1" 405 | picomatch "^2.2.3" 406 | 407 | moment@2.29.1: 408 | version "2.29.1" 409 | resolved "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz" 410 | integrity sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ== 411 | 412 | ms@2.1.2: 413 | version "2.1.2" 414 | resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" 415 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 416 | 417 | obsidian@^0.12.17: 418 | version "0.12.17" 419 | resolved "https://registry.npmjs.org/obsidian/-/obsidian-0.12.17.tgz" 420 | integrity sha512-YvCAlRym9D8zNPXt6Ez8QubSTVGoChx6lb58zqI13Dcrz3l1lgUO+pcOGDiD5Qa67nzDZLXo3aV2rqkCCpTvGQ== 421 | dependencies: 422 | "@types/codemirror" "0.0.108" 423 | moment "2.29.1" 424 | 425 | path-type@^4.0.0: 426 | version "4.0.0" 427 | resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" 428 | integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== 429 | 430 | picomatch@^2.2.3: 431 | version "2.3.1" 432 | resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" 433 | integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== 434 | 435 | prettier@^2.7.1: 436 | version "2.7.1" 437 | resolved "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz" 438 | integrity sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g== 439 | 440 | queue-microtask@^1.2.2: 441 | version "1.2.3" 442 | resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" 443 | integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== 444 | 445 | regexpp@^3.2.0: 446 | version "3.2.0" 447 | resolved "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz" 448 | integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== 449 | 450 | reusify@^1.0.4: 451 | version "1.0.4" 452 | resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" 453 | integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== 454 | 455 | run-parallel@^1.1.9: 456 | version "1.2.0" 457 | resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" 458 | integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== 459 | dependencies: 460 | queue-microtask "^1.2.2" 461 | 462 | semver@^7.3.5: 463 | version "7.3.5" 464 | resolved "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz" 465 | integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== 466 | dependencies: 467 | lru-cache "^6.0.0" 468 | 469 | slash@^3.0.0: 470 | version "3.0.0" 471 | resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" 472 | integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== 473 | 474 | to-regex-range@^5.0.1: 475 | version "5.0.1" 476 | resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" 477 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 478 | dependencies: 479 | is-number "^7.0.0" 480 | 481 | tslib@2.3.1: 482 | version "2.3.1" 483 | resolved "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz" 484 | integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== 485 | 486 | tslib@^1.8.1: 487 | version "1.14.1" 488 | resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" 489 | integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== 490 | 491 | tsutils@^3.21.0: 492 | version "3.21.0" 493 | resolved "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz" 494 | integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== 495 | dependencies: 496 | tslib "^1.8.1" 497 | 498 | typescript@4.4.4: 499 | version "4.4.4" 500 | resolved "https://registry.npmjs.org/typescript/-/typescript-4.4.4.tgz" 501 | integrity sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA== 502 | 503 | yallist@^4.0.0: 504 | version "4.0.0" 505 | resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" 506 | integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== 507 | --------------------------------------------------------------------------------