obsidian-dev-utils 3.7.1 → 3.9.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 +8 -0
- package/dist/lib/String.cjs +2 -2
- package/dist/lib/obsidian/AttachmentPath.cjs +39 -36
- package/dist/lib/obsidian/AttachmentPath.d.ts +24 -1
- package/dist/lib/obsidian/RenameDeleteHandler.cjs +284 -0
- package/dist/lib/obsidian/RenameDeleteHandler.d.ts +21 -0
- package/dist/lib/obsidian/index.cjs +4 -1
- package/dist/lib/obsidian/index.d.ts +1 -0
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
package/dist/lib/String.cjs
CHANGED
@@ -82,7 +82,7 @@ function trimEnd(str, suffix, validate) {
|
|
82
82
|
return str;
|
83
83
|
}
|
84
84
|
function normalize(str) {
|
85
|
-
return str.replace(/\u00A0/g, " ").normalize("NFC");
|
85
|
+
return str.replace(/\u00A0|\u202F/g, " ").normalize("NFC");
|
86
86
|
}
|
87
87
|
async function replaceAllAsync(str, searchValue, replacer) {
|
88
88
|
const replacementPromises = [];
|
@@ -125,4 +125,4 @@ function replace(str, replacementsMap) {
|
|
125
125
|
trimStart,
|
126
126
|
unescape
|
127
127
|
});
|
128
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL1N0cmluZy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsidmFyIF9faW1wb3J0X21ldGFfdXJsID0gZ2xvYmFsVGhpc1snaW1wb3J0Lm1ldGEudXJsJ10gPz8gKCgpPT57aWYodHlwZW9mIF9fZmlsZW5hbWUhPT1cInN0cmluZ1wiKXtyZXR1cm4gbmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZil9cmV0dXJuIHJlcXVpcmUoXCJub2RlOnVybFwiKS5wYXRoVG9GaWxlVVJMKF9fZmlsZW5hbWUpfSkoKTtcbnZhciBfX3Byb2Nlc3MgPSBnbG9iYWxUaGlzWydwcm9jZXNzJ10gPz8ge1xuICBcImN3ZFwiOiAoKT0+XCIvXCIsXG4gIFwiZW52XCI6IHt9LFxuICBcInBsYXRmb3JtXCI6IFwiYW5kcm9pZFwiXG59O1xuLyoqXG4gKiBAcGFja2FnZURvY3VtZW50YXRpb24gU3RyaW5nXG4gKiBDb250YWlucyB1dGlsaXR5IGZ1bmN0aW9ucyBmb3Igc3RyaW5nIG9wZXJhdGlvbnMuXG4gKi9cblxuaW1wb3J0IHsgdGhyb3dFeHByZXNzaW9uIH0gZnJvbSAnLi9FcnJvci50cyc7XG5pbXBvcnQgeyBlc2NhcGVSZWdFeHAgfSBmcm9tICcuL1JlZ0V4cC50cyc7XG5pbXBvcnQgdHlwZSB7IFZhbHVlUHJvdmlkZXIgfSBmcm9tICcuL1ZhbHVlUHJvdmlkZXIudHMnO1xuaW1wb3J0IHsgcmVzb2x2ZVZhbHVlIH0gZnJvbSAnLi9WYWx1ZVByb3ZpZGVyLnRzJztcblxuLyoqXG4gKiBBbiBhc3luY2hyb25vdXMgZnVuY3Rpb24gdGhhdCBnZW5lcmF0ZXMgcmVwbGFjZW1lbnQgc3RyaW5ncy5cbiAqL1xuZXhwb3J0IHR5cGUgQXN5bmNSZXBsYWNlcjxBcmdzIGV4dGVuZHMgdW5rbm93bltdPiA9IFZhbHVlUHJvdmlkZXI8c3RyaW5nLCBbc3RyaW5nLCAuLi5BcmdzXT47XG5cbi8qKlxuICogTWFwcGluZyBvZiBzcGVjaWFsIGNoYXJhY3RlcnMgdG8gdGhlaXIgZXNjYXBlZCBjb3VudGVycGFydHMuXG4gKi9cbmNvbnN0IEVTQ0FQRV9NQVA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICdcXFxcJzogJ1xcXFxcXFxcJyxcbiAgJ1wiJzogJ1xcXFxcIicsXG4gICdcXCcnOiAnXFxcXFxcJycsXG4gICdcXG4nOiAnXFxcXG4nLFxuICAnXFxyJzogJ1xcXFxyJyxcbiAgJ1xcdCc6ICdcXFxcdCcsXG4gICdcXGInOiAnXFxcXGInLFxuICAnXFxmJzogJ1xcXFxmJ1xufSBhcyBjb25zdDtcblxuLyoqXG4gKiBNYXBwaW5nIG9mIGVzY2FwZWQgc3BlY2lhbCBjaGFyYWN0ZXJzIHRvIHRoZWlyIHVuZXNjYXBlZCBjb3VudGVycGFydHMuXG4gKi9cbmNvbnN0IFVORVNDQVBFX01BUDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoRVNDQVBFX01BUCkpIHtcbiAgVU5FU0NBUEVfTUFQW3ZhbHVlXSA9IGtleTtcbn1cblxuLyoqXG4gKiBUcmltcyB0aGUgc3BlY2lmaWVkIHByZWZpeCBmcm9tIHRoZSBzdGFydCBvZiBhIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0gc3RyIC0gVGhlIHN0cmluZyB0byB0cmltLlxuICogQHBhcmFtIHByZWZpeCAtIFRoZSBwcmVmaXggdG8gcmVtb3ZlIGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBzdHJpbmcuXG4gKiBAcGFyYW0gdmFsaWRhdGUgLSBJZiB0cnVlLCB0aHJvd3MgYW4gZXJyb3IgaWYgdGhlIHN0cmluZyBkb2VzIG5vdCBzdGFydCB3aXRoIHRoZSBwcmVmaXguXG4gKiBAcmV0dXJucyBUaGUgdHJpbW1lZCBzdHJpbmcuXG4gKiBAdGhyb3dzIElmIGB2YWxpZGF0ZWAgaXMgdHJ1ZSBhbmQgdGhlIHN0cmluZyBkb2VzIG5vdCBzdGFydCB3aXRoIHRoZSBwcmVmaXguXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0cmltU3RhcnQoc3RyOiBzdHJpbmcsIHByZWZpeDogc3RyaW5nLCB2YWxpZGF0ZT86IGJvb2xlYW4pOiBzdHJpbmcge1xuICBpZiAoc3RyLnN0YXJ0c1dpdGgocHJlZml4KSkge1xuICAgIHJldHVybiBzdHIuc2xpY2UocHJlZml4Lmxlbmd0aCk7XG4gIH1cblxuICBpZiAodmFsaWRhdGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFN0cmluZyAke3N0cn0gZG9lcyBub3Qgc3RhcnQgd2l0aCBwcmVmaXggJHtwcmVmaXh9YCk7XG4gIH1cblxuICByZXR1cm4gc3RyO1xufVxuXG4vKipcbiAqIFRyaW1zIHRoZSBzcGVjaWZpZWQgc3VmZml4IGZyb20gdGhlIGVuZCBvZiBhIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0gc3RyIC0gVGhlIHN0cmluZyB0byB0cmltLlxuICogQHBhcmFtIHN1ZmZpeCAtIFRoZSBzdWZmaXggdG8gcmVtb3ZlIGZyb20gdGhlIGVuZCBvZiB0aGUgc3RyaW5nLlxuICogQHBhcmFtIHZhbGlkYXRlIC0gSWYgdHJ1ZSwgdGhyb3dzIGFuIGVycm9yIGlmIHRoZSBzdHJpbmcgZG9lcyBub3QgZW5kIHdpdGggdGhlIHN1ZmZpeC5cbiAqIEByZXR1cm5zIFRoZSB0cmltbWVkIHN0cmluZy5cbiAqIEB0aHJvd3MgSWYgYHZhbGlkYXRlYCBpcyB0cnVlIGFuZCB0aGUgc3RyaW5nIGRvZXMgbm90IGVuZCB3aXRoIHRoZSBzdWZmaXguXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0cmltRW5kKHN0cjogc3RyaW5nLCBzdWZmaXg6IHN0cmluZywgdmFsaWRhdGU/OiBib29sZWFuKTogc3RyaW5nIHtcbiAgaWYgKHN0ci5lbmRzV2l0aChzdWZmaXgpKSB7XG4gICAgcmV0dXJuIHN0ci5zbGljZSgwLCAtc3VmZml4Lmxlbmd0aCk7XG4gIH1cblxuICBpZiAodmFsaWRhdGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFN0cmluZyAke3N0cn0gZG9lcyBub3QgZW5kIHdpdGggc3VmZml4ICR7c3VmZml4fWApO1xuICB9XG5cbiAgcmV0dXJuIHN0cjtcbn1cblxuLyoqXG4gKiBOb3JtYWxpemVzIGEgc3RyaW5nIGJ5IGNvbnZlcnRpbmcgaXQgdG8gdGhlIE5GQyBmb3JtIGFuZCByZXBsYWNpbmcgbm9uLWJyZWFraW5nIHNwYWNlcyB3aXRoIHJlZ3VsYXIgc3BhY2VzLlxuICpcbiAqIEBwYXJhbSBzdHIgLSBUaGUgc3RyaW5nIHRvIG5vcm1hbGl6ZS5cbiAqIEByZXR1cm5zIFRoZSBub3JtYWxpemVkIHN0cmluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZShzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBzdHIucmVwbGFjZSgvXFx1MDBBMC9nLCAnICcpLm5vcm1hbGl6ZSgnTkZDJyk7XG59XG5cbi8qKlxuICogQXN5bmNocm9ub3VzbHkgcmVwbGFjZXMgYWxsIG9jY3VycmVuY2VzIG9mIGEgc2VhcmNoIHN0cmluZyBvciBwYXR0ZXJuIHdpdGggdGhlIHJlc3VsdHMgb2YgYW4gYXN5bmNocm9ub3VzIHJlcGxhY2VyIGZ1bmN0aW9uLlxuICpcbiAqIEB0eXBlUGFyYW0gQXJncyAtIFRoZSB0eXBlIG9mIGFkZGl0aW9uYWwgYXJndW1lbnRzIHBhc3NlZCB0byB0aGUgcmVwbGFjZXIgZnVuY3Rpb24uXG4gKiBAcGFyYW0gc3RyIC0gVGhlIHN0cmluZyBpbiB3aGljaCB0byBwZXJmb3JtIHJlcGxhY2VtZW50cy5cbiAqIEBwYXJhbSBzZWFyY2hWYWx1ZSAtIFRoZSBzdHJpbmcgb3IgcmVndWxhciBleHByZXNzaW9uIHRvIHNlYXJjaCBmb3IuXG4gKiBAcGFyYW0gcmVwbGFjZXIgLSBBbiBhc3luY2hyb25vdXMgZnVuY3Rpb24gdGhhdCBnZW5lcmF0ZXMgcmVwbGFjZW1lbnQgc3RyaW5ncy5cbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIHRoZSBzdHJpbmcgd2l0aCBhbGwgcmVwbGFjZW1lbnRzIG1hZGUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXBsYWNlQWxsQXN5bmM8QXJncyBleHRlbmRzIHVua25vd25bXT4oXG4gIHN0cjogc3RyaW5nLFxuICBzZWFyY2hWYWx1ZTogc3RyaW5nIHwgUmVnRXhwLFxuICByZXBsYWNlcjogQXN5bmNSZXBsYWNlcjxBcmdzPlxuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgcmVwbGFjZW1lbnRQcm9taXNlczogUHJvbWlzZTxzdHJpbmc+W10gPSBbXTtcblxuICBzdHIucmVwbGFjZUFsbChzZWFyY2hWYWx1ZSwgKHN1YnN0cmluZzogc3RyaW5nLCAuLi5hcmdzOiB1bmtub3duW10pID0+IHtcbiAgICByZXBsYWNlbWVudFByb21pc2VzLnB1c2gocmVzb2x2ZVZhbHVlKHJlcGxhY2VyLCBzdWJzdHJpbmcsIC4uLmFyZ3MgYXMgWy4uLkFyZ3NdKSk7XG4gICAgcmV0dXJuIHN1YnN0cmluZztcbiAgfSk7XG4gIGNvbnN0IHJlcGxhY2VtZW50cyA9IGF3YWl0IFByb21pc2UuYWxsKHJlcGxhY2VtZW50UHJvbWlzZXMpO1xuICByZXR1cm4gc3RyLnJlcGxhY2VBbGwoc2VhcmNoVmFsdWUsICgpOiBzdHJpbmcgPT4gcmVwbGFjZW1lbnRzLnNoaWZ0KCkgPz8gdGhyb3dFeHByZXNzaW9uKG5ldyBFcnJvcignVW5leHBlY3RlZCBlbXB0eSByZXBsYWNlbWVudCcpKSk7XG59XG5cbi8qKlxuICogQ29udmVydHMgYSBzdHJpbmcgaW50byBhIHZhbGlkIEphdmFTY3JpcHQgdmFyaWFibGUgbmFtZSBieSByZXBsYWNpbmcgaW52YWxpZCBjaGFyYWN0ZXJzIHdpdGggdW5kZXJzY29yZXMuXG4gKlxuICogQHBhcmFtIHN0ciAtIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIFRoZSB2YWxpZCB2YXJpYWJsZSBuYW1lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWFrZVZhbGlkVmFyaWFibGVOYW1lKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKC9bXmEtekEtWjAtOV9dL2csICdfJyk7XG59XG5cbi8qKlxuICogRW5zdXJlcyB0aGF0IGEgc3RyaW5nIHN0YXJ0cyB3aXRoIHRoZSBzcGVjaWZpZWQgcHJlZml4LCBhZGRpbmcgaXQgaWYgbmVjZXNzYXJ5LlxuICpcbiAqIEBwYXJhbSBzdHIgLSBUaGUgc3RyaW5nIHRvIGNoZWNrLlxuICogQHBhcmFtIHByZWZpeCAtIFRoZSBwcmVmaXggdG8gZW5zdXJlLlxuICogQHJldHVybnMgVGhlIHN0cmluZyB0aGF0IHN0YXJ0cyB3aXRoIHRoZSBwcmVmaXguXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbnN1cmVTdGFydHNXaXRoKHN0cjogc3RyaW5nLCBwcmVmaXg6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBzdHIuc3RhcnRzV2l0aChwcmVmaXgpID8gc3RyIDogcHJlZml4ICsgc3RyO1xufVxuXG4vKipcbiAqIEVuc3VyZXMgdGhhdCBhIHN0cmluZyBlbmRzIHdpdGggdGhlIHNwZWNpZmllZCBzdWZmaXgsIGFkZGluZyBpdCBpZiBuZWNlc3NhcnkuXG4gKlxuICogQHBhcmFtIHN0ciAtIFRoZSBzdHJpbmcgdG8gY2hlY2suXG4gKiBAcGFyYW0gc3VmZml4IC0gVGhlIHN1ZmZpeCB0byBlbnN1cmUuXG4gKiBAcmV0dXJucyBUaGUgc3RyaW5nIHRoYXQgZW5kcyB3aXRoIHRoZSBzdWZmaXguXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbnN1cmVFbmRzV2l0aChzdHI6IHN0cmluZywgc3VmZml4OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gc3RyLmVuZHNXaXRoKHN1ZmZpeCkgPyBzdHIgOiBzdHIgKyBzdWZmaXg7XG59XG5cbi8qKlxuICogRXNjYXBlcyBzcGVjaWFsIGNoYXJhY3RlcnMgaW4gYSBzdHJpbmcuXG4gKlxuICogQHBhcmFtIHN0ciAtIFRoZSBzdHJpbmcgdG8gZXNjYXBlLlxuICogQHJldHVybnMgVGhlIGVzY2FwZWQgc3RyaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXNjYXBlKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJlcGxhY2Uoc3RyLCBFU0NBUEVfTUFQKTtcbn1cblxuLyoqXG4gKiBVbmVzY2FwZXMgYSBzdHJpbmcgYnkgcmVwbGFjaW5nIGVzY2FwZSBzZXF1ZW5jZXMgd2l0aCB0aGVpciBjb3JyZXNwb25kaW5nIGNoYXJhY3RlcnMuXG4gKlxuICogQHBhcmFtIHN0ciAtIFRoZSBzdHJpbmcgdG8gdW5lc2NhcGUuXG4gKiBAcmV0dXJucyBUaGUgdW5lc2NhcGVkIHN0cmluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVuZXNjYXBlKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJlcGxhY2Uoc3RyLCBVTkVTQ0FQRV9NQVApO1xufVxuXG4vKipcbiAqIFJlcGxhY2VzIG9jY3VycmVuY2VzIG9mIHN0cmluZ3MgaW4gYSBnaXZlbiBzdHJpbmcgYmFzZWQgb24gYSByZXBsYWNlbWVudHMgbWFwLlxuICpcbiAqIEBwYXJhbSBzdHIgLSBUaGUgc3RyaW5nIHRvIHBlcmZvcm0gcmVwbGFjZW1lbnRzIG9uLlxuICogQHBhcmFtIHJlcGxhY2VtZW50c01hcCAtIEFuIG9iamVjdCBtYXBwaW5nIHN0cmluZ3MgdG8gdGhlaXIgcmVwbGFjZW1lbnQgdmFsdWVzLlxuICogQHJldHVybnMgVGhlIG1vZGlmaWVkIHN0cmluZyB3aXRoIHJlcGxhY2VtZW50cyBhcHBsaWVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZShzdHI6IHN0cmluZywgcmVwbGFjZW1lbnRzTWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTogc3RyaW5nIHtcbiAgY29uc3QgcmVnRXhwID0gbmV3IFJlZ0V4cChPYmplY3Qua2V5cyhyZXBsYWNlbWVudHNNYXApLm1hcCgoc291cmNlKSA9PiBlc2NhcGVSZWdFeHAoc291cmNlKSkuam9pbignfCcpLCAnZycpO1xuICByZXR1cm4gc3RyLnJlcGxhY2VBbGwocmVnRXhwLCAoc291cmNlOiBzdHJpbmcpID0+IHJlcGxhY2VtZW50c01hcFtzb3VyY2VdID8/IHRocm93RXhwcmVzc2lvbihuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgcmVwbGFjZW1lbnQgc291cmNlOiAke3NvdXJjZX1gKSkpO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBV0EsbUJBQWdDO0FBQ2hDLG9CQUE2QjtBQUU3QiwyQkFBNkI7QUFkN0IsSUFBSSxvQkFBb0IsV0FBVyxpQkFBaUIsTUFBTSxNQUFJO0FBQUMsTUFBRyxPQUFPLGVBQWEsVUFBUztBQUFDLFdBQU8sSUFBSSxJQUFJLE9BQU8sU0FBUyxJQUFJO0FBQUEsRUFBQztBQUFDLFNBQU8sUUFBUSxVQUFVLEVBQUUsY0FBYyxVQUFVO0FBQUMsR0FBRztBQUM1TCxJQUFJLFlBQVksV0FBVyxTQUFTLEtBQUs7QUFBQSxFQUN2QyxPQUFPLE1BQUk7QUFBQSxFQUNYLE9BQU8sQ0FBQztBQUFBLEVBQ1IsWUFBWTtBQUNkO0FBbUJBLE1BQU0sYUFBcUM7QUFBQSxFQUN6QyxNQUFNO0FBQUEsRUFDTixLQUFLO0FBQUEsRUFDTCxLQUFNO0FBQUEsRUFDTixNQUFNO0FBQUEsRUFDTixNQUFNO0FBQUEsRUFDTixLQUFNO0FBQUEsRUFDTixNQUFNO0FBQUEsRUFDTixNQUFNO0FBQ1I7QUFLQSxNQUFNLGVBQXVDLENBQUM7QUFDOUMsV0FBVyxDQUFDLEtBQUssS0FBSyxLQUFLLE9BQU8sUUFBUSxVQUFVLEdBQUc7QUFDckQsZUFBYSxLQUFLLElBQUk7QUFDeEI7QUFXTyxTQUFTLFVBQVUsS0FBYSxRQUFnQixVQUE0QjtBQUNqRixNQUFJLElBQUksV0FBVyxNQUFNLEdBQUc7QUFDMUIsV0FBTyxJQUFJLE1BQU0sT0FBTyxNQUFNO0FBQUEsRUFDaEM7QUFFQSxNQUFJLFVBQVU7QUFDWixVQUFNLElBQUksTUFBTSxVQUFVLEdBQUcsK0JBQStCLE1BQU0sRUFBRTtBQUFBLEVBQ3RFO0FBRUEsU0FBTztBQUNUO0FBV08sU0FBUyxRQUFRLEtBQWEsUUFBZ0IsVUFBNEI7QUFDL0UsTUFBSSxJQUFJLFNBQVMsTUFBTSxHQUFHO0FBQ3hCLFdBQU8sSUFBSSxNQUFNLEdBQUcsQ0FBQyxPQUFPLE1BQU07QUFBQSxFQUNwQztBQUVBLE1BQUksVUFBVTtBQUNaLFVBQU0sSUFBSSxNQUFNLFVBQVUsR0FBRyw2QkFBNkIsTUFBTSxFQUFFO0FBQUEsRUFDcEU7QUFFQSxTQUFPO0FBQ1Q7QUFRTyxTQUFTLFVBQVUsS0FBcUI7QUFDN0MsU0FBTyxJQUFJLFFBQVEsV0FBVyxHQUFHLEVBQUUsVUFBVSxLQUFLO0FBQ3BEO0FBV0EsZUFBc0IsZ0JBQ3BCLEtBQ0EsYUFDQSxVQUNpQjtBQUNqQixRQUFNLHNCQUF5QyxDQUFDO0FBRWhELE1BQUksV0FBVyxhQUFhLENBQUMsY0FBc0IsU0FBb0I7QUFDckUsd0JBQW9CLFNBQUssbUNBQWEsVUFBVSxXQUFXLEdBQUcsSUFBaUIsQ0FBQztBQUNoRixXQUFPO0FBQUEsRUFDVCxDQUFDO0FBQ0QsUUFBTSxlQUFlLE1BQU0sUUFBUSxJQUFJLG1CQUFtQjtBQUMxRCxTQUFPLElBQUksV0FBVyxhQUFhLE1BQWMsYUFBYSxNQUFNLFNBQUssOEJBQWdCLElBQUksTUFBTSw4QkFBOEIsQ0FBQyxDQUFDO0FBQ3JJO0FBUU8sU0FBUyxzQkFBc0IsS0FBcUI7QUFDekQsU0FBTyxJQUFJLFFBQVEsa0JBQWtCLEdBQUc7QUFDMUM7QUFTTyxTQUFTLGlCQUFpQixLQUFhLFFBQXdCO0FBQ3BFLFNBQU8sSUFBSSxXQUFXLE1BQU0sSUFBSSxNQUFNLFNBQVM7QUFDakQ7QUFTTyxTQUFTLGVBQWUsS0FBYSxRQUF3QjtBQUNsRSxTQUFPLElBQUksU0FBUyxNQUFNLElBQUksTUFBTSxNQUFNO0FBQzVDO0FBUU8sU0FBUyxPQUFPLEtBQXFCO0FBQzFDLFNBQU8sUUFBUSxLQUFLLFVBQVU7QUFDaEM7QUFRTyxTQUFTLFNBQVMsS0FBcUI7QUFDNUMsU0FBTyxRQUFRLEtBQUssWUFBWTtBQUNsQztBQVNPLFNBQVMsUUFBUSxLQUFhLGlCQUFpRDtBQUNwRixRQUFNLFNBQVMsSUFBSSxPQUFPLE9BQU8sS0FBSyxlQUFlLEVBQUUsSUFBSSxDQUFDLGVBQVcsNEJBQWEsTUFBTSxDQUFDLEVBQUUsS0FBSyxHQUFHLEdBQUcsR0FBRztBQUMzRyxTQUFPLElBQUksV0FBVyxRQUFRLENBQUMsV0FBbUIsZ0JBQWdCLE1BQU0sU0FBSyw4QkFBZ0IsSUFBSSxNQUFNLGtDQUFrQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0FBQ3JKOyIsCiAgIm5hbWVzIjogW10KfQo=
|
128
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL1N0cmluZy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsidmFyIF9faW1wb3J0X21ldGFfdXJsID0gZ2xvYmFsVGhpc1snaW1wb3J0Lm1ldGEudXJsJ10gPz8gKCgpPT57aWYodHlwZW9mIF9fZmlsZW5hbWUhPT1cInN0cmluZ1wiKXtyZXR1cm4gbmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZil9cmV0dXJuIHJlcXVpcmUoXCJub2RlOnVybFwiKS5wYXRoVG9GaWxlVVJMKF9fZmlsZW5hbWUpfSkoKTtcbnZhciBfX3Byb2Nlc3MgPSBnbG9iYWxUaGlzWydwcm9jZXNzJ10gPz8ge1xuICBcImN3ZFwiOiAoKT0+XCIvXCIsXG4gIFwiZW52XCI6IHt9LFxuICBcInBsYXRmb3JtXCI6IFwiYW5kcm9pZFwiXG59O1xuLyoqXG4gKiBAcGFja2FnZURvY3VtZW50YXRpb24gU3RyaW5nXG4gKiBDb250YWlucyB1dGlsaXR5IGZ1bmN0aW9ucyBmb3Igc3RyaW5nIG9wZXJhdGlvbnMuXG4gKi9cblxuaW1wb3J0IHsgdGhyb3dFeHByZXNzaW9uIH0gZnJvbSAnLi9FcnJvci50cyc7XG5pbXBvcnQgeyBlc2NhcGVSZWdFeHAgfSBmcm9tICcuL1JlZ0V4cC50cyc7XG5pbXBvcnQgdHlwZSB7IFZhbHVlUHJvdmlkZXIgfSBmcm9tICcuL1ZhbHVlUHJvdmlkZXIudHMnO1xuaW1wb3J0IHsgcmVzb2x2ZVZhbHVlIH0gZnJvbSAnLi9WYWx1ZVByb3ZpZGVyLnRzJztcblxuLyoqXG4gKiBBbiBhc3luY2hyb25vdXMgZnVuY3Rpb24gdGhhdCBnZW5lcmF0ZXMgcmVwbGFjZW1lbnQgc3RyaW5ncy5cbiAqL1xuZXhwb3J0IHR5cGUgQXN5bmNSZXBsYWNlcjxBcmdzIGV4dGVuZHMgdW5rbm93bltdPiA9IFZhbHVlUHJvdmlkZXI8c3RyaW5nLCBbc3RyaW5nLCAuLi5BcmdzXT47XG5cbi8qKlxuICogTWFwcGluZyBvZiBzcGVjaWFsIGNoYXJhY3RlcnMgdG8gdGhlaXIgZXNjYXBlZCBjb3VudGVycGFydHMuXG4gKi9cbmNvbnN0IEVTQ0FQRV9NQVA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICdcXFxcJzogJ1xcXFxcXFxcJyxcbiAgJ1wiJzogJ1xcXFxcIicsXG4gICdcXCcnOiAnXFxcXFxcJycsXG4gICdcXG4nOiAnXFxcXG4nLFxuICAnXFxyJzogJ1xcXFxyJyxcbiAgJ1xcdCc6ICdcXFxcdCcsXG4gICdcXGInOiAnXFxcXGInLFxuICAnXFxmJzogJ1xcXFxmJ1xufSBhcyBjb25zdDtcblxuLyoqXG4gKiBNYXBwaW5nIG9mIGVzY2FwZWQgc3BlY2lhbCBjaGFyYWN0ZXJzIHRvIHRoZWlyIHVuZXNjYXBlZCBjb3VudGVycGFydHMuXG4gKi9cbmNvbnN0IFVORVNDQVBFX01BUDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoRVNDQVBFX01BUCkpIHtcbiAgVU5FU0NBUEVfTUFQW3ZhbHVlXSA9IGtleTtcbn1cblxuLyoqXG4gKiBUcmltcyB0aGUgc3BlY2lmaWVkIHByZWZpeCBmcm9tIHRoZSBzdGFydCBvZiBhIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0gc3RyIC0gVGhlIHN0cmluZyB0byB0cmltLlxuICogQHBhcmFtIHByZWZpeCAtIFRoZSBwcmVmaXggdG8gcmVtb3ZlIGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBzdHJpbmcuXG4gKiBAcGFyYW0gdmFsaWRhdGUgLSBJZiB0cnVlLCB0aHJvd3MgYW4gZXJyb3IgaWYgdGhlIHN0cmluZyBkb2VzIG5vdCBzdGFydCB3aXRoIHRoZSBwcmVmaXguXG4gKiBAcmV0dXJucyBUaGUgdHJpbW1lZCBzdHJpbmcuXG4gKiBAdGhyb3dzIElmIGB2YWxpZGF0ZWAgaXMgdHJ1ZSBhbmQgdGhlIHN0cmluZyBkb2VzIG5vdCBzdGFydCB3aXRoIHRoZSBwcmVmaXguXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0cmltU3RhcnQoc3RyOiBzdHJpbmcsIHByZWZpeDogc3RyaW5nLCB2YWxpZGF0ZT86IGJvb2xlYW4pOiBzdHJpbmcge1xuICBpZiAoc3RyLnN0YXJ0c1dpdGgocHJlZml4KSkge1xuICAgIHJldHVybiBzdHIuc2xpY2UocHJlZml4Lmxlbmd0aCk7XG4gIH1cblxuICBpZiAodmFsaWRhdGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFN0cmluZyAke3N0cn0gZG9lcyBub3Qgc3RhcnQgd2l0aCBwcmVmaXggJHtwcmVmaXh9YCk7XG4gIH1cblxuICByZXR1cm4gc3RyO1xufVxuXG4vKipcbiAqIFRyaW1zIHRoZSBzcGVjaWZpZWQgc3VmZml4IGZyb20gdGhlIGVuZCBvZiBhIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0gc3RyIC0gVGhlIHN0cmluZyB0byB0cmltLlxuICogQHBhcmFtIHN1ZmZpeCAtIFRoZSBzdWZmaXggdG8gcmVtb3ZlIGZyb20gdGhlIGVuZCBvZiB0aGUgc3RyaW5nLlxuICogQHBhcmFtIHZhbGlkYXRlIC0gSWYgdHJ1ZSwgdGhyb3dzIGFuIGVycm9yIGlmIHRoZSBzdHJpbmcgZG9lcyBub3QgZW5kIHdpdGggdGhlIHN1ZmZpeC5cbiAqIEByZXR1cm5zIFRoZSB0cmltbWVkIHN0cmluZy5cbiAqIEB0aHJvd3MgSWYgYHZhbGlkYXRlYCBpcyB0cnVlIGFuZCB0aGUgc3RyaW5nIGRvZXMgbm90IGVuZCB3aXRoIHRoZSBzdWZmaXguXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0cmltRW5kKHN0cjogc3RyaW5nLCBzdWZmaXg6IHN0cmluZywgdmFsaWRhdGU/OiBib29sZWFuKTogc3RyaW5nIHtcbiAgaWYgKHN0ci5lbmRzV2l0aChzdWZmaXgpKSB7XG4gICAgcmV0dXJuIHN0ci5zbGljZSgwLCAtc3VmZml4Lmxlbmd0aCk7XG4gIH1cblxuICBpZiAodmFsaWRhdGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFN0cmluZyAke3N0cn0gZG9lcyBub3QgZW5kIHdpdGggc3VmZml4ICR7c3VmZml4fWApO1xuICB9XG5cbiAgcmV0dXJuIHN0cjtcbn1cblxuLyoqXG4gKiBOb3JtYWxpemVzIGEgc3RyaW5nIGJ5IGNvbnZlcnRpbmcgaXQgdG8gdGhlIE5GQyBmb3JtIGFuZCByZXBsYWNpbmcgbm9uLWJyZWFraW5nIHNwYWNlcyB3aXRoIHJlZ3VsYXIgc3BhY2VzLlxuICpcbiAqIEBwYXJhbSBzdHIgLSBUaGUgc3RyaW5nIHRvIG5vcm1hbGl6ZS5cbiAqIEByZXR1cm5zIFRoZSBub3JtYWxpemVkIHN0cmluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZShzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBzdHIucmVwbGFjZSgvXFx1MDBBMHxcXHUyMDJGL2csICcgJykubm9ybWFsaXplKCdORkMnKTtcbn1cblxuLyoqXG4gKiBBc3luY2hyb25vdXNseSByZXBsYWNlcyBhbGwgb2NjdXJyZW5jZXMgb2YgYSBzZWFyY2ggc3RyaW5nIG9yIHBhdHRlcm4gd2l0aCB0aGUgcmVzdWx0cyBvZiBhbiBhc3luY2hyb25vdXMgcmVwbGFjZXIgZnVuY3Rpb24uXG4gKlxuICogQHR5cGVQYXJhbSBBcmdzIC0gVGhlIHR5cGUgb2YgYWRkaXRpb25hbCBhcmd1bWVudHMgcGFzc2VkIHRvIHRoZSByZXBsYWNlciBmdW5jdGlvbi5cbiAqIEBwYXJhbSBzdHIgLSBUaGUgc3RyaW5nIGluIHdoaWNoIHRvIHBlcmZvcm0gcmVwbGFjZW1lbnRzLlxuICogQHBhcmFtIHNlYXJjaFZhbHVlIC0gVGhlIHN0cmluZyBvciByZWd1bGFyIGV4cHJlc3Npb24gdG8gc2VhcmNoIGZvci5cbiAqIEBwYXJhbSByZXBsYWNlciAtIEFuIGFzeW5jaHJvbm91cyBmdW5jdGlvbiB0aGF0IGdlbmVyYXRlcyByZXBsYWNlbWVudCBzdHJpbmdzLlxuICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIHN0cmluZyB3aXRoIGFsbCByZXBsYWNlbWVudHMgbWFkZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlcGxhY2VBbGxBc3luYzxBcmdzIGV4dGVuZHMgdW5rbm93bltdPihcbiAgc3RyOiBzdHJpbmcsXG4gIHNlYXJjaFZhbHVlOiBzdHJpbmcgfCBSZWdFeHAsXG4gIHJlcGxhY2VyOiBBc3luY1JlcGxhY2VyPEFyZ3M+XG4pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCByZXBsYWNlbWVudFByb21pc2VzOiBQcm9taXNlPHN0cmluZz5bXSA9IFtdO1xuXG4gIHN0ci5yZXBsYWNlQWxsKHNlYXJjaFZhbHVlLCAoc3Vic3RyaW5nOiBzdHJpbmcsIC4uLmFyZ3M6IHVua25vd25bXSkgPT4ge1xuICAgIHJlcGxhY2VtZW50UHJvbWlzZXMucHVzaChyZXNvbHZlVmFsdWUocmVwbGFjZXIsIHN1YnN0cmluZywgLi4uYXJncyBhcyBbLi4uQXJnc10pKTtcbiAgICByZXR1cm4gc3Vic3RyaW5nO1xuICB9KTtcbiAgY29uc3QgcmVwbGFjZW1lbnRzID0gYXdhaXQgUHJvbWlzZS5hbGwocmVwbGFjZW1lbnRQcm9taXNlcyk7XG4gIHJldHVybiBzdHIucmVwbGFjZUFsbChzZWFyY2hWYWx1ZSwgKCk6IHN0cmluZyA9PiByZXBsYWNlbWVudHMuc2hpZnQoKSA/PyB0aHJvd0V4cHJlc3Npb24obmV3IEVycm9yKCdVbmV4cGVjdGVkIGVtcHR5IHJlcGxhY2VtZW50JykpKTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIHN0cmluZyBpbnRvIGEgdmFsaWQgSmF2YVNjcmlwdCB2YXJpYWJsZSBuYW1lIGJ5IHJlcGxhY2luZyBpbnZhbGlkIGNoYXJhY3RlcnMgd2l0aCB1bmRlcnNjb3Jlcy5cbiAqXG4gKiBAcGFyYW0gc3RyIC0gVGhlIHN0cmluZyB0byBjb252ZXJ0LlxuICogQHJldHVybnMgVGhlIHZhbGlkIHZhcmlhYmxlIG5hbWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYWtlVmFsaWRWYXJpYWJsZU5hbWUoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gc3RyLnJlcGxhY2UoL1teYS16QS1aMC05X10vZywgJ18nKTtcbn1cblxuLyoqXG4gKiBFbnN1cmVzIHRoYXQgYSBzdHJpbmcgc3RhcnRzIHdpdGggdGhlIHNwZWNpZmllZCBwcmVmaXgsIGFkZGluZyBpdCBpZiBuZWNlc3NhcnkuXG4gKlxuICogQHBhcmFtIHN0ciAtIFRoZSBzdHJpbmcgdG8gY2hlY2suXG4gKiBAcGFyYW0gcHJlZml4IC0gVGhlIHByZWZpeCB0byBlbnN1cmUuXG4gKiBAcmV0dXJucyBUaGUgc3RyaW5nIHRoYXQgc3RhcnRzIHdpdGggdGhlIHByZWZpeC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZVN0YXJ0c1dpdGgoc3RyOiBzdHJpbmcsIHByZWZpeDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHN0ci5zdGFydHNXaXRoKHByZWZpeCkgPyBzdHIgOiBwcmVmaXggKyBzdHI7XG59XG5cbi8qKlxuICogRW5zdXJlcyB0aGF0IGEgc3RyaW5nIGVuZHMgd2l0aCB0aGUgc3BlY2lmaWVkIHN1ZmZpeCwgYWRkaW5nIGl0IGlmIG5lY2Vzc2FyeS5cbiAqXG4gKiBAcGFyYW0gc3RyIC0gVGhlIHN0cmluZyB0byBjaGVjay5cbiAqIEBwYXJhbSBzdWZmaXggLSBUaGUgc3VmZml4IHRvIGVuc3VyZS5cbiAqIEByZXR1cm5zIFRoZSBzdHJpbmcgdGhhdCBlbmRzIHdpdGggdGhlIHN1ZmZpeC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZUVuZHNXaXRoKHN0cjogc3RyaW5nLCBzdWZmaXg6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBzdHIuZW5kc1dpdGgoc3VmZml4KSA/IHN0ciA6IHN0ciArIHN1ZmZpeDtcbn1cblxuLyoqXG4gKiBFc2NhcGVzIHNwZWNpYWwgY2hhcmFjdGVycyBpbiBhIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0gc3RyIC0gVGhlIHN0cmluZyB0byBlc2NhcGUuXG4gKiBAcmV0dXJucyBUaGUgZXNjYXBlZCBzdHJpbmcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlc2NhcGUoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcmVwbGFjZShzdHIsIEVTQ0FQRV9NQVApO1xufVxuXG4vKipcbiAqIFVuZXNjYXBlcyBhIHN0cmluZyBieSByZXBsYWNpbmcgZXNjYXBlIHNlcXVlbmNlcyB3aXRoIHRoZWlyIGNvcnJlc3BvbmRpbmcgY2hhcmFjdGVycy5cbiAqXG4gKiBAcGFyYW0gc3RyIC0gVGhlIHN0cmluZyB0byB1bmVzY2FwZS5cbiAqIEByZXR1cm5zIFRoZSB1bmVzY2FwZWQgc3RyaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdW5lc2NhcGUoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcmVwbGFjZShzdHIsIFVORVNDQVBFX01BUCk7XG59XG5cbi8qKlxuICogUmVwbGFjZXMgb2NjdXJyZW5jZXMgb2Ygc3RyaW5ncyBpbiBhIGdpdmVuIHN0cmluZyBiYXNlZCBvbiBhIHJlcGxhY2VtZW50cyBtYXAuXG4gKlxuICogQHBhcmFtIHN0ciAtIFRoZSBzdHJpbmcgdG8gcGVyZm9ybSByZXBsYWNlbWVudHMgb24uXG4gKiBAcGFyYW0gcmVwbGFjZW1lbnRzTWFwIC0gQW4gb2JqZWN0IG1hcHBpbmcgc3RyaW5ncyB0byB0aGVpciByZXBsYWNlbWVudCB2YWx1ZXMuXG4gKiBAcmV0dXJucyBUaGUgbW9kaWZpZWQgc3RyaW5nIHdpdGggcmVwbGFjZW1lbnRzIGFwcGxpZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlKHN0cjogc3RyaW5nLCByZXBsYWNlbWVudHNNYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pOiBzdHJpbmcge1xuICBjb25zdCByZWdFeHAgPSBuZXcgUmVnRXhwKE9iamVjdC5rZXlzKHJlcGxhY2VtZW50c01hcCkubWFwKChzb3VyY2UpID0+IGVzY2FwZVJlZ0V4cChzb3VyY2UpKS5qb2luKCd8JyksICdnJyk7XG4gIHJldHVybiBzdHIucmVwbGFjZUFsbChyZWdFeHAsIChzb3VyY2U6IHN0cmluZykgPT4gcmVwbGFjZW1lbnRzTWFwW3NvdXJjZV0gPz8gdGhyb3dFeHByZXNzaW9uKG5ldyBFcnJvcihgVW5leHBlY3RlZCByZXBsYWNlbWVudCBzb3VyY2U6ICR7c291cmNlfWApKSk7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFXQSxtQkFBZ0M7QUFDaEMsb0JBQTZCO0FBRTdCLDJCQUE2QjtBQWQ3QixJQUFJLG9CQUFvQixXQUFXLGlCQUFpQixNQUFNLE1BQUk7QUFBQyxNQUFHLE9BQU8sZUFBYSxVQUFTO0FBQUMsV0FBTyxJQUFJLElBQUksT0FBTyxTQUFTLElBQUk7QUFBQSxFQUFDO0FBQUMsU0FBTyxRQUFRLFVBQVUsRUFBRSxjQUFjLFVBQVU7QUFBQyxHQUFHO0FBQzVMLElBQUksWUFBWSxXQUFXLFNBQVMsS0FBSztBQUFBLEVBQ3ZDLE9BQU8sTUFBSTtBQUFBLEVBQ1gsT0FBTyxDQUFDO0FBQUEsRUFDUixZQUFZO0FBQ2Q7QUFtQkEsTUFBTSxhQUFxQztBQUFBLEVBQ3pDLE1BQU07QUFBQSxFQUNOLEtBQUs7QUFBQSxFQUNMLEtBQU07QUFBQSxFQUNOLE1BQU07QUFBQSxFQUNOLE1BQU07QUFBQSxFQUNOLEtBQU07QUFBQSxFQUNOLE1BQU07QUFBQSxFQUNOLE1BQU07QUFDUjtBQUtBLE1BQU0sZUFBdUMsQ0FBQztBQUM5QyxXQUFXLENBQUMsS0FBSyxLQUFLLEtBQUssT0FBTyxRQUFRLFVBQVUsR0FBRztBQUNyRCxlQUFhLEtBQUssSUFBSTtBQUN4QjtBQVdPLFNBQVMsVUFBVSxLQUFhLFFBQWdCLFVBQTRCO0FBQ2pGLE1BQUksSUFBSSxXQUFXLE1BQU0sR0FBRztBQUMxQixXQUFPLElBQUksTUFBTSxPQUFPLE1BQU07QUFBQSxFQUNoQztBQUVBLE1BQUksVUFBVTtBQUNaLFVBQU0sSUFBSSxNQUFNLFVBQVUsR0FBRywrQkFBK0IsTUFBTSxFQUFFO0FBQUEsRUFDdEU7QUFFQSxTQUFPO0FBQ1Q7QUFXTyxTQUFTLFFBQVEsS0FBYSxRQUFnQixVQUE0QjtBQUMvRSxNQUFJLElBQUksU0FBUyxNQUFNLEdBQUc7QUFDeEIsV0FBTyxJQUFJLE1BQU0sR0FBRyxDQUFDLE9BQU8sTUFBTTtBQUFBLEVBQ3BDO0FBRUEsTUFBSSxVQUFVO0FBQ1osVUFBTSxJQUFJLE1BQU0sVUFBVSxHQUFHLDZCQUE2QixNQUFNLEVBQUU7QUFBQSxFQUNwRTtBQUVBLFNBQU87QUFDVDtBQVFPLFNBQVMsVUFBVSxLQUFxQjtBQUM3QyxTQUFPLElBQUksUUFBUSxrQkFBa0IsR0FBRyxFQUFFLFVBQVUsS0FBSztBQUMzRDtBQVdBLGVBQXNCLGdCQUNwQixLQUNBLGFBQ0EsVUFDaUI7QUFDakIsUUFBTSxzQkFBeUMsQ0FBQztBQUVoRCxNQUFJLFdBQVcsYUFBYSxDQUFDLGNBQXNCLFNBQW9CO0FBQ3JFLHdCQUFvQixTQUFLLG1DQUFhLFVBQVUsV0FBVyxHQUFHLElBQWlCLENBQUM7QUFDaEYsV0FBTztBQUFBLEVBQ1QsQ0FBQztBQUNELFFBQU0sZUFBZSxNQUFNLFFBQVEsSUFBSSxtQkFBbUI7QUFDMUQsU0FBTyxJQUFJLFdBQVcsYUFBYSxNQUFjLGFBQWEsTUFBTSxTQUFLLDhCQUFnQixJQUFJLE1BQU0sOEJBQThCLENBQUMsQ0FBQztBQUNySTtBQVFPLFNBQVMsc0JBQXNCLEtBQXFCO0FBQ3pELFNBQU8sSUFBSSxRQUFRLGtCQUFrQixHQUFHO0FBQzFDO0FBU08sU0FBUyxpQkFBaUIsS0FBYSxRQUF3QjtBQUNwRSxTQUFPLElBQUksV0FBVyxNQUFNLElBQUksTUFBTSxTQUFTO0FBQ2pEO0FBU08sU0FBUyxlQUFlLEtBQWEsUUFBd0I7QUFDbEUsU0FBTyxJQUFJLFNBQVMsTUFBTSxJQUFJLE1BQU0sTUFBTTtBQUM1QztBQVFPLFNBQVMsT0FBTyxLQUFxQjtBQUMxQyxTQUFPLFFBQVEsS0FBSyxVQUFVO0FBQ2hDO0FBUU8sU0FBUyxTQUFTLEtBQXFCO0FBQzVDLFNBQU8sUUFBUSxLQUFLLFlBQVk7QUFDbEM7QUFTTyxTQUFTLFFBQVEsS0FBYSxpQkFBaUQ7QUFDcEYsUUFBTSxTQUFTLElBQUksT0FBTyxPQUFPLEtBQUssZUFBZSxFQUFFLElBQUksQ0FBQyxlQUFXLDRCQUFhLE1BQU0sQ0FBQyxFQUFFLEtBQUssR0FBRyxHQUFHLEdBQUc7QUFDM0csU0FBTyxJQUFJLFdBQVcsUUFBUSxDQUFDLFdBQW1CLGdCQUFnQixNQUFNLFNBQUssOEJBQWdCLElBQUksTUFBTSxrQ0FBa0MsTUFBTSxFQUFFLENBQUMsQ0FBQztBQUNySjsiLAogICJuYW1lcyI6IFtdCn0K
|
@@ -24,12 +24,14 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
24
24
|
var AttachmentPath_exports = {};
|
25
25
|
__export(AttachmentPath_exports, {
|
26
26
|
getAttachmentFilePath: () => getAttachmentFilePath,
|
27
|
-
getAttachmentFolderPath: () => getAttachmentFolderPath
|
27
|
+
getAttachmentFolderPath: () => getAttachmentFolderPath,
|
28
|
+
getAvailablePathForAttachments: () => getAvailablePathForAttachments
|
28
29
|
});
|
29
30
|
module.exports = __toCommonJS(AttachmentPath_exports);
|
31
|
+
var import_obsidian = require("obsidian");
|
30
32
|
var import_implementations = require("obsidian-typings/implementations");
|
31
33
|
var import_Path = require("../Path.cjs");
|
32
|
-
var
|
34
|
+
var import_String = require("../String.cjs");
|
33
35
|
var import_TAbstractFile = require("./TAbstractFile.cjs");
|
34
36
|
var __import_meta_url = globalThis["import.meta.url"] ?? (() => {
|
35
37
|
if (typeof __filename !== "string") {
|
@@ -51,44 +53,45 @@ async function getAttachmentFilePath(app, attachmentPathOrFile, notePathOrFile)
|
|
51
53
|
const note = (0, import_implementations.createTFileInstance)(app.vault, notePath);
|
52
54
|
const ext = (0, import_Path.extname)(attachmentPath);
|
53
55
|
const fileName = (0, import_Path.basename)(attachmentPath, ext);
|
54
|
-
const
|
55
|
-
|
56
|
-
|
57
|
-
const alreadyPatched = originalMkdir.__patched ?? false;
|
58
|
-
if (!alreadyPatched) {
|
59
|
-
app.vault.adapter.mkdir = async (path) => {
|
60
|
-
const fakeFolder = (0, import_implementations.createTFolderInstance)(app.vault, path);
|
61
|
-
const unregister = (0, import_MetadataCache.registerFile)(app, fakeFolder);
|
62
|
-
unregisters.push(unregister);
|
63
|
-
paths.add(path);
|
64
|
-
await Promise.resolve();
|
65
|
-
};
|
66
|
-
app.vault.adapter.mkdir.__patched = true;
|
56
|
+
const internalFn = app.vault.getAvailablePathForAttachments.bind(app.vault);
|
57
|
+
if (internalFn.isExtended) {
|
58
|
+
return internalFn(fileName, ext.slice(1), note, true);
|
67
59
|
}
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
60
|
+
return await getAvailablePathForAttachments(app, fileName, ext.slice(1), note, true);
|
61
|
+
}
|
62
|
+
async function getAvailablePathForAttachments(app, filename, extension, file, skipFolderCreation) {
|
63
|
+
let attachmentFolderPath = app.vault.getConfig("attachmentFolderPath");
|
64
|
+
const isCurrentFolder = attachmentFolderPath === "." || attachmentFolderPath === "./";
|
65
|
+
let relativePath = null;
|
66
|
+
if (attachmentFolderPath.startsWith("./")) {
|
67
|
+
relativePath = (0, import_String.trimStart)(attachmentFolderPath, "./");
|
68
|
+
}
|
69
|
+
if (isCurrentFolder) {
|
70
|
+
attachmentFolderPath = file ? file.parent?.path ?? "" : "";
|
71
|
+
} else if (relativePath) {
|
72
|
+
attachmentFolderPath = (file ? file.parent?.getParentPrefix() ?? "" : "") + relativePath;
|
73
|
+
}
|
74
|
+
attachmentFolderPath = (0, import_String.normalize)(normalizeSlashes(attachmentFolderPath));
|
75
|
+
filename = (0, import_String.normalize)(normalizeSlashes(filename));
|
76
|
+
let folder = app.vault.getAbstractFileByPathInsensitive(attachmentFolderPath);
|
77
|
+
if (!folder && relativePath && !skipFolderCreation) {
|
78
|
+
folder = await app.vault.createFolder(attachmentFolderPath);
|
87
79
|
}
|
80
|
+
if (folder instanceof import_obsidian.TFolder) {
|
81
|
+
return app.vault.getAvailablePath(folder.getParentPrefix() + filename, extension);
|
82
|
+
} else {
|
83
|
+
return app.vault.getAvailablePath(filename, extension);
|
84
|
+
}
|
85
|
+
}
|
86
|
+
function normalizeSlashes(path) {
|
87
|
+
path = path.replace(/([\\/])+/g, "/");
|
88
|
+
path = path.replace(/(^\/+|\/+$)/g, "");
|
89
|
+
return path || "/";
|
88
90
|
}
|
89
91
|
// Annotate the CommonJS export names for ESM import in node:
|
90
92
|
0 && (module.exports = {
|
91
93
|
getAttachmentFilePath,
|
92
|
-
getAttachmentFolderPath
|
94
|
+
getAttachmentFolderPath,
|
95
|
+
getAvailablePathForAttachments
|
93
96
|
});
|
94
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL29ic2lkaWFuL0F0dGFjaG1lbnRQYXRoLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJ2YXIgX19pbXBvcnRfbWV0YV91cmwgPSBnbG9iYWxUaGlzWydpbXBvcnQubWV0YS51cmwnXSA/PyAoKCk9PntpZih0eXBlb2YgX19maWxlbmFtZSE9PVwic3RyaW5nXCIpe3JldHVybiBuZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKX1yZXR1cm4gcmVxdWlyZShcIm5vZGU6dXJsXCIpLnBhdGhUb0ZpbGVVUkwoX19maWxlbmFtZSl9KSgpO1xudmFyIF9fcHJvY2VzcyA9IGdsb2JhbFRoaXNbJ3Byb2Nlc3MnXSA/
|
97
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL29ic2lkaWFuL0F0dGFjaG1lbnRQYXRoLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJ2YXIgX19pbXBvcnRfbWV0YV91cmwgPSBnbG9iYWxUaGlzWydpbXBvcnQubWV0YS51cmwnXSA/PyAoKCk9PntpZih0eXBlb2YgX19maWxlbmFtZSE9PVwic3RyaW5nXCIpe3JldHVybiBuZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKX1yZXR1cm4gcmVxdWlyZShcIm5vZGU6dXJsXCIpLnBhdGhUb0ZpbGVVUkwoX19maWxlbmFtZSl9KSgpO1xudmFyIF9fcHJvY2VzcyA9IGdsb2JhbFRoaXNbJ3Byb2Nlc3MnXSA/PyB7XG4gIFwiY3dkXCI6ICgpPT5cIi9cIixcbiAgXCJlbnZcIjoge30sXG4gIFwicGxhdGZvcm1cIjogXCJhbmRyb2lkXCJcbn07XG4vKipcbiAqIEBwYWNrYWdlRG9jdW1lbnRhdGlvbiBBdHRhY2htZW50UGF0aFxuICogUHJvdmlkZXMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIHdvcmtpbmcgd2l0aCBhdHRhY2htZW50IHBhdGhzLlxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgQXBwLFxuICBUQWJzdHJhY3RGaWxlXG59IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB7IFRGb2xkZXIgfSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgeyBjcmVhdGVURmlsZUluc3RhbmNlIH0gZnJvbSAnb2JzaWRpYW4tdHlwaW5ncy9pbXBsZW1lbnRhdGlvbnMnO1xuXG5pbXBvcnQge1xuICBiYXNlbmFtZSxcbiAgZGlybmFtZSxcbiAgZXh0bmFtZVxufSBmcm9tICcuLi9QYXRoLnRzJztcbmltcG9ydCB7XG4gIG5vcm1hbGl6ZSxcbiAgdHJpbVN0YXJ0XG59IGZyb20gJy4uL1N0cmluZy50cyc7XG5pbXBvcnQgeyBnZXRQYXRoIH0gZnJvbSAnLi9UQWJzdHJhY3RGaWxlLnRzJztcbmltcG9ydCB0eXBlIHsgUGF0aE9yRmlsZSB9IGZyb20gJy4vVEZpbGUudHMnO1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgYXR0YWNobWVudCBmb2xkZXIgcGF0aCBmb3IgYSBnaXZlbiBub3RlLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gYXBwbGljYXRpb24gaW5zdGFuY2UuXG4gKiBAcGFyYW0gbm90ZVBhdGhPckZpbGUgLSBUaGUgcGF0aCBvZiB0aGUgbm90ZS5cbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIHRoZSBhdHRhY2htZW50IGZvbGRlciBwYXRoLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0QXR0YWNobWVudEZvbGRlclBhdGgoYXBwOiBBcHAsIG5vdGVQYXRoT3JGaWxlOiBQYXRoT3JGaWxlKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgcmV0dXJuIGRpcm5hbWUoYXdhaXQgZ2V0QXR0YWNobWVudEZpbGVQYXRoKGFwcCwgJ0RVTU1ZX0ZJTEUucGRmJywgbm90ZVBhdGhPckZpbGUpKTtcbn1cblxuLyoqXG4gKiBJcyBvdmVycmlkZGVuIHdyYXBwZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXh0ZW5kZWRXcmFwcGVyIHtcbiAgLyoqXG4gICAqIElzIGV4dGVuZGVkLlxuICAgKi9cbiAgaXNFeHRlbmRlZDogdHJ1ZTtcbn1cblxuLyoqXG4gKiBHZXQgYXZhaWxhYmxlIHBhdGggZm9yIGF0dGFjaG1lbnRzIGZ1bmN0aW9uLlxuICovXG5leHBvcnQgdHlwZSBHZXRBdmFpbGFibGVQYXRoRm9yQXR0YWNobWVudHNFeHRlbmRlZEZuID0gKGZpbGVuYW1lOiBzdHJpbmcsIGV4dGVuc2lvbjogc3RyaW5nLCBmaWxlOiBUQWJzdHJhY3RGaWxlIHwgbnVsbCwgc2tpcEZvbGRlckNyZWF0aW9uPzogYm9vbGVhbikgPT4gUHJvbWlzZTxzdHJpbmc+O1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgZmlsZSBwYXRoIGZvciBhbiBhdHRhY2htZW50IHdpdGhpbiBhIG5vdGUuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAqIEBwYXJhbSBhdHRhY2htZW50UGF0aE9yRmlsZSAtIFRoZSBwYXRoIG9mIHRoZSBhdHRhY2htZW50LlxuICogQHBhcmFtIG5vdGVQYXRoT3JGaWxlIC0gVGhlIHBhdGggb2YgdGhlIG5vdGUuXG4gKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0aGUgZmlsZSBwYXRoIG9mIHRoZSBhdHRhY2htZW50LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0QXR0YWNobWVudEZpbGVQYXRoKGFwcDogQXBwLCBhdHRhY2htZW50UGF0aE9yRmlsZTogUGF0aE9yRmlsZSwgbm90ZVBhdGhPckZpbGU6IFBhdGhPckZpbGUpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBhdHRhY2htZW50UGF0aCA9IGdldFBhdGgoYXR0YWNobWVudFBhdGhPckZpbGUpO1xuICBjb25zdCBub3RlUGF0aCA9IGdldFBhdGgobm90ZVBhdGhPckZpbGUpO1xuICBjb25zdCBub3RlID0gY3JlYXRlVEZpbGVJbnN0YW5jZShhcHAudmF1bHQsIG5vdGVQYXRoKTtcbiAgY29uc3QgZXh0ID0gZXh0bmFtZShhdHRhY2htZW50UGF0aCk7XG4gIGNvbnN0IGZpbGVOYW1lID0gYmFzZW5hbWUoYXR0YWNobWVudFBhdGgsIGV4dCk7XG5cbiAgY29uc3QgaW50ZXJuYWxGbiA9IGFwcC52YXVsdC5nZXRBdmFpbGFibGVQYXRoRm9yQXR0YWNobWVudHMuYmluZChhcHAudmF1bHQpO1xuICBpZiAoKGludGVybmFsRm4gYXMgUGFydGlhbDxFeHRlbmRlZFdyYXBwZXI+KS5pc0V4dGVuZGVkKSB7XG4gICAgcmV0dXJuIChpbnRlcm5hbEZuIGFzIEdldEF2YWlsYWJsZVBhdGhGb3JBdHRhY2htZW50c0V4dGVuZGVkRm4pKGZpbGVOYW1lLCBleHQuc2xpY2UoMSksIG5vdGUsIHRydWUpO1xuICB9XG5cbiAgcmV0dXJuIGF3YWl0IGdldEF2YWlsYWJsZVBhdGhGb3JBdHRhY2htZW50cyhhcHAsIGZpbGVOYW1lLCBleHQuc2xpY2UoMSksIG5vdGUsIHRydWUpO1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgYXZhaWxhYmxlIHBhdGggZm9yIGF0dGFjaG1lbnRzLlxuICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAqIEBwYXJhbSBmaWxlbmFtZSAtIE5hbWUgb2YgdGhlIGZpbGUuXG4gKiBAcGFyYW0gZXh0ZW5zaW9uIC0gRXh0ZW5zaW9uIG9mIHRoZSBmaWxlLlxuICogQHBhcmFtIGZpbGUgLSBUaGUgZmlsZSB0byBhdHRhY2ggdG8uXG4gKiBAcGFyYW0gc2tpcEZvbGRlckNyZWF0aW9uIC0gU2hvdWxkIGZvbGRlciBjcmVhdGlvbiBiZSBza2lwcGVkP1xuICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIGF2YWlsYWJsZSBwYXRoIGZvciBhdHRhY2htZW50cy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldEF2YWlsYWJsZVBhdGhGb3JBdHRhY2htZW50cyhhcHA6IEFwcCwgZmlsZW5hbWU6IHN0cmluZywgZXh0ZW5zaW9uOiBzdHJpbmcsIGZpbGU6IFRBYnN0cmFjdEZpbGUgfCBudWxsLCBza2lwRm9sZGVyQ3JlYXRpb246IGJvb2xlYW4pOiBQcm9taXNlPHN0cmluZz4ge1xuICBsZXQgYXR0YWNobWVudEZvbGRlclBhdGggPSBhcHAudmF1bHQuZ2V0Q29uZmlnKCdhdHRhY2htZW50Rm9sZGVyUGF0aCcpIGFzIHN0cmluZztcbiAgY29uc3QgaXNDdXJyZW50Rm9sZGVyID0gYXR0YWNobWVudEZvbGRlclBhdGggPT09ICcuJyB8fCBhdHRhY2htZW50Rm9sZGVyUGF0aCA9PT0gJy4vJztcbiAgbGV0IHJlbGF0aXZlUGF0aCA9IG51bGw7XG5cbiAgaWYgKGF0dGFjaG1lbnRGb2xkZXJQYXRoLnN0YXJ0c1dpdGgoJy4vJykpIHtcbiAgICByZWxhdGl2ZVBhdGggPSB0cmltU3RhcnQoYXR0YWNobWVudEZvbGRlclBhdGgsICcuLycpO1xuICB9XG5cbiAgaWYgKGlzQ3VycmVudEZvbGRlcikge1xuICAgIGF0dGFjaG1lbnRGb2xkZXJQYXRoID0gZmlsZSA/IGZpbGUucGFyZW50Py5wYXRoID8/ICcnIDogJyc7XG4gIH0gZWxzZSBpZiAocmVsYXRpdmVQYXRoKSB7XG4gICAgYXR0YWNobWVudEZvbGRlclBhdGggPSAoZmlsZSA/IGZpbGUucGFyZW50Py5nZXRQYXJlbnRQcmVmaXgoKSA/PyAnJyA6ICcnKSArIHJlbGF0aXZlUGF0aDtcbiAgfVxuXG4gIGF0dGFjaG1lbnRGb2xkZXJQYXRoID0gbm9ybWFsaXplKG5vcm1hbGl6ZVNsYXNoZXMoYXR0YWNobWVudEZvbGRlclBhdGgpKTtcbiAgZmlsZW5hbWUgPSBub3JtYWxpemUobm9ybWFsaXplU2xhc2hlcyhmaWxlbmFtZSkpO1xuXG4gIGxldCBmb2xkZXIgPSBhcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoSW5zZW5zaXRpdmUoYXR0YWNobWVudEZvbGRlclBhdGgpO1xuXG4gIGlmICghZm9sZGVyICYmIHJlbGF0aXZlUGF0aCAmJiAhc2tpcEZvbGRlckNyZWF0aW9uKSB7XG4gICAgZm9sZGVyID0gYXdhaXQgYXBwLnZhdWx0LmNyZWF0ZUZvbGRlcihhdHRhY2htZW50Rm9sZGVyUGF0aCk7XG4gIH1cblxuICBpZiAoZm9sZGVyIGluc3RhbmNlb2YgVEZvbGRlcikge1xuICAgIHJldHVybiBhcHAudmF1bHQuZ2V0QXZhaWxhYmxlUGF0aChmb2xkZXIuZ2V0UGFyZW50UHJlZml4KCkgKyBmaWxlbmFtZSwgZXh0ZW5zaW9uKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYXBwLnZhdWx0LmdldEF2YWlsYWJsZVBhdGgoZmlsZW5hbWUsIGV4dGVuc2lvbik7XG4gIH1cbn1cblxuLyoqXG4gKiBOb3JtYWxpemVzIGEgcGF0aCBieSBjb21iaW5pbmcgbXVsdGlwbGUgc2xhc2hlcyBpbnRvIGEgc2luZ2xlIHNsYXNoIGFuZCByZW1vdmluZyBsZWFkaW5nIGFuZCB0cmFpbGluZyBzbGFzaGVzLlxuICogQHBhcmFtIHBhdGggLSBQYXRoIHRvIG5vcm1hbGl6ZS5cbiAqIEByZXR1cm5zIFRoZSBub3JtYWxpemVkIHBhdGguXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZVNsYXNoZXMocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcGF0aCA9IHBhdGgucmVwbGFjZSgvKFtcXFxcL10pKy9nLCAnLycpO1xuICBwYXRoID0gcGF0aC5yZXBsYWNlKC8oXlxcLyt8XFwvKyQpL2csICcnKTtcbiAgcmV0dXJuIHBhdGggfHwgJy8nO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWVBLHNCQUF3QjtBQUN4Qiw2QkFBb0M7QUFFcEMsa0JBSU87QUFDUCxvQkFHTztBQUNQLDJCQUF3QjtBQTNCeEIsSUFBSSxvQkFBb0IsV0FBVyxpQkFBaUIsTUFBTSxNQUFJO0FBQUMsTUFBRyxPQUFPLGVBQWEsVUFBUztBQUFDLFdBQU8sSUFBSSxJQUFJLE9BQU8sU0FBUyxJQUFJO0FBQUEsRUFBQztBQUFDLFNBQU8sUUFBUSxVQUFVLEVBQUUsY0FBYyxVQUFVO0FBQUMsR0FBRztBQUM1TCxJQUFJLFlBQVksV0FBVyxTQUFTLEtBQUs7QUFBQSxFQUN2QyxPQUFPLE1BQUk7QUFBQSxFQUNYLE9BQU8sQ0FBQztBQUFBLEVBQ1IsWUFBWTtBQUNkO0FBZ0NBLGVBQXNCLHdCQUF3QixLQUFVLGdCQUE2QztBQUNuRyxhQUFPLHFCQUFRLE1BQU0sc0JBQXNCLEtBQUssa0JBQWtCLGNBQWMsQ0FBQztBQUNuRjtBQXlCQSxlQUFzQixzQkFBc0IsS0FBVSxzQkFBa0MsZ0JBQTZDO0FBQ25JLFFBQU0scUJBQWlCLDhCQUFRLG9CQUFvQjtBQUNuRCxRQUFNLGVBQVcsOEJBQVEsY0FBYztBQUN2QyxRQUFNLFdBQU8sNENBQW9CLElBQUksT0FBTyxRQUFRO0FBQ3BELFFBQU0sVUFBTSxxQkFBUSxjQUFjO0FBQ2xDLFFBQU0sZUFBVyxzQkFBUyxnQkFBZ0IsR0FBRztBQUU3QyxRQUFNLGFBQWEsSUFBSSxNQUFNLCtCQUErQixLQUFLLElBQUksS0FBSztBQUMxRSxNQUFLLFdBQXdDLFlBQVk7QUFDdkQsV0FBUSxXQUF3RCxVQUFVLElBQUksTUFBTSxDQUFDLEdBQUcsTUFBTSxJQUFJO0FBQUEsRUFDcEc7QUFFQSxTQUFPLE1BQU0sK0JBQStCLEtBQUssVUFBVSxJQUFJLE1BQU0sQ0FBQyxHQUFHLE1BQU0sSUFBSTtBQUNyRjtBQVdBLGVBQXNCLCtCQUErQixLQUFVLFVBQWtCLFdBQW1CLE1BQTRCLG9CQUE4QztBQUM1SyxNQUFJLHVCQUF1QixJQUFJLE1BQU0sVUFBVSxzQkFBc0I7QUFDckUsUUFBTSxrQkFBa0IseUJBQXlCLE9BQU8seUJBQXlCO0FBQ2pGLE1BQUksZUFBZTtBQUVuQixNQUFJLHFCQUFxQixXQUFXLElBQUksR0FBRztBQUN6Qyx1QkFBZSx5QkFBVSxzQkFBc0IsSUFBSTtBQUFBLEVBQ3JEO0FBRUEsTUFBSSxpQkFBaUI7QUFDbkIsMkJBQXVCLE9BQU8sS0FBSyxRQUFRLFFBQVEsS0FBSztBQUFBLEVBQzFELFdBQVcsY0FBYztBQUN2Qiw0QkFBd0IsT0FBTyxLQUFLLFFBQVEsZ0JBQWdCLEtBQUssS0FBSyxNQUFNO0FBQUEsRUFDOUU7QUFFQSw2QkFBdUIseUJBQVUsaUJBQWlCLG9CQUFvQixDQUFDO0FBQ3ZFLGlCQUFXLHlCQUFVLGlCQUFpQixRQUFRLENBQUM7QUFFL0MsTUFBSSxTQUFTLElBQUksTUFBTSxpQ0FBaUMsb0JBQW9CO0FBRTVFLE1BQUksQ0FBQyxVQUFVLGdCQUFnQixDQUFDLG9CQUFvQjtBQUNsRCxhQUFTLE1BQU0sSUFBSSxNQUFNLGFBQWEsb0JBQW9CO0FBQUEsRUFDNUQ7QUFFQSxNQUFJLGtCQUFrQix5QkFBUztBQUM3QixXQUFPLElBQUksTUFBTSxpQkFBaUIsT0FBTyxnQkFBZ0IsSUFBSSxVQUFVLFNBQVM7QUFBQSxFQUNsRixPQUFPO0FBQ0wsV0FBTyxJQUFJLE1BQU0saUJBQWlCLFVBQVUsU0FBUztBQUFBLEVBQ3ZEO0FBQ0Y7QUFPQSxTQUFTLGlCQUFpQixNQUFzQjtBQUM5QyxTQUFPLEtBQUssUUFBUSxhQUFhLEdBQUc7QUFDcEMsU0FBTyxLQUFLLFFBQVEsZ0JBQWdCLEVBQUU7QUFDdEMsU0FBTyxRQUFRO0FBQ2pCOyIsCiAgIm5hbWVzIjogW10KfQo=
|
@@ -2,7 +2,7 @@
|
|
2
2
|
* @packageDocumentation AttachmentPath
|
3
3
|
* Provides utility functions for working with attachment paths.
|
4
4
|
*/
|
5
|
-
import type { App } from 'obsidian';
|
5
|
+
import type { App, TAbstractFile } from 'obsidian';
|
6
6
|
import type { PathOrFile } from './TFile.ts';
|
7
7
|
/**
|
8
8
|
* Retrieves the attachment folder path for a given note.
|
@@ -12,6 +12,19 @@ import type { PathOrFile } from './TFile.ts';
|
|
12
12
|
* @returns A promise that resolves to the attachment folder path.
|
13
13
|
*/
|
14
14
|
export declare function getAttachmentFolderPath(app: App, notePathOrFile: PathOrFile): Promise<string>;
|
15
|
+
/**
|
16
|
+
* Is overridden wrapper.
|
17
|
+
*/
|
18
|
+
export interface ExtendedWrapper {
|
19
|
+
/**
|
20
|
+
* Is extended.
|
21
|
+
*/
|
22
|
+
isExtended: true;
|
23
|
+
}
|
24
|
+
/**
|
25
|
+
* Get available path for attachments function.
|
26
|
+
*/
|
27
|
+
export type GetAvailablePathForAttachmentsExtendedFn = (filename: string, extension: string, file: TAbstractFile | null, skipFolderCreation?: boolean) => Promise<string>;
|
15
28
|
/**
|
16
29
|
* Retrieves the file path for an attachment within a note.
|
17
30
|
*
|
@@ -21,3 +34,13 @@ export declare function getAttachmentFolderPath(app: App, notePathOrFile: PathOr
|
|
21
34
|
* @returns A promise that resolves to the file path of the attachment.
|
22
35
|
*/
|
23
36
|
export declare function getAttachmentFilePath(app: App, attachmentPathOrFile: PathOrFile, notePathOrFile: PathOrFile): Promise<string>;
|
37
|
+
/**
|
38
|
+
* Retrieves the available path for attachments.
|
39
|
+
* @param app - The Obsidian application instance.
|
40
|
+
* @param filename - Name of the file.
|
41
|
+
* @param extension - Extension of the file.
|
42
|
+
* @param file - The file to attach to.
|
43
|
+
* @param skipFolderCreation - Should folder creation be skipped?
|
44
|
+
* @returns A promise that resolves to the available path for attachments.
|
45
|
+
*/
|
46
|
+
export declare function getAvailablePathForAttachments(app: App, filename: string, extension: string, file: TAbstractFile | null, skipFolderCreation: boolean): Promise<string>;
|
@@ -0,0 +1,284 @@
|
|
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
|
+
"use strict";
|
7
|
+
var __defProp = Object.defineProperty;
|
8
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
9
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
10
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
11
|
+
var __export = (target, all) => {
|
12
|
+
for (var name in all)
|
13
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
14
|
+
};
|
15
|
+
var __copyProps = (to, from, except, desc) => {
|
16
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
17
|
+
for (let key of __getOwnPropNames(from))
|
18
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
19
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
20
|
+
}
|
21
|
+
return to;
|
22
|
+
};
|
23
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
24
|
+
var RenameDeleteHandler_exports = {};
|
25
|
+
__export(RenameDeleteHandler_exports, {
|
26
|
+
RenameDeleteHandler: () => RenameDeleteHandler
|
27
|
+
});
|
28
|
+
module.exports = __toCommonJS(RenameDeleteHandler_exports);
|
29
|
+
var import_obsidian = require("obsidian");
|
30
|
+
var import_implementations = require("obsidian-typings/implementations");
|
31
|
+
var import_Object = require("../Object.cjs");
|
32
|
+
var import_Path = require("../Path.cjs");
|
33
|
+
var import_AttachmentPath = require("./AttachmentPath.cjs");
|
34
|
+
var import_Link = require("./Link.cjs");
|
35
|
+
var import_MetadataCache = require("./MetadataCache.cjs");
|
36
|
+
var import_TAbstractFile = require("./TAbstractFile.cjs");
|
37
|
+
var import_Vault = require("./Vault.cjs");
|
38
|
+
var __import_meta_url = globalThis["import.meta.url"] ?? (() => {
|
39
|
+
if (typeof __filename !== "string") {
|
40
|
+
return new URL(window.location.href);
|
41
|
+
}
|
42
|
+
return require("node:url").pathToFileURL(__filename);
|
43
|
+
})();
|
44
|
+
var __process = globalThis["process"] ?? {
|
45
|
+
"cwd": () => "/",
|
46
|
+
"env": {},
|
47
|
+
"platform": "android"
|
48
|
+
};
|
49
|
+
class RenameDeleteHandler {
|
50
|
+
constructor(app, settingsBuilder) {
|
51
|
+
this.app = app;
|
52
|
+
this.settingsBuilder = settingsBuilder;
|
53
|
+
}
|
54
|
+
renamingPaths = /* @__PURE__ */ new Set();
|
55
|
+
specialRenames = [];
|
56
|
+
async handleRename(file, oldPath) {
|
57
|
+
console.debug(`Handle Rename ${oldPath} -> ${file.path}`);
|
58
|
+
if (this.renamingPaths.has(oldPath)) {
|
59
|
+
return;
|
60
|
+
}
|
61
|
+
if (!(file instanceof import_obsidian.TFile)) {
|
62
|
+
return;
|
63
|
+
}
|
64
|
+
const specialRename = this.specialRenames.find((x) => x.oldPath === file.path);
|
65
|
+
if (specialRename) {
|
66
|
+
await this.app.vault.rename(file, specialRename.tempPath);
|
67
|
+
return;
|
68
|
+
}
|
69
|
+
if (this.app.vault.adapter.insensitive && oldPath.toLowerCase() === file.path.toLowerCase() && (0, import_Path.dirname)(oldPath) === (0, import_Path.dirname)(file.path)) {
|
70
|
+
this.specialRenames.push({
|
71
|
+
oldPath,
|
72
|
+
newPath: file.path,
|
73
|
+
tempPath: (0, import_Path.join)(file.parent?.path ?? "", "__temp__" + file.name)
|
74
|
+
});
|
75
|
+
await this.app.vault.rename(file, oldPath);
|
76
|
+
return;
|
77
|
+
}
|
78
|
+
const updateAllLinks = this.app.fileManager.updateAllLinks;
|
79
|
+
try {
|
80
|
+
this.app.fileManager.updateAllLinks = async () => {
|
81
|
+
};
|
82
|
+
const renameMap = /* @__PURE__ */ new Map();
|
83
|
+
await this.fillRenameMap(file, oldPath, renameMap);
|
84
|
+
for (const oldPath2 of renameMap.keys()) {
|
85
|
+
this.renamingPaths.add(oldPath2);
|
86
|
+
}
|
87
|
+
for (const [oldPath2, newPath2] of renameMap.entries()) {
|
88
|
+
await this.processRename(oldPath2, newPath2, renameMap);
|
89
|
+
}
|
90
|
+
await this.processRename(oldPath, file.path, renameMap);
|
91
|
+
} finally {
|
92
|
+
this.renamingPaths.delete(oldPath);
|
93
|
+
this.app.fileManager.updateAllLinks = updateAllLinks;
|
94
|
+
const specialRename2 = this.specialRenames.find((x) => x.tempPath === file.path);
|
95
|
+
if (specialRename2) {
|
96
|
+
await this.app.vault.rename(file, specialRename2.newPath);
|
97
|
+
this.specialRenames.remove(specialRename2);
|
98
|
+
}
|
99
|
+
}
|
100
|
+
}
|
101
|
+
async handleDelete(file) {
|
102
|
+
console.debug(`Handle Delete ${file.path}`);
|
103
|
+
if (!(0, import_TAbstractFile.isNote)(file)) {
|
104
|
+
return;
|
105
|
+
}
|
106
|
+
if (this.renamingPaths.has(file.path)) {
|
107
|
+
return;
|
108
|
+
}
|
109
|
+
const attachmentFolder = await (0, import_AttachmentPath.getAttachmentFolderPath)(this.app, file.path);
|
110
|
+
await (0, import_Vault.removeFolderSafe)(this.app, attachmentFolder, file.path);
|
111
|
+
}
|
112
|
+
async fillRenameMap(file, oldPath, renameMap) {
|
113
|
+
renameMap.set(oldPath, file.path);
|
114
|
+
if (!(0, import_TAbstractFile.isNote)(file)) {
|
115
|
+
return;
|
116
|
+
}
|
117
|
+
const oldAttachmentFolderPath = await (0, import_AttachmentPath.getAttachmentFolderPath)(this.app, oldPath);
|
118
|
+
const newAttachmentFolderPath = await (0, import_AttachmentPath.getAttachmentFolderPath)(this.app, file.path);
|
119
|
+
const dummyOldAttachmentFolderPath = await (0, import_AttachmentPath.getAttachmentFolderPath)(this.app, (0, import_Path.join)((0, import_Path.dirname)(oldPath), "DUMMY_FILE.md"));
|
120
|
+
const oldAttachmentFolder = this.app.vault.getFolderByPath(oldAttachmentFolderPath);
|
121
|
+
if (!oldAttachmentFolder) {
|
122
|
+
return;
|
123
|
+
}
|
124
|
+
if (oldAttachmentFolderPath === newAttachmentFolderPath) {
|
125
|
+
return;
|
126
|
+
}
|
127
|
+
const children = [];
|
128
|
+
if (oldAttachmentFolderPath === dummyOldAttachmentFolderPath) {
|
129
|
+
const cache = await (0, import_MetadataCache.getCacheSafe)(this.app, file);
|
130
|
+
if (!cache) {
|
131
|
+
return;
|
132
|
+
}
|
133
|
+
for (const link of (0, import_MetadataCache.getAllLinks)(cache)) {
|
134
|
+
const attachmentFile = (0, import_Link.extractLinkFile)(this.app, link, oldPath);
|
135
|
+
if (!attachmentFile) {
|
136
|
+
continue;
|
137
|
+
}
|
138
|
+
if (attachmentFile.path.startsWith(oldAttachmentFolderPath)) {
|
139
|
+
const backlinks = await (0, import_MetadataCache.getBacklinksForFileSafe)(this.app, attachmentFile);
|
140
|
+
if (backlinks.keys().length === 1) {
|
141
|
+
children.push(attachmentFile);
|
142
|
+
}
|
143
|
+
}
|
144
|
+
}
|
145
|
+
} else {
|
146
|
+
import_obsidian.Vault.recurseChildren(oldAttachmentFolder, (child) => {
|
147
|
+
if (child instanceof import_obsidian.TFile) {
|
148
|
+
children.push(child);
|
149
|
+
}
|
150
|
+
});
|
151
|
+
}
|
152
|
+
for (const child of children) {
|
153
|
+
if ((0, import_TAbstractFile.isNote)(child)) {
|
154
|
+
continue;
|
155
|
+
}
|
156
|
+
const relativePath = (0, import_Path.relative)(oldAttachmentFolderPath, child.path);
|
157
|
+
const newDir = (0, import_Path.join)(newAttachmentFolderPath, (0, import_Path.dirname)(relativePath));
|
158
|
+
let newChildPath = (0, import_Path.join)(newDir, child.name);
|
159
|
+
if (child.path !== newChildPath) {
|
160
|
+
newChildPath = this.app.vault.getAvailablePath((0, import_Path.join)(newDir, child.basename), child.extension);
|
161
|
+
renameMap.set(child.path, newChildPath);
|
162
|
+
}
|
163
|
+
}
|
164
|
+
}
|
165
|
+
async processRename(oldPath, newPath, renameMap) {
|
166
|
+
let oldFile = null;
|
167
|
+
try {
|
168
|
+
oldFile = this.app.vault.getFileByPath(oldPath);
|
169
|
+
let newFile = this.app.vault.getFileByPath(newPath);
|
170
|
+
if (oldFile) {
|
171
|
+
await (0, import_Vault.createFolderSafe)(this.app, (0, import_Path.dirname)(newPath));
|
172
|
+
const oldFolder = oldFile.parent;
|
173
|
+
try {
|
174
|
+
if (newFile) {
|
175
|
+
try {
|
176
|
+
await this.app.vault.delete(newFile);
|
177
|
+
} catch (e) {
|
178
|
+
if (this.app.vault.getAbstractFileByPath(newPath)) {
|
179
|
+
throw e;
|
180
|
+
}
|
181
|
+
}
|
182
|
+
}
|
183
|
+
await this.app.vault.rename(oldFile, newPath);
|
184
|
+
} catch (e) {
|
185
|
+
if (!this.app.vault.getAbstractFileByPath(newPath) || this.app.vault.getAbstractFileByPath(oldPath)) {
|
186
|
+
throw e;
|
187
|
+
}
|
188
|
+
}
|
189
|
+
if (this.settingsBuilder().shouldDeleteEmptyFolders) {
|
190
|
+
await (0, import_Vault.removeEmptyFolderHierarchy)(this.app, oldFolder);
|
191
|
+
}
|
192
|
+
}
|
193
|
+
oldFile = (0, import_implementations.createTFileInstance)(this.app.vault, oldPath);
|
194
|
+
newFile = this.app.vault.getFileByPath(newPath);
|
195
|
+
if (!oldFile.deleted || !newFile) {
|
196
|
+
throw new Error(`Could not rename ${oldPath} to ${newPath}`);
|
197
|
+
}
|
198
|
+
const backlinks = await this.getBacklinks(oldFile, newFile);
|
199
|
+
for (const parentNotePath of backlinks.keys()) {
|
200
|
+
let parentNote = this.app.vault.getFileByPath(parentNotePath);
|
201
|
+
if (!parentNote) {
|
202
|
+
const newParentNotePath = renameMap.get(parentNotePath);
|
203
|
+
if (newParentNotePath) {
|
204
|
+
parentNote = this.app.vault.getFileByPath(newParentNotePath);
|
205
|
+
}
|
206
|
+
}
|
207
|
+
if (!parentNote) {
|
208
|
+
console.warn(`Parent note not found: ${parentNotePath}`);
|
209
|
+
continue;
|
210
|
+
}
|
211
|
+
await (0, import_Vault.applyFileChanges)(this.app, parentNote, async () => {
|
212
|
+
if (!oldFile) {
|
213
|
+
return [];
|
214
|
+
}
|
215
|
+
const links = (await this.getBacklinks(oldFile, newFile)).get(parentNotePath) ?? [];
|
216
|
+
const changes = [];
|
217
|
+
for (const link of links) {
|
218
|
+
changes.push({
|
219
|
+
startIndex: link.position.start.offset,
|
220
|
+
endIndex: link.position.end.offset,
|
221
|
+
oldContent: link.original,
|
222
|
+
newContent: (0, import_Link.updateLink)({
|
223
|
+
app: this.app,
|
224
|
+
link,
|
225
|
+
pathOrFile: newFile,
|
226
|
+
oldPathOrFile: oldPath,
|
227
|
+
sourcePathOrFile: parentNote,
|
228
|
+
renameMap
|
229
|
+
})
|
230
|
+
});
|
231
|
+
}
|
232
|
+
return changes;
|
233
|
+
});
|
234
|
+
}
|
235
|
+
if ((0, import_TAbstractFile.isCanvasFile)(newFile)) {
|
236
|
+
await (0, import_Vault.processWithRetry)(this.app, newFile, (content) => {
|
237
|
+
const canvasData = JSON.parse(content);
|
238
|
+
for (const node of canvasData.nodes) {
|
239
|
+
if (node.type !== "file") {
|
240
|
+
continue;
|
241
|
+
}
|
242
|
+
const newPath2 = renameMap.get(node.file);
|
243
|
+
if (!newPath2) {
|
244
|
+
continue;
|
245
|
+
}
|
246
|
+
node.file = newPath2;
|
247
|
+
}
|
248
|
+
return (0, import_Object.toJson)(canvasData);
|
249
|
+
});
|
250
|
+
} else if ((0, import_TAbstractFile.isMarkdownFile)(newFile)) {
|
251
|
+
await (0, import_Link.updateLinksInFile)({
|
252
|
+
app: this.app,
|
253
|
+
pathOrFile: newFile,
|
254
|
+
oldPathOrFile: oldPath,
|
255
|
+
renameMap
|
256
|
+
});
|
257
|
+
}
|
258
|
+
} finally {
|
259
|
+
this.renamingPaths.delete(oldPath);
|
260
|
+
}
|
261
|
+
}
|
262
|
+
async getBacklinks(oldFile, newFile) {
|
263
|
+
const backlinks = /* @__PURE__ */ new Map();
|
264
|
+
const oldLinks = await (0, import_MetadataCache.getBacklinksForFileSafe)(this.app, oldFile);
|
265
|
+
for (const path of oldLinks.keys()) {
|
266
|
+
backlinks.set(path, oldLinks.get(path) ?? []);
|
267
|
+
}
|
268
|
+
if (!newFile) {
|
269
|
+
return backlinks;
|
270
|
+
}
|
271
|
+
const newLinks = await (0, import_MetadataCache.getBacklinksForFileSafe)(this.app, newFile);
|
272
|
+
for (const path of newLinks.keys()) {
|
273
|
+
const links = backlinks.get(path) ?? [];
|
274
|
+
links.push(...newLinks.get(path) ?? []);
|
275
|
+
backlinks.set(path, links);
|
276
|
+
}
|
277
|
+
return backlinks;
|
278
|
+
}
|
279
|
+
}
|
280
|
+
// Annotate the CommonJS export names for ESM import in node:
|
281
|
+
0 && (module.exports = {
|
282
|
+
RenameDeleteHandler
|
283
|
+
});
|
284
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL29ic2lkaWFuL1JlbmFtZURlbGV0ZUhhbmRsZXIudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbInZhciBfX2ltcG9ydF9tZXRhX3VybCA9IGdsb2JhbFRoaXNbJ2ltcG9ydC5tZXRhLnVybCddID8/ICgoKT0+e2lmKHR5cGVvZiBfX2ZpbGVuYW1lIT09XCJzdHJpbmdcIil7cmV0dXJuIG5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpfXJldHVybiByZXF1aXJlKFwibm9kZTp1cmxcIikucGF0aFRvRmlsZVVSTChfX2ZpbGVuYW1lKX0pKCk7XG52YXIgX19wcm9jZXNzID0gZ2xvYmFsVGhpc1sncHJvY2VzcyddID8/IHtcbiAgXCJjd2RcIjogKCk9PlwiL1wiLFxuICBcImVudlwiOiB7fSxcbiAgXCJwbGF0Zm9ybVwiOiBcImFuZHJvaWRcIlxufTtcbmltcG9ydCB0eXBlIHtcbiAgUmVmZXJlbmNlQ2FjaGUsXG4gIFRBYnN0cmFjdEZpbGVcbn0gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0IHtcbiAgQXBwLFxuICBURmlsZSxcbiAgVmF1bHRcbn0gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0IHR5cGUgeyBDYW52YXNEYXRhIH0gZnJvbSAnb2JzaWRpYW4vY2FudmFzLmpzJztcbmltcG9ydCB7IGNyZWF0ZVRGaWxlSW5zdGFuY2UgfSBmcm9tICdvYnNpZGlhbi10eXBpbmdzL2ltcGxlbWVudGF0aW9ucyc7XG5cbmltcG9ydCB7IHRvSnNvbiB9IGZyb20gJy4uL09iamVjdC50cyc7XG5pbXBvcnQge1xuICBkaXJuYW1lLFxuICBqb2luLFxuICByZWxhdGl2ZVxufSBmcm9tICcuLi9QYXRoLnRzJztcbmltcG9ydCB7IGdldEF0dGFjaG1lbnRGb2xkZXJQYXRoIH0gZnJvbSAnLi9BdHRhY2htZW50UGF0aC50cyc7XG5pbXBvcnQge1xuICBleHRyYWN0TGlua0ZpbGUsXG4gIHVwZGF0ZUxpbmssXG4gIHVwZGF0ZUxpbmtzSW5GaWxlXG59IGZyb20gJy4vTGluay50cyc7XG5pbXBvcnQge1xuICBnZXRBbGxMaW5rcyxcbiAgZ2V0QmFja2xpbmtzRm9yRmlsZVNhZmUsXG4gIGdldENhY2hlU2FmZVxufSBmcm9tICcuL01ldGFkYXRhQ2FjaGUudHMnO1xuaW1wb3J0IHtcbiAgaXNDYW52YXNGaWxlLFxuICBpc01hcmtkb3duRmlsZSxcbiAgaXNOb3RlXG59IGZyb20gJy4vVEFic3RyYWN0RmlsZS50cyc7XG5pbXBvcnQge1xuICBhcHBseUZpbGVDaGFuZ2VzLFxuICBjcmVhdGVGb2xkZXJTYWZlLFxuICBwcm9jZXNzV2l0aFJldHJ5LFxuICByZW1vdmVFbXB0eUZvbGRlckhpZXJhcmNoeSxcbiAgcmVtb3ZlRm9sZGVyU2FmZVxufSBmcm9tICcuL1ZhdWx0LnRzJztcblxuaW50ZXJmYWNlIFNwZWNpYWxSZW5hbWUge1xuICBvbGRQYXRoOiBzdHJpbmc7XG4gIG5ld1BhdGg6IHN0cmluZztcbiAgdGVtcFBhdGg6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFJlbmFtZURlbGV0ZUhhbmRsZXJTZXR0aW5ncyB7XG4gIHNob3VsZERlbGV0ZUVtcHR5Rm9sZGVyczogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBIYW5kbGVzIHJlbmFtaW5nIGFuZCBkZWxldGluZyBmaWxlcy5cbiAqL1xuZXhwb3J0IGNsYXNzIFJlbmFtZURlbGV0ZUhhbmRsZXIge1xuICBwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSBhcHA6IEFwcCwgcHJpdmF0ZSBzZXR0aW5nc0J1aWxkZXI6ICgpID0+IFJlbmFtZURlbGV0ZUhhbmRsZXJTZXR0aW5ncykgeyB9XG5cbiAgcHJpdmF0ZSByZW5hbWluZ1BhdGhzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIHByaXZhdGUgc3BlY2lhbFJlbmFtZXM6IFNwZWNpYWxSZW5hbWVbXSA9IFtdO1xuXG4gIHB1YmxpYyBhc3luYyBoYW5kbGVSZW5hbWUoZmlsZTogVEFic3RyYWN0RmlsZSwgb2xkUGF0aDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc29sZS5kZWJ1ZyhgSGFuZGxlIFJlbmFtZSAke29sZFBhdGh9IC0+ICR7ZmlsZS5wYXRofWApO1xuXG4gICAgaWYgKHRoaXMucmVuYW1pbmdQYXRocy5oYXMob2xkUGF0aCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIShmaWxlIGluc3RhbmNlb2YgVEZpbGUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc3BlY2lhbFJlbmFtZSA9IHRoaXMuc3BlY2lhbFJlbmFtZXMuZmluZCgoeCkgPT4geC5vbGRQYXRoID09PSBmaWxlLnBhdGgpO1xuICAgIGlmIChzcGVjaWFsUmVuYW1lKSB7XG4gICAgICBhd2FpdCB0aGlzLmFwcC52YXVsdC5yZW5hbWUoZmlsZSwgc3BlY2lhbFJlbmFtZS50ZW1wUGF0aCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYXBwLnZhdWx0LmFkYXB0ZXIuaW5zZW5zaXRpdmUgJiYgb2xkUGF0aC50b0xvd2VyQ2FzZSgpID09PSBmaWxlLnBhdGgudG9Mb3dlckNhc2UoKSAmJiBkaXJuYW1lKG9sZFBhdGgpID09PSBkaXJuYW1lKGZpbGUucGF0aCkpIHtcbiAgICAgIHRoaXMuc3BlY2lhbFJlbmFtZXMucHVzaCh7XG4gICAgICAgIG9sZFBhdGgsXG4gICAgICAgIG5ld1BhdGg6IGZpbGUucGF0aCxcbiAgICAgICAgdGVtcFBhdGg6IGpvaW4oZmlsZS5wYXJlbnQ/LnBhdGggPz8gJycsICdfX3RlbXBfXycgKyBmaWxlLm5hbWUpXG4gICAgICB9KTtcblxuICAgICAgYXdhaXQgdGhpcy5hcHAudmF1bHQucmVuYW1lKGZpbGUsIG9sZFBhdGgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvdW5ib3VuZC1tZXRob2RcbiAgICBjb25zdCB1cGRhdGVBbGxMaW5rcyA9IHRoaXMuYXBwLmZpbGVNYW5hZ2VyLnVwZGF0ZUFsbExpbmtzO1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmFwcC5maWxlTWFuYWdlci51cGRhdGVBbGxMaW5rcyA9IGFzeW5jICgpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgICAgLy8gZG8gbm90aGluZ1xuICAgICAgfTtcblxuICAgICAgY29uc3QgcmVuYW1lTWFwID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcbiAgICAgIGF3YWl0IHRoaXMuZmlsbFJlbmFtZU1hcChmaWxlLCBvbGRQYXRoLCByZW5hbWVNYXApO1xuICAgICAgZm9yIChjb25zdCBvbGRQYXRoIG9mIHJlbmFtZU1hcC5rZXlzKCkpIHtcbiAgICAgICAgdGhpcy5yZW5hbWluZ1BhdGhzLmFkZChvbGRQYXRoKTtcbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBbb2xkUGF0aDIsIG5ld1BhdGgyXSBvZiByZW5hbWVNYXAuZW50cmllcygpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMucHJvY2Vzc1JlbmFtZShvbGRQYXRoMiwgbmV3UGF0aDIsIHJlbmFtZU1hcCk7XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IHRoaXMucHJvY2Vzc1JlbmFtZShvbGRQYXRoLCBmaWxlLnBhdGgsIHJlbmFtZU1hcCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMucmVuYW1pbmdQYXRocy5kZWxldGUob2xkUGF0aCk7XG4gICAgICB0aGlzLmFwcC5maWxlTWFuYWdlci51cGRhdGVBbGxMaW5rcyA9IHVwZGF0ZUFsbExpbmtzO1xuXG4gICAgICBjb25zdCBzcGVjaWFsUmVuYW1lID0gdGhpcy5zcGVjaWFsUmVuYW1lcy5maW5kKCh4KSA9PiB4LnRlbXBQYXRoID09PSBmaWxlLnBhdGgpO1xuICAgICAgaWYgKHNwZWNpYWxSZW5hbWUpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5hcHAudmF1bHQucmVuYW1lKGZpbGUsIHNwZWNpYWxSZW5hbWUubmV3UGF0aCk7XG4gICAgICAgIHRoaXMuc3BlY2lhbFJlbmFtZXMucmVtb3ZlKHNwZWNpYWxSZW5hbWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBoYW5kbGVEZWxldGUoZmlsZTogVEFic3RyYWN0RmlsZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnNvbGUuZGVidWcoYEhhbmRsZSBEZWxldGUgJHtmaWxlLnBhdGh9YCk7XG4gICAgaWYgKCFpc05vdGUoZmlsZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5yZW5hbWluZ1BhdGhzLmhhcyhmaWxlLnBhdGgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYXR0YWNobWVudEZvbGRlciA9IGF3YWl0IGdldEF0dGFjaG1lbnRGb2xkZXJQYXRoKHRoaXMuYXBwLCBmaWxlLnBhdGgpO1xuICAgIGF3YWl0IHJlbW92ZUZvbGRlclNhZmUodGhpcy5hcHAsIGF0dGFjaG1lbnRGb2xkZXIsIGZpbGUucGF0aCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGZpbGxSZW5hbWVNYXAoZmlsZTogVEZpbGUsIG9sZFBhdGg6IHN0cmluZywgcmVuYW1lTWFwOiBNYXA8c3RyaW5nLCBzdHJpbmc+KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmVuYW1lTWFwLnNldChvbGRQYXRoLCBmaWxlLnBhdGgpO1xuXG4gICAgaWYgKCFpc05vdGUoZmlsZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBvbGRBdHRhY2htZW50Rm9sZGVyUGF0aCA9IGF3YWl0IGdldEF0dGFjaG1lbnRGb2xkZXJQYXRoKHRoaXMuYXBwLCBvbGRQYXRoKTtcbiAgICBjb25zdCBuZXdBdHRhY2htZW50Rm9sZGVyUGF0aCA9IGF3YWl0IGdldEF0dGFjaG1lbnRGb2xkZXJQYXRoKHRoaXMuYXBwLCBmaWxlLnBhdGgpO1xuICAgIGNvbnN0IGR1bW15T2xkQXR0YWNobWVudEZvbGRlclBhdGggPSBhd2FpdCBnZXRBdHRhY2htZW50Rm9sZGVyUGF0aCh0aGlzLmFwcCwgam9pbihkaXJuYW1lKG9sZFBhdGgpLCAnRFVNTVlfRklMRS5tZCcpKTtcblxuICAgIGNvbnN0IG9sZEF0dGFjaG1lbnRGb2xkZXIgPSB0aGlzLmFwcC52YXVsdC5nZXRGb2xkZXJCeVBhdGgob2xkQXR0YWNobWVudEZvbGRlclBhdGgpO1xuXG4gICAgaWYgKCFvbGRBdHRhY2htZW50Rm9sZGVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKG9sZEF0dGFjaG1lbnRGb2xkZXJQYXRoID09PSBuZXdBdHRhY2htZW50Rm9sZGVyUGF0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGNoaWxkcmVuOiBURmlsZVtdID0gW107XG5cbiAgICBpZiAob2xkQXR0YWNobWVudEZvbGRlclBhdGggPT09IGR1bW15T2xkQXR0YWNobWVudEZvbGRlclBhdGgpIHtcbiAgICAgIGNvbnN0IGNhY2hlID0gYXdhaXQgZ2V0Q2FjaGVTYWZlKHRoaXMuYXBwLCBmaWxlKTtcbiAgICAgIGlmICghY2FjaGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZm9yIChjb25zdCBsaW5rIG9mIGdldEFsbExpbmtzKGNhY2hlKSkge1xuICAgICAgICBjb25zdCBhdHRhY2htZW50RmlsZSA9IGV4dHJhY3RMaW5rRmlsZSh0aGlzLmFwcCwgbGluaywgb2xkUGF0aCk7XG4gICAgICAgIGlmICghYXR0YWNobWVudEZpbGUpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhdHRhY2htZW50RmlsZS5wYXRoLnN0YXJ0c1dpdGgob2xkQXR0YWNobWVudEZvbGRlclBhdGgpKSB7XG4gICAgICAgICAgY29uc3QgYmFja2xpbmtzID0gYXdhaXQgZ2V0QmFja2xpbmtzRm9yRmlsZVNhZmUodGhpcy5hcHAsIGF0dGFjaG1lbnRGaWxlKTtcbiAgICAgICAgICBpZiAoYmFja2xpbmtzLmtleXMoKS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goYXR0YWNobWVudEZpbGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBWYXVsdC5yZWN1cnNlQ2hpbGRyZW4ob2xkQXR0YWNobWVudEZvbGRlciwgKGNoaWxkKSA9PiB7XG4gICAgICAgIGlmIChjaGlsZCBpbnN0YW5jZW9mIFRGaWxlKSB7XG4gICAgICAgICAgY2hpbGRyZW4ucHVzaChjaGlsZCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgY2hpbGQgb2YgY2hpbGRyZW4pIHtcbiAgICAgIGlmIChpc05vdGUoY2hpbGQpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVsYXRpdmVQYXRoID0gcmVsYXRpdmUob2xkQXR0YWNobWVudEZvbGRlclBhdGgsIGNoaWxkLnBhdGgpO1xuICAgICAgY29uc3QgbmV3RGlyID0gam9pbihuZXdBdHRhY2htZW50Rm9sZGVyUGF0aCwgZGlybmFtZShyZWxhdGl2ZVBhdGgpKTtcbiAgICAgIGxldCBuZXdDaGlsZFBhdGggPSBqb2luKG5ld0RpciwgY2hpbGQubmFtZSk7XG4gICAgICBpZiAoY2hpbGQucGF0aCAhPT0gbmV3Q2hpbGRQYXRoKSB7XG4gICAgICAgIG5ld0NoaWxkUGF0aCA9IHRoaXMuYXBwLnZhdWx0LmdldEF2YWlsYWJsZVBhdGgoam9pbihuZXdEaXIsIGNoaWxkLmJhc2VuYW1lKSwgY2hpbGQuZXh0ZW5zaW9uKTtcbiAgICAgICAgcmVuYW1lTWFwLnNldChjaGlsZC5wYXRoLCBuZXdDaGlsZFBhdGgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHJvY2Vzc1JlbmFtZShvbGRQYXRoOiBzdHJpbmcsIG5ld1BhdGg6IHN0cmluZywgcmVuYW1lTWFwOiBNYXA8c3RyaW5nLCBzdHJpbmc+KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgbGV0IG9sZEZpbGU6IFRGaWxlIHwgbnVsbCA9IG51bGw7XG5cbiAgICB0cnkge1xuICAgICAgb2xkRmlsZSA9IHRoaXMuYXBwLnZhdWx0LmdldEZpbGVCeVBhdGgob2xkUGF0aCk7XG4gICAgICBsZXQgbmV3RmlsZSA9IHRoaXMuYXBwLnZhdWx0LmdldEZpbGVCeVBhdGgobmV3UGF0aCk7XG5cbiAgICAgIGlmIChvbGRGaWxlKSB7XG4gICAgICAgIGF3YWl0IGNyZWF0ZUZvbGRlclNhZmUodGhpcy5hcHAsIGRpcm5hbWUobmV3UGF0aCkpO1xuICAgICAgICBjb25zdCBvbGRGb2xkZXIgPSBvbGRGaWxlLnBhcmVudDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAobmV3RmlsZSkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5hcHAudmF1bHQuZGVsZXRlKG5ld0ZpbGUpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICBpZiAodGhpcy5hcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKG5ld1BhdGgpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBhd2FpdCB0aGlzLmFwcC52YXVsdC5yZW5hbWUob2xkRmlsZSwgbmV3UGF0aCk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBpZiAoIXRoaXMuYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChuZXdQYXRoKSB8fCB0aGlzLmFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgob2xkUGF0aCkpIHtcbiAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnNldHRpbmdzQnVpbGRlcigpLnNob3VsZERlbGV0ZUVtcHR5Rm9sZGVycykge1xuICAgICAgICAgIGF3YWl0IHJlbW92ZUVtcHR5Rm9sZGVySGllcmFyY2h5KHRoaXMuYXBwLCBvbGRGb2xkZXIpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIG9sZEZpbGUgPSBjcmVhdGVURmlsZUluc3RhbmNlKHRoaXMuYXBwLnZhdWx0LCBvbGRQYXRoKTtcbiAgICAgIG5ld0ZpbGUgPSB0aGlzLmFwcC52YXVsdC5nZXRGaWxlQnlQYXRoKG5ld1BhdGgpO1xuXG4gICAgICBpZiAoIW9sZEZpbGUuZGVsZXRlZCB8fCAhbmV3RmlsZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCByZW5hbWUgJHtvbGRQYXRofSB0byAke25ld1BhdGh9YCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGJhY2tsaW5rcyA9IGF3YWl0IHRoaXMuZ2V0QmFja2xpbmtzKG9sZEZpbGUsIG5ld0ZpbGUpO1xuXG4gICAgICBmb3IgKGNvbnN0IHBhcmVudE5vdGVQYXRoIG9mIGJhY2tsaW5rcy5rZXlzKCkpIHtcbiAgICAgICAgbGV0IHBhcmVudE5vdGUgPSB0aGlzLmFwcC52YXVsdC5nZXRGaWxlQnlQYXRoKHBhcmVudE5vdGVQYXRoKTtcbiAgICAgICAgaWYgKCFwYXJlbnROb3RlKSB7XG4gICAgICAgICAgY29uc3QgbmV3UGFyZW50Tm90ZVBhdGggPSByZW5hbWVNYXAuZ2V0KHBhcmVudE5vdGVQYXRoKTtcbiAgICAgICAgICBpZiAobmV3UGFyZW50Tm90ZVBhdGgpIHtcbiAgICAgICAgICAgIHBhcmVudE5vdGUgPSB0aGlzLmFwcC52YXVsdC5nZXRGaWxlQnlQYXRoKG5ld1BhcmVudE5vdGVQYXRoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXBhcmVudE5vdGUpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oYFBhcmVudCBub3RlIG5vdCBmb3VuZDogJHtwYXJlbnROb3RlUGF0aH1gKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IGFwcGx5RmlsZUNoYW5nZXModGhpcy5hcHAsIHBhcmVudE5vdGUsIGFzeW5jICgpID0+IHtcbiAgICAgICAgICBpZiAoIW9sZEZpbGUpIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgbGlua3NcbiAgICAgICAgICAgID0gKGF3YWl0IHRoaXMuZ2V0QmFja2xpbmtzKG9sZEZpbGUsIG5ld0ZpbGUpKS5nZXQocGFyZW50Tm90ZVBhdGgpID8/IFtdO1xuICAgICAgICAgIGNvbnN0IGNoYW5nZXMgPSBbXTtcblxuICAgICAgICAgIGZvciAoY29uc3QgbGluayBvZiBsaW5rcykge1xuICAgICAgICAgICAgY2hhbmdlcy5wdXNoKHtcbiAgICAgICAgICAgICAgc3RhcnRJbmRleDogbGluay5wb3NpdGlvbi5zdGFydC5vZmZzZXQsXG4gICAgICAgICAgICAgIGVuZEluZGV4OiBsaW5rLnBvc2l0aW9uLmVuZC5vZmZzZXQsXG4gICAgICAgICAgICAgIG9sZENvbnRlbnQ6IGxpbmsub3JpZ2luYWwsXG4gICAgICAgICAgICAgIG5ld0NvbnRlbnQ6IHVwZGF0ZUxpbmsoe1xuICAgICAgICAgICAgICAgIGFwcDogdGhpcy5hcHAsXG4gICAgICAgICAgICAgICAgbGluayxcbiAgICAgICAgICAgICAgICBwYXRoT3JGaWxlOiBuZXdGaWxlLFxuICAgICAgICAgICAgICAgIG9sZFBhdGhPckZpbGU6IG9sZFBhdGgsXG4gICAgICAgICAgICAgICAgc291cmNlUGF0aE9yRmlsZTogcGFyZW50Tm90ZSxcbiAgICAgICAgICAgICAgICByZW5hbWVNYXBcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBjaGFuZ2VzO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzQ2FudmFzRmlsZShuZXdGaWxlKSkge1xuICAgICAgICBhd2FpdCBwcm9jZXNzV2l0aFJldHJ5KHRoaXMuYXBwLCBuZXdGaWxlLCAoY29udGVudCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGNhbnZhc0RhdGEgPSBKU09OLnBhcnNlKGNvbnRlbnQpIGFzIENhbnZhc0RhdGE7XG4gICAgICAgICAgZm9yIChjb25zdCBub2RlIG9mIGNhbnZhc0RhdGEubm9kZXMpIHtcbiAgICAgICAgICAgIGlmIChub2RlLnR5cGUgIT09ICdmaWxlJykge1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG5ld1BhdGggPSByZW5hbWVNYXAuZ2V0KG5vZGUuZmlsZSk7XG4gICAgICAgICAgICBpZiAoIW5ld1BhdGgpIHtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBub2RlLmZpbGUgPSBuZXdQYXRoO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdG9Kc29uKGNhbnZhc0RhdGEpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAoaXNNYXJrZG93bkZpbGUobmV3RmlsZSkpIHtcbiAgICAgICAgYXdhaXQgdXBkYXRlTGlua3NJbkZpbGUoe1xuICAgICAgICAgIGFwcDogdGhpcy5hcHAsXG4gICAgICAgICAgcGF0aE9yRmlsZTogbmV3RmlsZSxcbiAgICAgICAgICBvbGRQYXRoT3JGaWxlOiBvbGRQYXRoLFxuICAgICAgICAgIHJlbmFtZU1hcFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5yZW5hbWluZ1BhdGhzLmRlbGV0ZShvbGRQYXRoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldEJhY2tsaW5rcyhvbGRGaWxlOiBURmlsZSwgbmV3RmlsZTogVEZpbGUgfCBudWxsKTogUHJvbWlzZTxNYXA8c3RyaW5nLCBSZWZlcmVuY2VDYWNoZVtdPj4ge1xuICAgIGNvbnN0IGJhY2tsaW5rcyA9IG5ldyBNYXA8c3RyaW5nLCBSZWZlcmVuY2VDYWNoZVtdPigpO1xuICAgIGNvbnN0IG9sZExpbmtzID0gYXdhaXQgZ2V0QmFja2xpbmtzRm9yRmlsZVNhZmUodGhpcy5hcHAsIG9sZEZpbGUpO1xuICAgIGZvciAoY29uc3QgcGF0aCBvZiBvbGRMaW5rcy5rZXlzKCkpIHtcbiAgICAgIGJhY2tsaW5rcy5zZXQocGF0aCwgb2xkTGlua3MuZ2V0KHBhdGgpID8/IFtdKTtcbiAgICB9XG5cbiAgICBpZiAoIW5ld0ZpbGUpIHtcbiAgICAgIHJldHVybiBiYWNrbGlua3M7XG4gICAgfVxuXG4gICAgY29uc3QgbmV3TGlua3MgPSBhd2FpdCBnZXRCYWNrbGlua3NGb3JGaWxlU2FmZSh0aGlzLmFwcCwgbmV3RmlsZSk7XG5cbiAgICBmb3IgKGNvbnN0IHBhdGggb2YgbmV3TGlua3Mua2V5cygpKSB7XG4gICAgICBjb25zdCBsaW5rcyA9IGJhY2tsaW5rcy5nZXQocGF0aCkgPz8gW107XG4gICAgICBsaW5rcy5wdXNoKC4uLm5ld0xpbmtzLmdldChwYXRoKSA/PyBbXSk7XG4gICAgICBiYWNrbGlua3Muc2V0KHBhdGgsIGxpbmtzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYmFja2xpbmtzO1xuICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFVQSxzQkFJTztBQUVQLDZCQUFvQztBQUVwQyxvQkFBdUI7QUFDdkIsa0JBSU87QUFDUCw0QkFBd0M7QUFDeEMsa0JBSU87QUFDUCwyQkFJTztBQUNQLDJCQUlPO0FBQ1AsbUJBTU87QUE5Q1AsSUFBSSxvQkFBb0IsV0FBVyxpQkFBaUIsTUFBTSxNQUFJO0FBQUMsTUFBRyxPQUFPLGVBQWEsVUFBUztBQUFDLFdBQU8sSUFBSSxJQUFJLE9BQU8sU0FBUyxJQUFJO0FBQUEsRUFBQztBQUFDLFNBQU8sUUFBUSxVQUFVLEVBQUUsY0FBYyxVQUFVO0FBQUMsR0FBRztBQUM1TCxJQUFJLFlBQVksV0FBVyxTQUFTLEtBQUs7QUFBQSxFQUN2QyxPQUFPLE1BQUk7QUFBQSxFQUNYLE9BQU8sQ0FBQztBQUFBLEVBQ1IsWUFB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QUFDO0FBQUEsVUFDSDtBQUVBLGlCQUFPO0FBQUEsUUFDVCxDQUFDO0FBQUEsTUFDSDtBQUVBLGNBQUksbUNBQWEsT0FBTyxHQUFHO0FBQ3pCLGtCQUFNLCtCQUFpQixLQUFLLEtBQUssU0FBUyxDQUFDLFlBQVk7QUFDckQsZ0JBQU0sYUFBYSxLQUFLLE1BQU0sT0FBTztBQUNyQyxxQkFBVyxRQUFRLFdBQVcsT0FBTztBQUNuQyxnQkFBSSxLQUFLLFNBQVMsUUFBUTtBQUN4QjtBQUFBLFlBQ0Y7QUFDQSxrQkFBTUMsV0FBVSxVQUFVLElBQUksS0FBSyxJQUFJO0FBQ3ZDLGdCQUFJLENBQUNBLFVBQVM7QUFDWjtBQUFBLFlBQ0Y7QUFDQSxpQkFBSyxPQUFPQTtBQUFBLFVBQ2Q7QUFDQSxxQkFBTyxzQkFBTyxVQUFVO0FBQUEsUUFDMUIsQ0FBQztBQUFBLE1BQ0gsZUFBVyxxQ0FBZSxPQUFPLEdBQUc7QUFDbEMsa0JBQU0sK0JBQWtCO0FBQUEsVUFDdEIsS0FBSyxLQUFLO0FBQUEsVUFDVixZQUFZO0FBQUEsVUFDWixlQUFlO0FBQUEsVUFDZjtBQUFBLFFBQ0YsQ0FBQztBQUFBLE1BQ0g7QUFBQSxJQUNGLFVBQUU7QUFDQSxXQUFLLGNBQWMsT0FBTyxPQUFPO0FBQUEsSUFDbkM7QUFBQSxFQUNGO0FBQUEsRUFFQSxNQUFjLGFBQWEsU0FBZ0IsU0FBK0Q7QUFDeEcsVUFBTSxZQUFZLG9CQUFJLElBQThCO0FBQ3BELFVBQU0sV0FBVyxVQUFNLDhDQUF3QixLQUFLLEtBQUssT0FBTztBQUNoRSxlQUFXLFFBQVEsU0FBUyxLQUFLLEdBQUc7QUFDbEMsZ0JBQVUsSUFBSSxNQUFNLFNBQVMsSUFBSSxJQUFJLEtBQUssQ0FBQyxDQUFDO0FBQUEsSUFDOUM7QUFFQSxRQUFJLENBQUMsU0FBUztBQUNaLGFBQU87QUFBQSxJQUNUO0FBRUEsVUFBTSxXQUFXLFVBQU0sOENBQXdCLEtBQUssS0FBSyxPQUFPO0FBRWhFLGVBQVcsUUFBUSxTQUFTLEtBQUssR0FBRztBQUNsQyxZQUFNLFFBQVEsVUFBVSxJQUFJLElBQUksS0FBSyxDQUFDO0FBQ3RDLFlBQU0sS0FBSyxHQUFHLFNBQVMsSUFBSSxJQUFJLEtBQUssQ0FBQyxDQUFDO0FBQ3RDLGdCQUFVLElBQUksTUFBTSxLQUFLO0FBQUEsSUFDM0I7QUFFQSxXQUFPO0FBQUEsRUFDVDtBQUNGOyIsCiAgIm5hbWVzIjogWyJvbGRQYXRoIiwgInNwZWNpYWxSZW5hbWUiLCAibmV3UGF0aCJdCn0K
|
@@ -0,0 +1,21 @@
|
|
1
|
+
import type { TAbstractFile } from 'obsidian';
|
2
|
+
import { App } from 'obsidian';
|
3
|
+
interface RenameDeleteHandlerSettings {
|
4
|
+
shouldDeleteEmptyFolders: boolean;
|
5
|
+
}
|
6
|
+
/**
|
7
|
+
* Handles renaming and deleting files.
|
8
|
+
*/
|
9
|
+
export declare class RenameDeleteHandler {
|
10
|
+
private app;
|
11
|
+
private settingsBuilder;
|
12
|
+
constructor(app: App, settingsBuilder: () => RenameDeleteHandlerSettings);
|
13
|
+
private renamingPaths;
|
14
|
+
private specialRenames;
|
15
|
+
handleRename(file: TAbstractFile, oldPath: string): Promise<void>;
|
16
|
+
handleDelete(file: TAbstractFile): Promise<void>;
|
17
|
+
private fillRenameMap;
|
18
|
+
private processRename;
|
19
|
+
private getBacklinks;
|
20
|
+
}
|
21
|
+
export {};
|
@@ -46,6 +46,7 @@ __export(obsidian_exports, {
|
|
46
46
|
Modal: () => Modal,
|
47
47
|
ObsidianSettings: () => ObsidianSettings,
|
48
48
|
Plugin: () => Plugin,
|
49
|
+
RenameDeleteHandler: () => RenameDeleteHandler,
|
49
50
|
ResourceUrl: () => ResourceUrl,
|
50
51
|
TAbstractFile: () => TAbstractFile,
|
51
52
|
TFile: () => TFile,
|
@@ -66,6 +67,7 @@ var MetadataCache = __toESM(require("./MetadataCache.cjs"), 1);
|
|
66
67
|
var Modal = __toESM(require("./Modal/index.cjs"), 1);
|
67
68
|
var ObsidianSettings = __toESM(require("./ObsidianSettings.cjs"), 1);
|
68
69
|
var Plugin = __toESM(require("./Plugin/index.cjs"), 1);
|
70
|
+
var RenameDeleteHandler = __toESM(require("./RenameDeleteHandler.cjs"), 1);
|
69
71
|
var ResourceUrl = __toESM(require("./ResourceUrl.cjs"), 1);
|
70
72
|
var TAbstractFile = __toESM(require("./TAbstractFile.cjs"), 1);
|
71
73
|
var TFile = __toESM(require("./TFile.cjs"), 1);
|
@@ -97,10 +99,11 @@ var __process = globalThis["process"] ?? {
|
|
97
99
|
Modal,
|
98
100
|
ObsidianSettings,
|
99
101
|
Plugin,
|
102
|
+
RenameDeleteHandler,
|
100
103
|
ResourceUrl,
|
101
104
|
TAbstractFile,
|
102
105
|
TFile,
|
103
106
|
TFolder,
|
104
107
|
Vault
|
105
108
|
});
|
106
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL29ic2lkaWFuL2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJ2YXIgX19pbXBvcnRfbWV0YV91cmwgPSBnbG9iYWxUaGlzWydpbXBvcnQubWV0YS51cmwnXSA/PyAoKCk9PntpZih0eXBlb2YgX19maWxlbmFtZSE9PVwic3RyaW5nXCIpe3JldHVybiBuZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKX1yZXR1cm4gcmVxdWlyZShcIm5vZGU6dXJsXCIpLnBhdGhUb0ZpbGVVUkwoX19maWxlbmFtZSl9KSgpO1xudmFyIF9fcHJvY2VzcyA9IGdsb2JhbFRoaXNbJ3Byb2Nlc3MnXSA/
|
109
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL29ic2lkaWFuL2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJ2YXIgX19pbXBvcnRfbWV0YV91cmwgPSBnbG9iYWxUaGlzWydpbXBvcnQubWV0YS51cmwnXSA/PyAoKCk9PntpZih0eXBlb2YgX19maWxlbmFtZSE9PVwic3RyaW5nXCIpe3JldHVybiBuZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKX1yZXR1cm4gcmVxdWlyZShcIm5vZGU6dXJsXCIpLnBhdGhUb0ZpbGVVUkwoX19maWxlbmFtZSl9KSgpO1xudmFyIF9fcHJvY2VzcyA9IGdsb2JhbFRoaXNbJ3Byb2Nlc3MnXSA/PyB7XG4gIFwiY3dkXCI6ICgpPT5cIi9cIixcbiAgXCJlbnZcIjoge30sXG4gIFwicGxhdGZvcm1cIjogXCJhbmRyb2lkXCJcbn07XG4vKiBUSElTIElTIEEgR0VORVJBVEVEL0JVTkRMRUQgRklMRSBCWSBCVUlMRCBTQ1JJUFQgKi9cblxuZXhwb3J0ICogYXMgQXBwIGZyb20gJy4vQXBwLnRzJztcbmV4cG9ydCAqIGFzIEF0dGFjaG1lbnRQYXRoIGZyb20gJy4vQXR0YWNobWVudFBhdGgudHMnO1xuZXhwb3J0ICogYXMgQmFja2xpbmsgZnJvbSAnLi9CYWNrbGluay50cyc7XG5leHBvcnQgKiBhcyBDYWxsb3V0IGZyb20gJy4vQ2FsbG91dC50cyc7XG5leHBvcnQgKiBhcyBEYXRhdmlldyBmcm9tICcuL0RhdGF2aWV3LnRzJztcbmV4cG9ydCAqIGFzIERhdGF2aWV3TGluayBmcm9tICcuL0RhdGF2aWV3TGluay50cyc7XG5leHBvcnQgKiBhcyBGcm9udE1hdHRlciBmcm9tICcuL0Zyb250TWF0dGVyLnRzJztcbmV4cG9ydCAqIGFzIExpbmsgZnJvbSAnLi9MaW5rLnRzJztcbmV4cG9ydCAqIGFzIE1hcmtkb3duQ29kZUJsb2NrUHJvY2Vzc29yIGZyb20gJy4vTWFya2Rvd25Db2RlQmxvY2tQcm9jZXNzb3IudHMnO1xuZXhwb3J0ICogYXMgTWV0YWRhdGFDYWNoZSBmcm9tICcuL01ldGFkYXRhQ2FjaGUudHMnO1xuZXhwb3J0ICogYXMgTW9kYWwgZnJvbSAnLi9Nb2RhbC9pbmRleC50cyc7XG5leHBvcnQgKiBhcyBPYnNpZGlhblNldHRpbmdzIGZyb20gJy4vT2JzaWRpYW5TZXR0aW5ncy50cyc7XG5leHBvcnQgKiBhcyBQbHVnaW4gZnJvbSAnLi9QbHVnaW4vaW5kZXgudHMnO1xuZXhwb3J0ICogYXMgUmVuYW1lRGVsZXRlSGFuZGxlciBmcm9tICcuL1JlbmFtZURlbGV0ZUhhbmRsZXIudHMnO1xuZXhwb3J0ICogYXMgUmVzb3VyY2VVcmwgZnJvbSAnLi9SZXNvdXJjZVVybC50cyc7XG5leHBvcnQgKiBhcyBUQWJzdHJhY3RGaWxlIGZyb20gJy4vVEFic3RyYWN0RmlsZS50cyc7XG5leHBvcnQgKiBhcyBURmlsZSBmcm9tICcuL1RGaWxlLnRzJztcbmV4cG9ydCAqIGFzIFRGb2xkZXIgZnJvbSAnLi9URm9sZGVyLnRzJztcbmV4cG9ydCAqIGFzIFZhdWx0IGZyb20gJy4vVmF1bHQudHMnO1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVFBLFVBQXFCO0FBQ3JCLHFCQUFnQztBQUNoQyxlQUEwQjtBQUMxQixjQUF5QjtBQUN6QixlQUEwQjtBQUMxQixtQkFBOEI7QUFDOUIsa0JBQTZCO0FBQzdCLFdBQXNCO0FBQ3RCLGlDQUE0QztBQUM1QyxvQkFBK0I7QUFDL0IsWUFBdUI7QUFDdkIsdUJBQWtDO0FBQ2xDLGFBQXdCO0FBQ3hCLDBCQUFxQztBQUNyQyxrQkFBNkI7QUFDN0Isb0JBQStCO0FBQy9CLFlBQXVCO0FBQ3ZCLGNBQXlCO0FBQ3pCLFlBQXVCO0FBMUJ2QixJQUFJLG9CQUFvQixXQUFXLGlCQUFpQixNQUFNLE1BQUk7QUFBQyxNQUFHLE9BQU8sZUFBYSxVQUFTO0FBQUMsV0FBTyxJQUFJLElBQUksT0FBTyxTQUFTLElBQUk7QUFBQSxFQUFDO0FBQUMsU0FBTyxRQUFRLFVBQVUsRUFBRSxjQUFjLFVBQVU7QUFBQyxHQUFHO0FBQzVMLElBQUksWUFBWSxXQUFXLFNBQVMsS0FBSztBQUFBLEVBQ3ZDLE9BQU8sTUFBSTtBQUFBLEVBQ1gsT0FBTyxDQUFDO0FBQUEsRUFDUixZQUFZO0FBQ2Q7IiwKICAibmFtZXMiOiBbXQp9Cg==
|
@@ -11,6 +11,7 @@ export * as MetadataCache from './MetadataCache.ts';
|
|
11
11
|
export * as Modal from './Modal/index.ts';
|
12
12
|
export * as ObsidianSettings from './ObsidianSettings.ts';
|
13
13
|
export * as Plugin from './Plugin/index.ts';
|
14
|
+
export * as RenameDeleteHandler from './RenameDeleteHandler.ts';
|
14
15
|
export * as ResourceUrl from './ResourceUrl.ts';
|
15
16
|
export * as TAbstractFile from './TAbstractFile.ts';
|
16
17
|
export * as TFile from './TFile.ts';
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "obsidian-dev-utils",
|
3
|
-
"version": "3.
|
3
|
+
"version": "3.9.0",
|
4
4
|
"description": "This is the collection of useful functions that you can use for your Obsidian plugin development",
|
5
5
|
"main": "./dist/lib/index.cjs",
|
6
6
|
"types": "./dist/lib/index.d.ts",
|
@@ -76,7 +76,7 @@
|
|
76
76
|
"js-yaml": "^4.1.0",
|
77
77
|
"localforage": "^1.10.0",
|
78
78
|
"obsidian": "^1.6.6",
|
79
|
-
"obsidian-typings": "^2.2.1-beta.
|
79
|
+
"obsidian-typings": "^2.2.1-beta.11",
|
80
80
|
"path-browserify": "^1.0.1",
|
81
81
|
"type-fest": "^4.26.0"
|
82
82
|
},
|