Showing preview only (1,013K chars total). Download the full file or copy to clipboard to get everything.
Repository: czottmann/obsidian-actions-uri
Branch: main
Commit: 3228d8a8e694
Files: 205
Total size: 947.9 KB
Directory structure:
gitextract_9irawtlb/
├── .beans/
│ ├── auri-14wv--milestone-160.md
│ ├── auri-2nvq--milestone-153.md
│ ├── auri-48pt--milestone-170.md
│ ├── auri-7bdl--milestone-173.md
│ ├── auri-b61p--milestone-190.md
│ ├── auri-civ4--milestone-163.md
│ ├── auri-fzy4--milestone-171.md
│ ├── auri-p05h--milestone-164.md
│ ├── auri-plwy--milestone-172.md
│ ├── auri-q7z3--milestone-150.md
│ ├── auri-qz7a--milestone-183.md
│ ├── auri-slfp--milestone-162.md
│ ├── auri-ujej--milestone-181.md
│ ├── auri-vp9j--milestone-161.md
│ ├── zco-1156--change-appending-below-headline-to-redefine-headline-section.md
│ ├── zco-1182--using-if-exists-skip-and-silent-false-in-note-create-does-no.md
│ ├── zco-120--research-obsidian-sync-behaviour-re-plugins-and-startup-prio.md
│ ├── zco-1201--checking-for-the-existence-of-a-missing-note-from-afo-should.md
│ ├── zco-1239--fix-note-create-if-exists-skip-not-being-honored-for-periodi.md
│ ├── zco-1348--check-reports-of-note-properties-set-overwriting-existing-ke.md
│ ├── zco-1496--research-user-report-about-note-get-diverging-wrongly-when-f.md
│ ├── zco-1541--research-obsidian-1-10-ios-not-returning-xcu-calls.md
│ ├── zco-166--set-up-a-testing-framework.md
│ ├── zco-276--allow-relative-path-input-for-templates-templater-related-pa.md
│ ├── zco-341--add-note-touch-route.md
│ ├── zco-397--make-x-parameters-optional-in-command-execute-route.md
│ ├── zco-398--create-route-for-getting-currently-focussed-note.md
│ ├── zco-409--create-route-for-getting-currently-focussed-file.md
│ ├── zco-410--create-route-for-getting-note-by-name.md
│ ├── zco-423--add-feature-to-auto-install-new-version.md
│ ├── zco-424--release-v1-5-0.md
│ ├── zco-429--revamp-the-returning-of-errors-to-pick-from-a-fixed-list-of-.md
│ ├── zco-455--add-obsidian-note-uri-to-note-result-objects.md
│ ├── zco-480--add-2nd-level-check-to-template-file-parameter.md
│ ├── zco-563--remove-use-of-global-app-from-plugin.md
│ ├── zco-588--fix-api-calls-not-reaching-actions-uri-when-vault-needs-to-o.md
│ ├── zco-606--search-and-replace-string-with-special-character.md
│ ├── zco-613--add-periodic-note-support-to-note-properties.md
│ ├── zco-616--research-uid-support-in-actions-id.md
│ ├── zco-617--implement-zod-magic-to-streamline-targeting-a-note-using-fil.md
│ ├── zco-623--removing-the-last-property-key-from-fm-results-in-fm-of.md
│ ├── zco-624--replace-use-of-self-now-that-all-handlers-are-bound-to-this.md
│ ├── zco-625--add-pn-support-to-note-list.md
│ ├── zco-626--add-support-for-getting-most-recent-pn-to-note-open-note-get.md
│ ├── zco-627--when-creating-a-note-during-note-append-templater-s-watch-fo.md
│ ├── zco-628--lean-into-zod-s-transform-for-resolving-incoming-url-paramet.md
│ ├── zco-629--add-result-selection-to-note-get-active.md
│ ├── zco-630--add-create-headline-if-not-found-option-for-note-append-note.md
│ ├── zco-633--fix-note-create-in-1-6-0.md
│ ├── zco-634--fix-headline-block-append-prepend.md
│ ├── zco-636--fix-error-code-on-note-get-from-500-back-to-404-to-prevent-a.md
│ ├── zco-642--templater-path-parameter-doesn-t-work-as-assumed-intended.md
│ ├── zco-645--replace-vault-modify-w-vault-process-to-prevent-race-conditi.md
│ ├── zco-651--add-debugging-info-output-to-settings-page.md
│ ├── zco-692--insert-below-headline-fails-if-the-headline-is-the-last-line.md
│ ├── zco-694--add-optional-logging-to-file.md
│ ├── zco-695--fix-empty-note-when-trying-to-append-prepend-content-to-non-.md
│ ├── zco-707--check-plugin-against-new-obsidian-guidelines.md
│ ├── zco-918--make-dataview-list-result-consistent.md
│ ├── zco-937--opening-a-note-in-another-vault-only-opens-the-requested-vau.md
│ ├── zco-976--fix-wonky-frontmatter-parser.md
│ ├── zco-977--remove-dedicated-periodic-note-related-routes.md
│ ├── zco-985--dataview-list-results-return-unexpected-nested-array.md
│ └── zco-987--fix-periodic-notes-coming-out-raw-when-using-templater.md
├── .beans.yml
├── .editorconfig
├── .eslintignore
├── .eslintrc
├── .github/
│ ├── FUNDING.yml
│ └── workflows/
│ └── release.yml
├── .gitignore
├── .mise.toml
├── .npmrc
├── .prettierrc
├── AGENTS.md
├── CHANGELOG.md
├── LICENSE.md
├── README.md
├── bin/
│ ├── prepare-route-docs.sh
│ └── tag-release.fish
├── docs/
│ ├── 404.md
│ ├── _config.yml
│ ├── _includes/
│ │ └── head_custom.html
│ ├── anatomy.md
│ ├── callbacks.md
│ ├── changes.md
│ ├── faq.md
│ ├── index.md
│ ├── installation.md
│ ├── license.md
│ ├── parameters.md
│ ├── routes/
│ │ ├── command.md
│ │ ├── dataview.md
│ │ ├── file.md
│ │ ├── folder.md
│ │ ├── info.md
│ │ ├── note-properties.md
│ │ ├── note.md
│ │ ├── omnisearch.md
│ │ ├── root.md
│ │ ├── search.md
│ │ ├── tags.md
│ │ └── vault.md
│ └── routes.md
├── esbuild.config.mjs
├── jest.config.js
├── manifest.json
├── package.json
├── src/
│ ├── constants.ts
│ ├── main.ts
│ ├── plugin-info.json
│ ├── plugin-info.ts
│ ├── routes/
│ │ ├── command.ts
│ │ ├── dataview.ts
│ │ ├── file.ts
│ │ ├── folder.ts
│ │ ├── info.ts
│ │ ├── note/
│ │ │ └── create.ts
│ │ ├── note-properties.ts
│ │ ├── note.ts
│ │ ├── omnisearch.ts
│ │ ├── root.ts
│ │ ├── search.ts
│ │ ├── settings.ts
│ │ ├── tags.ts
│ │ └── vault.ts
│ ├── routes.ts
│ ├── schemata.ts
│ ├── settings.ts
│ ├── types/
│ │ ├── handlers.d.ts
│ │ ├── obsidian-objects.d.ts
│ │ ├── plugins.d.ts
│ │ └── results.d.ts
│ ├── types.d.ts
│ └── utils/
│ ├── callbacks.ts
│ ├── file-handling.ts
│ ├── parameters.ts
│ ├── periodic-notes-handling.ts
│ ├── plugins.ts
│ ├── results-handling.ts
│ ├── routing.ts
│ ├── search.ts
│ ├── self.ts
│ ├── string-handling.ts
│ ├── time.ts
│ ├── ui.ts
│ └── zod.ts
├── tests/
│ ├── README.md
│ ├── callback-server.ts
│ ├── global-setup.ts
│ ├── global-teardown.ts
│ ├── helpers.ts
│ ├── periodic-notes.ts
│ ├── plugin-test-vault.original/
│ │ ├── .obsidian/
│ │ │ ├── app.json
│ │ │ ├── appearance.json
│ │ │ ├── community-plugins.json
│ │ │ ├── core-plugins.json
│ │ │ ├── graph.json
│ │ │ ├── plugins/
│ │ │ │ ├── actions-uri/
│ │ │ │ │ └── manifest.json
│ │ │ │ ├── auto-periodic-notes/
│ │ │ │ │ ├── data.json
│ │ │ │ │ ├── main.js
│ │ │ │ │ └── manifest.json
│ │ │ │ ├── logstravaganza/
│ │ │ │ │ ├── data.json
│ │ │ │ │ ├── main.js
│ │ │ │ │ └── manifest.json
│ │ │ │ ├── periodic-notes/
│ │ │ │ │ ├── data.json
│ │ │ │ │ ├── main.js
│ │ │ │ │ ├── manifest.json
│ │ │ │ │ └── styles.css
│ │ │ │ └── templater-obsidian/
│ │ │ │ ├── main.js
│ │ │ │ ├── manifest.json
│ │ │ │ └── styles.css
│ │ │ └── workspace.json
│ │ ├── 2024.md
│ │ ├── 2025-04.md
│ │ ├── 2025-05-18.md
│ │ ├── 2025-Q1.md
│ │ ├── 2025-W20.md
│ │ ├── Welcome.md
│ │ ├── _templates/
│ │ │ ├── Daily Note.md
│ │ │ ├── Monthly Note.md
│ │ │ ├── Quarterly Note.md
│ │ │ ├── Weekly Note.md
│ │ │ └── Yearly Note.md
│ │ ├── any/
│ │ │ └── standard-parameters.test.ts
│ │ └── note/
│ │ ├── append/
│ │ │ └── noteAppend.test.ts
│ │ ├── create/
│ │ │ └── noteCreate.test.ts
│ │ ├── delete/
│ │ │ └── noteDelete.test.ts
│ │ ├── get/
│ │ │ ├── note-1.md
│ │ │ └── noteGet.test.ts
│ │ ├── get-active/
│ │ │ └── noteGetActive.test.ts
│ │ ├── get-first-named/
│ │ │ └── noteGetFirstNamed.test.ts
│ │ ├── list/
│ │ │ └── noteList.test.ts
│ │ ├── open/
│ │ │ ├── note-1.md
│ │ │ ├── note-2.md
│ │ │ └── noteOpen.test.ts
│ │ ├── prepend/
│ │ │ └── notePrepend.test.ts
│ │ ├── rename/
│ │ │ └── noteRename.test.ts
│ │ ├── search-regex-and-replace/
│ │ │ └── noteSearchRegexAndReplace.test.ts
│ │ ├── search-string-and-replace/
│ │ │ └── noteSearchStringAndReplace.test.ts
│ │ ├── touch/
│ │ │ └── noteTouch.test.ts
│ │ └── trash/
│ │ └── noteTrash.test.ts
│ └── types.d.ts
├── tsconfig.json
└── versions.json
================================================
FILE CONTENTS
================================================
================================================
FILE: .beans/auri-14wv--milestone-160.md
================================================
---
# auri-14wv
title: "Milestone 1.6.0"
status: completed
type: milestone
tags:
- from-linear
created_at: 2024-02-19T15:21:54.408Z
updated_at: 2024-07-29T08:48:01.589Z
---
[Release 1.6.0 · czottmann/obsidian-actions-uri](https://github.com/czottmann/obsidian-actions-uri/releases/tag/1.6.0)
---
## Linear Metadata
- **Linear Milestone ID**: 17bac8e0-179e-429d-b308-9960e4106fb3
- **Project**: Actions URI
- **Target Date**: 2024-07-23
================================================
FILE: .beans/auri-2nvq--milestone-153.md
================================================
---
# auri-2nvq
title: "Milestone 1.5.3"
status: completed
type: milestone
tags:
- from-linear
created_at: 2024-06-18T14:43:02.062Z
updated_at: 2024-07-23T16:10:44.256Z
---
[Release 1.5.3 · czottmann/obsidian-actions-uri](https://github.com/czottmann/obsidian-actions-uri/releases/tag/1.5.3)
---
## Linear Metadata
- **Linear Milestone ID**: 1bcf266a-3c0e-47de-b71d-13997fa08191
- **Project**: Actions URI
- **Target Date**: 2024-06-18
================================================
FILE: .beans/auri-48pt--milestone-170.md
================================================
---
# auri-48pt
title: "Milestone 1.7.0"
status: completed
type: milestone
tags:
- from-linear
created_at: 2024-07-23T16:09:54.114Z
updated_at: 2025-02-10T09:40:19.870Z
---
* [Release: Actions URI 1.7.0 - Carlo's Obsidian Plugins - ActionsDotWork Forum](https://forum.actions.work/t/release-actions-uri-1-7-0/579)
* [Release 1.7.0 · czottmann/obsidian-actions-uri](https://github.com/czottmann/obsidian-actions-uri/releases/tag/1.7.0)
---
## Linear Metadata
- **Linear Milestone ID**: a9bd6114-1b01-434d-b2da-3e8915372e52
- **Project**: Actions URI
- **Target Date**: 2025-01-30
================================================
FILE: .beans/auri-7bdl--milestone-173.md
================================================
---
# auri-7bdl
title: "Milestone 1.7.3"
status: completed
type: milestone
tags:
- from-linear
created_at: 2025-04-30T10:57:45.630Z
updated_at: 2025-05-21T13:45:17.739Z
---
[Release 1.7.3 · czottmann/obsidian-actions-uri](https://github.com/czottmann/obsidian-actions-uri/releases/tag/1.7.3)
---
## Linear Metadata
- **Linear Milestone ID**: 5b1ab6bf-80ac-4eb0-bd5d-a18bac09f5e2
- **Project**: Actions URI
- **Target Date**: 2025-04-30
================================================
FILE: .beans/auri-b61p--milestone-190.md
================================================
---
# auri-b61p
title: "Milestone 1.9.0"
status: completed
type: milestone
tags:
- from-linear
created_at: 2025-05-19T16:45:38.505Z
updated_at: 2025-05-19T16:45:38.505Z
---
## Linear Metadata
- **Linear Milestone ID**: 24a7f3df-5e88-43ed-b3cf-23f2c55018a9
- **Project**: Actions URI
================================================
FILE: .beans/auri-civ4--milestone-163.md
================================================
---
# auri-civ4
title: "Milestone 1.6.3"
status: completed
type: milestone
tags:
- from-linear
created_at: 2024-08-02T09:13:12.494Z
updated_at: 2024-09-20T07:53:52.870Z
---
* [Release: Actions URI 1.6.3 - Carlo's Obsidian Plugins - ActionsDotWork Forum](https://forum.actions.work/t/release-actions-uri-1-6-3/440)
* [Release 1.6.3 · czottmann/obsidian-actions-uri](https://github.com/czottmann/obsidian-actions-uri/releases/tag/1.6.3)
---
## Linear Metadata
- **Linear Milestone ID**: cf976b09-6b3b-484b-89ea-bd4fa9a1e08b
- **Project**: Actions URI
- **Target Date**: 2024-08-02
================================================
FILE: .beans/auri-fzy4--milestone-171.md
================================================
---
# auri-fzy4
title: "Milestone 1.7.1"
status: completed
type: milestone
tags:
- from-linear
created_at: 2025-02-04T11:49:30.090Z
updated_at: 2025-02-10T09:40:07.055Z
---
* [Release: Actions URI 1.7.1 - Carlo's Obsidian Plugins - ActionsDotWork Forum](https://forum.actions.work/t/release-actions-uri-1-7-1/582)
* [Release 1.7.1 · czottmann/obsidian-actions-uri](https://github.com/czottmann/obsidian-actions-uri/releases/tag/1.7.1)
---
## Linear Metadata
- **Linear Milestone ID**: 2e88d5a2-22e3-4ebe-9573-12d057825551
- **Project**: Actions URI
- **Target Date**: 2025-02-04
================================================
FILE: .beans/auri-p05h--milestone-164.md
================================================
---
# auri-p05h
title: "Milestone 1.6.4"
status: completed
type: milestone
tags:
- from-linear
created_at: 2024-09-20T07:53:27.424Z
updated_at: 2025-02-10T09:39:34.502Z
---
[Release 1.6.4 · czottmann/obsidian-actions-uri](https://github.com/czottmann/obsidian-actions-uri/releases/tag/1.7.2)
---
## Linear Metadata
- **Linear Milestone ID**: bcdff61e-6250-4bc0-a53e-058a7205202c
- **Project**: Actions URI
- **Target Date**: 2024-09-20
================================================
FILE: .beans/auri-plwy--milestone-172.md
================================================
---
# auri-plwy
title: "Milestone 1.7.2"
status: completed
type: milestone
tags:
- from-linear
created_at: 2025-02-10T09:14:54.942Z
updated_at: 2025-02-10T09:38:46.562Z
---
[Release 1.7.2 · czottmann/obsidian-actions-uri](https://github.com/czottmann/obsidian-actions-uri/releases/tag/1.7.2)
---
## Linear Metadata
- **Linear Milestone ID**: af1e8918-a9cb-419f-a756-cc921fc64299
- **Project**: Actions URI
- **Target Date**: 2025-02-10
================================================
FILE: .beans/auri-q7z3--milestone-150.md
================================================
---
# auri-q7z3
title: "Milestone 1.5.0"
status: completed
type: milestone
tags:
- from-linear
created_at: 2024-02-27T12:24:05.162Z
updated_at: 2024-02-27T12:24:56.953Z
---
## Linear Metadata
- **Linear Milestone ID**: c19a867c-64a6-4600-98b2-552ef45b6676
- **Project**: Actions URI
- **Target Date**: 2024-02-19
================================================
FILE: .beans/auri-qz7a--milestone-183.md
================================================
---
# auri-qz7a
title: "Milestone 1.8.3"
status: completed
type: milestone
tags:
- from-linear
created_at: 2025-06-06T17:02:21.713Z
updated_at: 2025-08-05T13:30:44.463Z
---
[Release 1.8.3 · czottmann/obsidian-actions-uri](https://github.com/czottmann/obsidian-actions-uri/releases/tag/1.8.3)
1.8.2 had build issues, thus: instant update to 1.8.3.
---
## Linear Metadata
- **Linear Milestone ID**: 467d1891-8978-4877-8abb-a5c897d353e3
- **Project**: Actions URI
- **Target Date**: 2025-08-05
================================================
FILE: .beans/auri-slfp--milestone-162.md
================================================
---
# auri-slfp
title: "Milestone 1.6.2"
status: completed
type: milestone
tags:
- from-linear
created_at: 2024-07-29T08:47:17.519Z
updated_at: 2024-07-29T15:51:39.784Z
---
[Release 1.6.2 · czottmann/obsidian-actions-uri](https://github.com/czottmann/obsidian-actions-uri/releases/tag/1.6.2)
---
## Linear Metadata
- **Linear Milestone ID**: 721530d3-1b2b-4e6f-9dde-fa4a3b361f43
- **Project**: Actions URI
- **Target Date**: 2024-07-29
================================================
FILE: .beans/auri-ujej--milestone-181.md
================================================
---
# auri-ujej
title: "Milestone 1.8.1"
status: completed
type: milestone
tags:
- from-linear
created_at: 2025-01-30T11:24:03.869Z
updated_at: 2025-06-06T17:04:32.669Z
---
[Release 1.8.1 · czottmann/obsidian-actions-uri](https://github.com/czottmann/obsidian-actions-uri/releases/tag/1.8.1)
1.8.0 had smaller issues, thus: instant update to 1.8.1.
---
## Linear Metadata
- **Linear Milestone ID**: 7f5972b5-aa64-4f4c-872b-738868437f7b
- **Project**: Actions URI
- **Target Date**: 2025-05-22
================================================
FILE: .beans/auri-vp9j--milestone-161.md
================================================
---
# auri-vp9j
title: "Milestone 1.6.1"
status: completed
type: milestone
tags:
- from-linear
created_at: 2024-07-25T07:26:24.807Z
updated_at: 2024-07-29T08:48:06.228Z
---
[Release 1.6.1 · czottmann/obsidian-actions-uri](https://github.com/czottmann/obsidian-actions-uri/releases/tag/1.6.1)
---
## Linear Metadata
- **Linear Milestone ID**: 53d545b1-6076-44d7-8556-6eeac55a8b86
- **Project**: Actions URI
- **Target Date**: 2024-07-25
================================================
FILE: .beans/zco-1156--change-appending-below-headline-to-redefine-headline-section.md
================================================
---
# zco-1156
title: "Change appending below headline to redefine \"headline section\" as, say, H2 to next H2"
status: in-progress
type: task
parent: auri-b61p
tags:
- from-linear
created_at: 2025-04-17T14:34:01.592Z
updated_at: 2025-05-19T16:45:38.570Z
---
## Linear Metadata
- **Linear**: [ZCO-1156](https://linear.app/actionsdotwork/issue/ZCO-1156)
- **Project**: Actions URI
- **Milestone**: 1.9.0
- **Branch**: \`feature/zco-1156-change-appending-below-headline-to-redefine-headline-section\`
---
Currently, appending below a headline assumes a "headline section" goes from the start of that headline right up to the beginning of the next headline – **any** headline. So if you have a H3 which is immediately followed by a H4, the H3 "section" goes from the beginning of the H3 right up to the following H4. There is no semantic analysis like *"H4 follows H3 therefore it's part of the H3 section"*. I've opted for the simple rule *"from headline to next headline"* which is easily explained.
Some customers are confused because they expect a "H2 section" to go from that H2 to the next H2 (or EOF, whatever comes first), and right now it doesn't.
If you implement that, mark it as "breaking change".
================================================
FILE: .beans/zco-1182--using-if-exists-skip-and-silent-false-in-note-create-does-no.md
================================================
---
# zco-1182
title: "Using `if-exists=skip` and `silent=false` in `/note/create` does not open the note in Obsidian"
status: completed
type: bug
parent: auri-7bdl
tags:
- from-linear
created_at: 2025-04-30T10:58:31.209Z
updated_at: 2025-04-30T11:15:03.656Z
---
## Linear Metadata
- **Linear**: [ZCO-1182](https://linear.app/actionsdotwork/issue/ZCO-1182)
- **Project**: Actions URI
- **Milestone**: 1.7.3
- **Branch**: \`feature/zco-1182-using-if-existsskip-and-silentfalse-in-notecreate-does-not\`
---
Basically the issue is that if that note already exists, the plugin fails to resolve the parameter `file=abc` into the file path `abc.md`.
---
## Linked Commits
- [`2db7ad0`](https://github.com/czottmann/obsidian-actions-uri/commit/2db7ad0e1dc51a81e4d7cb21d7b853a5adf54b63) — [NEW] Adds 1.7.3
- [`0f05d58`](https://github.com/czottmann/obsidian-actions-uri/commit/0f05d584daa7e05d577b28b3cd6af30ef7d04821) — [FIX] Adds missing resolving of input file path
================================================
FILE: .beans/zco-120--research-obsidian-sync-behaviour-re-plugins-and-startup-prio.md
================================================
---
# zco-120
title: "Research Obsidian Sync behaviour re plugins and startup priority"
status: todo
type: task
tags:
- from-linear
- research
created_at: 2023-09-17T13:45:40.298Z
updated_at: 2025-05-19T10:41:29.198Z
---
## Linear Metadata
- **Linear**: [ZCO-120](https://linear.app/actionsdotwork/issue/ZCO-120)
- **Project**: Actions URI
- **Branch**: \`feature/zco-120-research-obsidian-sync-behaviour-re-plugins-and-startup\`
---
[https://discord.com/channels/686053708261228577/840286264964022302/1073620746888298577](https://discord.com/channels/686053708261228577/840286264964022302/1073620746888298577) ff.
Licat:
* Obsidian Sync doesn't run before other plugins
* `app.internalPlugins.getPluginById('sync').instance.getStatus()` gets you the following: `'synced' | 'syncing' | 'error' | 'paused'` (make sure that `getPluginById()` doesn't return you `null`)
* "Probably consider it working only when that gives you `'syncing' | 'error'`"
================================================
FILE: .beans/zco-1201--checking-for-the-existence-of-a-missing-note-from-afo-should.md
================================================
---
# zco-1201
title: "Checking for the existence of a missing note (from AFO) should not pop up an error toast"
status: completed
type: task
parent: auri-ujej
tags:
- from-linear
created_at: 2025-05-07T14:11:55.620Z
updated_at: 2025-06-03T11:36:58.049Z
---
## Linear Metadata
- **Linear**: [ZCO-1201](https://linear.app/actionsdotwork/issue/ZCO-1201)
- **Project**: Actions URI
- **Milestone**: 1.8.1
- **Branch**: \`feature/zco-1201-checking-for-the-existence-of-a-missing-note-from-afo-should\`
---
From [https://secure.helpscout.net/conversation/2926508265/742?viewId=7423769](https://secure.helpscout.net/conversation/2926508265/742?viewId=7423769): > I run a \`Check for existence of note\` action. It works as expected on the shortcut side, but I get an alert on the Obsidian vault (screenshot below). I know the note won't exist on first run, but just checking for its existence, an alert/popup is displayed, which is seen as an error. **Idea:** Introduce some sort of `showToast` parameter which defaults to `true`, but if it's set to `false`, do not pop up any toasts.  
---
## Linked Commits
- [`c325ec6`](https://github.com/czottmann/Actions-For-Obsidian/commit/c325ec6dbf4fffd84a21a1e91288c4827f53ef47) — [NEW] Implements new ActionsURI "hide-ui-notice-on-error" parameter
- [`4a9edb9`](https://github.com/czottmann/obsidian-actions-uri/commit/4a9edb974aa1c5f8d8f4e0a6a822d2ed203999b0) — [NEW] Adds optional standard parameter "hide-ui-notice-on-error"
================================================
FILE: .beans/zco-1239--fix-note-create-if-exists-skip-not-being-honored-for-periodi.md
================================================
---
# zco-1239
title: "Fix `/note/create?…&if-exists=skip` not being honored for periodic notes"
status: scrapped
type: bug
tags:
- from-linear
created_at: 2025-06-04T16:14:33.360Z
updated_at: 2025-06-05T14:35:12.700Z
---
## Linear Metadata
- **Linear**: [ZCO-1239](https://linear.app/actionsdotwork/issue/ZCO-1239)
- **Project**: Actions URI
- **Branch**: \`feature/zco-1239-fix-notecreateif-existsskip-not-being-honored-for-periodic\`
---
[Weekly Note File Name mismatch · Issue #101 · czottmann/obsidian-actions-uri](https://github.com/czottmann/obsidian-actions-uri/issues/101)
---
## Progress
### 2025-06-05 (Carlo Zottmann)
> Not a bug but the user misunderstanding the date format in the Periodic Notes plugin.
================================================
FILE: .beans/zco-1348--check-reports-of-note-properties-set-overwriting-existing-ke.md
================================================
---
# zco-1348
title: "Check reports of `/note-properties/set` overwriting existing keys"
status: completed
type: bug
parent: auri-qz7a
tags:
- from-linear
created_at: 2025-08-04T08:10:05.209Z
updated_at: 2025-08-05T10:00:12.450Z
---
## Linear Metadata
- **Linear**: [ZCO-1348](https://linear.app/actionsdotwork/issue/ZCO-1348)
- **Project**: Actions URI
- **Milestone**: 1.8.3
- **Branch**: \`feature/zco-1348-check-reports-of-note-propertiesset-overwriting-existing\`
---
[https://phanpy.social/#/norden.social/s/114964623532850832?view=full](https://phanpy.social/#/norden.social/s/114964623532850832?view=full) > Moin, ich glaube, ich bin ggf. über einen Bug in AFO gestolpert. Obwohl bei der Aktion "Set properties" "add new keys, update existing" ausgewählt ist, löscht er bestehende, andere properties. > >  > > Vorher: > >  > > Nachher: > >  > > Frontmatter: > > ``` > --- > tags: > - journal/daily > datum: 2025-08-04 > arbeitstag: true > weekly: "[[2025-W32]]" > monthly: "[[2025-08-M]]" > yearly: "[[2025-Y]]" > titel: "%%titel%%" > mood: "%%laune%%" > ort: > - Gießen > --- > ```
---
## Linked Commits
- [`dfe5c80`](https://github.com/czottmann/obsidian-actions-uri/commit/dfe5c805b0d6d7fd56a58c72e312718c3eda636b) — [FIX] Update FM using Obs' own `processFrontMatter()` now
---
## Progress
### 2025-08-05 (Carlo Zottmann)
> I've replaced my own naïve implementation with Obsidian's own `processFrontMatter()` ([processFrontMatter - Developer Documentation](https://docs.obsidian.md/Reference/TypeScript+API/FileManager/processFrontMatter)).
================================================
FILE: .beans/zco-1496--research-user-report-about-note-get-diverging-wrongly-when-f.md
================================================
---
# zco-1496
title: "Research user report about `/note/get`diverging wrongly when fetching current and most recent PN"
status: todo
type: bug
parent: auri-b61p
tags:
- from-linear
- forum
created_at: 2025-09-24T09:15:03.636Z
updated_at: 2025-10-07T15:34:11.035Z
---
## Linear Metadata
- **Linear**: [ZCO-1496](https://linear.app/actionsdotwork/issue/ZCO-1496)
- **Project**: Actions URI
- **Milestone**: 1.9.0
- **Branch**: \`feature/zco-1496-research-user-report-about-notegetdiverging-wrongly-when\`
---
Customer has issues with correctly (?) configured weekly PN – sounds like \[`/note/get`\]([https://zottmann.dev/obsidian-actions-uri/routes/note/#noteget](https://zottmann.dev/obsidian-actions-uri/routes/note/#noteget)) is returning different results:
The "most recent" is fetched by calling `getAllWeeklyNotes()` in Liam's plugin, then [returning the most recent one from that list](https://github.com/czottmann/obsidian-actions-uri/blob/release/1.8.x/src/utils/periodic-notes-handling.ts#L94-L102). The "current", too, is calling `getAllWeeklyNotes()` but additionally specifying a timestamp for which a note should be returned ([Actions URI is passing the current time, there](https://github.com/czottmann/obsidian-actions-uri/blob/release/1.8.x/src/utils/periodic-notes-handling.ts#L112-L113)). So both are querying the same data source (good) but one is returning faulty results (bad).
I don't see anything in the **obsidian-daily-notes-interface** plugin that'd cause such a discrepancy, tho:
[obsidian-daily-notes-interface/src/weekly.ts at main · liamcain/obsidian-daily-notes-interface](https://github.com/liamcain/obsidian-daily-notes-interface/blob/main/src/weekly.ts#L87-L92)
---
## Progress
### 2025-10-07 (Carlo Zottmann)
> The syntax `MM-DD` works differently in the Periodic Notes plugin and the aforementioned package that Actions URI is using to resolve the periodic notes. In the Periodic Note plugin, it means *“first day of the week (Sunday or Monday, depending on your settings)”*.
>
> In the the [**liamcain/obsidian-daily-notes-interface** npm package](https://github.com/liamcain/obsidian-daily-notes-interface) (again: same author as Periodic Notes itself!) the format is parsed [in the “correct” way, i.e. the same way it works anywhere in Obsidian and everywhere else](https://momentjs.com/docs/#/displaying/format/): `DD` is the current day of the month.
>
> That means the “current weekly note” request in AFO worked well for me yesterday (a Monday, i.e. start of the week), and both Periodic Notes and the developer-focussed obsidian-daily-notes-interface resolved `YYYY/MM/gggg-[W]ww (MM-DD)` to `2025/10/2025-W41 (10-06).md`. But today it’s broken again, since Periodic Notes still returns the same computed path as yesterday while obsidian-daily-notes-interface resolves it to `2025/10/2025-W41 (10-07).md`.
>
> Might need to fork and fix [liamcain/obsidian-daily-notes-interface: Package to create, open, and find daily notes from your Obsidian plugin](https://github.com/liamcain/obsidian-daily-notes-interface). 🫤
================================================
FILE: .beans/zco-1541--research-obsidian-1-10-ios-not-returning-xcu-calls.md
================================================
---
# zco-1541
title: "Research Obsidian 1.10 (iOS) not returning XCU calls"
status: in-progress
type: task
tags:
- from-linear
- ios-only
created_at: 2025-10-27T16:12:43.459Z
updated_at: 2025-12-12T11:45:36.676Z
---
## Linear Metadata
- **Linear**: [ZCO-1541](https://linear.app/actionsdotwork/issue/ZCO-1541)
- **Project**: Actions URI
- **Branch**: \`feature/zco-1541-research-obsidian-110-ios-not-returning-xcu-calls\`
---
* [Obsidian Mobile Insider Build 1.10 (iOS) is having issues w/ AFO - Actions For Obsidian - ActionsDotWork Forum](https://forum.actions.work/t/obsidian-mobile-insider-build/765/1)
* [#703 Abstürze mit Obsidian 1.10 unter iOS 26 - HySpirit](https://support.actions.work/conversation/703?folder_id=7)
I've [put up a question](https://discord.com/channels/686053708261228577/817515900349448202/1432408945980342342) in the official Obsidian Discord.
---
## Progress
### 2025-12-12 (Carlo Zottmann)
> Fixed in [Obsidian 1.11.0 Mobile (Early access) - Obsidian](https://obsidian.md/changelog/2025-12-10-mobile-v1.11.0/)?
================================================
FILE: .beans/zco-166--set-up-a-testing-framework.md
================================================
---
# zco-166
title: "Set up a testing framework"
status: completed
type: task
priority: normal
parent: auri-ujej
tags:
- from-linear
created_at: 2023-09-18T17:24:26.604Z
updated_at: 2025-05-22T11:40:10.366Z
---
## Linear Metadata
- **Linear**: [ZCO-166](https://linear.app/actionsdotwork/issue/ZCO-166)
- **Project**: Actions URI
- **Milestone**: 1.8.1
- **Branch**: \`feature/zco-166-set-up-a-testing-framework\`
---
## Linked Commits
- [`41cfdec`](https://github.com/czottmann/obsidian-actions-uri/commit/41cfdecfebf03bc9919a1f8d56c29e486fcab1b6) — Merge pull request #100 from czottmann/feature/zco-166-jest
---
## Progress
### 2025-05-15 (Carlo Zottmann)
> Working with Cline & [Gemini 2.5 Flash Preview](https://openrouter.ai/google/gemini-2.5-flash-preview), I was able to cobble together an E2E testing setup which contains a pre-configured "blueprint" vault folder, which is copied to the right folder prior to Jest starting, then opens it in Obsidian, and sends out XCU calls. So far, so good, but the callbacks are opened by `window.open()` (in Obsidian) which hands them over to the OS which passes them on … to the browser.
>
> Need to figure out a way to set up a URL scheme for the test script.
### 2025-05-15 (Carlo Zottmann)
> Started, thought about it for a few hours, stopped again. I don't know where to start. I'd love to test the routes which are the most important thing but they use so much Obsidian code which would need to be mocked … oof.
>
> What about E2E calls? That'd require an actual test vault, and a HTTP server as a receiver, so Jest could make XCU calls to that vault and listen for the return values…?
================================================
FILE: .beans/zco-276--allow-relative-path-input-for-templates-templater-related-pa.md
================================================
---
# zco-276
title: "Allow relative path input for Templates/Templater-related parameters"
status: completed
type: task
parent: auri-14wv
tags:
- from-linear
created_at: 2023-11-24T12:45:07.270Z
updated_at: 2024-07-29T14:43:13.005Z
---
## Linear Metadata
- **Linear**: [ZCO-276](https://linear.app/actionsdotwork/issue/ZCO-276)
- **Project**: Actions URI
- **Milestone**: 1.6.0
- **Branch**: \`feature/zco-276-allow-relative-path-input-for-templatestemplater-related\`
---
Both Templates and Templater allow the user to configure the templates path. So it makes sense to allow users to omit the folder path, methinks.
---
Feature request by [Marco (@esamecar@social.lol)](https://social.lol/@esamecar):
[https://social.lol/@esamecar/111464716336517053](https://social.lol/@esamecar/111464716336517053)
================================================
FILE: .beans/zco-341--add-note-touch-route.md
================================================
---
# zco-341
title: "Add `/note/touch` route"
status: completed
type: task
parent: auri-q7z3
tags:
- from-linear
created_at: 2024-01-06T11:48:46.342Z
updated_at: 2024-02-27T12:25:01.985Z
---
## Linear Metadata
- **Linear**: [ZCO-341](https://linear.app/actionsdotwork/issue/ZCO-341)
- **Project**: Actions URI
- **Milestone**: 1.5.0
- **Branch**: \`feature/zco-341-add-notetouch-route\`
---
* no modifications
* callbacks optional (!)
Just touch the note so Obsidian will reload it in views or embeddings.
---
## Linked Commits
- [`de6923c`](https://github.com/czottmann/obsidian-actions-uri/commit/de6923ce1268af75f46aa69adc4b47b4bfb05ddd) — [NEW] Adds docs for `/note/touch`
- [`95bbb02`](https://github.com/czottmann/obsidian-actions-uri/commit/95bbb02c7ef59251f8a0aa54eaacda7203eef07e) — [NEW] Adds route `/note/touch`
================================================
FILE: .beans/zco-397--make-x-parameters-optional-in-command-execute-route.md
================================================
---
# zco-397
title: "Make `x-*` parameters optional in `/command/execute` route"
status: completed
type: task
parent: auri-q7z3
tags:
- from-linear
created_at: 2024-02-01T14:30:22.218Z
updated_at: 2024-02-27T12:25:02.040Z
---
## Linear Metadata
- **Linear**: [ZCO-397](https://linear.app/actionsdotwork/issue/ZCO-397)
- **Project**: Actions URI
- **Milestone**: 1.5.0
- **Branch**: \`feature/zco-397-make-x-parameters-optional-in-commandexecute-route\`
---
Feature request: [obsidian-actions-uri · #84 · FR: Can command/execute have optional callback parameters instead of required?](https://github.com/czottmann/obsidian-actions-uri/issues/84)
---
## Linked Commits
- [`d7c5bbe`](https://github.com/czottmann/obsidian-actions-uri/commit/d7c5bbe3bfa5ff540ea374a2b79703e770b39ee4) — [CHG] Makes `x-*` parameters optional in `/command/execute` route
================================================
FILE: .beans/zco-398--create-route-for-getting-currently-focussed-note.md
================================================
---
# zco-398
title: "Create route for getting currently focussed note"
status: completed
type: feature
parent: auri-q7z3
tags:
- from-linear
created_at: 2024-02-01T14:50:44.649Z
updated_at: 2024-02-27T12:25:02.101Z
---
## Linear Metadata
- **Linear**: [ZCO-398](https://linear.app/actionsdotwork/issue/ZCO-398)
- **Project**: Actions URI
- **Milestone**: 1.5.0
- **Branch**: \`feature/zco-398-create-route-for-getting-currently-focussed-note\`
---
## Linked Commits
- [`54ec6c0`](https://github.com/czottmann/obsidian-actions-uri/commit/54ec6c0495c8a961732cd6d5efe224bb9f373964) — [NEW] Adds `/vault/get-active-file`
- [`7e05e11`](https://github.com/czottmann/obsidian-actions-uri/commit/7e05e11718c0c19e226f4b3ffdbdd4c553c6928f) — [NEW] Adds `/note/get-active` route
================================================
FILE: .beans/zco-409--create-route-for-getting-currently-focussed-file.md
================================================
---
# zco-409
title: "Create route for getting currently focussed file"
status: completed
type: feature
parent: auri-q7z3
tags:
- from-linear
created_at: 2024-02-06T11:56:36.672Z
updated_at: 2024-02-27T12:25:01.921Z
---
## Linear Metadata
- **Linear**: [ZCO-409](https://linear.app/actionsdotwork/issue/ZCO-409)
- **Project**: Actions URI
- **Milestone**: 1.5.0
- **Branch**: \`feature/zco-409-create-route-for-getting-currently-focussed-file\`
---
`/vault/get-active-file`
---
## Linked Commits
- [`54ec6c0`](https://github.com/czottmann/obsidian-actions-uri/commit/54ec6c0495c8a961732cd6d5efe224bb9f373964) — [NEW] Adds `/vault/get-active-file` · czottmann/obsidian-actions-uri@54ec6c0
================================================
FILE: .beans/zco-410--create-route-for-getting-note-by-name.md
================================================
---
# zco-410
title: "Create route for getting note by name"
status: completed
type: feature
parent: auri-q7z3
tags:
- from-linear
created_at: 2024-02-06T18:30:36.921Z
updated_at: 2024-02-27T12:25:01.866Z
---
## Linear Metadata
- **Linear**: [ZCO-410](https://linear.app/actionsdotwork/issue/ZCO-410)
- **Project**: Actions URI
- **Milestone**: 1.5.0
- **Branch**: \`feature/zco-410-create-route-for-getting-note-by-name\`
---
`/note/get-first-named`
---
## Linked Commits
- [`d8e898d`](https://github.com/czottmann/obsidian-actions-uri/commit/d8e898db4c760356f6f1c125bc6cc919cb56052b) — [NEW] Adds `sort-by=best-guess` as new default
- [`64cfbd1`](https://github.com/czottmann/obsidian-actions-uri/commit/64cfbd1d70e4d8b9387bc5f190714097484d5ffe) — [NEW] Adds `/note/get-first-named`
================================================
FILE: .beans/zco-423--add-feature-to-auto-install-new-version.md
================================================
---
# zco-423
title: "Add feature to auto-install new version (?)"
status: todo
type: task
tags:
- from-linear
created_at: 2024-02-17T18:25:03.473Z
updated_at: 2024-02-19T15:11:30.495Z
---
## Linear Metadata
- **Linear**: [ZCO-423](https://linear.app/actionsdotwork/issue/ZCO-423)
- **Project**: Actions URI
- **Branch**: \`feature/zco-423-add-feature-to-auto-install-new-version\`
---
```
const i = {repo: 'czottmann/obsidian-actions-uri', version: '1.4.2', manifest: app.plugins.manifests["actions-uri"]}
app.plugins.installPlugin(i.repo, i.version, i.manifest)
```
Not sure if clever or feasible, needs proper planning.
================================================
FILE: .beans/zco-424--release-v1-5-0.md
================================================
---
# zco-424
title: "Release v1.5.0"
status: completed
type: task
parent: auri-q7z3
tags:
- from-linear
- release
created_at: 2024-02-19T12:35:32.236Z
updated_at: 2024-02-27T12:25:01.800Z
---
## Linear Metadata
- **Linear**: [ZCO-424](https://linear.app/actionsdotwork/issue/ZCO-424)
- **Project**: Actions URI
- **Milestone**: 1.5.0
- **Branch**: \`feature/zco-424-release-v150\`
---
- [X] Update `CHANGELOG.md`
- [X] Run `bin/tag-release.fish`
- [X] Update GitHub release notes
- [X] Post to Mastodon
================================================
FILE: .beans/zco-429--revamp-the-returning-of-errors-to-pick-from-a-fixed-list-of-.md
================================================
---
# zco-429
title: "Revamp the returning of errors to pick from a fixed list of possible errors"
status: completed
type: task
parent: auri-ujej
tags:
- from-linear
created_at: 2024-02-20T14:20:38.107Z
updated_at: 2025-05-22T11:40:10.356Z
---
## Linear Metadata
- **Linear**: [ZCO-429](https://linear.app/actionsdotwork/issue/ZCO-429)
- **Project**: Actions URI
- **Milestone**: 1.8.1
- **Branch**: \`feature/zco-429-revamp-the-returning-of-errors-to-pick-from-a-fixed-list-of\`
---
Introduce a fixed list of error states so it's easier for AFO to interact with returned Actions URI errors. Changing all numeric error codes on failure will be a **breaking** **change.**
```ts
enum Failure {
fileNotFound,
noteNotFound,
}
type FailureDetails = { errorCode: number; errorMessage: string };
const failureDetails: { [key in Failure]: FailureDetails } = {
[Failure.fileNotFound]: { errorCode: 1, errorMessage: "File not found" },
[Failure.noteNotFound]: { errorCode: 3, errorMessage: "Note not found" },
};
function failure(f: Failure): ErrorObject {
return { isSuccess: false, ...failureDetails[f] };
}
// Later
return failure(Failure.fileNotFound)
```
Prep work for [ZCO-419](https://linear.app/actionsdotwork/issue/ZCO-419/return-nicer-error-messages-than-the-raw-actions-uri-errors) – having a
---
## Linked Commits
- [`38fcafa`](https://github.com/czottmann/obsidian-actions-uri/commit/38fcafa4f6f0b4a3b039a9fd31b750ebd386ffc8) — [CHG] Renames `ErrorCode` enum cases to lowercase
================================================
FILE: .beans/zco-455--add-obsidian-note-uri-to-note-result-objects.md
================================================
---
# zco-455
title: "Add Obsidian note URI to note result objects"
status: completed
type: task
parent: auri-ujej
tags:
- from-linear
created_at: 2024-02-29T13:53:18.594Z
updated_at: 2025-05-22T11:40:10.841Z
---
## Linear Metadata
- **Linear**: [ZCO-455](https://linear.app/actionsdotwork/issue/ZCO-455)
- **Project**: Actions URI
- **Milestone**: 1.8.1
- **Branch**: \`feature/zco-455-add-obsidian-note-uri-to-note-result-objects\`
---
Add `result-link` to `HandlerFileSuccess`. Also, `export async function getNoteDetails(filepath:)` in `src/utils/file-handling.ts`.
- [X] implementation
- [X] adjust `/note/create` so it returns UID and both URIs
- [X] add infos about new `result-` keys to all applicable docs
- [X] add info to changelog
---
## Linked Commits
- [`1872c36`](https://github.com/czottmann/obsidian-actions-uri/commit/1872c367c362184b75b3c2d67324e3c883791d7b) — [FIX] Adds missing `await` to `propertiesForFile()` call
- [`730ee6e`](https://github.com/czottmann/obsidian-actions-uri/commit/730ee6ed3a56a18c0fa818e3b699b3452c3548c5) — [NEW] Adds info re `result-uri-*` return values in `/note/*`
- [`4ef19ea`](https://github.com/czottmann/obsidian-actions-uri/commit/4ef19eaf845d703649e7c8cd6b0b662379b816d2) — [NEW] Adds `result-uri-*` to docs
- [`3868dac`](https://github.com/czottmann/obsidian-actions-uri/commit/3868dacb8b4bf8a1a6681bd970777984fb183ca0) — [NEW] Adds note URIs to note return values
- [`f040fba`](https://github.com/czottmann/obsidian-actions-uri/commit/f040fba88ac7f2e9f9423f3d95fd1e2b3cbc33d9) — [NEW] Adds note URIs to note return values
================================================
FILE: .beans/zco-480--add-2nd-level-check-to-template-file-parameter.md
================================================
---
# zco-480
title: "Add 2nd-level check to `template-file` parameter"
status: completed
type: task
parent: auri-14wv
tags:
- from-linear
created_at: 2024-03-26T11:40:28.746Z
updated_at: 2024-07-23T15:13:07.972Z
---
## Linear Metadata
- **Linear**: [ZCO-480](https://linear.app/actionsdotwork/issue/ZCO-480)
- **Project**: Actions URI
- **Milestone**: 1.6.0
- **Branch**: \`feature/zco-480-add-2nd-level-check-to-template-file-parameter\`
---
Change the Actions URI-internal handling of template parameters to prepend the template folder set in the Obsidian configuration as a fallback, as in: first check the original parameter, if not valid, prepend the template path, if still not valid, complain.
See:
* [/note/create | Actions URI](https://zottmann.dev/obsidian-actions-uri/routes/note/#notecreate)
* [Create Note apply Templater template - Template Path - Actions For Obsidian - ActionsDotWork Forum](https://forum.actions.work/t/create-note-apply-templater-template-template-path/328/2)
---
## Linked Commits
- [`4e94c35`](https://github.com/czottmann/obsidian-actions-uri/commit/4e94c35d59df587cc3190fc584d589581bf78365) — [NEW] Adds 1.6 stuff
- [`fb758ef`](https://github.com/czottmann/obsidian-actions-uri/commit/fb758eff78d503fdcd5956452cdbe7566235174b) — [NEW] Adds fallback for when `template-file` parameter contains template folder
================================================
FILE: .beans/zco-563--remove-use-of-global-app-from-plugin.md
================================================
---
# zco-563
title: "Remove use of global `app` from plugin"
status: completed
type: task
priority: high
tags:
- from-linear
created_at: 2024-05-10T18:00:40.171Z
updated_at: 2024-05-11T10:46:26.711Z
---
## Linear Metadata
- **Linear**: [ZCO-563](https://linear.app/actionsdotwork/issue/ZCO-563)
- **Project**: Actions URI
- **Branch**: \`feature/zco-563-remove-use-of-global-app-from-plugin\`
---
See [changelog for Obsidian 1.6.0](https://obsidian.md/changelog/2024-05-09-desktop-v1.6.0/#:\~:text=Global%20app%20has%20been%20completely%20removed%20from%20the%20API%20spec%20(previously%20it%20was%20marked%20as%20deprecated).).
---
## Linked Commits
- [`52c0ed7`](https://github.com/czottmann/obsidian-actions-uri/commit/52c0ed7d7419767bac8734f208d7a2088919aaeb) — [CHG] Replaces deprecated `global.app` references
================================================
FILE: .beans/zco-588--fix-api-calls-not-reaching-actions-uri-when-vault-needs-to-o.md
================================================
---
# zco-588
title: "Fix API calls not reaching Actions URI when vault needs to open first"
status: completed
type: bug
parent: auri-2nvq
tags:
- from-linear
created_at: 2024-06-14T08:32:34.590Z
updated_at: 2024-06-18T14:43:12.669Z
---
## Linear Metadata
- **Linear**: [ZCO-588](https://linear.app/actionsdotwork/issue/ZCO-588)
- **Project**: Actions URI
- **Milestone**: 1.5.3
- **Branch**: \`feature/zco-588-fix-api-calls-not-reaching-actions-uri-when-vault-needs-to\`
---
When launching Obsidian, or switching to a closed, the API call will open the vault but the call itself won't be handled. Weirdly, this works fine for Omnisearch (e.g. [obsidian://omnisearch?query=foo&vault=Workbench](obsidian://omnisearch?query=foo&vault=Workbench)) and other plugins, but not for Actions URI.
Find the problem and fix it.
---
## Linked Commits
- [`161caf2`](https://github.com/czottmann/obsidian-actions-uri/commit/161caf241d5c062a041332e2b37b4219701d29fc) — [REL] Release 1.5.3 · czottmann/obsidian-actions-uri@161caf2
================================================
FILE: .beans/zco-606--search-and-replace-string-with-special-character.md
================================================
---
# zco-606
title: "Search and Replace string with special character"
status: completed
type: bug
parent: zco-531
tags:
- from-linear
- help-scout
created_at: 2024-06-27T16:42:41.084Z
updated_at: 2024-07-23T15:13:06.430Z
---
## Linear Metadata
- **Linear**: [ZCO-606](https://linear.app/actionsdotwork/issue/ZCO-606)
- **Project**: Actions URI
- **Milestone**: 1.6.0
- **Branch**: \`feature/zco-606-search-and-replace-string-with-special-character\`
---
S&R in text mode doesn't find the search terms when they contain unescaped special regex chars (`^`, `$`, etc.). If they are escaped, text replacement works, though.
Example, note contains the text *"Today is $Tuesday"*:
* Works: search for `\$Tuesday`
* Doesn't work: search for `$Tuesday`
---
## Linked Commits
- [`227c483`](https://github.com/czottmann/obsidian-actions-uri/commit/227c483cb5a11a5cc92ce3bc3c7418056bf1e79a) — [FIX] Makes search/replace strings containing regex chars work
================================================
FILE: .beans/zco-613--add-periodic-note-support-to-note-properties.md
================================================
---
# zco-613
title: "Add Periodic Note support to `/note-properties`"
status: completed
type: task
parent: zco-610
tags:
- from-linear
created_at: 2024-07-05T16:55:29.319Z
updated_at: 2024-07-23T15:13:07.944Z
---
## Linear Metadata
- **Linear**: [ZCO-613](https://linear.app/actionsdotwork/issue/ZCO-613)
- **Project**: Actions URI
- **Milestone**: 1.6.0
- **Branch**: \`feature/zco-613-add-periodic-note-support-to-note-properties\`
---
- [X] implementation
- [X] documentation
- [X] change log
---
## Linked Commits
- [`d539f4c`](https://github.com/czottmann/obsidian-actions-uri/commit/d539f4c3bce7f81c9a85950d3d2138e2eac317b5) — [NEW] Adds docs for Periodic Note support
- [`33f7b34`](https://github.com/czottmann/obsidian-actions-uri/commit/33f7b3465a1a4ffb1ef426c0fe2700430d568b9d) — [NEW] Adds Periodic Note support to `/note-properties` routes
================================================
FILE: .beans/zco-616--research-uid-support-in-actions-id.md
================================================
---
# zco-616
title: "Research UID support in Actions ID"
status: completed
type: task
parent: zco-30
tags:
- from-linear
- research
created_at: 2024-07-09T15:41:42.567Z
updated_at: 2024-09-12T17:44:26.872Z
---
## Linear Metadata
- **Linear**: [ZCO-616](https://linear.app/actionsdotwork/issue/ZCO-616)
- **Project**: Actions URI
- **Milestone**: 1.6.0
- **Branch**: \`feature/zco-616-research-uid-support-in-actions-id\`
---
By querying the `metadataCache` I can find all cached objects which contain a particular key (e.g., "uuid"), and then use their metadata cache key to find the related file:
```typescript
const uid = Object.entries(app.metadataCache.metadataCache)
.find(([key, cached]) => cached.frontmatter?.uuid && [cached.frontmatter.uuid].flat().includes(123))
?.first()
// → '002f3dfa59410f7cdd90519680cac1097d00473c7dcc4b15b1d7948e1b786e38'
const filePath = Object.entries(app.metadataCache.fileCache)
.find(([filePath, cache]) => cache.hash === uid)
?.first()
```
(It's possible to have more than one UID per file, for example when files have been merged, hence the array-based check.)
---
*Idea: Lookup of* `"file" | "uid" | "periodic-note"` *via *[*zod preprocessor*](https://zod.dev/?id=preprocess)*, so that only the* `file` *parameter remains? This way, I could remove even more complexity from the routes, i.e. only have* `/note` *which would take care of both general notes and periodic notes, and support UIDs to boot?*
---
## Progress
### 2024-07-09 (Carlo Zottmann)
> Follow-up: [ZCO-617](https://linear.app/actionsdotwork/issue/ZCO-617/implement-zod-preprocessor-to-streamline-targeting-a-note-using-file)
================================================
FILE: .beans/zco-617--implement-zod-magic-to-streamline-targeting-a-note-using-fil.md
================================================
---
# zco-617
title: "Implement zod magic to streamline targeting a note using `\"file\" | \"uid\" | \"periodic-note\"` parameters"
status: completed
type: task
parent: zco-30
tags:
- from-linear
created_at: 2024-07-09T16:52:35.164Z
updated_at: 2024-07-23T15:13:06.553Z
---
## Linear Metadata
- **Linear**: [ZCO-617](https://linear.app/actionsdotwork/issue/ZCO-617)
- **Project**: Actions URI
- **Milestone**: 1.6.0
- **Branch**: \`feature/zco-617-implement-zod-magic-to-streamline-targeting-a-note-using\`
---
- [X] fix lookup by UID, metadataCache is unreliable after the first hit (because the file changes and its cached info is invalidated)
- [X] create on append: if targeted by UID, use UID as title
- [X] create on prepend: if targeted by UID, use UID as title
- [X] make frontmatter UID key configurable in Actions URI settings
- [X] implement new targeting in `/note-properties` routes
- [X] add explicit PN plugin check before checking file path, and throw on missing plugin or deactivated feature
- [X] ~~create: UID support?~~ Nope
- [X] create: explicitly create PN when requested instead of general note at right path
- [X] add UID to standard result parameters (if available)
- [X] update change log
- [X] update docs
- [X] check mobile compatibility
---
## Linked Commits
- [`52fd2b2`](https://github.com/czottmann/obsidian-actions-uri/commit/52fd2b2cd1783d20755ccca036d0fb756578b93a) — [NEW] Adds settings
================================================
FILE: .beans/zco-623--removing-the-last-property-key-from-fm-results-in-fm-of.md
================================================
---
# zco-623
title: "Removing the last property key from FM results in FM of `{}`"
status: completed
type: bug
parent: auri-14wv
tags:
- from-linear
created_at: 2024-07-16T14:49:58.051Z
updated_at: 2024-07-23T15:13:06.505Z
---
## Linear Metadata
- **Linear**: [ZCO-623](https://linear.app/actionsdotwork/issue/ZCO-623)
- **Project**: Actions URI
- **Milestone**: 1.6.0
- **Branch**: \`feature/zco-623-removing-the-last-property-key-from-fm-results-in-fm-of\`
---
Instead of a blank FM block (or no FM block), there's an empty JSON object now.
---
## Linked Commits
- [`9fedd5f`](https://github.com/czottmann/obsidian-actions-uri/commit/9fedd5f43e954f44e63dd864ecf339f5964fd4a4) — [FIX] Sanitizes YAML FM generation to avoid faulty FM
================================================
FILE: .beans/zco-624--replace-use-of-self-now-that-all-handlers-are-bound-to-this.md
================================================
---
# zco-624
title: "Replace use of `self()` now that all handlers are bound to `this`"
status: completed
type: task
tags:
- from-linear
created_at: 2024-07-16T15:58:50.452Z
updated_at: 2024-07-23T15:13:06.566Z
---
## Linear Metadata
- **Linear**: [ZCO-624](https://linear.app/actionsdotwork/issue/ZCO-624)
- **Project**: Actions URI
- **Branch**: \`feature/zco-624-replace-use-of-self-now-that-all-handlers-are-bound-to-this\`
---
## Linked Commits
- [`49568b5`](https://github.com/czottmann/obsidian-actions-uri/commit/49568b5e4def7946a5109b08ee90f9af89628510) — [CHG] Replace use of `self()` in handlers w/ `this`
================================================
FILE: .beans/zco-625--add-pn-support-to-note-list.md
================================================
---
# zco-625
title: "Add PN support to `/note/list`"
status: completed
type: task
parent: zco-621
tags:
- from-linear
created_at: 2024-07-17T14:07:36.026Z
updated_at: 2024-07-23T15:13:07.952Z
---
## Linear Metadata
- **Linear**: [ZCO-625](https://linear.app/actionsdotwork/issue/ZCO-625)
- **Project**: Actions URI
- **Milestone**: 1.6.0
- **Branch**: \`feature/zco-625-add-pn-support-to-notelist\`
---
## Linked Commits
- [`b278d95`](https://github.com/czottmann/obsidian-actions-uri/commit/b278d95c023509447f7dde063b915f816346fcbb) — [NEW] Adds docs on PN support in `/note/list`
- [`dd4e535`](https://github.com/czottmann/obsidian-actions-uri/commit/dd4e5357aab0dbd2a1322598cfb3ee1d87d6d282) — [NEW] Adds support to `/note/list`
================================================
FILE: .beans/zco-626--add-support-for-getting-most-recent-pn-to-note-open-note-get.md
================================================
---
# zco-626
title: "Add support for getting most recent PN to `/note/open`, `/note/get`"
status: completed
type: task
parent: zco-620
tags:
- from-linear
created_at: 2024-07-17T16:18:25.529Z
updated_at: 2024-07-23T15:13:08.401Z
---
## Linear Metadata
- **Linear**: [ZCO-626](https://linear.app/actionsdotwork/issue/ZCO-626)
- **Project**: Actions URI
- **Milestone**: 1.6.0
- **Branch**: \`feature/zco-626-add-support-for-getting-most-recent-pn-to-noteopen-noteget\`
---
## Linked Commits
- [`e9df64d`](https://github.com/czottmann/obsidian-actions-uri/commit/e9df64dfdd0ddabc766ac5daf44d59643e9ad65a) — [FIX] Fixes validations exploding (caused by imported native `enum` w/ zod)
- [`8627a43`](https://github.com/czottmann/obsidian-actions-uri/commit/8627a432aec7dfc6a90c82d71d61e6f911c8668e) — [CHG] Refactors, renames, cleans up several PN-related functions
- [`ae83ab6`](https://github.com/czottmann/obsidian-actions-uri/commit/ae83ab6971dd0b53cfc19c4bab2a6349d46d59e8) — [NEW] Adds support for getting most recent PN to `/note/open`, `/note/get`
================================================
FILE: .beans/zco-627--when-creating-a-note-during-note-append-templater-s-watch-fo.md
================================================
---
# zco-627
title: "When creating a note during `/note/append`, Templater's watch-folder-and-apply-template may cause race condition"
status: completed
type: bug
parent: auri-14wv
tags:
- from-linear
created_at: 2024-07-18T08:33:43.987Z
updated_at: 2024-07-23T16:09:06.634Z
---
## Linear Metadata
- **Linear**: [ZCO-627](https://linear.app/actionsdotwork/issue/ZCO-627)
- **Project**: Actions URI
- **Milestone**: 1.6.0
- **Branch**: \`feature/zco-627-when-creating-a-note-during-noteappend-templaters-watch\`
---
Via [Help Scout #553](https://secure.helpscout.net/conversation/2655031968/553):
> I'm using the "Append Text to Periodic Note" action with "Create note if necessary". I'm now using the Templater plugin for my daily notes--is it possible to configure this creation to use that plugin? At present, when I create on my phone, it creates the note with the raw templater code rather than executing it.
See ticket for more details, I've done some sleuthing already.
---
## Linked Commits
- [`c059bda`](https://github.com/czottmann/obsidian-actions-uri/commit/c059bda2254c890e0aaf8a51bb82e33fcc70f000) — [CHG] Increases post-create pause for Templater/Templates
---
## Progress
### 2024-07-23 (Carlo Zottmann)
> Added more time post-creation to give Templater more time. Closing.
================================================
FILE: .beans/zco-628--lean-into-zod-s-transform-for-resolving-incoming-url-paramet.md
================================================
---
# zco-628
title: "Lean into Zod's `.transform()` for resolving incoming URL parameters"
status: todo
type: task
tags:
- from-linear
created_at: 2024-07-18T15:32:44.910Z
updated_at: 2025-05-21T13:44:38.256Z
---
## Linear Metadata
- **Linear**: [ZCO-628](https://linear.app/actionsdotwork/issue/ZCO-628)
- **Project**: Actions URI
- **Branch**: \`feature/zco-628-lean-into-zods-transform-for-resolving-incoming-url\`
---
Contemplate how s/th like `validateNoteTargetingAndResolvePath()` could work for anything incoming. I have a feeling this could make a lot of code redundant. When the handler gets the original zod-treated parameters plus a `_resolved` object (containing the actual requested file path etc.), that's a win. (It's partially what I did with `zodExistingFilePath` et al, but that's overwriting the incoming data, so… hmm.)
But having single transformers which could be tacked on as needed…?
```typescript
incomingBaseParams.extend({
file: zodExistingFilePath,
"new-filename": zodSanitizedFilePath,
silent: zodOptionalBoolean,
})
.transform(hardResolveFile) // resolve file or abort with error
.transform(resolveWhatever)
.transform(something)
```
---
## Progress
### 2025-05-21 (Carlo Zottmann)
> New zod v4 is out, look at that first.
================================================
FILE: .beans/zco-629--add-result-selection-to-note-get-active.md
================================================
---
# zco-629
title: "Add `result-selection` to `/note/get-active`"
status: completed
type: task
parent: auri-14wv
tags:
- from-linear
created_at: 2024-07-22T10:42:46.013Z
updated_at: 2024-07-23T15:13:07.964Z
---
## Linear Metadata
- **Linear**: [ZCO-629](https://linear.app/actionsdotwork/issue/ZCO-629)
- **Project**: Actions URI
- **Milestone**: 1.6.0
- **Branch**: \`feature/zco-629-add-result-selection-to-noteget-active\`
---
[obsidian-actions-uri · #90 · \[Feature Request\] ](https://github.com/czottmann/obsidian-actions-uri/issues/90)`[/note/get-active](https://github.com/czottmann/obsidian-actions-uri/issues/90)`[ | New Return Value: Selection](https://github.com/czottmann/obsidian-actions-uri/issues/90)
---
## Linked Commits
- [`4e94c35`](https://github.com/czottmann/obsidian-actions-uri/commit/4e94c35d59df587cc3190fc584d589581bf78365) — [NEW] Adds 1.6 stuff
- [`b9c16d3`](https://github.com/czottmann/obsidian-actions-uri/commit/b9c16d3d2247eb03439a64a07a2f51cf24c5795a) — [NEW] Adds `result-selection` to `/note/get-active`
================================================
FILE: .beans/zco-630--add-create-headline-if-not-found-option-for-note-append-note.md
================================================
---
# zco-630
title: "Add \"create headline if not found\" option for `/note/append` & `/note/prepend`'s below-headline feature"
status: completed
type: task
parent: auri-14wv
tags:
- from-linear
created_at: 2024-07-22T12:17:37.050Z
updated_at: 2024-07-23T15:13:07.967Z
---
## Linear Metadata
- **Linear**: [ZCO-630](https://linear.app/actionsdotwork/issue/ZCO-630)
- **Project**: Actions URI
- **Milestone**: 1.6.0
- **Branch**: \`feature/zco-630-add-create-headline-if-not-found-option-for-noteappend\`
---
Options:
* `skip`
* `add-headline`s6
* return error
---
## Linked Commits
- [`4e94c35`](https://github.com/czottmann/obsidian-actions-uri/commit/4e94c35d59df587cc3190fc584d589581bf78365) — [NEW] Adds 1.6 stuff
- [`d42fb01`](https://github.com/czottmann/obsidian-actions-uri/commit/d42fb017869decb8ca9b2f7478b37cf3653c24dc) — [NEW] Adds `?if-headline-missing=` to `/note/append`, `/note/prepend`
================================================
FILE: .beans/zco-633--fix-note-create-in-1-6-0.md
================================================
---
# zco-633
title: "Fix `/note/create` in 1.6.0"
status: completed
type: bug
parent: auri-vp9j
tags:
- from-linear
created_at: 2024-07-25T07:26:11.904Z
updated_at: 2024-07-25T07:54:57.154Z
---
## Linear Metadata
- **Linear**: [ZCO-633](https://linear.app/actionsdotwork/issue/ZCO-633)
- **Project**: Actions URI
- **Milestone**: 1.6.1
- **Branch**: \`feature/zco-633-fix-notecreate-in-160\`
---
#558 Actions For Obsidian feedback - Jose Gemez: [https://secure.helpscout.net/conversation/2661538959/558?viewId=7423770](https://#558 Actions For Obsidian feedback - Jose Gemez)
================================================
FILE: .beans/zco-634--fix-headline-block-append-prepend.md
================================================
---
# zco-634
title: "Fix headline block append/prepend"
status: completed
type: bug
parent: auri-slfp
tags:
- from-linear
created_at: 2024-07-26T09:25:11.951Z
updated_at: 2024-07-29T15:51:13.445Z
---
## Linear Metadata
- **Linear**: [ZCO-634](https://linear.app/actionsdotwork/issue/ZCO-634)
- **Project**: Actions URI
- **Milestone**: 1.6.2
- **Branch**: \`feature/zco-634-fix-headline-block-appendprepend\`
---
Request:
[Marco :prami: (@esamecar@social.lol)](https://social.lol/@esamecar/112851925966484997)
Both `prependNoteBelowHeadline()` and `appendNoteBelowHeadline()` use a sloppy "does this section start with this headline" check:
```
const newContent = res.result
.split(/(?=^#+ )/m)
.map((section) => {
if (!section.startsWith(belowHeadline)) {
return section;
}
```
If `belowHeadline` is "## A", then this would check `true` if the section starts with "## ABC", too. Also, if `belowHeadline` ending in whitespace might fail the check.
Make the check use a regex: `/^## Mittwoch\s*\n/.test(section)`
---
## Linked Commits
- [`d9eac50`](https://github.com/czottmann/obsidian-actions-uri/commit/d9eac50736ec1f13ab0084aaaddea413bc9512e5) — [FIX] Fixes sloppy "below headline" matching and appending/prepending
================================================
FILE: .beans/zco-636--fix-error-code-on-note-get-from-500-back-to-404-to-prevent-a.md
================================================
---
# zco-636
title: "Fix error code on `/note/get` from 500 back to 404 to prevent AFO \"Check For Existence of Note\" failing"
status: completed
type: bug
parent: auri-slfp
tags:
- from-linear
created_at: 2024-07-29T08:47:06.739Z
updated_at: 2024-07-29T15:44:39.782Z
---
## Linear Metadata
- **Linear**: [ZCO-636](https://linear.app/actionsdotwork/issue/ZCO-636)
- **Project**: Actions URI
- **Milestone**: 1.6.2
- **Branch**: \`feature/zco-636-fix-error-code-on-noteget-from-500-back-to-404-to-prevent\`
---
## Linked Commits
- [`8640bdb`](https://github.com/czottmann/obsidian-actions-uri/commit/8640bdb73fe9c5ae1046d2a01882cda557bcffaf) — [FIX] Fixes wrong error code on files not found
================================================
FILE: .beans/zco-642--templater-path-parameter-doesn-t-work-as-assumed-intended.md
================================================
---
# zco-642
title: "Templater path parameter doesn't work as assumed/intended"
status: completed
type: bug
parent: auri-civ4
tags:
- from-linear
created_at: 2024-08-02T09:11:56.999Z
updated_at: 2024-08-02T12:14:56.416Z
---
## Linear Metadata
- **Linear**: [ZCO-642](https://linear.app/actionsdotwork/issue/ZCO-642)
- **Project**: Actions URI
- **Milestone**: 1.6.3
- **Branch**: \`feature/zco-642-templater-path-parameter-doesnt-work-as-assumedintended\`
---
Via [Help Scout #562](https://secure.helpscout.net/conversation/2668200764/562):
> Carlo,
> Since the Actions URI updates, I have not been able to create my Day Note with AFO. The action fails with an error that indicates the template file is not found. However, I am able to use *Create Daily Note* with no problem in Obsidian via the ribbon button (or command). It must have something to do with the recent changes.
---
Only an issue with **Create PN + Templater + template-file**!
---
## Linked Commits
- [`a2f0fa0`](https://github.com/czottmann/obsidian-actions-uri/commit/a2f0fa0f28004015af96ec36328e91cf5431ce75) — [FIX] Makes `template-file` parameter resolve correctly again
================================================
FILE: .beans/zco-645--replace-vault-modify-w-vault-process-to-prevent-race-conditi.md
================================================
---
# zco-645
title: "Replace `vault.modify()` w/ `vault.process()` to prevent race conditions"
status: scrapped
type: bug
tags:
- from-linear
created_at: 2024-08-05T13:10:03.596Z
updated_at: 2024-08-06T10:57:19.442Z
---
## Linear Metadata
- **Linear**: [ZCO-645](https://linear.app/actionsdotwork/issue/ZCO-645)
- **Project**: Actions URI
- **Branch**: \`feature/zco-645-replace-vaultmodify-w-vaultprocess-to-prevent-race\`
---
[Vault - Developer Documentation](https://docs.obsidian.md/Plugins/Vault#Modify+files)
When appending text a non-focussed note, e.g. under a headline in the weekly note, the last modification before the update seems to be rolled back before the current modification is applied. Not sure yet it's an AURI issue, though.
**UPDATE: Not an AURI issue.** The plugin "Check Please!" misbehaves.
================================================
FILE: .beans/zco-651--add-debugging-info-output-to-settings-page.md
================================================
---
# zco-651
title: "Add debugging info output to Settings page"
status: scrapped
type: task
parent: auri-ujej
tags:
- from-linear
created_at: 2024-08-14T15:42:22.743Z
updated_at: 2025-05-22T11:36:12.638Z
---
## Linear Metadata
- **Linear**: [ZCO-651](https://linear.app/actionsdotwork/issue/ZCO-651)
- **Project**: Actions URI
- **Milestone**: 1.8.1
- **Branch**: \`feature/zco-651-add-debugging-info-output-to-settings-page\`
---
The settings tab should get a debugging section which lets the customer copy debugging output to the clipboard:
* vault name
* system path of the vault (?)
* plugin version
* Obsidian version (?)
* …
Maybe there's a way to gather the official debugging output of Obsidian behind the scenes?
---
## Progress
### 2025-05-22 (Carlo Zottmann)
> Eh, it's unnecessary.
================================================
FILE: .beans/zco-692--insert-below-headline-fails-if-the-headline-is-the-last-line.md
================================================
---
# zco-692
title: "\"Insert below headline\" fails if the headline is the last line of the note and doesn't end in a newline"
status: completed
type: bug
parent: auri-p05h
tags:
- from-linear
created_at: 2024-09-20T07:52:05.317Z
updated_at: 2024-09-20T14:30:49.325Z
---
## Linear Metadata
- **Linear**: [ZCO-692](https://linear.app/actionsdotwork/issue/ZCO-692)
- **Project**: Actions URI
- **Milestone**: 1.6.4
- **Branch**: \`feature/zco-692-insert-below-headline-fails-if-the-headline-is-the-last-line\`
---
## Linked Commits
- [`2ae98d1`](https://github.com/czottmann/obsidian-actions-uri/commit/2ae98d1fe641ada6010680b1927bf75f957e0c87) — [FIX] Fixes append/prepend below headline at the end of the file
================================================
FILE: .beans/zco-694--add-optional-logging-to-file.md
================================================
---
# zco-694
title: "Add optional logging to file"
status: draft
type: feature
tags:
- from-linear
created_at: 2024-09-20T14:35:27.945Z
updated_at: 2024-09-20T14:35:27.945Z
---
## Linear Metadata
- **Linear**: [ZCO-694](https://linear.app/actionsdotwork/issue/ZCO-694)
- **Project**: Actions URI
- **Branch**: \`feature/zco-694-add-optional-logging-to-file\`
---
Might be a worthwhile addition to the plugin: A switch which logs everything that usually just goes to the console. Basically Logstravaganza light – just for Actions URI, NDJSON only, no further user configuration possible.
================================================
FILE: .beans/zco-695--fix-empty-note-when-trying-to-append-prepend-content-to-non-.md
================================================
---
# zco-695
title: "Fix empty note when trying to append/prepend content to non-existing periodic note which has to be created first"
status: completed
type: bug
tags:
- from-linear
- help-scout
created_at: 2024-09-23T09:23:29.780Z
updated_at: 2024-10-09T11:11:32.296Z
---
## Linear Metadata
- **Linear**: [ZCO-695](https://linear.app/actionsdotwork/issue/ZCO-695)
- **Project**: Actions URI
- **Branch**: \`feature/zco-695-fix-empty-note-when-trying-to-appendprepend-content-to-non\`
---
Via [Help Scout #589](https://secure.helpscout.net/conversation/2711901364/589):
> `obsidian://actions-uri/note/append/?vault=Full%20Life&create-if-not-found=true&periodic-note=daily&content=hello`
>
> This action does correctly create the daily note, if it doesn’t exist. It also correctly appends the content to the note.
>
> However, it does not apply the daily note template when creating the daily note. The result of this URI is that the daily note is created, but only contains the word “hello”.
>
> This means I can’t use the below headline option, because the headline is in the template, and the template doesn’t get applied. My shortcut has to contain a separate create daily note action, which does apply the template when creating the note.
💭 I think due to some internal changes in Obsidian itself the periodic note plugin(s) and Actions URI are now interfering with each other.
---
## Linked Commits
- [`f615958`](https://github.com/czottmann/obsidian-actions-uri/commit/f61595878dc547cc1f6ae39b6d335da7f7dd4b17) — [CHG] Updates note open/focus by path for Obsidian 1.7
- [`901b26b`](https://github.com/czottmann/obsidian-actions-uri/commit/901b26bbf18e5aaff596fca3d519c731b14233e4) — [NEW] Adds ZCO-695 to changelog
- [`c14ca8c`](https://github.com/czottmann/obsidian-actions-uri/commit/c14ca8c24282658188d195ac621769d8b7fcc7ea) — [FIX] Ensures append/prepend on periodic notes creates the right type of note if requested
================================================
FILE: .beans/zco-707--check-plugin-against-new-obsidian-guidelines.md
================================================
---
# zco-707
title: "Check plugin against new Obsidian guidelines"
status: completed
type: task
tags:
- from-linear
- tooling
created_at: 2024-10-04T18:48:58.287Z
updated_at: 2025-05-19T11:12:04.308Z
---
## Linear Metadata
- **Linear**: [ZCO-707](https://linear.app/actionsdotwork/issue/ZCO-707)
- **Project**: Actions URI
- **Branch**: \`feature/zco-707-check-plugin-against-new-obsidian-guidelines\`
---
[Obsidian October O_O 2024 plugin self-critique checklist - Developer Documentation](https://docs.obsidian.md/oo24/plugin)
================================================
FILE: .beans/zco-918--make-dataview-list-result-consistent.md
================================================
---
# zco-918
title: "Make Dataview LIST result consistent"
status: completed
type: bug
parent: zco-919
tags:
- from-linear
created_at: 2024-11-25T14:26:48.381Z
updated_at: 2025-02-04T11:58:55.693Z
---
## Linear Metadata
- **Linear**: [ZCO-918](https://linear.app/actionsdotwork/issue/ZCO-918)
- **Project**: Actions URI
- **Milestone**: 1.7.0
- **Branch**: \`feature/zco-918-make-dataview-list-result-consistent\`
---
[Get DV list without ID + inline → Json string couldn't be decoded](https://forum.actions.work/t/get-dv-list-without-id-inline-json-string-couldnt-be-decoded/554/4)
For LIST queries, DV will return a two-dimensional array instead of a one-dimensional one *if* one of the queried files returns more than one hit.
Example: If you query for an inline field (`whatever::`), and one file contains of it, e.g. `whatever:: something 1` and `whatever:: something 2`, while another file contains `whatever:: something 3`, DV will return:
```
[
["something 1", "something 2"],
"something 3"
]
```
This is inconsistent, and AFO will nope out. So we'll make it consistent.
---
## Linked Commits
- [`6a3d653`](https://github.com/czottmann/obsidian-actions-uri/commit/6a3d6535b9e7cc7386d4f8013d091346f7d0df6e) — [CHG] Rewrote inline docs
- [`7f25a90`](https://github.com/czottmann/obsidian-actions-uri/commit/7f25a902988cc1674d4435d7c3b855c58f9dcbe2) — [FIX] Fixes inconsistencies in `LIST` query results
================================================
FILE: .beans/zco-937--opening-a-note-in-another-vault-only-opens-the-requested-vau.md
================================================
---
# zco-937
title: "Opening a note in *another* vault only opens the requested vault, but not the requested note"
status: todo
type: bug
tags:
- from-linear
- ios-only
created_at: 2024-12-06T17:34:28.494Z
updated_at: 2025-05-15T09:39:52.878Z
---
## Linear Metadata
- **Linear**: [ZCO-937](https://linear.app/actionsdotwork/issue/ZCO-937)
- **Project**: Actions URI
- **Branch**: \`feature/zco-937-opening-a-note-in-another-vault-only-opens-the-requested\`
---
[HS#648 Re: Actions For Obsidian feedback, note bug - Mario Mazzoli](https://secure.helpscout.net/conversation/2782096382/648?viewId=7423770):
> I have a shortcut to open a specific note in a vault. An example, vault A is the vault of the shortcut, vault B is another vault. If Obsidian was last opened in vault B and in the vault A a different note was opened, when I launch the shortcut, Obsidian opens in vault A but on the different note. If then I launch again the shortcut, it switches to the correct note.
================================================
FILE: .beans/zco-976--fix-wonky-frontmatter-parser.md
================================================
---
# zco-976
title: "Fix wonky frontmatter parser"
status: completed
type: bug
parent: auri-48pt
tags:
- from-linear
- help-scout
created_at: 2025-01-29T18:03:47.109Z
updated_at: 2025-01-30T11:23:44.042Z
---
## Linear Metadata
- **Linear**: [ZCO-976](https://linear.app/actionsdotwork/issue/ZCO-976)
- **Project**: Actions URI
- **Milestone**: 1.7.0
- **Branch**: \`feature/zco-976-fix-wonky-frontmatter-parser\`
---
When the frontmatter block contains any string like `"---"`, the parser fails because it assumes this string is the end boundary of the FM.
See [https://secure.helpscout.net/conversation/2833345523/672?viewId=7423770](https://secure.helpscout.net/conversation/2833345523/672?viewId=7423770)
---
## Linked Commits
- [`3f7de7c`](https://github.com/czottmann/obsidian-actions-uri/commit/3f7de7cc567f0dd70de9b66f9e41d36a5510c780) — [CHG] Fixes triple hyphens in frontmatter strings breaking FM parsing
================================================
FILE: .beans/zco-977--remove-dedicated-periodic-note-related-routes.md
================================================
---
# zco-977
title: "Remove dedicated periodic note-related routes"
status: completed
type: task
parent: auri-ujej
tags:
- from-linear
created_at: 2025-01-30T11:29:05.033Z
updated_at: 2025-05-22T11:40:10.343Z
---
## Linear Metadata
- **Linear**: [ZCO-977](https://linear.app/actionsdotwork/issue/ZCO-977)
- **Project**: Actions URI
- **Milestone**: 1.8.1
- **Branch**: \`feature/zco-977-remove-dedicated-periodic-note-related-routes\`
---
As mentioned in the deprecation notice in v1.6.0:
> All dedicated periodic note-related routes (`/daily-note/*`, `/weekly-note/*`, `/monthly-note/*`, `/quarterly-note/*`, `/yearly-note/*`) are officially deprecated, and will be removed in early 2025. Please update your scripts accordingly.
---
## Linked Commits
- [`92d8a9d`](https://github.com/czottmann/obsidian-actions-uri/commit/92d8a9dc842889d221fe8d166cd79f8259d36917) — [DEL] Removes deprecated periodic note routes
================================================
FILE: .beans/zco-985--dataview-list-results-return-unexpected-nested-array.md
================================================
---
# zco-985
title: "DataView LIST results return unexpected nested array"
status: completed
type: bug
parent: auri-fzy4
tags:
- from-linear
created_at: 2025-02-03T09:16:22.164Z
updated_at: 2025-02-04T12:31:40.378Z
---
## Linear Metadata
- **Linear**: [ZCO-985](https://linear.app/actionsdotwork/issue/ZCO-985)
- **Project**: Actions URI
- **Milestone**: 1.7.1
- **Branch**: \`feature/zco-985-dataview-list-results-return-unexpected-nested-array\`
---
Regression of / related to [ZCO-918](https://linear.app/actionsdotwork/issue/ZCO-918/make-dataview-list-result-consistent) Reproducible error! Via [Help Scout #678](https://secure.helpscout.net/conversation/2837335579/678): > For the past 2-3 days, I keep getting this error. Any idea what the issue might be? > >  > > \------ > > Actions For Obsidian 2024.2.3 (7402) > > macOS 15.3.0 The underlying issue is that in 1.7.0, I changed `LIST` results to be 2D string arrays when they are supposed to be 1D. The fix is to return 1D.
---
## Linked Commits
- [`92d90a8`](https://github.com/czottmann/obsidian-actions-uri/commit/92d90a8974e4c112e97462ff517ea2d1e9af650f) — [FIX] Fixes LIST return value issues
================================================
FILE: .beans/zco-987--fix-periodic-notes-coming-out-raw-when-using-templater.md
================================================
---
# zco-987
title: "Fix periodic notes coming out \"raw\" when using Templater"
status: completed
type: bug
parent: auri-plwy
tags:
- from-linear
created_at: 2025-02-10T09:17:45.017Z
updated_at: 2025-02-10T09:38:26.270Z
---
## Linear Metadata
- **Linear**: [ZCO-987](https://linear.app/actionsdotwork/issue/ZCO-987)
- **Project**: Actions URI
- **Milestone**: 1.7.2
- **Branch**: \`feature/zco-987-fix-periodic-notes-coming-out-raw-when-using-templater\`
---
Reports:
* [https://secure.helpscout.net/conversation/2834156734/673?viewId=7423770](https://secure.helpscout.net/conversation/2834156734/673?viewId=7423770)
* [Creating Periodic Note doesn't apply Templater templates - Actions For Obsidian - ActionsDotWork Forum](https://forum.actions.work/t/creating-periodic-note-doesnt-apply-templater-templates/590/2)
Race condition just like the one with general notes. Need to apply a pause after creation here, too.
================================================
FILE: .beans.yml
================================================
beans:
path: .beans
prefix: auri-
id_length: 4
default_status: todo
default_type: task
================================================
FILE: .editorconfig
================================================
# top-most EditorConfig file
root = true
[*]
charset = utf-8
end_of_line = lf
insert_final_newline = true
indent_style = spaces
indent_size = 2
tab_width = 2
================================================
FILE: .eslintignore
================================================
npm node_modules
build
================================================
FILE: .eslintrc
================================================
{
"root": true,
"parser": "@typescript-eslint/parser",
"env": { "node": true },
"plugins": [
"@typescript-eslint"
],
"extends": [
"eslint:recommended",
"plugin:@typescript-eslint/eslint-recommended",
"plugin:@typescript-eslint/recommended"
],
"parserOptions": {
"sourceType": "module"
},
"rules": {
"no-unused-vars": "off",
"@typescript-eslint/no-unused-vars": ["error", { "args": "none" }],
"@typescript-eslint/ban-ts-comment": "off",
"no-prototype-builtins": "off",
"@typescript-eslint/no-empty-function": "off"
}
}
================================================
FILE: .github/FUNDING.yml
================================================
# These are supported funding model platforms
github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
patreon: # Replace with a single Patreon username
open_collective: # Replace with a single Open Collective username
ko_fi: # Replace with a single Ko-fi username
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
liberapay: # Replace with a single Liberapay username
issuehunt: # Replace with a single IssueHunt username
lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry
polar: # Replace with a single Polar username
buy_me_a_coffee: # Replace with a single Buy Me a Coffee username
thanks_dev: # Replace with a single thanks.dev username
custom: ["https://actions.work/store/#sponsoring"]
================================================
FILE: .github/workflows/release.yml
================================================
name: Release Obsidian Plugin
on:
push:
# Sequence of patterns matched against refs/tags
tags:
- "*" # Push events to matching any tag format, i.e. 1.0, 20.15.10
permissions:
contents: write
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0 # otherwise, you will failed to push refs to dest repo
- uses: actions/setup-node@v3
with:
node-version: "23.x" # You might need to adjust this value to your own version
# Build the plugin
- name: Build
run: |
yarn
yarn run build
# Get the version number and put it in a variable
- name: Get version info
id: version
run: |
echo "name=$(git describe --abbrev=0 --tags)" >> $GITHUB_OUTPUT
# Package the required files into a zip
- name: Package plugin archive
run: |
mkdir ${{ github.event.repository.name }}
cp main.js manifest.json README.md ${{ github.event.repository.name }}
zip -r ${{ github.event.repository.name }}-${{ steps.version.outputs.name }}.zip ${{ github.event.repository.name }}
# Create the release on github
- name: Create release
uses: softprops/action-gh-release@v1
if: startsWith(github.ref, 'refs/tags/')
with:
draft: true
files: |
${{ github.event.repository.name }}-${{ steps.version.outputs.name }}.zip
main.js
manifest.json
name: ${{ steps.version.outputs.name }}
prerelease: false
tag_name: ${{ github.ref }}
token: ${{ secrets.GITHUB_TOKEN }}
================================================
FILE: .gitignore
================================================
# vscode
.vscode
# Intellij
*.iml
.idea
# npm
node_modules
# Don't include the compiled main.js file in the repo.
# They should be uploaded to GitHub releases instead.
/main.js
**/actions-uri/main.js
# Exclude sourcemaps
*.map
# Exclude macOS Finder (System Explorer) View States
.DS_Store
# Exclude files used for local development
x-callback-test.txt
sandbox.js
================================================
FILE: .mise.toml
================================================
[tools]
deno = "latest"
================================================
FILE: .npmrc
================================================
auto-install-peers=true
tag-version-prefix=""
================================================
FILE: .prettierrc
================================================
{
"arrowParens": "always",
"bracketSameLine": false,
"bracketSpacing": true,
"embeddedLanguageFormatting": "auto",
"htmlWhitespaceSensitivity": "css",
"insertPragma": false,
"printWidth": 80,
"proseWrap": "preserve",
"quoteProps": "preserve",
"requirePragma": false,
"semi": true,
"singleAttributePerLine": false,
"singleQuote": false,
"trailingComma": "all",
"vueIndentScriptAndStyle": false,
"withNodeModules": false
}
================================================
FILE: AGENTS.md
================================================
# AGENTS.md
This file provides guidance to LLM agents when working with code in this repository.
## Common Development Commands
### Building and Development
- **Development**: `pnpm dev` or `npm run dev` - Compiles with esbuild and watches for changes
- **Production build**: `pnpm build` or `npm run build` - TypeScript type checking + production build
- **Testing**: `pnpm test` or `npm test` - Runs Jest tests (requires build first)
### Single Test Execution
Use Jest's pattern matching: `npx jest noteCreate.test.ts` or `npx jest --testNamePattern="specific test name"`
## Architecture Overview
This is an Obsidian plugin that extends the built-in URI scheme with additional x-callback-url endpoints for advanced automation. The plugin follows a modular routing architecture:
### Core Components
**Main Plugin (`src/main.ts`)**:
- Extends Obsidian's `Plugin` class as `ActionsURI`
- Registers URI handlers dynamically from route definitions
- Handles parameter validation using Zod schemas
- Manages x-callback-url responses and error handling
**Routing System (`src/routes.ts`, `src/routes/`)**:
- Each route module exports a `routePath` object defining available endpoints
- Routes are organized by functionality (note, file, vault, search, etc.)
- Each route has a Zod schema for validation and a handler function
- Route pattern: `/actions-uri/{category}/{action}`
**Schema Validation (`src/schemata.ts`, `src/utils/zod.ts`)**:
- All incoming parameters validated with Zod
- Base parameters include vault, action, debug-mode, x-success/x-error callbacks
- Note targeting supports file paths, UIDs, or periodic notes
**Result Handling (`src/utils/results-handling.ts`)**:
- Standardized success/failure result objects
- Automatic x-callback-url responses
- Error codes and user-friendly messages
### Key Patterns
**Handler Functions**: Each route handler follows the pattern:
```typescript
async function handler(params: ValidatedParams): Promise<HandlerResult>
```
**Parameter Processing**:
1. Raw parameters → Zod validation → Type-safe handler parameters
2. File path resolution using Obsidian's vault API
3. Support for targeting notes by file path, UID (frontmatter), or periodic note type
**Error Handling**:
- Zod validation errors converted to user-friendly messages
- Handler exceptions caught and converted to standard error responses
- Optional UI notices (can be suppressed with `hide-ui-notice-on-error`)
## File Organization
- `src/routes/` - Individual route handlers organized by functionality
- `src/utils/` - Shared utilities (file handling, search, UI, callbacks)
- `src/types/` - TypeScript type definitions split by domain
- `tests/` - Jest tests with mock Obsidian environment
- `docs/` - Documentation (deployed to GitHub Pages)
## Testing Architecture
Tests use a custom setup that mocks the Obsidian environment:
- `tests/global-setup.ts` - Initializes mock environment and callback server
- Tests are serialized (`maxConcurrency: 1`) to avoid callback server conflicts
- Test vault in `tests/plugin-test-vault.original/` with sample notes and templates
## Dependencies
- **Zod**: Runtime type validation and schema definition
- **Obsidian API**: Plugin API, file system, and UI integration
- **Jest + ts-jest**: Testing framework with TypeScript support
- **esbuild**: Fast bundling for development and production
================================================
FILE: CHANGELOG.md
================================================
# Release history
## 1.8.4, 2025-11-18
Chore release, updating dependencies.
## 1.8.3, 2025-08-05
### No longer broken
- [`/note-properties/set`](https://zottmann.dev/obsidian-actions-uri/routes/note-properties/#note-propertiesset): Sometimes, randomly, _updating_ file properties would fail, and the updated keys would become the only remaining frontmatter. This should be fixed now. Thanks to Marco for the heads-up. <!-- ZCO-1348 -->
### Changes
- `/*/rename`: Renaming now uses Obsidian's [`renameFile()`](https://docs.obsidian.md/Reference/TypeScript+API/FileManager/renameFile) function now, which updates all links to the renamed file depending on the user's preferences. Before, Actions URI would _just_ rename the note/ file/ folder, and be done with it.
## 1.8.1, 2025-05-22
### New stuff
- All [`/note` routes](https://zottmann.dev/obsidian-actions-uri/routes/note/) that return note information (like path, UID, body, etc.) now also return a `result-uri-path` and `result-uri-uid` (where available), containing URLs that can be used to link to the note from other places on the same device.
- The new standard, optional boolean parameter [`hide-ui-notice-on-error`](https://zottmann.dev/obsidian-actions-uri/parameters/) can be used to suppress the UI notice on errors like "note not found". Defaults to `false`, so by default the UI notice will be shown as usual. <!-- ZCO-1201 -->
### Removals
As announced last year (see 1.6.0, 2024-07-23), the periodic note routes are now gone for good. All their functionality is now part of the [`/note`](https://zottmann.dev/obsidian-actions-uri/routes/note/) routes. <!-- ZCO-977 -->
### No longer broken
- `x-success` results will no longer wrap undefined values as strings, so let's bid farewell to `result-some-value=undefined`.
### Changes
- Minor cleanups of the settings tab.
### Development
Adds a E2E test suite, see `tests/README.md` for details. This is a work in progress, and will be expanded over time.
## 1.7.3, 2025-04-30
### No longer broken
- [`/note/create`](https://zottmann.dev/obsidian-actions-uri/routes/note/#notecreate): Using `if-exists=skip&silent=false` would not open an already existing note in Obsidian. ([#99](https://github.com/czottmann/obsidian-actions-uri/issues/99)) <!-- ZCO-1182 -->
## 1.7.2, 2025-02-10
### No longer broken
- When using Templater with periodic notes, the created notes would sometimes end up with Templater placeholders still unreplaced or content not applied. <!-- ZCO-987 -->
## 1.7.1, 2025-02-04
### No longer broken
- Fixed output of [`/dataview/list-query`](https://zottmann.dev/obsidian-actions-uri/routes/dataview/#dataviewlist-query) to return a one-dimensional array. (Regression introduced in 1.7.0.) <!-- ZCO-985 -->
## 1.7.0, 2025-01-30
### Changes
- Adjusted [`/dataview/list-query`](https://zottmann.dev/obsidian-actions-uri/routes/dataview/#dataviewlist-query) to consistently return a two-dimensional array. <!-- ZCO-918 -->
### No longer broken
- Frontmatter containing a string with three or more hyphens in a row would break frontmatter parsing. This is now fixed. <!-- ZCO-976 -->
## 1.6.5, 2024-10-10
### No longer broken
- For some users, both [`/note/append`](https://zottmann.dev/obsidian-actions-uri/routes/note/#noteappend) and [`/note/prepend`](https://zottmann.dev/obsidian-actions-uri/routes/note/#noteprepend) would create empty periodic notes when the `create-if-not-found` parameter was used. <!-- ZCO-695 -->
### Changes
- Adjusted opening/focussing notes for API changes in Obsidian 1.7. <!-- ZCO-695 -->
## 1.6.4, 2024-09-20
### No longer broken
- Both [`/note/append`](https://zottmann.dev/obsidian-actions-uri/routes/note/#noteappend) and [`/note/prepend`](https://zottmann.dev/obsidian-actions-uri/routes/note/#noteprepend) now correctly work with headlines at the end of a note which don't have a trailing newline. <!-- ZCO-692 -->
# Release history
## 1.6.3, 2024-08-02
### No longer broken
- When calling `/*-note/create` with a `template-file` parameter, the template wouldn't be found unless the template path contained both folder and file extension. Fixed! <!-- ZCO-642 -->
## 1.6.2, 2024-07-29
### No longer broken
- When a note couldn't be found, the wrong error code would be returned (500 instead of 404). <!-- ZCO-636 -->
- Appending/prepending below a headline could fail if either the input headline or the headline in the note contained trailing whitespace. This is now fixed by ignoring trailing whitespace when checking, appending, and prepending. <!-- ZCO-634 -->
## 1.6.1, 2024-07-25
### No longer broken
- Under some circumstances, [`/note/create`](https://zottmann.dev/obsidian-actions-uri/routes/note/#notecreate) with `apply=content` would not create a note. Sorry about that! <!-- ZCO-633 -->
## 1.6.0, 2024-07-23
### New stuff
- All [`/note` routes](https://zottmann.dev/obsidian-actions-uri/routes/note/) gained support for working with periodic notes (daily, weekly, etc.).
- All [`/note` routes](https://zottmann.dev/obsidian-actions-uri/routes/note/) gained support for UID-based note references. Notes can now be referenced by their UID instead of their file path, so if you're storing a UID in your front matter, give it a go. Make sure to check that the correct frontmatter key is configured in the …
- New settings UI. The plugin now has a settings page in Obsidian's settings.
- [`/note/get-active-note`](https://zottmann.dev/obsidian-actions-uri/routes/note/#noteget-active) returns the current selection as part of its result. (Plain-text only for now.) Thanks to [@FelipeRearden](https://github.com/FelipeRearden) for the suggestion! [#90] <!-- ZCO-629 -->
- [`/note-properties`](https://zottmann.dev/obsidian-actions-uri/routes/note-properties/) now supports working with current periodic notes (daily, weekly, etc.)
- When using [`/note/append`](https://zottmann.dev/obsidian-actions-uri/routes/note/#noteappend) or [/note/prepend](https://zottmann.dev/obsidian-actions-uri/routes/note/#noteprepend) to insert text below a headline, the route no longer joyfully reports success even when the headline couldn't be found. Instead, the routes now support a conditional `if-headline-missing` parameter to specify what to do in that case: report an error (the new default), skip the operation (the old default behavior), or add the headline to the end of the note. Thanks to [@vitaly-rudenko](https://github.com/vitaly-rudenko) for the bug report! [#91] <!-- ZCO-630 -->
### Deprecation notice
All dedicated periodic note-related routes (`/daily-note/*`, `/weekly-note/*`, `/monthly-note/*`, `/quarterly-note/*`, `/yearly-note/*`) are officially deprecated, and will be removed in early 2025. Please update your scripts accordingly.
There will be no further work on these routes going forward.
### No longer broken
- Fixes search/replace in notes, which wouldn't work if the search term was a string but contained regex-like characters (`$`, `^`, etc.) <!-- ZCO-606 -->
- [`/note-properties/get`](https://zottmann.dev/obsidian-actions-uri/routes/note-properties/#note-propertiesget) won't automatically open the note anymore.
- Fixes template path handling in [`/note/create`](https://zottmann.dev/obsidian-actions-uri/routes/note/#notecreate), which was very strict, and didn't allow for specifying a template file outside the configured template folder. <!-- ZCO-480 -->
## 1.5.3, 2024-06-18
### No longer broken
- Fixes the plugin not sending out return calls when the requested vault wasn't loaded yet, e.g. when Obsidian wasn't running or when another vault was active.
## 1.5.2, 2024-05-11
House keeping release, no new features.
### Changes
- Replaces deprecated `global.app` references
- Sets minimum Obsidian version to 1.5.0
## 1.5.1, 2024-03-27
### Changes
- `/note/create/`, `/periodic-note/create`: If the file name passed in `template-file` can't be found, the plugin will now check the template folder set in Templates or Templater, respectively, before returning an error.
- Console output will now print the paths contained in the incoming params, instead of their internal file references. This prevents circular references and "max call stack" errors related to files when using [Logstravaganza](https://github.com/czottmann/obsidian-logstravaganza).
## 1.5.0, 2024-02-19
### New stuff
- New route path: [`/file`](https://zottmann.dev/obsidian-actions-uri/routes/file/) for working with files. The Obsidian API doesn't allow for uploading attachment files, but now you can at least handle them. (#85)
- `/file/list`: Returns the paths of all files in the vault.
- `/file/get-active`: Return the path of the currently active/ focussed file.
- `/file/open`: Opens a file in Obsidian.
- `/file/delete`: Deletes a file.
- `/file/trash`: Moves a file to the trash.
- `/file/rename`: Renames a file.
- New route: [`/note/get-active`](https://zottmann.dev/obsidian-actions-uri/routes/note/#noteget-active) returns the currently active/ focussed note.
- New route: [`/note/get-first-named`](https://zottmann.dev/obsidian-actions-uri/routes/note/#noteget-first-named) returns the first note found with a given name.
- New route: [`/note/touch`](https://zottmann.dev/obsidian-actions-uri/routes/note/#notetouch) sets the modification date of a note to the current date and time (side effect: it makes Obsidian reload it in views/ embeddings).
### Changes
- Appending below headline: Now inserts before any trailing new lines in a section instead of after them.
- Changed route: [`/command/execute`](https://zottmann.dev/obsidian-actions-uri/routes/command/#commandexecute) no longer requires the `x-success` and `x-error` parameters to be present. If they are, they will be used, but they are optional now. (#84)
- Removed route: `/vault/list-folders` was marked as deprecated in 0.16, and is now gone for good. Use [`/folder/list`](https://zottmann.dev/obsidian-actions-uri/routes/folder/#folderlist) instead.
## 1.4.2, 2023-12-12
### No longer broken
- Resolves problems with applying templates of the core plugin Templates.
- Fixes broken handling of `silent` parameter in `note/*`, `daily-note/*`, `weekly-note/*`, `monthly-note/*`, `quarterly-note/*`, and `yearly-note/*` routes
## 1.4.0, 2023-11-22
### New stuff
#### Support for Note Properties (ZCO-28)
[Properties](https://help.obsidian.md/Editing+and+formatting/Properties) are a core feature of Obsidian: structured data containing information about a note. Actions URI now supports them in a variety of ways. Please see the new route docs for details:
- [`/note-properties`](https://zottmann.dev/obsidian-actions-uri/routes/note-properties/)
Existing routes which return note content now also return note properties, if present. Their documentation has been updated accordingly. See Changes, below.
### Changes
Actions URI now requires Obsidian 1.4+.
The following routes return an additional `result-properties` parameter if the note contains properties:
- [`/note/create`](https://zottmann.dev/obsidian-actions-uri/routes/note/#notecreate)
- [`/note/get`](https://zottmann.dev/obsidian-actions-uri/routes/note/#noteget)
- [`/daily-note/create`](https://zottmann.dev/obsidian-actions-uri/routes/daily-note/#daily-notecreate)
- [`/daily-note/get-current`](https://zottmann.dev/obsidian-actions-uri/routes/daily-note/#daily-noteget-current)
- [`/daily-note/get-most-recent`](https://zottmann.dev/obsidian-actions-uri/routes/daily-note/#daily-noteget-most-recent)
- [`/weekly-note/create`](https://zottmann.dev/obsidian-actions-uri/routes/weekly-note/#weekly-notecreate)
- [`/weekly-note/get-current`](https://zottmann.dev/obsidian-actions-uri/routes/weekly-note/#weekly-noteget-current)
- [`/weekly-note/get-most-recent`](https://zottmann.dev/obsidian-actions-uri/routes/weekly-note/#weekly-noteget-most-recent)
- [`/monthly-note/create`](https://zottmann.dev/obsidian-actions-uri/routes/monthly-note/#monthly-notecreate)
- [`/monthly-note/get-current`](https://zottmann.dev/obsidian-actions-uri/routes/monthly-note/#monthly-noteget-current)
- [`/monthly-note/get-most-recent`](https://zottmann.dev/obsidian-actions-uri/routes/monthly-note/#monthly-noteget-most-recent)
- [`/quarterly-note/create`](https://zottmann.dev/obsidian-actions-uri/routes/quarterly-note/#quarterly-notecreate)
- [`/quarterly-note/get-current`](https://zottmann.dev/obsidian-actions-uri/routes/quarterly-note/#quarterly-noteget-current)
- [`/quarterly-note/get-most-recent`](https://zottmann.dev/obsidian-actions-uri/routes/quarterly-note/#quarterly-noteget-most-recent)
- [`/yearly-note/create`](https://zottmann.dev/obsidian-actions-uri/routes/yearly-note/#yearly-notecreate)
- [`/yearly-note/get-current`](https://zottmann.dev/obsidian-actions-uri/routes/yearly-note/#yearly-noteget-current)
- [`/yearly-note/get-most-recent`](https://zottmann.dev/obsidian-actions-uri/routes/yearly-note/#yearly-noteget-most-recent)
## 1.3.1, 2023-10-09
### Fixes
- Append/prepend to a periodic note that had to be created first would create the note but fail to append/prepend the text. This is now fixed.
## 1.3.0, 2023-09-04
### New stuff
#### Support for triggering Obsidian commands (#77)
Please see the new route docs for details:
- [`/command`](https://zottmann.dev/obsidian-actions-uri/routes/command/)
#### Support for Weekly, Monthly, Quarterly, and Yearly Notes (#75)
All of Action UR's existing [`/daily-note`](https://zottmann.dev/obsidian-actions-uri/routes/daily-note/) functionality is now also available for anything supported by the [Periodic Notes](https://github.com/liamcain/obsidian-periodic-notes) community plugin! Please see the new route docs for details:
- [`/weekly-note`](https://zottmann.dev/obsidian-actions-uri/routes/weekly-note/)
- [`/monthly-note`](https://zottmann.dev/obsidian-actions-uri/routes/monthly-note/)
- [`/quarterly-note`](https://zottmann.dev/obsidian-actions-uri/routes/quarterly-note/)
- [`/yearly-note`](https://zottmann.dev/obsidian-actions-uri/routes/yearly-note/)
> [!IMPORTANT] > **Known issue:** At the time of writing, the Periodic Notes plugin seems to have a bug that (for some people) prevents creating a new weekly note on any day other than Sunday. [liamcain/obsidian-periodic-notes · #185 · Open weekly note only works on Sunday](https://github.com/liamcain/obsidian-periodic-notes/issues/185). Since Actions URI uses the Periodic Notes plugin's API, this is not something I can fix. Please follow the issue for updates.
### Changes
- Actions URI now requires Obsidian 1.3+ .
### Fixes
- Adds missing return calls to `/vault/open` and `/vault/close`. (#76)
- For some Dataview `TABLE` queries, the results would be wrapped in an extra array, this has been fixed. (#79)
### Housekeeping
- Updates esbuild and @typescript-eslint packages.
## 1.2.5, 2023-08-29
### Fixes
- Ensures Dataview `TABLE` results are correctly nested. (#79)
## 1.2.4, 2023-08-07
### Fixes
- Appending/prepending below headlines no longer fails if there is no empty line below the headline. (#73)
- When using a file path ending in `.canvas`, Actions URI will no longer add `.md` to it. (#74)
## 1.2.3, 2023-07-25
### Fixes
- Attempting to use the Templates core plugin on iOS would result in an error. This is now fixed.
## 1.2.2, 2023-07-13
### Fixes
- Adjusts the behavior of [`/note/get`](https://zottmann.dev/obsidian-actions-uri/routes/note/#noteget) so it no longer breaks Actions for Obsidian's "Check if note exists" action. 😬
- Fixes a bug in note creation where the default behavior regarding content insertion was not respected.
## 1.2.0, 2023-07-12
### New stuff
#### [`/note/create`](https://zottmann.dev/obsidian-actions-uri/routes/note/#notecreate)
- Adds support for applying a Templates (core plugin) template or Templater (community plugin) template after note creation (#69)
#### [`/note/append`](https://zottmann.dev/obsidian-actions-uri/routes/note/#noteappend)
- Adds an optional `create-if-not-found` parameter for avoiding errors if the note doesn't exist yet (#67)
- Adds an optional `below-headline` parameter for appending text not to the end of a file but to a section below a heading (#68)
#### [`/note/prepend`](https://zottmann.dev/obsidian-actions-uri/routes/note/#noteprepend)
- Adds an optional `create-if-not-found` parameter for avoiding errors if the note doesn't exist yet (#67)
- Adds an optional `below-headline` parameter for prepending text not to the beginning of a file but to a section below a heading (#68)
#### [`/daily-note/create`](https://zottmann.dev/obsidian-actions-uri/routes/daily-note/#daily-notecreate)
- Adds support for applying a Templates (core plugin) template or Templater (community plugin) template after note creation (#69)
#### [`/daily-note/append`](https://zottmann.dev/obsidian-actions-uri/routes/daily-note/#daily-noteappend)
- Adds an optional `create-if-not-found` parameter for avoiding errors if the note doesn't exist yet (#67)
- Adds an optional `below-headline` parameter for appending text not to the end of a file but to a section below a heading (#68)
#### [`/daily-note/prepend`](https://zottmann.dev/obsidian-actions-uri/routes/daily-note/#daily-noteprepend)
- Adds an optional `create-if-not-found` parameter for avoiding errors if the note doesn't exist yet (#67)
- Adds an optional `below-headline` parameter for prepending text not to the beginning of a file but to a section below a heading (#68)
### Changes
- Incoming, malformed calls are now answered if possible: if an `x-error` parameter was passed in, it will be used now, instead of Actions URI just doing nothing. (#72)
- `file` & `folder` parameter validation is now more strict where the parameter is supposed to reference an existing path, and will return a "bad request" error if the referenced file/folder couldn't be found. Examples for clarification: `file` in `/note/rename`, `folder` in `/folder/delete`; but **not** `file` in `/note/create` (as here the parameter references a file yet to be created). (#72)
### Removals
- The deprecations made in 0.18.0 are now feasting with the Gods.
## 1.1.2, 2023-05-10
This is a minor release aimed at fixing an issue with opening notes after creation that came up during the [Actions for Obsidian](https://obsidian.actions.work) iOS TestFlight.
- [FIX] Cleans up opening/focussing notes
- [DEL] Removes outdated API references
## 1.1.0, 2023-05-04
The plugin is stable enough and used in production as the companion plugin to my macOS/iOS app [Actions for Obsidian](https://obsidian.actions.work). So the version number took a big leap to bring it mostly in line with the app. **Nothing else will change,** Actions URI will remain FOSS under a MIT License.
### New stuff
- If you're unhappy with the global search, and use Omnisearch, you'll be delighted about the [new `/omnisearch` routes](https://zottmann.dev/obsidian-actions-uri/routes/omnisearch/) (#59)
- Actions URI should now handle unexpected exceptions outside its control more graceful (#60)
- I've added table of contents to [the route pages in the documentation](https://zottmann.dev/obsidian-actions-uri/routes/).
### No longer broken
- Adds code for preventing a race condition in vaults w/ Templater enabled (#61)
## 0.18.0, 2023-04-14
### New stuff
The [`/note/create`](https://zottmann.dev/obsidian-actions-uri/routes/note/#notecreate) route
has a new optional `if-exists` parameter to specify a strategy for dealing with an existing note. It
overrides the default behavior (creating a new note by appending a numeric suffix to the base name)
and can be set to `skip` or `overwrite`. `if-exists=skip` will not create another note and instead
return the named note as-is. `if-exists=overwrite` will replace the existing note with a new one.
The[`/daily-note/create`](https://zottmann.dev/obsidian-actions-uri/routes/daily-note/#daily-notecreate)
route has a new optional `if-exists` parameter to specify a strategy for dealing with an existing
current daily note. It overrides the default behavior (returning an error) and can be set to `skip`
or `overwrite`. `if-exists=skip` will pretend the existing note was just created and return it.
`if-exists=overwrite` will trash the existing note and create a new daily note from scratch.
### Changes
- [`/note/create`](https://zottmann.dev/obsidian-actions-uri/routes/note/#notecreate): the
`overwrite` parameter is deprecated and will be removed in a future release. Use
`if-exists=overwrite` instead.
- [`/daily-note/create`](https://zottmann.dev/obsidian-actions-uri/routes/daily-note/#daily-notecreate):
the `overwrite` parameter is deprecated and will be removed in a future release. Use
`if-exists=overwrite` instead.
## 0.17.0, 2023-04-12
- [FIX] Normalizes leading/trailing whitespace in path segments (#54)
- [CHG] Moves route `/open/search` → [`/search/open`](https://zottmann.dev/obsidian-actions-uri/routes/search/) (#17)
- [DOC] Marks route `/open/search` as deprecated (#17)
- [DOC] Removes docs for previously removed `/open/*` routes (#17)
- [DOC] Corrects docs to reflect reality (#55)
- [DOC] Corrects docs where callbacks are optional, not required (#55)
- [`/note/open`](https://zottmann.dev/obsidian-actions-uri/routes/note/#noteopen-v012)
- [`/daily-note/open-current`](https://zottmann.dev/obsidian-actions-uri/routes/daily-note/#daily-noteopen-current-v012)
- [`/daily-note/open-most-recent`](https://zottmann.dev/obsidian-actions-uri/routes/daily-note/#daily-noteopen-most-recent-v012)
## 0.16.4, 2023-02-15
- [CHG] Increases time waiting for search results in `/search/all-notes` to 2s (#50)
## 0.16.3, 2023-02-06
- [FIX] Fixes handling of backslashes and colon characters in file names (#43)
## 0.16.2, 2023-01-30
- [CHG] Shortens `*/rename` error messages
## 0.16.1, 2023-01-28
- [FIX] Adds graceful handling of the default "Default location for new notes" configuration setting (#41)
## 0.16.0, 2023-01-26
- [NEW] Adds [route `/note/delete`](https://zottmann.dev/obsidian-actions-uri/routes/note/) for deleting a note (#30)
- [NEW] Adds [route `/note/rename`](https://zottmann.dev/obsidian-actions-uri/routes/note/) for renaming or moving a note (#30)
- [NEW] Adds [route `/note/trash`](https://zottmann.dev/obsidian-actions-uri/routes/note/) for moving a note to the trash (#30)
- [NEW] Adds [route `/folder/list`](https://zottmann.dev/obsidian-actions-uri/routes/folder/) for fetching the list of available folders (#30)
- [NEW] Adds [route `/folder/create`](https://zottmann.dev/obsidian-actions-uri/routes/folder/) for creating a new folder or folder structure (#30)
- [NEW] Adds [route `/folder/delete`](https://zottmann.dev/obsidian-actions-uri/routes/folder/) for deleting a folder and all its contents (#30)
- [NEW] Adds [route `/folder/rename`](https://zottmann.dev/obsidian-actions-uri/routes/folder/) for renaming or moving a folder (#30)
- [NEW] Adds [route `/folder/trash`](https://zottmann.dev/obsidian-actions-uri/routes/folder/) for moving a folder to the trash (#30)
- [DEL] Deprecates route [`/vault/list-folders`](https://zottmann.dev/obsidian-actions-uri/routes/vault/) in favor of [`/folder/list`](https://zottmann.dev/obsidian-actions-uri/routes/folder/) (#30)
## 0.15.0, 2022-12-31
- [NEW] Adds extra return params for use by [Actions for Obsidian](https://obsidian.actions.work) (#26)
- [CHG] Root routes (e.g., `/`, `/note`, `/daily-note`) return a non-empty result message
- [FIX] Addresses endless loop in string search/replace routes which would occur when the replacement included the search term (#28)
Have a wondrous 2023, people 🚀
## 0.14.2, 2022-12-16
- [NEW] Adds [Dataview support for `TABLE` and `LIST` queries](https://zottmann.dev/obsidian-actions-uri/routes/dataview/) (#4)
- [NEW] Adds [route `/tags/list`](https://zottmann.dev/obsidian-actions-uri/routes/tags/) for fetching a list of all existing tags (#16)
- [NEW] Adds [route `/note/list`](https://zottmann.dev/obsidian-actions-uri/routes/note/) for fetching the list of available Markdown files (#24)
- [NEW] Adds [route `/vault/list-folders`](https://zottmann.dev/obsidian-actions-uri/routes/vault/) for fetching the list of available folders (#24)
- [NEW] Adds [route `/vault/list-non-notes-files`](https://zottmann.dev/obsidian-actions-uri/routes/vault/) for fetching list of non-Markdown files (#24)
- [NEW] Adds [route `/vault/list-all-files`](https://zottmann.dev/obsidian-actions-uri/routes/vault/) for fetching all files present in a vault (#24)
- [CHG] Adjusts [route `/daily-note/list`](https://zottmann.dev/obsidian-actions-uri/routes/daily-note/) to return the same structure as its `/note/list` counterpart
- [FIX] Notes returned will now always contain the four return parameters `result-content`, `result-body`, `result-front-matter` and `result-filepath` (#22)
- [FIX] Adds missing links to route docs detail pages
## 0.13.0, 2022-12-07
- [NEW] Adds `tags/list` route (#16)
- [NEW] Adds `vault/info` route (#20)
- [CHG] Makes `vault/close` desktop-only (due to the different Obsidian foundations on mobile and desktop)
- [CHG] Replaces Twitter links w/ Mastodon links in docs
## 0.12.1, 2022-11-23
- [NEW] Added `/vault/open` and `/vault/close` routes (#18)
- [CHG] Error callbacks now carry two parameters, `errorCode` and `errorMessage`, instead of just `error`.
- [CHG] The routes `note/open` and `daily-note/open` supersede `open/note` and `open/daily-note` respectively. The old routes have been removed.
- [FIX] Creating a note would sometimes result in the creation of a folder and an error (#16)
- [FIX] Searching/replacing a string would result in an error if the search term looked like a regex (#15)
## 0.11.0, 2022-11-07
- [NEW] Refactors error callback parameters (#12)
- [CHG] Replaces all occurrences of `global.app` (#14)
- [CHG] Changes spaces in callback URLs from plus-sign- to percent-encoding (#11)
- [DEL] Removes support for `call-id` parameter (#7)
- [CHG] Drops support for Obsidian <v1.0
## 0.10.6, 2022-10-12
- Fixes outdated success checks in main file handling methods — due to the
broken check successful file operations weren't recognized as such. Sorry!
## 0.10.5, 2022-10-01
- Initial pre-1.0 release. Let's get this show on the road! 🚀
================================================
FILE: LICENSE.md
================================================
# MIT License
Copyright (c) 2022-present Carlo Zottmann, https://zottmann.co/
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
================================================
FILE: README.md
================================================
<img src="https://raw.githubusercontent.com/czottmann/obsidian-actions-uri/main/readme-assets/actions-uri-128.png" align="left" alt="Plugin logo thingie: an app icon, a two-way communications icon, a note icon">
# Actions URI
This plugin adds additional `x-callback-url` endpoints to [Obsidian](https://obsidian.md) for common actions — it's a clean, super-charged addition to the built-in [Obsidian URIs](https://help.obsidian.md/Advanced+topics/Using+obsidian+URI#Using+Obsidian+URIs), for working with [daily notes, notes, getting search results](https://czottmann.github.io/obsidian-actions-uri/routes/) etc.
## Documentation
For information about available features and routes please see the [documentation](https://czottmann.github.io/obsidian-actions-uri/).
Bug reports and feature requests are welcome, feel free to [open an issue](https://github.com/czottmann/obsidian-actions-uri/issues) here on GitHub. For discussions, please visit the [Plugin Forum](https://forum.actions.work/c/obsidian-actions-uri/6) ("Log in with GitHub" is enabled).
## Plugin Project Status




(Please see Don McCurdy's post ["Healthy expectations in open source"](https://www.donmccurdy.com/2023/07/03/expectations-in-open-source/) for information about the different statuses.)
## Installation
1. Search for "Actions URI" in Obsidian's community plugins browser. ([This link should bring it up.](https://obsidian.md/plugins?id=zottmann))
2. Install it.
3. Enable the plugin in your Obsidian settings under "Community plugins".
That's it.
## Installation via <abbr title="Beta Reviewers Auto-update Tester">BRAT</abbr> (for pre-releases or betas)
1. Install [BRAT](https://github.com/TfTHacker/obsidian42-brat).
2. Add "Actions URI" to BRAT:
1. Open "Obsidian42 - BRAT" via Settings → Community Plugins
2. Click "Add Beta plugin"
3. Use the repository address `czottmann/obsidian-actions-uri`
3. Enable "Actions URI" under Settings → Options → Community Plugins
## Development
Clone the repository, run `pnpm install` OR `npm install` to install the dependencies. Afterwards, run `pnpm dev` OR `npm run dev` to compile and have it watch for file changes.
## Author
Carlo Zottmann, <carlo@zottmann.dev>, https://c.zottmann.dev, https://github.com/czottmann
## Projects using Actions URI
- [Actions for Obsidian](https://obsidian.actions.work/): Useful new Obsidian actions for the Shortcuts app on macOS and iOS, bridging the gap between your notes and your workflows.
Want to see your project here? Drop me a line! (See "Author" section.)
## Thanks to …
- the [obsidian-tasks](https://github.com/obsidian-tasks-group/obsidian-tasks) crew for the "starter templates" for the GitHub Action workflow and the handy `release.sh` script
## License
MIT, see [LICENSE.md](LICENSE.md).
================================================
FILE: bin/prepare-route-docs.sh
================================================
#!/bin/bash
# Dependencies: https://github.com/chmln/sd
for F in src/routes/*.ts; do
ls $F
grep ' \/\/' $F \
| sd ' //' '' \
| sd '^\s*\}' '' \
| sd '^\s*\{' "\n| Parameter | Value | optional | |\n| --- | --- | --- |" \
| sd '^\s*"*(.+?)"*(\?*): (.+);' '| `$1` | $3 | $2 |' \
| sd --string-mode '| undefined ' '' \
| sd --string-mode '| ? |' '| yes |' \
| sd '^ +' '' \
> docs/route--$(basename $F .ts).md
done
================================================
FILE: bin/tag-release.fish
================================================
#!/opt/homebrew/bin/fish --login
function allow_or_exit
read -P "$argv[1] Continue? [y/n] " -l response
switch $response
case y Y
echo
# We're good to go
case '*'
echo "Aborting!"
exit 0
end
end
argparse \
"platform=" "patch-version=" "obsidian-version=" help \
-- $argv
or return
if test -n "$_flag_help"
echo "
Only works in `release/` branches, e.g. `release/1.0.x` or `release/2.1.x`.
Commits the current changes and tags the commit, effectively marking the commit
as the release commit for the version contained in the branch name.
EXAMPLE:
- If the branch name is `release/1.2.x`, and the patch version is '3', then the
tag `1.2.3` will be created.
FLAGS:
--patch-version Will be added to the branch release number. REQUIRED.
--obsidian-version The minimum obsidian version for this release. REQUIRED.
--help This usage description.
"
exit 1
end
if test -z "$_flag_patch_version"
echo "ERROR: --patch-version must be set, exiting"
exit 1
end
if test -z "$_flag_obsidian_version"
echo "ERROR: --obsidian-version must be set, exiting"
exit 1
end
set git_branch (git branch --show-current)
set release_tag (
echo $git_branch | cut -d "/" -f 2 | string replace ".x" ".$_flag_patch_version"
)
allow_or_exit "New tag will be named '$release_tag', minimum Obsidian version is $_flag_obsidian_version."
echo "Updating package.json"
set TEMP_FILE (mktemp)
jq ".version |= \"$release_tag\"" package.json >"$TEMP_FILE"; or exit 1
mv "$TEMP_FILE" package.json
echo "Updating manifest.json"
set TEMP_FILE (mktemp)
jq ".version |= \"$release_tag\" | .minAppVersion |= \"$_flag_obsidian_version\"" \
manifest.json >"$TEMP_FILE"; or exit 1
mv "$TEMP_FILE" manifest.json
echo "Updating versions.json"
set TEMP_FILE (mktemp)
jq ". += {\"$release_tag\": \"$_flag_obsidian_version\"}" \
versions.json >"$TEMP_FILE"; or exit 1
mv "$TEMP_FILE" versions.json
echo "Updating src/plugin-info.json & src/plugin-info.ts"
set TEMP_FILE (mktemp)
set DATE_NOW (date +%FT%T%z)
jq ".pluginVersion |= \"$release_tag\" | .pluginReleasedAt |= \"$DATE_NOW\"" \
src/plugin-info.json >"$TEMP_FILE"; or exit 1
mv "$TEMP_FILE" src/plugin-info.json
echo -n "/* File will be overwritten by bin/release.sh! */
export const PLUGIN_INFO = " >src/plugin-info.ts
cat src/plugin-info.json >>src/plugin-info.ts
echo "Committing the following files with a message of '[REL] Release $release_tag':"
echo
git status --porcelain | sed -E "s/^/ /"
echo
allow_or_exit
git commit -m "[REL] Release $release_tag" -a
git tag $release_tag
echo "Done!"
echo
allow_or_exit "Now pushing the commit and tag to the remote …"
git push --tags
echo "Done!"
echo
allow_or_exit "Now merging branch '$git_branch' into 'main' …"
git checkout main
git pull --tags
git merge -m "[MRG] Merges release '$release_tag'" --no-edit --no-ff $git_branch
allow_or_exit "Push main to remote?"
git push
echo "Done!"
echo
================================================
FILE: docs/404.md
================================================
---
title: Page Not Found
description: Whatever you thought was here, isn't. The plot thickens, the game is afoot!
permalink: /404.html
nav_exclude: true
---
Whatever you thought was here, isn't. The plot thickens, the game is afoot!
`404 Not Found`
<script>
document.addEventListener('DOMContentLoaded', function () {
window.plausible('404', { props: { path: document.location.pathname } });
});
</script>
================================================
FILE: docs/_config.yml
================================================
remote_theme: just-the-docs/just-the-docs
title: Actions URI
description: A plugin for Obsidian.md adding additional `x-callback-url` endpoints to the app for common actions — it's a clean, super-charged addition to Obsidian URI.
baseurl: "/obsidian-actions-uri"
url: "https://zottmann.dev"
permalink: pretty
aux_links:
"Actions URI on GitHub":
- "https://github.com/czottmann/obsidian-actions-uri"
# External navigation links
nav_external_links:
- title: "Actions URI on GitHub"
url: "https://github.com/czottmann/obsidian-actions-uri"
- title: "Actions URI in Community Plugins"
url: "https://obsidian.md/plugins?id=actions-uri"
- title: "🪳 Issues or Bugs?"
url: "https://github.com/czottmann/obsidian-actions-uri/issues"
- title: "💡 Ideas & suggestions?"
url: "https://forum.actions.work/c/obsidian-actions-uri/6"
include:
- license.md
# Back to top link
back_to_top: false
back_to_top_text: "Back to top"
footer_content: 'Copyright © 2022 <a href="https://github.com/czottmann" rel="me">Carlo Zottmann</a>. <a href="https://github.com/czottmann/obsidian-actions-uri/tree/main/LICENSE.md">MIT licensed.</a> This plugin and its author are neither affiliated with nor endorsed by <a href="https://obsidian.md/">Obsidian</a>.'
================================================
FILE: docs/_includes/head_custom.html
================================================
<meta name="fediverse:creator" content="@czottmann@norden.social" />
<script defer data-domain="zottmann.dev" src="https://p.zottmann.dev/js/script.outbound-links.js"></script>
<script>window.plausible = window.plausible || function() { (window.plausible.q = window.plausible.q || []).push(arguments) }</script>
<style>
#main-content img[align="left"] {
margin-right: 1em;
}
tr {
vertical-align: top;
}
td:first-child {
white-space: nowrap;
}
code {
font-size: 0.825em;
}
h1,
h2,
h3,
h4,
h5,
h6 {
scroll-margin-top: 1em;
}
.tag {
border-radius: 0.25em;
color: #fff;
display: inline-block;
font-size: 0.9em;
line-height: 1;
margin: 0 0.5em;
padding: 0.25em 0.35em;
vertical-align: baseline;
}
.tag.tag-version {
background-color: #aaa;
}
.tag.tag-deprecated {
background-color: #f88;
}
.tag.tag-platform {
background-color: #88bcff;
}
</style>
<script>
window.addEventListener("load", () => {
const tocDiv = document.getElementById("toc");
if (!tocDiv) {
return;
}
const headings = document.querySelectorAll("h2");
if (!headings.length) {
return;
}
const h3 = document.createElement("h3");
h3.textContent = "Table of Contents";
tocDiv.appendChild(h3);
const list = document.createElement("ul");
for (let i = 0; i < headings.length; i++) {
const heading = headings[i];
const listItem = document.createElement("li");
const link = document.createElement("a");
link.href = "#" + heading.id;
link.appendChild(
(
heading.querySelector("code") ||
document.createTextNode(heading.textContent)
).cloneNode(true)
);
listItem.appendChild(link);
list.appendChild(listItem);
}
tocDiv.appendChild(list);
});
</script>
================================================
FILE: docs/anatomy.md
================================================
---
nav_order: 5
---
# Anatomy of an Actions URI… URL
An Action URI-provided URL doesn't look much different from a standard Obsidian URI. Its host "actions-uri" tells Obsidian which plugin is taking care of the incoming call:
> obsidian://**actions-uri**/daily-note/get-current?parameter=value
… and the path (a.k.a. a route) specifies what to do:
> obsidian://actions-uri/**daily-note/get-current**?parameter=value
Both data and configuration are passed as URL search parameters:
> obsidian://actions-uri/daily-note/get-current?**parameter=value**
**Please note:** all parameter data must be properly encoded (see [Wikipedia](https://en.wikipedia.org/wiki/Percent-encoding) for a short intro), as Actions URI makes no attempts to correct malformed input.
================================================
FILE: docs/callbacks.md
================================================
---
nav_order: 4
---
# Getting data back from Actions URI
All routes support return calls back to the sender. This is done by passing callback URLs as parameters, e.g.:
```
obsidian://actions-uri/note/get
?vault=My%20Vault
&file=My%20super%20note
&x-success=my-app%3A%2F%2Fsuccess%3Frequest-id%3D123456789
&x-error=my-app%3A%2F%2Ferror
```
This example call, formatted for better readability, contains four parameters: `vault`, `file`, `x-success` and `x-error`. The latter two are used to provide callbacks to the sender.
- `x-success` contains a base URL for returning success information — in the above example, that's `my-app://success?request-id=123456789`
- `x-error` contains a base URL for returning failure information — in the above example, that's `my-app://error`
When Actions URI has completed the work requested by the incoming call, it'll build a callback URL from the value of either `x-success` or `x-error`. The search parameters containing the requested data (prefixed with `result-`) will be added to the URL, then the outgoing call is made. The `x-success`/`x-error` URL may contain a path and/or parameters, those will be used as-is.
Let's continue with the above example. Assuming the file `My super note.md` exists in vault `My Vault` and contains both front matter and the note body *"Actions URI is ready for action!"*, Actions URI would make a callback to the following URL, formatted for better readability:
```
my-app://success
?request-id=123456789
&result-body=%0AActions+URI+is+ready+for+action%21
&result-content=---%0Atags%3A+test%0A---%0A%0AActions+URI+is+ready+for+action%21
&result-filepath=My+super+note.md
&result-front-matter=tags%3A+test%0A
```
The successful callback contains the full note content (`result-content`), the note body (`result-body`), the note's path (`result-filepath`) and its front matter (`result-front-matter`).
Assuming the note does **not** exist, the resulting call would be:
```
my-app://error
?errorCode=404
&errorMessage=Note+couldn%27t+be+found
```
`errorCode` contains a HTTP status, `errorMessage` contains a simple explanation.
## Important note on callback parameters
**The on-success callback parameter structure varies depending on the endpoints.** See the relevant [routes descriptions](routes.md) for details.
On-error callbacks always have the same parameter structure.
## Debug mode
With `debug-mode` enabled in the incoming request (see ["Parameters required in/ accepted by all calls"](parameters.md)), the on-success callback of the above example would look like this:
```
my-app://success
?request-id=123456789
&result-body=%0AActions+URI+is+ready+for+action%21
&result-content=---%0Atags%3A+test%0A---%0A%0AActions+URI+is+ready+for+action%21
&result-filepath=My+super+note.md
&result-front-matter=tags%3A+test%0A
&input-action=actions-uri%2Fnote%2Fget
&input-file=My+super+note.md
&input-silent=false
&input-vault=Testbed
```
It's called "debug mode" because it's helpful when developing an external *whatever* communicating with Obsidian via Actions URI. In production you'll probably want to pair the callbacks to your original requests, that's where the `request-id` parameter (or something similar) in the `x-success` URL comes into play. I'm not aware of any drawbacks keeping debug mode on in live code, however. You do you! 🖖🏼
================================================
FILE: docs/changes.md
================================================
# Release history
Please see [CHANGELOG.md](https://github.com/czottmann/obsidian-actions-uri/blob/main/CHANGELOG.md).
================================================
FILE: docs/faq.md
================================================
---
nav_order: 99
---
# FAQ
## Why does this exist?
One major reason is an upcoming project of mine, for which I need a way to access my vault data from "the outside". The existing options either didn't fully cut it — like [Obsidian URI](https://help.obsidian.md/Advanced+topics/Using+obsidian+URI) — or were pretty full of features but left me wanting anyways, like [Advanced URI](https://github.com/Vinzent03/obsidian-advanced-uri) which does *a lot* but in a way and format that didn't quite gel with me. (Additionally, its author doesn't actually use it anymore themselves[^1] which in my eyes makes it a gamble to rely on it for a new project.) This is not meant as a diss, mind; it's just not the right thing for me, personally.
[^1]: Source: [vinzent03.github.io/obsidian-advanced-uri](https://vinzent03.github.io/obsidian-advanced-uri/)
So, here we are! 😀
## *"I have an idea for this!"*
Cool! If you want to discuss it, either [post it to the Ideas discussion board](https://github.com/czottmann/obsidian-actions-uri/discussions/categories/ideas) or [hit me up on Mastodon](https://actions.work/@obsidian). I'm all ears! 👂🏼
## *"There's a bug!"*, *"There's something wrong"* etc.
Oh no! Please [file a bug report](https://github.com/czottmann/obsidian-actions-uri/issues) here or (if you're unsure about it) [ping me on Mastodon](https://actions.work/@obsidian).
---
================================================
FILE: docs/index.md
================================================
---
nav_order: 0
---
<img src="https://raw.githubusercontent.com/czottmann/obsidian-actions-uri/main/readme-assets/actions-uri-128.png" align="left" alt="Plugin logo thingie: an app icon, a two-way communications icon, a note icon">
# Actions URI
Obsidian natively supports a custom URI protocol `obsidian://` which can trigger various actions within the app. This is commonly used on macOS and mobile apps for automation and cross-app workflows.
**This plugin adds new `x-callback-url` endpoints** to Obsidian so that external sources can better interact with an Obsidian instance by making `GET` requests to a `obsidian://actions-uri/*` URL. All new routes support `x-success` and `x-error` parameters as a way of communicating back to the sender.
It's a clean, somewhat super-charged addition to Obsidian's [own URI scheme](https://help.obsidian.md/Advanced+topics/Using+obsidian+URI#Using+Obsidian+URIs).
## Author
Carlo Zottmann, <carlo@zottmann.dev>
- GitHub: [@czottmann](https://github.com/czottmann)
- Mastodon:
- [@czottmann@norden.social](https://norden.social/@czottmann)
- [@actionsdotwork@pkm.social/](https://pkm.social/@actionsdotwork)
- Bluesky: [@zottmann.dev](https://bsky.app/profile/zottmann.dev)
- Obsidian: [@czottmann](https://forum.obsidian.md/u/czottmann)
- Website: [c.zottmann.dev](https://c.zottmann.dev/)
## Projects using Actions URI
- [Actions for Obsidian](https://obsidian.actions.work/): Useful new Obsidian actions for the Shortcuts app on macOS and iOS, bridging the gap between your notes and your workflows.
Want to see your project here? Drop me a line! (See "Author" section.)
## Plugin project status




(Please see Don McCurdy's post ["Healthy expectations in open source"](https://www.donmccurdy.com/2023/07/03/expectations-in-open-source/) for information about the different statuses.)
================================================
FILE: docs/installation.md
================================================
---
nav_order: 1
---
# Installation
1. Search for "Actions URI" in Obsidian's community plugins browser and install it. ([This link should bring it up.](https://obsidian.md/plugins?id=zottmann))
2. Enable the plugin in your Obsidian settings under "Community plugins".
That's it.
# Installation via <abbr title="Beta Reviewers Auto-update Tester">BRAT</abbr> (for pre-releases or betas)
1. Install [BRAT](https://github.com/TfTHacker/obsidian42-brat).
2. Add "Actions URI" to BRAT:
1. Open "Obsidian42 - BRAT" via Settings → Community Plugins
2. Click "Add Beta plugin"
3. Use the repository address `czottmann/obsidian-actions-uri`
3. Enable "Actions URI" under Settings → Options → Community Plugins
# Development
Clone the repository, run `pnpm install` OR `npm install` to install the dependencies. Afterwards, run `pnpm dev` OR `npm run dev` to compile and have it watch for file changes.
================================================
FILE: docs/license.md
================================================
# MIT License
Please see [LICENSE.md](https://github.com/czottmann/obsidian-actions-uri/blob/main/LICENSE.md).
================================================
FILE: docs/parameters.md
================================================
---
nav_order: 3
---
# Parameters required & accepted by all endpoints
| Parameter | Value type | Optional? | Description
| ------------------------- | ---------- | :-------: | -----------------------------------------------------------------------------------------------------------------------------------------------
| `vault` | string | | The name of the target vault.
| `x-success` | string | mostly | Base URL for on-success callbacks, see [Getting data back from Actions URI](callbacks.md).
| `x-error` | string | mostly | Base URL for on-error callbacks, see [Getting data back from Actions URI](callbacks.md).
| `debug-mode` | boolean | yes | When enabled, Actions URI will include all parameters of the original request in the return calls, prefixed with `input-`. Defaults to `false`.
| `hide-ui-notice-on-error` | boolean | yes | <span class="tag tag-version">v1.8+</span> When enabled, the UI notice will not be shown on "note not found" errors etc. Defaults to `false`.
## Notes about parameters
<dl>
<dt>"mostly"</dt>
<dd>optional unless specified otherwise in the detailed route description</dd>
<dt>"boolean"</dt>
<dd>Actions URI uses what I call "benevolent booleans": the absence of the parameter, an empty string or the string "false" are considered <code>false</code>, everything else is <code>true</code></dd>
</dl>
================================================
FILE: docs/routes/command.md
================================================
---
parent: New Routes
---
# `/command`
<span class="tag tag-version">v1.3+</span>
These routes deal with getting the list of available Obsidian commands (think Command Palette) and executing them. Their URLs start with `obsidian://actions-uri/command`.
<div id="toc"></div>
## Root, i.e. `/command`
Does nothing but say hello.
### Parameters
Only supports the base parameters (see section ["Parameters required in/ accepted by all calls"](../parameters.md)).
### Return values
These parameters will be added to the callbacks used for [getting data back from Actions URI](../callbacks.md).
On success:
| Parameter | Description |
| ---------------- | --------------------------------- |
| `result-message` | A short summary of what was done. |
## `/command/list`
Returns list of all Obsidian Commands available in the queried vault.
| Parameter | Value | Optional? | Description |
| ----------- | ------ | :-------: | --------------------------------- |
| `x-success` | string | | base URL for on-success callbacks |
| `x-error` | string | | base URL for on-error callbacks |
### Return values
These parameters will be added to the callbacks used for [getting data back from Actions URI](../callbacks.md).
On success:
| Parameter | Description |
| ----------------- | ------------------------------------------------------------ |
| `result-commands` | JSON-encoded array of objects (`{id: string, name: string}`) |
On failure:
| Parameter | Description |
| -------------- | ----------------------------------- |
| `errorCode` | A HTTP status code. |
| `errorMessage` | A short summary of what went wrong. |
## `/command/execute`
Triggers the passed-in command or commands in sequence, in the specified vault.
| Parameter | Value | Optional? | Description |
| --------------- | ------ | :-------: | ---------------------------------------------------------------- |
| `commands` | string | | Comma-separated list of command IDs. |
| `pause-in-secs` | number | optional | Length of the pause in seconds between commands. Default: `0.2`. |
| `x-success` | string | optional | base URL for on-success callbacks |
| `x-error` | string | optional | base URL for on-error callbacks |
### Return values
These parameters will be added to the callbacks used for [getting data back from Actions URI](../callbacks.md).
On failure:
| Parameter | Description |
| -------------- | ----------------------------------- |
| `errorCode` | A HTTP status code. |
| `errorMessage` | A short summary of what went wrong. |
================================================
FILE: docs/routes/dataview.md
================================================
---
parent: New Routes
---
# `/dataview`
<span class="tag tag-version">v0.14+</span>
These routes allow for running [Dataview DQL queries](https://blacksmithgu.github.io/obsidian-dataview/queries/structure/). Their URLs start with `obsidian://actions-uri/dataview`.
Currently, only [`LIST`](https://blacksmithgu.github.io/obsidian-dataview/queries/query-types/#list-queries) and [`TABLE`](https://blacksmithgu.github.io/obsidian-dataview/queries/query-types/#table-queries) DQL queries are supported.
<div id="toc"></div>
## Root, i.e. `/dataview`
Does nothing but say hello.
### Parameters
Only supports the base parameters (see section ["Parameters required in/ accepted by all calls"](../parameters.md)).
### Return values
These parameters will be added to the callbacks used for [getting data back from Actions URI](../callbacks.md).
On success:
| Parameter | Description |
| ---------------- | --------------------------------- |
| `result-message` | A short summary of what was done. |
## `/dataview/list-query`
### Parameters
In addition to the base parameters (see section ["Parameters required in/ accepted by all calls"](../parameters.md)):
| Parameter | Value type | Optional? | Description |
| --------- | ---------- | :-------: | ------------------- |
| `dql` | string | | A DQL `LIST` query. |
### Return values
These parameters will be added to the callbacks used for [getting data back from Actions URI](../callbacks.md).
On success:
| Parameter | Description |
| ------------- | ----------------------------------------------------------------------------------------------------------------- |
| `result-data` | An array containing strings (the list results), encoded as JSON string. Every result is returned as string array. |
On failure:
| Parameter | Description |
| -------------- | ----------------------------------- |
| `errorCode` | A HTTP status code. |
| `errorMessage` | A short summary of what went wrong. |
## `/dataview/table-query`
### Parameters
In addition to the base parameters (see section ["Parameters required in/ accepted by all calls"](../parameters.md)):
| Parameter | Value type | Optional? | Description |
| --------- | ---------- | :-------: | -------------------- |
| `dql` | string | | A DQL `TABLE` query. |
### Return values
These parameters will be added to the callbacks used for [getting data back from Actions URI](../callbacks.md).
On success:
| Parameter | Description |
| ------------- | --------------------------------------------------------------------------------- |
| `result-data` | An array containing arrays of strings (the result table), encoded as JSON string. |
On failure:
| Parameter | Description |
| -------------- | ----------------------------------- |
| `errorCode` | A HTTP status code. |
| `errorMessage` | A short summary of what went wrong. |
================================================
FILE: docs/routes/file.md
================================================
---
parent: New Routes
---
# `/file`
<span class="tag tag-version">v1.5+</span>
These routes deal with reading, writing and updating files (i.e., any file, not just notes). Their URLs start with `obsidian://actions-uri/file/…`.
<div id="toc"></div>
## Root, i.e. `/file`
Does nothing but say hello.
### Parameters
Only supports the base parameters (see section ["Parameters required in/ accepted by all calls"](../parameters.md)).
### Return values
These parameters will be added to the callbacks used for [getting data back from Actions URI](../callbacks.md).
On success:
| Parameter | Description |
| ---------------- | --------------------------------- |
| `result-message` | A short summary of what was done. |
## `/file/list`
Returns a list of all files (i.e. everything, not just notes) in the vault.
### Parameters
Only supports the base parameters (see section ["Parameters required in/ accepted by all calls"](../parameters.md)).
### Return values
These parameters will be added to the callbacks used for [getting data back from Actions URI](../callbacks.md).
On success:
| Parameter | Description |
| -------------- | ------------------------------------------------------- |
| `result-paths` | Array containing all file paths encoded as JSON string. |
On failure:
| Parameter | Description |
| -------------- | ----------------------------------- |
| `errorCode` | A HTTP status code. |
| `errorMessage` | A short summary of what went wrong. |
## `/file/get-active`
Returns the currently active/focussed file. If there is no open file, an error 404 is returned.
### Parameters
Only supports the base parameters (see section ["Parameters required in/ accepted by all calls"](../parameters.md)).
### Return values
These parameters will be added to the callbacks used for [getting data back from Actions URI](../callbacks.md).
On success:
| Parameter | Description |
| ------------------ | ----------------------------------------------------------- |
| `result-filepath` | The path to the file relative from the vault's root folder. |
On failure:
| Parameter | Description |
| -------------- | ----------------------------------- |
| `errorCode` | A HTTP status code. |
| `errorMessage` | A short summary of what went wrong. |
## `/file/open`
Opens a specific file in Obsidian.
### Parameters
In addition to the base parameters (see section ["Parameters required in/ accepted by all calls"](../parameters.md)):
| Parameter | Value type | Optional? | Description |
| --------- | ---------- | :-------: | ---------------------------------------------------------------------------------------------- |
| `file` | string | | The path of the file, relative from the vault's root. |
### Return values
These parameters will be added to the callbacks used for [getting data back from Actions URI](../callbacks.md).
On success:
| Parameter | Description |
| ---------------- | --------------------------------- |
| `result-message` | A short summary of what was done. |
On failure:
| Parameter | Description |
| -------------- | ----------------------------------- |
| `errorCode` | A HTTP status code. |
| `errorMessage` | A short summary of what went wrong. |
## `/file/rename`
Renames or moves a file. If the new file path already exists, an error will be returned. If the new file path is the same as the original one, nothing will happen. You can move a file to a different folder by specifying the new file path with a different folder name. For example, this will move the file "image.jpg" from its position at the vault root into "another-folder" while keeping the file name:
- `file`: "image.jpg"
- `new-filename`: "another-folder/image.jpg"
Any folder structure in `new-filename` will **not** be created automatically. If a folder is specified that does not exist, an error will be returned.
### Parameters
In addition to the base parameters (see section ["Parameters required in/ accepted by all calls"](../parameters.md)):
| Parameter | Value type | Optional? | Description |
| -------------- | ---------- | :-------: | -------------------------------------------------------------------------------------------------- |
| `file` | string | | The path of the file, relative from the vault's root. |
| `new-filename` | string | | The new path of the file, relative from the vault's root. |
| `silent` | boolean | optional | *"After updating the file, do **not** open it in Obsidian."* Defaults to `false`. |
### Return values
These parameters will be added to the callbacks used for [getting data back from Actions URI](../callbacks.md).
On success:
| Parameter | Description |
| ---------------- | ------------------------ |
| `result-message` | A short success message. |
On failure:
| Parameter | Description |
| -------------- | ----------------------------------- |
| `errorCode` | A HTTP status code. |
| `errorMessage` | A short summary of what went wrong. |
## `/file/delete`
Immediately deletes a specific file.
### Parameters
In addition to the base parameters (see section ["Parameters required in/ accepted by all calls"](../parameters.md)):
| Parameter | Value type | Optional? | Description |
| --------- | ---------- | :-------: | ---------------------------------------------------------------------------------------------- |
| `file` | string | | The path of the file, relative from the vault's root. |
### Return values
These parameters will be added to the callbacks used for [getting data back from Actions URI](../callbacks.md).
On success:
| Parameter | Description |
| ---------------- | ------------------------ |
| `result-message` | A short success message. |
On failure:
| Parameter | Description |
| -------------- | ----------------------------------- |
| `errorCode` | A HTTP status code. |
| `errorMessage` | A short summary of what went wrong. |
## `/file/trash`
Moves a specific file to the trash (either vault-local trash or system trash, depending on the configuration made in _Settings_ → _Files & Links_ → _Deleted Files_).
### Parameters
In addition to the base parameters (see section ["Parameters required in/ accepted by all calls"](../parameters.md)):
| Parameter | Value type | Optional? | Description |
| --------- | ---------- | :-------: | ---------------------------------------------------------------------------------------------- |
| `file` | string | | The path of the file, relative from the vault's root. |
### Return values
These parameters will be added to the callbacks used for [getting data back from Actions URI](../callbacks.md).
On success:
| Parameter | Description |
| ---------------- | ------------------------ |
| `result-message` | A short success message. |
On failure:
| Parameter | Description |
| -------------- | ----------------------------------- |
| `errorCode` | A HTTP status code. |
| `errorMessage` | A short summary of what went wrong. |
================================================
FILE: docs/routes/folder.md
================================================
---
parent: New Routes
---
# `/folder`
<span class="tag tag-version">v0.16+</span>
These routes deal with folders. Their URLs start with `obsidian://actions-uri/folder/…`.
<div id="toc"></div>
## Root, i.e. `/folder`
Does nothing but say hello.
### Parameters
Only supports the base parameters (see section ["Parameters required in/ accepted by all calls"](../parameters.md)).
### Return values
These parameters will be added to the callbacks used for [getting data back from Actions URI](../callbacks.md).
On success:
| Parameter | Description |
| ---------------- | --------------------------------- |
| `result-message` | A short summary of what was done. |
## `/folder/list`
Returns a list of folder paths.
### Parameters
Only supports the base parameters (see section ["Parameters required in/ accepted by all calls"](../parameters.md)).
| Parameter | Value type | Optional? | Description |
| ----------- | ---------- | :-------: | --------------------------------- |
| `x-success` | string | | base URL for on-success callbacks |
| `x-error` | string | | base URL for on-error callbacks |
### Return values
These parameters will be added to the callbacks used for [getting data back from Actions URI](../callbacks.md).
On success:
| Parameter | Description |
| -------------- | --------------------------------------------------------- |
| `result-paths` | Array containing all folder paths encoded as JSON string. |
On failure:
| Parameter | Description |
| -------------- | ----------------------------------- |
| `errorCode` | A HTTP status code. |
| `errorMessage` | A short summary of what went wrong. |
## `/folder/create`
Creates a new folder or folder structure. In case the folder already exists, nothing will happen.
### Parameters
In addition to the base parameters (see section ["Parameters required in/ accepted by all calls"](../parameters.md)):
| Parameter | Value type | Optional? | Description |
| --------- | ---------- | :-------: | ------------------------------------------------ |
| `folder` | string | | The folder path, relative from the vault's root. |
### Return values
These parameters will be added to the callbacks used for [getting data back from Actions URI](../callbacks.md).
On success:
| Parameter | Description |
| ---------------- | --------------------------------- |
| `result-message` | A short summary of what was done. |
On failure:
| Parameter | Description |
| -------------- | ----------------------------------- |
| `errorCode` | A HTTP status code. |
| `errorMessage` | A short summary of what went wrong. |
## `/folder/rename`
Renames or moves a folder. If the new folder path already exists, an error will be returned. If the new folder path is the same as the original one, nothing will happen. Any folder structure in `new-foldername` will **not** be created automatically. If a folder is specified that does not exist, an error will be returned.
### Parameters
In addition to the base parameters (see section ["Parameters required in/ accepted by all calls"](../parameters.md)):
| Parameter | Value type | Optional? | Description |
| ---------------- | ---------- | :-------: | ---------------------------------------------------- |
| `folder` | string | | The folder path, relative from the vault's root. |
| `new-foldername` | string | | The new folder path, relative from the vault's root. |
### Return values
These parameters will be added to the callbacks used for [getting data back from Actions URI](../callbacks.md).
On success:
| Parameter | Description |
| ---------------- | ------------------------ |
| `result-message` | A short success message. |
On failure:
| Parameter | Description |
| -------------- | ----------------------------------- |
| `errorCode` | A HTTP status code. |
| `errorMessage` | A short summary of what went wrong. |
## `/folder/delete`
Immediately deletes a folder and all its contents.
### Parameters
In addition to the base parameters (see section ["Parameters required in/ accepted by all calls"](../parameters.md)):
| Parameter | Value type | Optional? | Description |
| --------- | ---------- | :-------: | ------------------------------------------------ |
| `folder` | string | | The folder path, relative from the vault's root. |
### Return values
These parameters will be added to the callbacks used for [getting data back from Actions URI](../callbacks.md).
On success:
| Parameter | Description |
| ---------------- | ------------------------ |
| `result-message` | A short success message. |
On failure:
| Parameter | Description |
| -------------- | ----------------------------------- |
| `errorCode` | A HTTP status code. |
| `errorMessage` | A short summary of what went wrong. |
## `/folder/trash`
Moves a folder to the trash (either vault-local trash or system trash, depending on the configuration made in _Settings_ → _Files & Links_ → _Deleted Files_).
### Parameters
In addition to the base parameters (see section ["Parameters required in/ accepted by all calls"](../parameters.md)):
| Parameter | Value type | Optional? | Description |
| --------- | ---------- | :-------: | ------------------------------------------------ |
| `folder` | string | | The folder path, relative from the vault's root. |
### Return values
These parameters will be added to the callbacks used for [getting data back from Actions URI](../callbacks.md).
On success:
| Parameter | Description |
| ---------------- | ------------------------ |
| `result-message` | A short success message. |
On failure:
| Parameter | Description |
| -------------- | ----------------------------------- |
| `errorCode` | A HTTP status code. |
| `errorMessage` | A short summary of what went wrong. |
================================================
FILE: docs/routes/info.md
================================================
---
parent: New Routes
---
# `/info`
These routes deal with plugin & Obsidian environment info. Their URLs start with `obsidian://actions-uri/info`.
<div id="toc"></div>
## `/info`
Returns information about the plugin and the current Obsidian instance.
| Parameter | Value | Optional? | Description |
| ----------- | ------ | :-------: | --------------------------------- |
| `x-success` | string | | base URL for on-success callbacks |
| `x-error` | string | | base URL for on-error callbacks |
### Return values
These parameters will be added to the callbacks used for [getting data back from Actions URI](../callbacks.md).
On success:
| Parameter | Description |
| --------------------------- | --------------------------------------------------------------------------------------------------- |
| `result-plugin-version` | The version of the responding Action URI plugin |
| `result-plugin-released-at` | The release timestamp of the responding Action URI plugin (ISO 8601) |
| `result-api-version` | The API version of the app, which follows the release cycle of the desktop app |
| `result-node-version` | The version of Node running the plugin, e.g. "16.13.2" |
| `result-os` | OS information gathered from Obsidian's user agent string, e.g. "Macintosh; Intel Mac OS X 10_15_7" |
| `result-platform` | Returns "macOS", "Windows/Linux" "iOS" or "Android" |
================================================
FILE: docs/routes/note-properties.md
================================================
---
parent: New Routes
---
# `/note-properties`
<span class="tag tag-version">v1.4+</span>
These routes deal with reading, writing and updating [note properties](https://help.obsidian.md/Editing+and+formatting/Properties). Their URLs start with `obsidian://actions-uri/note-properties/…`.
Please keep in mind that setting new properties will effectively rewrite a note's front matter.
<div id="toc"></div>
## Root, i.e. `/note-properties`
Does nothing but say hello.
### Parameters
Only supports the base parameters (see section ["Parameters required in/ accepted by all calls"](../parameters.md)).
### Return values
These parameters will be added to the callbacks used for [getting data back from Actions URI](../callbacks.md).
On success:
| Parameter | Description |
| ---------------- | --------------------------------- |
| `result-message` | A short summary of what was done. |
## `/note-properties/get`
Returns a note's properties.
### Parameters
In addition to the base parameters (see section ["Parameters required in/ accepted by all calls"](../parameters.md)):
| Parameter | Value type | Optional? | Description |
| --------------- | ---------- | :-------: | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `file` | string | | **Mutually exclusive with `periodic-note`.** The file path of the note, relative from the vault's root. The extension `.md` can be omitted. |
| `periodic-note` | string | | <span class="tag tag-version">v1.6+</span> **Mutually exclusive with `file`.** Allowed values: `daily` \| `weekly` \| `monthly` \| `quarterly` \| `yearly` |
| `x-success` | string | | base URL for on-success callbacks |
| `x-error` | string | | base URL for on-error callbacks |
### Return values
These parameters will be added to the callbacks used for [getting data back from Actions URI](../callbacks.md).
On success:
| Parameter | Description |
| ------------------- | --------------------------------------------- |
| `result-properties` | The file's properties encoded as JSON string. |
On failure:
| Parameter | Description |
| -------------- | ----------------------------------- |
| `errorCode` | A HTTP status code. |
| `errorMessage` | A short summary of what went wrong. |
## `/note-properties/set`
Overwrites or updates a note's properties.
When **overwriting**, all of the note's properties will be replaced with the new ones. When **updating**, the properties specified in the `properties` parameter will replace existing keys with the same name, leaving the rest untouched.
In absence of a dedicated Obsidian API method for writing properties (AFAICT), Actions URI will translate the `properties` parameter into front matter YAML, and then replace the old front matter. Obsidian will pick up the file change and populate the note's properties from the changed front matter. _How_ Obsidian interprets those values is up to you, and it can only be specified in Obsidian itself — please see [the official Property doc page for more details](https://help.obsidian.md/Editing+and+formatting/Properties#Property%20types).
The `properties` parameter will only accept object values with valid types (i.e., string, list of strings, number, and boolean). Date and Date & Time properties are represented as string values.
### Parameters
In addition to the base parameters (see section ["Parameters required in/ accepted by all calls"](../parameters.md)):
| Parameter | Value type | Optional? | Description |
| --------------- | ---------- | :-------: | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `file` | string | | **Mutually exclusive with `periodic-note`.** The file path of the note, relative from the vault's root. The extension `.md` can be omitted. |
| `periodic-note` | string | | <span class="tag tag-version">v1.6+</span> **Mutually exclusive with `file`.** Allowed values: `daily` \| `weekly` \| `monthly` \| `quarterly` \| `yearly` |
| `properties` | string | | The new properties encoded as JSON string. |
| `mode` | string | optional | Either `overwrite` or `update`. Defaults to `overwrite`. |
| `x-success` | string | | base URL for on-success callbacks |
| `x-error` | string | | base URL for on-error callbacks |
### Return values
These parameters will be added to the callbacks used for [getting data back from Actions URI](../callbacks.md).
On success:
| Parameter | Description |
| --------------------- | ------------------------------------------------------------------------------------ |
| `result-body` | The note body, i.e. the note file content minus possible front matter. |
| `result-content` | The entire content of the note file. |
| `result-filepath` | The file path of the note, relative from the vault root folder. |
| `result-front-matter` | The note's front matter, i.e. the note file content minus the note body. |
| `result-properties` | The note's [properties](https://help.obsidian.md/Editing+and+formatting/Properties). |
On failure:
| Parameter | Description |
| -------------- | ----------------------------------- |
| `errorCode` | A HTTP status code. |
| `errorMessage` | A short summary of what went wrong. |
## `/note-properties/clear`
Removes the entirety of a note's properties (and therefore, its front matter).
### Parameters
In addition to the base parameters (see section ["Parameters required in/ accepted by all calls"](../parameters.md)):
| Parameter | Value type | Optional? | Description |
| --------------- | ---------- | :-------: | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `file` | string | | **Mutually exclusive with `periodic-note`.** The file path of the note, relative from the vault's root. The extension `.md` can be omitted. |
| `periodic-note` | string | | <span class="tag tag-version">v1.6+</span> **Mutually exclusive with `file`.** Allowed values: `daily` \| `weekly` \| `monthly` \| `quarterly` \| `yearly` |
| `properties` | string | | The new properties encoded as JSON string. |
| `mode` | string | optional | Either `overwrite` or `update`. Defaults to `overwrite`. |
| `x-success` | string | | base URL for on-success callbacks |
| `x-error` | string | | base URL for on-error callbacks |
### Return values
These parameters will be added to the callbacks used for [getting data back from Actions URI](../callbacks.md).
On success:
| Parameter | Description |
| --------------------- | ------------------------------------------------------------------------------------ |
| `result-body` | The note body, i.e. the note file content minus possible front matter. |
| `result-content` | The entire content of the note file. |
| `result-filepath` | The file path of the note, relative from the vault root folder. |
| `result-front-matter` | The note's front matter, i.e. the note file content minus the note body. |
| `result-properties` | The note's [properties](https://help.obsidian.md/Editing+and+formatting/Properties). |
On failure:
| Parameter | Description |
| -------------- | ----------------------------------- |
| `errorCode` | A HTTP status code. |
| `errorMessage` | A short summary of what went wrong. |
## `/note-properties/remove-keys`
Remove one or more keys from a note's properties (and therefore, its front matter).
The `keys` parameter is a JSON-encoded array of strings, e.g. `["createdAt", "aliases"]`, because keys in a note's properties may contain commas etc., which prevented using a simpler CSV-type parameter like "createdAt,aliases". 🤷🏻♂️
### Parameters
In addition to the base parameters (see section ["Parameters required in/ accepted by all calls"](../parameters.md)):
| Parameter | Value type | Optional? | Description |
| --------------- | ---------- | :-------: | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `file` | string | | **Mutually exclusive with `periodic-note`.** The file path of the note, relative from the vault's root. The extension `.md` can be omitted. |
| `periodic-note` | string | | <span class="tag tag-version">v1.6+</span> **Mutually exclusive with `file`.** Allowed values: `daily` \| `weekly` \| `monthly` \| `quarterly` \| `yearly` |
| `keys` | string | | The list of keys to remove, as a JSON-encoded array of strings. |
| `x-success` | string | | base URL for on-success callbacks |
| `x-error` | string | | base URL for on-error callbacks |
### Return values
These parameters will be added to the callbacks used for [getting data back from Actions URI](../callbacks.md).
On success:
| Parameter | Description |
| --------------------- | ------------------------------------------------------------------------------------ |
| `result-body` | The note body, i.e. the note file content minus possible front matter. |
| `result-content` | The entire content of the note file. |
| `result-filepath` | The file path of the note, relative from the vault root folder. |
| `result-front-matter` | The note's front matter, i.e. the note file content minus the note body. |
| `result-properties` | The note's [properties](https://help.obsidian.md/Editing+and+formatting/Properties). |
On failure:
| Parameter | Description |
| -------------- | ----------------------------------- |
| `errorCode` | A HTTP status code. |
| `errorMessage` | A short summary of what went wrong. |
================================================
FILE: docs/routes/note.md
================================================
---
parent: New Routes
---
# `/note`
These routes deal with reading, writing and updating notes and periodic notes (daily, weekly, etc.). Their URLs start with `obsidian://actions-uri/note/…`.
<div id="toc"></div>
## Root, i.e. `/note`
Does nothing but say hello.
### Parameters
Only supports the base parameters (see section ["Parameters required in/ accepted by all calls"](../parameters.md)).
### Return values
These parameters will be added to the callbacks used for [getting data back from Actions URI](../callbacks.md).
On success:
| Parameter | Description
| ---------------- | ---------------------------------
| `result-message` | A short summary of what was done.
## `/note/list`
<span class="tag tag-version">v0.14+</span>
Returns a path list of either all Markdown files in the vault, or just the subset of all notes that are of a specific Periodic Note type. Default is to return all available notes.
### Parameters
In addition to the base parameters (see section ["Parameters required in/ accepted by all calls"](../parameters.md)):
| Parameter | Value type | Optional? | Description
| --------------- | ----------------------------------------------------------- | :-------: | ---------------------------------
| `periodic-note` | `daily` \| `weekly` \| `monthly` \| `quarterly` \| `yearly` | optional |
| `x-success` | string | | base URL for on-success callbacks
| `x-error` | string | | base URL for on-error callbacks
### Return values
These parameters will be added to the callbacks used for [getting data back from Actions URI](../callbacks.md).
On success:
| Parameter | Description
| -------------- | -------------------------------------------------------
| `result-paths` | Array containing all file paths encoded as JSON string.
On failure:
| Parameter | Description
| -------------- | -----------------------------------
| `errorCode` | A HTTP status code.
| `errorMessage` | A short summary of what went wrong.
## `/note/get`
Returns a specific note.
### Parameters
A note can be targeted by one of three **mutually exclusive** targeting parameters: `file`, `uid`, or `periodic-note`.
- `file`: a full file path.
- <span class="tag tag-version">v1.6+</span> `uid`: a unique identifier in the note's front matter. The key default is `uid`, e.g. "uid: 01ARZ3NDEKTSV4RRFFQ69G5FAV". That key can be changed using the Actions URI settings UI. The URL parameter name will remain the same, i.e. the front matter key might be "id" or "uuid", but the URL parameter will still be `uid`.
- <span class="tag tag-version">v1.6+</span> `periodic-note`: a current periodic note (daily, weekly, etc.). Requires either the core Daily Notes plugin needs to be active, or the community plugin, Periodic Notes, must have its Daily Note feature enabled. Working with Weekly, Monthly, Quarterly or Yearly Notes requires the community plugin Periodic Notes.
In addition to the base parameters (see section ["Parameters required in/ accepted by all calls"](../parameters.md)):
| Parameter | Value type | Optional? | Description
| --------------- | ----------------------------------------------------------- | :-------: | ----------------------------------------------------------------------------------------------
| `file` | string | see above | The file path of the note, relative from the vault's root. The extension `.md` can be omitted.
| `uid` | string | see above | Note ID as stored in a front matter key. Default key: "uid", configurable in Settings UI.
| `periodic-note` | `daily` \| `weekly` \| `monthly` \| `quarterly` \| `yearly` | see above |
| `x-success` | string | | base URL for on-success callbacks
| `x-error` | string | | base URL for on-error callbacks
| `silent` | boolean | optional | *"Do **not** open the note in Obsidian."* Defaults to `false`.
### Return values
These parameters will be added to the callbacks used for [getting data back from Actions URI](../callbacks.md).
**Please note:** `result-properties` might be empty if Obsidian can't process the note's front matter. This can happen if the front matter is malformed or if the note contains a YAML block that is not front matter.
On success:
| Parameter | Description
| --------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------
| `result-body` | The note body, i.e. the note file content minus possible front matter.
| `result-content` | The entire content of the note file.
| `result-filepath` | The file path of the note, relative from the vault root folder.
| `result-front-matter` | The note's front matter, i.e. the note file content minus the note body.
| `result-properties` | <span class="tag tag-version">v1.4+</span> The note's [properties](https://help.obsidian.md/Editing+and+formatting/Properties).
| `result-uid` | <span class="tag tag-version">v1.6+</span> The note's UID, if available
| `result-uri-path` | <span class="tag tag-version">v1.8+</span> The note's URI, by path. Can be used to link to the note from other places on the same device.
| `result-uri-uid` | <span class="tag tag-version">v1.8+</span> The note's URI, by UID (if available). Can be used to link to the note from other places on the same device.
On failure:
| Parameter | Description
| -------------- | -----------------------------------
| `errorCode` | A HTTP status code.
| `errorMessage` | A short summary of what went wrong.
## `/note/get-first-named`
Returns the first note with the specified name.
### Parameters
In addition to the base parameters (see section ["Parameters required in/ accepted by all calls"](../parameters.md)):
| Parameter | Value type | Optional? | Description
| ----------- | ------------------------------------------------------------------------------------------------- | :-------: | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| `file` | string | | The name of the note. The extension `.md` can be omitted.
| `sort-by` | `best-guess` \|`path-asc` \|`path-desc` \|`ctime-asc` \|`ctime-desc` \|`mtime-asc` \|`mtime-desc` | optional | In case there are multiple notes with the same name, they will be sorted by this criterion before the first is picked from the resulting list. Example options: `best-guess` (using Obsidian's link resolution (starting from root folder), default), `path-asc` (full path alphabetically), `ctime-asc` (creation time, oldest first), `mtime-asc` (modification time, oldest first).
| `x-success` | string | | base URL for on-success callbacks
| `x-error` | string | | base URL for on-error callbacks
| `silent` | boolean | optional | *"Do **not** open the note in Obsidian."* Defaults to `false`.
### Return values
These parameters will be added to the callbacks used for [getting data back from Actions URI](../callbacks.md).
**Please note:** `result-properties` might be empty if Obsidian can't process the note's front matter. This can happen if the front matter is malformed or if the note contains a YAML block that is not front matter.
On success:
| Parameter | Description
| --------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------
| `result-body` | The note body, i.e. the note file content minus possible front matter.
| `result-content` | The entire content of the note file.
| `result-filepath` | The file path of the note, relative from the vault root folder.
| `result-front-matter` | The note's front matter, i.e. the note file content minus the note body.
| `result-properties` | <span class="tag tag-version">v1.4+</span> The note's [properties](https://help.obsidian.md/Editing+and+formatting/Properties).
| `result-uid` | <span class="tag tag-version">v1.6+</span> The note's UID, if available
| `result-uri-path` | <span class="tag tag-version">v1.8+</span> The note's URI, by path. Can be used to link to the note from other places on the same device.
| `result-uri-uid` | <span class="tag tag-version">v1.8+</span> The note's URI, by UID (if available). Can be used to link to the note from other places on the same device.
On failure:
| Parameter | Description
| -------------- | -----------------------------------
| `errorCode` | A HTTP status code.
| `errorMessage` | A short summary of what went wrong.
## `/note/get-active`
<span class="tag tag-version">v1.5+</span>
Returns the currently focussed note. If there is no open note or the currently focussed file is not a note, an error 404 is returned.
### Parameters
In addition to the base parameters (see section ["Parameters required in/ accepted by all calls"](../parameters.md)):
| Parameter | Value type | Optional? | Description
| ----------- | ---------- | :-------: | ---------------------------------
| `x-success` | string | | base URL for on-success callbacks
| `x-error` | string | | base URL for on-error callbacks
### Return values
These parameters will be added to the callbacks used for [getting data back from Actions URI](../callbacks.md).
On success:
| Parameter | Description
| --------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------
| `result-body` | The note body, i.e. the note file content minus possible front matter.
| `result-content` | The entire content of the note file.
| `result-filepath` | The file path of the note, relative from the vault root folder.
| `result-front-matter` | The note's front matter, i.e. the note file content minus the note body.
| `result-properties` | The note's [properties](https://help.obsidian.md/Editing+and+formatting/Properties).
| `result-uid` | <span class="tag tag-version">v1.6+</span> The note's UID, if available
| `result-selection` | <span class="tag tag-version">v1.6+</span> The current text selection, if available. (Plain text, no formatting.)
| `result-uri-path` | <span class="tag tag-version">v1.8+</span> The note's URI, by path. Can be used to link to the note from other places on the same device.
| `result-uri-uid` | <span class="tag tag-version">v1.8+</span> The note's URI, by UID (if available). Can be used to link to the note from other places on the same device.
On failure:
| Parameter | Description
| -------------- | -----------------------------------
| `errorCode` | A HTTP status code.
| `errorMessage` | A short summary of what went wrong.
## `/note/open`
<span class="tag tag-version">v0.12+</span>
Opens a specific note in Obsidian.
### Parameters
A note can be targeted by one of three **mutually exclusive** targeting parameters: `file`, `uid`, or `periodic-note`.
- `file`: a full file path.
- <span class="tag tag-version">v1.6+</span> `uid`: a unique identifier in the note's front matter. The key default is `uid`, e.g. "uid: 01ARZ3NDEKTSV4RRFFQ69G5FAV". That key can be changed using the Actions URI settings UI. The URL parameter name will remain the same, i.e. the front matter key might be "id" or "uuid", but the URL parameter will still be `uid`.
- <span class="tag tag-version">v1.6+</span> `periodic-note`: a current periodic note (daily, weekly, etc.). Requires either the core Daily Notes plugin needs to be active, or the community plugin, Periodic Notes, must have its Daily Note feature enabled. Working with Weekly, Monthly, Quarterly or Yearly Notes requires the community plugin Periodic Notes.
In addition to the base parameters (see section ["Parameters required in/ accepted by all calls"](../parameters.md)):
| Parameter | Value type | Optional? | Description
| --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- | :-------: | ----------------------------------------------------------------------------------------------
| `file` | string | see above | The file path of the note, relative from the vault's root. The extension `.md` can be omitted.
| `uid` | string | see above | Note ID as stored in a front matter key. Default key: "uid", configurable in Settings UI.
| `periodic-note` | `daily` \| `weekly` \| `monthly` \| `quarterly` \| `yearly` \| `recent-daily` \| `recent-weekly` \| `recent-monthly` \| `recent-quarterly` \| `recent-yearly` | see above |
### Return values
These parameters will be added to the callbacks used for [getting data back from Actions URI](../callbacks.md).
On success:
| Parameter | Description
| ---------------- | ---------------------------------
| `result-message` | A short summary of what was done.
On failure:
| Parameter | Description
| -------------- | -----------------------------------
| `errorCode` | A HTTP status code.
| `errorMessage` | A short summary of what went wrong.
## `/note/create`
Creates a new note. The default behavior in case there's already a note with the same name / at the requested file path, the base file name will be suffixed with a number. For example, if the desired file name is `My Note.md` but that file already exists, the note will be saved as `My Note 1.md`; if the desired file `a/Folder/Another Note 17.md` already exists, the note will be saved under `a/Folder/Another Note 18.md`.
This route allows one of two **mutually exclusive** targeting parameters: `file` or `periodic-note`.
- `file=some/note/path.md`: create a note at a specific file path.
- <span class="tag tag-version">v1.6+</span> `periodic-note`: a current periodic note (daily, weekly, etc.). Requires either the core Daily Notes plugin needs to be active, or the community plugin, Periodic Notes, must have its Daily Note feature enabled. Working with Weekly, Monthly, Quarterly or Yearly Notes requires the community plugin Periodic Notes.
Depending on which one is used, additional parameters become available.
### When using the `file` parameter
The `apply` parameter allows you to specify what to add to the note after creation. Available options are `content` (implied default) for adding a string, `templates` (for using the Template core plugin), `templater` (for using the Templater community plugin). Depending on the `apply` parameter's value, the following additional parameters are allowed:
- `apply=content`
- `content`: initial body of the note
- `apply=templater`:
- `template-file`: path of the template file to apply
- `apply=templates`:
- `template-file`: path of the template file to apply
Examples:
- `file=new%20note.md&apply=content&content=Hello%20world!`
- `file=new%20note.md&content=Hello%20world!` (as `apply=content` is the default)
- `file=new%20note.md&apply=templater&template-file=Templates/Meeting%20notes.md`
- `file=new%20note.md&apply=templates&template-file=Templates/Meeting%20notes.md`
### Parameters
In addition to the base parameters (see section ["Parameters required in/ accepted by all calls"](../parameters.md)):
| Parameter | Value type | Optional? | Description
| ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------- | :-------: | -------------------------------------------------------------------------------------------------------------------------------
| `file` | string | see above | The file path of the note, relative from the vault's root. The extension `.md` can be omitted.
| +- `apply` | `content` \| `templater` \| `templates` | optional | What to add to the note after creation. Available options: `content` (implied default), `templates`, `templater`.
| +— `content` | string | optional | The initial body of the note. **Prerequisite:** no `apply` parameter or `apply=content`.
| +— `template-file` | string | optional | The path of the template file to apply. **Prerequisite:** `apply=templater` or `apply=templates`.
| `periodic-note` | `daily` \| `weekly` \| `monthly` \| `quarterly` \| `yearly` \| `recent-daily` \| `recent-weekly` \| `recent-monthly` \| `recent-quarterly` \| `recent-yearly` | see above |
| `if-exists` | `skip` \| `overwrite` | optional | What to do if the specified note exists. Set to `overwrite` for replacing the note or `skip` for using the existing note as-is.
| `silent` | boolean | optional | *"After creating the note, do **not** open it in Obsidian."* Defaults to `false`.
### Return values
These parameters will be added to the callbacks used for [getting data back from Actions URI](../callbacks.md).
<span class="tag tag-version">v1.4+</span> **Please note:** `result-properties` might be empty if Obsidian can't process the note's front matter. This can happen if the front matter is malformed or if the note contains a YAML block that is not front matter.
On success:
| Parameter | Description
| --------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------
| `result-body` | The note body, i.e. the note file content minus possible front matter.
| `result-content` | The entire content of the note file.
| `result-filepath` | The file path of the note, relative from the vault root folder.
| `result-front-matter` | The note's front matter, i.e. the note file content minus the note body.
| `result-properties` | <span class="tag tag-version">v1.4+</span> The note's [properties](https://help.obsidian.md/Editing+and+formatting/Properties).
| `result-uid` | <span class="tag tag-version">v1.6+</span> The note's UID, if available
| `result-uri-path` | <span class="tag tag-version">v1.8+</span> The note's URI, by path. Can be used to link to the note from other places on the same device.
| `result-uri-uid` | <span class="tag tag-version">v1.8+</span> The note's URI, by UID (if available). Can be used to link to the note from other places on the same device.
On failure:
| Parameter | Description
| -------------- | -----------------------------------
| `errorCode` | A HTTP status code.
| `errorMessage` | A short summary of what went wrong.
## `/note/append`
Appends text to a note, either to the very end of the note (default) or to the section below a particular headline in a note.
When you want to append text to a section below a headline, the headline must be entered *exactly* as it appears in the note: headline levels, capitalization, punctuation etc. For example, "## My Headline", "### My Headline", and "## my headline" are not identical.
A note can be targeted by one of three **mutually exclusive** targeting parameters: `file`, `uid`, or `periodic-note`.
- `file`: a full file path.
- <span class="tag tag-version">v1.6+</span> `uid`: a unique identifier in the note's front matter. The key default is `uid`, e.g. "uid: 01ARZ3NDEKTSV4RRFFQ69G5FAV". That key can be changed using the Actions URI settings UI. The URL parameter name will remain the same, i.e. the front matter key might be "id" or "uuid", but the URL parameter will still be `uid`.
- <span class="tag tag-version">v1.6+</span> `periodic-note`: a current periodic note (daily, weekly, etc.). Requires either the core Daily Notes plugin needs to be active, or the community plugin, Periodic Notes, must have its Daily Note feature enabled. Working with Weekly, Monthly, Quarterly or Yearly Notes requires the community plugin Periodic Notes.
### Parameters
In addition to the base parameters (see section ["Parameters required in/ accepted by all calls"](../parameters.md)):
| Parameter | Value type | Optional? | Description
| --------------------- | ----------------------------------------------------------- | :-------: | -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| `file` | string | see above | The file path of the note, relative from the vault's root. The extension `.md` can be omitted.
| `uid` | string | see above | Note ID as stored in a front matter key. Default key: "uid", configurable in Settings UI.
| `periodic-note` | `daily` \| `weekly` \| `monthly` \| `quarterly` \| `yearly` | see above |
| `content` | string | | The text to be added at the end of the note.
| `below-headline` | string | optional | <span class="tag tag-version">v1.2+</span> Appends text below the given headline, before the next headline or EOF, whatever comes first.
| `if-headline-missing` | `error` \| `skip` \| `add-headline` | optional | <span class="tag tag-version">v1.6+</span> Only available together with `below-headline`. If the requested headline is missing, return an error, do nothing (`skip`), or add the headline to the end of the note. Default: `error`.
| `create-if-not-found` | boolean | optional | *"If the note does not exist, create it before appending."* Defaults to `false`. <span class="tag tag-version">v1.2+</span>
| `ensure-newline` | boolean | optional | *"Make sure the note ends with a line break."* Defaults to `false`.
| `silent` | boolean | optional | *"After updating the note, do **not** open it in Obsidian."* Defaults to `false`.
### Return values
These parameters will be added to the callbacks used for [getting data back from Actions URI](../callbacks.md).
On success:
| Parameter | Description
| ---------------- | ---------------------------------
| `result-message` | A short summary of what was done.
On failure:
| Parameter | Description
| -------------- | -----------------------------------
| `errorCode` | A HTTP status code.
| `errorMessage` | A short summary of what went wrong.
## `/note/prepend`
Prepends text to a note, either to the very beginning of the note (default) or to the section below a particular headline in a note.
If the very beginning of the note is prepended, then the front matter will be honored (i.e. the new text will be added to the note body below the front matter) unless explicitly stated otherwise.
When you prepend text to a section below a heading, the headline must be entered *exactly* as it appears in the note: headline levels, capitalization, punctuation etc. For example, "## My Headline", "### My Headline", and "## my headline" are not identical.
A note can be targeted by one of three **mutually exclusive** targeting parameters: `file`, `uid`, or `periodic-note`.
- `file`: a full file path.
- <span class="tag tag-version">v1.6+</span> `uid`: a unique identifier in the note's front matter. The key default is `uid`, e.g. "uid: 01ARZ3NDEKTSV4RRFFQ69G5FAV". That key can be changed using the Actions URI settings UI. The URL parameter name will remain the same, i.e. the front matter key might be "id" or "uuid", but the URL parameter will still be `uid`.
- <span class="tag tag-version">v1.6+</span> `periodic-note`: a current periodic note (daily, weekly, etc.). Requires either th
gitextract_9irawtlb/ ├── .beans/ │ ├── auri-14wv--milestone-160.md │ ├── auri-2nvq--milestone-153.md │ ├── auri-48pt--milestone-170.md │ ├── auri-7bdl--milestone-173.md │ ├── auri-b61p--milestone-190.md │ ├── auri-civ4--milestone-163.md │ ├── auri-fzy4--milestone-171.md │ ├── auri-p05h--milestone-164.md │ ├── auri-plwy--milestone-172.md │ ├── auri-q7z3--milestone-150.md │ ├── auri-qz7a--milestone-183.md │ ├── auri-slfp--milestone-162.md │ ├── auri-ujej--milestone-181.md │ ├── auri-vp9j--milestone-161.md │ ├── zco-1156--change-appending-below-headline-to-redefine-headline-section.md │ ├── zco-1182--using-if-exists-skip-and-silent-false-in-note-create-does-no.md │ ├── zco-120--research-obsidian-sync-behaviour-re-plugins-and-startup-prio.md │ ├── zco-1201--checking-for-the-existence-of-a-missing-note-from-afo-should.md │ ├── zco-1239--fix-note-create-if-exists-skip-not-being-honored-for-periodi.md │ ├── zco-1348--check-reports-of-note-properties-set-overwriting-existing-ke.md │ ├── zco-1496--research-user-report-about-note-get-diverging-wrongly-when-f.md │ ├── zco-1541--research-obsidian-1-10-ios-not-returning-xcu-calls.md │ ├── zco-166--set-up-a-testing-framework.md │ ├── zco-276--allow-relative-path-input-for-templates-templater-related-pa.md │ ├── zco-341--add-note-touch-route.md │ ├── zco-397--make-x-parameters-optional-in-command-execute-route.md │ ├── zco-398--create-route-for-getting-currently-focussed-note.md │ ├── zco-409--create-route-for-getting-currently-focussed-file.md │ ├── zco-410--create-route-for-getting-note-by-name.md │ ├── zco-423--add-feature-to-auto-install-new-version.md │ ├── zco-424--release-v1-5-0.md │ ├── zco-429--revamp-the-returning-of-errors-to-pick-from-a-fixed-list-of-.md │ ├── zco-455--add-obsidian-note-uri-to-note-result-objects.md │ ├── zco-480--add-2nd-level-check-to-template-file-parameter.md │ ├── zco-563--remove-use-of-global-app-from-plugin.md │ ├── zco-588--fix-api-calls-not-reaching-actions-uri-when-vault-needs-to-o.md │ ├── zco-606--search-and-replace-string-with-special-character.md │ ├── zco-613--add-periodic-note-support-to-note-properties.md │ ├── zco-616--research-uid-support-in-actions-id.md │ ├── zco-617--implement-zod-magic-to-streamline-targeting-a-note-using-fil.md │ ├── zco-623--removing-the-last-property-key-from-fm-results-in-fm-of.md │ ├── zco-624--replace-use-of-self-now-that-all-handlers-are-bound-to-this.md │ ├── zco-625--add-pn-support-to-note-list.md │ ├── zco-626--add-support-for-getting-most-recent-pn-to-note-open-note-get.md │ ├── zco-627--when-creating-a-note-during-note-append-templater-s-watch-fo.md │ ├── zco-628--lean-into-zod-s-transform-for-resolving-incoming-url-paramet.md │ ├── zco-629--add-result-selection-to-note-get-active.md │ ├── zco-630--add-create-headline-if-not-found-option-for-note-append-note.md │ ├── zco-633--fix-note-create-in-1-6-0.md │ ├── zco-634--fix-headline-block-append-prepend.md │ ├── zco-636--fix-error-code-on-note-get-from-500-back-to-404-to-prevent-a.md │ ├── zco-642--templater-path-parameter-doesn-t-work-as-assumed-intended.md │ ├── zco-645--replace-vault-modify-w-vault-process-to-prevent-race-conditi.md │ ├── zco-651--add-debugging-info-output-to-settings-page.md │ ├── zco-692--insert-below-headline-fails-if-the-headline-is-the-last-line.md │ ├── zco-694--add-optional-logging-to-file.md │ ├── zco-695--fix-empty-note-when-trying-to-append-prepend-content-to-non-.md │ ├── zco-707--check-plugin-against-new-obsidian-guidelines.md │ ├── zco-918--make-dataview-list-result-consistent.md │ ├── zco-937--opening-a-note-in-another-vault-only-opens-the-requested-vau.md │ ├── zco-976--fix-wonky-frontmatter-parser.md │ ├── zco-977--remove-dedicated-periodic-note-related-routes.md │ ├── zco-985--dataview-list-results-return-unexpected-nested-array.md │ └── zco-987--fix-periodic-notes-coming-out-raw-when-using-templater.md ├── .beans.yml ├── .editorconfig ├── .eslintignore ├── .eslintrc ├── .github/ │ ├── FUNDING.yml │ └── workflows/ │ └── release.yml ├── .gitignore ├── .mise.toml ├── .npmrc ├── .prettierrc ├── AGENTS.md ├── CHANGELOG.md ├── LICENSE.md ├── README.md ├── bin/ │ ├── prepare-route-docs.sh │ └── tag-release.fish ├── docs/ │ ├── 404.md │ ├── _config.yml │ ├── _includes/ │ │ └── head_custom.html │ ├── anatomy.md │ ├── callbacks.md │ ├── changes.md │ ├── faq.md │ ├── index.md │ ├── installation.md │ ├── license.md │ ├── parameters.md │ ├── routes/ │ │ ├── command.md │ │ ├── dataview.md │ │ ├── file.md │ │ ├── folder.md │ │ ├── info.md │ │ ├── note-properties.md │ │ ├── note.md │ │ ├── omnisearch.md │ │ ├── root.md │ │ ├── search.md │ │ ├── tags.md │ │ └── vault.md │ └── routes.md ├── esbuild.config.mjs ├── jest.config.js ├── manifest.json ├── package.json ├── src/ │ ├── constants.ts │ ├── main.ts │ ├── plugin-info.json │ ├── plugin-info.ts │ ├── routes/ │ │ ├── command.ts │ │ ├── dataview.ts │ │ ├── file.ts │ │ ├── folder.ts │ │ ├── info.ts │ │ ├── note/ │ │ │ └── create.ts │ │ ├── note-properties.ts │ │ ├── note.ts │ │ ├── omnisearch.ts │ │ ├── root.ts │ │ ├── search.ts │ │ ├── settings.ts │ │ ├── tags.ts │ │ └── vault.ts │ ├── routes.ts │ ├── schemata.ts │ ├── settings.ts │ ├── types/ │ │ ├── handlers.d.ts │ │ ├── obsidian-objects.d.ts │ │ ├── plugins.d.ts │ │ └── results.d.ts │ ├── types.d.ts │ └── utils/ │ ├── callbacks.ts │ ├── file-handling.ts │ ├── parameters.ts │ ├── periodic-notes-handling.ts │ ├── plugins.ts │ ├── results-handling.ts │ ├── routing.ts │ ├── search.ts │ ├── self.ts │ ├── string-handling.ts │ ├── time.ts │ ├── ui.ts │ └── zod.ts ├── tests/ │ ├── README.md │ ├── callback-server.ts │ ├── global-setup.ts │ ├── global-teardown.ts │ ├── helpers.ts │ ├── periodic-notes.ts │ ├── plugin-test-vault.original/ │ │ ├── .obsidian/ │ │ │ ├── app.json │ │ │ ├── appearance.json │ │ │ ├── community-plugins.json │ │ │ ├── core-plugins.json │ │ │ ├── graph.json │ │ │ ├── plugins/ │ │ │ │ ├── actions-uri/ │ │ │ │ │ └── manifest.json │ │ │ │ ├── auto-periodic-notes/ │ │ │ │ │ ├── data.json │ │ │ │ │ ├── main.js │ │ │ │ │ └── manifest.json │ │ │ │ ├── logstravaganza/ │ │ │ │ │ ├── data.json │ │ │ │ │ ├── main.js │ │ │ │ │ └── manifest.json │ │ │ │ ├── periodic-notes/ │ │ │ │ │ ├── data.json │ │ │ │ │ ├── main.js │ │ │ │ │ ├── manifest.json │ │ │ │ │ └── styles.css │ │ │ │ └── templater-obsidian/ │ │ │ │ ├── main.js │ │ │ │ ├── manifest.json │ │ │ │ └── styles.css │ │ │ └── workspace.json │ │ ├── 2024.md │ │ ├── 2025-04.md │ │ ├── 2025-05-18.md │ │ ├── 2025-Q1.md │ │ ├── 2025-W20.md │ │ ├── Welcome.md │ │ ├── _templates/ │ │ │ ├── Daily Note.md │ │ │ ├── Monthly Note.md │ │ │ ├── Quarterly Note.md │ │ │ ├── Weekly Note.md │ │ │ └── Yearly Note.md │ │ ├── any/ │ │ │ └── standard-parameters.test.ts │ │ └── note/ │ │ ├── append/ │ │ │ └── noteAppend.test.ts │ │ ├── create/ │ │ │ └── noteCreate.test.ts │ │ ├── delete/ │ │ │ └── noteDelete.test.ts │ │ ├── get/ │ │ │ ├── note-1.md │ │ │ └── noteGet.test.ts │ │ ├── get-active/ │ │ │ └── noteGetActive.test.ts │ │ ├── get-first-named/ │ │ │ └── noteGetFirstNamed.test.ts │ │ ├── list/ │ │ │ └── noteList.test.ts │ │ ├── open/ │ │ │ ├── note-1.md │ │ │ ├── note-2.md │ │ │ └── noteOpen.test.ts │ │ ├── prepend/ │ │ │ └── notePrepend.test.ts │ │ ├── rename/ │ │ │ └── noteRename.test.ts │ │ ├── search-regex-and-replace/ │ │ │ └── noteSearchRegexAndReplace.test.ts │ │ ├── search-string-and-replace/ │ │ │ └── noteSearchStringAndReplace.test.ts │ │ ├── touch/ │ │ │ └── noteTouch.test.ts │ │ └── trash/ │ │ └── noteTrash.test.ts │ └── types.d.ts ├── tsconfig.json └── versions.json
SYMBOL INDEX (1172 symbols across 47 files)
FILE: esbuild.config.mjs
method setup (line 15) | setup(build) {
FILE: src/constants.ts
constant URI_NAMESPACE (line 1) | const URI_NAMESPACE = "actions-uri";
constant STRINGS (line 3) | const STRINGS = {
constant XCALLBACK_RESULT_PREFIX (line 79) | const XCALLBACK_RESULT_PREFIX = "result";
FILE: src/main.ts
class ActionsURI (line 31) | class ActionsURI extends Plugin {
method onload (line 39) | async onload() {
method loadSettings (line 46) | async loadSettings() {
method saveSettings (line 50) | async saveSettings() {
method registerRoutes (line 67) | private registerRoutes(routeTree: RoutePath) {
method handleIncomingCall (line 108) | private async handleIncomingCall(
method prepParamsForConsole (line 139) | private prepParamsForConsole(params: AnyParams): AnyParams {
method handleParseError (line 160) | private handleParseError(parseError: ZodError, params: ObsidianProtoco...
method sendUrlCallbackIfNeeded (line 223) | private sendUrlCallbackIfNeeded(
method openFileIfNeeded (line 251) | private async openFileIfNeeded(
FILE: src/plugin-info.ts
constant PLUGIN_INFO (line 2) | const PLUGIN_INFO = {
FILE: src/routes.ts
type RoutePath (line 87) | type RoutePath = {
type RouteSubpath (line 91) | type RouteSubpath = {
type AnyParams (line 101) | type AnyParams =
type NoteTargetingParameterKey (line 116) | enum NoteTargetingParameterKey {
FILE: src/routes/command.ts
type ListParams (line 30) | type ListParams = z.infer<typeof listParams>;
type ExecuteParams (line 31) | type ExecuteParams = z.infer<typeof executeParams>;
type AnyLocalParams (line 33) | type AnyLocalParams =
function handleList (line 53) | async function handleList(
function handleExecute (line 64) | async function handleExecute(
FILE: src/routes/dataview.ts
type ReadParams (line 28) | type ReadParams = z.infer<typeof readParams>;
type AnyLocalParams (line 30) | type AnyLocalParams = ReadParams;
function handleTableQuery (line 45) | async function handleTableQuery(
function handleListQuery (line 52) | async function handleListQuery(
function dqlValuesMapper (line 61) | function dqlValuesMapper(dataview: DataviewApi, v: any): any {
function executeDataviewQuery (line 67) | async function executeDataviewQuery(
function getArrayDimensions (line 129) | function getArrayDimensions(input: any[]) {
FILE: src/routes/file.ts
type DefaultParams (line 48) | type DefaultParams = z.infer<typeof defaultParams>;
type OpenParams (line 49) | type OpenParams = z.infer<typeof openParams>;
type DeleteParams (line 50) | type DeleteParams = z.infer<typeof deleteParams>;
type RenameParams (line 51) | type RenameParams = z.infer<typeof renameParams>;
type AnyLocalParams (line 53) | type AnyLocalParams =
function handleList (line 75) | async function handleList(
function handleGetActive (line 84) | async function handleGetActive(
function handleOpen (line 94) | async function handleOpen(
function handleDelete (line 104) | async function handleDelete(
function handleTrash (line 112) | async function handleTrash(
function handleRename (line 120) | async function handleRename(
FILE: src/routes/folder.ts
type ListParams (line 43) | type ListParams = z.infer<typeof listParams>;
type CreateParams (line 44) | type CreateParams = z.infer<typeof createParams>;
type DeleteParams (line 45) | type DeleteParams = z.infer<typeof deleteParams>;
type RenameParams (line 46) | type RenameParams = z.infer<typeof renameParams>;
type AnyLocalParams (line 48) | type AnyLocalParams =
function handleList (line 68) | async function handleList(
function handleCreate (line 78) | async function handleCreate(
function handleRename (line 86) | async function handleRename(
function handleDelete (line 94) | async function handleDelete(
function handleTrash (line 102) | async function handleTrash(
FILE: src/routes/info.ts
type DefaultParams (line 15) | type DefaultParams = z.infer<typeof defaultParams>;
type AnyLocalParams (line 17) | type AnyLocalParams = DefaultParams;
function handleInfo (line 29) | async function handleInfo(
FILE: src/routes/note-properties.ts
type GetParams (line 56) | type GetParams = Prettify<z.infer<typeof getParams>>;
type SetParams (line 57) | type SetParams = Prettify<z.infer<typeof setParams>>;
type RemoveKeysParams (line 58) | type RemoveKeysParams = Prettify<z.infer<typeof removeKeysParams>>;
type AnyLocalParams (line 60) | type AnyLocalParams =
function handleGet (line 83) | async function handleGet(
function handleSet (line 93) | async function handleSet(
function handleClear (line 122) | async function handleClear(
function handleRemoveKeys (line 129) | async function handleRemoveKeys(
function sanitizedStringifyYaml (line 140) | function sanitizedStringifyYaml(props: any): string {
FILE: src/routes/note.ts
type IfHeadlineMissingParameterValue (line 68) | enum IfHeadlineMissingParameterValue {
type ListParams (line 177) | type ListParams = Prettify<z.infer<typeof listParams>>;
type GetParams (line 178) | type GetParams = Prettify<z.infer<typeof getParams>>;
type GetActiveParams (line 179) | type GetActiveParams = Prettify<z.infer<typeof getActiveParams>>;
type ReadFirstNamedParams (line 180) | type ReadFirstNamedParams = Prettify<z.infer<typeof readNamedParams>>;
type OpenParams (line 181) | type OpenParams = Prettify<z.infer<typeof openParams>>;
type AppendParams (line 182) | type AppendParams = Prettify<z.infer<typeof appendParams>>;
type PrependParams (line 183) | type PrependParams = Prettify<z.infer<typeof prependParams>>;
type TouchParams (line 184) | type TouchParams = Prettify<z.infer<typeof touchParams>>;
type SearchAndReplaceParams (line 185) | type SearchAndReplaceParams = Prettify<z.infer<typeof searchAndReplacePa...
type DeleteParams (line 186) | type DeleteParams = Prettify<z.infer<typeof deleteParams>>;
type RenameParams (line 187) | type RenameParams = Prettify<z.infer<typeof renameParams>>;
type AnyLocalParams (line 189) | type AnyLocalParams =
function handleList (line 243) | async function handleList(
function handleGet (line 273) | async function handleGet(
function handleGetActive (line 282) | async function handleGetActive(
function handleGetNamed (line 304) | async function handleGetNamed(
function handleOpen (line 344) | async function handleOpen(
function handleCreate (line 354) | async function handleCreate(
function handleAppend (line 378) | async function handleAppend(
function handlePrepend (line 465) | async function handlePrepend(
function handleTouch (line 566) | async function handleTouch(
function handleSearchStringAndReplace (line 577) | async function handleSearchStringAndReplace(
function handleSearchRegexAndReplace (line 588) | async function handleSearchRegexAndReplace(
function handleDelete (line 602) | async function handleDelete(
function handleTrash (line 611) | async function handleTrash(
function handleRename (line 620) | async function handleRename(
function prepareNoteForHeadlineBlockManipulation (line 634) | async function prepareNoteForHeadlineBlockManipulation(
FILE: src/routes/note/create.ts
type CreateApplyParameterValue (line 41) | enum CreateApplyParameterValue {
type IfExistsParameterValue (line 47) | enum IfExistsParameterValue {
type CreateParams (line 100) | type CreateParams = Prettify<z.infer<typeof createParams>>;
type CreateNoteApplyContentParams (line 102) | type CreateNoteApplyContentParams = Prettify<
type CreateNoteApplyTemplateParams (line 106) | type CreateNoteApplyTemplateParams = Prettify<
type AnyCreateNoteApplyParams (line 111) | type AnyCreateNoteApplyParams =
type CreatePeriodicNoteParams (line 115) | type CreatePeriodicNoteParams = Prettify<
function _handleCreatePeriodicNote (line 122) | async function _handleCreatePeriodicNote(
function _handleCreateNoteFromContent (line 169) | async function _handleCreateNoteFromContent(
function _handleCreateNoteFromTemplate (line 215) | async function _handleCreateNoteFromTemplate(
type ResolvedTemplatePathValues (line 279) | type ResolvedTemplatePathValues = Readonly<{
function resolveTemplatePathStrict (line 303) | function resolveTemplatePathStrict<T>(
FILE: src/routes/omnisearch.ts
type DefaultParams (line 28) | type DefaultParams = z.infer<typeof defaultParams>;
type OpenParams (line 29) | type OpenParams = z.infer<typeof openParams>;
type AnyLocalParams (line 31) | type AnyLocalParams =
function handleSearch (line 47) | async function handleSearch(
function handleOpen (line 54) | async function handleOpen(
FILE: src/routes/search.ts
type DefaultParams (line 28) | type DefaultParams = z.infer<typeof defaultParams>;
type OpenParams (line 29) | type OpenParams = z.infer<typeof openParams>;
type AnyLocalParams (line 31) | type AnyLocalParams =
function handleSearch (line 47) | async function handleSearch(
function handleOpen (line 54) | async function handleOpen(
FILE: src/routes/settings.ts
type DefaultParams (line 14) | type DefaultParams = z.infer<typeof defaultParams>;
type AnyLocalParams (line 16) | type AnyLocalParams = DefaultParams;
function handleOpen (line 29) | async function handleOpen(
FILE: src/routes/tags.ts
type ListParams (line 17) | type ListParams = z.infer<typeof listParams>;
type AnyLocalParams (line 19) | type AnyLocalParams = ListParams;
function handleList (line 32) | async function handleList(
FILE: src/routes/vault.ts
type DefaultParams (line 27) | type DefaultParams = z.infer<typeof defaultParams>;
type AnyLocalParams (line 29) | type AnyLocalParams = DefaultParams;
function handleOpen (line 54) | async function handleOpen(
function handleClose (line 61) | async function handleClose(
function handleInfo (line 76) | async function handleInfo(
function handleListFiles (line 100) | async function handleListFiles(
function handleListFilesExceptNotes (line 109) | async function handleListFilesExceptNotes(
FILE: src/schemata.ts
type IncomingBaseParams (line 25) | type IncomingBaseParams = z.output<typeof incomingBaseParams>;
type NoteTargetingParams (line 32) | type NoteTargetingParams = z.output<typeof noteTargetingParams>;
type NoteTargetingWithRecentsParams (line 40) | type NoteTargetingWithRecentsParams = z.output<
FILE: src/settings.ts
class SettingsTab (line 4) | class SettingsTab extends PluginSettingTab {
method constructor (line 7) | constructor(app: App, plugin: ActionsURI) {
method display (line 12) | display(): void {
FILE: src/types.d.ts
type PluginSettings (line 6) | type PluginSettings = {
type Prettify (line 15) | type Prettify<T> =
FILE: src/types/handlers.d.ts
type HandlerFunction (line 10) | type HandlerFunction = (
type HandlerResult (line 14) | type HandlerResult = {
type HandlerSuccess (line 18) | type HandlerSuccess =
type HandlerFailure (line 22) | type HandlerFailure = Readonly<
type HandlerTextSuccess (line 30) | type HandlerTextSuccess = Readonly<
type HandlerFileSuccess (line 39) | type HandlerFileSuccess = Readonly<
type HandlerFilePathSuccess (line 55) | type HandlerFilePathSuccess = Readonly<
type HandlerDataviewSuccess (line 64) | type HandlerDataviewSuccess = Readonly<
type HandlerPathsSuccess (line 73) | type HandlerPathsSuccess = Readonly<
type HandlerSearchSuccess (line 82) | type HandlerSearchSuccess = Readonly<
type HandlerTagsSuccess (line 91) | type HandlerTagsSuccess = Readonly<
type HandlerInfoSuccess (line 100) | type HandlerInfoSuccess = Readonly<
type HandlerVaultSuccess (line 114) | type HandlerVaultSuccess = Readonly<
type HandlerVaultInfoSuccess (line 119) | type HandlerVaultInfoSuccess = Readonly<
type HandlerCommandsSuccess (line 130) | type HandlerCommandsSuccess = Readonly<
type HandlerCommandsExecutionSuccess (line 139) | type HandlerCommandsExecutionSuccess = Readonly<
type HandlerPropertiesSuccess (line 144) | type HandlerPropertiesSuccess = Readonly<
type NoteProperties (line 153) | type NoteProperties = Record<
type AnyHandlerSuccess (line 158) | type AnyHandlerSuccess =
type AnyHandlerResult (line 171) | type AnyHandlerResult =
FILE: src/types/obsidian-objects.d.ts
type RealLifePlugin (line 14) | interface RealLifePlugin extends App {
type RealLifeApp (line 21) | interface RealLifeApp extends App {
type RealLifeVault (line 35) | interface RealLifeVault extends Vault {
type RealLifeDataAdapter (line 44) | interface RealLifeDataAdapter extends DataAdapter {
type RealLifeMetadataCache (line 48) | interface RealLifeMetadataCache extends MetadataCache {
FILE: src/types/plugins.d.ts
type OmnisearchAPI (line 2) | type OmnisearchAPI = {
type OmnisearchResultNoteApi (line 13) | type OmnisearchResultNoteApi = {
type OmnisearchSearchMatchApi (line 21) | type OmnisearchSearchMatchApi = {
FILE: src/types/results.d.ts
type ErrorObject (line 5) | type ErrorObject = {
type ResultObject (line 11) | type ResultObject<T> = {
type TFileResultObject (line 17) | type TFileResultObject = ResultObject<TFile> | ErrorObject;
type RegexResultObject (line 18) | type RegexResultObject = ResultObject<RegExp> | ErrorObject;
type SearchResultObject (line 19) | type SearchResultObject =
type StringResultObject (line 22) | type StringResultObject = ResultObject<string> | ErrorObject;
type PluginResultObject (line 23) | type PluginResultObject = ResultObject<any> | ErrorObject;
type BooleanResultObject (line 24) | type BooleanResultObject = ResultObject<boolean> | ErrorObject;
type ProcessingResult (line 26) | type ProcessingResult = {
type NoteDetailsResultObject (line 33) | type NoteDetailsResultObject =
FILE: src/utils/callbacks.ts
function sendUrlCallback (line 26) | function sendUrlCallback(
function addObjectToUrlSearchParams (line 71) | function addObjectToUrlSearchParams(
function sendCallbackResult (line 108) | function sendCallbackResult(uri: string) {
FILE: src/utils/file-handling.ts
function createNote (line 50) | async function createNote(
function createOrOverwriteNote (line 101) | async function createOrOverwriteNote(
function getNoteContent (line 134) | async function getNoteContent(
function getNoteDetails (line 157) | async function getNoteDetails(
function sanitizeFilePath (line 201) | function sanitizeFilePath(
function sanitizeFilePathAndGetAbstractFile (line 227) | function sanitizeFilePathAndGetAbstractFile(
function updateNote (line 248) | async function updateNote(
function getUriPath (line 298) | function getUriPath(filepath: string, vaultName: string): string {
function getUriUID (line 304) | function getUriUID(
function getFirstUID (line 318) | function getFirstUID(properties: NoteProperties): string | undefined {
function touchNote (line 335) | async function touchNote(
function searchAndReplaceInNote (line 355) | async function searchAndReplaceInNote(
function appendNote (line 380) | async function appendNote(
function appendNoteBelowHeadline (line 401) | async function appendNoteBelowHeadline(
function prependNote (line 446) | async function prependNote(
function prependNoteBelowHeadline (line 475) | async function prependNoteBelowHeadline(
function getFileMap (line 527) | function getFileMap(): TFile[] {
function getFile (line 541) | async function getFile(
function getNote (line 560) | async function getNote(
function applyCorePluginTemplate (line 579) | async function applyCorePluginTemplate(
function trashFilepath (line 621) | async function trashFilepath(
function renameFilepath (line 651) | async function renameFilepath(
function createFolderIfNecessary (line 683) | async function createFolderIfNecessary(folder: string) {
function propertiesForFile (line 699) | async function propertiesForFile(
function createAndPause (line 721) | async function createAndPause(filepath: string, content: string) {
function dirname (line 741) | function dirname(path: string) {
function extname (line 757) | function extname(path: string) {
FILE: src/utils/parameters.ts
type ResolvedData (line 20) | type ResolvedData = {
type ResolvedNoteTargetingValues (line 24) | type ResolvedNoteTargetingValues = Readonly<{
function resolveNoteTargeting (line 53) | function resolveNoteTargeting<T>(
function resolveNoteTargetingStrict (line 169) | function resolveNoteTargetingStrict<T>(
function mergeResolvedData (line 182) | function mergeResolvedData<T, U>(
function filepathForUID (line 195) | function filepathForUID(uid: string): StringResultObject {
FILE: src/utils/periodic-notes-handling.ts
type PeriodicNoteType (line 40) | enum PeriodicNoteType {
type PeriodicNoteTypeWithRecents (line 48) | enum PeriodicNoteTypeWithRecents {
function getCurrentPeriodicNotePath (line 63) | function getCurrentPeriodicNotePath(
function getMostRecentPeriodicNotePath (line 94) | function getMostRecentPeriodicNotePath(
function getCurrentPeriodicNote (line 104) | function getCurrentPeriodicNote(
function getAllPeriodicNotes (line 126) | function getAllPeriodicNotes(
function checkForEnabledPeriodicNoteFeature (line 147) | function checkForEnabledPeriodicNoteFeature(
function createPeriodicNote (line 168) | async function createPeriodicNote(
function getExistingPeriodicNotePathIfPluginIsAvailable (line 214) | function getExistingPeriodicNotePathIfPluginIsAvailable(
FILE: src/utils/plugins.ts
function enabledCommunityPlugins (line 10) | function enabledCommunityPlugins(): string[] {
function isCommunityPluginEnabled (line 24) | function isCommunityPluginEnabled(pluginID: string): boolean {
function getEnabledCommunityPlugin (line 35) | function getEnabledCommunityPlugin(
function isCorePluginEnabled (line 53) | function isCorePluginEnabled(pluginID: string): boolean {
function getEnabledCorePlugin (line 64) | function getEnabledCorePlugin(pluginID: string): PluginResultObject {
FILE: src/utils/results-handling.ts
function success (line 10) | function success<T>(
function failure (line 24) | function failure(
type ErrorCode (line 31) | enum ErrorCode {
FILE: src/utils/routing.ts
function helloRoute (line 7) | function helloRoute(path: string = "/"): RouteSubpath {
function handleHello (line 11) | async function handleHello(data: AnyParams): Promise<HandlerTextSuccess> {
FILE: src/utils/search.ts
function doSearch (line 18) | async function doSearch(query: string): Promise<SearchResultObject> {
function doOmnisearch (line 52) | async function doOmnisearch(query: string): Promise<SearchResultObject> {
FILE: src/utils/self.ts
function self (line 8) | function self(pluginInstance?: ActionsURI): RealLifePlugin {
FILE: src/utils/string-handling.ts
function endStringWithNewline (line 12) | function endStringWithNewline(str: string = ""): string {
function parseStringIntoRegex (line 25) | function parseStringIntoRegex(search: string): RegexResultObject {
function escapeRegExpChars (line 62) | function escapeRegExpChars(string: string) {
function extractNoteContentParts (line 77) | function extractNoteContentParts(
function toKebabCase (line 97) | function toKebabCase(text: string): string {
FILE: src/utils/time.ts
function pause (line 1) | async function pause(milliseconds: number): Promise<void> {
FILE: src/utils/ui.ts
function showBrandedNotice (line 14) | function showBrandedNotice(msg: string) {
function logToConsole (line 24) | function logToConsole(...data: any[]) {
function logErrorToConsole (line 34) | function logErrorToConsole(...data: any[]) {
function focusOrOpenNote (line 46) | async function focusOrOpenNote(
function revealLeafWithFilePath (line 72) | async function revealLeafWithFilePath(
FILE: src/utils/zod.ts
function lookupAbstractFileForFilePath (line 167) | function lookupAbstractFileForFilePath(path: any): TAbstractFile | null {
function lookupAbstractFolderForPath (line 180) | function lookupAbstractFolderForPath(path: any): TAbstractFile | null {
function lookupAbstractFileForTemplaterPath (line 196) | function lookupAbstractFileForTemplaterPath(path: any): TAbstractFile | ...
function lookupAbstractFileForTemplatesPath (line 224) | function lookupAbstractFileForTemplatesPath(path: any): TAbstractFile | ...
FILE: tests/callback-server.ts
constant TEST_PORT (line 5) | const TEST_PORT = 3000;
class CallbackServer (line 7) | class CallbackServer {
method constructor (line 15) | constructor() {
method start (line 43) | start(): Promise<void> {
method stop (line 53) | stop(): Promise<void> {
method waitForCallback (line 66) | waitForCallback(timeout = 3000): Promise<CallbackData> {
method reset (line 94) | private reset() {
FILE: tests/global-setup.ts
function globalSetup (line 33) | async function globalSetup() {
function startLogFileWatcher (line 80) | async function startLogFileWatcher(
function locateLogstravaganzaLogFile (line 121) | async function locateLogstravaganzaLogFile(
function startHTTPServer (line 134) | async function startHTTPServer() {
function openTestVaultInObsidian (line 143) | async function openTestVaultInObsidian() {
function copyNewPluginBuildIntoTestVault (line 152) | function copyNewPluginBuildIntoTestVault(pluginDir: string) {
function ensureTestPluginIsEnabled (line 163) | async function ensureTestPluginIsEnabled(
function createTestVault (line 185) | async function createTestVault(
FILE: tests/global-teardown.ts
function globalTeardown (line 7) | async function globalTeardown() {
FILE: tests/helpers.ts
function sendUri (line 9) | function sendUri(uri: string): Promise<void> {
function pause (line 42) | async function pause(milliseconds: number): Promise<void> {
function callObsidian (line 74) | async function callObsidian<T = any, E = any>(
function collectRecentLogEntries (line 127) | async function collectRecentLogEntries(): Promise<LogEntry[]> {
function constructObsidianURI (line 142) | function constructObsidianURI(
FILE: tests/plugin-test-vault.original/.obsidian/plugins/auto-periodic-notes/main.js
function _ (line 6) | function _(n){var t,o;let e=window.app.plugins.getPlugin("periodic-notes...
function M (line 6) | function M(){var n,e,t,o;try{let{internalPlugins:i,plugins:a}=window.app...
function L (line 6) | function L(){var n,e,t,o,i,a,s;try{let c=window.app.plugins,u=(n=c.getPl...
function C (line 6) | function C(){var e,t,o,i;let n=window.app.plugins;try{let a=_("monthly")...
function W (line 6) | function W(){var e,t,o,i;let n=window.app.plugins;try{let a=_("quarterly...
function Y (line 6) | function Y(){var e,t,o,i;let n=window.app.plugins;try{let a=_("yearly")&...
function ge (line 6) | function ge(...n){let e=[];for(let o=0,i=n.length;o<i;o++)e=e.concat(n[o...
function je (line 6) | function je(n){let e=n.substring(n.lastIndexOf("/")+1);return e.lastInde...
function Qe (line 6) | async function Qe(n){let e=n.replace(/\\/g,"/").split("/");if(e.pop(),e....
function R (line 6) | async function R(n,e){e.endsWith(".md")||(e+=".md");let t=d.normalizePat...
function A (line 6) | async function A(n){let{metadataCache:e,vault:t}=window.app,o=d.normaliz...
function N (line 6) | function N(n,e="day"){let t=n.clone().startOf(e).format();return`${e}-${...
function me (line 6) | function me(n){return n.replace(/\[[^\]]*\]/g,"")}
function ze (line 6) | function ze(n,e){if(e==="week"){let t=me(n);return/w{1,2}/i.test(t)&&(/M...
function D (line 6) | function D(n,e){return fe(n.basename,e)}
function Ve (line 6) | function Ve(n,e){return fe(je(n),e)}
function fe (line 6) | function fe(n,e){let o={day:M,week:L,month:C,quarter:W,year:Y}[e]().form...
function ye (line 6) | async function ye(n){let e=window.app,{vault:t}=e,o=window.moment,{templ...
function Be (line 6) | function Be(n,e){var t;return(t=e[N(n,"day")])!=null?t:null}
function Ge (line 6) | function Ge(){let{vault:n}=window.app,{folder:e}=M(),t=n.getAbstractFile...
function Je (line 6) | function Je(){let{moment:n}=window,e=n.localeData()._week.dow,t=["sunday...
function Ke (line 6) | function Ke(n){return Je().indexOf(n.toLowerCase())}
function he (line 6) | async function he(n){let{vault:e}=window.app,{template:t,format:o,folder...
function Xe (line 6) | function Xe(n,e){var t;return(t=e[N(n,"week")])!=null?t:null}
function Ze (line 6) | function Ze(){let n={};if(!Ne())return n;let{vault:e}=window.app,{folder...
function we (line 6) | async function we(n){let{vault:e}=window.app,{template:t,format:o,folder...
function et (line 6) | function et(n,e){var t;return(t=e[N(n,"month")])!=null?t:null}
function tt (line 6) | function tt(){let n={};if(!Pe())return n;let{vault:e}=window.app,{folder...
function nt (line 6) | async function nt(n){let{vault:e}=window.app,{template:t,format:o,folder...
function ot (line 6) | function ot(n,e){var t;return(t=e[N(n,"quarter")])!=null?t:null}
function it (line 6) | function it(){let n={};if(!be())return n;let{vault:e}=window.app,{folder...
function at (line 6) | async function at(n){let{vault:e}=window.app,{template:t,format:o,folder...
function rt (line 6) | function rt(n,e){var t;return(t=e[N(n,"year")])!=null?t:null}
function st (line 6) | function st(){let n={};if(!Te())return n;let{vault:e}=window.app,{folder...
function lt (line 6) | function lt(){var o,i;let{app:n}=window,e=n.internalPlugins.plugins["dai...
function Ne (line 6) | function Ne(){var t,o;let{app:n}=window;if(n.plugins.getPlugin("calendar...
function Pe (line 6) | function Pe(){var t,o;let{app:n}=window,e=n.plugins.getPlugin("periodic-...
function be (line 6) | function be(){var t,o;let{app:n}=window,e=n.plugins.getPlugin("periodic-...
function Te (line 6) | function Te(){var t,o;let{app:n}=window,e=n.plugins.getPlugin("periodic-...
function ct (line 6) | function ct(n){let e={day:M,week:L,month:C,quarter:W,year:Y}[n];return e()}
function dt (line 6) | function dt(n,e){return{day:ye,month:we,week:he}[n](e)}
method constructor (line 6) | constructor(){super(...arguments);this.date=(0,Oe.moment)()}
method getAllPaths (line 6) | getAllPaths(){let t=(0,S.getAllDailyNotes)();return Object.entries(t).ma...
method isPresent (line 6) | isPresent(){let t=this.date.clone().startOf(Se),o=(0,S.getAllDailyNotes)...
method create (line 6) | async create(){let t=this.date.clone().startOf(Se);return(0,S.createDail...
method getCurrent (line 6) | getCurrent(){return(0,S.getDailyNote)(this.date,(0,S.getAllDailyNotes)())}
method constructor (line 6) | constructor(){super(...arguments);this.date=(0,ke.moment)()}
method getAllPaths (line 6) | getAllPaths(){let t=(0,O.getAllMonthlyNotes)();return Object.entries(t)....
method isPresent (line 6) | isPresent(){let t=this.date.clone().startOf(Fe),o=(0,O.getAllMonthlyNote...
method create (line 6) | async create(){let t=this.date.clone().startOf(Fe);return(0,O.createMont...
method getCurrent (line 6) | getCurrent(){return(0,O.getMonthlyNote)(this.date,(0,O.getAllMonthlyNote...
method constructor (line 6) | constructor(){super(...arguments);this.date=(0,ve.moment)()}
method getAllPaths (line 6) | getAllPaths(){let t=(0,F.getAllQuarterlyNotes)();return Object.entries(t...
method isPresent (line 6) | isPresent(){let t=this.date.clone().startOf(Ie),o=(0,F.getAllQuarterlyNo...
method create (line 6) | async create(){let t=this.date.clone().startOf(Ie);return(0,F.createQuar...
method getCurrent (line 6) | getCurrent(){return(0,F.getQuarterlyNote)(this.date,(0,F.getAllQuarterly...
method constructor (line 6) | constructor(){super(...arguments);this.date=(0,De.moment)()}
method getAllPaths (line 6) | getAllPaths(){let t=(0,k.getAllWeeklyNotes)();return Object.entries(t).m...
method isPresent (line 6) | isPresent(){let t=this.date.clone().startOf(Ae),o=(0,k.getAllWeeklyNotes...
method create (line 6) | async create(){let t=this.date.clone().startOf(Ae);return(0,k.createWeek...
method getCurrent (line 6) | getCurrent(){return(0,k.getWeeklyNote)(this.date,(0,k.getAllWeeklyNotes)...
method constructor (line 6) | constructor(){super(...arguments);this.date=(0,xe.moment)()}
method getAllPaths (line 6) | getAllPaths(){let t=(0,I.getAllYearlyNotes)();return Object.entries(t).m...
method isPresent (line 6) | isPresent(){let t=this.date.clone().startOf(Ee),o=(0,I.getAllYearlyNotes...
method create (line 6) | async create(){let t=this.date.clone().startOf(Ee);return(0,I.createYear...
method getCurrent (line 6) | getCurrent(){return(0,I.getYearlyNote)(this.date,(0,I.getAllYearlyNotes)...
function y (line 6) | function y(n){console.debug(`[APN] ${n}`)}
method constructor (line 6) | constructor(e){this.workspace=e}
method checkAndCreateNotes (line 6) | async checkAndCreateNotes(e){y("Checking if any new notes need to be cre...
method checkAndCreateSingleNote (line 6) | async checkAndCreateSingleNote(e,t,o,i){if(e.available&&e.enabled)if(y(`...
method getOpenWorkspaceLeaves (line 6) | getOpenWorkspaceLeaves(){return Object.keys(this.workspaceLeaves).length...
method handleClose (line 6) | async handleClose(e,t,o){if(e.closeExisting){y("Checking for any existin...
method handleOpen (line 6) | async handleOpen(e,t){var o;e.openAndPin&&Object.keys(this.getOpenWorksp...
method constructor (line 6) | constructor(e){this.app=e}
method isEnabled (line 6) | isEnabled(){return this.app.plugins.enabledPlugins.has(_e)}
method getPlugin (line 6) | getPlugin(){return this.app.plugins.getPlugin(_e)}
method getSettings (line 6) | getSettings(){return this.getPlugin().settings||{}}
method convertSettings (line 6) | convertSettings(e,t){return e.daily.available=t.daily.enabled,e.weekly.a...
function Le (line 6) | function Le(n){return Object.assign({},ut,n)}
method constructor (line 6) | constructor(e,t){super(e,t),this.plugin=t}
method display (line 6) | display(){this.containerEl.empty();let e=this.plugin.settings,t=["daily"...
method constructor (line 6) | constructor(e,t){super(e,t),this.settings={},this.periodicNotesPlugin=ne...
method onload (line 6) | async onload(){this.updateSettings=this.updateSettings.bind(this),await ...
method onLayoutReady (line 6) | onLayoutReady(){if(!this.periodicNotesPlugin.isEnabled()){new X.Notice("...
method loadSettings (line 6) | async loadSettings(){this.settings=Le(await this.loadData()),y("Loaded s...
method updateSettings (line 6) | async updateSettings(e){this.settings=e,await this.saveData(this.setting...
method syncPeriodicNotesSettings (line 6) | syncPeriodicNotesSettings(){y("Received new settings from Periodic Notes...
method onSettingsUpdate (line 6) | onSettingsUpdate(){this.app.workspace.trigger(ce)}
FILE: tests/plugin-test-vault.original/.obsidian/plugins/logstravaganza/main.js
function getDeviceName (line 37) | function getDeviceName(app) {
function prefixMsg (line 44) | function prefixMsg(msg) {
function createQueue (line 47) | function createQueue(onPush, debounceWrites = true) {
function getFile (line 60) | async function getFile(vault, filename, initialContent) {
function getObsidianURI (line 64) | function getObsidianURI(vault, path) {
function logLevelFilter (line 69) | function logLevelFilter(logEvent, logLevel) {
method constructor (line 88) | constructor(queue) {
method setup (line 92) | setup() {
method teardown (line 117) | teardown() {
method storeEvent (line 134) | storeEvent(level, sender, ...args) {
method rewriteForLogging (line 146) | rewriteForLogging(value) {
method onWindowError (line 174) | onWindowError(event) {
method onWindowUnhandledRejection (line 190) | onWindowUnhandledRejection(event) {
function findFormatterByID (line 282) | function findFormatterByID(id) {
method constructor (line 296) | constructor(app, plugin) {
method display (line 300) | display() {
method allFolders (line 398) | allFolders() {
method allFormatters (line 407) | allFormatters() {
method onload (line 429) | async onload() {
method onunload (line 444) | onunload() {
method loadSettings (line 448) | async loadSettings() {
method saveSettings (line 451) | async saveSettings() {
method getOutputFilename (line 454) | getOutputFilename(ext) {
method writeToFile (line 463) | async writeToFile() {
FILE: tests/plugin-test-vault.original/.obsidian/plugins/periodic-notes/main.js
function _interopDefaultLegacy (line 5) | function _interopDefaultLegacy (e) { return e && typeof e === 'object' &...
constant DEFAULT_DAILY_NOTE_FORMAT (line 9) | const DEFAULT_DAILY_NOTE_FORMAT = "YYYY-MM-DD";
constant DEFAULT_WEEKLY_NOTE_FORMAT (line 10) | const DEFAULT_WEEKLY_NOTE_FORMAT = "gggg-[W]ww";
constant DEFAULT_MONTHLY_NOTE_FORMAT (line 11) | const DEFAULT_MONTHLY_NOTE_FORMAT = "YYYY-MM";
constant DEFAULT_QUARTERLY_NOTE_FORMAT (line 12) | const DEFAULT_QUARTERLY_NOTE_FORMAT = "YYYY-[Q]Q";
constant DEFAULT_YEARLY_NOTE_FORMAT (line 13) | const DEFAULT_YEARLY_NOTE_FORMAT = "YYYY";
function shouldUsePeriodicNotesSettings (line 15) | function shouldUsePeriodicNotesSettings(periodicity) {
function getDailyNoteSettings (line 24) | function getDailyNoteSettings() {
function getWeeklyNoteSettings (line 51) | function getWeeklyNoteSettings() {
function getMonthlyNoteSettings (line 79) | function getMonthlyNoteSettings() {
function getQuarterlyNoteSettings (line 100) | function getQuarterlyNoteSettings() {
function getYearlyNoteSettings (line 121) | function getYearlyNoteSettings() {
function join (line 140) | function join(...partSegments) {
function ensureFolderExists (line 164) | async function ensureFolderExists(path) {
function getNotePath (line 174) | async function getNotePath(directory, filename) {
function getTemplateInfo (line 182) | async function getTemplateInfo(template) {
function getDateUID (line 206) | function getDateUID(date, granularity = "day") {
function removeEscapedCharacters (line 210) | function removeEscapedCharacters(format) {
function isFormatAmbiguous (line 218) | function isFormatAmbiguous(format, granularity) {
function getDateFromFile (line 226) | function getDateFromFile(file, granularity) {
function getDateFromFilename (line 229) | function getDateFromFilename(filename, granularity) {
class DailyNotesFolderMissingError (line 255) | class DailyNotesFolderMissingError extends Error {
function createDailyNote (line 264) | async function createDailyNote(date) {
function getDailyNote (line 303) | function getDailyNote(date, dailyNotes) {
function getAllDailyNotes (line 306) | function getAllDailyNotes() {
class WeeklyNotesFolderMissingError (line 329) | class WeeklyNotesFolderMissingError extends Error {
function getDaysOfWeek (line 331) | function getDaysOfWeek() {
function getDayOfWeekNumericalValue (line 350) | function getDayOfWeekNumericalValue(dayOfWeekName) {
function createWeeklyNote (line 353) | async function createWeeklyNote(date) {
function getWeeklyNote (line 391) | function getWeeklyNote(date, weeklyNotes) {
function getAllWeeklyNotes (line 394) | function getAllWeeklyNotes() {
class MonthlyNotesFolderMissingError (line 417) | class MonthlyNotesFolderMissingError extends Error {
function createMonthlyNote (line 426) | async function createMonthlyNote(date) {
function getMonthlyNote (line 461) | function getMonthlyNote(date, monthlyNotes) {
function getAllMonthlyNotes (line 464) | function getAllMonthlyNotes() {
class QuarterlyNotesFolderMissingError (line 487) | class QuarterlyNotesFolderMissingError extends Error {
function createQuarterlyNote (line 496) | async function createQuarterlyNote(date) {
function getQuarterlyNote (line 531) | function getQuarterlyNote(date, quarterly) {
function getAllQuarterlyNotes (line 534) | function getAllQuarterlyNotes() {
class YearlyNotesFolderMissingError (line 557) | class YearlyNotesFolderMissingError extends Error {
function createYearlyNote (line 566) | async function createYearlyNote(date) {
function getYearlyNote (line 601) | function getYearlyNote(date, yearlyNotes) {
function getAllYearlyNotes (line 604) | function getAllYearlyNotes() {
function appHasDailyNotesPluginLoaded (line 627) | function appHasDailyNotesPluginLoaded() {
function appHasWeeklyNotesPluginLoaded (line 642) | function appHasWeeklyNotesPluginLoaded() {
function appHasMonthlyNotesPluginLoaded (line 652) | function appHasMonthlyNotesPluginLoaded() {
function appHasQuarterlyNotesPluginLoaded (line 658) | function appHasQuarterlyNotesPluginLoaded() {
function appHasYearlyNotesPluginLoaded (line 664) | function appHasYearlyNotesPluginLoaded() {
function orderedValues (line 697) | function orderedValues(unordered) {
function getCalendarPlugin (line 705) | function getCalendarPlugin() {
function getDailyNotesPlugin (line 709) | function getDailyNotesPlugin() {
function capitalize (line 715) | function capitalize(text) {
function hasLegacyDailyNoteSettings (line 718) | function hasLegacyDailyNoteSettings() {
function getLegacyDailyNoteSettings (line 726) | function getLegacyDailyNoteSettings() {
function hasLegacyWeeklyNoteSettings (line 735) | function hasLegacyWeeklyNoteSettings() {
function getLegacyWeeklyNoteSettings (line 745) | function getLegacyWeeklyNoteSettings() {
function isMacOS (line 754) | function isMacOS() {
function isMetaPressed (line 757) | function isMetaPressed(e) {
function openPeriodicNote (line 798) | async function openPeriodicNote(periodicity, date, inNewSplit) {
function getActiveFile (line 816) | function getActiveFile() {
function openFile (line 821) | async function openFile(file, inNewSplit) {
function openNextNote (line 828) | async function openNextNote(periodicity) {
function openPrevNote (line 844) | async function openPrevNote(periodicity) {
function getCommands (line 860) | function getCommands(periodicity) {
constant SETTINGS_UPDATED (line 893) | const SETTINGS_UPDATED = "periodic-notes:settings-updated";
function showFileMenu (line 927) | function showFileMenu(app, settings, position) {
function noop (line 943) | function noop() { }
function run (line 945) | function run(fn) {
function blank_object (line 948) | function blank_object() {
function run_all (line 951) | function run_all(fns) {
function is_function (line 954) | function is_function(thing) {
function safe_not_equal (line 957) | function safe_not_equal(a, b) {
function is_empty (line 960) | function is_empty(obj) {
function subscribe (line 963) | function subscribe(store, ...callbacks) {
function component_subscribe (line 970) | function component_subscribe(component, store, callback) {
function set_store_value (line 973) | function set_store_value(store, ret, value = ret) {
function run_tasks (line 985) | function run_tasks(now) {
function loop (line 999) | function loop(callback) {
function append (line 1013) | function append(target, node) {
function insert (line 1016) | function insert(target, node, anchor) {
function detach (line 1019) | function detach(node) {
function destroy_each (line 1022) | function destroy_each(iterations, detaching) {
function element (line 1028) | function element(name) {
function svg_element (line 1031) | function svg_element(name) {
function text (line 1034) | function text(data) {
function space (line 1037) | function space() {
function empty (line 1040) | function empty() {
function listen (line 1043) | function listen(node, event, handler, options) {
function attr (line 1047) | function attr(node, attribute, value) {
function children (line 1053) | function children(element) {
function set_data (line 1056) | function set_data(text, data) {
function set_input_value (line 1061) | function set_input_value(input, value) {
function toggle_class (line 1064) | function toggle_class(element, name, toggle) {
function custom_event (line 1067) | function custom_event(type, detail) {
function hash$2 (line 1076) | function hash$2(str) {
function create_rule (line 1083) | function create_rule(node, a, b, duration, delay, ease, fn, uid = 0) {
function delete_rule (line 1105) | function delete_rule(node, name) {
function clear_rules (line 1119) | function clear_rules() {
function set_current_component (line 1135) | function set_current_component(component) {
function get_current_component (line 1138) | function get_current_component() {
function onMount (line 1143) | function onMount(fn) {
function onDestroy (line 1146) | function onDestroy(fn) {
function schedule_update (line 1156) | function schedule_update() {
function add_render_callback (line 1162) | function add_render_callback(fn) {
function flush (line 1167) | function flush() {
function update (line 1203) | function update($$) {
function wait (line 1215) | function wait() {
function dispatch (line 1224) | function dispatch(node, direction, kind) {
function group_outros (line 1229) | function group_outros() {
function check_outros (line 1236) | function check_outros() {
function transition_in (line 1242) | function transition_in(block, local) {
function transition_out (line 1248) | function transition_out(block, local, detach, callback) {
function create_in_transition (line 1265) | function create_in_transition(node, fn, params) {
function create_out_transition (line 1327) | function create_out_transition(node, fn, params) {
function create_component (line 1383) | function create_component(block) {
function mount_component (line 1386) | function mount_component(component, target, anchor, customElement) {
function destroy_component (line 1406) | function destroy_component(component, detaching) {
function make_dirty (line 1417) | function make_dirty(component, i) {
function init (line 1425) | function init(component, options, instance, create_fragment, not_equal, ...
class SvelteComponent (line 1487) | class SvelteComponent {
method $destroy (line 1488) | $destroy() {
method $on (line 1492) | $on(type, callback) {
method $set (line 1501) | $set($$props) {
function writable (line 1516) | function writable(value, start = noop) {
function cubicOut (line 1562) | function cubicOut(t) {
function slide (line 1567) | function slide(node, { delay = 0, duration = 400, easing = cubicOut } = ...
function add_css$1 (line 1595) | function add_css$1() {
function create_fragment$5 (line 1602) | function create_fragment$5(ctx) {
class Checkmark (line 1633) | class Checkmark extends SvelteComponent {
method constructor (line 1634) | constructor(options) {
function add_css (line 1643) | function add_css() {
function create_if_block_3 (line 1651) | function create_if_block_3(ctx) {
function create_else_block_2 (line 1761) | function create_else_block_2(ctx) {
function create_if_block_5 (line 1780) | function create_if_block_5(ctx) {
function create_else_block_1 (line 1803) | function create_else_block_1(ctx) {
function create_if_block_4 (line 1839) | function create_if_block_4(ctx) {
function create_if_block_1$2 (line 1878) | function create_if_block_1$2(ctx) {
function create_else_block (line 1962) | function create_else_block(ctx) {
function create_if_block_2 (line 1983) | function create_if_block_2(ctx) {
function create_if_block$4 (line 2021) | function create_if_block$4(ctx) {
function create_fragment$4 (line 2038) | function create_fragment$4(ctx) {
function instance$4 (line 2177) | function instance$4($$self, $$props, $$invalidate) {
class GettingStartedBanner (line 2213) | class GettingStartedBanner extends SvelteComponent {
method constructor (line 2214) | constructor(options) {
function getBasename (line 2226) | function getBasename(format) {
function isValidFilename (line 2230) | function isValidFilename(filename) {
function validateFormat (line 2240) | function validateFormat(format, periodicity) {
function validateTemplate (line 2255) | function validateTemplate(template) {
function validateFolder (line 2266) | function validateFolder(folder) {
function create_if_block_1$1 (line 2279) | function create_if_block_1$1(ctx) {
function create_if_block$3 (line 2321) | function create_if_block$3(ctx) {
function create_fragment$3 (line 2344) | function create_fragment$3(ctx) {
function instance$3 (line 2483) | function instance$3($$self, $$props, $$invalidate) {
class NoteFormatSetting (line 2567) | class NoteFormatSetting extends SvelteComponent {
method constructor (line 2568) | constructor(options) {
function getNodeName (line 2606) | function getNodeName(element) {
function getWindow (line 2610) | function getWindow(node) {
function isElement (line 2623) | function isElement(node) {
function isHTMLElement (line 2628) | function isHTMLElement(node) {
function isShadowRoot (line 2633) | function isShadowRoot(node) {
function applyStyles (line 2645) | function applyStyles(_ref) {
function effect$2 (line 2672) | function effect$2(_ref2) {
function getBasePlacement (line 2726) | function getBasePlacement(placement) {
function getBoundingClientRect (line 2730) | function getBoundingClientRect(element) {
function getLayoutRect (line 2746) | function getLayoutRect(element) {
function contains (line 2769) | function contains(parent, child) {
function getComputedStyle$1 (line 2792) | function getComputedStyle$1(element) {
function isTableElement (line 2796) | function isTableElement(element) {
function getDocumentElement (line 2800) | function getDocumentElement(element) {
function getParentNode (line 2806) | function getParentNode(element) {
function getTrueOffsetParent (line 2823) | function getTrueOffsetParent(element) {
function getContainingBlock (line 2834) | function getContainingBlock(element) {
function getOffsetParent (line 2855) | function getOffsetParent(element) {
function getMainAxisFromPlacement (line 2870) | function getMainAxisFromPlacement(placement) {
function within (line 2878) | function within(min$1, value, max$1) {
function getFreshSideObject (line 2882) | function getFreshSideObject() {
function mergePaddingObject (line 2891) | function mergePaddingObject(paddingObject) {
function expandToHashMap (line 2895) | function expandToHashMap(value, keys) {
function arrow (line 2909) | function arrow(_ref) {
function effect$1 (line 2946) | function effect$1(_ref2) {
function roundOffsetsByDPR (line 3002) | function roundOffsetsByDPR(_ref) {
function mapToStyles (line 3013) | function mapToStyles(_ref2) {
function computeStyles (line 3082) | function computeStyles(_ref4) {
function effect (line 3145) | function effect(_ref) {
function getOppositePlacement (line 3195) | function getOppositePlacement(placement) {
function getOppositeVariationPlacement (line 3205) | function getOppositeVariationPlacement(placement) {
function getWindowScroll (line 3211) | function getWindowScroll(node) {
function getWindowScrollBarX (line 3221) | function getWindowScrollBarX(element) {
function getViewportRect (line 3232) | function getViewportRect(element) {
function getDocumentRect (line 3272) | function getDocumentRect(element) {
function isScrollParent (line 3295) | function isScrollParent(element) {
function getScrollParent (line 3305) | function getScrollParent(node) {
function listScrollParents (line 3325) | function listScrollParents(element, list) {
function rectToClientRect (line 3341) | function rectToClientRect(rect) {
function getInnerBoundingClientRect (line 3350) | function getInnerBoundingClientRect(element) {
function getClientRectFromMixedType (line 3363) | function getClientRectFromMixedType(element, clippingParent) {
function getClippingParents (line 3370) | function getClippingParents(element) {
function getClippingRect (line 3387) | function getClippingRect(element, boundary, rootBoundary) {
function getVariation (line 3406) | function getVariation(placement) {
function computeOffsets (line 3410) | function computeOffsets(_ref) {
function detectOverflow (line 3475) | function detectOverflow(state, options) {
function computeAutoPlacement (line 3530) | function computeAutoPlacement(state, options) {
function getExpandedFallbackPlacements (line 3574) | function getExpandedFallbackPlacements(placement) {
function flip (line 3583) | function flip(_ref) {
function getSideOffsets (line 3714) | function getSideOffsets(overflow, rect, preventedOffsets) {
function isAnySideFullyClipped (line 3730) | function isAnySideFullyClipped(overflow) {
function hide (line 3736) | function hide(_ref) {
function distanceAndSkiddingToXY (line 3773) | function distanceAndSkiddingToXY(placement, rects, offset) {
function offset (line 3794) | function offset(_ref2) {
function popperOffsets (line 3825) | function popperOffsets(_ref) {
function getAltAxis (line 3849) | function getAltAxis(axis) {
function preventOverflow (line 3853) | function preventOverflow(_ref) {
function getHTMLElementScroll (line 3965) | function getHTMLElementScroll(element) {
function getNodeScroll (line 3972) | function getNodeScroll(node) {
function getCompositeRect (line 3982) | function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {
function order (line 4022) | function order(modifiers) {
function orderModifiers (line 4054) | function orderModifiers(modifiers) {
function debounce (line 4065) | function debounce(fn) {
function format (line 4081) | function format(str) {
function validateModifiers (line 4094) | function validateModifiers(modifiers) {
function uniqueBy (line 4166) | function uniqueBy(arr, fn) {
function mergeByName (line 4178) | function mergeByName(modifiers) {
function areValidElements (line 4201) | function areValidElements() {
function popperGenerator (line 4211) | function popperGenerator(generatorOptions) {
class Suggest (line 4440) | class Suggest {
method constructor (line 4441) | constructor(owner, containerEl, scope) {
method onSuggestionClick (line 4465) | onSuggestionClick(event, el) {
method onSuggestionMouseover (line 4471) | onSuggestionMouseover(_event, el) {
method setSuggestions (line 4475) | setSuggestions(values) {
method useSelectedItem (line 4487) | useSelectedItem(event) {
method setSelectedItem (line 4493) | setSelectedItem(selectedIndex, scrollIntoView) {
class TextInputSuggest (line 4505) | class TextInputSuggest {
method constructor (line 4506) | constructor(app, inputEl) {
method onInputChanged (line 4521) | onInputChanged() {
method open (line 4530) | open(container, inputEl) {
method close (line 4558) | close() {
class FileSuggest (line 4567) | class FileSuggest extends TextInputSuggest {
method getSuggestions (line 4568) | getSuggestions(inputStr) {
method renderSuggestion (line 4581) | renderSuggestion(file, el) {
method selectSuggestion (line 4584) | selectSuggestion(file) {
class FolderSuggest (line 4590) | class FolderSuggest extends TextInputSuggest {
method getSuggestions (line 4591) | getSuggestions(inputStr) {
method renderSuggestion (line 4603) | renderSuggestion(file, el) {
method selectSuggestion (line 4606) | selectSuggestion(file) {
function create_if_block$2 (line 4615) | function create_if_block$2(ctx) {
function create_fragment$2 (line 4638) | function create_fragment$2(ctx) {
function instance$2 (line 4742) | function instance$2($$self, $$props, $$invalidate) {
class NoteTemplateSetting (line 4806) | class NoteTemplateSetting extends SvelteComponent {
method constructor (line 4807) | constructor(options) {
function create_if_block$1 (line 4815) | function create_if_block$1(ctx) {
function create_fragment$1 (line 4838) | function create_fragment$1(ctx) {
function instance$1 (line 4944) | function instance$1($$self, $$props, $$invalidate) {
class NoteFolderSetting (line 5008) | class NoteFolderSetting extends SvelteComponent {
method constructor (line 5009) | constructor(options) {
function get_each_context (line 5017) | function get_each_context(ctx, list, i) {
function create_if_block_1 (line 5024) | function create_if_block_1(ctx) {
function create_if_block (line 5065) | function create_if_block(ctx) {
function create_each_block (line 5152) | function create_each_block(ctx) {
function create_fragment (line 5266) | function create_fragment(ctx) {
function instance (line 5384) | function instance($$self, $$props, $$invalidate) {
class SettingsTab (line 5433) | class SettingsTab extends SvelteComponent {
method constructor (line 5434) | constructor(options) {
constant DEFAULT_SETTINGS (line 5440) | const DEFAULT_SETTINGS = Object.freeze({
class PeriodicNotesSettingsTab (line 5445) | class PeriodicNotesSettingsTab extends obsidian.PluginSettingTab {
method constructor (line 5446) | constructor(app, plugin) {
method display (line 5450) | display() {
class PeriodicNotesPlugin (line 5462) | class PeriodicNotesPlugin extends obsidian.Plugin {
method onload (line 5463) | async onload() {
method onLayoutReady (line 5475) | onLayoutReady() {
method migrateWeeklySettings (line 5485) | migrateWeeklySettings() {
method configureRibbonIcons (line 5492) | configureRibbonIcons() {
method configureCommands (line 5514) | configureCommands() {
method loadSettings (line 5530) | async loadSettings() {
method onSettingsUpdate (line 5546) | onSettingsUpdate() {
method updateSettings (line 5552) | async updateSettings(val) {
FILE: tests/plugin-test-vault.original/.obsidian/plugins/templater-obsidian/main.js
function oe (line 6) | function oe(n){let e=new Gi.Notice("",8e3);n instanceof O&&n.console_msg...
method constructor (line 7) | constructor(e,t){super(e);this.console_msg=t;this.name=this.constructor....
function Te (line 7) | async function Te(n,e){try{return await n()}catch(t){return t instanceof...
function ke (line 7) | function ke(n,e){try{return n()}catch(t){return oe(new O(e,t.message)),n...
function n (line 7) | function n(){}
function n (line 7) | function n(){this._docNodeDefinitionsByKind=new Map,this._docNodeDefinit...
function n (line 7) | function n(e){re.validateTSDocTagName(e.tagName),this.tagName=e.tagName,...
function n (line 7) | function n(){}
function n (line 7) | function n(){this.ignoreUndefinedTags=!1,this.reportUnsupportedTags=!1,t...
function n (line 7) | function n(e){this.configuration=e.configuration}
function n (line 7) | function n(){}
function n (line 7) | function n(){this._tagDefinitions=[],this._tagDefinitionsByName=new Map,...
function n (line 7) | function n(){this._nodes=[],this._nodesByName=new Map}
function r (line 7) | function r(){this.constructor=e}
function e (line 7) | function e(){return n!==null&&n.apply(this,arguments)||this}
function r (line 7) | function r(){this.constructor=e}
function e (line 7) | function e(t,r){var i=n.call(this,t)||this;return i._nodes=[],r!==void 0...
function r (line 7) | function r(){this.constructor=e}
function e (line 7) | function e(t,r){return n.call(this,t,r)||this}
function r (line 7) | function r(){this.constructor=e}
function e (line 7) | function e(t,r){return n.call(this,t,r)||this}
function r (line 7) | function r(){this.constructor=e}
function e (line 7) | function e(t){var r=n.call(this,t)||this;return r._blockTag=t.blockTag,r...
function n (line 7) | function n(e,t,r){this.kind=e,this.range=t,this.line=r}
function r (line 8) | function r(){this.constructor=e}
function e (line 8) | function e(t){var r=n.call(this,t)||this;if(t.excerptKind===x.Spacing)fo...
function r (line 8) | function r(){this.constructor=e}
function e (line 8) | function e(t){var r=n.call(this,t)||this;return re.validateTSDocTagName(...
function r (line 8) | function r(){this.constructor=e}
function e (line 8) | function e(t){var r=n.call(this,t)||this;return T.isParsedParameters(t)?...
function n (line 8) | function n(){this._chunks=[]}
function n (line 8) | function n(){}
function n (line 8) | function n(){}
function n (line 8) | function n(){this.eol=`
function r (line 9) | function r(){this.constructor=e}
function e (line 9) | function e(t){var r=n.call(this,t)||this;return r._blocks=[],r}
function r (line 9) | function r(){this.constructor=e}
function e (line 9) | function e(t){var r=n.call(this,t)||this;return r.summarySection=new _t(...
function r (line 9) | function r(){this.constructor=e}
function e (line 9) | function e(t){var r,i=n.call(this,t)||this;return T.isParsedParameters(t...
function r (line 9) | function r(){this.constructor=e}
function e (line 9) | function e(t){var r=n.call(this,t)||this;return r._textExcerpt=new j({co...
function r (line 9) | function r(){this.constructor=e}
function e (line 9) | function e(t){var r=n.call(this,t)||this;return r._escapeStyle=t.escapeS...
function r (line 9) | function r(){this.constructor=e}
function e (line 9) | function e(t){var r=n.call(this,t)||this;return T.isParsedParameters(t)?...
function r (line 9) | function r(){this.constructor=e}
function e (line 9) | function e(t){var r=n.call(this,t)||this;return T.isParsedParameters(t)?...
function r (line 9) | function r(){this.constructor=e}
function e (line 9) | function e(t){var r=n.call(this,t)||this;return T.isParsedParameters(t)?...
function r (line 9) | function r(){this.constructor=e}
function e (line 9) | function e(t){var r,i=n.call(this,t)||this;return T.isParsedParameters(t...
function r (line 9) | function r(){this.constructor=e}
function e (line 9) | function e(t){var r=n.call(this,t)||this;return re.validateTSDocTagName(...
function r (line 9) | function r(){this.constructor=e}
function e (line 9) | function e(t){var r=n.call(this,t)||this;if(r.tagNameWithUpperCase!=="@I...
function r (line 9) | function r(){this.constructor=e}
function e (line 9) | function e(t){var r=n.call(this,t)||this;return T.isParsedParameters(t)?...
function r (line 9) | function r(){this.constructor=e}
function e (line 9) | function e(t){var r=n.call(this,t)||this;if(r.tagNameWithUpperCase!=="@L...
function r (line 9) | function r(){this.constructor=e}
function e (line 9) | function e(t){var r=n.call(this,t)||this;return T.isParsedParameters(t)?...
function r (line 9) | function r(){this.constructor=e}
function e (line 9) | function e(t){var r=n.call(this,t)||this;return T.isParsedParameters(t)?...
function r (line 9) | function r(){this.constructor=e}
function e (line 9) | function e(t){var r=n.call(this,t)||this;return T.isParsedParameters(t)?...
function r (line 9) | function r(){this.constructor=e}
function e (line 9) | function e(t){var r=n.call(this,t)||this;return T.isParsedParameters(t)&...
function r (line 9) | function r(){this.constructor=e}
function e (line 9) | function e(t){var r=n.call(this,t)||this;return r._parameterName=t.param...
function r (line 9) | function r(){this.constructor=e}
function e (line 9) | function e(t){var r=n.call(this,t)||this;if(T.isParsedParameters(t))r._t...
function r (line 9) | function r(){this.constructor=e}
function e (line 9) | function e(t){var r=n.call(this,t)||this;if(T.isParsedParameters(t)){var...
function n (line 9) | function n(){}
function n (line 9) | function n(e,t,r){this.buffer=e,this.pos=t,this.end=r,this._validateBoun...
function n (line 10) | function n(e){this.messageId=e.messageId,this.unformattedText=e.messageT...
function n (line 10) | function n(){this._messages=[]}
function n (line 10) | function n(e,t){this.commentRange=We.empty,this.lines=[],this.tokens=[],...
function n (line 10) | function n(e){this.parserContext=e.parserContext,this._startIndex=e.star...
function n (line 10) | function n(){}
function n (line 12) | function n(){}
function n (line 12) | function n(e,t){if(this._parserContext=e,this.tokens=e.tokens,t){if(t.pa...
function hn (line 13) | function hn(n){return n!==void 0&&Object.hasOwnProperty.call(n,"failureM...
function n (line 13) | function n(e){this._parserContext=e,this._configuration=e.configuration,...
function n (line 13) | function n(){}
function n (line 13) | function n(e){e?this.configuration=e:this.configuration=new Dr}
method constructor (line 13) | constructor(e){super(e.vault,e.path);Object.assign(this,e)}
method constructor (line 13) | constructor(e,t){this.name=e,this.description=t}
function ar (line 13) | function ar(n){return new Promise(e=>setTimeout(e,n))}
function no (line 13) | function no(n){return n.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}
function ro (line 13) | function ro(){return/(<%(?:-|_)?\s*[*~]{0,1})\+((?:.|\s)*?%>)/g}
function Za (line 13) | function Za(n,e){e=(0,Ve.normalizePath)(e);let t=n.vault.getAbstractFile...
function Dt (line 13) | function Dt(n,e){e=(0,Ve.normalizePath)(e);let t=n.vault.getAbstractFile...
function ze (line 13) | function ze(n,e){let t=Za(n,e),r=[];return Ve.Vault.recurseChildren(t,i=...
function io (line 13) | async function io(n,e){return await Promise.all(e.map(async r=>{let i=aw...
function es (line 13) | function es(n,e){let r=new qr().parseString(e),i=new Lr(n);return i.desc...
function ts (line 13) | function ts(n){try{return n.nodes.map(t=>t.getChildNodes().filter(r=>r i...
function ns (line 15) | function ns(n){if(!n)return"";try{return n.content.nodes[0].getChildNode...
function rs (line 15) | function rs(n){try{return n.blocks.map(r=>{let i=r.parameterName,o=r.con...
function Pt (line 15) | function Pt(n,e,t){if(t<0||t===n.length)return;let r=n[e];n[e]=n[t],n[t]=r}
function Jt (line 15) | function Jt(n){return n.workspace.activeEditor?.file??n.workspace.getAct...
function oo (line 15) | function oo(n){let e=n.lastIndexOf("/");return e!==-1?n.slice(0,e):""}
function $r (line 15) | function $r(n){return n!==null&&typeof n=="object"}
function ao (line 15) | function ao(n){let e=n.toString(),t=e.indexOf("(");return e.substring(t+...
function Kr (line 15) | function Kr(n,e,t){let r=n instanceof HTMLOListElement?"li":"p",i=n.crea...
function de (line 15) | function de(n){return n?(n.nodeName||"").toLowerCase():null}
function Z (line 15) | function Z(n){if(n==null)return window;if(n.toString()!=="[object Window...
function De (line 15) | function De(n){var e=Z(n).Element;return n instanceof e||n instanceof El...
function fe (line 15) | function fe(n){var e=Z(n).HTMLElement;return n instanceof e||n instanceo...
function Xt (line 15) | function Xt(n){if(typeof ShadowRoot=="undefined")return!1;var e=Z(n).Sha...
function ds (line 15) | function ds(n){var e=n.state;Object.keys(e.elements).forEach(function(t)...
function ms (line 15) | function ms(n){var e=n.state,t={popper:{position:e.options.strategy,left...
function me (line 15) | function me(n){return n.split("-")[0]}
function Zt (line 15) | function Zt(){var n=navigator.userAgentData;return n!=null&&n.brands&&Ar...
function An (line 15) | function An(){return!/^((?!chrome|android).)*safari/i.test(Zt())}
function Pe (line 15) | function Pe(n,e,t){e===void 0&&(e=!1),t===void 0&&(t=!1);var r=n.getBoun...
function Mt (line 15) | function Mt(n){var e=Pe(n),t=n.offsetWidth,r=n.offsetHeight;return Math....
function _n (line 15) | function _n(n,e){var t=e.getRootNode&&e.getRootNode();if(n.contains(e))r...
function ve (line 15) | function ve(n){return Z(n).getComputedStyle(n)}
function Yr (line 15) | function Yr(n){return["table","td","th"].indexOf(de(n))>=0}
function he (line 15) | function he(n){return((De(n)?n.ownerDocument:n.document)||window.documen...
function ut (line 15) | function ut(n){return de(n)==="html"?n:n.assignedSlot||n.parentNode||(Xt...
function uo (line 15) | function uo(n){return!fe(n)||ve(n).position==="fixed"?null:n.offsetParent}
function gs (line 15) | function gs(n){var e=/firefox/i.test(Zt()),t=/Trident/i.test(Zt());if(t&...
function Ie (line 15) | function Ie(n){for(var e=Z(n),t=uo(n);t&&Yr(t)&&ve(t).position==="static...
function Bt (line 15) | function Bt(n){return["top","bottom"].indexOf(n)>=0?"x":"y"}
function Ft (line 15) | function Ft(n,e,t){return Fe(n,Ot(e,t))}
function fo (line 15) | function fo(n,e,t){var r=Ft(n,e,t);return r>t?t:r}
function xn (line 15) | function xn(){return{top:0,right:0,bottom:0,left:0}}
function yn (line 15) | function yn(n){return Object.assign({},xn(),n)}
function jn (line 15) | function jn(n,e){return e.reduce(function(t,r){return t[r]=n,t},{})}
function As (line 15) | function As(n){var e,t=n.state,r=n.name,i=n.options,o=t.elements.arrow,a...
function _s (line 15) | function _s(n){var e=n.state,t=n.options,r=t.element,i=r===void 0?"[data...
function Ne (line 15) | function Ne(n){return n.split("-")[1]}
function ys (line 15) | function ys(n,e){var t=n.x,r=n.y,i=e.devicePixelRatio||1;return{x:pt(t*i...
function go (line 15) | function go(n){var e,t=n.popper,r=n.popperRect,i=n.placement,o=n.variati...
function js (line 15) | function js(n){var e=n.state,t=n.options,r=t.gpuAcceleration,i=r===void ...
function vs (line 15) | function vs(n){var e=n.state,t=n.instance,r=n.options,i=r.scroll,o=i===v...
function en (line 15) | function en(n){return n.replace(/left|right|bottom|top/g,function(e){ret...
function ur (line 15) | function ur(n){return n.replace(/start|end/g,function(e){return bs[e]})}
function It (line 15) | function It(n){var e=Z(n),t=e.pageXOffset,r=e.pageYOffset;return{scrollL...
function qt (line 15) | function qt(n){return Pe(he(n)).left+It(n).scrollLeft}
function Ur (line 15) | function Ur(n,e){var t=Z(n),r=he(n),i=t.visualViewport,o=r.clientWidth,a...
function Gr (line 15) | function Gr(n){var e,t=he(n),r=It(n),i=(e=n.ownerDocument)==null?void 0:...
function Lt (line 15) | function Lt(n){var e=ve(n),t=e.overflow,r=e.overflowX,i=e.overflowY;retu...
function fr (line 15) | function fr(n){return["html","body","#document"].indexOf(de(n))>=0?n.own...
function jt (line 15) | function jt(n,e){var t;e===void 0&&(e=[]);var r=fr(n),i=r===((t=n.ownerD...
function tn (line 15) | function tn(n){return Object.assign({},n,{left:n.x,top:n.y,right:n.x+n.w...
function Es (line 15) | function Es(n,e){var t=Pe(n,!1,e==="fixed");return t.top=t.top+n.clientT...
function _o (line 15) | function _o(n,e,t){return e===cr?tn(Ur(n,t)):De(e)?Es(e,t):tn(Gr(he(n)))}
function Ts (line 15) | function Ts(n){var e=jt(ut(n)),t=["absolute","fixed"].indexOf(ve(n).posi...
function Wr (line 15) | function Wr(n,e,t,r){var i=e==="clippingParents"?Ts(n):[].concat(e),o=[]...
function vn (line 15) | function vn(n){var e=n.reference,t=n.element,r=n.placement,i=r?me(r):nul...
function qe (line 15) | function qe(n,e){e===void 0&&(e={});var t=e,r=t.placement,i=r===void 0?n...
function Vr (line 15) | function Vr(n,e){e===void 0&&(e={});var t=e,r=t.placement,i=t.boundary,o...
function ks (line 15) | function ks(n){if(me(n)===sr)return[];var e=en(n);return[ur(n),e,ur(e)]}
function Ss (line 15) | function Ss(n){var e=n.state,t=n.options,r=n.name;if(!e.modifiersData[r]...
function yo (line 15) | function yo(n,e,t){return t===void 0&&(t={x:0,y:0}),{top:n.top-e.height-...
function jo (line 15) | function jo(n){return[ie,ce,ue,ae].some(function(e){return n[e]>=0})}
function Cs (line 15) | function Cs(n){var e=n.state,t=n.name,r=e.rects.reference,i=e.rects.popp...
function Ds (line 15) | function Ds(n,e,t){var r=me(n),i=[ae,ie].indexOf(r)>=0?-1:1,o=typeof t==...
function Ps (line 15) | function Ps(n){var e=n.state,t=n.options,r=n.name,i=t.offset,o=i===void ...
function Ns (line 15) | function Ns(n){var e=n.state,t=n.name;e.modifiersData[t]=vn({reference:e...
function zr (line 15) | function zr(n){return n==="x"?"y":"x"}
function Os (line 15) | function Os(n){var e=n.state,t=n.options,r=n.name,i=t.mainAxis,o=i===voi...
function Jr (line 15) | function Jr(n){return{scrollLeft:n.scrollLeft,scrollTop:n.scrollTop}}
function Qr (line 15) | function Qr(n){return n===Z(n)||!fe(n)?It(n):Jr(n)}
function Ms (line 15) | function Ms(n){var e=n.getBoundingClientRect(),t=pt(e.width)/n.offsetWid...
function Xr (line 15) | function Xr(n,e,t){t===void 0&&(t=!1);var r=fe(e),i=fe(e)&&Ms(e),o=he(e)...
function Bs (line 15) | function Bs(n){var e=new Map,t=new Set,r=[];n.forEach(function(o){e.set(...
function Zr (line 15) | function Zr(n){var e=Bs(n);return lo.reduce(function(t,r){return t.conca...
function ei (line 15) | function ei(n){var e;return function(){return e||(e=new Promise(function...
function ti (line 15) | function ti(n){var e=n.reduce(function(t,r){var i=t[r.name];return t[r.n...
function ko (line 15) | function ko(){for(var n=arguments.length,e=new Array(n),t=0;t<n;t++)e[t]...
function So (line 15) | function So(n){n===void 0&&(n={});var e=n,t=e.defaultModifiers,r=t===voi...
method constructor (line 15) | constructor(e,t,r){this.owner=e,this.containerEl=t,t.on("click",".sugges...
method onSuggestionClick (line 15) | onSuggestionClick(e,t){e.preventDefault();let r=this.suggestions.indexOf...
method onSuggestionMouseover (line 15) | onSuggestionMouseover(e,t){let r=this.suggestions.indexOf(t);this.setSel...
method setSuggestions (line 15) | setSuggestions(e){this.containerEl.empty();let t=[];e.forEach(r=>{let i=...
method useSelectedItem (line 15) | useSelectedItem(e){let t=this.values[this.selectedItem];t&&this.owner.se...
method setSelectedItem (line 15) | setSelectedItem(e,t){let r=Is(e,this.suggestions.length),i=this.suggesti...
method constructor (line 15) | constructor(e,t){this.app=e,this.inputEl=t,this.scope=new Co.Scope,this....
method onInputChanged (line 15) | onInputChanged(){let e=this.inputEl.value,t=this.getSuggestions(e);if(!t...
method open (line 15) | open(e,t){this.app.keymap.pushScope(this.scope),e.appendChild(this.sugge...
method close (line 15) | close(){this.app.keymap.popScope(this.scope),this.suggest.setSuggestions...
method constructor (line 15) | constructor(e,t,r){super(t.app,e);this.inputEl=e;this.plugin=t;this.mode=r}
method get_folder (line 15) | get_folder(e){switch(e){case 0:return this.plugin.settings.templates_fol...
method get_error_msg (line 15) | get_error_msg(e){switch(e){case 0:return"Templates folder doesn't exist"...
method getSuggestions (line 15) | getSuggestions(e){let t=ke(()=>ze(this.plugin.app,this.get_folder(this.m...
method renderSuggestion (line 15) | renderSuggestion(e,t){t.setText(e.path)}
method selectSuggestion (line 15) | selectSuggestion(e){this.inputEl.value=e.path,this.inputEl.trigger("inpu...
method constructor (line 15) | constructor(e,t){super(e,t)}
method getSuggestions (line 15) | getSuggestions(e){let t=this.app.vault.getAllLoadedFiles(),r=[],i=e.toLo...
method renderSuggestion (line 15) | renderSuggestion(e,t){t.setText(e.path)}
method selectSuggestion (line 15) | selectSuggestion(e){this.inputEl.value=e.path,this.inputEl.trigger("inpu...
function Oo (line 15) | function Oo(n){return isBoolean(n)?n:[1,3].includes(n)}
function Mo (line 15) | function Mo(n){return isBoolean(n)?n:[1,2].includes(n)}
function Bo (line 15) | function Bo(n){return isBoolean(n)?n:n!=0}
method constructor (line 15) | constructor(e){super(e.app,e);this.plugin=e}
method display (line 15) | display(){this.containerEl.empty(),this.add_template_folder_setting(),th...
method add_template_folder_setting (line 15) | add_template_folder_setting(){new L.Setting(this.containerEl).setName("T...
method add_internal_functions_setting (line 15) | add_internal_functions_setting(){let e=document.createDocumentFragment()...
method add_syntax_highlighting_settings (line 15) | add_syntax_highlighting_settings(){let e=document.createDocumentFragment...
method add_auto_jump_to_cursor (line 15) | add_auto_jump_to_cursor(){let e=document.createDocumentFragment();e.appe...
method add_trigger_on_new_file_creation_setting (line 15) | add_trigger_on_new_file_creation_setting(){let e=document.createDocument...
method add_templates_hotkeys_setting (line 15) | add_templates_hotkeys_setting(){new L.Setting(this.containerEl).setName(...
method add_folder_templates_setting (line 15) | add_folder_templates_setting(){new L.Setting(this.containerEl).setName("...
method add_file_templates_setting (line 15) | add_file_templates_setting(){new L.Setting(this.containerEl).setName("Fi...
method add_startup_templates_setting (line 15) | add_startup_templates_setting(){new L.Setting(this.containerEl).setName(...
method add_user_script_functions_setting (line 15) | add_user_script_functions_setting(){new L.Setting(this.containerEl).setN...
method add_user_system_command_functions_setting (line 15) | add_user_system_command_functions_setting(){let e=document.createDocumen...
method add_donating_setting (line 15) | add_donating_setting(){let e=new L.Setting(this.containerEl).setName("Do...
method constructor (line 15) | constructor(e){super(e.app);this.plugin=e,this.setPlaceholder("Type name...
method getItems (line 15) | getItems(){if(!this.plugin.settings.templates_folder)return this.app.vau...
method getItemText (line 15) | getItemText(e){let t=e.path;if(e.path.startsWith(this.plugin.settings.te...
method onChooseItem (line 15) | onChooseItem(e){switch(this.open_mode){case 0:this.plugin.templater.appe...
method start (line 15) | start(){try{this.open()}catch(e){oe(e)}}
method insert_template (line 15) | insert_template(){this.open_mode=0,this.start()}
method create_new_note_from_template (line 15) | create_new_note_from_template(e){this.creation_folder=e,this.open_mode=1...
method constructor (line 15) | constructor(e){this.plugin=e;this.static_functions=new Map;this.dynamic_...
method getName (line 15) | getName(){return this.name}
method init (line 15) | async init(){await this.create_static_templates(),this.static_object=Obj...
method generate_object (line 15) | async generate_object(e){return this.config=e,await this.create_dynamic_...
method constructor (line 15) | constructor(){super(...arguments);this.name="date"}
method create_static_templates (line 15) | async create_static_templates(){this.static_functions.set("now",this.gen...
method create_dynamic_templates (line 15) | async create_dynamic_templates(){}
method teardown (line 15) | async teardown(){}
method generate_now (line 15) | generate_now(){return(e="YYYY-MM-DD",t,r,i)=>{if(r&&!(0,dt.moment)(r,i)....
method generate_tomorrow (line 15) | generate_tomorrow(){return(e="YYYY-MM-DD")=>(0,dt.moment)().add(1,"days"...
method generate_weekday (line 15) | generate_weekday(){return(e="YYYY-MM-DD",t,r,i)=>{if(r&&!(0,dt.moment)(r...
method generate_yesterday (line 15) | generate_yesterday(){return(e="YYYY-MM-DD")=>(0,dt.moment)().add(-1,"day...
method constructor (line 15) | constructor(){super(...arguments);this.name="file";this.include_depth=0;...
method create_static_templates (line 15) | async create_static_templates(){this.static_functions.set("creation_date...
method create_dynamic_templates (line 15) | async create_dynamic_templates(){this.dynamic_functions.set("content",aw...
method teardown (line 15) | async teardown(){}
method generate_content (line 15) | async generate_content(){return await this.plugin.app.vault.read(this.co...
method generate_create_new (line 15) | generate_create_new(){return async(e,t,r=!1,i)=>{if(this.create_new_dept...
method generate_creation_date (line 15) | generate_creation_date(){return(e="YYYY-MM-DD HH:mm")=>(0,le.moment)(thi...
method generate_cursor (line 15) | generate_cursor(){return e=>`<% tp.file.cursor(${e??""}) %>`}
method generate_cursor_append (line 15) | generate_cursor_append(){return e=>{let t=this.plugin.app.workspace.acti...
method generate_exists (line 15) | generate_exists(){return async e=>{let t=(0,le.normalizePath)(e);return ...
method generate_find_tfile (line 15) | generate_find_tfile(){return e=>{let t=(0,le.normalizePath)(e);return th...
method generate_folder (line 15) | generate_folder(){return(e=!1)=>{let t=this.config.target_file.parent,r;...
method generate_include (line 15) | generate_include(){return async e=>{if(this.include_depth+=1,this.includ...
method generate_last_modified_date (line 15) | generate_last_modified_date(){return(e="YYYY-MM-DD HH:mm")=>(0,le.moment...
method generate_move (line 15) | generate_move(){return async(e,t)=>{let r=t||this.config.target_file,i=(...
method generate_path (line 15) | generate_path(){return(e=!1)=>{let t="";if(le.Platform.isMobile){let r=t...
method generate_rename (line 15) | generate_rename(){return async e=>{if(e.match(/[\\/:]+/g))throw new O("F...
method generate_selection (line 15) | generate_selection(){return()=>{let e=this.plugin.app.workspace.activeEd...
method generate_tags (line 15) | generate_tags(){let e=this.plugin.app.metadataCache.getFileCache(this.co...
method generate_title (line 15) | generate_title(){return this.config.target_file.basename}
method constructor (line 15) | constructor(){super(...arguments);this.name="web"}
method create_static_templates (line 15) | async create_static_templates(){this.static_functions.set("daily_quote",...
method create_dynamic_templates (line 15) | async create_dynamic_templates(){}
method teardown (line 15) | async teardown(){}
method getRequest (line 15) | async getRequest(e){try{let t=await(0,Ho.requestUrl)(e);if(t.status<200&...
method generate_daily_quote (line 15) | generate_daily_quote(){return async()=>{try{let t=(await this.getRequest...
method generate_random_picture (line 16) | generate_random_picture(){return async(e,t,r=!1)=>{try{let i=await this....
method generate_request (line 16) | generate_request(){return async(e,t)=>{try{let i=await(await this.getReq...
method constructor (line 16) | constructor(){super(...arguments);this.name="hooks";this.event_refs=[]}
method create_static_templates (line 16) | async create_static_templates(){this.static_functions.set("on_all_templa...
method create_dynamic_templates (line 16) | async create_dynamic_templates(){}
method teardown (line 16) | async teardown(){this.event_refs.forEach(e=>{e.e.offref(e)}),this.event_...
method generate_on_all_templates_executed (line 16) | generate_on_all_templates_executed(){return e=>{let t=this.plugin.app.wo...
method constructor (line 16) | constructor(){super(...arguments);this.name="frontmatter"}
method create_static_templates (line 16) | async create_static_templates(){}
method create_dynamic_templates (line 16) | async create_dynamic_templates(){let e=this.plugin.app.metadataCache.get...
method teardown (line 16) | async teardown(){}
method constructor (line 16) | constructor(e,t,r,i){super(e);this.prompt_text=t;this.default_value=r;th...
method onOpen (line 16) | onOpen(){this.titleEl.setText(this.prompt_text),this.createForm()}
method onClose (line 16) | onClose(){this.contentEl.empty(),this.submitted||this.reject(new O("Canc...
method createForm (line 16) | createForm(){let e=this.contentEl.createDiv();e.addClass("templater-prom...
method enterCallback (line 16) | enterCallback(e){e.isComposing||e.keyCode===229||(this.multi_line?Je.Pla...
method resolveAndClose (line 16) | resolveAndClose(e){this.submitted=!0,e.preventDefault(),this.resolve(thi...
method openAndGetValue (line 16) | async openAndGetValue(e,t){this.resolve=e,this.reject=t,this.open()}
method constructor (line 16) | constructor(e,t,r,i,o){super(e);this.text_items=t;this.items=r;this.subm...
method getItems (line 16) | getItems(){return this.items}
method onClose (line 16) | onClose(){this.submitted||this.reject(new O("Cancelled prompt"))}
method selectSuggestion (line 16) | selectSuggestion(e,t){this.submitted=!0,this.close(),this.onChooseSugges...
method getItemText (line 16) | getItemText(e){return this.text_items instanceof Function?this.text_item...
method onChooseItem (line 16) | onChooseItem(e){this.resolve(e)}
method openAndGetValue (line 16) | async openAndGetValue(e,t){this.resolve=e,this.reject=t,this.open()}
method constructor (line 16) | constructor(){super(...arguments);this.name="system"}
method create_static_templates (line 16) | async create_static_templates(){this.static_functions.set("clipboard",th...
method create_dynamic_templates (line 16) | async create_dynamic_templates(){}
method teardown (line 16) | async teardown(){}
method generate_clipboard (line 16) | generate_clipboard(){return async()=>await navigator.clipboard.readText()}
method generate_prompt (line 16) | generate_prompt(){return async(e,t,r=!1,i=!1)=>{let o=new pi(this.plugin...
method generate_suggester (line 16) | generate_suggester(){return async(e,t,r=!1,i="",o)=>{let a=new ui(this.p...
method constructor (line 16) | constructor(){super(...arguments);this.name="config"}
method create_static_templates (line 16) | async create_static_templates(){}
method create_dynamic_templates (line 16) | async create_dynamic_templates(){}
method teardown (line 16) | async teardown(){}
method generate_object (line 16) | async generate_object(e){return e}
method constructor (line 16) | constructor(e){this.plugin=e;this.modules_array=[];this.modules_array.pu...
method init (line 16) | async init(){for(let e of this.modules_array)await e.init()}
method teardown (line 16) | async teardown(){for(let e of this.modules_array)await e.teardown()}
method generate_object (line 16) | async generate_object(e){let t={};for(let r of this.modules_array)t[r.ge...
method constructor (line 16) | constructor(e){this.plugin=e;if(En.Platform.isMobile||!(this.plugin.app....
method generate_system_functions (line 16) | async generate_system_functions(e){let t=new Map,r=await this.plugin.tem...
method generate_object (line 16) | async generate_object(e){let t=await this.generate_system_functions(e);r...
method constructor (line 16) | constructor(e){this.plugin=e}
method generate_user_script_functions (line 16) | async generate_user_script_functions(){let e=new Map,t=ke(()=>ze(this.pl...
method load_user_script_function (line 16) | async load_user_script_function(e,t){let r=c=>window.require&&window.req...
method generate_object (line 17) | async generate_object(){let e=await this.generate_user_script_functions(...
method constructor (line 17) | constructor(e){this.plugin=e;this.user_system_functions=new gi(e),this.u...
method generate_object (line 17) | async generate_object(e){let t={},r={};return this.plugin.settings.enabl...
method constructor (line 17) | constructor(e){this.plugin=e;this.internal_functions=new mi(this.plugin)...
method init (line 17) | async init(){await this.internal_functions.init()}
method teardown (line 17) | async teardown(){await this.internal_functions.teardown()}
method additional_functions (line 17) | additional_functions(){return{app:this.plugin.app,obsidian:qs}}
method generate_object (line 17) | async generate_object(e,t=1){let r={},i=this.additional_functions(),o=aw...
function Se (line 17) | function Se(n){return He[n]}
function Ls (line 17) | function Ls(n){n<36||(He[n]=Tn,Tn=n)}
function xi (line 17) | function xi(n){let e=Se(n);return Ls(n),e}
function gr (line 17) | function gr(){return mr.byteLength===0&&(mr=new Uint8Array(N.memory.buff...
function vt (line 17) | function vt(n,e){return Ko.decode(gr().subarray(n,n+e))}
function wt (line 17) | function wt(n){Tn===He.length&&He.push(He.length+1);let e=Tn;return Tn=H...
function mt (line 17) | function mt(n,e,t){if(t===void 0){let l=hr.encode(n),c=e(l.length);retur...
function $s (line 17) | function $s(n){return n==null}
function Ce (line 17) | function Ce(){return Ar.byteLength===0&&(Ar=new Int32Array(N.memory.buff...
function yi (line 17) | function yi(n){let e=typeof n;if(e=="number"||e=="boolean"||n==null)retu...
function Ks (line 18) | function Ks(n,e){if(!(n instanceof e))throw new Error(`expected instance...
function Rs (line 18) | function Rs(n){if(_r==1)throw new Error("out of js stack");return He[--_...
function ji (line 18) | function ji(n,e){try{return n.apply(this,e)}catch(t){N.__wbindgen_exn_st...
method __wrap (line 18) | static __wrap(e){let t=Object.create(Ht.prototype);return t.ptr=e,t}
method __destroy_into_raw (line 18) | __destroy_into_raw(){let e=this.ptr;return this.ptr=0,e}
method free (line 18) | free(){let e=this.__destroy_into_raw();N.__wbg_parserconfig_free(e)}
method interpolate (line 18) | get interpolate(){let e=N.__wbg_get_parserconfig_interpolate(this.ptr);r...
method interpolate (line 18) | set interpolate(e){N.__wbg_set_parserconfig_interpolate(this.ptr,e.codeP...
method execution (line 18) | get execution(){let e=N.__wbg_get_parserconfig_execution(this.ptr);retur...
method execution (line 18) | set execution(e){N.__wbg_set_parserconfig_execution(this.ptr,e.codePoint...
method single_whitespace (line 18) | get single_whitespace(){let e=N.__wbg_get_parserconfig_single_whitespace...
method single_whitespace (line 18) | set single_whitespace(e){N.__wbg_set_parserconfig_single_whitespace(this...
method multiple_whitespace (line 18) | get multiple_whitespace(){let e=N.__wbg_get_parserconfig_multiple_whites...
method multiple_whitespace (line 18) | set multiple_whitespace(e){N.__wbg_set_parserconfig_multiple_whitespace(...
method constructor (line 18) | constructor(e,t,r,i,o,a,l){let c=mt(e,N.__wbindgen_malloc,N.__wbindgen_r...
method opening_tag (line 18) | get opening_tag(){try{let r=N.__wbindgen_add_to_stack_pointer(-16);N.par...
method opening_tag (line 18) | set opening_tag(e){let t=mt(e,N.__wbindgen_malloc,N.__wbindgen_realloc),...
method closing_tag (line 18) | get closing_tag(){try{let r=N.__wbindgen_add_to_stack_pointer(-16);N.par...
method closing_tag (line 18) | set closing_tag(e){let t=mt(e,N.__wbindgen_malloc,N.__wbindgen_realloc),...
method global_var (line 18) | get global_var(){try{let r=N.__wbindgen_add_to_stack_pointer(-16);N.pars...
method global_var (line 18) | set global_var(e){let t=mt(e,N.__wbindgen_malloc,N.__wbindgen_realloc),r...
method __wrap (line 18) | static __wrap(e){let t=Object.create(on.prototype);return t.ptr=e,t}
method __destroy_into_raw (line 18) | __destroy_into_raw(){let e=this.ptr;return this.ptr=0,e}
method free (line 18) | free(){let e=this.__destroy_into_raw();N.__wbg_renderer_free(e)}
method constructor (line 18) | constructor(e){Ks(e,Ht);var t=e.ptr;e.ptr=0;let r=N.renderer_new(t);retu...
method render_content (line 18) | render_content(e,t){try{let a=N.__wbindgen_add_to_stack_pointer(-16),l=m...
function Ys (line 18) | async function Ys(n,e){if(typeof Response=="function"&&n instanceof Resp...
function Us (line 18) | function Us(){let n={};return n.wbg={},n.wbg.__wbindgen_object_drop_ref=...
function Gs (line 18) | function Gs(n,e){}
function Ws (line 18) | function Ws(n,e){return N=n.exports,Ro.__wbindgen_wasm_module=e,Ar=new I...
function Ro (line 18) | async function Ro(n){typeof n=="undefined"&&(n=new URL("rusty_engine_bg....
method init (line 18) | async init(){await Yo(Uo);let e=new Ht("<%","%>","\0","*","-","_","tR");...
method parse_commands (line 18) | async parse_commands(e,t){return this.renderer.render_content(e,t)}
method constructor (line 18) | constructor(e){this.plugin=e;this.functions_generator=new _i(this.plugin...
method setup (line 18) | async setup(){this.files_with_pending_templates=new Set,await this.parse...
method create_running_config (line 18) | create_running_config(e,t,r){let i=Jt(this.plugin.app);return{template_f...
method read_and_parse_template (line 18) | async read_and_parse_template(e){let t=await this.plugin.app.vault.read(...
method parse_template (line 18) | async parse_template(e,t){let r=await this.functions_generator.generate_...
method start_templater_task (line 18) | start_templater_task(e){this.files_with_pending_templates.add(e)}
method end_templater_task (line 18) | async end_templater_task(e){this.files_with_pending_templates.delete(e),...
method create_new_note_from_template (line 18) | async create_new_note_from_template(e,t,r,i=!0){if(!t)switch(this.plugin...
method append_template_to_active_file (line 18) | async append_template_to_active_file(e){let t=this.plugin.app.workspace....
method write_template_to_file (line 18) | async write_template_to_file(e,t){let{path:r}=t;this.start_templater_tas...
method overwrite_active_file_commands (line 18) | overwrite_active_file_commands(){let e=this.plugin.app.workspace.activeE...
method overwrite_file_commands (line 18) | async overwrite_file_commands(e,t=!1){let{path:r}=e;this.start_templater...
method process_dynamic_templates (line 18) | async process_dynamic_templates(e,t){let r=ro(),i=document.createNodeIte...
method get_new_file_template_for_folder (line 18) | get_new_file_template_for_folder(e){do{let t=this.plugin.settings.folder...
method get_new_file_template_for_file (line 18) | get_new_file_template_for_file(e){let t=this.plugin.settings.file_templa...
method on_file_creation (line 18) | static async on_file_creation(e,t,r){if(!(r instanceof Oe.TFile)||r.exte...
method execute_startup_scripts (line 18) | async execute_startup_scripts(){for(let e of this.plugin.settings.startu...
method constructor (line 18) | constructor(e,t,r){this.plugin=e;this.templater=t;this.settings=r}
method setup (line 18) | setup(){Array.isArray(this.plugin.app.workspace.onLayoutReadyCallbacks)?...
method update_syntax_highlighting (line 18) | update_syntax_highlighting(){let e=this.plugin.editor_handler.desktopSho...
method update_trigger_file_on_creation (line 18) | update_trigger_file_on_creation(){this.settings.trigger_on_file_creation...
method update_file_menu (line 18) | update_file_menu(){this.plugin.registerEvent(this.plugin.app.workspace.o...
method constructor (line 18) | constructor(e){this.plugin=e}
method setup (line 18) | setup(){this.plugin.addCommand({id:"insert-templater",name:"Open insert ...
method register_templates_hotkeys (line 18) | register_templates_hotkeys(){this.plugin.settings.enabled_templates_hotk...
method add_template_hotkey (line 18) | add_template_hotkey(e,t){this.remove_template_hotkey(e),t&&(this.plugin....
method remove_template_hotkey (line 18) | remove_template_hotkey(e){e&&(this.plugin.removeCommand(`${e}`),this.plu...
method constructor (line 18) | constructor(e){this.app=e}
method jump_to_next_cursor_location (line 18) | async jump_to_next_cursor_location(){let e=this.app.workspace.activeEdit...
method get_editor_position_from_index (line 18) | get_editor_position_from_index(e,t){let r=e.slice(0,t),i=0,o=-1,a=-1;for...
method replace_and_get_cursor_positions (line 19) | replace_and_get_cursor_positions(e){let t=[],r,i=new RegExp("<%\\s*tp.fi...
method set_cursor_location (line 19) | set_cursor_location(e){let t=this.app.workspace.activeEditor;if(!t||!t.e...
function zo (line 27) | function zo(n){return typeof n=="string"&&Xs.has(n)}
function Ti (line 27) | function Ti(n){return!!(n.definition||n.returns||n.args)}
method constructor (line 27) | constructor(e){this.plugin=e;this.documentation=Vo}
method get_all_modules_documentation (line 27) | get_all_modules_documentation(){let e=this.documentation.tp;return(!this...
method get_all_functions_documentation (line 27) | async get_all_functions_documentation(e,t){if(e==="app")return this.get_...
method get_app_functions_documentation (line 27) | get_app_functions_documentation(e,t){if(!$r(e))return[];let r=t.split("....
method get_module_documentation (line 27) | get_module_documentation(e){return this.documentation.tp[e]}
method get_function_documentation (line 27) | get_function_documentation(e,t){return this.documentation.tp[e].function...
method get_argument_documentation (line 27) | get_argument_documentation(e,t,r){let i=this.get_function_documentation(...
method constructor (line 27) | constructor(e){super(e.app);this.tp_keyword_regex=/tp\.(?<module>[a-z]*)...
method onTrigger (line 27) | onTrigger(e,t,r){let i=t.getRange({line:e.line,ch:0},{line:e.line,ch:e.c...
method getSuggestions (line 27) | async getSuggestions(e){let t;return this.module_name&&this.function_tri...
method renderSuggestion (line 27) | renderSuggestion(e,t){if(t.createEl("b",{text:e.name}),Ti(e)){if(e.args&...
method selectSuggestion (line 27) | selectSuggestion(e,t){let r=this.app.workspace.activeEditor;if(!(!r||!r....
method getNumberOfArguments (line 27) | getNumberOfArguments(e){try{return new Map(Object.entries(e)).size}catch...
method updateAutocompleteIntellisenseSetting (line 27) | updateAutocompleteIntellisenseSetting(e){this.intellisense_render_settin...
function s (line 27) | function s(je){return{type:je,style:"keyword"}}
function E (line 27) | function E(s){for(var p=!1,A,_=!1;(A=s.next())!=null;){if(!p){if(A=="/"&...
function w (line 27) | function w(s,p,A){return P=s,k=A,p}
function M (line 27) | function M(s,p){var A=s.next();if(A=='"'||A=="'")return p.tokenize=$(A),...
function $ (line 27) | function $(s){return function(p,A){var _=!1,F;if(o&&p.peek()=="@"&&p.mat...
function K (line 27) | function K(s,p){for(var A=!1,_;_=s.next();){if(_=="/"&&A){p.tokenize=M;b...
function C (line 27) | function C(s,p){for(var A=!1,_;(_=s.next())!=null;){if(!A&&(_=="`"||_=="...
function I (line 27) | function I(s,p){p.fatArrowAt&&(p.fatArrowAt=null);var A=s.string.indexOf...
function te (line 27) | function te(s,p,A,_,F,Y){this.indented=s,this.column=p,this.type=A,this....
function ne (line 27) | function ne(s,p){if(!l)return!1;for(var A=s.localVars;A;A=A.next)if(A.na...
function Q (line 27) | function Q(s,p,A,_,F){var Y=s.cc;for(h.state=s,h.stream=F,h.marked=null,...
function S (line 27) | function S(){for(var s=arguments.length-1;s>=0;s--)h.cc.push(arguments[s])}
function f (line 27) | function f(){return S.apply(null,arguments),!0}
function Me (line 27) | function Me(s,p){for(var A=p;A;A=A.next)if(A.name==s)return!0;return!1}
function be (line 27) | function be(s){var p=h.state;if(h.marked="def",!!l){if(p.context){if(p.l...
function Ae (line 27) | function Ae(s,p){if(p)if(p.block){var A=Ae(s,p.prev);return A?A==p.prev?...
function _e (line 27) | function _e(s){return s=="public"||s=="private"||s=="protected"||s=="abs...
function Ke (line 27) | function Ke(s,p,A){this.prev=s,this.vars=p,this.block=A}
function Ee (line 27) | function Ee(s,p){this.name=s,this.next=p}
function Re (line 27) | function Re(){h.state.context=new Ke(h.state.context,h.state.localVars,!...
function Ze (line 27) | function Ze(){h.state.context=new Ke(h.state.context,h.state.localVars,!...
function xe (line 27) | function xe(){h.state.localVars=h.state.context.vars,h.state.context=h.s...
function B (line 27) | function B(s,p){var A=function(){var _=h.state,F=_.indented;if(_.lexical...
function D (line 27) | function D(){var s=h.state;s.lexical.prev&&(s.lexical.type==")"&&(s.inde...
function q (line 27) | function q(s){function p(A){return A==s?f():s==";"||A=="}"||A==")"||A=="...
function ee (line 27) | function ee(s,p){return s=="var"?f(B("vardef",p),Er,q(";"),D):s=="keywor...
function et (line 27) | function et(s){if(s=="(")return f(kt,q(")"))}
function W (line 27) | function W(s,p){return Sn(s,p,!1)}
function ye (line 27) | function ye(s,p){return Sn(s,p,!0)}
function bt (line 27) | function bt(s){return s!="("?S():f(B(")"),tt,q(")"),D)}
function Sn (line 27) | function Sn(s,p,A){if(h.state.fatArrowAt==h.stream.start){var _=A?Pn:Dn;...
function tt (line 27) | function tt(s){return s.match(/[;\}\)\],]/)?S():S(W)}
function nt (line 27) | function nt(s,p){return s==","?f(tt):gt(s,p,!1)}
function gt (line 27) | function gt(s,p,A){var _=A==!1?nt:gt,F=A==!1?W:ye;if(s=="=>")return f(Re...
function Et (line 27) | function Et(s,p){return s!="quasi"?S():p.slice(p.length-2)!="${"?f(Et):f...
function Cn (line 27) | function Cn(s){if(s=="}")return h.marked="string-2",h.state.tokenize=C,f...
function Dn (line 27) | function Dn(s){return I(h.stream,h.state),S(s=="{"?ee:W)}
function Pn (line 27) | function Pn(s){return I(h.stream,h.state),S(s=="{"?ee:ye)}
function rt (line 27) | function rt(s){return function(p){return p=="."?f(s?Nn:Kt):p=="variable"...
function Kt (line 27) | function Kt(s,p){if(p=="target")return h.marked="keyword",f(nt)}
function Nn (line 27) | function Nn(s,p){if(p=="target")return h.marked="keyword",f(gt)}
function On (line 27) | function On(s){return s==":"?f(D,ee):S(nt,q(";"),D)}
function an (line 27) | function an(s){if(s=="variable")return h.marked="property",f()}
function Tt (line 27) | function Tt(s,p){if(s=="async")return h.marked="property",f(Tt);if(s=="v...
function Mn (line 27) | function Mn(s){return s!="variable"?S(Ye):(h.marked="property",f(At))}
function Ye (line 27) | function Ye(s){if(s==":")return f(ye);if(s=="(")return S(At)}
function se (line 27) | function se(s,p,A){function _(F,Y){if(A?A.indexOf(F)>-1:F==","){var z=h....
function sn (line 27) | function sn(s,p,A){for(var _=3;_<arguments.length;_++)h.cc.push(argument...
function Bn (line 27) | function Bn(s){return s=="}"?f():S(ee,Bn)}
function Rt (line 27) | function Rt(s,p){if(c){if(s==":")return f(V);if(p=="?")return f(Rt)}}
function ea (line 27) | function ea(s,p){if(c&&(s==":"||p=="in"))return f(V)}
function Mi (line 27) | function Mi(s){if(c&&s==":")return h.stream.match(/^\s*\w+\s+is\b/,!1)?f...
function ta (line 27) | function ta(s,p){if(p=="is")return h.marked="keyword",f()}
function V (line 27) | function V(s,p){if(p=="keyof"||p=="typeof"||p=="infer"||p=="readonly")re...
function na (line 27) | function na(s){if(s=="=>")return f(V)}
function vr (line 27) | function vr(s){return s.match(/[\}\)\]]/)?f():s==","||s==";"?f(vr):S(cn,...
function cn (line 27) | function cn(s,p){if(s=="variable"||h.style=="keyword")return h.marked="p...
function wr (line 27) | function wr(s,p){return s!="quasi"?S():p.slice(p.length-2)!="${"?f(wr):f...
function ra (line 27) | function ra(s){if(s=="}")return h.marked="string-2",h.state.tokenize=C,f...
function br (line 27) | function br(s,p){return s=="variable"&&h.stream.match(/^\s*[?:]/,!1)||p=...
function it (line 27) | function it(s,p){if(p=="<")return f(B(">"),se(V,">"),D,it);if(p=="|"||s=...
function ia (line 27) | function ia(s,p){if(p=="<")return f(B(">"),se(V,">"),D,it)}
function Fn (line 27) | function Fn(){return S(V,oa)}
function oa (line 27) | function oa(s,p){if(p=="=")return f(V)}
function Er (line 27) | function Er(s,p){return p=="enum"?(h.marked="keyword",f(Ki)):S(Be,Rt,ht,...
function Be (line 27) | function Be(s,p){if(c&&_e(p))return h.marked="keyword",f(Be);if(s=="vari...
function Bi (line 27) | function Bi(s,p){return s=="variable"&&!h.stream.match(/^\s*:/,!1)?(be(p...
function aa (line 27) | function aa(){return S(Be,ht)}
function ht (line 27) | function ht(s,p){if(p=="=")return f(ye)}
function sa (line 27) | function sa(s){if(s==",")return f(Er)}
function Fi (line 27) | function Fi(s,p){if(s=="keyword b"&&p=="else")return f(B("form","else"),...
function Ii (line 27) | function Ii(s,p){if(p=="await")return f(Ii);if(s=="(")return f(B(")"),ca...
function ca (line 27) | function ca(s){return s=="var"?f(Er,Yt):s=="variable"?f(Yt):S(Yt)}
function Yt (line 27) | function Yt(s,p){return s==")"?f():s==";"?f(Yt):p=="in"||p=="of"?(h.mark...
function At (line 27) | function At(s,p){if(p=="*")return h.marked="keyword",f(At);if(s=="variab...
function Ut (line 27) | function Ut(s,p){if(p=="*")return h.marked="keyword",f(Ut);if(s=="variab...
function qi (line 27) | function qi(s,p){if(s=="keyword"||s=="variable")return h.marked="type",f...
function kt (line 27) | function kt(s,p){return p=="@"&&f(W,kt),s=="spread"?f(kt):c&&_e(p)?(h.ma...
function la (line 27) | function la(s,p){return s=="variable"?Li(s,p):In(s,p)}
function Li (line 27) | function Li(s,p){if(s=="variable")return be(p),f(In)}
function In (line 27) | function In(s,p){if(p=="<")return f(B(">"),se(Fn,">"),D,In);if(p=="exten...
function ot (line 27) | function ot(s,p){if(s=="async"||s=="variable"&&(p=="static"||p=="get"||p...
function ln (line 27) | function ln(s,p){if(p=="!"||p=="?")return f(ln);if(s==":")return f(V,ht)...
function pa (line 27) | function pa(s,p){return p=="*"?(h.marked="keyword",f(Tr,q(";"))):p=="def...
function Hi (line 27) | function Hi(s,p){if(p=="as")return h.marked="keyword",f(q("variable"));i...
function ua (line 27) | function ua(s){return s=="string"?f():s=="("?S(W):s=="."?S(nt):S(qn,$i,Tr)}
function qn (line 27) | function qn(s,p){return s=="{"?sn(qn,"}"):(s=="variable"&&be(p),p=="*"&&...
function $i (line 27) | function $i(s){if(s==",")return f(qn,$i)}
function fa (line 27) | function fa(s,p){if(p=="as")return h.marked="keyword",f(qn)}
function Tr (line 27) | function Tr(s,p){if(p=="from")return h.marked="keyword",f(W)}
function da (line 27) | function da(s){return s=="]"?f():S(se(ye,"]"))}
function Ki (line 27) | function Ki(){return S(B("form"),Be,q("{"),B("}"),se(ma,"}"),D,D)}
function ma (line 27) | function ma(){return S(Be,ht)}
function ga (line 27) | function ga(s,p){return s.lastType=="operator"||s.lastType==","||y.test(...
function Ri (line 27) | function Ri(s,p,A){return p.tokenize==M&&/^(?:operator|sof|keyword [bcd]...
method constructor (line 27) | constructor(e){this.plugin=e;this.cursor_jumper=new Ei(e.app),this.activ...
method desktopShouldHighlight (line 27) | desktopShouldHighlight(){return Ci.Platform.isDesktopApp&&this.plugin.se...
method mobileShouldHighlight (line 27) | mobileShouldHighlight(){return Ci.Platform.isMobile&&this.plugin.setting...
method setup (line 27) | async setup(){this.autocomplete=new Si(this.plugin),this.plugin.register...
method enable_highlighter (line 27) | async enable_highlighter(){this.activeEditorExtensions.length===0&&this....
method disable_highlighter (line 27) | async disable_highlighter(){this.activeEditorExtensions.length>0&&(this....
method jump_to_next_cursor_location (line 27) | async jump_to_next_cursor_location(e=null,t=!1){t&&!this.plugin.settings...
method registerCodeMirrorMode (line 27) | async registerCodeMirrorMode(){if(!this.desktopShouldHighlight()&&!this....
method updateEditorIntellisenseSetting (line 27) | updateEditorIntellisenseSetting(e){this.autocomplete.updateAutocompleteI...
method onload (line 27) | async onload(){await this.load_settings(),this.templater=new kn(this),aw...
method onunload (line 27) | onunload(){this.templater.functions_generator.teardown()}
method save_settings (line 27) | async save_settings(){await this.saveData(this.settings),this.editor_han...
method load_settings (line 27) | async load_settings(){this.settings=Object.assign({},Fo,await this.loadD...
FILE: tests/types.d.ts
type TestVaultConfig (line 4) | type TestVaultConfig = {
type CallbackData (line 18) | type CallbackData = {
type LogEntry (line 23) | type LogEntry = Record<string, any>;
type Result (line 25) | type Result<T, E> =
type PeriodicNoteSet (line 29) | type PeriodicNoteSet = {
type RecentPeriodicNoteSet (line 46) | type RecentPeriodicNoteSet = {
Condensed preview — 205 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (1,018K chars).
[
{
"path": ".beans/auri-14wv--milestone-160.md",
"chars": 442,
"preview": "---\n# auri-14wv\ntitle: \"Milestone 1.6.0\"\nstatus: completed\ntype: milestone\ntags:\n - from-linear\ncreated_at: 2024-02-19T"
},
{
"path": ".beans/auri-2nvq--milestone-153.md",
"chars": 442,
"preview": "---\n# auri-2nvq\ntitle: \"Milestone 1.5.3\"\nstatus: completed\ntype: milestone\ntags:\n - from-linear\ncreated_at: 2024-06-18T"
},
{
"path": ".beans/auri-48pt--milestone-170.md",
"chars": 585,
"preview": "---\n# auri-48pt\ntitle: \"Milestone 1.7.0\"\nstatus: completed\ntype: milestone\ntags:\n - from-linear\ncreated_at: 2024-07-23T"
},
{
"path": ".beans/auri-7bdl--milestone-173.md",
"chars": 442,
"preview": "---\n# auri-7bdl\ntitle: \"Milestone 1.7.3\"\nstatus: completed\ntype: milestone\ntags:\n - from-linear\ncreated_at: 2025-04-30T"
},
{
"path": ".beans/auri-b61p--milestone-190.md",
"chars": 287,
"preview": "---\n# auri-b61p\ntitle: \"Milestone 1.9.0\"\nstatus: completed\ntype: milestone\ntags:\n - from-linear\ncreated_at: 2025-05-19T"
},
{
"path": ".beans/auri-civ4--milestone-163.md",
"chars": 585,
"preview": "---\n# auri-civ4\ntitle: \"Milestone 1.6.3\"\nstatus: completed\ntype: milestone\ntags:\n - from-linear\ncreated_at: 2024-08-02T"
},
{
"path": ".beans/auri-fzy4--milestone-171.md",
"chars": 585,
"preview": "---\n# auri-fzy4\ntitle: \"Milestone 1.7.1\"\nstatus: completed\ntype: milestone\ntags:\n - from-linear\ncreated_at: 2025-02-04T"
},
{
"path": ".beans/auri-p05h--milestone-164.md",
"chars": 442,
"preview": "---\n# auri-p05h\ntitle: \"Milestone 1.6.4\"\nstatus: completed\ntype: milestone\ntags:\n - from-linear\ncreated_at: 2024-09-20T"
},
{
"path": ".beans/auri-plwy--milestone-172.md",
"chars": 442,
"preview": "---\n# auri-plwy\ntitle: \"Milestone 1.7.2\"\nstatus: completed\ntype: milestone\ntags:\n - from-linear\ncreated_at: 2025-02-10T"
},
{
"path": ".beans/auri-q7z3--milestone-150.md",
"chars": 317,
"preview": "---\n# auri-q7z3\ntitle: \"Milestone 1.5.0\"\nstatus: completed\ntype: milestone\ntags:\n - from-linear\ncreated_at: 2024-02-27T"
},
{
"path": ".beans/auri-qz7a--milestone-183.md",
"chars": 498,
"preview": "---\n# auri-qz7a\ntitle: \"Milestone 1.8.3\"\nstatus: completed\ntype: milestone\ntags:\n - from-linear\ncreated_at: 2025-06-06T"
},
{
"path": ".beans/auri-slfp--milestone-162.md",
"chars": 442,
"preview": "---\n# auri-slfp\ntitle: \"Milestone 1.6.2\"\nstatus: completed\ntype: milestone\ntags:\n - from-linear\ncreated_at: 2024-07-29T"
},
{
"path": ".beans/auri-ujej--milestone-181.md",
"chars": 500,
"preview": "---\n# auri-ujej\ntitle: \"Milestone 1.8.1\"\nstatus: completed\ntype: milestone\ntags:\n - from-linear\ncreated_at: 2025-01-30T"
},
{
"path": ".beans/auri-vp9j--milestone-161.md",
"chars": 442,
"preview": "---\n# auri-vp9j\ntitle: \"Milestone 1.6.1\"\nstatus: completed\ntype: milestone\ntags:\n - from-linear\ncreated_at: 2024-07-25T"
},
{
"path": ".beans/zco-1156--change-appending-below-headline-to-redefine-headline-section.md",
"chars": 1215,
"preview": "---\n# zco-1156\ntitle: \"Change appending below headline to redefine \\\"headline section\\\" as, say, H2 to next H2\"\nstatus: "
},
{
"path": ".beans/zco-1182--using-if-exists-skip-and-silent-false-in-note-create-does-no.md",
"chars": 969,
"preview": "---\n# zco-1182\ntitle: \"Using `if-exists=skip` and `silent=false` in `/note/create` does not open the note in Obsidian\"\ns"
},
{
"path": ".beans/zco-120--research-obsidian-sync-behaviour-re-plugins-and-startup-prio.md",
"chars": 957,
"preview": "---\n# zco-120\ntitle: \"Research Obsidian Sync behaviour re plugins and startup priority\"\nstatus: todo\ntype: task\ntags:\n "
},
{
"path": ".beans/zco-1201--checking-for-the-existence-of-a-missing-note-from-afo-should.md",
"chars": 1536,
"preview": "---\n# zco-1201\ntitle: \"Checking for the existence of a missing note (from AFO) should not pop up an error toast\"\nstatus:"
},
{
"path": ".beans/zco-1239--fix-note-create-if-exists-skip-not-being-honored-for-periodi.md",
"chars": 728,
"preview": "---\n# zco-1239\ntitle: \"Fix `/note/create?…&if-exists=skip` not being honored for periodic notes\"\nstatus: scrapped\ntype: "
},
{
"path": ".beans/zco-1348--check-reports-of-note-properties-set-overwriting-existing-ke.md",
"chars": 1690,
"preview": "---\n# zco-1348\ntitle: \"Check reports of `/note-properties/set` overwriting existing keys\"\nstatus: completed\ntype: bug\npa"
},
{
"path": ".beans/zco-1496--research-user-report-about-note-get-diverging-wrongly-when-f.md",
"chars": 3078,
"preview": "---\n# zco-1496\ntitle: \"Research user report about `/note/get`diverging wrongly when fetching current and most recent PN\""
},
{
"path": ".beans/zco-1541--research-obsidian-1-10-ios-not-returning-xcu-calls.md",
"chars": 1056,
"preview": "---\n# zco-1541\ntitle: \"Research Obsidian 1.10 (iOS) not returning XCU calls\"\nstatus: in-progress\ntype: task\ntags:\n - fr"
},
{
"path": ".beans/zco-166--set-up-a-testing-framework.md",
"chars": 1654,
"preview": "---\n# zco-166\ntitle: \"Set up a testing framework\"\nstatus: completed\ntype: task\npriority: normal\nparent: auri-ujej\ntags:\n"
},
{
"path": ".beans/zco-276--allow-relative-path-input-for-templates-templater-related-pa.md",
"chars": 812,
"preview": "---\n# zco-276\ntitle: \"Allow relative path input for Templates/Templater-related parameters\"\nstatus: completed\ntype: task"
},
{
"path": ".beans/zco-341--add-note-touch-route.md",
"chars": 833,
"preview": "---\n# zco-341\ntitle: \"Add `/note/touch` route\"\nstatus: completed\ntype: task\nparent: auri-q7z3\ntags:\n - from-linear\ncrea"
},
{
"path": ".beans/zco-397--make-x-parameters-optional-in-command-execute-route.md",
"chars": 857,
"preview": "---\n# zco-397\ntitle: \"Make `x-*` parameters optional in `/command/execute` route\"\nstatus: completed\ntype: task\nparent: a"
},
{
"path": ".beans/zco-398--create-route-for-getting-currently-focussed-note.md",
"chars": 775,
"preview": "---\n# zco-398\ntitle: \"Create route for getting currently focussed note\"\nstatus: completed\ntype: feature\nparent: auri-q7z"
},
{
"path": ".beans/zco-409--create-route-for-getting-currently-focussed-file.md",
"chars": 696,
"preview": "---\n# zco-409\ntitle: \"Create route for getting currently focussed file\"\nstatus: completed\ntype: feature\nparent: auri-q7z"
},
{
"path": ".beans/zco-410--create-route-for-getting-note-by-name.md",
"chars": 793,
"preview": "---\n# zco-410\ntitle: \"Create route for getting note by name\"\nstatus: completed\ntype: feature\nparent: auri-q7z3\ntags:\n -"
},
{
"path": ".beans/zco-423--add-feature-to-auto-install-new-version.md",
"chars": 630,
"preview": "---\n# zco-423\ntitle: \"Add feature to auto-install new version (?)\"\nstatus: todo\ntype: task\ntags:\n - from-linear\ncreated"
},
{
"path": ".beans/zco-424--release-v1-5-0.md",
"chars": 512,
"preview": "---\n# zco-424\ntitle: \"Release v1.5.0\"\nstatus: completed\ntype: task\nparent: auri-q7z3\ntags:\n - from-linear\n - release\nc"
},
{
"path": ".beans/zco-429--revamp-the-returning-of-errors-to-pick-from-a-fixed-list-of-.md",
"chars": 1505,
"preview": "---\n# zco-429\ntitle: \"Revamp the returning of errors to pick from a fixed list of possible errors\"\nstatus: completed\ntyp"
},
{
"path": ".beans/zco-455--add-obsidian-note-uri-to-note-result-objects.md",
"chars": 1587,
"preview": "---\n# zco-455\ntitle: \"Add Obsidian note URI to note result objects\"\nstatus: completed\ntype: task\nparent: auri-ujej\ntags:"
},
{
"path": ".beans/zco-480--add-2nd-level-check-to-template-file-parameter.md",
"chars": 1358,
"preview": "---\n# zco-480\ntitle: \"Add 2nd-level check to `template-file` parameter\"\nstatus: completed\ntype: task\nparent: auri-14wv\nt"
},
{
"path": ".beans/zco-563--remove-use-of-global-app-from-plugin.md",
"chars": 825,
"preview": "---\n# zco-563\ntitle: \"Remove use of global `app` from plugin\"\nstatus: completed\ntype: task\npriority: high\ntags:\n - from"
},
{
"path": ".beans/zco-588--fix-api-calls-not-reaching-actions-uri-when-vault-needs-to-o.md",
"chars": 1024,
"preview": "---\n# zco-588\ntitle: \"Fix API calls not reaching Actions URI when vault needs to open first\"\nstatus: completed\ntype: bug"
},
{
"path": ".beans/zco-606--search-and-replace-string-with-special-character.md",
"chars": 959,
"preview": "---\n# zco-606\ntitle: \"Search and Replace string with special character\"\nstatus: completed\ntype: bug\nparent: zco-531\ntags"
},
{
"path": ".beans/zco-613--add-periodic-note-support-to-note-properties.md",
"chars": 861,
"preview": "---\n# zco-613\ntitle: \"Add Periodic Note support to `/note-properties`\"\nstatus: completed\ntype: task\nparent: zco-610\ntags"
},
{
"path": ".beans/zco-616--research-uid-support-in-actions-id.md",
"chars": 1659,
"preview": "---\n# zco-616\ntitle: \"Research UID support in Actions ID\"\nstatus: completed\ntype: task\nparent: zco-30\ntags:\n - from-lin"
},
{
"path": ".beans/zco-617--implement-zod-magic-to-streamline-targeting-a-note-using-fil.md",
"chars": 1432,
"preview": "---\n# zco-617\ntitle: \"Implement zod magic to streamline targeting a note using `\\\"file\\\" | \\\"uid\\\" | \\\"periodic-note\\\"` "
},
{
"path": ".beans/zco-623--removing-the-last-property-key-from-fm-results-in-fm-of.md",
"chars": 743,
"preview": "---\n# zco-623\ntitle: \"Removing the last property key from FM results in FM of `{}`\"\nstatus: completed\ntype: bug\nparent: "
},
{
"path": ".beans/zco-624--replace-use-of-self-now-that-all-handlers-are-bound-to-this.md",
"chars": 624,
"preview": "---\n# zco-624\ntitle: \"Replace use of `self()` now that all handlers are bound to `this`\"\nstatus: completed\ntype: task\nta"
},
{
"path": ".beans/zco-625--add-pn-support-to-note-list.md",
"chars": 739,
"preview": "---\n# zco-625\ntitle: \"Add PN support to `/note/list`\"\nstatus: completed\ntype: task\nparent: zco-621\ntags:\n - from-linear"
},
{
"path": ".beans/zco-626--add-support-for-getting-most-recent-pn-to-note-open-note-get.md",
"chars": 1058,
"preview": "---\n# zco-626\ntitle: \"Add support for getting most recent PN to `/note/open`, `/note/get`\"\nstatus: completed\ntype: task\n"
},
{
"path": ".beans/zco-627--when-creating-a-note-during-note-append-templater-s-watch-fo.md",
"chars": 1304,
"preview": "---\n# zco-627\ntitle: \"When creating a note during `/note/append`, Templater's watch-folder-and-apply-template may cause "
},
{
"path": ".beans/zco-628--lean-into-zod-s-transform-for-resolving-incoming-url-paramet.md",
"chars": 1279,
"preview": "---\n# zco-628\ntitle: \"Lean into Zod's `.transform()` for resolving incoming URL parameters\"\nstatus: todo\ntype: task\ntags"
},
{
"path": ".beans/zco-629--add-result-selection-to-note-get-active.md",
"chars": 1052,
"preview": "---\n# zco-629\ntitle: \"Add `result-selection` to `/note/get-active`\"\nstatus: completed\ntype: task\nparent: auri-14wv\ntags:"
},
{
"path": ".beans/zco-630--add-create-headline-if-not-found-option-for-note-append-note.md",
"chars": 913,
"preview": "---\n# zco-630\ntitle: \"Add \\\"create headline if not found\\\" option for `/note/append` & `/note/prepend`'s below-headline "
},
{
"path": ".beans/zco-633--fix-note-create-in-1-6-0.md",
"chars": 583,
"preview": "---\n# zco-633\ntitle: \"Fix `/note/create` in 1.6.0\"\nstatus: completed\ntype: bug\nparent: auri-vp9j\ntags:\n - from-linear\nc"
},
{
"path": ".beans/zco-634--fix-headline-block-append-prepend.md",
"chars": 1261,
"preview": "---\n# zco-634\ntitle: \"Fix headline block append/prepend\"\nstatus: completed\ntype: bug\nparent: auri-slfp\ntags:\n - from-li"
},
{
"path": ".beans/zco-636--fix-error-code-on-note-get-from-500-back-to-404-to-prevent-a.md",
"chars": 698,
"preview": "---\n# zco-636\ntitle: \"Fix error code on `/note/get` from 500 back to 404 to prevent AFO \\\"Check For Existence of Note\\\" "
},
{
"path": ".beans/zco-642--templater-path-parameter-doesn-t-work-as-assumed-intended.md",
"chars": 1155,
"preview": "---\n# zco-642\ntitle: \"Templater path parameter doesn't work as assumed/intended\"\nstatus: completed\ntype: bug\nparent: aur"
},
{
"path": ".beans/zco-645--replace-vault-modify-w-vault-process-to-prevent-race-conditi.md",
"chars": 826,
"preview": "---\n# zco-645\ntitle: \"Replace `vault.modify()` w/ `vault.process()` to prevent race conditions\"\nstatus: scrapped\ntype: b"
},
{
"path": ".beans/zco-651--add-debugging-info-output-to-settings-page.md",
"chars": 808,
"preview": "---\n# zco-651\ntitle: \"Add debugging info output to Settings page\"\nstatus: scrapped\ntype: task\nparent: auri-ujej\ntags:\n "
},
{
"path": ".beans/zco-692--insert-below-headline-fails-if-the-headline-is-the-last-line.md",
"chars": 718,
"preview": "---\n# zco-692\ntitle: \"\\\"Insert below headline\\\" fails if the headline is the last line of the note and doesn't end in a "
},
{
"path": ".beans/zco-694--add-optional-logging-to-file.md",
"chars": 594,
"preview": "---\n# zco-694\ntitle: \"Add optional logging to file\"\nstatus: draft\ntype: feature\ntags:\n - from-linear\ncreated_at: 2024-0"
},
{
"path": ".beans/zco-695--fix-empty-note-when-trying-to-append-prepend-content-to-non-.md",
"chars": 1942,
"preview": "---\n# zco-695\ntitle: \"Fix empty note when trying to append/prepend content to non-existing periodic note which has to be"
},
{
"path": ".beans/zco-707--check-plugin-against-new-obsidian-guidelines.md",
"chars": 538,
"preview": "---\n# zco-707\ntitle: \"Check plugin against new Obsidian guidelines\"\nstatus: completed\ntype: task\ntags:\n - from-linear\n "
},
{
"path": ".beans/zco-918--make-dataview-list-result-consistent.md",
"chars": 1426,
"preview": "---\n# zco-918\ntitle: \"Make Dataview LIST result consistent\"\nstatus: completed\ntype: bug\nparent: zco-919\ntags:\n - from-l"
},
{
"path": ".beans/zco-937--opening-a-note-in-another-vault-only-opens-the-requested-vau.md",
"chars": 984,
"preview": "---\n# zco-937\ntitle: \"Opening a note in *another* vault only opens the requested vault, but not the requested note\"\nstat"
},
{
"path": ".beans/zco-976--fix-wonky-frontmatter-parser.md",
"chars": 927,
"preview": "---\n# zco-976\ntitle: \"Fix wonky frontmatter parser\"\nstatus: completed\ntype: bug\nparent: auri-48pt\ntags:\n - from-linear\n"
},
{
"path": ".beans/zco-977--remove-dedicated-periodic-note-related-routes.md",
"chars": 923,
"preview": "---\n# zco-977\ntitle: \"Remove dedicated periodic note-related routes\"\nstatus: completed\ntype: task\nparent: auri-ujej\ntags"
},
{
"path": ".beans/zco-985--dataview-list-results-return-unexpected-nested-array.md",
"chars": 1212,
"preview": "---\n# zco-985\ntitle: \"DataView LIST results return unexpected nested array\"\nstatus: completed\ntype: bug\nparent: auri-fzy"
},
{
"path": ".beans/zco-987--fix-periodic-notes-coming-out-raw-when-using-templater.md",
"chars": 927,
"preview": "---\n# zco-987\ntitle: \"Fix periodic notes coming out \\\"raw\\\" when using Templater\"\nstatus: completed\ntype: bug\nparent: au"
},
{
"path": ".beans.yml",
"chars": 107,
"preview": "beans:\n path: .beans\n prefix: auri-\n id_length: 4\n default_status: todo\n default_type: task\n"
},
{
"path": ".editorconfig",
"chars": 159,
"preview": "# top-most EditorConfig file\nroot = true\n\n[*]\ncharset = utf-8\nend_of_line = lf\ninsert_final_newline = true\nindent_style "
},
{
"path": ".eslintignore",
"chars": 22,
"preview": "npm node_modules\nbuild"
},
{
"path": ".eslintrc",
"chars": 627,
"preview": "{\n \"root\": true,\n \"parser\": \"@typescript-eslint/parser\",\n \"env\": { \"node\": true },\n \"plugins\": [\n \"@typ"
},
{
"path": ".github/FUNDING.yml",
"chars": 892,
"preview": "# These are supported funding model platforms\n\ngithub: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [u"
},
{
"path": ".github/workflows/release.yml",
"chars": 1695,
"preview": "name: Release Obsidian Plugin\non:\n push:\n # Sequence of patterns matched against refs/tags\n tags:\n - \"*\" # P"
},
{
"path": ".gitignore",
"chars": 370,
"preview": "# vscode\n.vscode\n\n# Intellij\n*.iml\n.idea\n\n# npm\nnode_modules\n\n# Don't include the compiled main.js file in the repo.\n# T"
},
{
"path": ".mise.toml",
"chars": 24,
"preview": "[tools]\ndeno = \"latest\"\n"
},
{
"path": ".npmrc",
"chars": 46,
"preview": "auto-install-peers=true\ntag-version-prefix=\"\"\n"
},
{
"path": ".prettierrc",
"chars": 453,
"preview": "{\n \"arrowParens\": \"always\",\n \"bracketSameLine\": false,\n \"bracketSpacing\": true,\n \"embeddedLanguageFormatting\": \"auto"
},
{
"path": "AGENTS.md",
"chars": 3372,
"preview": "# AGENTS.md\n\nThis file provides guidance to LLM agents when working with code in this repository.\n\n## Common Development"
},
{
"path": "CHANGELOG.md",
"chars": 26394,
"preview": "# Release history\n\n## 1.8.4, 2025-11-18\n\nChore release, updating dependencies.\n\n\n## 1.8.3, 2025-08-05\n\n### No longer bro"
},
{
"path": "LICENSE.md",
"chars": 1103,
"preview": "# MIT License\n\nCopyright (c) 2022-present Carlo Zottmann, https://zottmann.co/\n\nPermission is hereby granted, free of ch"
},
{
"path": "README.md",
"chars": 3158,
"preview": "<img src=\"https://raw.githubusercontent.com/czottmann/obsidian-actions-uri/main/readme-assets/actions-uri-128.png\" align"
},
{
"path": "bin/prepare-route-docs.sh",
"chars": 448,
"preview": "#!/bin/bash\n\n# Dependencies: https://github.com/chmln/sd\n\nfor F in src/routes/*.ts; do\nls $F\n grep ' \\/\\/' $F \\\n | "
},
{
"path": "bin/tag-release.fish",
"chars": 3031,
"preview": "#!/opt/homebrew/bin/fish --login\n\nfunction allow_or_exit\n read -P \"$argv[1] Continue? [y/n] \" -l response\n switch "
},
{
"path": "docs/404.md",
"chars": 418,
"preview": "---\ntitle: Page Not Found\ndescription: Whatever you thought was here, isn't. The plot thickens, the game is afoot!\nperma"
},
{
"path": "docs/_config.yml",
"chars": 1271,
"preview": "remote_theme: just-the-docs/just-the-docs\ntitle: Actions URI\ndescription: A plugin for Obsidian.md adding additional `x-"
},
{
"path": "docs/_includes/head_custom.html",
"chars": 1881,
"preview": "<meta name=\"fediverse:creator\" content=\"@czottmann@norden.social\" />\n\n<script defer data-domain=\"zottmann.dev\" src=\"http"
},
{
"path": "docs/anatomy.md",
"chars": 766,
"preview": "---\nnav_order: 5\n---\n\n# Anatomy of an Actions URI… URL\n\nAn Action URI-provided URL doesn't look much different from a st"
},
{
"path": "docs/callbacks.md",
"chars": 3382,
"preview": "---\nnav_order: 4\n---\n\n# Getting data back from Actions URI\n\nAll routes support return calls back to the sender. This is "
},
{
"path": "docs/changes.md",
"chars": 120,
"preview": "# Release history\n\nPlease see [CHANGELOG.md](https://github.com/czottmann/obsidian-actions-uri/blob/main/CHANGELOG.md).\n"
},
{
"path": "docs/faq.md",
"chars": 1390,
"preview": "---\nnav_order: 99\n---\n\n# FAQ\n\n## Why does this exist?\nOne major reason is an upcoming project of mine, for which I need "
},
{
"path": "docs/index.md",
"chars": 2204,
"preview": "---\nnav_order: 0\n---\n\n<img src=\"https://raw.githubusercontent.com/czottmann/obsidian-actions-uri/main/readme-assets/acti"
},
{
"path": "docs/installation.md",
"chars": 915,
"preview": "---\nnav_order: 1\n---\n\n# Installation\n\n1. Search for \"Actions URI\" in Obsidian's community plugins browser and install it"
},
{
"path": "docs/license.md",
"chars": 112,
"preview": "# MIT License\n\nPlease see [LICENSE.md](https://github.com/czottmann/obsidian-actions-uri/blob/main/LICENSE.md).\n"
},
{
"path": "docs/parameters.md",
"chars": 1830,
"preview": "---\nnav_order: 3\n---\n\n# Parameters required & accepted by all endpoints\n\n| Parameter | Value type | Opti"
},
{
"path": "docs/routes/command.md",
"chars": 2962,
"preview": "---\nparent: New Routes\n---\n\n# `/command`\n<span class=\"tag tag-version\">v1.3+</span>\n\nThese routes deal with getting the "
},
{
"path": "docs/routes/dataview.md",
"chars": 3239,
"preview": "---\nparent: New Routes\n---\n\n# `/dataview`\n<span class=\"tag tag-version\">v0.14+</span>\n\nThese routes allow for running [D"
},
{
"path": "docs/routes/file.md",
"chars": 7932,
"preview": "---\nparent: New Routes\n---\n\n# `/file`\n<span class=\"tag tag-version\">v1.5+</span>\n\nThese routes deal with reading, writin"
},
{
"path": "docs/routes/folder.md",
"chars": 6496,
"preview": "---\nparent: New Routes\n---\n\n# `/folder`\n<span class=\"tag tag-version\">v0.16+</span>\n\nThese routes deal with folders. Th"
},
{
"path": "docs/routes/info.md",
"chars": 1778,
"preview": "---\nparent: New Routes\n---\n\n# `/info`\n\nThese routes deal with plugin & Obsidian environment info. Their URLs start with"
},
{
"path": "docs/routes/note-properties.md",
"chars": 13076,
"preview": "---\nparent: New Routes\n---\n\n# `/note-properties`\n\n<span class=\"tag tag-version\">v1.4+</span>\n\nThese routes deal with rea"
},
{
"path": "docs/routes/note.md",
"chars": 57570,
"preview": "---\nparent: New Routes\n---\n\n# `/note`\n\nThese routes deal with reading, writing and updating notes and periodic notes (da"
},
{
"path": "docs/routes/omnisearch.md",
"chars": 2580,
"preview": "---\nparent: New Routes\n---\n\n# `/omnisearch`\n<span class=\"tag tag-version\">v1.1+</span>\n\nThese routes deal with running s"
},
{
"path": "docs/routes/root.md",
"chars": 660,
"preview": "---\nparent: New Routes\n---\n\n# `/`\n\nAll URLs start with `obsidian://actions-uri`.\n\n<div id=\"toc\"></div>\n\n\n \n\n\n## `ob"
},
{
"path": "docs/routes/search.md",
"chars": 2575,
"preview": "---\nparent: New Routes\n---\n\n# `/search`\n\nThese routes deal with running searches in Obsidian. Their URLs start with `ob"
},
{
"path": "docs/routes/tags.md",
"chars": 1860,
"preview": "---\nparent: New Routes\n---\n\n# `/tags`\n<span class=\"tag tag-version\">v0.13+</span>\n\nThese routes deal with a vault's tags"
},
{
"path": "docs/routes/vault.md",
"chars": 5297,
"preview": "---\nparent: New Routes\n---\n\n# `/vault`\n<span class=\"tag tag-version\">v0.12+</span>\n\nThese routes deal with handling an O"
},
{
"path": "docs/routes.md",
"chars": 854,
"preview": "---\nnav_order: 2\nhas_children: true\nhas_toc: false\n---\n\n# New Routes\n\n- [`/command`](routes/command.md): Querying and tr"
},
{
"path": "esbuild.config.mjs",
"chars": 1729,
"preview": "import esbuild from \"esbuild\";\nimport process from \"process\";\nimport builtins from \"builtin-modules\";\nimport { exec } fr"
},
{
"path": "jest.config.js",
"chars": 622,
"preview": "/** @type {import('ts-jest').JestConfigWithTsJest} */\nmodule.exports = {\n transform: {\n // Suppresses message TS1510"
},
{
"path": "manifest.json",
"chars": 353,
"preview": "{\n \"id\": \"actions-uri\",\n \"name\": \"Actions URI\",\n \"version\": \"1.8.4\",\n \"minAppVersion\": \"1.8.0\",\n \"description\": \"Ad"
},
{
"path": "package.json",
"chars": 1259,
"preview": "{\n \"name\": \"obsidian-actions-uri\",\n \"version\": \"1.8.4\",\n \"description\": \"This plugin for Obsidian (https://obsidian.m"
},
{
"path": "src/constants.ts",
"chars": 3410,
"preview": "export const URI_NAMESPACE = \"actions-uri\";\n\nexport const STRINGS = {\n append_done: \"Note was appended\",\n command_not_"
},
{
"path": "src/main.ts",
"chars": 8545,
"preview": "import {\n normalizePath,\n ObsidianProtocolData,\n Plugin,\n TAbstractFile,\n} from \"obsidian\";\nimport { z, ZodError } f"
},
{
"path": "src/plugin-info.json",
"chars": 81,
"preview": "{\n \"pluginVersion\": \"1.8.4\",\n \"pluginReleasedAt\": \"2025-11-18T12:48:42+0100\"\n}\n"
},
{
"path": "src/plugin-info.ts",
"chars": 158,
"preview": "/* File will be overwritten by bin/release.sh! */\nexport const PLUGIN_INFO = {\n \"pluginVersion\": \"1.8.4\",\n \"pluginRele"
},
{
"path": "src/routes/command.ts",
"chars": 2444,
"preview": "import { z } from \"zod\";\nimport { STRINGS } from \"src/constants\";\nimport { RoutePath } from \"src/routes\";\nimport { incom"
},
{
"path": "src/routes/dataview.ts",
"chars": 4267,
"preview": "import {\n DataviewApi,\n getAPI,\n isPluginEnabled as isDataviewEnabled,\n} from \"obsidian-dataview\";\nimport { z } from "
},
{
"path": "src/routes/file.ts",
"chars": 3613,
"preview": "import { z } from \"zod\";\nimport { STRINGS } from \"src/constants\";\nimport { RoutePath } from \"src/routes\";\nimport { incom"
},
{
"path": "src/routes/folder.ts",
"chars": 3238,
"preview": "import { TFolder } from \"obsidian\";\nimport { z } from \"zod\";\nimport { STRINGS } from \"src/constants\";\nimport { RoutePath"
},
{
"path": "src/routes/info.ts",
"chars": 1424,
"preview": "import { apiVersion, Platform } from \"obsidian\";\nimport { z } from \"zod\";\nimport { PLUGIN_INFO } from \"src/plugin-info\";"
},
{
"path": "src/routes/note/create.ts",
"chars": 11107,
"preview": "import { TAbstractFile } from \"obsidian\";\nimport { z } from \"zod\";\nimport { STRINGS } from \"src/constants\";\nimport { inc"
},
{
"path": "src/routes/note-properties.ts",
"chars": 3849,
"preview": "import { stringifyYaml } from \"obsidian\";\nimport { z } from \"zod\";\nimport { STRINGS } from \"src/constants\";\nimport { Rou"
},
{
"path": "src/routes/note.ts",
"chars": 19976,
"preview": "import { MarkdownView, TFile } from \"obsidian\";\nimport { z } from \"zod\";\nimport { STRINGS } from \"src/constants\";\nimport"
},
{
"path": "src/routes/omnisearch.ts",
"chars": 1804,
"preview": "import { z } from \"zod\";\nimport { RoutePath } from \"src/routes\";\nimport { incomingBaseParams } from \"src/schemata\";\nimpo"
},
{
"path": "src/routes/root.ts",
"chars": 194,
"preview": "import { RoutePath } from \"src/routes\";\nimport { helloRoute } from \"src/utils/routing\";\n\n// ROUTES --------------------\n"
},
{
"path": "src/routes/search.ts",
"chars": 1788,
"preview": "import { z } from \"zod\";\nimport { RoutePath } from \"src/routes\";\nimport { incomingBaseParams } from \"src/schemata\";\nimpo"
},
{
"path": "src/routes/settings.ts",
"chars": 983,
"preview": "import { z } from \"zod\";\nimport { RoutePath } from \"src/routes\";\nimport { incomingBaseParams } from \"src/schemata\";\nimpo"
},
{
"path": "src/routes/tags.ts",
"chars": 1106,
"preview": "import { z } from \"zod\";\nimport { RoutePath } from \"src/routes\";\nimport { incomingBaseParams } from \"src/schemata\";\nimpo"
},
{
"path": "src/routes/vault.ts",
"chars": 3253,
"preview": "import { Platform } from \"obsidian\";\nimport { z } from \"zod\";\nimport { STRINGS } from \"src/constants\";\nimport { RoutePat"
},
{
"path": "src/routes.ts",
"chars": 3100,
"preview": "import { z } from \"zod\";\nimport {\n AnyLocalParams as AnyCommandParams,\n routePath as commandRoutes,\n} from \"src/routes"
},
{
"path": "src/schemata.ts",
"chars": 1536,
"preview": "import { z } from \"zod\";\nimport { zodOptionalBoolean, zodSanitizedNotePath } from \"src/utils/zod\";\nimport {\n PeriodicNo"
},
{
"path": "src/settings.ts",
"chars": 2404,
"preview": "import { App, debounce, PluginSettingTab, Setting } from \"obsidian\";\nimport ActionsURI from \"src/main\";\n\nexport class Se"
},
{
"path": "src/types/handlers.d.ts",
"chars": 3135,
"preview": "/**\n * A handler function is a function that is responsible for dealing with a\n * particular route. It takes a payload ("
},
{
"path": "src/types/obsidian-objects.d.ts",
"chars": 1598,
"preview": "import {\n App,\n CachedMetadata,\n Command,\n DataAdapter,\n MetadataCache,\n PluginManifest,\n TAbstractFile,\n TFile,"
},
{
"path": "src/types/plugins.d.ts",
"chars": 776,
"preview": "// Source: https://publish.obsidian.md/omnisearch/Public+API+%26+URL+Scheme\nexport type OmnisearchAPI = {\n // Returns a"
},
{
"path": "src/types/results.d.ts",
"chars": 1184,
"preview": "import { TFile } from \"obsidian\";\nimport { AnyParams } from \"src/routes\";\nimport { AnyHandlerResult, NoteProperties } fr"
},
{
"path": "src/types.d.ts",
"chars": 668,
"preview": "export * from \"src/types/handlers\";\nexport * from \"src/types/obsidian-objects\";\nexport * from \"src/types/plugins\";\nexpor"
},
{
"path": "src/utils/callbacks.ts",
"chars": 3616,
"preview": "import { ObsidianProtocolData, requestUrl, TAbstractFile } from \"obsidian\";\nimport { excludeKeys } from \"filter-obj\";\nim"
},
{
"path": "src/utils/file-handling.ts",
"chars": 22350,
"preview": "import { MarkdownView, normalizePath, TAbstractFile, TFile } from \"obsidian\";\nimport { STRINGS } from \"src/constants\";\ni"
},
{
"path": "src/utils/parameters.ts",
"chars": 6807,
"preview": "import { parseFrontMatterEntry, TAbstractFile } from \"obsidian\";\nimport { z } from \"zod\";\nimport { STRINGS } from \"src/c"
},
{
"path": "src/utils/periodic-notes-handling.ts",
"chars": 6148,
"preview": "import { moment, TFile } from \"obsidian\";\nimport {\n appHasDailyNotesPluginLoaded,\n appHasMonthlyNotesPluginLoaded,\n a"
},
{
"path": "src/utils/plugins.ts",
"chars": 2179,
"preview": "import { PluginResultObject } from \"src/types\";\nimport { self } from \"src/utils/self\";\nimport { ErrorCode, failure, succ"
},
{
"path": "src/utils/results-handling.ts",
"chars": 1137,
"preview": "import { ErrorObject, ResultObject } from \"src/types\";\n\n/**\n * Returns a `ResultObject` based on the passed-in parameter"
},
{
"path": "src/utils/routing.ts",
"chars": 570,
"preview": "import { success } from \"src/utils/results-handling\";\nimport { AnyParams, RouteSubpath } from \"src/routes\";\nimport { inc"
},
{
"path": "src/utils/search.ts",
"chars": 2324,
"preview": "import { TFile } from \"obsidian\";\nimport {\n getEnabledCommunityPlugin,\n getEnabledCorePlugin,\n} from \"src/utils/plugin"
},
{
"path": "src/utils/self.ts",
"chars": 438,
"preview": "import type ActionsURI from \"src/main\";\nimport { RealLifePlugin } from \"src/types\";\n\nlet _self: RealLifePlugin;\n\nexport "
},
{
"path": "src/utils/string-handling.ts",
"chars": 3190,
"preview": "import { getFrontMatterInfo } from \"obsidian\";\nimport { STRINGS } from \"src/constants\";\nimport { RegexResultObject } fro"
},
{
"path": "src/utils/time.ts",
"chars": 183,
"preview": "export async function pause(milliseconds: number): Promise<void> {\n return new Promise<void>((resolve) => {\n setTime"
},
{
"path": "src/utils/ui.ts",
"chars": 2795,
"preview": "import { FileView, Notice, requireApiVersion } from \"obsidian\";\nimport { STRINGS } from \"src/constants\";\nimport { String"
},
{
"path": "src/utils/zod.ts",
"chars": 7704,
"preview": "import { z } from \"zod\";\nimport { TAbstractFile, TFile, TFolder } from \"obsidian\";\nimport { self } from \"src/utils/self\""
},
{
"path": "tests/README.md",
"chars": 6929,
"preview": "# Test Setup Documentation\n\nThis document explains the setup and structure of the test environment for the Obsidian Acti"
},
{
"path": "tests/callback-server.ts",
"chars": 2764,
"preview": "import * as http from \"http\";\nimport { URL } from \"url\";\nimport { CallbackData } from \"./types\";\n\nconst TEST_PORT = 3000"
},
{
"path": "tests/global-setup.ts",
"chars": 6428,
"preview": "import * as fs from \"fs/promises\";\nimport * as path from \"path\";\nimport * as os from \"os\";\nimport chokidar from \"chokida"
},
{
"path": "tests/global-teardown.ts",
"chars": 1204,
"preview": "import * as fs from \"fs/promises\";\nimport { asyncExec, pause } from \"./helpers\";\n\n/**\n * Tears down (removes) the specif"
},
{
"path": "tests/helpers.ts",
"chars": 6140,
"preview": "import { exec } from \"child_process\";\nimport { randomUUID } from \"crypto\";\nimport { platform } from \"os\";\nimport { promi"
},
{
"path": "tests/periodic-notes.ts",
"chars": 799,
"preview": "import * as moment from \"moment\";\nimport { PeriodicNoteSet, RecentPeriodicNoteSet } from \"#tests/types.d\";\n\nexport const"
},
{
"path": "tests/plugin-test-vault.original/.obsidian/app.json",
"chars": 2,
"preview": "{}"
},
{
"path": "tests/plugin-test-vault.original/.obsidian/appearance.json",
"chars": 2,
"preview": "{}"
},
{
"path": "tests/plugin-test-vault.original/.obsidian/community-plugins.json",
"chars": 108,
"preview": "[\n \"logstravaganza\",\n \"periodic-notes\",\n \"auto-periodic-notes\",\n \"templater-obsidian\",\n \"actions-uri\"\n]"
},
{
"path": "tests/plugin-test-vault.original/.obsidian/core-plugins.json",
"chars": 673,
"preview": "{\n \"file-explorer\": true,\n \"global-search\": false,\n \"switcher\": false,\n \"graph\": false,\n \"backlink\": false,\n \"canv"
},
{
"path": "tests/plugin-test-vault.original/.obsidian/graph.json",
"chars": 493,
"preview": "{\n \"collapse-filter\": true,\n \"search\": \"\",\n \"showTags\": false,\n \"showAttachments\": false,\n \"hideUnresolved\": false,"
},
{
"path": "tests/plugin-test-vault.original/.obsidian/plugins/actions-uri/manifest.json",
"chars": 354,
"preview": "{\n \"id\": \"actions-uri\",\n \"name\": \"Actions URI\",\n \"version\": \"1.7.3\",\n \"minAppVersion\": \"1.5.11\",\n \"description\": \"A"
},
{
"path": "tests/plugin-test-vault.original/.obsidian/plugins/auto-periodic-notes/data.json",
"chars": 633,
"preview": "{\n \"alwaysOpen\": false,\n \"daily\": {\n \"available\": true,\n \"enabled\": true,\n \"closeExisting\": false,\n \"openA"
},
{
"path": "tests/plugin-test-vault.original/.obsidian/plugins/auto-periodic-notes/main.js",
"chars": 21912,
"preview": "/*\nTHIS IS A GENERATED/BUNDLED FILE BY ESBUILD\nif you want to view the source, please visit the GitHub repository of thi"
},
{
"path": "tests/plugin-test-vault.original/.obsidian/plugins/auto-periodic-notes/manifest.json",
"chars": 376,
"preview": "{\n \"id\": \"auto-periodic-notes\",\n \"name\": \"Auto Periodic Notes\",\n \"version\": \"0.2.3\",\n \"minAppVersion\": \"1.6.6\",\n \"d"
},
{
"path": "tests/plugin-test-vault.original/.obsidian/plugins/logstravaganza/data.json",
"chars": 135,
"preview": "{\n \"fileNameContainsDate\": false,\n \"formatterID\": \"ndjson\",\n \"outputFolder\": \"/\",\n \"logLevel\": \"debug\",\n \"debounceW"
},
{
"path": "tests/plugin-test-vault.original/.obsidian/plugins/logstravaganza/main.js",
"chars": 16347,
"preview": "/*\nTHIS IS A GENERATED/BUNDLED FILE BY ESBUILD\nif you want to view the source, please visit the github repository of thi"
},
{
"path": "tests/plugin-test-vault.original/.obsidian/plugins/logstravaganza/manifest.json",
"chars": 322,
"preview": "{\n \"id\": \"logstravaganza\",\n \"name\": \"Logstravaganza\",\n \"version\": \"2.2.0\",\n \"minAppVersion\": \"1.8.0\",\n \"description"
},
{
"path": "tests/plugin-test-vault.original/.obsidian/plugins/periodic-notes/data.json",
"chars": 727,
"preview": "{\n \"showGettingStartedBanner\": true,\n \"hasMigratedDailyNoteSettings\": false,\n \"hasMigratedWeeklyNoteSettings\": false,"
},
{
"path": "tests/plugin-test-vault.original/.obsidian/plugins/periodic-notes/main.js",
"chars": 180579,
"preview": "'use strict';\n\nvar obsidian = require('obsidian');\n\nfunction _interopDefaultLegacy (e) { return e && typeof e === 'objec"
},
{
"path": "tests/plugin-test-vault.original/.obsidian/plugins/periodic-notes/manifest.json",
"chars": 280,
"preview": "{\n \"id\": \"periodic-notes\",\n \"name\": \"Periodic Notes\",\n \"description\": \"Create/manage your daily, weekly, and monthly "
},
{
"path": "tests/plugin-test-vault.original/.obsidian/plugins/periodic-notes/styles.css",
"chars": 488,
"preview": ".periodic-modal {\n min-width: 40vw;\n}\n\n.settings-banner {\n background-color: var(--background-primary-alt);\n border-r"
},
{
"path": "tests/plugin-test-vault.original/.obsidian/plugins/templater-obsidian/main.js",
"chars": 332931,
"preview": "/*\nTHIS IS A GENERATED/BUNDLED FILE BY ESBUILD\nif you want to view the source, please visit the github repository of thi"
},
{
"path": "tests/plugin-test-vault.original/.obsidian/plugins/templater-obsidian/manifest.json",
"chars": 330,
"preview": "{\n \"id\": \"templater-obsidian\",\n \"name\": \"Templater\",\n \"version\": \"2.11.1\",\n \"description\": \"Create and use t"
},
{
"path": "tests/plugin-test-vault.original/.obsidian/plugins/templater-obsidian/styles.css",
"chars": 4811,
"preview": ".templater_search {\n width: calc(100% - 20px);\n}\n\n.templater_div {\n border-top: 1px solid var(--background-modifie"
},
{
"path": "tests/plugin-test-vault.original/.obsidian/workspace.json",
"chars": 1723,
"preview": "{\n \"main\": {\n \"id\": \"90ac7104a2c14afa\",\n \"type\": \"split\",\n \"children\": [\n {\n \"id\": \"26e8f8e844ba64"
},
{
"path": "tests/plugin-test-vault.original/2024.md",
"chars": 21,
"preview": "## Yearly Note: 2024\n"
},
{
"path": "tests/plugin-test-vault.original/2025-04.md",
"chars": 25,
"preview": "## Monthly Note: 2025-04\n"
},
{
"path": "tests/plugin-test-vault.original/2025-05-18.md",
"chars": 26,
"preview": "## Daily Note: 2025-05-18\n"
},
{
"path": "tests/plugin-test-vault.original/2025-Q1.md",
"chars": 27,
"preview": "## Quarterly Note: 2025-Q1\n"
},
{
"path": "tests/plugin-test-vault.original/2025-W20.md",
"chars": 25,
"preview": "## Weekly Note: 2025-W20\n"
},
{
"path": "tests/plugin-test-vault.original/Welcome.md",
"chars": 22,
"preview": "This is a test vault.\n"
},
{
"path": "tests/plugin-test-vault.original/_templates/Daily Note.md",
"chars": 25,
"preview": "## Daily Note: {{title}}\n"
},
{
"path": "tests/plugin-test-vault.original/_templates/Monthly Note.md",
"chars": 27,
"preview": "## Monthly Note: {{title}}\n"
},
{
"path": "tests/plugin-test-vault.original/_templates/Quarterly Note.md",
"chars": 29,
"preview": "## Quarterly Note: {{title}}\n"
},
{
"path": "tests/plugin-test-vault.original/_templates/Weekly Note.md",
"chars": 26,
"preview": "## Weekly Note: {{title}}\n"
},
{
"path": "tests/plugin-test-vault.original/_templates/Yearly Note.md",
"chars": 26,
"preview": "## Yearly Note: {{title}}\n"
},
{
"path": "tests/plugin-test-vault.original/any/standard-parameters.test.ts",
"chars": 1127,
"preview": "import { callObsidian } from \"#tests/helpers\";\n\ndescribe(\"any route\", () => {\n it(\n \"should throw an error on missin"
},
{
"path": "tests/plugin-test-vault.original/note/append/noteAppend.test.ts",
"chars": 112,
"preview": "import { callObsidian } from \"#tests/helpers\";\n\ndescribe(\"note/append\", () => {\n it.todo(\"needs testing\");\n});\n"
},
{
"path": "tests/plugin-test-vault.original/note/create/noteCreate.test.ts",
"chars": 112,
"preview": "import { callObsidian } from \"#tests/helpers\";\n\ndescribe(\"note/create\", () => {\n it.todo(\"needs testing\");\n});\n"
},
{
"path": "tests/plugin-test-vault.original/note/delete/noteDelete.test.ts",
"chars": 112,
"preview": "import { callObsidian } from \"#tests/helpers\";\n\ndescribe(\"note/delete\", () => {\n it.todo(\"needs testing\");\n});\n"
},
{
"path": "tests/plugin-test-vault.original/note/get/note-1.md",
"chars": 70,
"preview": "---\ntags:\n - one\n - two\nid: 01JV9K2XGJA4HH5XVWKC8EPQ4W\n---\n\n# Hello\n"
},
{
"path": "tests/plugin-test-vault.original/note/get/noteGet.test.ts",
"chars": 2991,
"preview": "import * as fs from \"fs/promises\";\nimport * as path from \"path\";\nimport { callObsidian, pause } from \"#tests/helpers\";\ni"
},
{
"path": "tests/plugin-test-vault.original/note/get-active/noteGetActive.test.ts",
"chars": 116,
"preview": "import { callObsidian } from \"#tests/helpers\";\n\ndescribe(\"note/get-active\", () => {\n it.todo(\"needs testing\");\n});\n"
},
{
"path": "tests/plugin-test-vault.original/note/get-first-named/noteGetFirstNamed.test.ts",
"chars": 121,
"preview": "import { callObsidian } from \"#tests/helpers\";\n\ndescribe(\"note/get-first-named\", () => {\n it.todo(\"needs testing\");\n});"
},
{
"path": "tests/plugin-test-vault.original/note/list/noteList.test.ts",
"chars": 110,
"preview": "import { callObsidian } from \"#tests/helpers\";\n\ndescribe(\"note/list\", () => {\n it.todo(\"needs testing\");\n});\n"
},
{
"path": "tests/plugin-test-vault.original/note/open/note-1.md",
"chars": 0,
"preview": ""
},
{
"path": "tests/plugin-test-vault.original/note/open/note-2.md",
"chars": 40,
"preview": "---\nuid: 01JVM672TZYJ134Z74M2HY8GNC\n---\n"
},
{
"path": "tests/plugin-test-vault.original/note/open/noteOpen.test.ts",
"chars": 2409,
"preview": "import * as fs from \"fs/promises\";\nimport * as path from \"path\";\nimport { callObsidian, pause } from \"#tests/helpers\";\ni"
},
{
"path": "tests/plugin-test-vault.original/note/prepend/notePrepend.test.ts",
"chars": 113,
"preview": "import { callObsidian } from \"#tests/helpers\";\n\ndescribe(\"note/prepend\", () => {\n it.todo(\"needs testing\");\n});\n"
},
{
"path": "tests/plugin-test-vault.original/note/rename/noteRename.test.ts",
"chars": 112,
"preview": "import { callObsidian } from \"#tests/helpers\";\n\ndescribe(\"note/rename\", () => {\n it.todo(\"needs testing\");\n});\n"
},
{
"path": "tests/plugin-test-vault.original/note/search-regex-and-replace/noteSearchRegexAndReplace.test.ts",
"chars": 130,
"preview": "import { callObsidian } from \"#tests/helpers\";\n\ndescribe(\"note/search-regex-and-replace\", () => {\n it.todo(\"needs testi"
},
{
"path": "tests/plugin-test-vault.original/note/search-string-and-replace/noteSearchStringAndReplace.test.ts",
"chars": 131,
"preview": "import { callObsidian } from \"#tests/helpers\";\n\ndescribe(\"note/search-string-and-replace\", () => {\n it.todo(\"needs test"
}
]
// ... and 5 more files (download for full content)
About this extraction
This page contains the full source code of the czottmann/obsidian-actions-uri GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 205 files (947.9 KB), approximately 282.8k tokens, and a symbol index with 1172 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.