├── .editorconfig ├── .eslintignore ├── .eslintrc ├── .github ├── ISSUE_TEMPLATE │ ├── bug_report.yml │ ├── config.yml │ └── feature_request.yml └── workflows │ └── release.yml ├── .gitignore ├── .npmrc ├── CanvasBlockReference.gif ├── README.md ├── canvasReferencePlugin.ts ├── esbuild.config.mjs ├── manifest.json ├── package.json ├── pnpm-lock.yaml ├── styles.css ├── tsconfig.json ├── version-bump.mjs └── versions.json /.editorconfig: -------------------------------------------------------------------------------- 1 | # top-most EditorConfig file 2 | root = true 3 | 4 | [*] 5 | charset = utf-8 6 | end_of_line = lf 7 | insert_final_newline = true 8 | indent_style = tab 9 | indent_size = 4 10 | tab_width = 4 11 | -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | npm node_modules 2 | build -------------------------------------------------------------------------------- /.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "root": true, 3 | "parser": "@typescript-eslint/parser", 4 | "env": { "node": true }, 5 | "plugins": [ 6 | "@typescript-eslint" 7 | ], 8 | "extends": [ 9 | "eslint:recommended", 10 | "plugin:@typescript-eslint/eslint-recommended", 11 | "plugin:@typescript-eslint/recommended" 12 | ], 13 | "parserOptions": { 14 | "sourceType": "module" 15 | }, 16 | "rules": { 17 | "no-unused-vars": "off", 18 | "@typescript-eslint/no-unused-vars": ["error", { "args": "none" }], 19 | "@typescript-eslint/ban-ts-comment": "off", 20 | "no-prototype-builtins": "off", 21 | "@typescript-eslint/no-empty-function": "off" 22 | } 23 | } -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.yml: -------------------------------------------------------------------------------- 1 | name: Bug Report 2 | description: File a bug report 3 | title: "[Bug]: " 4 | labels: [ "bug" ] 5 | body: 6 | - type: textarea 7 | id: bug-description 8 | attributes: 9 | label: Bug Description 10 | description: A clear and concise description of the bug. 11 | validations: 12 | required: true 13 | - type: textarea 14 | id: screenshot 15 | attributes: 16 | label: Relevant Screenshot 17 | description: If applicable, add screenshots or a screen recording to help explain your problem. 18 | - type: textarea 19 | id: reproduction-steps 20 | attributes: 21 | label: To Reproduce 22 | description: Steps to reproduce the problem 23 | placeholder: | 24 | For example: 25 | 1. Go to '...' 26 | 2. Click on '...' 27 | 3. Scroll down to '...' 28 | - type: input 29 | id: obsi-version 30 | attributes: 31 | label: Obsidian Version 32 | description: You can find the version in the *About* Tab of the settings. 33 | placeholder: 0.13.19 34 | validations: 35 | required: true 36 | - type: checkboxes 37 | id: checklist 38 | attributes: 39 | label: Checklist 40 | options: 41 | - label: I updated to the latest version of the plugin. 42 | required: true 43 | 44 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | blank_issues_enabled: false 2 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.yml: -------------------------------------------------------------------------------- 1 | name: Feature request 2 | description: Suggest an idea 3 | title: "Feature Request: " 4 | labels: [ "feature request" ] 5 | body: 6 | - type: textarea 7 | id: feature-requested 8 | attributes: 9 | label: Feature Requested 10 | description: A clear and concise description of the feature. 11 | validations: 12 | required: true 13 | - type: textarea 14 | id: screenshot 15 | attributes: 16 | label: Relevant Screenshot 17 | description: If applicable, add screenshots or a screen recording to help explain the request. 18 | - type: checkboxes 19 | id: checklist 20 | attributes: 21 | label: Checklist 22 | options: 23 | - label: The feature would be useful to more users than just me. 24 | required: true 25 | 26 | -------------------------------------------------------------------------------- /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | name: Release Obsidian plugin 2 | 3 | on: 4 | release: 5 | types: [ created ] 6 | 7 | env: 8 | PLUGIN_NAME: obsidian-canvas-presentation 9 | 10 | jobs: 11 | build: 12 | runs-on: ubuntu-latest 13 | steps: 14 | - uses: actions/checkout@v3 15 | - name: Use Node.js 16 | uses: actions/setup-node@v3 17 | with: 18 | node-version: 16 19 | - name: Build 20 | id: build 21 | run: | 22 | npm install 23 | npm run build 24 | mkdir ${{ env.PLUGIN_NAME }} 25 | cp main.js manifest.json styles.css ${{ env.PLUGIN_NAME }} 26 | zip -r ${{ env.PLUGIN_NAME }}.zip ${{ env.PLUGIN_NAME }} 27 | ls 28 | echo "::set-output name=tag_name::$(git tag --sort version:refname | tail -n 1)" 29 | - name: Upload zip file 30 | id: upload-zip 31 | uses: actions/upload-release-asset@v1 32 | env: 33 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 34 | with: 35 | upload_url: ${{ github.event.release.upload_url }} 36 | asset_path: ./${{ env.PLUGIN_NAME }}.zip 37 | asset_name: ${{ env.PLUGIN_NAME }}-${{ steps.build.outputs.tag_name }}.zip 38 | asset_content_type: application/zip 39 | 40 | - name: Upload main.js 41 | id: upload-main 42 | uses: actions/upload-release-asset@v1 43 | env: 44 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 45 | with: 46 | upload_url: ${{ github.event.release.upload_url }} 47 | asset_path: ./main.js 48 | asset_name: main.js 49 | asset_content_type: text/javascript 50 | 51 | - name: Upload manifest.json 52 | id: upload-manifest 53 | uses: actions/upload-release-asset@v1 54 | env: 55 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 56 | with: 57 | upload_url: ${{ github.event.release.upload_url }} 58 | asset_path: ./manifest.json 59 | asset_name: manifest.json 60 | asset_content_type: application/json 61 | 62 | - name: Upload styles.css 63 | id: upload-css 64 | uses: actions/upload-release-asset@v1 65 | env: 66 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 67 | with: 68 | upload_url: ${{ github.event.release.upload_url }} 69 | asset_path: ./styles.css 70 | asset_name: styles.css 71 | asset_content_type: text/css 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 | -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | tag-version-prefix="" -------------------------------------------------------------------------------- /CanvasBlockReference.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Quorafind/Obsidian-Canvas-Block-Reference/a97f07044b2c28ee94a0a5aa1d8a8dab58f0391b/CanvasBlockReference.gif -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Obsidian Canvas Block Reference 2 | 3 | > This plugin would be deprecated if Obsidian Devs support block reference in canvas. 4 | > Would support migration when the feature is officially supported by Obsidian. 5 | 6 | Use it like what you do in markdown. 7 | 8 | ```markdown 9 | [[abcd.canvas#^block-ref]] 10 | ``` 11 | 12 | ![](https://raw.githubusercontent.com/Quorafind/obsidian-canvas-block-reference/master/CanvasBlockReference.gif) 13 | 14 | # How to Install 15 | 16 | ## From Plugin Market in Obsidian [Not Yet] 17 | 18 | 💜: Directly install from Obsidian Market. 19 | 20 | ## From BRAT 21 | 22 | 🚗: Add `Quorafind/obsidian-canvas-block-reference` to BRAT. 23 | 24 | ## Download Manually 25 | 26 | 🚚: Download the latest release. Extract and put the three files (main.js, manifest.json, styles.css) to 27 | folder `{{obsidian_vault}}/.obsidian/plugins/obsidian-canvas-block-reference`. 28 | 29 | # Say Thank You 30 | 31 | If you are enjoying this plugin then please support my work and enthusiasm by buying me a coffee 32 | on [https://www.buymeacoffee.com/boninall](https://www.buymeacoffee.com/boninall). 33 | . 34 | 35 | 36 | -------------------------------------------------------------------------------- /canvasReferencePlugin.ts: -------------------------------------------------------------------------------- 1 | import { EditorSuggestContext, ItemView, Plugin, prepareFuzzySearch, TFile, ViewState, WorkspaceLeaf } from 'obsidian'; 2 | import { around } from "monkey-around"; 3 | 4 | export default class CanvasReferencePlugin extends Plugin { 5 | 6 | async onload() { 7 | this.patchWorkspaceLeaf(); 8 | this.patchEditorSuggest(); 9 | 10 | this.registerCommands(); 11 | } 12 | 13 | onunload() { 14 | 15 | } 16 | 17 | registerCommands() { 18 | this.addCommand({ 19 | id: 'copy-canvas-card-reference', 20 | name: 'Copy Canvas Card Reference', 21 | checkCallback: (checking: boolean) => { 22 | // Conditions to check 23 | const canvasView = this.app.workspace.getActiveViewOfType(ItemView); 24 | if (canvasView?.getViewType() === "canvas") { 25 | // If checking is true, we're simply "checking" if the command can be run. 26 | // If checking is false, then we want to actually perform the operation. 27 | if (!checking) { 28 | // @ts-ignore 29 | const canvas = canvasView.canvas; 30 | 31 | // Get the selected node 32 | const selection = canvas.selection; 33 | if(selection.size !== 1) return; 34 | 35 | // Get the first node 36 | const node = selection.values().next().value; 37 | // @ts-ignore 38 | const text = "[[" + canvasView.file?.path + "#^" + node.id + "]]"; 39 | 40 | navigator.clipboard.writeText(text); 41 | } 42 | 43 | // This command will only show up in Command Palette when the check function returns true 44 | return true; 45 | } 46 | } 47 | }); 48 | } 49 | 50 | patchWorkspaceLeaf() { 51 | this.register( 52 | around(WorkspaceLeaf.prototype, { 53 | openFile: (old) => 54 | async function (file: TFile, state?: ViewState) { 55 | await old.call(this, file, state); 56 | // Check if file is a canvas file 57 | // @ts-ignore 58 | if(file.extension === "canvas" && state?.eState?.subpath) { 59 | const canvas = this.view.canvas; 60 | if(!canvas) return; 61 | // @ts-ignore 62 | const id = state.eState.subpath.replace("#\^", ""); 63 | const node = canvas.nodes.get(id); 64 | if(!node) return; 65 | canvas.selectOnly(node); 66 | canvas.zoomToSelection(); 67 | } 68 | } 69 | 70 | }), 71 | ); 72 | } 73 | 74 | patchEditorSuggest() { 75 | const getNodesFromCanvas = async (canvasFile: TFile) => { 76 | 77 | 78 | // Convert json string to object 79 | const canvasFileContent = await app.vault.cachedRead(canvasFile); 80 | const canvasFileData = JSON.parse(canvasFileContent); 81 | 82 | return canvasFileData.nodes; 83 | 84 | } 85 | 86 | 87 | // @ts-ignore 88 | const suggests = app.workspace.editorSuggest.suggests; 89 | // @ts-ignore 90 | const fileSuggest = suggests.find((suggest) => suggest.mode === 'file'); 91 | 92 | if(!fileSuggest) return; 93 | 94 | const fileSuggestConstructor = fileSuggest.constructor; 95 | 96 | const uninstaller = around(fileSuggestConstructor.prototype, { 97 | getSuggestions: (next: any) => 98 | async function (context: EditorSuggestContext) { 99 | const result = await next.call(this, context); 100 | 101 | if(this.mode === "file") return result; 102 | 103 | if(context.query.lastIndexOf(".canvas") !== -1 && (this.mode === "block" || this.mode === "heading")) { 104 | // Get current canvas path from query string 105 | const path = context.query.substring(0, context.query.lastIndexOf(".canvas") + 7); 106 | 107 | const canvasFile = app.metadataCache.getFirstLinkpathDest(path, context.file ? context.file.path : ""); 108 | 109 | if(!canvasFile) return result; 110 | 111 | // Get nodes from canvas file 112 | const nodes = await getNodesFromCanvas(canvasFile); 113 | 114 | if(!nodes) return result; 115 | const suggestions: any[] = []; 116 | 117 | const cM = /\u00A0/g; 118 | let inputStr = ""; 119 | if(this.mode === "heading") { 120 | inputStr = (context.query.replace(cM, " ")).normalize("NFC").split("#")[1]; 121 | }else if(this.mode === "block") { 122 | inputStr = (context.query.replace(cM, " ")).normalize("NFC").split("^")[1]; 123 | } 124 | const query = prepareFuzzySearch(inputStr); 125 | 126 | let textNodes: any[]; 127 | if(this.mode === "heading") textNodes = nodes.filter((node: any) => (node.label !== undefined)); 128 | else textNodes = nodes.filter((node: any) => (node.text !== undefined)); 129 | 130 | textNodes.forEach((node: any)=>{ 131 | const queryResult = query(node?.text ?? node?.label); 132 | 133 | if(queryResult !== null) { 134 | suggestions.push({ 135 | content: node.text ?? node.label, 136 | display: (node.text ?? node.label).replace(/\n/g, " "), 137 | path: path, 138 | type: "block", 139 | file: canvasFile, 140 | // @ts-ignore 141 | node: { 142 | id: node.id, 143 | type: "paragraph", 144 | position: undefined, 145 | children: [{ 146 | type: "text", 147 | value: node.text ?? node.label, 148 | position: undefined 149 | }] 150 | }, 151 | idMatch: queryResult.matches, 152 | matches: null, 153 | score: queryResult.score, 154 | }); 155 | } 156 | }); 157 | 158 | return suggestions.length > 0? suggestions : result; 159 | 160 | } 161 | // console.log(result); 162 | return result; 163 | }, 164 | }); 165 | this.register(uninstaller); 166 | } 167 | 168 | } 169 | -------------------------------------------------------------------------------- /esbuild.config.mjs: -------------------------------------------------------------------------------- 1 | import esbuild from "esbuild"; 2 | import process from "process"; 3 | import builtins from 'builtin-modules' 4 | 5 | const banner = 6 | `/* 7 | THIS IS A GENERATED/BUNDLED FILE BY ESBUILD 8 | if you want to view the source, please visit the github repository of this plugin 9 | */ 10 | `; 11 | 12 | const prod = (process.argv[2] === 'production'); 13 | 14 | esbuild.build({ 15 | banner: { 16 | js: banner, 17 | }, 18 | entryPoints: ['canvasReferencePlugin.ts'], 19 | bundle: true, 20 | external: [ 21 | 'obsidian', 22 | 'electron', 23 | '@codemirror/autocomplete', 24 | '@codemirror/collab', 25 | '@codemirror/commands', 26 | '@codemirror/language', 27 | '@codemirror/lint', 28 | '@codemirror/search', 29 | '@codemirror/state', 30 | '@codemirror/view', 31 | '@lezer/common', 32 | '@lezer/highlight', 33 | '@lezer/lr', 34 | ...builtins], 35 | format: 'cjs', 36 | watch: !prod, 37 | target: 'es2018', 38 | logLevel: "info", 39 | sourcemap: prod ? false : 'inline', 40 | treeShaking: true, 41 | outfile: 'main.js', 42 | }).catch(() => process.exit(1)); 43 | -------------------------------------------------------------------------------- /manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "canvas-block-reference", 3 | "name": "Canvas Block Reference", 4 | "version": "0.0.4", 5 | "minAppVersion": "1.1.0", 6 | "description": "A plugin for you to block refer card in canvas.", 7 | "author": "Boninall", 8 | "authorUrl": "https://github.com/Quorafind", 9 | "fundingUrl": { 10 | "Buy Me a Coffee": "https://www.buymeacoffee.com/boninall", 11 | "爱发电": "https://afdian.net/a/boninall", 12 | "支付宝": "https://cdn.jsdelivr.net/gh/Quorafind/.github@main/IMAGE/%E6%94%AF%E4%BB%98%E5%AE%9D%E4%BB%98%E6%AC%BE%E7%A0%81.jpg" 13 | }, 14 | "isDesktopOnly": false 15 | } -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "canvas-block-reference", 3 | "version": "0.0.4", 4 | "description": "A plugin for you to block refer card in canvas.", 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 && git add manifest.json versions.json", 10 | "release": "pnpm run version && git add . && git commit -m \"chore: bump version $package_version\" && git tag $package_version && git push && git push --tags" 11 | }, 12 | "keywords": [], 13 | "author": "Boninall", 14 | "license": "MIT", 15 | "devDependencies": { 16 | "@types/node": "^16.11.6", 17 | "@typescript-eslint/eslint-plugin": "5.29.0", 18 | "@typescript-eslint/parser": "5.29.0", 19 | "builtin-modules": "3.3.0", 20 | "esbuild": "0.14.47", 21 | "monkey-around": "^2.3.0", 22 | "obsidian": "latest", 23 | "tslib": "2.4.0", 24 | "typescript": "4.7.4" 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: 5.4 2 | 3 | specifiers: 4 | '@types/node': ^16.11.6 5 | '@typescript-eslint/eslint-plugin': 5.29.0 6 | '@typescript-eslint/parser': 5.29.0 7 | builtin-modules: 3.3.0 8 | esbuild: 0.14.47 9 | monkey-around: ^2.3.0 10 | obsidian: latest 11 | tslib: 2.4.0 12 | typescript: 4.7.4 13 | 14 | devDependencies: 15 | '@types/node': 16.18.11 16 | '@typescript-eslint/eslint-plugin': 5.29.0_treee22277sh3yq6pnqeflwlmi 17 | '@typescript-eslint/parser': 5.29.0_typescript@4.7.4 18 | builtin-modules: 3.3.0 19 | esbuild: 0.14.47 20 | monkey-around: 2.3.0 21 | obsidian: 1.1.1 22 | tslib: 2.4.0 23 | typescript: 4.7.4 24 | 25 | packages: 26 | 27 | /@nodelib/fs.scandir/2.1.5: 28 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 29 | engines: {node: '>= 8'} 30 | dependencies: 31 | '@nodelib/fs.stat': 2.0.5 32 | run-parallel: 1.2.0 33 | dev: true 34 | 35 | /@nodelib/fs.stat/2.0.5: 36 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 37 | engines: {node: '>= 8'} 38 | dev: true 39 | 40 | /@nodelib/fs.walk/1.2.8: 41 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 42 | engines: {node: '>= 8'} 43 | dependencies: 44 | '@nodelib/fs.scandir': 2.1.5 45 | fastq: 1.14.0 46 | dev: true 47 | 48 | /@types/codemirror/0.0.108: 49 | resolution: {integrity: sha512-3FGFcus0P7C2UOGCNUVENqObEb4SFk+S8Dnxq7K6aIsLVs/vDtlangl3PEO0ykaKXyK56swVF6Nho7VsA44uhw==} 50 | dependencies: 51 | '@types/tern': 0.23.4 52 | dev: true 53 | 54 | /@types/estree/1.0.0: 55 | resolution: {integrity: sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==} 56 | dev: true 57 | 58 | /@types/json-schema/7.0.11: 59 | resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==} 60 | dev: true 61 | 62 | /@types/node/16.18.11: 63 | resolution: {integrity: sha512-3oJbGBUWuS6ahSnEq1eN2XrCyf4YsWI8OyCvo7c64zQJNplk3mO84t53o8lfTk+2ji59g5ycfc6qQ3fdHliHuA==} 64 | dev: true 65 | 66 | /@types/tern/0.23.4: 67 | resolution: {integrity: sha512-JAUw1iXGO1qaWwEOzxTKJZ/5JxVeON9kvGZ/osgZaJImBnyjyn0cjovPsf6FNLmyGY8Vw9DoXZCMlfMkMwHRWg==} 68 | dependencies: 69 | '@types/estree': 1.0.0 70 | dev: true 71 | 72 | /@typescript-eslint/eslint-plugin/5.29.0_treee22277sh3yq6pnqeflwlmi: 73 | resolution: {integrity: sha512-kgTsISt9pM53yRFQmLZ4npj99yGl3x3Pl7z4eA66OuTzAGC4bQB5H5fuLwPnqTKU3yyrrg4MIhjF17UYnL4c0w==} 74 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 75 | peerDependencies: 76 | '@typescript-eslint/parser': ^5.0.0 77 | eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 78 | typescript: '*' 79 | peerDependenciesMeta: 80 | typescript: 81 | optional: true 82 | dependencies: 83 | '@typescript-eslint/parser': 5.29.0_typescript@4.7.4 84 | '@typescript-eslint/scope-manager': 5.29.0 85 | '@typescript-eslint/type-utils': 5.29.0_typescript@4.7.4 86 | '@typescript-eslint/utils': 5.29.0_typescript@4.7.4 87 | debug: 4.3.4 88 | functional-red-black-tree: 1.0.1 89 | ignore: 5.2.4 90 | regexpp: 3.2.0 91 | semver: 7.3.8 92 | tsutils: 3.21.0_typescript@4.7.4 93 | typescript: 4.7.4 94 | transitivePeerDependencies: 95 | - supports-color 96 | dev: true 97 | 98 | /@typescript-eslint/parser/5.29.0_typescript@4.7.4: 99 | resolution: {integrity: sha512-ruKWTv+x0OOxbzIw9nW5oWlUopvP/IQDjB5ZqmTglLIoDTctLlAJpAQFpNPJP/ZI7hTT9sARBosEfaKbcFuECw==} 100 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 101 | peerDependencies: 102 | eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 103 | typescript: '*' 104 | peerDependenciesMeta: 105 | typescript: 106 | optional: true 107 | dependencies: 108 | '@typescript-eslint/scope-manager': 5.29.0 109 | '@typescript-eslint/types': 5.29.0 110 | '@typescript-eslint/typescript-estree': 5.29.0_typescript@4.7.4 111 | debug: 4.3.4 112 | typescript: 4.7.4 113 | transitivePeerDependencies: 114 | - supports-color 115 | dev: true 116 | 117 | /@typescript-eslint/scope-manager/5.29.0: 118 | resolution: {integrity: sha512-etbXUT0FygFi2ihcxDZjz21LtC+Eps9V2xVx09zFoN44RRHPrkMflidGMI+2dUs821zR1tDS6Oc9IXxIjOUZwA==} 119 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 120 | dependencies: 121 | '@typescript-eslint/types': 5.29.0 122 | '@typescript-eslint/visitor-keys': 5.29.0 123 | dev: true 124 | 125 | /@typescript-eslint/type-utils/5.29.0_typescript@4.7.4: 126 | resolution: {integrity: sha512-JK6bAaaiJozbox3K220VRfCzLa9n0ib/J+FHIwnaV3Enw/TO267qe0pM1b1QrrEuy6xun374XEAsRlA86JJnyg==} 127 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 128 | peerDependencies: 129 | eslint: '*' 130 | typescript: '*' 131 | peerDependenciesMeta: 132 | typescript: 133 | optional: true 134 | dependencies: 135 | '@typescript-eslint/utils': 5.29.0_typescript@4.7.4 136 | debug: 4.3.4 137 | tsutils: 3.21.0_typescript@4.7.4 138 | typescript: 4.7.4 139 | transitivePeerDependencies: 140 | - supports-color 141 | dev: true 142 | 143 | /@typescript-eslint/types/5.29.0: 144 | resolution: {integrity: sha512-X99VbqvAXOMdVyfFmksMy3u8p8yoRGITgU1joBJPzeYa0rhdf5ok9S56/itRoUSh99fiDoMtarSIJXo7H/SnOg==} 145 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 146 | dev: true 147 | 148 | /@typescript-eslint/typescript-estree/5.29.0_typescript@4.7.4: 149 | resolution: {integrity: sha512-mQvSUJ/JjGBdvo+1LwC+GY2XmSYjK1nAaVw2emp/E61wEVYEyibRHCqm1I1vEKbXCpUKuW4G7u9ZCaZhJbLoNQ==} 150 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 151 | peerDependencies: 152 | typescript: '*' 153 | peerDependenciesMeta: 154 | typescript: 155 | optional: true 156 | dependencies: 157 | '@typescript-eslint/types': 5.29.0 158 | '@typescript-eslint/visitor-keys': 5.29.0 159 | debug: 4.3.4 160 | globby: 11.1.0 161 | is-glob: 4.0.3 162 | semver: 7.3.8 163 | tsutils: 3.21.0_typescript@4.7.4 164 | typescript: 4.7.4 165 | transitivePeerDependencies: 166 | - supports-color 167 | dev: true 168 | 169 | /@typescript-eslint/utils/5.29.0_typescript@4.7.4: 170 | resolution: {integrity: sha512-3Eos6uP1nyLOBayc/VUdKZikV90HahXE5Dx9L5YlSd/7ylQPXhLk1BYb29SDgnBnTp+jmSZUU0QxUiyHgW4p7A==} 171 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 172 | peerDependencies: 173 | eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 174 | dependencies: 175 | '@types/json-schema': 7.0.11 176 | '@typescript-eslint/scope-manager': 5.29.0 177 | '@typescript-eslint/types': 5.29.0 178 | '@typescript-eslint/typescript-estree': 5.29.0_typescript@4.7.4 179 | eslint-scope: 5.1.1 180 | eslint-utils: 3.0.0 181 | transitivePeerDependencies: 182 | - supports-color 183 | - typescript 184 | dev: true 185 | 186 | /@typescript-eslint/visitor-keys/5.29.0: 187 | resolution: {integrity: sha512-Hpb/mCWsjILvikMQoZIE3voc9wtQcS0A9FUw3h8bhr9UxBdtI/tw1ZDZUOXHXLOVMedKCH5NxyzATwnU78bWCQ==} 188 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 189 | dependencies: 190 | '@typescript-eslint/types': 5.29.0 191 | eslint-visitor-keys: 3.3.0 192 | dev: true 193 | 194 | /array-union/2.1.0: 195 | resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} 196 | engines: {node: '>=8'} 197 | dev: true 198 | 199 | /braces/3.0.2: 200 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} 201 | engines: {node: '>=8'} 202 | dependencies: 203 | fill-range: 7.0.1 204 | dev: true 205 | 206 | /builtin-modules/3.3.0: 207 | resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} 208 | engines: {node: '>=6'} 209 | dev: true 210 | 211 | /debug/4.3.4: 212 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} 213 | engines: {node: '>=6.0'} 214 | peerDependencies: 215 | supports-color: '*' 216 | peerDependenciesMeta: 217 | supports-color: 218 | optional: true 219 | dependencies: 220 | ms: 2.1.2 221 | dev: true 222 | 223 | /dir-glob/3.0.1: 224 | resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} 225 | engines: {node: '>=8'} 226 | dependencies: 227 | path-type: 4.0.0 228 | dev: true 229 | 230 | /esbuild-android-64/0.14.47: 231 | resolution: {integrity: sha512-R13Bd9+tqLVFndncMHssZrPWe6/0Kpv2/dt4aA69soX4PRxlzsVpCvoJeFE8sOEoeVEiBkI0myjlkDodXlHa0g==} 232 | engines: {node: '>=12'} 233 | cpu: [x64] 234 | os: [android] 235 | requiresBuild: true 236 | dev: true 237 | optional: true 238 | 239 | /esbuild-android-arm64/0.14.47: 240 | resolution: {integrity: sha512-OkwOjj7ts4lBp/TL6hdd8HftIzOy/pdtbrNA4+0oVWgGG64HrdVzAF5gxtJufAPOsEjkyh1oIYvKAUinKKQRSQ==} 241 | engines: {node: '>=12'} 242 | cpu: [arm64] 243 | os: [android] 244 | requiresBuild: true 245 | dev: true 246 | optional: true 247 | 248 | /esbuild-darwin-64/0.14.47: 249 | resolution: {integrity: sha512-R6oaW0y5/u6Eccti/TS6c/2c1xYTb1izwK3gajJwi4vIfNs1s8B1dQzI1UiC9T61YovOQVuePDcfqHLT3mUZJA==} 250 | engines: {node: '>=12'} 251 | cpu: [x64] 252 | os: [darwin] 253 | requiresBuild: true 254 | dev: true 255 | optional: true 256 | 257 | /esbuild-darwin-arm64/0.14.47: 258 | resolution: {integrity: sha512-seCmearlQyvdvM/noz1L9+qblC5vcBrhUaOoLEDDoLInF/VQ9IkobGiLlyTPYP5dW1YD4LXhtBgOyevoIHGGnw==} 259 | engines: {node: '>=12'} 260 | cpu: [arm64] 261 | os: [darwin] 262 | requiresBuild: true 263 | dev: true 264 | optional: true 265 | 266 | /esbuild-freebsd-64/0.14.47: 267 | resolution: {integrity: sha512-ZH8K2Q8/Ux5kXXvQMDsJcxvkIwut69KVrYQhza/ptkW50DC089bCVrJZZ3sKzIoOx+YPTrmsZvqeZERjyYrlvQ==} 268 | engines: {node: '>=12'} 269 | cpu: [x64] 270 | os: [freebsd] 271 | requiresBuild: true 272 | dev: true 273 | optional: true 274 | 275 | /esbuild-freebsd-arm64/0.14.47: 276 | resolution: {integrity: sha512-ZJMQAJQsIOhn3XTm7MPQfCzEu5b9STNC+s90zMWe2afy9EwnHV7Ov7ohEMv2lyWlc2pjqLW8QJnz2r0KZmeAEQ==} 277 | engines: {node: '>=12'} 278 | cpu: [arm64] 279 | os: [freebsd] 280 | requiresBuild: true 281 | dev: true 282 | optional: true 283 | 284 | /esbuild-linux-32/0.14.47: 285 | resolution: {integrity: sha512-FxZOCKoEDPRYvq300lsWCTv1kcHgiiZfNrPtEhFAiqD7QZaXrad8LxyJ8fXGcWzIFzRiYZVtB3ttvITBvAFhKw==} 286 | engines: {node: '>=12'} 287 | cpu: [ia32] 288 | os: [linux] 289 | requiresBuild: true 290 | dev: true 291 | optional: true 292 | 293 | /esbuild-linux-64/0.14.47: 294 | resolution: {integrity: sha512-nFNOk9vWVfvWYF9YNYksZptgQAdstnDCMtR6m42l5Wfugbzu11VpMCY9XrD4yFxvPo9zmzcoUL/88y0lfJZJJw==} 295 | engines: {node: '>=12'} 296 | cpu: [x64] 297 | os: [linux] 298 | requiresBuild: true 299 | dev: true 300 | optional: true 301 | 302 | /esbuild-linux-arm/0.14.47: 303 | resolution: {integrity: sha512-ZGE1Bqg/gPRXrBpgpvH81tQHpiaGxa8c9Rx/XOylkIl2ypLuOcawXEAo8ls+5DFCcRGt/o3sV+PzpAFZobOsmA==} 304 | engines: {node: '>=12'} 305 | cpu: [arm] 306 | os: [linux] 307 | requiresBuild: true 308 | dev: true 309 | optional: true 310 | 311 | /esbuild-linux-arm64/0.14.47: 312 | resolution: {integrity: sha512-ywfme6HVrhWcevzmsufjd4iT3PxTfCX9HOdxA7Hd+/ZM23Y9nXeb+vG6AyA6jgq/JovkcqRHcL9XwRNpWG6XRw==} 313 | engines: {node: '>=12'} 314 | cpu: [arm64] 315 | os: [linux] 316 | requiresBuild: true 317 | dev: true 318 | optional: true 319 | 320 | /esbuild-linux-mips64le/0.14.47: 321 | resolution: {integrity: sha512-mg3D8YndZ1LvUiEdDYR3OsmeyAew4MA/dvaEJxvyygahWmpv1SlEEnhEZlhPokjsUMfRagzsEF/d/2XF+kTQGg==} 322 | engines: {node: '>=12'} 323 | cpu: [mips64el] 324 | os: [linux] 325 | requiresBuild: true 326 | dev: true 327 | optional: true 328 | 329 | /esbuild-linux-ppc64le/0.14.47: 330 | resolution: {integrity: sha512-WER+f3+szmnZiWoK6AsrTKGoJoErG2LlauSmk73LEZFQ/iWC+KhhDsOkn1xBUpzXWsxN9THmQFltLoaFEH8F8w==} 331 | engines: {node: '>=12'} 332 | cpu: [ppc64] 333 | os: [linux] 334 | requiresBuild: true 335 | dev: true 336 | optional: true 337 | 338 | /esbuild-linux-riscv64/0.14.47: 339 | resolution: {integrity: sha512-1fI6bP3A3rvI9BsaaXbMoaOjLE3lVkJtLxsgLHqlBhLlBVY7UqffWBvkrX/9zfPhhVMd9ZRFiaqXnB1T7BsL2g==} 340 | engines: {node: '>=12'} 341 | cpu: [riscv64] 342 | os: [linux] 343 | requiresBuild: true 344 | dev: true 345 | optional: true 346 | 347 | /esbuild-linux-s390x/0.14.47: 348 | resolution: {integrity: sha512-eZrWzy0xFAhki1CWRGnhsHVz7IlSKX6yT2tj2Eg8lhAwlRE5E96Hsb0M1mPSE1dHGpt1QVwwVivXIAacF/G6mw==} 349 | engines: {node: '>=12'} 350 | cpu: [s390x] 351 | os: [linux] 352 | requiresBuild: true 353 | dev: true 354 | optional: true 355 | 356 | /esbuild-netbsd-64/0.14.47: 357 | resolution: {integrity: sha512-Qjdjr+KQQVH5Q2Q1r6HBYswFTToPpss3gqCiSw2Fpq/ua8+eXSQyAMG+UvULPqXceOwpnPo4smyZyHdlkcPppQ==} 358 | engines: {node: '>=12'} 359 | cpu: [x64] 360 | os: [netbsd] 361 | requiresBuild: true 362 | dev: true 363 | optional: true 364 | 365 | /esbuild-openbsd-64/0.14.47: 366 | resolution: {integrity: sha512-QpgN8ofL7B9z8g5zZqJE+eFvD1LehRlxr25PBkjyyasakm4599iroUpaj96rdqRlO2ShuyqwJdr+oNqWwTUmQw==} 367 | engines: {node: '>=12'} 368 | cpu: [x64] 369 | os: [openbsd] 370 | requiresBuild: true 371 | dev: true 372 | optional: true 373 | 374 | /esbuild-sunos-64/0.14.47: 375 | resolution: {integrity: sha512-uOeSgLUwukLioAJOiGYm3kNl+1wJjgJA8R671GYgcPgCx7QR73zfvYqXFFcIO93/nBdIbt5hd8RItqbbf3HtAQ==} 376 | engines: {node: '>=12'} 377 | cpu: [x64] 378 | os: [sunos] 379 | requiresBuild: true 380 | dev: true 381 | optional: true 382 | 383 | /esbuild-windows-32/0.14.47: 384 | resolution: {integrity: sha512-H0fWsLTp2WBfKLBgwYT4OTfFly4Im/8B5f3ojDv1Kx//kiubVY0IQunP2Koc/fr/0wI7hj3IiBDbSrmKlrNgLQ==} 385 | engines: {node: '>=12'} 386 | cpu: [ia32] 387 | os: [win32] 388 | requiresBuild: true 389 | dev: true 390 | optional: true 391 | 392 | /esbuild-windows-64/0.14.47: 393 | resolution: {integrity: sha512-/Pk5jIEH34T68r8PweKRi77W49KwanZ8X6lr3vDAtOlH5EumPE4pBHqkCUdELanvsT14yMXLQ/C/8XPi1pAtkQ==} 394 | engines: {node: '>=12'} 395 | cpu: [x64] 396 | os: [win32] 397 | requiresBuild: true 398 | dev: true 399 | optional: true 400 | 401 | /esbuild-windows-arm64/0.14.47: 402 | resolution: {integrity: sha512-HFSW2lnp62fl86/qPQlqw6asIwCnEsEoNIL1h2uVMgakddf+vUuMcCbtUY1i8sst7KkgHrVKCJQB33YhhOweCQ==} 403 | engines: {node: '>=12'} 404 | cpu: [arm64] 405 | os: [win32] 406 | requiresBuild: true 407 | dev: true 408 | optional: true 409 | 410 | /esbuild/0.14.47: 411 | resolution: {integrity: sha512-wI4ZiIfFxpkuxB8ju4MHrGwGLyp1+awEHAHVpx6w7a+1pmYIq8T9FGEVVwFo0iFierDoMj++Xq69GXWYn2EiwA==} 412 | engines: {node: '>=12'} 413 | hasBin: true 414 | requiresBuild: true 415 | optionalDependencies: 416 | esbuild-android-64: 0.14.47 417 | esbuild-android-arm64: 0.14.47 418 | esbuild-darwin-64: 0.14.47 419 | esbuild-darwin-arm64: 0.14.47 420 | esbuild-freebsd-64: 0.14.47 421 | esbuild-freebsd-arm64: 0.14.47 422 | esbuild-linux-32: 0.14.47 423 | esbuild-linux-64: 0.14.47 424 | esbuild-linux-arm: 0.14.47 425 | esbuild-linux-arm64: 0.14.47 426 | esbuild-linux-mips64le: 0.14.47 427 | esbuild-linux-ppc64le: 0.14.47 428 | esbuild-linux-riscv64: 0.14.47 429 | esbuild-linux-s390x: 0.14.47 430 | esbuild-netbsd-64: 0.14.47 431 | esbuild-openbsd-64: 0.14.47 432 | esbuild-sunos-64: 0.14.47 433 | esbuild-windows-32: 0.14.47 434 | esbuild-windows-64: 0.14.47 435 | esbuild-windows-arm64: 0.14.47 436 | dev: true 437 | 438 | /eslint-scope/5.1.1: 439 | resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} 440 | engines: {node: '>=8.0.0'} 441 | dependencies: 442 | esrecurse: 4.3.0 443 | estraverse: 4.3.0 444 | dev: true 445 | 446 | /eslint-utils/3.0.0: 447 | resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} 448 | engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} 449 | peerDependencies: 450 | eslint: '>=5' 451 | dependencies: 452 | eslint-visitor-keys: 2.1.0 453 | dev: true 454 | 455 | /eslint-visitor-keys/2.1.0: 456 | resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} 457 | engines: {node: '>=10'} 458 | dev: true 459 | 460 | /eslint-visitor-keys/3.3.0: 461 | resolution: {integrity: sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==} 462 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 463 | dev: true 464 | 465 | /esrecurse/4.3.0: 466 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} 467 | engines: {node: '>=4.0'} 468 | dependencies: 469 | estraverse: 5.3.0 470 | dev: true 471 | 472 | /estraverse/4.3.0: 473 | resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} 474 | engines: {node: '>=4.0'} 475 | dev: true 476 | 477 | /estraverse/5.3.0: 478 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} 479 | engines: {node: '>=4.0'} 480 | dev: true 481 | 482 | /fast-glob/3.2.12: 483 | resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==} 484 | engines: {node: '>=8.6.0'} 485 | dependencies: 486 | '@nodelib/fs.stat': 2.0.5 487 | '@nodelib/fs.walk': 1.2.8 488 | glob-parent: 5.1.2 489 | merge2: 1.4.1 490 | micromatch: 4.0.5 491 | dev: true 492 | 493 | /fastq/1.14.0: 494 | resolution: {integrity: sha512-eR2D+V9/ExcbF9ls441yIuN6TI2ED1Y2ZcA5BmMtJsOkWOFRJQ0Jt0g1UwqXJJVAb+V+umH5Dfr8oh4EVP7VVg==} 495 | dependencies: 496 | reusify: 1.0.4 497 | dev: true 498 | 499 | /fill-range/7.0.1: 500 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} 501 | engines: {node: '>=8'} 502 | dependencies: 503 | to-regex-range: 5.0.1 504 | dev: true 505 | 506 | /functional-red-black-tree/1.0.1: 507 | resolution: {integrity: sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==} 508 | dev: true 509 | 510 | /glob-parent/5.1.2: 511 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 512 | engines: {node: '>= 6'} 513 | dependencies: 514 | is-glob: 4.0.3 515 | dev: true 516 | 517 | /globby/11.1.0: 518 | resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} 519 | engines: {node: '>=10'} 520 | dependencies: 521 | array-union: 2.1.0 522 | dir-glob: 3.0.1 523 | fast-glob: 3.2.12 524 | ignore: 5.2.4 525 | merge2: 1.4.1 526 | slash: 3.0.0 527 | dev: true 528 | 529 | /ignore/5.2.4: 530 | resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} 531 | engines: {node: '>= 4'} 532 | dev: true 533 | 534 | /is-extglob/2.1.1: 535 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 536 | engines: {node: '>=0.10.0'} 537 | dev: true 538 | 539 | /is-glob/4.0.3: 540 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 541 | engines: {node: '>=0.10.0'} 542 | dependencies: 543 | is-extglob: 2.1.1 544 | dev: true 545 | 546 | /is-number/7.0.0: 547 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 548 | engines: {node: '>=0.12.0'} 549 | dev: true 550 | 551 | /lru-cache/6.0.0: 552 | resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} 553 | engines: {node: '>=10'} 554 | dependencies: 555 | yallist: 4.0.0 556 | dev: true 557 | 558 | /merge2/1.4.1: 559 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 560 | engines: {node: '>= 8'} 561 | dev: true 562 | 563 | /micromatch/4.0.5: 564 | resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} 565 | engines: {node: '>=8.6'} 566 | dependencies: 567 | braces: 3.0.2 568 | picomatch: 2.3.1 569 | dev: true 570 | 571 | /moment/2.29.4: 572 | resolution: {integrity: sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==} 573 | dev: true 574 | 575 | /monkey-around/2.3.0: 576 | resolution: {integrity: sha512-QWcCUWjqE/MCk9cXlSKZ1Qc486LD439xw/Ak8Nt6l2PuL9+yrc9TJakt7OHDuOqPRYY4nTWBAEFKn32PE/SfXA==} 577 | dev: true 578 | 579 | /ms/2.1.2: 580 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 581 | dev: true 582 | 583 | /obsidian/1.1.1: 584 | resolution: {integrity: sha512-GcxhsHNkPEkwHEjeyitfYNBcQuYGeAHFs1pEpZIv0CnzSfui8p8bPLm2YKLgcg20B764770B1sYGtxCvk9ptxg==} 585 | peerDependencies: 586 | '@codemirror/state': ^6.0.0 587 | '@codemirror/view': ^6.0.0 588 | dependencies: 589 | '@types/codemirror': 0.0.108 590 | moment: 2.29.4 591 | dev: true 592 | 593 | /path-type/4.0.0: 594 | resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} 595 | engines: {node: '>=8'} 596 | dev: true 597 | 598 | /picomatch/2.3.1: 599 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 600 | engines: {node: '>=8.6'} 601 | dev: true 602 | 603 | /queue-microtask/1.2.3: 604 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 605 | dev: true 606 | 607 | /regexpp/3.2.0: 608 | resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==} 609 | engines: {node: '>=8'} 610 | dev: true 611 | 612 | /reusify/1.0.4: 613 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 614 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 615 | dev: true 616 | 617 | /run-parallel/1.2.0: 618 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 619 | dependencies: 620 | queue-microtask: 1.2.3 621 | dev: true 622 | 623 | /semver/7.3.8: 624 | resolution: {integrity: sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==} 625 | engines: {node: '>=10'} 626 | hasBin: true 627 | dependencies: 628 | lru-cache: 6.0.0 629 | dev: true 630 | 631 | /slash/3.0.0: 632 | resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} 633 | engines: {node: '>=8'} 634 | dev: true 635 | 636 | /to-regex-range/5.0.1: 637 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 638 | engines: {node: '>=8.0'} 639 | dependencies: 640 | is-number: 7.0.0 641 | dev: true 642 | 643 | /tslib/1.14.1: 644 | resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} 645 | dev: true 646 | 647 | /tslib/2.4.0: 648 | resolution: {integrity: sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==} 649 | dev: true 650 | 651 | /tsutils/3.21.0_typescript@4.7.4: 652 | resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} 653 | engines: {node: '>= 6'} 654 | peerDependencies: 655 | typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' 656 | dependencies: 657 | tslib: 1.14.1 658 | typescript: 4.7.4 659 | dev: true 660 | 661 | /typescript/4.7.4: 662 | resolution: {integrity: sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==} 663 | engines: {node: '>=4.2.0'} 664 | hasBin: true 665 | dev: true 666 | 667 | /yallist/4.0.0: 668 | resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} 669 | dev: true 670 | -------------------------------------------------------------------------------- /styles.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | This CSS file will be included with your plugin, and 4 | available in the app when your plugin is enabled. 5 | 6 | If your plugin does not need CSS, delete this file. 7 | 8 | */ 9 | -------------------------------------------------------------------------------- /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 | "strictNullChecks": true, 14 | "lib": [ 15 | "DOM", 16 | "ES5", 17 | "ES6", 18 | "ES7" 19 | ] 20 | }, 21 | "include": [ 22 | "**/*.ts" 23 | ] 24 | } 25 | -------------------------------------------------------------------------------- /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.0.1": "1.1.0", 3 | "0.0.2": "1.1.0", 4 | "0.0.3": "1.1.0", 5 | "0.0.4": "1.1.0" 6 | } --------------------------------------------------------------------------------