obsidian-dev-utils 94.1.0 → 94.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +4 -0
- package/dist/integration-test-plugin/main.js +251 -99
- package/dist/lib/cjs/__merged.cjs +10 -1
- package/dist/lib/cjs/__merged.d.cts +1 -0
- package/dist/lib/cjs/generated-during-build.cjs +1 -1
- package/dist/lib/cjs/obsidian/folder-note.cjs +253 -0
- package/dist/lib/cjs/obsidian/folder-note.d.cts +166 -0
- package/dist/lib/cjs/obsidian/index.cjs +4 -1
- package/dist/lib/cjs/obsidian/index.d.cts +1 -0
- package/dist/lib/cjs/obsidian/markdown.cjs +27 -3
- package/dist/lib/cjs/obsidian/markdown.d.cts +70 -1
- package/dist/lib/esm/__merged.d.mts +1 -0
- package/dist/lib/esm/__merged.mjs +11 -1
- package/dist/lib/esm/generated-during-build.mjs +1 -1
- package/dist/lib/esm/obsidian/folder-note.d.mts +166 -0
- package/dist/lib/esm/obsidian/folder-note.mjs +146 -0
- package/dist/lib/esm/obsidian/index.d.mts +1 -0
- package/dist/lib/esm/obsidian/index.mjs +3 -1
- package/dist/lib/esm/obsidian/markdown.d.mts +70 -1
- package/dist/lib/esm/obsidian/markdown.mjs +35 -4
- package/obsidian/folder-note/package.json +6 -0
- package/package.json +1 -1
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
/// <reference path="../library.d.mts" />
|
|
2
|
+
/**
|
|
3
|
+
* @file
|
|
4
|
+
*
|
|
5
|
+
* The folder-note concept: which note, if any, is the one whose properties describe a FOLDER itself.
|
|
6
|
+
*
|
|
7
|
+
* Obsidian has no such concept — it is a convention the community settled on, and the plugin that owns it
|
|
8
|
+
* for most vaults is [`folder-notes`](https://github.com/LostPaul/obsidian-folder-notes). So the answer to
|
|
9
|
+
* "which note belongs to this folder" is that plugin's to give whenever it is installed, and this module
|
|
10
|
+
* asks it rather than inventing a second answer: {@link FolderNoteLocation.Auto} — the default — reads its
|
|
11
|
+
* live configuration at every use.
|
|
12
|
+
*
|
|
13
|
+
* Reading it live rather than copying its values into a consumer's own settings is deliberate: a copy goes
|
|
14
|
+
* stale the moment that plugin is reconfigured, and it would need a settings migration to seed. Everything
|
|
15
|
+
* else is the caller's explicit choice, and then the other plugin is not consulted at all.
|
|
16
|
+
*
|
|
17
|
+
* Nothing here ever CREATES a note. A folder with no folder note answers `null`, which is what lets a
|
|
18
|
+
* caller layer folder-note behavior onto a click without risking a file appearing on the user's disk.
|
|
19
|
+
*/
|
|
20
|
+
import type { App, TFile, TFolder } from 'obsidian';
|
|
21
|
+
/**
|
|
22
|
+
* Where a folder's folder note lives.
|
|
23
|
+
*
|
|
24
|
+
* The three concrete members are the shapes the folder-note ecosystem actually uses:
|
|
25
|
+
* `charlie/charlie.md` and `charlie/index.md` are both {@link FolderNoteLocation.InsideFolder} (they
|
|
26
|
+
* differ only in the NAME, which is why naming is a callback and not a fourth member), while
|
|
27
|
+
* `charlie.md` beside the folder is {@link FolderNoteLocation.ParentFolder} — whose whole point is that
|
|
28
|
+
* `[[alpha/bravo/charlie]]` links to a folder with no special syntax.
|
|
29
|
+
*/
|
|
30
|
+
export declare enum FolderNoteLocation {
|
|
31
|
+
/**
|
|
32
|
+
* Take the answer from the installed `folder-notes` plugin, falling back to a note named after its
|
|
33
|
+
* folder, inside it. The default, and resolved LIVE rather than copied.
|
|
34
|
+
*/
|
|
35
|
+
Auto = "Auto",
|
|
36
|
+
/**
|
|
37
|
+
* `alpha/bravo/charlie/<name>.md`.
|
|
38
|
+
*/
|
|
39
|
+
InsideFolder = "InsideFolder",
|
|
40
|
+
/**
|
|
41
|
+
* The vault has no folder notes at all, so every folder answers `null`. This is also how a caller opts
|
|
42
|
+
* out of folder-note behavior entirely.
|
|
43
|
+
*/
|
|
44
|
+
None = "None",
|
|
45
|
+
/**
|
|
46
|
+
* `alpha/bravo/<name>.md`, beside the folder.
|
|
47
|
+
*/
|
|
48
|
+
ParentFolder = "ParentFolder"
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* A folder-note setup with {@link FolderNoteLocation.Auto} already resolved to a concrete answer.
|
|
52
|
+
*/
|
|
53
|
+
export interface FolderNoteConfig {
|
|
54
|
+
/**
|
|
55
|
+
* The extensions a folder note may carry, WITHOUT the leading dot, in resolution order — the first one
|
|
56
|
+
* that names an existing file wins.
|
|
57
|
+
*/
|
|
58
|
+
readonly extensions: readonly string[];
|
|
59
|
+
/**
|
|
60
|
+
* Whether the folder note is hidden in the file explorer.
|
|
61
|
+
*
|
|
62
|
+
* Read rather than acted upon here: it changes nothing about WHICH file is the folder note, but a caller
|
|
63
|
+
* that reveals the note has to know there is nothing to reveal and fall back to revealing the folder.
|
|
64
|
+
*/
|
|
65
|
+
readonly isHidden: boolean;
|
|
66
|
+
/**
|
|
67
|
+
* Where the note sits relative to its folder.
|
|
68
|
+
*/
|
|
69
|
+
readonly location: FolderNoteLocation.InsideFolder | FolderNoteLocation.None | FolderNoteLocation.ParentFolder;
|
|
70
|
+
/**
|
|
71
|
+
* Names the folder note of a folder, WITHOUT its extension.
|
|
72
|
+
*
|
|
73
|
+
* @param folder - The folder whose note is being named.
|
|
74
|
+
* @returns The note's name; an empty (or blank) name means the folder has no folder note.
|
|
75
|
+
*/
|
|
76
|
+
resolveName(this: void, folder: TFolder): string;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Parameters for {@link resolveFolderNoteConfig}.
|
|
80
|
+
*/
|
|
81
|
+
export interface ResolveFolderNoteConfigParams {
|
|
82
|
+
/**
|
|
83
|
+
* The Obsidian app instance.
|
|
84
|
+
*/
|
|
85
|
+
readonly app: App;
|
|
86
|
+
/**
|
|
87
|
+
* The extensions a folder note may carry, with or without the leading dot, in resolution order. Ignored
|
|
88
|
+
* under {@link FolderNoteLocation.Auto}, which takes the installed plugin's answer whole.
|
|
89
|
+
*
|
|
90
|
+
* @default `['md']`
|
|
91
|
+
*/
|
|
92
|
+
readonly extensions?: readonly string[];
|
|
93
|
+
/**
|
|
94
|
+
* Whether the folder note is hidden in the file explorer. Ignored under {@link FolderNoteLocation.Auto}.
|
|
95
|
+
*
|
|
96
|
+
* @default `false`
|
|
97
|
+
*/
|
|
98
|
+
readonly isHidden?: boolean;
|
|
99
|
+
/**
|
|
100
|
+
* Where the note sits relative to its folder.
|
|
101
|
+
*
|
|
102
|
+
* @default {@link FolderNoteLocation.Auto}
|
|
103
|
+
*/
|
|
104
|
+
readonly location?: FolderNoteLocation;
|
|
105
|
+
/**
|
|
106
|
+
* Names the folder note of a folder, WITHOUT its extension. Ignored under
|
|
107
|
+
* {@link FolderNoteLocation.Auto}, which names the note the way the installed plugin does.
|
|
108
|
+
*
|
|
109
|
+
* A callback rather than a name template, because a template needs a token vocabulary and this library
|
|
110
|
+
* has none to impose — a caller that has one (`{{folderName}}`, `{{folderPath}}`, …) renders it here.
|
|
111
|
+
*
|
|
112
|
+
* @param folder - The folder whose note is being named.
|
|
113
|
+
* @returns The note's name.
|
|
114
|
+
* @default `(folder) => folder.name`
|
|
115
|
+
*/
|
|
116
|
+
resolveName?(this: void, folder: TFolder): string;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Parameters for {@link resolveFolderNote}.
|
|
120
|
+
*/
|
|
121
|
+
export interface ResolveFolderNoteParams {
|
|
122
|
+
/**
|
|
123
|
+
* The Obsidian app instance.
|
|
124
|
+
*/
|
|
125
|
+
readonly app: App;
|
|
126
|
+
/**
|
|
127
|
+
* The already-resolved setup to use.
|
|
128
|
+
*
|
|
129
|
+
* Omitted means {@link FolderNoteLocation.Auto} — the setup is resolved on the spot, which is what makes
|
|
130
|
+
* `resolveFolderNote({ app, folder })` the one-liner every caller wants. Pass one when the same setup is
|
|
131
|
+
* used more than once, or when its {@link FolderNoteConfig.isHidden} is needed alongside the note.
|
|
132
|
+
*
|
|
133
|
+
* @default `resolveFolderNoteConfig({ app })`
|
|
134
|
+
*/
|
|
135
|
+
readonly config?: FolderNoteConfig;
|
|
136
|
+
/**
|
|
137
|
+
* The folder whose folder note is wanted. Read AFTER any rename: the note is named from the folder's
|
|
138
|
+
* CURRENT name, and a `folder-notes` install with `syncFolderName` on will have renamed it already.
|
|
139
|
+
*/
|
|
140
|
+
readonly folder: TFolder;
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* The `folder-notes` plugin's id, as its manifest declares it.
|
|
144
|
+
*/
|
|
145
|
+
export declare const FOLDER_NOTES_PLUGIN_ID = "folder-notes";
|
|
146
|
+
/**
|
|
147
|
+
* Finds a folder's folder note — the one note whose properties describe the folder itself.
|
|
148
|
+
*
|
|
149
|
+
* **Never creates.** A folder that has no folder note answers `null`, and so does the vault root under
|
|
150
|
+
* {@link FolderNoteLocation.ParentFolder} (nothing can sit beside it).
|
|
151
|
+
*
|
|
152
|
+
* @param params - The folder, and optionally the setup to resolve it with.
|
|
153
|
+
* @returns The folder note, or `null` when there is none.
|
|
154
|
+
*/
|
|
155
|
+
export declare function resolveFolderNote(params: ResolveFolderNoteParams): null | TFile;
|
|
156
|
+
/**
|
|
157
|
+
* Resolves {@link FolderNoteLocation.Auto} into a concrete folder-note setup.
|
|
158
|
+
*
|
|
159
|
+
* `folder-notes`' `vaultFolder` storage (every folder note pooled in one central folder) has no
|
|
160
|
+
* counterpart here and falls back rather than guessing: with the notes pooled, the note belonging to a
|
|
161
|
+
* folder is no longer derivable from that folder's path alone.
|
|
162
|
+
*
|
|
163
|
+
* @param params - The setup, and the app to read the installed plugin from.
|
|
164
|
+
* @returns The resolved setup.
|
|
165
|
+
*/
|
|
166
|
+
export declare function resolveFolderNoteConfig(params: ResolveFolderNoteConfigParams): FolderNoteConfig;
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
/*
|
|
2
|
+
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
|
|
3
|
+
if you want to view the source, please visit the github repository of this plugin
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
(function initEsm() {
|
|
7
|
+
// eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
|
|
8
|
+
if (globalThis.process) {
|
|
9
|
+
return;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
const browserProcess = {
|
|
13
|
+
browser: true,
|
|
14
|
+
cwd() {
|
|
15
|
+
return '/';
|
|
16
|
+
},
|
|
17
|
+
env: {},
|
|
18
|
+
platform: 'android'
|
|
19
|
+
};
|
|
20
|
+
// eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
|
|
21
|
+
globalThis.process = browserProcess;
|
|
22
|
+
})();
|
|
23
|
+
|
|
24
|
+
import { normalizePath } from "obsidian";
|
|
25
|
+
import { join } from "../path.mjs";
|
|
26
|
+
import { replaceAll } from "../string.mjs";
|
|
27
|
+
import { MARKDOWN_FILE_EXTENSION } from "./file-system.mjs";
|
|
28
|
+
var FolderNoteLocation = /* @__PURE__ */ ((FolderNoteLocation2) => {
|
|
29
|
+
FolderNoteLocation2["Auto"] = "Auto";
|
|
30
|
+
FolderNoteLocation2["InsideFolder"] = "InsideFolder";
|
|
31
|
+
FolderNoteLocation2["None"] = "None";
|
|
32
|
+
FolderNoteLocation2["ParentFolder"] = "ParentFolder";
|
|
33
|
+
return FolderNoteLocation2;
|
|
34
|
+
})(FolderNoteLocation || {});
|
|
35
|
+
const FOLDER_NOTES_PLUGIN_ID = "folder-notes";
|
|
36
|
+
const FOLDER_NOTES_FOLDER_NAME_TOKEN_REG_EXP = /\{\{folder_name\}\}/gi;
|
|
37
|
+
const EXCALIDRAW_FILE_EXTENSION = "excalidraw";
|
|
38
|
+
const FALLBACK_FOLDER_NOTE_CONFIG = {
|
|
39
|
+
extensions: [MARKDOWN_FILE_EXTENSION],
|
|
40
|
+
isHidden: false,
|
|
41
|
+
location: "InsideFolder" /* InsideFolder */,
|
|
42
|
+
resolveName: (folder) => folder.name
|
|
43
|
+
};
|
|
44
|
+
function resolveFolderNote(params) {
|
|
45
|
+
const { app, folder } = params;
|
|
46
|
+
const config = params.config ?? resolveFolderNoteConfig({ app });
|
|
47
|
+
if (config.location === "None" /* None */) {
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
const parentFolderPath = config.location === "ParentFolder" /* ParentFolder */ ? folder.parent?.path : folder.path;
|
|
51
|
+
if (parentFolderPath === void 0) {
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
54
|
+
const noteName = config.resolveName(folder).trim();
|
|
55
|
+
if (!noteName) {
|
|
56
|
+
return null;
|
|
57
|
+
}
|
|
58
|
+
for (const extension of config.extensions) {
|
|
59
|
+
const file = app.vault.getFileByPath(normalizePath(join(parentFolderPath, `${noteName}.${extension}`)));
|
|
60
|
+
if (file) {
|
|
61
|
+
return file;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
return null;
|
|
65
|
+
}
|
|
66
|
+
function resolveFolderNoteConfig(params) {
|
|
67
|
+
const {
|
|
68
|
+
app,
|
|
69
|
+
extensions,
|
|
70
|
+
isHidden,
|
|
71
|
+
location,
|
|
72
|
+
resolveName
|
|
73
|
+
} = params;
|
|
74
|
+
if (location !== void 0 && location !== "Auto" /* Auto */) {
|
|
75
|
+
return {
|
|
76
|
+
extensions: normalizeExtensions(extensions ?? [MARKDOWN_FILE_EXTENSION]),
|
|
77
|
+
isHidden: isHidden ?? false,
|
|
78
|
+
location,
|
|
79
|
+
resolveName: resolveName ?? FALLBACK_FOLDER_NOTE_CONFIG.resolveName
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
return readFolderNotesPluginConfig(app) ?? FALLBACK_FOLDER_NOTE_CONFIG;
|
|
83
|
+
}
|
|
84
|
+
function normalizeExtensions(extensions) {
|
|
85
|
+
const normalizedExtensions = extensions.map((extension) => extension.trim().toLowerCase().replace(/^\./, "")).map((extension) => extension === EXCALIDRAW_FILE_EXTENSION ? MARKDOWN_FILE_EXTENSION : extension).filter(Boolean);
|
|
86
|
+
return [...new Set(normalizedExtensions)];
|
|
87
|
+
}
|
|
88
|
+
function readFolderNotesPluginConfig(app) {
|
|
89
|
+
const folderNotesPlugin = app.plugins.getPlugin(FOLDER_NOTES_PLUGIN_ID);
|
|
90
|
+
if (!folderNotesPlugin || !("settings" in folderNotesPlugin)) {
|
|
91
|
+
return null;
|
|
92
|
+
}
|
|
93
|
+
const folderNotesSettings = folderNotesPlugin.settings;
|
|
94
|
+
if (typeof folderNotesSettings !== "object" || folderNotesSettings === null) {
|
|
95
|
+
return null;
|
|
96
|
+
}
|
|
97
|
+
const location = toFolderNoteLocation("storageLocation" in folderNotesSettings ? folderNotesSettings.storageLocation : null);
|
|
98
|
+
if (!location) {
|
|
99
|
+
return null;
|
|
100
|
+
}
|
|
101
|
+
const folderNoteName = "folderNoteName" in folderNotesSettings ? folderNotesSettings.folderNoteName : null;
|
|
102
|
+
if (typeof folderNoteName !== "string" || !folderNoteName) {
|
|
103
|
+
return null;
|
|
104
|
+
}
|
|
105
|
+
const folderNoteType = "folderNoteType" in folderNotesSettings ? folderNotesSettings.folderNoteType : null;
|
|
106
|
+
const supportedFileTypes = "supportedFileTypes" in folderNotesSettings ? folderNotesSettings.supportedFileTypes : null;
|
|
107
|
+
const isHidden = "hideFolderNote" in folderNotesSettings ? folderNotesSettings.hideFolderNote : null;
|
|
108
|
+
return {
|
|
109
|
+
// Its own resolver tries the primary type first and every other supported type after it, which is the
|
|
110
|
+
// Order reproduced here. An unusable pair leaves Markdown, the extension it cannot be configured
|
|
111
|
+
// Without.
|
|
112
|
+
extensions: normalizeExtensions([
|
|
113
|
+
typeof folderNoteType === "string" ? folderNoteType : MARKDOWN_FILE_EXTENSION,
|
|
114
|
+
...Array.isArray(supportedFileTypes) ? supportedFileTypes.filter((type) => typeof type === "string") : [],
|
|
115
|
+
MARKDOWN_FILE_EXTENSION
|
|
116
|
+
]),
|
|
117
|
+
isHidden: isHidden === true,
|
|
118
|
+
location,
|
|
119
|
+
resolveName: (folder) => replaceAll({
|
|
120
|
+
$string: folderNoteName,
|
|
121
|
+
// A function replacer, so a folder name containing `$&` is inserted literally.
|
|
122
|
+
replacer: () => folder.name,
|
|
123
|
+
searchValue: FOLDER_NOTES_FOLDER_NAME_TOKEN_REG_EXP
|
|
124
|
+
})
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
function toFolderNoteLocation(storageLocation) {
|
|
128
|
+
switch (storageLocation) {
|
|
129
|
+
case "insideFolder": {
|
|
130
|
+
return "InsideFolder" /* InsideFolder */;
|
|
131
|
+
}
|
|
132
|
+
case "parentFolder": {
|
|
133
|
+
return "ParentFolder" /* ParentFolder */;
|
|
134
|
+
}
|
|
135
|
+
default: {
|
|
136
|
+
return null;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
export {
|
|
141
|
+
FOLDER_NOTES_PLUGIN_ID,
|
|
142
|
+
FolderNoteLocation,
|
|
143
|
+
resolveFolderNote,
|
|
144
|
+
resolveFolderNoteConfig
|
|
145
|
+
};
|
|
146
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2ZvbGRlci1ub3RlLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogVGhlIGZvbGRlci1ub3RlIGNvbmNlcHQ6IHdoaWNoIG5vdGUsIGlmIGFueSwgaXMgdGhlIG9uZSB3aG9zZSBwcm9wZXJ0aWVzIGRlc2NyaWJlIGEgRk9MREVSIGl0c2VsZi5cbiAqXG4gKiBPYnNpZGlhbiBoYXMgbm8gc3VjaCBjb25jZXB0IFx1MjAxNCBpdCBpcyBhIGNvbnZlbnRpb24gdGhlIGNvbW11bml0eSBzZXR0bGVkIG9uLCBhbmQgdGhlIHBsdWdpbiB0aGF0IG93bnMgaXRcbiAqIGZvciBtb3N0IHZhdWx0cyBpcyBbYGZvbGRlci1ub3Rlc2BdKGh0dHBzOi8vZ2l0aHViLmNvbS9Mb3N0UGF1bC9vYnNpZGlhbi1mb2xkZXItbm90ZXMpLiBTbyB0aGUgYW5zd2VyIHRvXG4gKiBcIndoaWNoIG5vdGUgYmVsb25ncyB0byB0aGlzIGZvbGRlclwiIGlzIHRoYXQgcGx1Z2luJ3MgdG8gZ2l2ZSB3aGVuZXZlciBpdCBpcyBpbnN0YWxsZWQsIGFuZCB0aGlzIG1vZHVsZVxuICogYXNrcyBpdCByYXRoZXIgdGhhbiBpbnZlbnRpbmcgYSBzZWNvbmQgYW5zd2VyOiB7QGxpbmsgRm9sZGVyTm90ZUxvY2F0aW9uLkF1dG99IFx1MjAxNCB0aGUgZGVmYXVsdCBcdTIwMTQgcmVhZHMgaXRzXG4gKiBsaXZlIGNvbmZpZ3VyYXRpb24gYXQgZXZlcnkgdXNlLlxuICpcbiAqIFJlYWRpbmcgaXQgbGl2ZSByYXRoZXIgdGhhbiBjb3B5aW5nIGl0cyB2YWx1ZXMgaW50byBhIGNvbnN1bWVyJ3Mgb3duIHNldHRpbmdzIGlzIGRlbGliZXJhdGU6IGEgY29weSBnb2VzXG4gKiBzdGFsZSB0aGUgbW9tZW50IHRoYXQgcGx1Z2luIGlzIHJlY29uZmlndXJlZCwgYW5kIGl0IHdvdWxkIG5lZWQgYSBzZXR0aW5ncyBtaWdyYXRpb24gdG8gc2VlZC4gRXZlcnl0aGluZ1xuICogZWxzZSBpcyB0aGUgY2FsbGVyJ3MgZXhwbGljaXQgY2hvaWNlLCBhbmQgdGhlbiB0aGUgb3RoZXIgcGx1Z2luIGlzIG5vdCBjb25zdWx0ZWQgYXQgYWxsLlxuICpcbiAqIE5vdGhpbmcgaGVyZSBldmVyIENSRUFURVMgYSBub3RlLiBBIGZvbGRlciB3aXRoIG5vIGZvbGRlciBub3RlIGFuc3dlcnMgYG51bGxgLCB3aGljaCBpcyB3aGF0IGxldHMgYVxuICogY2FsbGVyIGxheWVyIGZvbGRlci1ub3RlIGJlaGF2aW9yIG9udG8gYSBjbGljayB3aXRob3V0IHJpc2tpbmcgYSBmaWxlIGFwcGVhcmluZyBvbiB0aGUgdXNlcidzIGRpc2suXG4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBBcHAsXG4gIFRGaWxlLFxuICBURm9sZGVyXG59IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHsgbm9ybWFsaXplUGF0aCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHsgam9pbiB9IGZyb20gJy4uL3BhdGgudHMnO1xuaW1wb3J0IHsgcmVwbGFjZUFsbCB9IGZyb20gJy4uL3N0cmluZy50cyc7XG5pbXBvcnQgeyBNQVJLRE9XTl9GSUxFX0VYVEVOU0lPTiB9IGZyb20gJy4vZmlsZS1zeXN0ZW0udHMnO1xuXG4vKipcbiAqIFdoZXJlIGEgZm9sZGVyJ3MgZm9sZGVyIG5vdGUgbGl2ZXMuXG4gKlxuICogVGhlIHRocmVlIGNvbmNyZXRlIG1lbWJlcnMgYXJlIHRoZSBzaGFwZXMgdGhlIGZvbGRlci1ub3RlIGVjb3N5c3RlbSBhY3R1YWxseSB1c2VzOlxuICogYGNoYXJsaWUvY2hhcmxpZS5tZGAgYW5kIGBjaGFybGllL2luZGV4Lm1kYCBhcmUgYm90aCB7QGxpbmsgRm9sZGVyTm90ZUxvY2F0aW9uLkluc2lkZUZvbGRlcn0gKHRoZXlcbiAqIGRpZmZlciBvbmx5IGluIHRoZSBOQU1FLCB3aGljaCBpcyB3aHkgbmFtaW5nIGlzIGEgY2FsbGJhY2sgYW5kIG5vdCBhIGZvdXJ0aCBtZW1iZXIpLCB3aGlsZVxuICogYGNoYXJsaWUubWRgIGJlc2lkZSB0aGUgZm9sZGVyIGlzIHtAbGluayBGb2xkZXJOb3RlTG9jYXRpb24uUGFyZW50Rm9sZGVyfSBcdTIwMTQgd2hvc2Ugd2hvbGUgcG9pbnQgaXMgdGhhdFxuICogYFtbYWxwaGEvYnJhdm8vY2hhcmxpZV1dYCBsaW5rcyB0byBhIGZvbGRlciB3aXRoIG5vIHNwZWNpYWwgc3ludGF4LlxuICovXG5leHBvcnQgZW51bSBGb2xkZXJOb3RlTG9jYXRpb24ge1xuICAvKipcbiAgICogVGFrZSB0aGUgYW5zd2VyIGZyb20gdGhlIGluc3RhbGxlZCBgZm9sZGVyLW5vdGVzYCBwbHVnaW4sIGZhbGxpbmcgYmFjayB0byBhIG5vdGUgbmFtZWQgYWZ0ZXIgaXRzXG4gICAqIGZvbGRlciwgaW5zaWRlIGl0LiBUaGUgZGVmYXVsdCwgYW5kIHJlc29sdmVkIExJVkUgcmF0aGVyIHRoYW4gY29waWVkLlxuICAgKi9cbiAgQXV0byA9ICdBdXRvJyxcblxuICAvKipcbiAgICogYGFscGhhL2JyYXZvL2NoYXJsaWUvPG5hbWU+Lm1kYC5cbiAgICovXG4gIEluc2lkZUZvbGRlciA9ICdJbnNpZGVGb2xkZXInLFxuXG4gIC8qKlxuICAgKiBUaGUgdmF1bHQgaGFzIG5vIGZvbGRlciBub3RlcyBhdCBhbGwsIHNvIGV2ZXJ5IGZvbGRlciBhbnN3ZXJzIGBudWxsYC4gVGhpcyBpcyBhbHNvIGhvdyBhIGNhbGxlciBvcHRzXG4gICAqIG91dCBvZiBmb2xkZXItbm90ZSBiZWhhdmlvciBlbnRpcmVseS5cbiAgICovXG4gIE5vbmUgPSAnTm9uZScsXG5cbiAgLyoqXG4gICAqIGBhbHBoYS9icmF2by88bmFtZT4ubWRgLCBiZXNpZGUgdGhlIGZvbGRlci5cbiAgICovXG4gIFBhcmVudEZvbGRlciA9ICdQYXJlbnRGb2xkZXInXG59XG5cbi8qKlxuICogQSBmb2xkZXItbm90ZSBzZXR1cCB3aXRoIHtAbGluayBGb2xkZXJOb3RlTG9jYXRpb24uQXV0b30gYWxyZWFkeSByZXNvbHZlZCB0byBhIGNvbmNyZXRlIGFuc3dlci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGb2xkZXJOb3RlQ29uZmlnIHtcbiAgLyoqXG4gICAqIFRoZSBleHRlbnNpb25zIGEgZm9sZGVyIG5vdGUgbWF5IGNhcnJ5LCBXSVRIT1VUIHRoZSBsZWFkaW5nIGRvdCwgaW4gcmVzb2x1dGlvbiBvcmRlciBcdTIwMTQgdGhlIGZpcnN0IG9uZVxuICAgKiB0aGF0IG5hbWVzIGFuIGV4aXN0aW5nIGZpbGUgd2lucy5cbiAgICovXG4gIHJlYWRvbmx5IGV4dGVuc2lvbnM6IHJlYWRvbmx5IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBmb2xkZXIgbm90ZSBpcyBoaWRkZW4gaW4gdGhlIGZpbGUgZXhwbG9yZXIuXG4gICAqXG4gICAqIFJlYWQgcmF0aGVyIHRoYW4gYWN0ZWQgdXBvbiBoZXJlOiBpdCBjaGFuZ2VzIG5vdGhpbmcgYWJvdXQgV0hJQ0ggZmlsZSBpcyB0aGUgZm9sZGVyIG5vdGUsIGJ1dCBhIGNhbGxlclxuICAgKiB0aGF0IHJldmVhbHMgdGhlIG5vdGUgaGFzIHRvIGtub3cgdGhlcmUgaXMgbm90aGluZyB0byByZXZlYWwgYW5kIGZhbGwgYmFjayB0byByZXZlYWxpbmcgdGhlIGZvbGRlci5cbiAgICovXG4gIHJlYWRvbmx5IGlzSGlkZGVuOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGVyZSB0aGUgbm90ZSBzaXRzIHJlbGF0aXZlIHRvIGl0cyBmb2xkZXIuXG4gICAqL1xuICByZWFkb25seSBsb2NhdGlvbjogRm9sZGVyTm90ZUxvY2F0aW9uLkluc2lkZUZvbGRlciB8IEZvbGRlck5vdGVMb2NhdGlvbi5Ob25lIHwgRm9sZGVyTm90ZUxvY2F0aW9uLlBhcmVudEZvbGRlcjtcblxuICAvKipcbiAgICogTmFtZXMgdGhlIGZvbGRlciBub3RlIG9mIGEgZm9sZGVyLCBXSVRIT1VUIGl0cyBleHRlbnNpb24uXG4gICAqXG4gICAqIEBwYXJhbSBmb2xkZXIgLSBUaGUgZm9sZGVyIHdob3NlIG5vdGUgaXMgYmVpbmcgbmFtZWQuXG4gICAqIEByZXR1cm5zIFRoZSBub3RlJ3MgbmFtZTsgYW4gZW1wdHkgKG9yIGJsYW5rKSBuYW1lIG1lYW5zIHRoZSBmb2xkZXIgaGFzIG5vIGZvbGRlciBub3RlLlxuICAgKi9cbiAgLy8gYHRoaXM6IHZvaWRgIGJlY2F1c2UgaXQgaXMgYSBzdGFuZGFsb25lIGNhbGxiYWNrLCBuZXZlciBhIG1ldGhvZCBvZiB0aGUgY29uZmlnIFx1MjAxNCB3aGljaCBpcyBhbHNvIHdoYXRcbiAgLy8gTGV0cyBpdCBiZSBkZXN0cnVjdHVyZWQgYW5kIGhhbmRlZCBvbiB3aXRob3V0IHRyaXBwaW5nIGB1bmJvdW5kLW1ldGhvZGAuXG4gIHJlc29sdmVOYW1lKHRoaXM6IHZvaWQsIGZvbGRlcjogVEZvbGRlcik6IHN0cmluZztcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgcmVzb2x2ZUZvbGRlck5vdGVDb25maWd9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc29sdmVGb2xkZXJOb3RlQ29uZmlnUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gICAqL1xuICByZWFkb25seSBhcHA6IEFwcDtcblxuICAvKipcbiAgICogVGhlIGV4dGVuc2lvbnMgYSBmb2xkZXIgbm90ZSBtYXkgY2FycnksIHdpdGggb3Igd2l0aG91dCB0aGUgbGVhZGluZyBkb3QsIGluIHJlc29sdXRpb24gb3JkZXIuIElnbm9yZWRcbiAgICogdW5kZXIge0BsaW5rIEZvbGRlck5vdGVMb2NhdGlvbi5BdXRvfSwgd2hpY2ggdGFrZXMgdGhlIGluc3RhbGxlZCBwbHVnaW4ncyBhbnN3ZXIgd2hvbGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBbJ21kJ11gXG4gICAqL1xuICByZWFkb25seSBleHRlbnNpb25zPzogcmVhZG9ubHkgc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGZvbGRlciBub3RlIGlzIGhpZGRlbiBpbiB0aGUgZmlsZSBleHBsb3Jlci4gSWdub3JlZCB1bmRlciB7QGxpbmsgRm9sZGVyTm90ZUxvY2F0aW9uLkF1dG99LlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICByZWFkb25seSBpc0hpZGRlbj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXJlIHRoZSBub3RlIHNpdHMgcmVsYXRpdmUgdG8gaXRzIGZvbGRlci5cbiAgICpcbiAgICogQGRlZmF1bHQge0BsaW5rIEZvbGRlck5vdGVMb2NhdGlvbi5BdXRvfVxuICAgKi9cbiAgcmVhZG9ubHkgbG9jYXRpb24/OiBGb2xkZXJOb3RlTG9jYXRpb247XG5cbiAgLyoqXG4gICAqIE5hbWVzIHRoZSBmb2xkZXIgbm90ZSBvZiBhIGZvbGRlciwgV0lUSE9VVCBpdHMgZXh0ZW5zaW9uLiBJZ25vcmVkIHVuZGVyXG4gICAqIHtAbGluayBGb2xkZXJOb3RlTG9jYXRpb24uQXV0b30sIHdoaWNoIG5hbWVzIHRoZSBub3RlIHRoZSB3YXkgdGhlIGluc3RhbGxlZCBwbHVnaW4gZG9lcy5cbiAgICpcbiAgICogQSBjYWxsYmFjayByYXRoZXIgdGhhbiBhIG5hbWUgdGVtcGxhdGUsIGJlY2F1c2UgYSB0ZW1wbGF0ZSBuZWVkcyBhIHRva2VuIHZvY2FidWxhcnkgYW5kIHRoaXMgbGlicmFyeVxuICAgKiBoYXMgbm9uZSB0byBpbXBvc2UgXHUyMDE0IGEgY2FsbGVyIHRoYXQgaGFzIG9uZSAoYHt7Zm9sZGVyTmFtZX19YCwgYHt7Zm9sZGVyUGF0aH19YCwgXHUyMDI2KSByZW5kZXJzIGl0IGhlcmUuXG4gICAqXG4gICAqIEBwYXJhbSBmb2xkZXIgLSBUaGUgZm9sZGVyIHdob3NlIG5vdGUgaXMgYmVpbmcgbmFtZWQuXG4gICAqIEByZXR1cm5zIFRoZSBub3RlJ3MgbmFtZS5cbiAgICogQGRlZmF1bHQgYChmb2xkZXIpID0+IGZvbGRlci5uYW1lYFxuICAgKi9cbiAgLy8gU2VlIHtAbGluayBGb2xkZXJOb3RlQ29uZmlnLnJlc29sdmVOYW1lfSBmb3Igd2h5IGB0aGlzOiB2b2lkYC5cbiAgcmVzb2x2ZU5hbWU/KHRoaXM6IHZvaWQsIGZvbGRlcjogVEZvbGRlcik6IHN0cmluZztcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgcmVzb2x2ZUZvbGRlck5vdGV9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc29sdmVGb2xkZXJOb3RlUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gICAqL1xuICByZWFkb25seSBhcHA6IEFwcDtcblxuICAvKipcbiAgICogVGhlIGFscmVhZHktcmVzb2x2ZWQgc2V0dXAgdG8gdXNlLlxuICAgKlxuICAgKiBPbWl0dGVkIG1lYW5zIHtAbGluayBGb2xkZXJOb3RlTG9jYXRpb24uQXV0b30gXHUyMDE0IHRoZSBzZXR1cCBpcyByZXNvbHZlZCBvbiB0aGUgc3BvdCwgd2hpY2ggaXMgd2hhdCBtYWtlc1xuICAgKiBgcmVzb2x2ZUZvbGRlck5vdGUoeyBhcHAsIGZvbGRlciB9KWAgdGhlIG9uZS1saW5lciBldmVyeSBjYWxsZXIgd2FudHMuIFBhc3Mgb25lIHdoZW4gdGhlIHNhbWUgc2V0dXAgaXNcbiAgICogdXNlZCBtb3JlIHRoYW4gb25jZSwgb3Igd2hlbiBpdHMge0BsaW5rIEZvbGRlck5vdGVDb25maWcuaXNIaWRkZW59IGlzIG5lZWRlZCBhbG9uZ3NpZGUgdGhlIG5vdGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IGByZXNvbHZlRm9sZGVyTm90ZUNvbmZpZyh7IGFwcCB9KWBcbiAgICovXG4gIHJlYWRvbmx5IGNvbmZpZz86IEZvbGRlck5vdGVDb25maWc7XG5cbiAgLyoqXG4gICAqIFRoZSBmb2xkZXIgd2hvc2UgZm9sZGVyIG5vdGUgaXMgd2FudGVkLiBSZWFkIEFGVEVSIGFueSByZW5hbWU6IHRoZSBub3RlIGlzIG5hbWVkIGZyb20gdGhlIGZvbGRlcidzXG4gICAqIENVUlJFTlQgbmFtZSwgYW5kIGEgYGZvbGRlci1ub3Rlc2AgaW5zdGFsbCB3aXRoIGBzeW5jRm9sZGVyTmFtZWAgb24gd2lsbCBoYXZlIHJlbmFtZWQgaXQgYWxyZWFkeS5cbiAgICovXG4gIHJlYWRvbmx5IGZvbGRlcjogVEZvbGRlcjtcbn1cblxuLyoqXG4gKiBUaGUgYGZvbGRlci1ub3Rlc2AgcGx1Z2luJ3MgaWQsIGFzIGl0cyBtYW5pZmVzdCBkZWNsYXJlcyBpdC5cbiAqL1xuZXhwb3J0IGNvbnN0IEZPTERFUl9OT1RFU19QTFVHSU5fSUQgPSAnZm9sZGVyLW5vdGVzJztcblxuLyoqXG4gKiBUaGUgb25lIHRva2VuIGBmb2xkZXItbm90ZXNgJyBvd24gbmFtZSB0ZW1wbGF0ZSB1bmRlcnN0YW5kcy4gRXZlcnkgb3RoZXIgY2hhcmFjdGVyIGluIHRoYXQgdGVtcGxhdGUgaXNcbiAqIGEgbGl0ZXJhbCwgc28gdHJhbnNsYXRpbmcgdGhpcyB0b2tlbiBpcyB0aGUgd2hvbGUgb2YgdGhlIHRyYW5zbGF0aW9uLlxuICovXG5jb25zdCBGT0xERVJfTk9URVNfRk9MREVSX05BTUVfVE9LRU5fUkVHX0VYUCA9IC9cXHtcXHtmb2xkZXJfbmFtZVxcfVxcfS9naTtcblxuLyoqXG4gKiBgZm9sZGVyLW5vdGVzYCBvZmZlcnMgRXhjYWxpZHJhdyBmb2xkZXIgbm90ZXMsIHdoaWNoIGFyZSBNYXJrZG93biBmaWxlcyB3aXRoIGFuIEV4Y2FsaWRyYXcgcGF5bG9hZCBcdTIwMTQgaXRzXG4gKiBvd24gcmVzb2x2ZXIgbm9ybWFsaXplcyB0aGUgdHlwZSB0aGUgc2FtZSB3YXkgYmVmb3JlIGxvb2tpbmcgdGhlIGZpbGUgdXAuXG4gKi9cbmNvbnN0IEVYQ0FMSURSQVdfRklMRV9FWFRFTlNJT04gPSAnZXhjYWxpZHJhdyc7XG5cbi8qKlxuICogV2hhdCB7QGxpbmsgRm9sZGVyTm90ZUxvY2F0aW9uLkF1dG99IGZhbGxzIGJhY2sgdG86IHRoZSBsYXlvdXQgZXZlcnkgZm9sZGVyLW5vdGUgcGx1Z2luIHN1cHBvcnRzLCBhbmRcbiAqIHRoZSBvbmUgYGZvbGRlci1ub3Rlc2AgaXRzZWxmIHNoaXBzIGFzIGl0cyBkZWZhdWx0LiBOb3RoaW5nIGhpZGVzIGEgbm90ZSB3aGVuIG5vIHBsdWdpbiBpcyB0aGVyZSB0byBoaWRlXG4gKiBpdCwgc28ge0BsaW5rIEZvbGRlck5vdGVDb25maWcuaXNIaWRkZW59IGlzIGBmYWxzZWAuXG4gKi9cbmNvbnN0IEZBTExCQUNLX0ZPTERFUl9OT1RFX0NPTkZJRzogRm9sZGVyTm90ZUNvbmZpZyA9IHtcbiAgZXh0ZW5zaW9uczogW01BUktET1dOX0ZJTEVfRVhURU5TSU9OXSxcbiAgaXNIaWRkZW46IGZhbHNlLFxuICBsb2NhdGlvbjogRm9sZGVyTm90ZUxvY2F0aW9uLkluc2lkZUZvbGRlcixcbiAgcmVzb2x2ZU5hbWU6IChmb2xkZXI6IFRGb2xkZXIpOiBzdHJpbmcgPT4gZm9sZGVyLm5hbWVcbn07XG5cbi8qKlxuICogRmluZHMgYSBmb2xkZXIncyBmb2xkZXIgbm90ZSBcdTIwMTQgdGhlIG9uZSBub3RlIHdob3NlIHByb3BlcnRpZXMgZGVzY3JpYmUgdGhlIGZvbGRlciBpdHNlbGYuXG4gKlxuICogKipOZXZlciBjcmVhdGVzLioqIEEgZm9sZGVyIHRoYXQgaGFzIG5vIGZvbGRlciBub3RlIGFuc3dlcnMgYG51bGxgLCBhbmQgc28gZG9lcyB0aGUgdmF1bHQgcm9vdCB1bmRlclxuICoge0BsaW5rIEZvbGRlck5vdGVMb2NhdGlvbi5QYXJlbnRGb2xkZXJ9IChub3RoaW5nIGNhbiBzaXQgYmVzaWRlIGl0KS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIGZvbGRlciwgYW5kIG9wdGlvbmFsbHkgdGhlIHNldHVwIHRvIHJlc29sdmUgaXQgd2l0aC5cbiAqIEByZXR1cm5zIFRoZSBmb2xkZXIgbm90ZSwgb3IgYG51bGxgIHdoZW4gdGhlcmUgaXMgbm9uZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVGb2xkZXJOb3RlKHBhcmFtczogUmVzb2x2ZUZvbGRlck5vdGVQYXJhbXMpOiBudWxsIHwgVEZpbGUge1xuICBjb25zdCB7IGFwcCwgZm9sZGVyIH0gPSBwYXJhbXM7XG4gIGNvbnN0IGNvbmZpZyA9IHBhcmFtcy5jb25maWcgPz8gcmVzb2x2ZUZvbGRlck5vdGVDb25maWcoeyBhcHAgfSk7XG4gIGlmIChjb25maWcubG9jYXRpb24gPT09IEZvbGRlck5vdGVMb2NhdGlvbi5Ob25lKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBwYXJlbnRGb2xkZXJQYXRoID0gY29uZmlnLmxvY2F0aW9uID09PSBGb2xkZXJOb3RlTG9jYXRpb24uUGFyZW50Rm9sZGVyID8gZm9sZGVyLnBhcmVudD8ucGF0aCA6IGZvbGRlci5wYXRoO1xuICBpZiAocGFyZW50Rm9sZGVyUGF0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBub3RlTmFtZSA9IGNvbmZpZy5yZXNvbHZlTmFtZShmb2xkZXIpLnRyaW0oKTtcbiAgaWYgKCFub3RlTmFtZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZm9yIChjb25zdCBleHRlbnNpb24gb2YgY29uZmlnLmV4dGVuc2lvbnMpIHtcbiAgICBjb25zdCBmaWxlID0gYXBwLnZhdWx0LmdldEZpbGVCeVBhdGgobm9ybWFsaXplUGF0aChqb2luKHBhcmVudEZvbGRlclBhdGgsIGAke25vdGVOYW1lfS4ke2V4dGVuc2lvbn1gKSkpO1xuICAgIGlmIChmaWxlKSB7XG4gICAgICByZXR1cm4gZmlsZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBSZXNvbHZlcyB7QGxpbmsgRm9sZGVyTm90ZUxvY2F0aW9uLkF1dG99IGludG8gYSBjb25jcmV0ZSBmb2xkZXItbm90ZSBzZXR1cC5cbiAqXG4gKiBgZm9sZGVyLW5vdGVzYCcgYHZhdWx0Rm9sZGVyYCBzdG9yYWdlIChldmVyeSBmb2xkZXIgbm90ZSBwb29sZWQgaW4gb25lIGNlbnRyYWwgZm9sZGVyKSBoYXMgbm9cbiAqIGNvdW50ZXJwYXJ0IGhlcmUgYW5kIGZhbGxzIGJhY2sgcmF0aGVyIHRoYW4gZ3Vlc3Npbmc6IHdpdGggdGhlIG5vdGVzIHBvb2xlZCwgdGhlIG5vdGUgYmVsb25naW5nIHRvIGFcbiAqIGZvbGRlciBpcyBubyBsb25nZXIgZGVyaXZhYmxlIGZyb20gdGhhdCBmb2xkZXIncyBwYXRoIGFsb25lLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgc2V0dXAsIGFuZCB0aGUgYXBwIHRvIHJlYWQgdGhlIGluc3RhbGxlZCBwbHVnaW4gZnJvbS5cbiAqIEByZXR1cm5zIFRoZSByZXNvbHZlZCBzZXR1cC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVGb2xkZXJOb3RlQ29uZmlnKHBhcmFtczogUmVzb2x2ZUZvbGRlck5vdGVDb25maWdQYXJhbXMpOiBGb2xkZXJOb3RlQ29uZmlnIHtcbiAgY29uc3Qge1xuICAgIGFwcCxcbiAgICBleHRlbnNpb25zLFxuICAgIGlzSGlkZGVuLFxuICAgIGxvY2F0aW9uLFxuICAgIHJlc29sdmVOYW1lXG4gIH0gPSBwYXJhbXM7XG5cbiAgaWYgKGxvY2F0aW9uICE9PSB1bmRlZmluZWQgJiYgbG9jYXRpb24gIT09IEZvbGRlck5vdGVMb2NhdGlvbi5BdXRvKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGV4dGVuc2lvbnM6IG5vcm1hbGl6ZUV4dGVuc2lvbnMoZXh0ZW5zaW9ucyA/PyBbTUFSS0RPV05fRklMRV9FWFRFTlNJT05dKSxcbiAgICAgIGlzSGlkZGVuOiBpc0hpZGRlbiA/PyBmYWxzZSxcbiAgICAgIGxvY2F0aW9uLFxuICAgICAgcmVzb2x2ZU5hbWU6IHJlc29sdmVOYW1lID8/IEZBTExCQUNLX0ZPTERFUl9OT1RFX0NPTkZJRy5yZXNvbHZlTmFtZVxuICAgIH07XG4gIH1cblxuICByZXR1cm4gcmVhZEZvbGRlck5vdGVzUGx1Z2luQ29uZmlnKGFwcCkgPz8gRkFMTEJBQ0tfRk9MREVSX05PVEVfQ09ORklHO1xufVxuXG4vKipcbiAqIE5vcm1hbGl6ZXMgZXh0ZW5zaW9ucyB0aGUgd2F5IGBmb2xkZXItbm90ZXNgIGRvZXMgYmVmb3JlIGl0IGxvb2tzIGEgZmlsZSB1cDogbm8gbGVhZGluZyBkb3QsIGxvd2VyLWNhc2UsXG4gKiBFeGNhbGlkcmF3IHRyZWF0ZWQgYXMgTWFya2Rvd24sIGJsYW5rcyBkcm9wcGVkLCBkdXBsaWNhdGVzIGNvbGxhcHNlZCB3aGlsZSBrZWVwaW5nIHRoZSBmaXJzdCBvY2N1cnJlbmNlJ3NcbiAqIHBvc2l0aW9uLlxuICpcbiAqIEBwYXJhbSBleHRlbnNpb25zIC0gVGhlIGV4dGVuc2lvbnMgYXMgY29uZmlndXJlZC5cbiAqIEByZXR1cm5zIFRoZSBub3JtYWxpemVkIGV4dGVuc2lvbnMsIGluIHJlc29sdXRpb24gb3JkZXIuXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZUV4dGVuc2lvbnMoZXh0ZW5zaW9uczogcmVhZG9ubHkgc3RyaW5nW10pOiByZWFkb25seSBzdHJpbmdbXSB7XG4gIGNvbnN0IG5vcm1hbGl6ZWRFeHRlbnNpb25zID0gZXh0ZW5zaW9uc1xuICAgIC5tYXAoKGV4dGVuc2lvbikgPT4gZXh0ZW5zaW9uLnRyaW0oKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL15cXC4vLCAnJykpXG4gICAgLm1hcCgoZXh0ZW5zaW9uKSA9PiBleHRlbnNpb24gPT09IEVYQ0FMSURSQVdfRklMRV9FWFRFTlNJT04gPyBNQVJLRE9XTl9GSUxFX0VYVEVOU0lPTiA6IGV4dGVuc2lvbilcbiAgICAuZmlsdGVyKEJvb2xlYW4pO1xuICByZXR1cm4gWy4uLm5ldyBTZXQobm9ybWFsaXplZEV4dGVuc2lvbnMpXTtcbn1cblxuLyoqXG4gKiBSZWFkcyB0aGUgaW5zdGFsbGVkIGBmb2xkZXItbm90ZXNgIHBsdWdpbidzIG93biBjb25maWd1cmF0aW9uLCBpZiBpdCBpcyBpbnN0YWxsZWQgYW5kIGNvbmZpZ3VyZWQgdGhlIHdheVxuICogaXQgZG9jdW1lbnRzLlxuICpcbiAqIEV2ZXJ5IHZhbHVlIGlzIHJlYWQgYXMgYHVua25vd25gIGFuZCBjaGVja2VkLCByYXRoZXIgdGhhbiBhc3NlcnRlZCBpbnRvIGEgc2hhcGU6IHRoaXMgaXMgYW5vdGhlclxuICogcGx1Z2luJ3MgcHJpdmF0ZSBzZXR0aW5ncyBvYmplY3QsIHNvIGEgdmVyc2lvbiB0aGF0IHJlbmFtZXMgb3IgZHJvcHMgYSBrZXkgbXVzdCBkZWdyYWRlIHRvIHRoZSBmYWxsYmFja1xuICogaW5zdGVhZCBvZiB0aHJvd2luZyBpbnNpZGUgYSBjbGljayBoYW5kbGVyLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gYXBwbGljYXRpb24gaW5zdGFuY2UuXG4gKiBAcmV0dXJucyBUaGUgY29uZmlndXJhdGlvbiwgb3IgYG51bGxgIHdoZW4gdGhlIHBsdWdpbiBpcyBhYnNlbnQsIG5vdCBjb25maWd1cmVkLCBvciBzZXQgdG8gYSBzdG9yYWdlXG4gKiBsb2NhdGlvbiB3aXRoIG5vIGNvdW50ZXJwYXJ0IGhlcmUuXG4gKi9cbmZ1bmN0aW9uIHJlYWRGb2xkZXJOb3Rlc1BsdWdpbkNvbmZpZyhhcHA6IEFwcCk6IEZvbGRlck5vdGVDb25maWcgfCBudWxsIHtcbiAgY29uc3QgZm9sZGVyTm90ZXNQbHVnaW4gPSBhcHAucGx1Z2lucy5nZXRQbHVnaW4oRk9MREVSX05PVEVTX1BMVUdJTl9JRCk7XG4gIC8vIE5hcnJvd2VkIHdpdGggYGluYCByYXRoZXIgdGhhbiBhc3NlcnRlZCBpbnRvIGEgc2hhcGU6IHRoYXQga2VlcHMgZXZlcnkgdmFsdWUgYmVsb3cgdHlwZWQgYHVua25vd25gLFxuICAvLyBXaGljaCBpcyBleGFjdGx5IHdoYXQgYSBmb3JlaWduIHBsdWdpbidzIHByaXZhdGUgc2V0dGluZ3MgYXJlLlxuICBpZiAoIWZvbGRlck5vdGVzUGx1Z2luIHx8ICEoJ3NldHRpbmdzJyBpbiBmb2xkZXJOb3Rlc1BsdWdpbikpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IGZvbGRlck5vdGVzU2V0dGluZ3M6IHVua25vd24gPSBmb2xkZXJOb3Rlc1BsdWdpbi5zZXR0aW5ncztcbiAgaWYgKHR5cGVvZiBmb2xkZXJOb3Rlc1NldHRpbmdzICE9PSAnb2JqZWN0JyB8fCBmb2xkZXJOb3Rlc1NldHRpbmdzID09PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBsb2NhdGlvbiA9IHRvRm9sZGVyTm90ZUxvY2F0aW9uKCdzdG9yYWdlTG9jYXRpb24nIGluIGZvbGRlck5vdGVzU2V0dGluZ3MgPyBmb2xkZXJOb3Rlc1NldHRpbmdzLnN0b3JhZ2VMb2NhdGlvbiA6IG51bGwpO1xuICBpZiAoIWxvY2F0aW9uKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBmb2xkZXJOb3RlTmFtZSA9ICdmb2xkZXJOb3RlTmFtZScgaW4gZm9sZGVyTm90ZXNTZXR0aW5ncyA/IGZvbGRlck5vdGVzU2V0dGluZ3MuZm9sZGVyTm90ZU5hbWUgOiBudWxsO1xuICBpZiAodHlwZW9mIGZvbGRlck5vdGVOYW1lICE9PSAnc3RyaW5nJyB8fCAhZm9sZGVyTm90ZU5hbWUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IGZvbGRlck5vdGVUeXBlID0gJ2ZvbGRlck5vdGVUeXBlJyBpbiBmb2xkZXJOb3Rlc1NldHRpbmdzID8gZm9sZGVyTm90ZXNTZXR0aW5ncy5mb2xkZXJOb3RlVHlwZSA6IG51bGw7XG4gIGNvbnN0IHN1cHBvcnRlZEZpbGVUeXBlcyA9ICdzdXBwb3J0ZWRGaWxlVHlwZXMnIGluIGZvbGRlck5vdGVzU2V0dGluZ3MgPyBmb2xkZXJOb3Rlc1NldHRpbmdzLnN1cHBvcnRlZEZpbGVUeXBlcyA6IG51bGw7XG4gIGNvbnN0IGlzSGlkZGVuID0gJ2hpZGVGb2xkZXJOb3RlJyBpbiBmb2xkZXJOb3Rlc1NldHRpbmdzID8gZm9sZGVyTm90ZXNTZXR0aW5ncy5oaWRlRm9sZGVyTm90ZSA6IG51bGw7XG5cbiAgcmV0dXJuIHtcbiAgICAvLyBJdHMgb3duIHJlc29sdmVyIHRyaWVzIHRoZSBwcmltYXJ5IHR5cGUgZmlyc3QgYW5kIGV2ZXJ5IG90aGVyIHN1cHBvcnRlZCB0eXBlIGFmdGVyIGl0LCB3aGljaCBpcyB0aGVcbiAgICAvLyBPcmRlciByZXByb2R1Y2VkIGhlcmUuIEFuIHVudXNhYmxlIHBhaXIgbGVhdmVzIE1hcmtkb3duLCB0aGUgZXh0ZW5zaW9uIGl0IGNhbm5vdCBiZSBjb25maWd1cmVkXG4gICAgLy8gV2l0aG91dC5cbiAgICBleHRlbnNpb25zOiBub3JtYWxpemVFeHRlbnNpb25zKFtcbiAgICAgIHR5cGVvZiBmb2xkZXJOb3RlVHlwZSA9PT0gJ3N0cmluZycgPyBmb2xkZXJOb3RlVHlwZSA6IE1BUktET1dOX0ZJTEVfRVhURU5TSU9OLFxuICAgICAgLi4uKEFycmF5LmlzQXJyYXkoc3VwcG9ydGVkRmlsZVR5cGVzKSA/IHN1cHBvcnRlZEZpbGVUeXBlcy5maWx0ZXIoKHR5cGU6IHVua25vd24pID0+IHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJykgOiBbXSksXG4gICAgICBNQVJLRE9XTl9GSUxFX0VYVEVOU0lPTlxuICAgIF0pLFxuICAgIGlzSGlkZGVuOiBpc0hpZGRlbiA9PT0gdHJ1ZSxcbiAgICBsb2NhdGlvbixcbiAgICByZXNvbHZlTmFtZTogKGZvbGRlcjogVEZvbGRlcik6IHN0cmluZyA9PlxuICAgICAgcmVwbGFjZUFsbCh7XG4gICAgICAgICRzdHJpbmc6IGZvbGRlck5vdGVOYW1lLFxuICAgICAgICAvLyBBIGZ1bmN0aW9uIHJlcGxhY2VyLCBzbyBhIGZvbGRlciBuYW1lIGNvbnRhaW5pbmcgYCQmYCBpcyBpbnNlcnRlZCBsaXRlcmFsbHkuXG4gICAgICAgIHJlcGxhY2VyOiAoKSA9PiBmb2xkZXIubmFtZSxcbiAgICAgICAgc2VhcmNoVmFsdWU6IEZPTERFUl9OT1RFU19GT0xERVJfTkFNRV9UT0tFTl9SRUdfRVhQXG4gICAgICB9KVxuICB9O1xufVxuXG4vKipcbiAqIE1hcHMgYGZvbGRlci1ub3Rlc2AnIGBzdG9yYWdlTG9jYXRpb25gIG9udG8gdGhpcyBsaWJyYXJ5J3Mgb3duIGxvY2F0aW9uLlxuICpcbiAqIEBwYXJhbSBzdG9yYWdlTG9jYXRpb24gLSBUaGUgdmFsdWUgcmVhZCBvdXQgb2YgdGhhdCBwbHVnaW4ncyBzZXR0aW5ncy5cbiAqIEByZXR1cm5zIFRoZSBsb2NhdGlvbiwgb3IgYG51bGxgIGZvciBgdmF1bHRGb2xkZXJgIGFuZCBmb3IgYW55dGhpbmcgdGhhdCBpcyBub3Qgb25lIG9mIGl0cyB2YWx1ZXMuXG4gKi9cbmZ1bmN0aW9uIHRvRm9sZGVyTm90ZUxvY2F0aW9uKHN0b3JhZ2VMb2NhdGlvbjogdW5rbm93bik6IEZvbGRlck5vdGVDb25maWdbJ2xvY2F0aW9uJ10gfCBudWxsIHtcbiAgc3dpdGNoIChzdG9yYWdlTG9jYXRpb24pIHtcbiAgICBjYXNlICdpbnNpZGVGb2xkZXInOiB7XG4gICAgICByZXR1cm4gRm9sZGVyTm90ZUxvY2F0aW9uLkluc2lkZUZvbGRlcjtcbiAgICB9XG4gICAgY2FzZSAncGFyZW50Rm9sZGVyJzoge1xuICAgICAgcmV0dXJuIEZvbGRlck5vdGVMb2NhdGlvbi5QYXJlbnRGb2xkZXI7XG4gICAgfVxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUF5QkEsU0FBUyxxQkFBcUI7QUFFOUIsU0FBUyxZQUFZO0FBQ3JCLFNBQVMsa0JBQWtCO0FBQzNCLFNBQVMsK0JBQStCO0FBV2pDLElBQUsscUJBQUwsa0JBQUtBLHdCQUFMO0FBS0wsRUFBQUEsb0JBQUEsVUFBTztBQUtQLEVBQUFBLG9CQUFBLGtCQUFlO0FBTWYsRUFBQUEsb0JBQUEsVUFBTztBQUtQLEVBQUFBLG9CQUFBLGtCQUFlO0FBckJMLFNBQUFBO0FBQUEsR0FBQTtBQXNJTCxNQUFNLHlCQUF5QjtBQU10QyxNQUFNLHlDQUF5QztBQU0vQyxNQUFNLDRCQUE0QjtBQU9sQyxNQUFNLDhCQUFnRDtBQUFBLEVBQ3BELFlBQVksQ0FBQyx1QkFBdUI7QUFBQSxFQUNwQyxVQUFVO0FBQUEsRUFDVixVQUFVO0FBQUEsRUFDVixhQUFhLENBQUMsV0FBNEIsT0FBTztBQUNuRDtBQVdPLFNBQVMsa0JBQWtCLFFBQStDO0FBQy9FLFFBQU0sRUFBRSxLQUFLLE9BQU8sSUFBSTtBQUN4QixRQUFNLFNBQVMsT0FBTyxVQUFVLHdCQUF3QixFQUFFLElBQUksQ0FBQztBQUMvRCxNQUFJLE9BQU8sYUFBYSxtQkFBeUI7QUFDL0MsV0FBTztBQUFBLEVBQ1Q7QUFFQSxRQUFNLG1CQUFtQixPQUFPLGFBQWEsb0NBQWtDLE9BQU8sUUFBUSxPQUFPLE9BQU87QUFDNUcsTUFBSSxxQkFBcUIsUUFBVztBQUNsQyxXQUFPO0FBQUEsRUFDVDtBQUVBLFFBQU0sV0FBVyxPQUFPLFlBQVksTUFBTSxFQUFFLEtBQUs7QUFDakQsTUFBSSxDQUFDLFVBQVU7QUFDYixXQUFPO0FBQUEsRUFDVDtBQUVBLGFBQVcsYUFBYSxPQUFPLFlBQVk7QUFDekMsVUFBTSxPQUFPLElBQUksTUFBTSxjQUFjLGNBQWMsS0FBSyxrQkFBa0IsR0FBRyxRQUFRLElBQUksU0FBUyxFQUFFLENBQUMsQ0FBQztBQUN0RyxRQUFJLE1BQU07QUFDUixhQUFPO0FBQUEsSUFDVDtBQUFBLEVBQ0Y7QUFFQSxTQUFPO0FBQ1Q7QUFZTyxTQUFTLHdCQUF3QixRQUF5RDtBQUMvRixRQUFNO0FBQUEsSUFDSjtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxFQUNGLElBQUk7QUFFSixNQUFJLGFBQWEsVUFBYSxhQUFhLG1CQUF5QjtBQUNsRSxXQUFPO0FBQUEsTUFDTCxZQUFZLG9CQUFvQixjQUFjLENBQUMsdUJBQXVCLENBQUM7QUFBQSxNQUN2RSxVQUFVLFlBQVk7QUFBQSxNQUN0QjtBQUFBLE1BQ0EsYUFBYSxlQUFlLDRCQUE0QjtBQUFBLElBQzFEO0FBQUEsRUFDRjtBQUVBLFNBQU8sNEJBQTRCLEdBQUcsS0FBSztBQUM3QztBQVVBLFNBQVMsb0JBQW9CLFlBQWtEO0FBQzdFLFFBQU0sdUJBQXVCLFdBQzFCLElBQUksQ0FBQyxjQUFjLFVBQVUsS0FBSyxFQUFFLFlBQVksRUFBRSxRQUFRLE9BQU8sRUFBRSxDQUFDLEVBQ3BFLElBQUksQ0FBQyxjQUFjLGNBQWMsNEJBQTRCLDBCQUEwQixTQUFTLEVBQ2hHLE9BQU8sT0FBTztBQUNqQixTQUFPLENBQUMsR0FBRyxJQUFJLElBQUksb0JBQW9CLENBQUM7QUFDMUM7QUFjQSxTQUFTLDRCQUE0QixLQUFtQztBQUN0RSxRQUFNLG9CQUFvQixJQUFJLFFBQVEsVUFBVSxzQkFBc0I7QUFHdEUsTUFBSSxDQUFDLHFCQUFxQixFQUFFLGNBQWMsb0JBQW9CO0FBQzVELFdBQU87QUFBQSxFQUNUO0FBRUEsUUFBTSxzQkFBK0Isa0JBQWtCO0FBQ3ZELE1BQUksT0FBTyx3QkFBd0IsWUFBWSx3QkFBd0IsTUFBTTtBQUMzRSxXQUFPO0FBQUEsRUFDVDtBQUVBLFFBQU0sV0FBVyxxQkFBcUIscUJBQXFCLHNCQUFzQixvQkFBb0Isa0JBQWtCLElBQUk7QUFDM0gsTUFBSSxDQUFDLFVBQVU7QUFDYixXQUFPO0FBQUEsRUFDVDtBQUVBLFFBQU0saUJBQWlCLG9CQUFvQixzQkFBc0Isb0JBQW9CLGlCQUFpQjtBQUN0RyxNQUFJLE9BQU8sbUJBQW1CLFlBQVksQ0FBQyxnQkFBZ0I7QUFDekQsV0FBTztBQUFBLEVBQ1Q7QUFFQSxRQUFNLGlCQUFpQixvQkFBb0Isc0JBQXNCLG9CQUFvQixpQkFBaUI7QUFDdEcsUUFBTSxxQkFBcUIsd0JBQXdCLHNCQUFzQixvQkFBb0IscUJBQXFCO0FBQ2xILFFBQU0sV0FBVyxvQkFBb0Isc0JBQXNCLG9CQUFvQixpQkFBaUI7QUFFaEcsU0FBTztBQUFBO0FBQUE7QUFBQTtBQUFBLElBSUwsWUFBWSxvQkFBb0I7QUFBQSxNQUM5QixPQUFPLG1CQUFtQixXQUFXLGlCQUFpQjtBQUFBLE1BQ3RELEdBQUksTUFBTSxRQUFRLGtCQUFrQixJQUFJLG1CQUFtQixPQUFPLENBQUMsU0FBa0IsT0FBTyxTQUFTLFFBQVEsSUFBSSxDQUFDO0FBQUEsTUFDbEg7QUFBQSxJQUNGLENBQUM7QUFBQSxJQUNELFVBQVUsYUFBYTtBQUFBLElBQ3ZCO0FBQUEsSUFDQSxhQUFhLENBQUMsV0FDWixXQUFXO0FBQUEsTUFDVCxTQUFTO0FBQUE7QUFBQSxNQUVULFVBQVUsTUFBTSxPQUFPO0FBQUEsTUFDdkIsYUFBYTtBQUFBLElBQ2YsQ0FBQztBQUFBLEVBQ0w7QUFDRjtBQVFBLFNBQVMscUJBQXFCLGlCQUErRDtBQUMzRixVQUFRLGlCQUFpQjtBQUFBLElBQ3ZCLEtBQUssZ0JBQWdCO0FBQ25CLGFBQU87QUFBQSxJQUNUO0FBQUEsSUFDQSxLQUFLLGdCQUFnQjtBQUNuQixhQUFPO0FBQUEsSUFDVDtBQUFBLElBQ0EsU0FBUztBQUNQLGFBQU87QUFBQSxJQUNUO0FBQUEsRUFDRjtBQUNGOyIsCiAgIm5hbWVzIjogWyJGb2xkZXJOb3RlTG9jYXRpb24iXQp9Cg==
|
|
@@ -31,6 +31,7 @@ export * as 'extensions-registrar' from './extensions-registrar.mjs';
|
|
|
31
31
|
export * as 'file-change' from './file-change.mjs';
|
|
32
32
|
export * as 'file-manager' from './file-manager.mjs';
|
|
33
33
|
export * as 'file-system' from './file-system.mjs';
|
|
34
|
+
export * as 'folder-note' from './folder-note.mjs';
|
|
34
35
|
export * as 'frontmatter-link-cache-with-offsets' from './frontmatter-link-cache-with-offsets.mjs';
|
|
35
36
|
export * as 'frontmatter' from './frontmatter.mjs';
|
|
36
37
|
export * as 'hover-link-source-registrar' from './hover-link-source-registrar.mjs';
|
|
@@ -53,6 +53,7 @@ import * as extensions_registrar from "./extensions-registrar.mjs";
|
|
|
53
53
|
import * as file_change from "./file-change.mjs";
|
|
54
54
|
import * as file_manager from "./file-manager.mjs";
|
|
55
55
|
import * as file_system from "./file-system.mjs";
|
|
56
|
+
import * as folder_note from "./folder-note.mjs";
|
|
56
57
|
import * as frontmatter_link_cache_with_offsets from "./frontmatter-link-cache-with-offsets.mjs";
|
|
57
58
|
import * as frontmatter from "./frontmatter.mjs";
|
|
58
59
|
import * as hover_link_source_registrar from "./hover-link-source-registrar.mjs";
|
|
@@ -129,6 +130,7 @@ export {
|
|
|
129
130
|
file_change as "file-change",
|
|
130
131
|
file_manager as "file-manager",
|
|
131
132
|
file_system as "file-system",
|
|
133
|
+
folder_note as "folder-note",
|
|
132
134
|
frontmatter,
|
|
133
135
|
frontmatter_link_cache_with_offsets as "frontmatter-link-cache-with-offsets",
|
|
134
136
|
hover_link_source_registrar as "hover-link-source-registrar",
|
|
@@ -173,4 +175,4 @@ export {
|
|
|
173
175
|
view_registrar as "view-registrar",
|
|
174
176
|
workspace
|
|
175
177
|
};
|
|
176
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
178
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKiBUSElTIElTIEEgR0VORVJBVEVEL0JVTkRMRUQgRklMRSBCWSBCVUlMRCBTQ1JJUFQgKi9cblxuZXhwb3J0ICogYXMgJ2FjdGl2ZS1maWxlLXByb3ZpZGVyJyBmcm9tICcuL2FjdGl2ZS1maWxlLXByb3ZpZGVyLnRzJztcbmV4cG9ydCAqIGFzICdhcHAnIGZyb20gJy4vYXBwLnRzJztcbmV4cG9ydCAqIGFzICdhc3luYy13aXRoLW5vdGljZScgZnJvbSAnLi9hc3luYy13aXRoLW5vdGljZS50cyc7XG5leHBvcnQgKiBhcyAnYXR0YWNobWVudC1wYXRoJyBmcm9tICcuL2F0dGFjaG1lbnQtcGF0aC50cyc7XG5leHBvcnQgKiBhcyAnYmFja2xpbmsnIGZyb20gJy4vYmFja2xpbmsudHMnO1xuZXhwb3J0ICogYXMgJ2Jhc2VzLXZpZXctcmVnaXN0cmFyJyBmcm9tICcuL2Jhc2VzLXZpZXctcmVnaXN0cmFyLnRzJztcbmV4cG9ydCAqIGFzICdjYWxsb3V0JyBmcm9tICcuL2NhbGxvdXQudHMnO1xuZXhwb3J0ICogYXMgJ2NhbnZhcycgZnJvbSAnLi9jYW52YXMudHMnO1xuZXhwb3J0ICogYXMgJ2Nhc2UtaW5zZW5zaXRpdmUtZmlsZS1pbmRleCcgZnJvbSAnLi9jYXNlLWluc2Vuc2l0aXZlLWZpbGUtaW5kZXgudHMnO1xuZXhwb3J0ICogYXMgJ2NvZGUtYmxvY2stbWFya2Rvd24taW5mb3JtYXRpb24nIGZyb20gJy4vY29kZS1ibG9jay1tYXJrZG93bi1pbmZvcm1hdGlvbi50cyc7XG5leHBvcnQgKiBhcyAnY29kZS1ibG9jay1yZWctZXhwJyBmcm9tICcuL2NvZGUtYmxvY2stcmVnLWV4cC50cyc7XG5leHBvcnQgKiBhcyAnY29tbWFuZC1oYW5kbGVycycgZnJvbSAnLi9jb21tYW5kLWhhbmRsZXJzL2luZGV4LnRzJztcbmV4cG9ydCAqIGFzICdjb21tYW5kLXJlZ2lzdHJhcicgZnJvbSAnLi9jb21tYW5kLXJlZ2lzdHJhci50cyc7XG5leHBvcnQgKiBhcyAnY29tbXVuaXR5LXBsdWdpbnMnIGZyb20gJy4vY29tbXVuaXR5LXBsdWdpbnMudHMnO1xuZXhwb3J0ICogYXMgJ2NvbXBvbmVudHMnIGZyb20gJy4vY29tcG9uZW50cy9pbmRleC50cyc7XG5leHBvcnQgKiBhcyAnY29uc3RydWN0b3JzJyBmcm9tICcuL2NvbnN0cnVjdG9ycy9pbmRleC50cyc7XG5leHBvcnQgKiBhcyAnY3NzLWNsYXNzJyBmcm9tICcuL2Nzcy1jbGFzcy50cyc7XG5leHBvcnQgKiBhcyAnZGF0YS1oYW5kbGVyJyBmcm9tICcuL2RhdGEtaGFuZGxlci50cyc7XG5leHBvcnQgKiBhcyAnZGF0YXZpZXctbGluaycgZnJvbSAnLi9kYXRhdmlldy1saW5rLnRzJztcbmV4cG9ydCAqIGFzICdkYXRhdmlldycgZnJvbSAnLi9kYXRhdmlldy50cyc7XG5leHBvcnQgKiBhcyAnZGVtby12YXVsdC1oZWxwZXItc2V0dGluZ3MnIGZyb20gJy4vZGVtby12YXVsdC1oZWxwZXItc2V0dGluZ3MudHMnO1xuZXhwb3J0ICogYXMgJ2RlbW8tdmF1bHQtaGVscGVyJyBmcm9tICcuL2RlbW8tdmF1bHQtaGVscGVyLnRzJztcbmV4cG9ydCAqIGFzICdkZXNrdG9wLWRlbW8tdmF1bHQtb3BlbmVyJyBmcm9tICcuL2Rlc2t0b3AtZGVtby12YXVsdC1vcGVuZXIudHMnO1xuZXhwb3J0ICogYXMgJ2Rlc2t0b3AtdHJ1c3RlZC1pbnB1dCcgZnJvbSAnLi9kZXNrdG9wLXRydXN0ZWQtaW5wdXQudHMnO1xuZXhwb3J0ICogYXMgJ2VkaXRvci1leHRlbnNpb24tcmVnaXN0cmFyJyBmcm9tICcuL2VkaXRvci1leHRlbnNpb24tcmVnaXN0cmFyLnRzJztcbmV4cG9ydCAqIGFzICdlZGl0b3Itc3VnZ2VzdC1yZWdpc3RyYXInIGZyb20gJy4vZWRpdG9yLXN1Z2dlc3QtcmVnaXN0cmFyLnRzJztcbmV4cG9ydCAqIGFzICdlZGl0b3InIGZyb20gJy4vZWRpdG9yLnRzJztcbmV4cG9ydCAqIGFzICdldmVudHMnIGZyb20gJy4vZXZlbnRzLnRzJztcbmV4cG9ydCAqIGFzICdleHRlbnNpb25zLXJlZ2lzdHJhcicgZnJvbSAnLi9leHRlbnNpb25zLXJlZ2lzdHJhci50cyc7XG5leHBvcnQgKiBhcyAnZmlsZS1jaGFuZ2UnIGZyb20gJy4vZmlsZS1jaGFuZ2UudHMnO1xuZXhwb3J0ICogYXMgJ2ZpbGUtbWFuYWdlcicgZnJvbSAnLi9maWxlLW1hbmFnZXIudHMnO1xuZXhwb3J0ICogYXMgJ2ZpbGUtc3lzdGVtJyBmcm9tICcuL2ZpbGUtc3lzdGVtLnRzJztcbmV4cG9ydCAqIGFzICdmb2xkZXItbm90ZScgZnJvbSAnLi9mb2xkZXItbm90ZS50cyc7XG5leHBvcnQgKiBhcyAnZnJvbnRtYXR0ZXItbGluay1jYWNoZS13aXRoLW9mZnNldHMnIGZyb20gJy4vZnJvbnRtYXR0ZXItbGluay1jYWNoZS13aXRoLW9mZnNldHMudHMnO1xuZXhwb3J0ICogYXMgJ2Zyb250bWF0dGVyJyBmcm9tICcuL2Zyb250bWF0dGVyLnRzJztcbmV4cG9ydCAqIGFzICdob3Zlci1saW5rLXNvdXJjZS1yZWdpc3RyYXInIGZyb20gJy4vaG92ZXItbGluay1zb3VyY2UtcmVnaXN0cmFyLnRzJztcbmV4cG9ydCAqIGFzICdodG1sLWVsZW1lbnQnIGZyb20gJy4vaHRtbC1lbGVtZW50LnRzJztcbmV4cG9ydCAqIGFzICdpMThuJyBmcm9tICcuL2kxOG4vaW5kZXgudHMnO1xuZXhwb3J0ICogYXMgJ2lzLWluLW9ic2lkaWFuJyBmcm9tICcuL2lzLWluLW9ic2lkaWFuLnRzJztcbmV4cG9ydCAqIGFzICdsaW5rLXVwZGF0ZS1wcm9ncmVzcycgZnJvbSAnLi9saW5rLXVwZGF0ZS1wcm9ncmVzcy50cyc7XG5leHBvcnQgKiBhcyAnbGluaycgZnJvbSAnLi9saW5rLnRzJztcbmV4cG9ydCAqIGFzICdsb2dnZXInIGZyb20gJy4vbG9nZ2VyLnRzJztcbmV4cG9ydCAqIGFzICdsb29wJyBmcm9tICcuL2xvb3AudHMnO1xuZXhwb3J0ICogYXMgJ21hcmtkb3duLWNvZGUtYmxvY2stcHJvY2Vzc29yLXJlZ2lzdHJhcicgZnJvbSAnLi9tYXJrZG93bi1jb2RlLWJsb2NrLXByb2Nlc3Nvci1yZWdpc3RyYXIudHMnO1xuZXhwb3J0ICogYXMgJ21hcmtkb3duLWNvZGUtYmxvY2stcHJvY2Vzc29yJyBmcm9tICcuL21hcmtkb3duLWNvZGUtYmxvY2stcHJvY2Vzc29yLnRzJztcbmV4cG9ydCAqIGFzICdtYXJrZG93bi1wb3N0LXByb2Nlc3Nvci1yZWdpc3RyYXInIGZyb20gJy4vbWFya2Rvd24tcG9zdC1wcm9jZXNzb3ItcmVnaXN0cmFyLnRzJztcbmV4cG9ydCAqIGFzICdtYXJrZG93bi12aWV3JyBmcm9tICcuL21hcmtkb3duLXZpZXcudHMnO1xuZXhwb3J0ICogYXMgJ21hcmtkb3duJyBmcm9tICcuL21hcmtkb3duLnRzJztcbmV4cG9ydCAqIGFzICdtZW51LWV2ZW50LXJlZ2lzdHJhcicgZnJvbSAnLi9tZW51LWV2ZW50LXJlZ2lzdHJhci50cyc7XG5leHBvcnQgKiBhcyAnbWV0YWRhdGEtY2FjaGUnIGZyb20gJy4vbWV0YWRhdGEtY2FjaGUudHMnO1xuZXhwb3J0ICogYXMgJ21vZGFscycgZnJvbSAnLi9tb2RhbHMvaW5kZXgudHMnO1xuZXhwb3J0ICogYXMgJ25vdGVib29rLW5hdmlnYXRvcicgZnJvbSAnLi9ub3RlYm9vay1uYXZpZ2F0b3IudHMnO1xuZXhwb3J0ICogYXMgJ29ic2lkaWFuLXByb3RvY29sLWhhbmRsZXItcmVnaXN0cmFyJyBmcm9tICcuL29ic2lkaWFuLXByb3RvY29sLWhhbmRsZXItcmVnaXN0cmFyLnRzJztcbmV4cG9ydCAqIGFzICdvYnNpZGlhbi1zZXR0aW5ncycgZnJvbSAnLi9vYnNpZGlhbi1zZXR0aW5ncy50cyc7XG5leHBvcnQgKiBhcyAncGFyc2UtbGluaycgZnJvbSAnLi9wYXJzZS1saW5rLnRzJztcbmV4cG9ydCAqIGFzICdwYXRoLXNldHRpbmdzJyBmcm9tICcuL3BhdGgtc2V0dGluZ3MudHMnO1xuZXhwb3J0ICogYXMgJ3BkZicgZnJvbSAnLi9wZGYudHMnO1xuZXhwb3J0ICogYXMgJ3BsdWdpbicgZnJvbSAnLi9wbHVnaW4vaW5kZXgudHMnO1xuZXhwb3J0ICogYXMgJ3BsdWdpbi1jbGktaGFuZGxlci1yZWdpc3RyYXInIGZyb20gJy4vcGx1Z2luLWNsaS1oYW5kbGVyLXJlZ2lzdHJhci50cyc7XG5leHBvcnQgKiBhcyAncG9wb3ZlcnMnIGZyb20gJy4vcG9wb3ZlcnMvaW5kZXgudHMnO1xuZXhwb3J0ICogYXMgJ3F1ZXVlJyBmcm9tICcuL3F1ZXVlLnRzJztcbmV4cG9ydCAqIGFzICdyZWFjdCcgZnJvbSAnLi9yZWFjdC9pbmRleC50cyc7XG5leHBvcnQgKiBhcyAncmVmZXJlbmNlJyBmcm9tICcuL3JlZmVyZW5jZS50cyc7XG5leHBvcnQgKiBhcyAncmVzb3VyY2UtbG9jaycgZnJvbSAnLi9yZXNvdXJjZS1sb2NrLnRzJztcbmV4cG9ydCAqIGFzICdyZXNvdXJjZS11cmwnIGZyb20gJy4vcmVzb3VyY2UtdXJsLnRzJztcbmV4cG9ydCAqIGFzICdyaWJib24taWNvbi1yZWdpc3RyYXInIGZyb20gJy4vcmliYm9uLWljb24tcmVnaXN0cmFyLnRzJztcbmV4cG9ydCAqIGFzICdzZXR0aW5nLWNvbXBvbmVudHMnIGZyb20gJy4vc2V0dGluZy1jb21wb25lbnRzL2luZGV4LnRzJztcbmV4cG9ydCAqIGFzICdzZXR0aW5nLWV4JyBmcm9tICcuL3NldHRpbmctZXgudHMnO1xuZXhwb3J0ICogYXMgJ3NldHRpbmctZ3JvdXAtZXgnIGZyb20gJy4vc2V0dGluZy1ncm91cC1leC50cyc7XG5leHBvcnQgKiBhcyAnc3RhdHVzLWJhci1pdGVtLXJlZ2lzdHJhcicgZnJvbSAnLi9zdGF0dXMtYmFyLWl0ZW0tcmVnaXN0cmFyLnRzJztcbmV4cG9ydCAqIGFzICd2YWxpZGF0aW9uJyBmcm9tICcuL3ZhbGlkYXRpb24udHMnO1xuZXhwb3J0ICogYXMgJ3ZhdWx0LWRlbGV0ZScgZnJvbSAnLi92YXVsdC1kZWxldGUudHMnO1xuZXhwb3J0ICogYXMgJ3ZhdWx0LXRyYW5zYWN0aW9uJyBmcm9tICcuL3ZhdWx0LXRyYW5zYWN0aW9uLnRzJztcbmV4cG9ydCAqIGFzICd2YXVsdCcgZnJvbSAnLi92YXVsdC50cyc7XG5leHBvcnQgKiBhcyAndmlldy1yZWdpc3RyYXInIGZyb20gJy4vdmlldy1yZWdpc3RyYXIudHMnO1xuZXhwb3J0ICogYXMgJ3dvcmtzcGFjZScgZnJvbSAnLi93b3Jrc3BhY2UudHMnO1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQSxZQUFZQSwwQkFBNEI7QUFDeEMsWUFBWSxTQUFXO0FBQ3ZCLFlBQVlDLHVCQUF5QjtBQUNyQyxZQUFZQyxxQkFBdUI7QUFDbkMsWUFBWSxjQUFnQjtBQUM1QixZQUFZQywwQkFBNEI7QUFDeEMsWUFBWSxhQUFlO0FBQzNCLFlBQVksWUFBYztBQUMxQixZQUFZQyxpQ0FBbUM7QUFDL0MsWUFBWUMscUNBQXVDO0FBQ25ELFlBQVlDLHdCQUEwQjtBQUN0QyxZQUFZQyxzQkFBd0I7QUFDcEMsWUFBWUMsdUJBQXlCO0FBQ3JDLFlBQVlDLHVCQUF5QjtBQUNyQyxZQUFZLGdCQUFrQjtBQUM5QixZQUFZLGtCQUFvQjtBQUNoQyxZQUFZQyxlQUFpQjtBQUM3QixZQUFZQyxrQkFBb0I7QUFDaEMsWUFBWUMsbUJBQXFCO0FBQ2pDLFlBQVksY0FBZ0I7QUFDNUIsWUFBWUMsZ0NBQWtDO0FBQzlDLFlBQVlDLHVCQUF5QjtBQUNyQyxZQUFZQywrQkFBaUM7QUFDN0MsWUFBWUMsMkJBQTZCO0FBQ3pDLFlBQVlDLGdDQUFrQztBQUM5QyxZQUFZQyw4QkFBZ0M7QUFDNUMsWUFBWSxZQUFjO0FBQzFCLFlBQVksWUFBYztBQUMxQixZQUFZQywwQkFBNEI7QUFDeEMsWUFBWUMsaUJBQW1CO0FBQy9CLFlBQVlDLGtCQUFvQjtBQUNoQyxZQUFZQyxpQkFBbUI7QUFDL0IsWUFBWUMsaUJBQW1CO0FBQy9CLFlBQVlDLHlDQUEyQztBQUN2RCxZQUFZLGlCQUFtQjtBQUMvQixZQUFZQyxpQ0FBbUM7QUFDL0MsWUFBWUMsa0JBQW9CO0FBQ2hDLFlBQVksVUFBWTtBQUN4QixZQUFZQyxvQkFBc0I7QUFDbEMsWUFBWUMsMEJBQTRCO0FBQ3hDLFlBQVksVUFBWTtBQUN4QixZQUFZLFlBQWM7QUFDMUIsWUFBWSxVQUFZO0FBQ3hCLFlBQVlDLDZDQUErQztBQUMzRCxZQUFZQyxtQ0FBcUM7QUFDakQsWUFBWUMsdUNBQXlDO0FBQ3JELFlBQVlDLG1CQUFxQjtBQUNqQyxZQUFZLGNBQWdCO0FBQzVCLFlBQVlDLDBCQUE0QjtBQUN4QyxZQUFZQyxvQkFBc0I7QUFDbEMsWUFBWSxZQUFjO0FBQzFCLFlBQVlDLHdCQUEwQjtBQUN0QyxZQUFZQyx5Q0FBMkM7QUFDdkQsWUFBWUMsdUJBQXlCO0FBQ3JDLFlBQVlDLGdCQUFrQjtBQUM5QixZQUFZQyxtQkFBcUI7QUFDakMsWUFBWSxTQUFXO0FBQ3ZCLFlBQVksWUFBYztBQUMxQixZQUFZQyxrQ0FBb0M7QUFDaEQsWUFBWSxjQUFnQjtBQUM1QixZQUFZLFdBQWE7QUFDekIsWUFBWSxXQUFhO0FBQ3pCLFlBQVksZUFBaUI7QUFDN0IsWUFBWUMsbUJBQXFCO0FBQ2pDLFlBQVlDLGtCQUFvQjtBQUNoQyxZQUFZQywyQkFBNkI7QUFDekMsWUFBWUMsd0JBQTBCO0FBQ3RDLFlBQVlDLGdCQUFrQjtBQUM5QixZQUFZQyxzQkFBd0I7QUFDcEMsWUFBWUMsK0JBQWlDO0FBQzdDLFlBQVksZ0JBQWtCO0FBQzlCLFlBQVlDLGtCQUFvQjtBQUNoQyxZQUFZQyx1QkFBeUI7QUFDckMsWUFBWSxXQUFhO0FBQ3pCLFlBQVlDLG9CQUFzQjtBQUNsQyxZQUFZLGVBQWlCOyIsCiAgIm5hbWVzIjogWyJhY3RpdmUtZmlsZS1wcm92aWRlciIsICJhc3luYy13aXRoLW5vdGljZSIsICJhdHRhY2htZW50LXBhdGgiLCAiYmFzZXMtdmlldy1yZWdpc3RyYXIiLCAiY2FzZS1pbnNlbnNpdGl2ZS1maWxlLWluZGV4IiwgImNvZGUtYmxvY2stbWFya2Rvd24taW5mb3JtYXRpb24iLCAiY29kZS1ibG9jay1yZWctZXhwIiwgImNvbW1hbmQtaGFuZGxlcnMiLCAiY29tbWFuZC1yZWdpc3RyYXIiLCAiY29tbXVuaXR5LXBsdWdpbnMiLCAiY3NzLWNsYXNzIiwgImRhdGEtaGFuZGxlciIsICJkYXRhdmlldy1saW5rIiwgImRlbW8tdmF1bHQtaGVscGVyLXNldHRpbmdzIiwgImRlbW8tdmF1bHQtaGVscGVyIiwgImRlc2t0b3AtZGVtby12YXVsdC1vcGVuZXIiLCAiZGVza3RvcC10cnVzdGVkLWlucHV0IiwgImVkaXRvci1leHRlbnNpb24tcmVnaXN0cmFyIiwgImVkaXRvci1zdWdnZXN0LXJlZ2lzdHJhciIsICJleHRlbnNpb25zLXJlZ2lzdHJhciIsICJmaWxlLWNoYW5nZSIsICJmaWxlLW1hbmFnZXIiLCAiZmlsZS1zeXN0ZW0iLCAiZm9sZGVyLW5vdGUiLCAiZnJvbnRtYXR0ZXItbGluay1jYWNoZS13aXRoLW9mZnNldHMiLCAiaG92ZXItbGluay1zb3VyY2UtcmVnaXN0cmFyIiwgImh0bWwtZWxlbWVudCIsICJpcy1pbi1vYnNpZGlhbiIsICJsaW5rLXVwZGF0ZS1wcm9ncmVzcyIsICJtYXJrZG93bi1jb2RlLWJsb2NrLXByb2Nlc3Nvci1yZWdpc3RyYXIiLCAibWFya2Rvd24tY29kZS1ibG9jay1wcm9jZXNzb3IiLCAibWFya2Rvd24tcG9zdC1wcm9jZXNzb3ItcmVnaXN0cmFyIiwgIm1hcmtkb3duLXZpZXciLCAibWVudS1ldmVudC1yZWdpc3RyYXIiLCAibWV0YWRhdGEtY2FjaGUiLCAibm90ZWJvb2stbmF2aWdhdG9yIiwgIm9ic2lkaWFuLXByb3RvY29sLWhhbmRsZXItcmVnaXN0cmFyIiwgIm9ic2lkaWFuLXNldHRpbmdzIiwgInBhcnNlLWxpbmsiLCAicGF0aC1zZXR0aW5ncyIsICJwbHVnaW4tY2xpLWhhbmRsZXItcmVnaXN0cmFyIiwgInJlc291cmNlLWxvY2siLCAicmVzb3VyY2UtdXJsIiwgInJpYmJvbi1pY29uLXJlZ2lzdHJhciIsICJzZXR0aW5nLWNvbXBvbmVudHMiLCAic2V0dGluZy1leCIsICJzZXR0aW5nLWdyb3VwLWV4IiwgInN0YXR1cy1iYXItaXRlbS1yZWdpc3RyYXIiLCAidmF1bHQtZGVsZXRlIiwgInZhdWx0LXRyYW5zYWN0aW9uIiwgInZpZXctcmVnaXN0cmFyIl0KfQo=
|
|
@@ -4,9 +4,10 @@
|
|
|
4
4
|
*
|
|
5
5
|
* This module provides utility functions for processing Markdown content in Obsidian.
|
|
6
6
|
*/
|
|
7
|
-
import type { App } from 'obsidian';
|
|
7
|
+
import type { App, TFolder } from 'obsidian';
|
|
8
8
|
import { Component } from 'obsidian';
|
|
9
9
|
import type { PathOrAbstractFile } from './file-system.mjs';
|
|
10
|
+
import type { FolderNoteLocation } from './folder-note.mjs';
|
|
10
11
|
/**
|
|
11
12
|
* The params for the full render.
|
|
12
13
|
*/
|
|
@@ -95,6 +96,39 @@ export interface RenderExternalLinkParams {
|
|
|
95
96
|
*/
|
|
96
97
|
readonly url: string;
|
|
97
98
|
}
|
|
99
|
+
/**
|
|
100
|
+
* The folder-note setup {@link renderInternalLink} resolves a folder link's note with — everything
|
|
101
|
+
* {@link resolveFolderNoteConfig} takes except the app, which the link already carries.
|
|
102
|
+
*/
|
|
103
|
+
export interface RenderInternalLinkFolderNoteOptions {
|
|
104
|
+
/**
|
|
105
|
+
* The extensions a folder note may carry. See {@link ResolveFolderNoteConfigParams.extensions}.
|
|
106
|
+
*
|
|
107
|
+
* @default `['md']`
|
|
108
|
+
*/
|
|
109
|
+
readonly extensions?: readonly string[];
|
|
110
|
+
/**
|
|
111
|
+
* Whether the folder note is hidden in the file explorer. See
|
|
112
|
+
* {@link ResolveFolderNoteConfigParams.isHidden}.
|
|
113
|
+
*
|
|
114
|
+
* @default `false`
|
|
115
|
+
*/
|
|
116
|
+
readonly isHidden?: boolean;
|
|
117
|
+
/**
|
|
118
|
+
* Where the note sits relative to its folder. See {@link ResolveFolderNoteConfigParams.location}.
|
|
119
|
+
*
|
|
120
|
+
* @default {@link FolderNoteLocation.Auto}
|
|
121
|
+
*/
|
|
122
|
+
readonly location?: FolderNoteLocation;
|
|
123
|
+
/**
|
|
124
|
+
* Names the folder note of a folder. See {@link ResolveFolderNoteConfigParams.resolveName}.
|
|
125
|
+
*
|
|
126
|
+
* @param folder - The folder whose note is being named.
|
|
127
|
+
* @returns The note's name.
|
|
128
|
+
* @default `(folder) => folder.name`
|
|
129
|
+
*/
|
|
130
|
+
resolveName?(this: void, folder: TFolder): string;
|
|
131
|
+
}
|
|
98
132
|
/**
|
|
99
133
|
* Parameters for {@link renderInternalLink}.
|
|
100
134
|
*/
|
|
@@ -107,10 +141,31 @@ export interface RenderInternalLinkParams {
|
|
|
107
141
|
* The text to display for the internal link.
|
|
108
142
|
*/
|
|
109
143
|
readonly displayText?: string;
|
|
144
|
+
/**
|
|
145
|
+
* How to answer which note is a folder's folder note, when the link names a FOLDER.
|
|
146
|
+
*
|
|
147
|
+
* Omitted means {@link FolderNoteLocation.Auto}: the installed `folder-notes` plugin's live
|
|
148
|
+
* configuration, or a note named after its folder, inside it, when that plugin is absent. Pass
|
|
149
|
+
* `{ location: FolderNoteLocation.None }` for a folder link that must only ever reveal.
|
|
150
|
+
*
|
|
151
|
+
* @default `{}`
|
|
152
|
+
*/
|
|
153
|
+
readonly folderNote?: RenderInternalLinkFolderNoteOptions;
|
|
110
154
|
/**
|
|
111
155
|
* The path or abstract file to render the internal link for.
|
|
112
156
|
*/
|
|
113
157
|
readonly pathOrAbstractFile: PathOrAbstractFile;
|
|
158
|
+
/**
|
|
159
|
+
* Whether clicking a FILE link also highlights that file in the file explorer, on top of the open
|
|
160
|
+
* Obsidian's own link handler performs.
|
|
161
|
+
*
|
|
162
|
+
* Opt-in, unlike the folder branch: a folder link has always revealed (revealing was all its click
|
|
163
|
+
* could mean), whereas a file link has always only opened — so turning this on by default would change
|
|
164
|
+
* what every existing caller's link does.
|
|
165
|
+
*
|
|
166
|
+
* @default `false`
|
|
167
|
+
*/
|
|
168
|
+
readonly shouldRevealFile?: boolean;
|
|
114
169
|
}
|
|
115
170
|
/**
|
|
116
171
|
* Render the markdown and embeds.
|
|
@@ -142,6 +197,20 @@ export declare function renderExternalLink(params: RenderExternalLinkParams): Pr
|
|
|
142
197
|
/**
|
|
143
198
|
* Renders an internal link.
|
|
144
199
|
*
|
|
200
|
+
* What clicking the rendered link does depends on what it names:
|
|
201
|
+
*
|
|
202
|
+
* - A FILE is opened by Obsidian's own link handler — and, with
|
|
203
|
+
* {@link RenderInternalLinkParams.shouldRevealFile}, additionally revealed in the file explorer.
|
|
204
|
+
* - A FOLDER cannot be opened, so its FOLDER NOTE is — the note whose properties describe the folder
|
|
205
|
+
* itself, resolved through {@link resolveFolderNote} (by default from the installed `folder-notes`
|
|
206
|
+
* plugin's live configuration). The reveal lands on that note, unless the note is hidden in the
|
|
207
|
+
* explorer, in which case it lands on the folder — revealing a hidden note would highlight nothing.
|
|
208
|
+
* A folder with NO folder note reveals the folder and opens nothing: nothing here ever creates a note.
|
|
209
|
+
*
|
|
210
|
+
* Everything is resolved at CLICK time rather than at render time, deliberately: a rendered link outlives
|
|
211
|
+
* the operation that produced it, so a destination renamed in between still reveals the right item, and a
|
|
212
|
+
* folder note written after the link appeared is still found.
|
|
213
|
+
*
|
|
145
214
|
* @param params - The parameters for rendering the internal link.
|
|
146
215
|
* @returns The HTMLAnchorElement containing the rendered internal link.
|
|
147
216
|
*/
|