@mnaoumov/obsidian-lib 4.2.1 → 5.0.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/dist/lib/cjs/__merged.cjs +54 -1
- package/dist/lib/cjs/__merged.d.cts +5 -4
- package/dist/lib/cjs/attachment-path.cjs +1 -1
- package/dist/lib/cjs/components/case-insensitive-file-index-component.cjs +1 -1
- package/dist/lib/cjs/components/case-insensitive-file-index-component.d.cts +1 -1
- package/dist/lib/cjs/components/plugin-suggestion-component.cjs +1 -1
- package/dist/lib/cjs/components/plugin-suggestion-component.d.cts +1 -1
- package/dist/lib/cjs/components/settings-migration-component.cjs +1 -1
- package/dist/lib/cjs/components/settings-migration-component.d.cts +1 -1
- package/dist/lib/cjs/css-class.cjs +1 -1
- package/dist/lib/cjs/css-class.d.cts +4 -2
- package/dist/lib/cjs/demo-vault-helper-settings.cjs +1 -1
- package/dist/lib/cjs/demo-vault-helper-settings.d.cts +1 -1
- package/dist/lib/cjs/frontmatter.cjs +1 -1
- package/dist/lib/cjs/frontmatter.d.cts +1 -1
- package/dist/lib/cjs/generated-during-build.cjs +2 -2
- package/dist/lib/cjs/generated-during-build.d.cts +2 -2
- package/dist/lib/cjs/i18n/i18n.cjs +2 -2
- package/dist/lib/cjs/i18n/i18n.d.cts +1 -1
- package/dist/lib/cjs/i18n/locales/en.cjs +5 -2
- package/dist/lib/cjs/i18n/locales/en.d.cts +4 -1
- package/dist/lib/cjs/i18n/locales/translations-map.d.cts +4 -1
- package/dist/lib/cjs/link.cjs +5 -3
- package/dist/lib/cjs/link.d.cts +22 -0
- package/dist/lib/cjs/metadata-cache.cjs +1 -1
- package/dist/lib/cjs/modals/minimizable-modal.cjs +1 -1
- package/dist/lib/cjs/modals/minimizable-modal.d.cts +1 -1
- package/dist/lib/cjs/modals/suggest-modal-command-builder.cjs +1 -1
- package/dist/lib/cjs/modals/suggest-modal-command-builder.d.cts +3 -3
- package/dist/lib/cjs/obsidian-dev-utils-state.cjs +1 -1
- package/dist/lib/cjs/obsidian-dev-utils-state.d.cts +5 -2
- package/dist/lib/cjs/path-settings.cjs +214 -35
- package/dist/lib/cjs/path-settings.d.cts +21 -5
- package/dist/lib/cjs/plugin/plugin-api.cjs +17 -2
- package/dist/lib/cjs/plugin/plugin-api.d.cts +24 -7
- package/dist/lib/cjs/plugin/plugin-context.cjs +1 -1
- package/dist/lib/cjs/plugin/plugin.cjs +2 -2
- package/dist/lib/cjs/plugin/plugin.d.cts +1 -1
- package/dist/lib/cjs/resource-lock.cjs +1 -1
- package/dist/lib/cjs/setting-components/checkbox-component.cjs +1 -1
- package/dist/lib/cjs/setting-components/checkbox-component.d.cts +1 -1
- package/dist/lib/cjs/setting-components/code-highlighter-component.cjs +1 -1
- package/dist/lib/cjs/setting-components/code-highlighter-component.d.cts +1 -1
- package/dist/lib/cjs/setting-components/date-component.cjs +1 -1
- package/dist/lib/cjs/setting-components/date-component.d.cts +1 -1
- package/dist/lib/cjs/setting-components/date-time-component.cjs +1 -1
- package/dist/lib/cjs/setting-components/date-time-component.d.cts +1 -1
- package/dist/lib/cjs/setting-components/email-component.cjs +1 -1
- package/dist/lib/cjs/setting-components/email-component.d.cts +1 -1
- package/dist/lib/cjs/setting-components/file-component.cjs +1 -1
- package/dist/lib/cjs/setting-components/file-component.d.cts +1 -1
- package/dist/lib/cjs/setting-components/month-component.cjs +1 -1
- package/dist/lib/cjs/setting-components/month-component.d.cts +1 -1
- package/dist/lib/cjs/setting-components/multiple-dropdown-component.cjs +1 -1
- package/dist/lib/cjs/setting-components/multiple-dropdown-component.d.cts +1 -1
- package/dist/lib/cjs/setting-components/multiple-email-component.cjs +1 -1
- package/dist/lib/cjs/setting-components/multiple-email-component.d.cts +1 -1
- package/dist/lib/cjs/setting-components/multiple-file-component.cjs +1 -1
- package/dist/lib/cjs/setting-components/multiple-file-component.d.cts +1 -1
- package/dist/lib/cjs/setting-components/multiple-text-component.cjs +1 -1
- package/dist/lib/cjs/setting-components/multiple-text-component.d.cts +1 -1
- package/dist/lib/cjs/setting-components/number-component.cjs +1 -1
- package/dist/lib/cjs/setting-components/number-component.d.cts +1 -1
- package/dist/lib/cjs/setting-components/password-component.cjs +1 -1
- package/dist/lib/cjs/setting-components/password-component.d.cts +1 -1
- package/dist/lib/cjs/setting-components/telephone-component.cjs +1 -1
- package/dist/lib/cjs/setting-components/telephone-component.d.cts +1 -1
- package/dist/lib/cjs/setting-components/time-component.cjs +1 -1
- package/dist/lib/cjs/setting-components/time-component.d.cts +1 -1
- package/dist/lib/cjs/setting-components/tri-state-checkbox-component.cjs +1 -1
- package/dist/lib/cjs/setting-components/tri-state-checkbox-component.d.cts +1 -1
- package/dist/lib/cjs/setting-components/typed-dropdown-component.cjs +1 -1
- package/dist/lib/cjs/setting-components/typed-dropdown-component.d.cts +1 -1
- package/dist/lib/cjs/setting-components/typed-multiple-dropdown-component.cjs +1 -1
- package/dist/lib/cjs/setting-components/typed-multiple-dropdown-component.d.cts +1 -1
- package/dist/lib/cjs/setting-components/url-component.cjs +1 -1
- package/dist/lib/cjs/setting-components/url-component.d.cts +1 -1
- package/dist/lib/cjs/setting-components/week-component.cjs +1 -1
- package/dist/lib/cjs/setting-components/week-component.d.cts +1 -1
- package/dist/lib/cjs/vault.cjs +2 -2
- package/dist/lib/cjs/vault.d.cts +2 -2
- package/dist/lib/esm/__merged.d.mts +5 -4
- package/dist/lib/esm/__merged.mjs +57 -3
- package/dist/lib/esm/attachment-path.mjs +1 -1
- package/dist/lib/esm/components/case-insensitive-file-index-component.d.mts +1 -1
- package/dist/lib/esm/components/case-insensitive-file-index-component.mjs +1 -1
- package/dist/lib/esm/components/plugin-suggestion-component.d.mts +1 -1
- package/dist/lib/esm/components/plugin-suggestion-component.mjs +1 -1
- package/dist/lib/esm/components/settings-migration-component.d.mts +1 -1
- package/dist/lib/esm/components/settings-migration-component.mjs +1 -1
- package/dist/lib/esm/css-class.d.mts +4 -2
- package/dist/lib/esm/css-class.mjs +1 -1
- package/dist/lib/esm/demo-vault-helper-settings.d.mts +1 -1
- package/dist/lib/esm/frontmatter.d.mts +1 -1
- package/dist/lib/esm/frontmatter.mjs +1 -1
- package/dist/lib/esm/generated-during-build.d.mts +2 -2
- package/dist/lib/esm/generated-during-build.mjs +2 -2
- package/dist/lib/esm/i18n/i18n.d.mts +1 -1
- package/dist/lib/esm/i18n/i18n.mjs +2 -2
- package/dist/lib/esm/i18n/locales/en.d.mts +4 -1
- package/dist/lib/esm/i18n/locales/en.mjs +5 -2
- package/dist/lib/esm/i18n/locales/translations-map.d.mts +4 -1
- package/dist/lib/esm/link.d.mts +22 -0
- package/dist/lib/esm/link.mjs +5 -3
- package/dist/lib/esm/metadata-cache.mjs +1 -1
- package/dist/lib/esm/modals/minimizable-modal.d.mts +1 -1
- package/dist/lib/esm/modals/minimizable-modal.mjs +1 -1
- package/dist/lib/esm/modals/suggest-modal-command-builder.d.mts +3 -3
- package/dist/lib/esm/modals/suggest-modal-command-builder.mjs +1 -1
- package/dist/lib/esm/obsidian-dev-utils-state.d.mts +5 -2
- package/dist/lib/esm/obsidian-dev-utils-state.mjs +1 -1
- package/dist/lib/esm/path-settings.d.mts +21 -5
- package/dist/lib/esm/path-settings.mjs +215 -41
- package/dist/lib/esm/plugin/plugin-api.d.mts +24 -7
- package/dist/lib/esm/plugin/plugin-api.mjs +16 -2
- package/dist/lib/esm/plugin/plugin-context.mjs +1 -1
- package/dist/lib/esm/plugin/plugin.d.mts +1 -1
- package/dist/lib/esm/plugin/plugin.mjs +2 -2
- package/dist/lib/esm/resource-lock.mjs +1 -1
- package/dist/lib/esm/setting-components/checkbox-component.d.mts +1 -1
- package/dist/lib/esm/setting-components/checkbox-component.mjs +1 -1
- package/dist/lib/esm/setting-components/code-highlighter-component.d.mts +1 -1
- package/dist/lib/esm/setting-components/code-highlighter-component.mjs +1 -1
- package/dist/lib/esm/setting-components/date-component.d.mts +1 -1
- package/dist/lib/esm/setting-components/date-component.mjs +1 -1
- package/dist/lib/esm/setting-components/date-time-component.d.mts +1 -1
- package/dist/lib/esm/setting-components/date-time-component.mjs +1 -1
- package/dist/lib/esm/setting-components/email-component.d.mts +1 -1
- package/dist/lib/esm/setting-components/email-component.mjs +1 -1
- package/dist/lib/esm/setting-components/file-component.d.mts +1 -1
- package/dist/lib/esm/setting-components/file-component.mjs +1 -1
- package/dist/lib/esm/setting-components/month-component.d.mts +1 -1
- package/dist/lib/esm/setting-components/month-component.mjs +1 -1
- package/dist/lib/esm/setting-components/multiple-dropdown-component.d.mts +1 -1
- package/dist/lib/esm/setting-components/multiple-dropdown-component.mjs +1 -1
- package/dist/lib/esm/setting-components/multiple-email-component.d.mts +1 -1
- package/dist/lib/esm/setting-components/multiple-email-component.mjs +1 -1
- package/dist/lib/esm/setting-components/multiple-file-component.d.mts +1 -1
- package/dist/lib/esm/setting-components/multiple-file-component.mjs +1 -1
- package/dist/lib/esm/setting-components/multiple-text-component.d.mts +1 -1
- package/dist/lib/esm/setting-components/multiple-text-component.mjs +1 -1
- package/dist/lib/esm/setting-components/number-component.d.mts +1 -1
- package/dist/lib/esm/setting-components/number-component.mjs +1 -1
- package/dist/lib/esm/setting-components/password-component.d.mts +1 -1
- package/dist/lib/esm/setting-components/password-component.mjs +1 -1
- package/dist/lib/esm/setting-components/telephone-component.d.mts +1 -1
- package/dist/lib/esm/setting-components/telephone-component.mjs +1 -1
- package/dist/lib/esm/setting-components/time-component.d.mts +1 -1
- package/dist/lib/esm/setting-components/time-component.mjs +1 -1
- package/dist/lib/esm/setting-components/tri-state-checkbox-component.d.mts +1 -1
- package/dist/lib/esm/setting-components/tri-state-checkbox-component.mjs +1 -1
- package/dist/lib/esm/setting-components/typed-dropdown-component.d.mts +1 -1
- package/dist/lib/esm/setting-components/typed-dropdown-component.mjs +1 -1
- package/dist/lib/esm/setting-components/typed-multiple-dropdown-component.d.mts +1 -1
- package/dist/lib/esm/setting-components/typed-multiple-dropdown-component.mjs +1 -1
- package/dist/lib/esm/setting-components/url-component.d.mts +1 -1
- package/dist/lib/esm/setting-components/url-component.mjs +1 -1
- package/dist/lib/esm/setting-components/week-component.d.mts +1 -1
- package/dist/lib/esm/setting-components/week-component.mjs +1 -1
- package/dist/lib/esm/vault.d.mts +2 -2
- package/dist/lib/esm/vault.mjs +2 -2
- package/package.json +5 -4
|
@@ -119,14 +119,25 @@ __export(path_settings_exports, {
|
|
|
119
119
|
});
|
|
120
120
|
module.exports = __toCommonJS(path_settings_exports);
|
|
121
121
|
var import_reg_exp = require('@mnaoumov/typescript-lib/reg-exp');
|
|
122
|
-
var import_string = require('@mnaoumov/typescript-lib/string');
|
|
123
122
|
var import_type_guards = require('@mnaoumov/typescript-lib/type-guards');
|
|
124
123
|
var import_i18n = require('./i18n/i18n.cjs');
|
|
124
|
+
const REG_EXP_ENTRY_REG_EXP = /^\/.*\/[a-z]*$/s;
|
|
125
|
+
const CASE_INSENSITIVE_FLAG = "i";
|
|
126
|
+
const STATEFUL_FLAGS_REG_EXP = /[gy]/g;
|
|
127
|
+
const GLOB_CHARACTERS = /* @__PURE__ */ new Set(["?", "[", "*"]);
|
|
128
|
+
const GLOBSTAR = "**";
|
|
129
|
+
const GLOBSTAR_FOLDERS = "**/";
|
|
130
|
+
const ALWAYS_MATCHER = {
|
|
131
|
+
isMatch: () => true
|
|
132
|
+
};
|
|
133
|
+
const NEVER_MATCHER = {
|
|
134
|
+
isMatch: () => false
|
|
135
|
+
};
|
|
125
136
|
class PathSetting {
|
|
126
137
|
constructor(type) {
|
|
127
138
|
this.type = type;
|
|
128
|
-
this.
|
|
129
|
-
this.
|
|
139
|
+
this.defaultMatcher = getDefaultMatcher(type);
|
|
140
|
+
this.matchers = [this.defaultMatcher];
|
|
130
141
|
}
|
|
131
142
|
type;
|
|
132
143
|
get array() {
|
|
@@ -134,19 +145,20 @@ class PathSetting {
|
|
|
134
145
|
}
|
|
135
146
|
set array(value) {
|
|
136
147
|
this._array = value.filter(Boolean);
|
|
137
|
-
this.
|
|
148
|
+
this.matchers = makeMatchers(this._array, this.defaultMatcher) ?? [this.defaultMatcher];
|
|
138
149
|
}
|
|
139
150
|
_array = [];
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
isPathIgnored(path) {
|
|
151
|
+
defaultMatcher;
|
|
152
|
+
matchers;
|
|
153
|
+
isPathIgnored(path, isFolder) {
|
|
154
|
+
const isMatch = this.matchers.some((matcher) => matcher.isMatch(path, isFolder));
|
|
143
155
|
switch (this.type) {
|
|
144
156
|
/* v8 ignore stop */
|
|
145
157
|
case "Exclude" /* Exclude */: {
|
|
146
|
-
return
|
|
158
|
+
return isMatch;
|
|
147
159
|
}
|
|
148
160
|
case "Include" /* Include */: {
|
|
149
|
-
return !
|
|
161
|
+
return !isMatch;
|
|
150
162
|
}
|
|
151
163
|
default: {
|
|
152
164
|
(0, import_type_guards.assertNever)(this.type);
|
|
@@ -193,59 +205,226 @@ class PathSettings {
|
|
|
193
205
|
* Checks if a path is ignored by the include/exclude path settings.
|
|
194
206
|
*
|
|
195
207
|
* @param path - The path to check.
|
|
208
|
+
* @param isFolder - Whether the path is a folder. Only a folder-only glob (one ending in `/`) reads it: such a glob
|
|
209
|
+
* always matches the contents of a matching folder, and matches the folder itself only when this is `true`.
|
|
196
210
|
* @returns `true` if the path is ignored, `false` otherwise.
|
|
197
211
|
*/
|
|
198
|
-
isPathIgnored(path) {
|
|
199
|
-
return this._includePaths.isPathIgnored(path) || this._excludePaths.isPathIgnored(path);
|
|
212
|
+
isPathIgnored(path, isFolder = false) {
|
|
213
|
+
return this._includePaths.isPathIgnored(path, isFolder) || this._excludePaths.isPathIgnored(path, isFolder);
|
|
200
214
|
}
|
|
201
215
|
}
|
|
202
216
|
function pathsValidator(paths) {
|
|
203
217
|
for (const path of paths) {
|
|
204
|
-
|
|
205
|
-
|
|
218
|
+
const { error } = compileEntry(path, NEVER_MATCHER);
|
|
219
|
+
if (error !== void 0) {
|
|
220
|
+
return error;
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
function compileEntry(entry, defaultMatcher) {
|
|
225
|
+
if (entry === "/") {
|
|
226
|
+
return { matcher: defaultMatcher };
|
|
227
|
+
}
|
|
228
|
+
if (REG_EXP_ENTRY_REG_EXP.test(entry)) {
|
|
229
|
+
const flagsSeparatorIndex = entry.lastIndexOf("/");
|
|
230
|
+
return compileRegExpEntry(entry, entry.slice(1, flagsSeparatorIndex), entry.slice(flagsSeparatorIndex + 1));
|
|
231
|
+
}
|
|
232
|
+
return hasUnescapedGlobCharacter(entry) ? compileGlobEntry(entry) : compilePlainPathEntry(entry);
|
|
233
|
+
}
|
|
234
|
+
function compileGlobEntry(glob) {
|
|
235
|
+
const isFolderOnly = glob.endsWith("/");
|
|
236
|
+
const body = glob.replace(/\/+$/, "");
|
|
237
|
+
const globSource = getGlobSource(body);
|
|
238
|
+
if (!globSource.isValid) {
|
|
239
|
+
return {
|
|
240
|
+
error: (0, import_i18n.t)(($) => $.obsidianDevUtils.pathSettings.invalidGlob, { glob, reason: globSource.error })
|
|
241
|
+
};
|
|
242
|
+
}
|
|
243
|
+
const { source } = globSource;
|
|
244
|
+
const prefix = body.includes("/") ? "^" : "(?:^|/)";
|
|
245
|
+
let selfRegExp;
|
|
246
|
+
let contentsRegExp;
|
|
247
|
+
try {
|
|
248
|
+
selfRegExp = new RegExp(`${prefix}${source}$`, CASE_INSENSITIVE_FLAG);
|
|
249
|
+
contentsRegExp = new RegExp(`${prefix}${source}/`, CASE_INSENSITIVE_FLAG);
|
|
250
|
+
} catch (error_) {
|
|
251
|
+
return {
|
|
252
|
+
error: (0, import_i18n.t)(($) => $.obsidianDevUtils.pathSettings.invalidGlob, { glob, reason: getRegExpErrorReason(error_) })
|
|
253
|
+
};
|
|
254
|
+
}
|
|
255
|
+
return {
|
|
256
|
+
matcher: {
|
|
257
|
+
isMatch: (path, isFolder) => contentsRegExp.test(path) || (isFolder || !isFolderOnly) && selfRegExp.test(path)
|
|
258
|
+
}
|
|
259
|
+
};
|
|
260
|
+
}
|
|
261
|
+
function compilePlainPathEntry(path) {
|
|
262
|
+
const unescapedPath = path.replaceAll(/\\(?<character>.)/gs, "$<character>").replace(/\/+$/, "");
|
|
263
|
+
const regExp = new RegExp(`^${(0, import_reg_exp.escapeRegExp)(unescapedPath)}(?:/|$)`, CASE_INSENSITIVE_FLAG);
|
|
264
|
+
return {
|
|
265
|
+
matcher: {
|
|
266
|
+
isMatch: (pathToCheck) => regExp.test(pathToCheck)
|
|
267
|
+
}
|
|
268
|
+
};
|
|
269
|
+
}
|
|
270
|
+
function compileRegExpEntry(entry, source, flags) {
|
|
271
|
+
let regExp;
|
|
272
|
+
try {
|
|
273
|
+
new RegExp(source, flags);
|
|
274
|
+
const effectiveFlags = flags.replaceAll(STATEFUL_FLAGS_REG_EXP, "");
|
|
275
|
+
regExp = new RegExp(source, effectiveFlags.includes(CASE_INSENSITIVE_FLAG) ? effectiveFlags : `${effectiveFlags}${CASE_INSENSITIVE_FLAG}`);
|
|
276
|
+
} catch (error) {
|
|
277
|
+
return {
|
|
278
|
+
error: (0, import_i18n.t)(($) => $.obsidianDevUtils.pathSettings.invalidRegularExpression, { reason: getRegExpErrorReason(error), regExp: entry })
|
|
279
|
+
};
|
|
280
|
+
}
|
|
281
|
+
return {
|
|
282
|
+
matcher: {
|
|
283
|
+
isMatch: (path) => regExp.test(path)
|
|
284
|
+
}
|
|
285
|
+
};
|
|
286
|
+
}
|
|
287
|
+
function escapeCharacterClassCharacter(character) {
|
|
288
|
+
return /[-\\\]^[]/.test(character) ? `\\${character}` : character;
|
|
289
|
+
}
|
|
290
|
+
function getCharacterClassSource(glob, openIndex) {
|
|
291
|
+
let index = openIndex + 1;
|
|
292
|
+
let isNegated = false;
|
|
293
|
+
if (glob[index] === "!" || glob[index] === "^") {
|
|
294
|
+
isNegated = true;
|
|
295
|
+
index++;
|
|
296
|
+
}
|
|
297
|
+
let content = "";
|
|
298
|
+
if (glob[index] === "]") {
|
|
299
|
+
content += String.raw`\]`;
|
|
300
|
+
index++;
|
|
301
|
+
}
|
|
302
|
+
while (index < glob.length) {
|
|
303
|
+
const character = glob.charAt(index);
|
|
304
|
+
if (character === "]") {
|
|
305
|
+
return {
|
|
306
|
+
endIndex: index + 1,
|
|
307
|
+
isValid: true,
|
|
308
|
+
source: `[${isNegated ? "^/" : ""}${content}]`
|
|
309
|
+
};
|
|
310
|
+
}
|
|
311
|
+
if (character === "\\") {
|
|
312
|
+
index++;
|
|
313
|
+
if (index >= glob.length) {
|
|
314
|
+
break;
|
|
315
|
+
}
|
|
316
|
+
content += escapeCharacterClassCharacter(glob.charAt(index));
|
|
317
|
+
} else {
|
|
318
|
+
content += character === "-" ? character : escapeCharacterClassCharacter(character);
|
|
206
319
|
}
|
|
320
|
+
index++;
|
|
207
321
|
}
|
|
322
|
+
return { error: (0, import_i18n.t)(($) => $.obsidianDevUtils.pathSettings.unclosedCharacterClass), isValid: false };
|
|
208
323
|
}
|
|
209
|
-
function
|
|
324
|
+
function getDefaultMatcher(type) {
|
|
210
325
|
switch (type) {
|
|
211
326
|
/* v8 ignore stop */
|
|
212
327
|
case "Exclude" /* Exclude */: {
|
|
213
|
-
return
|
|
328
|
+
return NEVER_MATCHER;
|
|
214
329
|
}
|
|
215
330
|
case "Include" /* Include */: {
|
|
216
|
-
return
|
|
331
|
+
return ALWAYS_MATCHER;
|
|
217
332
|
}
|
|
218
333
|
default: {
|
|
219
334
|
(0, import_type_guards.assertNever)(type);
|
|
220
335
|
}
|
|
221
336
|
}
|
|
222
337
|
}
|
|
223
|
-
function
|
|
224
|
-
|
|
225
|
-
|
|
338
|
+
function getGlobSource(glob) {
|
|
339
|
+
let source = "";
|
|
340
|
+
let index = 0;
|
|
341
|
+
while (index < glob.length) {
|
|
342
|
+
const character = glob.charAt(index);
|
|
343
|
+
switch (character) {
|
|
344
|
+
case "?": {
|
|
345
|
+
source += "[^/]";
|
|
346
|
+
index++;
|
|
347
|
+
break;
|
|
348
|
+
}
|
|
349
|
+
case "[": {
|
|
350
|
+
const characterClass = getCharacterClassSource(glob, index);
|
|
351
|
+
if (!characterClass.isValid) {
|
|
352
|
+
return characterClass;
|
|
353
|
+
}
|
|
354
|
+
source += characterClass.source;
|
|
355
|
+
index = characterClass.endIndex;
|
|
356
|
+
break;
|
|
357
|
+
}
|
|
358
|
+
case "*": {
|
|
359
|
+
if (!glob.startsWith(GLOBSTAR, index)) {
|
|
360
|
+
source += "[^/]*";
|
|
361
|
+
index++;
|
|
362
|
+
break;
|
|
363
|
+
}
|
|
364
|
+
const isSegmentStart = index === 0 || glob[index - 1] === "/";
|
|
365
|
+
if (isSegmentStart && glob.startsWith(GLOBSTAR_FOLDERS, index)) {
|
|
366
|
+
source += "(?:[^/]*/)*";
|
|
367
|
+
index += GLOBSTAR_FOLDERS.length;
|
|
368
|
+
} else if (isSegmentStart && index + GLOBSTAR.length === glob.length) {
|
|
369
|
+
source += ".*";
|
|
370
|
+
index += GLOBSTAR.length;
|
|
371
|
+
} else {
|
|
372
|
+
source += "[^/]*";
|
|
373
|
+
index += GLOBSTAR.length;
|
|
374
|
+
}
|
|
375
|
+
break;
|
|
376
|
+
}
|
|
377
|
+
case "\\": {
|
|
378
|
+
index++;
|
|
379
|
+
if (index >= glob.length) {
|
|
380
|
+
return { error: (0, import_i18n.t)(($) => $.obsidianDevUtils.pathSettings.trailingEscape), isValid: false };
|
|
381
|
+
}
|
|
382
|
+
source += (0, import_reg_exp.escapeRegExp)(glob.charAt(index));
|
|
383
|
+
index++;
|
|
384
|
+
break;
|
|
385
|
+
}
|
|
386
|
+
default: {
|
|
387
|
+
source += (0, import_reg_exp.escapeRegExp)(character);
|
|
388
|
+
index++;
|
|
389
|
+
break;
|
|
390
|
+
}
|
|
391
|
+
}
|
|
226
392
|
}
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
393
|
+
return { isValid: true, source };
|
|
394
|
+
}
|
|
395
|
+
function getRegExpErrorReason(error) {
|
|
396
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
397
|
+
const match = /^Invalid regular expression: \/.*\/[a-z]*: (?<reason>.*)$/s.exec(message);
|
|
398
|
+
return match?.groups?.["reason"] ?? message;
|
|
399
|
+
}
|
|
400
|
+
function hasUnescapedGlobCharacter(entry) {
|
|
401
|
+
for (let index = 0; index < entry.length; index++) {
|
|
402
|
+
const character = entry.charAt(index);
|
|
403
|
+
if (character === "\\") {
|
|
404
|
+
index++;
|
|
405
|
+
} else if (GLOB_CHARACTERS.has(character)) {
|
|
406
|
+
return true;
|
|
230
407
|
}
|
|
231
|
-
|
|
232
|
-
|
|
408
|
+
}
|
|
409
|
+
return false;
|
|
410
|
+
}
|
|
411
|
+
function makeMatchers(paths, defaultMatcher) {
|
|
412
|
+
if (paths.length === 0) {
|
|
413
|
+
return [defaultMatcher];
|
|
414
|
+
}
|
|
415
|
+
const matchers = [];
|
|
416
|
+
for (const path of paths) {
|
|
417
|
+
const { matcher } = compileEntry(path, defaultMatcher);
|
|
418
|
+
if (!matcher) {
|
|
419
|
+
return null;
|
|
233
420
|
}
|
|
234
|
-
|
|
235
|
-
$string: path,
|
|
236
|
-
suffix: "/"
|
|
237
|
-
});
|
|
238
|
-
return `^${(0, import_reg_exp.escapeRegExp)(path)}(/|$)`;
|
|
239
|
-
}).map((regExpString) => `(${regExpString})`).join("|");
|
|
240
|
-
try {
|
|
241
|
-
return new RegExp(regExpStringCombined);
|
|
242
|
-
} catch {
|
|
243
|
-
return null;
|
|
421
|
+
matchers.push(matcher);
|
|
244
422
|
}
|
|
423
|
+
return matchers;
|
|
245
424
|
}
|
|
246
425
|
// Annotate the CommonJS export names for ESM import in node:
|
|
247
426
|
0 && (module.exports = {
|
|
248
427
|
PathSettings,
|
|
249
428
|
pathsValidator
|
|
250
429
|
});
|
|
251
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9wYXRoLXNldHRpbmdzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBUaGlzIG1vZHVsZSBwcm92aWRlcyBjbGFzc2VzIGFuZCB2YWxpZGF0b3JzIGZvciBtYW5hZ2luZyBpbmNsdWRlL2V4Y2x1ZGUgcGF0aCBzZXR0aW5ncy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IE1heWJlUmV0dXJuIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3R5cGUnO1xuXG5pbXBvcnQge1xuICBBTFdBWVNfTUFUQ0hfUkVHX0VYUCxcbiAgZXNjYXBlUmVnRXhwLFxuICBpc1ZhbGlkUmVnRXhwLFxuICBORVZFUl9NQVRDSF9SRUdfRVhQXG59IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9yZWctZXhwJztcbmltcG9ydCB7IHRyaW1FbmQgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvc3RyaW5nJztcbmltcG9ydCB7IGFzc2VydE5ldmVyIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3R5cGUtZ3VhcmRzJztcblxuaW1wb3J0IHsgdCB9IGZyb20gJy4vaTE4bi9pMThuLnRzJztcblxuZW51bSBQYXRoU2V0dGluZ1R5cGUge1xuICBFeGNsdWRlID0gJ0V4Y2x1ZGUnLFxuICBJbmNsdWRlID0gJ0luY2x1ZGUnXG59XG5cbmNsYXNzIFBhdGhTZXR0aW5nIHtcbiAgcHVibGljIGdldCBhcnJheSgpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuX2FycmF5O1xuICB9XG5cbiAgcHVibGljIHNldCBhcnJheSh2YWx1ZTogc3RyaW5nW10pIHtcbiAgICB0aGlzLl9hcnJheSA9IHZhbHVlLmZpbHRlcihCb29sZWFuKTtcbiAgICB0aGlzLnJlZ0V4cCA9IG1ha2VSZWdFeHAodGhpcy5fYXJyYXksIHRoaXMuZGVmYXVsdFJlZ0V4cCkgPz8gdGhpcy5kZWZhdWx0UmVnRXhwO1xuICB9XG5cbiAgcHJpdmF0ZSBfYXJyYXk6IHN0cmluZ1tdID0gW107XG4gIHByaXZhdGUgcmVhZG9ubHkgZGVmYXVsdFJlZ0V4cDogUmVnRXhwO1xuICBwcml2YXRlIHJlZ0V4cDogUmVnRXhwO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IHR5cGU6IFBhdGhTZXR0aW5nVHlwZSkge1xuICAgIHRoaXMuZGVmYXVsdFJlZ0V4cCA9IGdldERlZmF1bHRSZWdFeHAodHlwZSk7XG4gICAgdGhpcy5yZWdFeHAgPSB0aGlzLmRlZmF1bHRSZWdFeHA7XG4gIH1cblxuICBwdWJsaWMgaXNQYXRoSWdub3JlZChwYXRoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAvKiB2OCBpZ25vcmUgc3RhcnQgLS0gQWxsIGJyYW5jaGVzIGNvdmVyZWQgYnV0IHY4IHJlcG9ydHMgc3dpdGNoIGFzIHBhcnRpYWwuICovXG4gICAgc3dpdGNoICh0aGlzLnR5cGUpIHtcbiAgICAgIC8qIHY4IGlnbm9yZSBzdG9wICovXG4gICAgICBjYXNlIFBhdGhTZXR0aW5nVHlwZS5FeGNsdWRlOiB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlZ0V4cC50ZXN0KHBhdGgpO1xuICAgICAgfVxuICAgICAgY2FzZSBQYXRoU2V0dGluZ1R5cGUuSW5jbHVkZToge1xuICAgICAgICByZXR1cm4gIXRoaXMucmVnRXhwLnRlc3QocGF0aCk7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIC8qIHY4IGlnbm9yZSBzdGFydCAtLSBFeGhhdXN0aXZlIHN3aXRjaCBndWFyZC4gKi9cbiAgICAgICAgYXNzZXJ0TmV2ZXIodGhpcy50eXBlKTtcbiAgICAgIH1cbiAgICAgICAgLyogdjggaWdub3JlIHN0b3AgKi9cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBBIGNsYXNzIGZvciBtYW5hZ2luZyBpbmNsdWRlL2V4Y2x1ZGUgcGF0aCBzZXR0aW5ncy5cbiAqL1xuZXhwb3J0IGNsYXNzIFBhdGhTZXR0aW5ncyB7XG4gIC8qKlxuICAgKiBHZXRzIHRoZSBleGNsdWRlIHBhdGhzLlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgZXhjbHVkZSBwYXRocy5cbiAgICovXG4gIHB1YmxpYyBnZXQgZXhjbHVkZVBhdGhzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5fZXhjbHVkZVBhdGhzLmFycmF5O1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGV4Y2x1ZGUgcGF0aHMuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBleGNsdWRlIHBhdGhzLlxuICAgKi9cbiAgcHVibGljIHNldCBleGNsdWRlUGF0aHModmFsdWU6IHN0cmluZ1tdKSB7XG4gICAgdGhpcy5fZXhjbHVkZVBhdGhzLmFycmF5ID0gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgaW5jbHVkZSBwYXRocy5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGluY2x1ZGUgcGF0aHMuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGluY2x1ZGVQYXRocygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuX2luY2x1ZGVQYXRocy5hcnJheTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBpbmNsdWRlIHBhdGhzLlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgaW5jbHVkZSBwYXRocy5cbiAgICovXG4gIHB1YmxpYyBzZXQgaW5jbHVkZVBhdGhzKHZhbHVlOiBzdHJpbmdbXSkge1xuICAgIHRoaXMuX2luY2x1ZGVQYXRocy5hcnJheSA9IHZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfZXhjbHVkZVBhdGhzID0gbmV3IFBhdGhTZXR0aW5nKFBhdGhTZXR0aW5nVHlwZS5FeGNsdWRlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfaW5jbHVkZVBhdGhzID0gbmV3IFBhdGhTZXR0aW5nKFBhdGhTZXR0aW5nVHlwZS5JbmNsdWRlKTtcblxuICAvKipcbiAgICogQ2hlY2tzIGlmIGEgcGF0aCBpcyBpZ25vcmVkIGJ5IHRoZSBpbmNsdWRlL2V4Y2x1ZGUgcGF0aCBzZXR0aW5ncy5cbiAgICpcbiAgICogQHBhcmFtIHBhdGggLSBUaGUgcGF0aCB0byBjaGVjay5cbiAgICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBwYXRoIGlzIGlnbm9yZWQsIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICAgKi9cbiAgcHVibGljIGlzUGF0aElnbm9yZWQocGF0aDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2luY2x1ZGVQYXRocy5pc1BhdGhJZ25vcmVkKHBhdGgpIHx8IHRoaXMuX2V4Y2x1ZGVQYXRocy5pc1BhdGhJZ25vcmVkKHBhdGgpO1xuICB9XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIGluY2x1ZGUvZXhjbHVkZSBwYXRoIGVudHJpZXMsIHJlcG9ydGluZyB0aGUgZmlyc3QgZW50cnkgdGhhdCBpcyBub3QgYSBwYXJzZWFibGUgcmVndWxhciBleHByZXNzaW9uLlxuICpcbiAqIEFuIGVudHJ5IHRoYXQgc3RhcnRzIGFuZCBlbmRzIHdpdGggYC9gIGlzIGEgcmVndWxhciBleHByZXNzaW9uIGxpdGVyYWw7IGV2ZXJ5IG90aGVyIGVudHJ5IGlzIGEgcGxhaW4gcGF0aCBhbmQgaXNcbiAqIGFsd2F5cyB2YWxpZC4gQW4gaW52YWxpZCBlbnRyeSBkb2VzIG5vdCB0aHJvdyB3aGVuIGFzc2lnbmVkIHRvIHtAbGluayBQYXRoU2V0dGluZ3N9IOKAlCB0aGUgd2hvbGUgbGlzdCBmYWxscyBiYWNrIHRvXG4gKiBpdHMgZGVmYXVsdCBwYXR0ZXJuIGluc3RlYWQg4oCUIHNvIHRoaXMgdmFsaWRhdG9yIGlzIHdoYXQgc3VyZmFjZXMgdGhlIHByb2JsZW0gdG8gdGhlIHVzZXIuXG4gKlxuICogQHBhcmFtIHBhdGhzIC0gVGhlIHBhdGggZW50cmllcyB0byB2YWxpZGF0ZS5cbiAqIEByZXR1cm5zIEEgbWVzc2FnZSBuYW1pbmcgdGhlIGZpcnN0IGludmFsaWQgZW50cnksIG9yIG5vdGhpbmcgd2hlbiBldmVyeSBlbnRyeSBpcyB2YWxpZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhdGhzVmFsaWRhdG9yKHBhdGhzOiBzdHJpbmdbXSk6IE1heWJlUmV0dXJuPHN0cmluZz4ge1xuICBmb3IgKGNvbnN0IHBhdGggb2YgcGF0aHMpIHtcbiAgICBpZiAocGF0aC5zdGFydHNXaXRoKCcvJykgJiYgcGF0aC5lbmRzV2l0aCgnLycpICYmICFpc1ZhbGlkUmVnRXhwKHBhdGguc2xpY2UoMSwgLTEpKSkge1xuICAgICAgcmV0dXJuIHQoKCQpID0+ICQub2JzaWRpYW5EZXZVdGlscy5wYXRoU2V0dGluZ3MuaW52YWxpZFJlZ3VsYXJFeHByZXNzaW9uLCB7IHJlZ0V4cDogcGF0aCB9KTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0RGVmYXVsdFJlZ0V4cCh0eXBlOiBQYXRoU2V0dGluZ1R5cGUpOiBSZWdFeHAge1xuICAvKiB2OCBpZ25vcmUgc3RhcnQgLS0gQWxsIGJyYW5jaGVzIGNvdmVyZWQgYnV0IHY4IHJlcG9ydHMgc3dpdGNoIGFzIHBhcnRpYWwuICovXG4gIHN3aXRjaCAodHlwZSkge1xuICAgIC8qIHY4IGlnbm9yZSBzdG9wICovXG4gICAgY2FzZSBQYXRoU2V0dGluZ1R5cGUuRXhjbHVkZToge1xuICAgICAgcmV0dXJuIE5FVkVSX01BVENIX1JFR19FWFA7XG4gICAgfVxuICAgIGNhc2UgUGF0aFNldHRpbmdUeXBlLkluY2x1ZGU6IHtcbiAgICAgIHJldHVybiBBTFdBWVNfTUFUQ0hfUkVHX0VYUDtcbiAgICB9XG4gICAgZGVmYXVsdDoge1xuICAgICAgLyogdjggaWdub3JlIHN0YXJ0IC0tIEV4aGF1c3RpdmUgc3dpdGNoIGd1YXJkLiAqL1xuICAgICAgYXNzZXJ0TmV2ZXIodHlwZSk7XG4gICAgfVxuICAgICAgLyogdjggaWdub3JlIHN0b3AgKi9cbiAgfVxufVxuXG5mdW5jdGlvbiBtYWtlUmVnRXhwKHBhdGhzOiBzdHJpbmdbXSwgZGVmYXVsdFJlZ0V4cDogUmVnRXhwKTogbnVsbCB8IFJlZ0V4cCB7XG4gIGlmIChwYXRocy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gZGVmYXVsdFJlZ0V4cDtcbiAgfVxuXG4gIGNvbnN0IHJlZ0V4cFN0cmluZ0NvbWJpbmVkID0gcGF0aHMubWFwKChwYXRoKSA9PiB7XG4gICAgaWYgKHBhdGggPT09ICcvJykge1xuICAgICAgcmV0dXJuIGRlZmF1bHRSZWdFeHAuc291cmNlO1xuICAgIH1cblxuICAgIGlmIChwYXRoLnN0YXJ0c1dpdGgoJy8nKSAmJiBwYXRoLmVuZHNXaXRoKCcvJykpIHtcbiAgICAgIHJldHVybiBwYXRoLnNsaWNlKDEsIC0xKTtcbiAgICB9XG5cbiAgICBwYXRoID0gdHJpbUVuZCh7XG4gICAgICAkc3RyaW5nOiBwYXRoLFxuICAgICAgc3VmZml4OiAnLydcbiAgICB9KTtcbiAgICByZXR1cm4gYF4ke2VzY2FwZVJlZ0V4cChwYXRoKX0oL3wkKWA7XG4gIH0pXG4gICAgLm1hcCgocmVnRXhwU3RyaW5nKSA9PiBgKCR7cmVnRXhwU3RyaW5nfSlgKVxuICAgIC5qb2luKCd8Jyk7XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gbmV3IFJlZ0V4cChyZWdFeHBTdHJpbmdDb21iaW5lZCk7XG4gIH0gY2F0Y2gge1xuICAgIC8vIEEgcGFydGlhbGx5IHR5cGVkIHJlZ2V4IGxpdGVyYWwgKGAvXkluYm94XFwvYCkgaXMgbm90IHBhcnNlYWJsZS5cbiAgICAvLyBSZXBvcnQgaXQgaW5zdGVhZCBvZiB0aHJvd2luZyBmcm9tIGEgc2V0dGluZ3Mgc2V0dGVyLCB3aGljaCB3b3VsZCBicmVhayBib3RoIHRoZSBzZXR0aW5ncyBVSSBhbmQgdGhlIHNhdmUgcGF0aC5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FB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
|
|
430
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9wYXRoLXNldHRpbmdzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBUaGlzIG1vZHVsZSBwcm92aWRlcyBjbGFzc2VzIGFuZCB2YWxpZGF0b3JzIGZvciBtYW5hZ2luZyBpbmNsdWRlL2V4Y2x1ZGUgcGF0aCBzZXR0aW5ncy5cbiAqXG4gKiBBbiBlbnRyeSB0YWtlcyBvbmUgb2YgdGhyZWUgZm9ybXMsIGFuZCBldmVyeSBmb3JtIG1hdGNoZXMgY2FzZS1pbnNlbnNpdGl2ZWx5OlxuICpcbiAqIC0gQSByZWd1bGFyIGV4cHJlc3Npb24gbGl0ZXJhbCwgYC9wYXR0ZXJuL2ZsYWdzYC4gSXRzIG93biBmbGFncyBhcmUgaG9ub3VyZWQgYW5kIGBpYCBpcyBhbHdheXMgYWRkZWQuIGBnYCBhbmQgYHlgIGFyZVxuICogICBhY2NlcHRlZCBhbmQgZHJvcHBlZCwgc2luY2UgdGhleSBtYWtlIGBSZWdFeHAudGVzdGAgc3RhdGVmdWwgYW5kIHNheSBub3RoaW5nIGFib3V0IHdoaWNoIHBhdGhzIG1hdGNoLlxuICogLSBBIGdsb2IsIGFuIGVudHJ5IGhvbGRpbmcgYW4gdW5lc2NhcGVkIGAqYCwgYD9gIG9yIGBbYC4gYCpgIG1hdGNoZXMgd2l0aGluIG9uZSBwYXRoIHNlZ21lbnQsIGAqKmAgYWNyb3NzIHNlZ21lbnRzLFxuICogICBgP2Agb25lIGNoYXJhY3RlciBhbmQgYFthYmNdYCAvIGBbIWFiY11gIGEgY2hhcmFjdGVyIGNsYXNzLiBBIGdsb2Igd2l0aCBubyBgL2AgbWF0Y2hlcyBhIGZpbGUgb3IgZm9sZGVyIE5BTUUgYXQgYW55XG4gKiAgIGRlcHRoLCBhcyBpbiBgLmdpdGlnbm9yZWAgKGAqLnBkZmAgbWF0Y2hlcyBgYS9iL2MucGRmYCk7IG9uZSB3aXRoIGEgYC9gIGlzIGFuY2hvcmVkIHRvIHRoZSB2YXVsdCByb290XG4gKiAgIChgQXR0YWNobWVudHMvKi5wZGZgKS4gQSB0cmFpbGluZyBgL2AgbWFrZXMgaXQgbWF0Y2ggZm9sZGVycyBvbmx5LlxuICogLSBBIHBsYWluIHBhdGgsIGV2ZXJ5IG90aGVyIGVudHJ5LCB3aGljaCBtYXRjaGVzIHRoYXQgcGF0aCBhbmQgZXZlcnl0aGluZyBpbnNpZGUgaXQuIEEgbGl0ZXJhbCBgKmAsIGA/YCwgYFtgIG9yIGBcXGAgaW5cbiAqICAgYSBwbGFpbiBwYXRoIG9yIGEgZ2xvYiBpcyB3cml0dGVuIGVzY2FwZWQgKGBcXCpgKS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IE1heWJlUmV0dXJuIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3R5cGUnO1xuXG5pbXBvcnQgeyBlc2NhcGVSZWdFeHAgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvcmVnLWV4cCc7XG5pbXBvcnQgeyBhc3NlcnROZXZlciB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi90eXBlLWd1YXJkcyc7XG5cbmltcG9ydCB7IHQgfSBmcm9tICcuL2kxOG4vaTE4bi50cyc7XG5cbmVudW0gUGF0aFNldHRpbmdUeXBlIHtcbiAgRXhjbHVkZSA9ICdFeGNsdWRlJyxcbiAgSW5jbHVkZSA9ICdJbmNsdWRlJ1xufVxuXG50eXBlIENoYXJhY3RlckNsYXNzU291cmNlUmVzdWx0ID0gSW52YWxpZFNvdXJjZVJlc3VsdCB8IFZhbGlkQ2hhcmFjdGVyQ2xhc3NTb3VyY2VSZXN1bHQ7XG5cbmludGVyZmFjZSBDb21waWxlUmVzdWx0IHtcbiAgcmVhZG9ubHkgZXJyb3I/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IG1hdGNoZXI/OiBQYXRoTWF0Y2hlcjtcbn1cblxudHlwZSBHbG9iU291cmNlUmVzdWx0ID0gSW52YWxpZFNvdXJjZVJlc3VsdCB8IFZhbGlkR2xvYlNvdXJjZVJlc3VsdDtcblxuaW50ZXJmYWNlIEludmFsaWRTb3VyY2VSZXN1bHQge1xuICByZWFkb25seSBlcnJvcjogc3RyaW5nO1xuICByZWFkb25seSBpc1ZhbGlkOiBmYWxzZTtcbn1cblxuaW50ZXJmYWNlIFBhdGhNYXRjaGVyIHtcbiAgaXNNYXRjaDogKHBhdGg6IHN0cmluZywgaXNGb2xkZXI6IGJvb2xlYW4pID0+IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBWYWxpZENoYXJhY3RlckNsYXNzU291cmNlUmVzdWx0IGV4dGVuZHMgVmFsaWRHbG9iU291cmNlUmVzdWx0IHtcbiAgcmVhZG9ubHkgZW5kSW5kZXg6IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIFZhbGlkR2xvYlNvdXJjZVJlc3VsdCB7XG4gIHJlYWRvbmx5IGlzVmFsaWQ6IHRydWU7XG4gIHJlYWRvbmx5IHNvdXJjZTogc3RyaW5nO1xufVxuXG5jb25zdCBSRUdfRVhQX0VOVFJZX1JFR19FWFAgPSAvXlxcLy4qXFwvW2Etel0qJC9zO1xuY29uc3QgQ0FTRV9JTlNFTlNJVElWRV9GTEFHID0gJ2knO1xuY29uc3QgU1RBVEVGVUxfRkxBR1NfUkVHX0VYUCA9IC9bZ3ldL2c7XG5jb25zdCBHTE9CX0NIQVJBQ1RFUlMgPSBuZXcgU2V0KFsnPycsICdbJywgJyonXSk7XG5jb25zdCBHTE9CU1RBUiA9ICcqKic7XG5jb25zdCBHTE9CU1RBUl9GT0xERVJTID0gJyoqLyc7XG5cbmNvbnN0IEFMV0FZU19NQVRDSEVSOiBQYXRoTWF0Y2hlciA9IHtcbiAgaXNNYXRjaDogKCkgPT4gdHJ1ZVxufTtcblxuY29uc3QgTkVWRVJfTUFUQ0hFUjogUGF0aE1hdGNoZXIgPSB7XG4gIGlzTWF0Y2g6ICgpID0+IGZhbHNlXG59O1xuXG5jbGFzcyBQYXRoU2V0dGluZyB7XG4gIHB1YmxpYyBnZXQgYXJyYXkoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLl9hcnJheTtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgYXJyYXkodmFsdWU6IHN0cmluZ1tdKSB7XG4gICAgdGhpcy5fYXJyYXkgPSB2YWx1ZS5maWx0ZXIoQm9vbGVhbik7XG4gICAgdGhpcy5tYXRjaGVycyA9IG1ha2VNYXRjaGVycyh0aGlzLl9hcnJheSwgdGhpcy5kZWZhdWx0TWF0Y2hlcikgPz8gW3RoaXMuZGVmYXVsdE1hdGNoZXJdO1xuICB9XG5cbiAgcHJpdmF0ZSBfYXJyYXk6IHN0cmluZ1tdID0gW107XG4gIHByaXZhdGUgcmVhZG9ubHkgZGVmYXVsdE1hdGNoZXI6IFBhdGhNYXRjaGVyO1xuICBwcml2YXRlIG1hdGNoZXJzOiBQYXRoTWF0Y2hlcltdO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IHR5cGU6IFBhdGhTZXR0aW5nVHlwZSkge1xuICAgIHRoaXMuZGVmYXVsdE1hdGNoZXIgPSBnZXREZWZhdWx0TWF0Y2hlcih0eXBlKTtcbiAgICB0aGlzLm1hdGNoZXJzID0gW3RoaXMuZGVmYXVsdE1hdGNoZXJdO1xuICB9XG5cbiAgcHVibGljIGlzUGF0aElnbm9yZWQocGF0aDogc3RyaW5nLCBpc0ZvbGRlcjogYm9vbGVhbik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGlzTWF0Y2ggPSB0aGlzLm1hdGNoZXJzLnNvbWUoKG1hdGNoZXIpID0+IG1hdGNoZXIuaXNNYXRjaChwYXRoLCBpc0ZvbGRlcikpO1xuICAgIC8qIHY4IGlnbm9yZSBzdGFydCAtLSBBbGwgYnJhbmNoZXMgY292ZXJlZCBidXQgdjggcmVwb3J0cyBzd2l0Y2ggYXMgcGFydGlhbC4gKi9cbiAgICBzd2l0Y2ggKHRoaXMudHlwZSkge1xuICAgICAgLyogdjggaWdub3JlIHN0b3AgKi9cbiAgICAgIGNhc2UgUGF0aFNldHRpbmdUeXBlLkV4Y2x1ZGU6IHtcbiAgICAgICAgcmV0dXJuIGlzTWF0Y2g7XG4gICAgICB9XG4gICAgICBjYXNlIFBhdGhTZXR0aW5nVHlwZS5JbmNsdWRlOiB7XG4gICAgICAgIHJldHVybiAhaXNNYXRjaDtcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgLyogdjggaWdub3JlIHN0YXJ0IC0tIEV4aGF1c3RpdmUgc3dpdGNoIGd1YXJkLiAqL1xuICAgICAgICBhc3NlcnROZXZlcih0aGlzLnR5cGUpO1xuICAgICAgfVxuICAgICAgICAvKiB2OCBpZ25vcmUgc3RvcCAqL1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEEgY2xhc3MgZm9yIG1hbmFnaW5nIGluY2x1ZGUvZXhjbHVkZSBwYXRoIHNldHRpbmdzLlxuICpcbiAqIFNlZSB0aGUgbW9kdWxlIGRvY3VtZW50YXRpb24gZm9yIHRoZSBlbnRyeSBzeW50YXg6IHBsYWluIHBhdGhzLCBnbG9icyBhbmQgcmVndWxhciBleHByZXNzaW9uIGxpdGVyYWxzLCBhbGwgbWF0Y2hlZFxuICogY2FzZS1pbnNlbnNpdGl2ZWx5LlxuICovXG5leHBvcnQgY2xhc3MgUGF0aFNldHRpbmdzIHtcbiAgLyoqXG4gICAqIEdldHMgdGhlIGV4Y2x1ZGUgcGF0aHMuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBleGNsdWRlIHBhdGhzLlxuICAgKi9cbiAgcHVibGljIGdldCBleGNsdWRlUGF0aHMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLl9leGNsdWRlUGF0aHMuYXJyYXk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgZXhjbHVkZSBwYXRocy5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gVGhlIGV4Y2x1ZGUgcGF0aHMuXG4gICAqL1xuICBwdWJsaWMgc2V0IGV4Y2x1ZGVQYXRocyh2YWx1ZTogc3RyaW5nW10pIHtcbiAgICB0aGlzLl9leGNsdWRlUGF0aHMuYXJyYXkgPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBpbmNsdWRlIHBhdGhzLlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgaW5jbHVkZSBwYXRocy5cbiAgICovXG4gIHB1YmxpYyBnZXQgaW5jbHVkZVBhdGhzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5faW5jbHVkZVBhdGhzLmFycmF5O1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGluY2x1ZGUgcGF0aHMuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBpbmNsdWRlIHBhdGhzLlxuICAgKi9cbiAgcHVibGljIHNldCBpbmNsdWRlUGF0aHModmFsdWU6IHN0cmluZ1tdKSB7XG4gICAgdGhpcy5faW5jbHVkZVBhdGhzLmFycmF5ID0gdmFsdWU7XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IF9leGNsdWRlUGF0aHMgPSBuZXcgUGF0aFNldHRpbmcoUGF0aFNldHRpbmdUeXBlLkV4Y2x1ZGUpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9pbmNsdWRlUGF0aHMgPSBuZXcgUGF0aFNldHRpbmcoUGF0aFNldHRpbmdUeXBlLkluY2x1ZGUpO1xuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgYSBwYXRoIGlzIGlnbm9yZWQgYnkgdGhlIGluY2x1ZGUvZXhjbHVkZSBwYXRoIHNldHRpbmdzLlxuICAgKlxuICAgKiBAcGFyYW0gcGF0aCAtIFRoZSBwYXRoIHRvIGNoZWNrLlxuICAgKiBAcGFyYW0gaXNGb2xkZXIgLSBXaGV0aGVyIHRoZSBwYXRoIGlzIGEgZm9sZGVyLiBPbmx5IGEgZm9sZGVyLW9ubHkgZ2xvYiAob25lIGVuZGluZyBpbiBgL2ApIHJlYWRzIGl0OiBzdWNoIGEgZ2xvYlxuICAgKiBhbHdheXMgbWF0Y2hlcyB0aGUgY29udGVudHMgb2YgYSBtYXRjaGluZyBmb2xkZXIsIGFuZCBtYXRjaGVzIHRoZSBmb2xkZXIgaXRzZWxmIG9ubHkgd2hlbiB0aGlzIGlzIGB0cnVlYC5cbiAgICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBwYXRoIGlzIGlnbm9yZWQsIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICAgKi9cbiAgcHVibGljIGlzUGF0aElnbm9yZWQocGF0aDogc3RyaW5nLCBpc0ZvbGRlciA9IGZhbHNlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2luY2x1ZGVQYXRocy5pc1BhdGhJZ25vcmVkKHBhdGgsIGlzRm9sZGVyKSB8fCB0aGlzLl9leGNsdWRlUGF0aHMuaXNQYXRoSWdub3JlZChwYXRoLCBpc0ZvbGRlcik7XG4gIH1cbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgaW5jbHVkZS9leGNsdWRlIHBhdGggZW50cmllcywgcmVwb3J0aW5nIHRoZSBmaXJzdCBlbnRyeSB0aGF0IGlzIG5vdCBhIHZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbiBvciBnbG9iLlxuICpcbiAqIEFuIGludmFsaWQgZW50cnkgZG9lcyBub3QgdGhyb3cgd2hlbiBhc3NpZ25lZCB0byB7QGxpbmsgUGF0aFNldHRpbmdzfSDigJQgdGhlIHdob2xlIGxpc3QgZmFsbHMgYmFjayB0byBpdHMgZGVmYXVsdFxuICogcGF0dGVybiBpbnN0ZWFkIOKAlCBzbyB0aGlzIHZhbGlkYXRvciBpcyB3aGF0IHN1cmZhY2VzIHRoZSBwcm9ibGVtIHRvIHRoZSB1c2VyLiBUaGUgbWVzc2FnZSBuYW1lcyB0aGUgZW50cnkgYW5kIHRoZVxuICogcmVhc29uIGl0IGlzIGludmFsaWQuXG4gKlxuICogQHBhcmFtIHBhdGhzIC0gVGhlIHBhdGggZW50cmllcyB0byB2YWxpZGF0ZS5cbiAqIEByZXR1cm5zIEEgbWVzc2FnZSBuYW1pbmcgdGhlIGZpcnN0IGludmFsaWQgZW50cnksIG9yIG5vdGhpbmcgd2hlbiBldmVyeSBlbnRyeSBpcyB2YWxpZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhdGhzVmFsaWRhdG9yKHBhdGhzOiBzdHJpbmdbXSk6IE1heWJlUmV0dXJuPHN0cmluZz4ge1xuICBmb3IgKGNvbnN0IHBhdGggb2YgcGF0aHMpIHtcbiAgICBjb25zdCB7IGVycm9yIH0gPSBjb21waWxlRW50cnkocGF0aCwgTkVWRVJfTUFUQ0hFUik7XG4gICAgaWYgKGVycm9yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBlcnJvcjtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tcGlsZUVudHJ5KGVudHJ5OiBzdHJpbmcsIGRlZmF1bHRNYXRjaGVyOiBQYXRoTWF0Y2hlcik6IENvbXBpbGVSZXN1bHQge1xuICBpZiAoZW50cnkgPT09ICcvJykge1xuICAgIHJldHVybiB7IG1hdGNoZXI6IGRlZmF1bHRNYXRjaGVyIH07XG4gIH1cblxuICBpZiAoUkVHX0VYUF9FTlRSWV9SRUdfRVhQLnRlc3QoZW50cnkpKSB7XG4gICAgY29uc3QgZmxhZ3NTZXBhcmF0b3JJbmRleCA9IGVudHJ5Lmxhc3RJbmRleE9mKCcvJyk7XG4gICAgcmV0dXJuIGNvbXBpbGVSZWdFeHBFbnRyeShlbnRyeSwgZW50cnkuc2xpY2UoMSwgZmxhZ3NTZXBhcmF0b3JJbmRleCksIGVudHJ5LnNsaWNlKGZsYWdzU2VwYXJhdG9ySW5kZXggKyAxKSk7XG4gIH1cblxuICByZXR1cm4gaGFzVW5lc2NhcGVkR2xvYkNoYXJhY3RlcihlbnRyeSkgPyBjb21waWxlR2xvYkVudHJ5KGVudHJ5KSA6IGNvbXBpbGVQbGFpblBhdGhFbnRyeShlbnRyeSk7XG59XG5cbmZ1bmN0aW9uIGNvbXBpbGVHbG9iRW50cnkoZ2xvYjogc3RyaW5nKTogQ29tcGlsZVJlc3VsdCB7XG4gIGNvbnN0IGlzRm9sZGVyT25seSA9IGdsb2IuZW5kc1dpdGgoJy8nKTtcbiAgY29uc3QgYm9keSA9IGdsb2IucmVwbGFjZSgvXFwvKyQvLCAnJyk7XG4gIGNvbnN0IGdsb2JTb3VyY2UgPSBnZXRHbG9iU291cmNlKGJvZHkpO1xuICBpZiAoIWdsb2JTb3VyY2UuaXNWYWxpZCkge1xuICAgIHJldHVybiB7XG4gICAgICBlcnJvcjogdCgoJCkgPT4gJC5vYnNpZGlhbkRldlV0aWxzLnBhdGhTZXR0aW5ncy5pbnZhbGlkR2xvYiwgeyBnbG9iLCByZWFzb246IGdsb2JTb3VyY2UuZXJyb3IgfSlcbiAgICB9O1xuICB9XG4gIGNvbnN0IHsgc291cmNlIH0gPSBnbG9iU291cmNlO1xuXG4gIGNvbnN0IHByZWZpeCA9IGJvZHkuaW5jbHVkZXMoJy8nKSA/ICdeJyA6ICcoPzpefC8pJztcblxuICBsZXQgc2VsZlJlZ0V4cDogUmVnRXhwO1xuICBsZXQgY29udGVudHNSZWdFeHA6IFJlZ0V4cDtcbiAgdHJ5IHtcbiAgICBzZWxmUmVnRXhwID0gbmV3IFJlZ0V4cChgJHtwcmVmaXh9JHtzb3VyY2V9JGAsIENBU0VfSU5TRU5TSVRJVkVfRkxBRyk7XG4gICAgY29udGVudHNSZWdFeHAgPSBuZXcgUmVnRXhwKGAke3ByZWZpeH0ke3NvdXJjZX0vYCwgQ0FTRV9JTlNFTlNJVElWRV9GTEFHKTtcbiAgfSBjYXRjaCAoZXJyb3JfKSB7XG4gICAgLy8gQW4gb3V0LW9mLW9yZGVyIGNoYXJhY3RlciBjbGFzcyByYW5nZSAoYFt6LWFdYCkgaXMgdGhlIG9uZSBpbnZhbGlkIGdsb2Igb25seSB0aGUgZW5naW5lIGNhbiB0ZWxsLlxuICAgIHJldHVybiB7XG4gICAgICBlcnJvcjogdCgoJCkgPT4gJC5vYnNpZGlhbkRldlV0aWxzLnBhdGhTZXR0aW5ncy5pbnZhbGlkR2xvYiwgeyBnbG9iLCByZWFzb246IGdldFJlZ0V4cEVycm9yUmVhc29uKGVycm9yXykgfSlcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBtYXRjaGVyOiB7XG4gICAgICBpc01hdGNoOiAocGF0aCwgaXNGb2xkZXIpID0+IGNvbnRlbnRzUmVnRXhwLnRlc3QocGF0aCkgfHwgKChpc0ZvbGRlciB8fCAhaXNGb2xkZXJPbmx5KSAmJiBzZWxmUmVnRXhwLnRlc3QocGF0aCkpXG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBjb21waWxlUGxhaW5QYXRoRW50cnkocGF0aDogc3RyaW5nKTogQ29tcGlsZVJlc3VsdCB7XG4gIGNvbnN0IHVuZXNjYXBlZFBhdGggPSBwYXRoLnJlcGxhY2VBbGwoL1xcXFwoPzxjaGFyYWN0ZXI+LikvZ3MsICckPGNoYXJhY3Rlcj4nKS5yZXBsYWNlKC9cXC8rJC8sICcnKTtcbiAgY29uc3QgcmVnRXhwID0gbmV3IFJlZ0V4cChgXiR7ZXNjYXBlUmVnRXhwKHVuZXNjYXBlZFBhdGgpfSg/Oi98JClgLCBDQVNFX0lOU0VOU0lUSVZFX0ZMQUcpO1xuICByZXR1cm4ge1xuICAgIG1hdGNoZXI6IHtcbiAgICAgIGlzTWF0Y2g6IChwYXRoVG9DaGVjaykgPT4gcmVnRXhwLnRlc3QocGF0aFRvQ2hlY2spXG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBjb21waWxlUmVnRXhwRW50cnkoZW50cnk6IHN0cmluZywgc291cmNlOiBzdHJpbmcsIGZsYWdzOiBzdHJpbmcpOiBDb21waWxlUmVzdWx0IHtcbiAgbGV0IHJlZ0V4cDogUmVnRXhwO1xuICB0cnkge1xuICAgIC8vIENvbXBpbGVkIHdpdGggdGhlIGZsYWdzIGFzIHdyaXR0ZW4gZmlyc3QsIHNvIGFuIHVua25vd24gb3IgcmVwZWF0ZWQgZmxhZyBpcyByZXBvcnRlZCByYXRoZXIgdGhhbiBpZ25vcmVkLlxuICAgIG5ldyBSZWdFeHAoc291cmNlLCBmbGFncyk7XG4gICAgY29uc3QgZWZmZWN0aXZlRmxhZ3MgPSBmbGFncy5yZXBsYWNlQWxsKFNUQVRFRlVMX0ZMQUdTX1JFR19FWFAsICcnKTtcbiAgICByZWdFeHAgPSBuZXcgUmVnRXhwKHNvdXJjZSwgZWZmZWN0aXZlRmxhZ3MuaW5jbHVkZXMoQ0FTRV9JTlNFTlNJVElWRV9GTEFHKSA/IGVmZmVjdGl2ZUZsYWdzIDogYCR7ZWZmZWN0aXZlRmxhZ3N9JHtDQVNFX0lOU0VOU0lUSVZFX0ZMQUd9YCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgLy8gQSBwYXJ0aWFsbHkgdHlwZWQgcmVnZXggbGl0ZXJhbCAoYC9eSW5ib3hcXC9gKSBpcyBub3QgcGFyc2VhYmxlLlxuICAgIC8vIFJlcG9ydCBpdCBpbnN0ZWFkIG9mIHRocm93aW5nIGZyb20gYSBzZXR0aW5ncyBzZXR0ZXIsIHdoaWNoIHdvdWxkIGJyZWFrIGJvdGggdGhlIHNldHRpbmdzIFVJIGFuZCB0aGUgc2F2ZSBwYXRoLlxuICAgIHJldHVybiB7XG4gICAgICBlcnJvcjogdCgoJCkgPT4gJC5vYnNpZGlhbkRldlV0aWxzLnBhdGhTZXR0aW5ncy5pbnZhbGlkUmVndWxhckV4cHJlc3Npb24sIHsgcmVhc29uOiBnZXRSZWdFeHBFcnJvclJlYXNvbihlcnJvciksIHJlZ0V4cDogZW50cnkgfSlcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBtYXRjaGVyOiB7XG4gICAgICBpc01hdGNoOiAocGF0aCkgPT4gcmVnRXhwLnRlc3QocGF0aClcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIGVzY2FwZUNoYXJhY3RlckNsYXNzQ2hhcmFjdGVyKGNoYXJhY3Rlcjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIC9bLVxcXFxcXF1eW10vLnRlc3QoY2hhcmFjdGVyKSA/IGBcXFxcJHtjaGFyYWN0ZXJ9YCA6IGNoYXJhY3Rlcjtcbn1cblxuZnVuY3Rpb24gZ2V0Q2hhcmFjdGVyQ2xhc3NTb3VyY2UoZ2xvYjogc3RyaW5nLCBvcGVuSW5kZXg6IG51bWJlcik6IENoYXJhY3RlckNsYXNzU291cmNlUmVzdWx0IHtcbiAgbGV0IGluZGV4ID0gb3BlbkluZGV4ICsgMTtcbiAgbGV0IGlzTmVnYXRlZCA9IGZhbHNlO1xuICBpZiAoZ2xvYltpbmRleF0gPT09ICchJyB8fCBnbG9iW2luZGV4XSA9PT0gJ14nKSB7XG4gICAgaXNOZWdhdGVkID0gdHJ1ZTtcbiAgICBpbmRleCsrO1xuICB9XG5cbiAgbGV0IGNvbnRlbnQgPSAnJztcbiAgaWYgKGdsb2JbaW5kZXhdID09PSAnXScpIHtcbiAgICBjb250ZW50ICs9IFN0cmluZy5yYXdgXFxdYDtcbiAgICBpbmRleCsrO1xuICB9XG5cbiAgd2hpbGUgKGluZGV4IDwgZ2xvYi5sZW5ndGgpIHtcbiAgICBjb25zdCBjaGFyYWN0ZXIgPSBnbG9iLmNoYXJBdChpbmRleCk7XG4gICAgaWYgKGNoYXJhY3RlciA9PT0gJ10nKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBlbmRJbmRleDogaW5kZXggKyAxLFxuICAgICAgICBpc1ZhbGlkOiB0cnVlLFxuICAgICAgICBzb3VyY2U6IGBbJHtpc05lZ2F0ZWQgPyAnXi8nIDogJyd9JHtjb250ZW50fV1gXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChjaGFyYWN0ZXIgPT09ICdcXFxcJykge1xuICAgICAgaW5kZXgrKztcbiAgICAgIGlmIChpbmRleCA+PSBnbG9iLmxlbmd0aCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNvbnRlbnQgKz0gZXNjYXBlQ2hhcmFjdGVyQ2xhc3NDaGFyYWN0ZXIoZ2xvYi5jaGFyQXQoaW5kZXgpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29udGVudCArPSBjaGFyYWN0ZXIgPT09ICctJyA/IGNoYXJhY3RlciA6IGVzY2FwZUNoYXJhY3RlckNsYXNzQ2hhcmFjdGVyKGNoYXJhY3Rlcik7XG4gICAgfVxuICAgIGluZGV4Kys7XG4gIH1cblxuICByZXR1cm4geyBlcnJvcjogdCgoJCkgPT4gJC5vYnNpZGlhbkRldlV0aWxzLnBhdGhTZXR0aW5ncy51bmNsb3NlZENoYXJhY3RlckNsYXNzKSwgaXNWYWxpZDogZmFsc2UgfTtcbn1cblxuZnVuY3Rpb24gZ2V0RGVmYXVsdE1hdGNoZXIodHlwZTogUGF0aFNldHRpbmdUeXBlKTogUGF0aE1hdGNoZXIge1xuICAvKiB2OCBpZ25vcmUgc3RhcnQgLS0gQWxsIGJyYW5jaGVzIGNvdmVyZWQgYnV0IHY4IHJlcG9ydHMgc3dpdGNoIGFzIHBhcnRpYWwuICovXG4gIHN3aXRjaCAodHlwZSkge1xuICAgIC8qIHY4IGlnbm9yZSBzdG9wICovXG4gICAgY2FzZSBQYXRoU2V0dGluZ1R5cGUuRXhjbHVkZToge1xuICAgICAgcmV0dXJuIE5FVkVSX01BVENIRVI7XG4gICAgfVxuICAgIGNhc2UgUGF0aFNldHRpbmdUeXBlLkluY2x1ZGU6IHtcbiAgICAgIHJldHVybiBBTFdBWVNfTUFUQ0hFUjtcbiAgICB9XG4gICAgZGVmYXVsdDoge1xuICAgICAgLyogdjggaWdub3JlIHN0YXJ0IC0tIEV4aGF1c3RpdmUgc3dpdGNoIGd1YXJkLiAqL1xuICAgICAgYXNzZXJ0TmV2ZXIodHlwZSk7XG4gICAgfVxuICAgICAgLyogdjggaWdub3JlIHN0b3AgKi9cbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRHbG9iU291cmNlKGdsb2I6IHN0cmluZyk6IEdsb2JTb3VyY2VSZXN1bHQge1xuICBsZXQgc291cmNlID0gJyc7XG4gIGxldCBpbmRleCA9IDA7XG5cbiAgd2hpbGUgKGluZGV4IDwgZ2xvYi5sZW5ndGgpIHtcbiAgICBjb25zdCBjaGFyYWN0ZXIgPSBnbG9iLmNoYXJBdChpbmRleCk7XG4gICAgc3dpdGNoIChjaGFyYWN0ZXIpIHtcbiAgICAgIGNhc2UgJz8nOiB7XG4gICAgICAgIHNvdXJjZSArPSAnW14vXSc7XG4gICAgICAgIGluZGV4Kys7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnWyc6IHtcbiAgICAgICAgY29uc3QgY2hhcmFjdGVyQ2xhc3MgPSBnZXRDaGFyYWN0ZXJDbGFzc1NvdXJjZShnbG9iLCBpbmRleCk7XG4gICAgICAgIGlmICghY2hhcmFjdGVyQ2xhc3MuaXNWYWxpZCkge1xuICAgICAgICAgIHJldHVybiBjaGFyYWN0ZXJDbGFzcztcbiAgICAgICAgfVxuICAgICAgICBzb3VyY2UgKz0gY2hhcmFjdGVyQ2xhc3Muc291cmNlO1xuICAgICAgICBpbmRleCA9IGNoYXJhY3RlckNsYXNzLmVuZEluZGV4O1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJyonOiB7XG4gICAgICAgIGlmICghZ2xvYi5zdGFydHNXaXRoKEdMT0JTVEFSLCBpbmRleCkpIHtcbiAgICAgICAgICBzb3VyY2UgKz0gJ1teL10qJztcbiAgICAgICAgICBpbmRleCsrO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaXNTZWdtZW50U3RhcnQgPSBpbmRleCA9PT0gMCB8fCBnbG9iW2luZGV4IC0gMV0gPT09ICcvJztcbiAgICAgICAgaWYgKGlzU2VnbWVudFN0YXJ0ICYmIGdsb2Iuc3RhcnRzV2l0aChHTE9CU1RBUl9GT0xERVJTLCBpbmRleCkpIHtcbiAgICAgICAgICAvLyBgKiovYCBpcyB6ZXJvIG9yIG1vcmUgd2hvbGUgZm9sZGVycy5cbiAgICAgICAgICBzb3VyY2UgKz0gJyg/OlteL10qLykqJztcbiAgICAgICAgICBpbmRleCArPSBHTE9CU1RBUl9GT0xERVJTLmxlbmd0aDtcbiAgICAgICAgfSBlbHNlIGlmIChpc1NlZ21lbnRTdGFydCAmJiBpbmRleCArIEdMT0JTVEFSLmxlbmd0aCA9PT0gZ2xvYi5sZW5ndGgpIHtcbiAgICAgICAgICAvLyBBIHRyYWlsaW5nIGAvKipgIGlzIGV2ZXJ5dGhpbmcgaW5zaWRlIHRoZSBmb2xkZXIuXG4gICAgICAgICAgc291cmNlICs9ICcuKic7XG4gICAgICAgICAgaW5kZXggKz0gR0xPQlNUQVIubGVuZ3RoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEFueSBvdGhlciBgKipgIGlzIGFuIG9yZGluYXJ5IGAqYCwgYXMgaW4gYC5naXRpZ25vcmVgLlxuICAgICAgICAgIHNvdXJjZSArPSAnW14vXSonO1xuICAgICAgICAgIGluZGV4ICs9IEdMT0JTVEFSLmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ1xcXFwnOiB7XG4gICAgICAgIGluZGV4Kys7XG4gICAgICAgIGlmIChpbmRleCA+PSBnbG9iLmxlbmd0aCkge1xuICAgICAgICAgIHJldHVybiB7IGVycm9yOiB0KCgkKSA9PiAkLm9ic2lkaWFuRGV2VXRpbHMucGF0aFNldHRpbmdzLnRyYWlsaW5nRXNjYXBlKSwgaXNWYWxpZDogZmFsc2UgfTtcbiAgICAgICAgfVxuICAgICAgICBzb3VyY2UgKz0gZXNjYXBlUmVnRXhwKGdsb2IuY2hhckF0KGluZGV4KSk7XG4gICAgICAgIGluZGV4Kys7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICBzb3VyY2UgKz0gZXNjYXBlUmVnRXhwKGNoYXJhY3Rlcik7XG4gICAgICAgIGluZGV4Kys7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7IGlzVmFsaWQ6IHRydWUsIHNvdXJjZSB9O1xufVxuXG5mdW5jdGlvbiBnZXRSZWdFeHBFcnJvclJlYXNvbihlcnJvcjogdW5rbm93bik6IHN0cmluZyB7XG4gIC8qIHY4IGlnbm9yZSBzdGFydCAtLSBUaGUgUmVnRXhwIGNvbnN0cnVjdG9yIG9ubHkgZXZlciB0aHJvd3MgYSBTeW50YXhFcnJvci4gKi9cbiAgY29uc3QgbWVzc2FnZSA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKTtcbiAgLyogdjggaWdub3JlIHN0b3AgKi9cbiAgLy8gVjggcGhyYXNlcyBpdCBgSW52YWxpZCByZWd1bGFyIGV4cHJlc3Npb246IC88c291cmNlPi88ZmxhZ3M+OiA8cmVhc29uPmA7IHRoZSBlbnRyeSBpcyBhbHJlYWR5IG5hbWVkLlxuICBjb25zdCBtYXRjaCA9IC9eSW52YWxpZCByZWd1bGFyIGV4cHJlc3Npb246IFxcLy4qXFwvW2Etel0qOiAoPzxyZWFzb24+LiopJC9zLmV4ZWMobWVzc2FnZSk7XG4gIHJldHVybiBtYXRjaD8uZ3JvdXBzPy5bJ3JlYXNvbiddID8/IG1lc3NhZ2U7XG59XG5cbmZ1bmN0aW9uIGhhc1VuZXNjYXBlZEdsb2JDaGFyYWN0ZXIoZW50cnk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgZW50cnkubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgY29uc3QgY2hhcmFjdGVyID0gZW50cnkuY2hhckF0KGluZGV4KTtcbiAgICBpZiAoY2hhcmFjdGVyID09PSAnXFxcXCcpIHtcbiAgICAgIGluZGV4Kys7XG4gICAgfSBlbHNlIGlmIChHTE9CX0NIQVJBQ1RFUlMuaGFzKGNoYXJhY3RlcikpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIG1ha2VNYXRjaGVycyhwYXRoczogc3RyaW5nW10sIGRlZmF1bHRNYXRjaGVyOiBQYXRoTWF0Y2hlcik6IG51bGwgfCBQYXRoTWF0Y2hlcltdIHtcbiAgaWYgKHBhdGhzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBbZGVmYXVsdE1hdGNoZXJdO1xuICB9XG5cbiAgY29uc3QgbWF0Y2hlcnM6IFBhdGhNYXRjaGVyW10gPSBbXTtcbiAgZm9yIChjb25zdCBwYXRoIG9mIHBhdGhzKSB7XG4gICAgY29uc3QgeyBtYXRjaGVyIH0gPSBjb21waWxlRW50cnkocGF0aCwgZGVmYXVsdE1hdGNoZXIpO1xuICAgIGlmICghbWF0Y2hlcikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIG1hdGNoZXJzLnB1c2gobWF0Y2hlcik7XG4gIH1cbiAgcmV0dXJuIG1hdGNoZXJzO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFtQkEscUJBQTZCO0FBQzdCLHlCQUE0QjtBQUU1QixrQkFBa0I7QUFrQ2xCLE1BQU0sd0JBQXdCO0FBQzlCLE1BQU0sd0JBQXdCO0FBQzlCLE1BQU0seUJBQXlCO0FBQy9CLE1BQU0sa0JBQWtCLG9CQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssR0FBRyxDQUFDO0FBQy9DLE1BQU0sV0FBVztBQUNqQixNQUFNLG1CQUFtQjtBQUV6QixNQUFNLGlCQUE4QjtBQUFBLEVBQ2xDLFNBQVMsTUFBTTtBQUNqQjtBQUVBLE1BQU0sZ0JBQTZCO0FBQUEsRUFDakMsU0FBUyxNQUFNO0FBQ2pCO0FBRUEsTUFBTSxZQUFZO0FBQUEsRUFjVCxZQUE2QixNQUF1QjtBQUF2QjtBQUNsQyxTQUFLLGlCQUFpQixrQkFBa0IsSUFBSTtBQUM1QyxTQUFLLFdBQVcsQ0FBQyxLQUFLLGNBQWM7QUFBQSxFQUN0QztBQUFBLEVBSG9DO0FBQUEsRUFicEMsSUFBVyxRQUFrQjtBQUMzQixXQUFPLEtBQUs7QUFBQSxFQUNkO0FBQUEsRUFFQSxJQUFXLE1BQU0sT0FBaUI7QUFDaEMsU0FBSyxTQUFTLE1BQU0sT0FB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
|
|
@@ -3,10 +3,24 @@
|
|
|
3
3
|
* @file
|
|
4
4
|
*
|
|
5
5
|
* This module provides classes and validators for managing include/exclude path settings.
|
|
6
|
+
*
|
|
7
|
+
* An entry takes one of three forms, and every form matches case-insensitively:
|
|
8
|
+
*
|
|
9
|
+
* - A regular expression literal, `/pattern/flags`. Its own flags are honoured and `i` is always added. `g` and `y` are
|
|
10
|
+
* accepted and dropped, since they make `RegExp.test` stateful and say nothing about which paths match.
|
|
11
|
+
* - A glob, an entry holding an unescaped `*`, `?` or `[`. `*` matches within one path segment, `**` across segments,
|
|
12
|
+
* `?` one character and `[abc]` / `[!abc]` a character class. A glob with no `/` matches a file or folder NAME at any
|
|
13
|
+
* depth, as in `.gitignore` (`*.pdf` matches `a/b/c.pdf`); one with a `/` is anchored to the vault root
|
|
14
|
+
* (`Attachments/*.pdf`). A trailing `/` makes it match folders only.
|
|
15
|
+
* - A plain path, every other entry, which matches that path and everything inside it. A literal `*`, `?`, `[` or `\` in
|
|
16
|
+
* a plain path or a glob is written escaped (`\*`).
|
|
6
17
|
*/
|
|
7
18
|
import type { MaybeReturn } from '@mnaoumov/typescript-lib/type' with { 'resolution-mode': 'import' };
|
|
8
19
|
/**
|
|
9
20
|
* A class for managing include/exclude path settings.
|
|
21
|
+
*
|
|
22
|
+
* See the module documentation for the entry syntax: plain paths, globs and regular expression literals, all matched
|
|
23
|
+
* case-insensitively.
|
|
10
24
|
*/
|
|
11
25
|
export declare class PathSettings {
|
|
12
26
|
/**
|
|
@@ -39,16 +53,18 @@ export declare class PathSettings {
|
|
|
39
53
|
* Checks if a path is ignored by the include/exclude path settings.
|
|
40
54
|
*
|
|
41
55
|
* @param path - The path to check.
|
|
56
|
+
* @param isFolder - Whether the path is a folder. Only a folder-only glob (one ending in `/`) reads it: such a glob
|
|
57
|
+
* always matches the contents of a matching folder, and matches the folder itself only when this is `true`.
|
|
42
58
|
* @returns `true` if the path is ignored, `false` otherwise.
|
|
43
59
|
*/
|
|
44
|
-
isPathIgnored(path: string): boolean;
|
|
60
|
+
isPathIgnored(path: string, isFolder?: boolean): boolean;
|
|
45
61
|
}
|
|
46
62
|
/**
|
|
47
|
-
* Validates include/exclude path entries, reporting the first entry that is not a
|
|
63
|
+
* Validates include/exclude path entries, reporting the first entry that is not a valid regular expression or glob.
|
|
48
64
|
*
|
|
49
|
-
* An entry
|
|
50
|
-
*
|
|
51
|
-
*
|
|
65
|
+
* An invalid entry does not throw when assigned to {@link PathSettings} — the whole list falls back to its default
|
|
66
|
+
* pattern instead — so this validator is what surfaces the problem to the user. The message names the entry and the
|
|
67
|
+
* reason it is invalid.
|
|
52
68
|
*
|
|
53
69
|
* @param paths - The path entries to validate.
|
|
54
70
|
* @returns A message naming the first invalid entry, or nothing when every entry is valid.
|