├── .npmrc ├── .eslintignore ├── versions.json ├── styles.css ├── .editorconfig ├── Cargo.toml ├── src ├── obsidian.rs └── lib.rs ├── manifest.json ├── .gitignore ├── tsconfig.json ├── version-bump.mjs ├── .eslintrc ├── package.json ├── esbuild.config.mjs ├── Cargo.lock ├── main.ts ├── README.md └── yarn.lock /.npmrc: -------------------------------------------------------------------------------- 1 | tag-version-prefix="" -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | npm node_modules 2 | build -------------------------------------------------------------------------------- /versions.json: -------------------------------------------------------------------------------- 1 | { 2 | "1.0.0": "0.15.0" 3 | } 4 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /.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 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "obsidian-rust-plugin" 3 | version = "0.1.0" 4 | authors = ["Stephen Solka "] 5 | edition = "2018" 6 | 7 | [lib] 8 | crate-type = ["cdylib"] 9 | 10 | [dependencies] 11 | wasm-bindgen = "0.2" 12 | js-sys = "0.3.49" -------------------------------------------------------------------------------- /src/obsidian.rs: -------------------------------------------------------------------------------- 1 | use wasm_bindgen::prelude::*; 2 | 3 | #[wasm_bindgen(module = "obsidian")] 4 | extern "C" { 5 | pub type Plugin; 6 | 7 | #[wasm_bindgen(structural, method)] 8 | pub fn addCommand(this: &Plugin, command: JsValue); 9 | 10 | pub type Notice; 11 | 12 | #[wasm_bindgen(constructor)] 13 | pub fn new(message: &str) -> Notice; 14 | } 15 | -------------------------------------------------------------------------------- /manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "obsidian-sample-plugin", 3 | "name": "Sample Plugin", 4 | "version": "1.0.0", 5 | "minAppVersion": "0.15.0", 6 | "description": "This is a sample plugin for Obsidian. This plugin demonstrates some of the capabilities of the Obsidian API.", 7 | "author": "Obsidian", 8 | "authorUrl": "https://obsidian.md", 9 | "fundingUrl": "https://obsidian.md/pricing", 10 | "isDesktopOnly": false 11 | } 12 | -------------------------------------------------------------------------------- /.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 | 24 | # Rust-specific results 25 | target/ 26 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /.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 | } -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "sample-rust-plugin", 3 | "description": "This is a sample plugin for Obsidian (https://obsidian.md)", 4 | "version": "1.0.0", 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 | }, 11 | "keywords": [], 12 | "author": "", 13 | "license": "MIT", 14 | "devDependencies": { 15 | "@types/node": "^16.11.6", 16 | "@typescript-eslint/eslint-plugin": "5.29.0", 17 | "@typescript-eslint/parser": "5.29.0", 18 | "builtin-modules": "3.3.0", 19 | "esbuild": "0.14.47", 20 | "esbuild-plugin-wasm-pack": "^1.1.0", 21 | "obsidian": "latest", 22 | "tslib": "2.4.0", 23 | "typescript": "4.7.4" 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/lib.rs: -------------------------------------------------------------------------------- 1 | mod obsidian; 2 | use js_sys::JsString; 3 | use wasm_bindgen::prelude::*; 4 | 5 | #[wasm_bindgen] 6 | pub struct ExampleCommand { 7 | id: JsString, 8 | name: JsString, 9 | } 10 | 11 | #[wasm_bindgen] 12 | impl ExampleCommand { 13 | #[wasm_bindgen(getter)] 14 | pub fn id(&self) -> JsString { 15 | self.id.clone() 16 | } 17 | 18 | #[wasm_bindgen(setter)] 19 | pub fn set_id(&mut self, id: &str) { 20 | self.id = JsString::from(id) 21 | } 22 | 23 | #[wasm_bindgen(getter)] 24 | pub fn name(&self) -> JsString { 25 | self.name.clone() 26 | } 27 | 28 | #[wasm_bindgen(setter)] 29 | pub fn set_name(&mut self, name: &str) { 30 | self.name = JsString::from(name) 31 | } 32 | 33 | pub fn callback(&self) { 34 | obsidian::Notice::new("hello from rust"); 35 | } 36 | } 37 | 38 | #[wasm_bindgen] 39 | pub fn onload(plugin: &obsidian::Plugin) { 40 | let cmd = ExampleCommand { 41 | id: JsString::from("example"), 42 | name: JsString::from("Example"), 43 | }; 44 | plugin.addCommand(JsValue::from(cmd)) 45 | } 46 | -------------------------------------------------------------------------------- /esbuild.config.mjs: -------------------------------------------------------------------------------- 1 | import esbuild from "esbuild"; 2 | import process from "process"; 3 | import builtins from 'builtin-modules' 4 | import pkg from 'esbuild-plugin-wasm-pack'; 5 | const { wasmPack } = pkg; 6 | 7 | const banner = 8 | `/* 9 | THIS IS A GENERATED/BUNDLED FILE BY ESBUILD 10 | if you want to view the source, please visit the github repository of this plugin 11 | */ 12 | `; 13 | 14 | const prod = (process.argv[2] === 'production'); 15 | 16 | // load WASM files - see https://github.com/evanw/esbuild/issues/408#issuecomment-699688651 17 | import path from 'path'; 18 | import fs from 'fs'; 19 | 20 | let wasmPlugin = { 21 | name: 'wasm', 22 | setup(build) { 23 | 24 | // Resolve ".wasm" files to a path with a namespace 25 | build.onResolve({ filter: /\.wasm$/ }, args => { 26 | if (args.resolveDir === '') { 27 | return // Ignore unresolvable paths 28 | } 29 | return { 30 | path: path.isAbsolute(args.path) ? args.path : path.join(args.resolveDir, args.path), 31 | namespace: 'wasm-binary', 32 | } 33 | }) 34 | 35 | // Virtual modules in the "wasm-binary" namespace contain the 36 | // actual bytes of the WebAssembly file. This uses esbuild's 37 | // built-in "binary" loader instead of manually embedding the 38 | // binary data inside JavaScript code ourselves. 39 | build.onLoad({ filter: /.*/, namespace: 'wasm-binary' }, async (args) => ({ 40 | contents: await fs.promises.readFile(args.path), 41 | loader: 'binary', 42 | })) 43 | }, 44 | } 45 | 46 | esbuild.build({ 47 | banner: { 48 | js: banner, 49 | }, 50 | entryPoints: ['main.ts'], 51 | bundle: true, 52 | external: [ 53 | 'obsidian', 54 | 'electron', 55 | '@codemirror/autocomplete', 56 | '@codemirror/collab', 57 | '@codemirror/commands', 58 | '@codemirror/language', 59 | '@codemirror/lint', 60 | '@codemirror/search', 61 | '@codemirror/state', 62 | '@codemirror/view', 63 | '@lezer/common', 64 | '@lezer/highlight', 65 | '@lezer/lr', 66 | ...builtins], 67 | format: 'cjs', 68 | watch: !prod, 69 | target: 'es2020', 70 | logLevel: "info", 71 | sourcemap: prod ? false : 'inline', 72 | treeShaking: true, 73 | outfile: 'main.js', 74 | plugins: [ 75 | wasmPlugin, 76 | wasmPack({ 77 | 'target': 'web' 78 | // put wasm-pack plugin options 79 | }), 80 | ], 81 | }).catch(() => process.exit(1)); 82 | -------------------------------------------------------------------------------- /Cargo.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Cargo. 2 | # It is not intended for manual editing. 3 | version = 3 4 | 5 | [[package]] 6 | name = "bumpalo" 7 | version = "3.11.1" 8 | source = "registry+https://github.com/rust-lang/crates.io-index" 9 | checksum = "572f695136211188308f16ad2ca5c851a712c464060ae6974944458eb83880ba" 10 | 11 | [[package]] 12 | name = "cfg-if" 13 | version = "1.0.0" 14 | source = "registry+https://github.com/rust-lang/crates.io-index" 15 | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" 16 | 17 | [[package]] 18 | name = "js-sys" 19 | version = "0.3.60" 20 | source = "registry+https://github.com/rust-lang/crates.io-index" 21 | checksum = "49409df3e3bf0856b916e2ceaca09ee28e6871cf7d9ce97a692cacfdb2a25a47" 22 | dependencies = [ 23 | "wasm-bindgen", 24 | ] 25 | 26 | [[package]] 27 | name = "log" 28 | version = "0.4.17" 29 | source = "registry+https://github.com/rust-lang/crates.io-index" 30 | checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" 31 | dependencies = [ 32 | "cfg-if", 33 | ] 34 | 35 | [[package]] 36 | name = "obsidian-rust-plugin" 37 | version = "0.1.0" 38 | dependencies = [ 39 | "js-sys", 40 | "wasm-bindgen", 41 | ] 42 | 43 | [[package]] 44 | name = "once_cell" 45 | version = "1.16.0" 46 | source = "registry+https://github.com/rust-lang/crates.io-index" 47 | checksum = "86f0b0d4bf799edbc74508c1e8bf170ff5f41238e5f8225603ca7caaae2b7860" 48 | 49 | [[package]] 50 | name = "proc-macro2" 51 | version = "1.0.49" 52 | source = "registry+https://github.com/rust-lang/crates.io-index" 53 | checksum = "57a8eca9f9c4ffde41714334dee777596264c7825420f521abc92b5b5deb63a5" 54 | dependencies = [ 55 | "unicode-ident", 56 | ] 57 | 58 | [[package]] 59 | name = "quote" 60 | version = "1.0.23" 61 | source = "registry+https://github.com/rust-lang/crates.io-index" 62 | checksum = "8856d8364d252a14d474036ea1358d63c9e6965c8e5c1885c18f73d70bff9c7b" 63 | dependencies = [ 64 | "proc-macro2", 65 | ] 66 | 67 | [[package]] 68 | name = "syn" 69 | version = "1.0.107" 70 | source = "registry+https://github.com/rust-lang/crates.io-index" 71 | checksum = "1f4064b5b16e03ae50984a5a8ed5d4f8803e6bc1fd170a3cda91a1be4b18e3f5" 72 | dependencies = [ 73 | "proc-macro2", 74 | "quote", 75 | "unicode-ident", 76 | ] 77 | 78 | [[package]] 79 | name = "unicode-ident" 80 | version = "1.0.6" 81 | source = "registry+https://github.com/rust-lang/crates.io-index" 82 | checksum = "84a22b9f218b40614adcb3f4ff08b703773ad44fa9423e4e0d346d5db86e4ebc" 83 | 84 | [[package]] 85 | name = "wasm-bindgen" 86 | version = "0.2.83" 87 | source = "registry+https://github.com/rust-lang/crates.io-index" 88 | checksum = "eaf9f5aceeec8be17c128b2e93e031fb8a4d469bb9c4ae2d7dc1888b26887268" 89 | dependencies = [ 90 | "cfg-if", 91 | "wasm-bindgen-macro", 92 | ] 93 | 94 | [[package]] 95 | name = "wasm-bindgen-backend" 96 | version = "0.2.83" 97 | source = "registry+https://github.com/rust-lang/crates.io-index" 98 | checksum = "4c8ffb332579b0557b52d268b91feab8df3615f265d5270fec2a8c95b17c1142" 99 | dependencies = [ 100 | "bumpalo", 101 | "log", 102 | "once_cell", 103 | "proc-macro2", 104 | "quote", 105 | "syn", 106 | "wasm-bindgen-shared", 107 | ] 108 | 109 | [[package]] 110 | name = "wasm-bindgen-macro" 111 | version = "0.2.83" 112 | source = "registry+https://github.com/rust-lang/crates.io-index" 113 | checksum = "052be0f94026e6cbc75cdefc9bae13fd6052cdcaf532fa6c45e7ae33a1e6c810" 114 | dependencies = [ 115 | "quote", 116 | "wasm-bindgen-macro-support", 117 | ] 118 | 119 | [[package]] 120 | name = "wasm-bindgen-macro-support" 121 | version = "0.2.83" 122 | source = "registry+https://github.com/rust-lang/crates.io-index" 123 | checksum = "07bc0c051dc5f23e307b13285f9d75df86bfdf816c5721e573dec1f9b8aa193c" 124 | dependencies = [ 125 | "proc-macro2", 126 | "quote", 127 | "syn", 128 | "wasm-bindgen-backend", 129 | "wasm-bindgen-shared", 130 | ] 131 | 132 | [[package]] 133 | name = "wasm-bindgen-shared" 134 | version = "0.2.83" 135 | source = "registry+https://github.com/rust-lang/crates.io-index" 136 | checksum = "1c38c045535d93ec4f0b4defec448e4291638ee608530863b1e2ba115d4fff7f" 137 | -------------------------------------------------------------------------------- /main.ts: -------------------------------------------------------------------------------- 1 | import { App, Editor, MarkdownView, Modal, Notice, Plugin, PluginSettingTab, Setting } from 'obsidian'; 2 | 3 | import * as plugin from "./pkg/obsidian_rust_plugin.js"; 4 | import * as wasmbin from './pkg/obsidian_rust_plugin_bg.wasm'; 5 | 6 | // Remember to rename these classes and interfaces! 7 | 8 | interface MyPluginSettings { 9 | mySetting: string; 10 | } 11 | 12 | const DEFAULT_SETTINGS: MyPluginSettings = { 13 | mySetting: 'default' 14 | } 15 | 16 | export default class MyPlugin extends Plugin { 17 | settings: MyPluginSettings; 18 | 19 | async onload() { 20 | await this.loadSettings(); 21 | 22 | // This creates an icon in the left ribbon. 23 | const ribbonIconEl = this.addRibbonIcon('dice', 'Sample Plugin', (evt: MouseEvent) => { 24 | // Called when the user clicks the icon. 25 | new Notice('This is a notice!'); 26 | }); 27 | // Perform additional things with the ribbon 28 | ribbonIconEl.addClass('my-plugin-ribbon-class'); 29 | 30 | // This adds a status bar item to the bottom of the app. Does not work on mobile apps. 31 | const statusBarItemEl = this.addStatusBarItem(); 32 | statusBarItemEl.setText('Status Bar Text'); 33 | 34 | // This adds a simple command that can be triggered anywhere 35 | this.addCommand({ 36 | id: 'open-sample-modal-simple', 37 | name: 'Open sample modal (simple)', 38 | callback: () => { 39 | new SampleModal(this.app).open(); 40 | } 41 | }); 42 | // This adds an editor command that can perform some operation on the current editor instance 43 | this.addCommand({ 44 | id: 'sample-editor-command', 45 | name: 'Sample editor command', 46 | editorCallback: (editor: Editor, view: MarkdownView) => { 47 | console.log(editor.getSelection()); 48 | editor.replaceSelection('Sample Editor Command'); 49 | } 50 | }); 51 | // This adds a complex command that can check whether the current state of the app allows execution of the command 52 | this.addCommand({ 53 | id: 'open-sample-modal-complex', 54 | name: 'Open sample modal (complex)', 55 | checkCallback: (checking: boolean) => { 56 | // Conditions to check 57 | const markdownView = this.app.workspace.getActiveViewOfType(MarkdownView); 58 | if (markdownView) { 59 | // If checking is true, we're simply "checking" if the command can be run. 60 | // If checking is false, then we want to actually perform the operation. 61 | if (!checking) { 62 | new SampleModal(this.app).open(); 63 | } 64 | 65 | // This command will only show up in Command Palette when the check function returns true 66 | return true; 67 | } 68 | } 69 | }); 70 | 71 | // This adds a settings tab so the user can configure various aspects of the plugin 72 | this.addSettingTab(new SampleSettingTab(this.app, this)); 73 | 74 | // If the plugin hooks up any global DOM events (on parts of the app that doesn't belong to this plugin) 75 | // Using this function will automatically remove the event listener when this plugin is disabled. 76 | this.registerDomEvent(document, 'click', (evt: MouseEvent) => { 77 | console.log('click', evt); 78 | }); 79 | 80 | // When registering intervals, this function will automatically clear the interval when the plugin is disabled. 81 | this.registerInterval(window.setInterval(() => console.log('setInterval'), 5 * 60 * 1000)); 82 | 83 | // here's the Rust bit 84 | await plugin.default(Promise.resolve(wasmbin.default)); 85 | plugin.onload(this); 86 | } 87 | 88 | onunload() { 89 | 90 | } 91 | 92 | async loadSettings() { 93 | this.settings = Object.assign({}, DEFAULT_SETTINGS, await this.loadData()); 94 | } 95 | 96 | async saveSettings() { 97 | await this.saveData(this.settings); 98 | } 99 | } 100 | 101 | class SampleModal extends Modal { 102 | constructor(app: App) { 103 | super(app); 104 | } 105 | 106 | onOpen() { 107 | const {contentEl} = this; 108 | contentEl.setText('Woah!'); 109 | } 110 | 111 | onClose() { 112 | const {contentEl} = this; 113 | contentEl.empty(); 114 | } 115 | } 116 | 117 | class SampleSettingTab extends PluginSettingTab { 118 | plugin: MyPlugin; 119 | 120 | constructor(app: App, plugin: MyPlugin) { 121 | super(app, plugin); 122 | this.plugin = plugin; 123 | } 124 | 125 | display(): void { 126 | const {containerEl} = this; 127 | 128 | containerEl.empty(); 129 | 130 | containerEl.createEl('h2', {text: 'Settings for my awesome plugin.'}); 131 | 132 | new Setting(containerEl) 133 | .setName('Setting #1') 134 | .setDesc('It\'s a secret') 135 | .addText(text => text 136 | .setPlaceholder('Enter your secret') 137 | .setValue(this.plugin.settings.mySetting) 138 | .onChange(async (value) => { 139 | console.log('Secret: ' + value); 140 | this.plugin.settings.mySetting = value; 141 | await this.plugin.saveSettings(); 142 | })); 143 | } 144 | } 145 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Obsidian Sample Plugin (Rust) 2 | 3 | This is a quick proof of concept combining the current [Obsidian Git template](https://github.com/obsidianmd/obsidian-sample-plugin) and an [earlier proof-of-concept](https://github.com/trashhalo/obsidian-rust-plugin). Thanks to @trashhalo who essentially did all the work! 4 | 5 | How to use: 6 | 7 | 1. Create a new repo with this one as a template. 8 | 2. Make sure Rust & cargo are installed (I used `rustup`). 9 | 3. Install `wasm-pack` [link](https://rustwasm.github.io/wasm-pack/installer/). 10 | 4. Follow the steps here to set up the sample plugin: [Obsidian plugin setup](https://marcus.se.net/obsidian-plugin-docs/getting-started/create-your-first-plugin), ideally using the `yarn` instructions (I haven't tested the npm version). 11 | 12 | Setting up yarn will install and run the `esbuild-plugin-wasm-pack` plugin, which compiles the Rust code (in `src/`) and puts the resulting packed WebAssembly into `pkg/` (NOTE: this generated folder will have a `.gitignore`, which you will need to remove to distribute your plugin). The `main.ts` file then loads that code. 13 | 14 | To test: try running the "Sample Plugin: Example Command" in the command bar (i.e. Cmd+P); you should see a "hello from rust" message. 15 | 16 | Note: currently there is a bug (probably with esbuild-plugin-wasm-pack) where esbuild doesn't wait for output to be generated (I think); the solution for now is just to rerun it: 17 | 18 | ```bash 19 | (prod) test_repo> yarn run dev 20 | yarn run v1.22.17 21 | $ node esbuild.config.mjs 22 | 23 | ℹ Compiling your crate in mode... 24 | 25 | [INFO]: Checking for the Wasm target... 26 | [INFO]: Compiling to Wasm... 27 | Compiling proc-macro2 v1.0.49 28 | Compiling quote v1.0.23 29 | Compiling unicode-ident v1.0.6 30 | Compiling syn v1.0.107 31 | Compiling log v0.4.17 32 | Compiling wasm-bindgen-shared v0.2.83 33 | Compiling cfg-if v1.0.0 34 | Compiling bumpalo v3.11.1 35 | Compiling once_cell v1.16.0 36 | Compiling wasm-bindgen v0.2.83 37 | Compiling wasm-bindgen-backend v0.2.83 38 | Compiling wasm-bindgen-macro-support v0.2.83 39 | Compiling wasm-bindgen-macro v0.2.83 40 | Compiling js-sys v0.3.60 41 | Compiling obsidian-rust-plugin v0.1.0 () 42 | Finished release [optimized] target(s) in 13.54s 43 | node:internal/process/promises:246 44 | triggerUncaughtException(err, true /* fromPromise */); 45 | ^ 46 | 47 | [Error: ENOENT: no such file or directory, open '/target/wasm32-unknown-unknown/release/obsidian_rust_plugin.d'] { 48 | errno: -2, 49 | code: 'ENOENT', 50 | syscall: 'open', 51 | path: '/target/wasm32-unknown-unknown/release/obsidian_rust_plugin.d' 52 | } 53 | 54 | Node.js v17.0.1 55 | [INFO]: Installing wasm-bindgen... 56 | error Command failed with exit code 1. 57 | info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command. 58 | [INFO]: Optimizing wasm binaries with `wasm-opt`... 59 | (prod) test_repo> [INFO]: Optional fields missing from Cargo.toml: 'description', 'repository', and 'license'. These are not necessary, but recommended 60 | [INFO]: :-) Done in 13.94s 61 | [INFO]: :-) Your wasm pkg is ready to publish at /pkg. 62 | 63 | (prod) test_repo> yarn run dev 64 | yarn run v1.22.17 65 | $ node esbuild.config.mjs 66 | 67 | ℹ Compiling your crate in mode... 68 | 69 | [INFO]: Checking for the Wasm target... 70 | [INFO]: Compiling to Wasm... 71 | Finished release [optimized] target(s) in 0.06s 72 | [INFO]: Installing wasm-bindgen... 73 | [INFO]: Optimizing wasm binaries with `wasm-opt`... 74 | [INFO]: Optional fields missing from Cargo.toml: 'description', 'repository', and 'license'. These are not necessary, but recommended 75 | [INFO]: :-) Done in 0.41s 76 | [INFO]: :-) Your wasm pkg is ready to publish at /pkg. 77 | 78 | ✅ Your crate was successfully compiled. 79 | 80 | [watch] build finished, watching for changes... 81 | ``` 82 | 83 | I'm leaving the original Obsidian plugin docs below in case it's helpful: 84 | 85 | # Obsidian Sample Plugin docs 86 | 87 | This is a sample plugin for Obsidian (https://obsidian.md). 88 | 89 | This project uses Typescript to provide type checking and documentation. 90 | The repo depends on the latest plugin API (obsidian.d.ts) in Typescript Definition format, which contains TSDoc comments describing what it does. 91 | 92 | **Note:** The Obsidian API is still in early alpha and is subject to change at any time! 93 | 94 | This sample plugin demonstrates some of the basic functionality the plugin API can do. 95 | - Changes the default font color to red using `styles.css`. 96 | - Adds a ribbon icon, which shows a Notice when clicked. 97 | - Adds a command "Open Sample Modal" which opens a Modal. 98 | - Adds a plugin setting tab to the settings page. 99 | - Registers a global click event and output 'click' to the console. 100 | - Registers a global interval which logs 'setInterval' to the console. 101 | 102 | ## First time developing plugins? 103 | 104 | Quick starting guide for new plugin devs: 105 | 106 | - Check if [someone already developed a plugin for what you want](https://obsidian.md/plugins)! There might be an existing plugin similar enough that you can partner up with. 107 | - Make a copy of this repo as a template with the "Use this template" button (login to GitHub if you don't see it). 108 | - Clone your repo to a local development folder. For convenience, you can place this folder in your `.obsidian/plugins/your-plugin-name` folder. 109 | - Install NodeJS, then run `npm i` in the command line under your repo folder. 110 | - Run `npm run dev` to compile your plugin from `main.ts` to `main.js`. 111 | - Make changes to `main.ts` (or create new `.ts` files). Those changes should be automatically compiled into `main.js`. 112 | - Reload Obsidian to load the new version of your plugin. 113 | - Enable plugin in settings window. 114 | - For updates to the Obsidian API run `npm update` in the command line under your repo folder. 115 | 116 | ## Releasing new releases 117 | 118 | - Update your `manifest.json` with your new version number, such as `1.0.1`, and the minimum Obsidian version required for your latest release. 119 | - Update your `versions.json` file with `"new-plugin-version": "minimum-obsidian-version"` so older versions of Obsidian can download an older version of your plugin that's compatible. 120 | - Create new GitHub release using your new version number as the "Tag version". Use the exact version number, don't include a prefix `v`. See here for an example: https://github.com/obsidianmd/obsidian-sample-plugin/releases 121 | - Upload the files `manifest.json`, `main.js`, `styles.css` as binary attachments. Note: The manifest.json file must be in two places, first the root path of your repository and also in the release. 122 | - Publish the release. 123 | 124 | > You can simplify the version bump process by running `npm version patch`, `npm version minor` or `npm version major` after updating `minAppVersion` manually in `manifest.json`. 125 | > The command will bump version in `manifest.json` and `package.json`, and add the entry for the new version to `versions.json` 126 | 127 | ## Adding your plugin to the community plugin list 128 | 129 | - Check https://github.com/obsidianmd/obsidian-releases/blob/master/plugin-review.md 130 | - Publish an initial version. 131 | - Make sure you have a `README.md` file in the root of your repo. 132 | - Make a pull request at https://github.com/obsidianmd/obsidian-releases to add your plugin. 133 | 134 | ## How to use 135 | 136 | - Clone this repo. 137 | - `npm i` or `yarn` to install dependencies 138 | - `npm run dev` to start compilation in watch mode. 139 | 140 | ## Manually installing the plugin 141 | 142 | - Copy over `main.js`, `styles.css`, `manifest.json` to your vault `VaultFolder/.obsidian/plugins/your-plugin-id/`. 143 | 144 | ## Improve code quality with eslint (optional) 145 | - [ESLint](https://eslint.org/) is a tool that analyzes your code to quickly find problems. You can run ESLint against your plugin to find common bugs and ways to improve your code. 146 | - To use eslint with this project, make sure to install eslint from terminal: 147 | - `npm install -g eslint` 148 | - To use eslint to analyze this project use this command: 149 | - `eslint main.ts` 150 | - eslint will then create a report with suggestions for code improvement by file and line number. 151 | - If your source code is in a folder, such as `src`, you can use eslint with this command to analyze all files in that folder: 152 | - `eslint .\src\` 153 | 154 | ## Funding URL 155 | 156 | You can include funding URLs where people who use your plugin can financially support it. 157 | 158 | The simple way is to set the `fundingUrl` field to your link in your `manifest.json` file: 159 | 160 | ```json 161 | { 162 | "fundingUrl": "https://buymeacoffee.com" 163 | } 164 | ``` 165 | 166 | If you have multiple URLs, you can also do: 167 | 168 | ```json 169 | { 170 | "fundingUrl": { 171 | "Buy Me a Coffee": "https://buymeacoffee.com", 172 | "GitHub Sponsor": "https://github.com/sponsors", 173 | "Patreon": "https://www.patreon.com/" 174 | } 175 | } 176 | ``` 177 | 178 | ## API Documentation 179 | 180 | See https://github.com/obsidianmd/obsidian-api 181 | -------------------------------------------------------------------------------- /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.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" 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.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" 16 | integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== 17 | 18 | "@nodelib/fs.walk@^1.2.3": 19 | version "1.2.8" 20 | resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" 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.yarnpkg.com/@types/codemirror/-/codemirror-0.0.108.tgz#e640422b666bf49251b384c390cdeb2362585bde" 29 | integrity sha512-3FGFcus0P7C2UOGCNUVENqObEb4SFk+S8Dnxq7K6aIsLVs/vDtlangl3PEO0ykaKXyK56swVF6Nho7VsA44uhw== 30 | dependencies: 31 | "@types/tern" "*" 32 | 33 | "@types/estree@*": 34 | version "1.0.0" 35 | resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.0.tgz#5fb2e536c1ae9bf35366eed879e827fa59ca41c2" 36 | integrity sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ== 37 | 38 | "@types/json-schema@^7.0.9": 39 | version "7.0.11" 40 | resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" 41 | integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== 42 | 43 | "@types/node@^16.11.6": 44 | version "16.18.10" 45 | resolved "https://registry.yarnpkg.com/@types/node/-/node-16.18.10.tgz#d7415ef18c94f8d4e4a82ebcc8b8999f965d8920" 46 | integrity sha512-XU1+v7h81p7145ddPfjv7jtWvkSilpcnON3mQ+bDi9Yuf7OI56efOglXRyXWgQ57xH3fEQgh7WOJMncRHVew5w== 47 | 48 | "@types/tern@*": 49 | version "0.23.4" 50 | resolved "https://registry.yarnpkg.com/@types/tern/-/tern-0.23.4.tgz#03926eb13dbeaf3ae0d390caf706b2643a0127fb" 51 | integrity sha512-JAUw1iXGO1qaWwEOzxTKJZ/5JxVeON9kvGZ/osgZaJImBnyjyn0cjovPsf6FNLmyGY8Vw9DoXZCMlfMkMwHRWg== 52 | dependencies: 53 | "@types/estree" "*" 54 | 55 | "@typescript-eslint/eslint-plugin@5.29.0": 56 | version "5.29.0" 57 | resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.29.0.tgz#c67794d2b0fd0b4a47f50266088acdc52a08aab6" 58 | integrity sha512-kgTsISt9pM53yRFQmLZ4npj99yGl3x3Pl7z4eA66OuTzAGC4bQB5H5fuLwPnqTKU3yyrrg4MIhjF17UYnL4c0w== 59 | dependencies: 60 | "@typescript-eslint/scope-manager" "5.29.0" 61 | "@typescript-eslint/type-utils" "5.29.0" 62 | "@typescript-eslint/utils" "5.29.0" 63 | debug "^4.3.4" 64 | functional-red-black-tree "^1.0.1" 65 | ignore "^5.2.0" 66 | regexpp "^3.2.0" 67 | semver "^7.3.7" 68 | tsutils "^3.21.0" 69 | 70 | "@typescript-eslint/parser@5.29.0": 71 | version "5.29.0" 72 | resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.29.0.tgz#41314b195b34d44ff38220caa55f3f93cfca43cf" 73 | integrity sha512-ruKWTv+x0OOxbzIw9nW5oWlUopvP/IQDjB5ZqmTglLIoDTctLlAJpAQFpNPJP/ZI7hTT9sARBosEfaKbcFuECw== 74 | dependencies: 75 | "@typescript-eslint/scope-manager" "5.29.0" 76 | "@typescript-eslint/types" "5.29.0" 77 | "@typescript-eslint/typescript-estree" "5.29.0" 78 | debug "^4.3.4" 79 | 80 | "@typescript-eslint/scope-manager@5.29.0": 81 | version "5.29.0" 82 | resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.29.0.tgz#2a6a32e3416cb133e9af8dcf54bf077a916aeed3" 83 | integrity sha512-etbXUT0FygFi2ihcxDZjz21LtC+Eps9V2xVx09zFoN44RRHPrkMflidGMI+2dUs821zR1tDS6Oc9IXxIjOUZwA== 84 | dependencies: 85 | "@typescript-eslint/types" "5.29.0" 86 | "@typescript-eslint/visitor-keys" "5.29.0" 87 | 88 | "@typescript-eslint/type-utils@5.29.0": 89 | version "5.29.0" 90 | resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.29.0.tgz#241918001d164044020b37d26d5b9f4e37cc3d5d" 91 | integrity sha512-JK6bAaaiJozbox3K220VRfCzLa9n0ib/J+FHIwnaV3Enw/TO267qe0pM1b1QrrEuy6xun374XEAsRlA86JJnyg== 92 | dependencies: 93 | "@typescript-eslint/utils" "5.29.0" 94 | debug "^4.3.4" 95 | tsutils "^3.21.0" 96 | 97 | "@typescript-eslint/types@5.29.0": 98 | version "5.29.0" 99 | resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.29.0.tgz#7861d3d288c031703b2d97bc113696b4d8c19aab" 100 | integrity sha512-X99VbqvAXOMdVyfFmksMy3u8p8yoRGITgU1joBJPzeYa0rhdf5ok9S56/itRoUSh99fiDoMtarSIJXo7H/SnOg== 101 | 102 | "@typescript-eslint/typescript-estree@5.29.0": 103 | version "5.29.0" 104 | resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.29.0.tgz#e83d19aa7fd2e74616aab2f25dfbe4de4f0b5577" 105 | integrity sha512-mQvSUJ/JjGBdvo+1LwC+GY2XmSYjK1nAaVw2emp/E61wEVYEyibRHCqm1I1vEKbXCpUKuW4G7u9ZCaZhJbLoNQ== 106 | dependencies: 107 | "@typescript-eslint/types" "5.29.0" 108 | "@typescript-eslint/visitor-keys" "5.29.0" 109 | debug "^4.3.4" 110 | globby "^11.1.0" 111 | is-glob "^4.0.3" 112 | semver "^7.3.7" 113 | tsutils "^3.21.0" 114 | 115 | "@typescript-eslint/utils@5.29.0": 116 | version "5.29.0" 117 | resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.29.0.tgz#775046effd5019667bd086bcf326acbe32cd0082" 118 | integrity sha512-3Eos6uP1nyLOBayc/VUdKZikV90HahXE5Dx9L5YlSd/7ylQPXhLk1BYb29SDgnBnTp+jmSZUU0QxUiyHgW4p7A== 119 | dependencies: 120 | "@types/json-schema" "^7.0.9" 121 | "@typescript-eslint/scope-manager" "5.29.0" 122 | "@typescript-eslint/types" "5.29.0" 123 | "@typescript-eslint/typescript-estree" "5.29.0" 124 | eslint-scope "^5.1.1" 125 | eslint-utils "^3.0.0" 126 | 127 | "@typescript-eslint/visitor-keys@5.29.0": 128 | version "5.29.0" 129 | resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.29.0.tgz#7a4749fa7ef5160c44a451bf060ac1dc6dfb77ee" 130 | integrity sha512-Hpb/mCWsjILvikMQoZIE3voc9wtQcS0A9FUw3h8bhr9UxBdtI/tw1ZDZUOXHXLOVMedKCH5NxyzATwnU78bWCQ== 131 | dependencies: 132 | "@typescript-eslint/types" "5.29.0" 133 | eslint-visitor-keys "^3.3.0" 134 | 135 | array-union@^2.1.0: 136 | version "2.1.0" 137 | resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" 138 | integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== 139 | 140 | braces@^3.0.2: 141 | version "3.0.2" 142 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" 143 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== 144 | dependencies: 145 | fill-range "^7.0.1" 146 | 147 | builtin-modules@3.3.0: 148 | version "3.3.0" 149 | resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.3.0.tgz#cae62812b89801e9656336e46223e030386be7b6" 150 | integrity sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw== 151 | 152 | debug@^4.3.4: 153 | version "4.3.4" 154 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" 155 | integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== 156 | dependencies: 157 | ms "2.1.2" 158 | 159 | dir-glob@^3.0.1: 160 | version "3.0.1" 161 | resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" 162 | integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== 163 | dependencies: 164 | path-type "^4.0.0" 165 | 166 | esbuild-android-64@0.14.47: 167 | version "0.14.47" 168 | resolved "https://registry.yarnpkg.com/esbuild-android-64/-/esbuild-android-64-0.14.47.tgz#ef95b42c67bcf4268c869153fa3ad1466c4cea6b" 169 | integrity sha512-R13Bd9+tqLVFndncMHssZrPWe6/0Kpv2/dt4aA69soX4PRxlzsVpCvoJeFE8sOEoeVEiBkI0myjlkDodXlHa0g== 170 | 171 | esbuild-android-arm64@0.14.47: 172 | version "0.14.47" 173 | resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.14.47.tgz#4ebd7ce9fb250b4695faa3ee46fd3b0754ecd9e6" 174 | integrity sha512-OkwOjj7ts4lBp/TL6hdd8HftIzOy/pdtbrNA4+0oVWgGG64HrdVzAF5gxtJufAPOsEjkyh1oIYvKAUinKKQRSQ== 175 | 176 | esbuild-darwin-64@0.14.47: 177 | version "0.14.47" 178 | resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.14.47.tgz#e0da6c244f497192f951807f003f6a423ed23188" 179 | integrity sha512-R6oaW0y5/u6Eccti/TS6c/2c1xYTb1izwK3gajJwi4vIfNs1s8B1dQzI1UiC9T61YovOQVuePDcfqHLT3mUZJA== 180 | 181 | esbuild-darwin-arm64@0.14.47: 182 | version "0.14.47" 183 | resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.47.tgz#cd40fd49a672fca581ed202834239dfe540a9028" 184 | integrity sha512-seCmearlQyvdvM/noz1L9+qblC5vcBrhUaOoLEDDoLInF/VQ9IkobGiLlyTPYP5dW1YD4LXhtBgOyevoIHGGnw== 185 | 186 | esbuild-freebsd-64@0.14.47: 187 | version "0.14.47" 188 | resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.47.tgz#8da6a14c095b29c01fc8087a16cb7906debc2d67" 189 | integrity sha512-ZH8K2Q8/Ux5kXXvQMDsJcxvkIwut69KVrYQhza/ptkW50DC089bCVrJZZ3sKzIoOx+YPTrmsZvqeZERjyYrlvQ== 190 | 191 | esbuild-freebsd-arm64@0.14.47: 192 | version "0.14.47" 193 | resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.47.tgz#ad31f9c92817ff8f33fd253af7ab5122dc1b83f6" 194 | integrity sha512-ZJMQAJQsIOhn3XTm7MPQfCzEu5b9STNC+s90zMWe2afy9EwnHV7Ov7ohEMv2lyWlc2pjqLW8QJnz2r0KZmeAEQ== 195 | 196 | esbuild-linux-32@0.14.47: 197 | version "0.14.47" 198 | resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.14.47.tgz#de085e4db2e692ea30c71208ccc23fdcf5196c58" 199 | integrity sha512-FxZOCKoEDPRYvq300lsWCTv1kcHgiiZfNrPtEhFAiqD7QZaXrad8LxyJ8fXGcWzIFzRiYZVtB3ttvITBvAFhKw== 200 | 201 | esbuild-linux-64@0.14.47: 202 | version "0.14.47" 203 | resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.14.47.tgz#2a9321bbccb01f01b04cebfcfccbabeba3658ba1" 204 | integrity sha512-nFNOk9vWVfvWYF9YNYksZptgQAdstnDCMtR6m42l5Wfugbzu11VpMCY9XrD4yFxvPo9zmzcoUL/88y0lfJZJJw== 205 | 206 | esbuild-linux-arm64@0.14.47: 207 | version "0.14.47" 208 | resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.47.tgz#b9da7b6fc4b0ca7a13363a0c5b7bb927e4bc535a" 209 | integrity sha512-ywfme6HVrhWcevzmsufjd4iT3PxTfCX9HOdxA7Hd+/ZM23Y9nXeb+vG6AyA6jgq/JovkcqRHcL9XwRNpWG6XRw== 210 | 211 | esbuild-linux-arm@0.14.47: 212 | version "0.14.47" 213 | resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.14.47.tgz#56fec2a09b9561c337059d4af53625142aded853" 214 | integrity sha512-ZGE1Bqg/gPRXrBpgpvH81tQHpiaGxa8c9Rx/XOylkIl2ypLuOcawXEAo8ls+5DFCcRGt/o3sV+PzpAFZobOsmA== 215 | 216 | esbuild-linux-mips64le@0.14.47: 217 | version "0.14.47" 218 | resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.47.tgz#9db21561f8f22ed79ef2aedb7bbef082b46cf823" 219 | integrity sha512-mg3D8YndZ1LvUiEdDYR3OsmeyAew4MA/dvaEJxvyygahWmpv1SlEEnhEZlhPokjsUMfRagzsEF/d/2XF+kTQGg== 220 | 221 | esbuild-linux-ppc64le@0.14.47: 222 | version "0.14.47" 223 | resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.47.tgz#dc3a3da321222b11e96e50efafec9d2de408198b" 224 | integrity sha512-WER+f3+szmnZiWoK6AsrTKGoJoErG2LlauSmk73LEZFQ/iWC+KhhDsOkn1xBUpzXWsxN9THmQFltLoaFEH8F8w== 225 | 226 | esbuild-linux-riscv64@0.14.47: 227 | version "0.14.47" 228 | resolved "https://registry.yarnpkg.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.47.tgz#9bd6dcd3dca6c0357084ecd06e1d2d4bf105335f" 229 | integrity sha512-1fI6bP3A3rvI9BsaaXbMoaOjLE3lVkJtLxsgLHqlBhLlBVY7UqffWBvkrX/9zfPhhVMd9ZRFiaqXnB1T7BsL2g== 230 | 231 | esbuild-linux-s390x@0.14.47: 232 | version "0.14.47" 233 | resolved "https://registry.yarnpkg.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.47.tgz#a458af939b52f2cd32fc561410d441a51f69d41f" 234 | integrity sha512-eZrWzy0xFAhki1CWRGnhsHVz7IlSKX6yT2tj2Eg8lhAwlRE5E96Hsb0M1mPSE1dHGpt1QVwwVivXIAacF/G6mw== 235 | 236 | esbuild-netbsd-64@0.14.47: 237 | version "0.14.47" 238 | resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.47.tgz#6388e785d7e7e4420cb01348d7483ab511b16aa8" 239 | integrity sha512-Qjdjr+KQQVH5Q2Q1r6HBYswFTToPpss3gqCiSw2Fpq/ua8+eXSQyAMG+UvULPqXceOwpnPo4smyZyHdlkcPppQ== 240 | 241 | esbuild-openbsd-64@0.14.47: 242 | version "0.14.47" 243 | resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.47.tgz#309af806db561aa886c445344d1aacab850dbdc5" 244 | integrity sha512-QpgN8ofL7B9z8g5zZqJE+eFvD1LehRlxr25PBkjyyasakm4599iroUpaj96rdqRlO2ShuyqwJdr+oNqWwTUmQw== 245 | 246 | esbuild-plugin-wasm-pack@^1.1.0: 247 | version "1.1.0" 248 | resolved "https://registry.yarnpkg.com/esbuild-plugin-wasm-pack/-/esbuild-plugin-wasm-pack-1.1.0.tgz#7b1de60d56673f6eb1b7ec1789a25fe271ab473f" 249 | integrity sha512-iBjr8LVJvS6ygAx3+voRUXT+GEu6UfxhNDBSs72LIyCwekQVAhDmEusuVzS2dw93F4QzFdV3nXoCSLfk4vcylQ== 250 | 251 | esbuild-sunos-64@0.14.47: 252 | version "0.14.47" 253 | resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.47.tgz#3f19612dcdb89ba6c65283a7ff6e16f8afbf8aaa" 254 | integrity sha512-uOeSgLUwukLioAJOiGYm3kNl+1wJjgJA8R671GYgcPgCx7QR73zfvYqXFFcIO93/nBdIbt5hd8RItqbbf3HtAQ== 255 | 256 | esbuild-windows-32@0.14.47: 257 | version "0.14.47" 258 | resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.14.47.tgz#a92d279c8458d5dc319abcfeb30aa49e8f2e6f7f" 259 | integrity sha512-H0fWsLTp2WBfKLBgwYT4OTfFly4Im/8B5f3ojDv1Kx//kiubVY0IQunP2Koc/fr/0wI7hj3IiBDbSrmKlrNgLQ== 260 | 261 | esbuild-windows-64@0.14.47: 262 | version "0.14.47" 263 | resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.14.47.tgz#2564c3fcf0c23d701edb71af8c52d3be4cec5f8a" 264 | integrity sha512-/Pk5jIEH34T68r8PweKRi77W49KwanZ8X6lr3vDAtOlH5EumPE4pBHqkCUdELanvsT14yMXLQ/C/8XPi1pAtkQ== 265 | 266 | esbuild-windows-arm64@0.14.47: 267 | version "0.14.47" 268 | resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.47.tgz#86d9db1a22d83360f726ac5fba41c2f625db6878" 269 | integrity sha512-HFSW2lnp62fl86/qPQlqw6asIwCnEsEoNIL1h2uVMgakddf+vUuMcCbtUY1i8sst7KkgHrVKCJQB33YhhOweCQ== 270 | 271 | esbuild@0.14.47: 272 | version "0.14.47" 273 | resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.14.47.tgz#0d6415f6bd8eb9e73a58f7f9ae04c5276cda0e4d" 274 | integrity sha512-wI4ZiIfFxpkuxB8ju4MHrGwGLyp1+awEHAHVpx6w7a+1pmYIq8T9FGEVVwFo0iFierDoMj++Xq69GXWYn2EiwA== 275 | optionalDependencies: 276 | esbuild-android-64 "0.14.47" 277 | esbuild-android-arm64 "0.14.47" 278 | esbuild-darwin-64 "0.14.47" 279 | esbuild-darwin-arm64 "0.14.47" 280 | esbuild-freebsd-64 "0.14.47" 281 | esbuild-freebsd-arm64 "0.14.47" 282 | esbuild-linux-32 "0.14.47" 283 | esbuild-linux-64 "0.14.47" 284 | esbuild-linux-arm "0.14.47" 285 | esbuild-linux-arm64 "0.14.47" 286 | esbuild-linux-mips64le "0.14.47" 287 | esbuild-linux-ppc64le "0.14.47" 288 | esbuild-linux-riscv64 "0.14.47" 289 | esbuild-linux-s390x "0.14.47" 290 | esbuild-netbsd-64 "0.14.47" 291 | esbuild-openbsd-64 "0.14.47" 292 | esbuild-sunos-64 "0.14.47" 293 | esbuild-windows-32 "0.14.47" 294 | esbuild-windows-64 "0.14.47" 295 | esbuild-windows-arm64 "0.14.47" 296 | 297 | eslint-scope@^5.1.1: 298 | version "5.1.1" 299 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" 300 | integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== 301 | dependencies: 302 | esrecurse "^4.3.0" 303 | estraverse "^4.1.1" 304 | 305 | eslint-utils@^3.0.0: 306 | version "3.0.0" 307 | resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" 308 | integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== 309 | dependencies: 310 | eslint-visitor-keys "^2.0.0" 311 | 312 | eslint-visitor-keys@^2.0.0: 313 | version "2.1.0" 314 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" 315 | integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== 316 | 317 | eslint-visitor-keys@^3.3.0: 318 | version "3.3.0" 319 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" 320 | integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== 321 | 322 | esrecurse@^4.3.0: 323 | version "4.3.0" 324 | resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" 325 | integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== 326 | dependencies: 327 | estraverse "^5.2.0" 328 | 329 | estraverse@^4.1.1: 330 | version "4.3.0" 331 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" 332 | integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== 333 | 334 | estraverse@^5.2.0: 335 | version "5.3.0" 336 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" 337 | integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== 338 | 339 | fast-glob@^3.2.9: 340 | version "3.2.12" 341 | resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80" 342 | integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== 343 | dependencies: 344 | "@nodelib/fs.stat" "^2.0.2" 345 | "@nodelib/fs.walk" "^1.2.3" 346 | glob-parent "^5.1.2" 347 | merge2 "^1.3.0" 348 | micromatch "^4.0.4" 349 | 350 | fastq@^1.6.0: 351 | version "1.14.0" 352 | resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.14.0.tgz#107f69d7295b11e0fccc264e1fc6389f623731ce" 353 | integrity sha512-eR2D+V9/ExcbF9ls441yIuN6TI2ED1Y2ZcA5BmMtJsOkWOFRJQ0Jt0g1UwqXJJVAb+V+umH5Dfr8oh4EVP7VVg== 354 | dependencies: 355 | reusify "^1.0.4" 356 | 357 | fill-range@^7.0.1: 358 | version "7.0.1" 359 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" 360 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== 361 | dependencies: 362 | to-regex-range "^5.0.1" 363 | 364 | functional-red-black-tree@^1.0.1: 365 | version "1.0.1" 366 | resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" 367 | integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== 368 | 369 | glob-parent@^5.1.2: 370 | version "5.1.2" 371 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" 372 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== 373 | dependencies: 374 | is-glob "^4.0.1" 375 | 376 | globby@^11.1.0: 377 | version "11.1.0" 378 | resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" 379 | integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== 380 | dependencies: 381 | array-union "^2.1.0" 382 | dir-glob "^3.0.1" 383 | fast-glob "^3.2.9" 384 | ignore "^5.2.0" 385 | merge2 "^1.4.1" 386 | slash "^3.0.0" 387 | 388 | ignore@^5.2.0: 389 | version "5.2.4" 390 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" 391 | integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== 392 | 393 | is-extglob@^2.1.1: 394 | version "2.1.1" 395 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 396 | integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== 397 | 398 | is-glob@^4.0.1, is-glob@^4.0.3: 399 | version "4.0.3" 400 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" 401 | integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== 402 | dependencies: 403 | is-extglob "^2.1.1" 404 | 405 | is-number@^7.0.0: 406 | version "7.0.0" 407 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" 408 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 409 | 410 | lru-cache@^6.0.0: 411 | version "6.0.0" 412 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" 413 | integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== 414 | dependencies: 415 | yallist "^4.0.0" 416 | 417 | merge2@^1.3.0, merge2@^1.4.1: 418 | version "1.4.1" 419 | resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" 420 | integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== 421 | 422 | micromatch@^4.0.4: 423 | version "4.0.5" 424 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" 425 | integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== 426 | dependencies: 427 | braces "^3.0.2" 428 | picomatch "^2.3.1" 429 | 430 | moment@2.29.4: 431 | version "2.29.4" 432 | resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.4.tgz#3dbe052889fe7c1b2ed966fcb3a77328964ef108" 433 | integrity sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w== 434 | 435 | ms@2.1.2: 436 | version "2.1.2" 437 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 438 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 439 | 440 | obsidian@latest: 441 | version "1.1.1" 442 | resolved "https://registry.yarnpkg.com/obsidian/-/obsidian-1.1.1.tgz#7cce6f19a6dd1cc5ec7e9f7dff8ea3ceacf2e2c3" 443 | integrity sha512-GcxhsHNkPEkwHEjeyitfYNBcQuYGeAHFs1pEpZIv0CnzSfui8p8bPLm2YKLgcg20B764770B1sYGtxCvk9ptxg== 444 | dependencies: 445 | "@types/codemirror" "0.0.108" 446 | moment "2.29.4" 447 | 448 | path-type@^4.0.0: 449 | version "4.0.0" 450 | resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" 451 | integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== 452 | 453 | picomatch@^2.3.1: 454 | version "2.3.1" 455 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" 456 | integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== 457 | 458 | queue-microtask@^1.2.2: 459 | version "1.2.3" 460 | resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" 461 | integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== 462 | 463 | regexpp@^3.2.0: 464 | version "3.2.0" 465 | resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" 466 | integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== 467 | 468 | reusify@^1.0.4: 469 | version "1.0.4" 470 | resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" 471 | integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== 472 | 473 | run-parallel@^1.1.9: 474 | version "1.2.0" 475 | resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" 476 | integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== 477 | dependencies: 478 | queue-microtask "^1.2.2" 479 | 480 | semver@^7.3.7: 481 | version "7.3.8" 482 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" 483 | integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== 484 | dependencies: 485 | lru-cache "^6.0.0" 486 | 487 | slash@^3.0.0: 488 | version "3.0.0" 489 | resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" 490 | integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== 491 | 492 | to-regex-range@^5.0.1: 493 | version "5.0.1" 494 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" 495 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 496 | dependencies: 497 | is-number "^7.0.0" 498 | 499 | tslib@2.4.0: 500 | version "2.4.0" 501 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" 502 | integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== 503 | 504 | tslib@^1.8.1: 505 | version "1.14.1" 506 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" 507 | integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== 508 | 509 | tsutils@^3.21.0: 510 | version "3.21.0" 511 | resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" 512 | integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== 513 | dependencies: 514 | tslib "^1.8.1" 515 | 516 | typescript@4.7.4: 517 | version "4.7.4" 518 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.7.4.tgz#1a88596d1cf47d59507a1bcdfb5b9dfe4d488235" 519 | integrity sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ== 520 | 521 | yallist@^4.0.0: 522 | version "4.0.0" 523 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" 524 | integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== 525 | --------------------------------------------------------------------------------