2024-11-22 19:27:30 +00:00
/ *
THIS IS A GENERATED / BUNDLED FILE BY ESBUILD
if you want to view the source , please visit the github repository of this plugin
* /
2024-11-29 13:32:34 +00:00
( function patchRequireEsmDefault ( ) {
const _ _require = require ;
require = Object . assign ( ( id ) => {
const module2 = _ _require ( id ) ? ? { } ;
return module2 . _ _esModule && module2 . default ? module2 . default : module2 ;
} , _ _require ) ;
} ) ( )
2024-11-22 19:27:30 +00:00
"use strict" ;
var _ _create = Object . create ;
var _ _defProp = Object . defineProperty ;
var _ _getOwnPropDesc = Object . getOwnPropertyDescriptor ;
var _ _getOwnPropNames = Object . getOwnPropertyNames ;
var _ _getProtoOf = Object . getPrototypeOf ;
var _ _hasOwnProp = Object . prototype . hasOwnProperty ;
var _ _commonJS = ( cb , mod ) => function _ _require ( ) {
return mod || ( 0 , cb [ _ _getOwnPropNames ( cb ) [ 0 ] ] ) ( ( mod = { exports : { } } ) . exports , mod ) , mod . exports ;
} ;
var _ _export = ( target , all ) => {
for ( var name in all )
_ _defProp ( target , name , { get : all [ name ] , enumerable : true } ) ;
} ;
var _ _copyProps = ( to , from , except , desc ) => {
if ( from && typeof from === "object" || typeof from === "function" ) {
for ( let key of _ _getOwnPropNames ( from ) )
if ( ! _ _hasOwnProp . call ( to , key ) && key !== except )
_ _defProp ( to , key , { get : ( ) => from [ key ] , enumerable : ! ( desc = _ _getOwnPropDesc ( from , key ) ) || desc . enumerable } ) ;
}
return to ;
} ;
var _ _toESM = ( mod , isNodeMode , target ) => ( target = mod != null ? _ _create ( _ _getProtoOf ( mod ) ) : { } , _ _copyProps (
// If the importer is in node compatibility mode or this is not an ESM
// file that has been converted to a CommonJS file using a Babel-
// compatible transform (i.e. "__esModule" has not been set), then set
// "default" to the CommonJS "module.exports" for node compatibility.
isNodeMode || ! mod || ! mod . _ _esModule ? _ _defProp ( target , "default" , { value : mod , enumerable : true } ) : target ,
mod
) ) ;
var _ _toCommonJS = ( mod ) => _ _copyProps ( _ _defProp ( { } , "__esModule" , { value : true } ) , mod ) ;
// node_modules/obsidian-dev-utils/dist/lib/Function.cjs
var require _Function = _ _commonJS ( {
"node_modules/obsidian-dev-utils/dist/lib/Function.cjs" ( exports2 , module2 ) {
( function patchRequireEsmDefault ( ) {
const _ _require = require ;
require = Object . assign ( ( id ) => {
2024-11-29 13:32:34 +00:00
const module22 = _ _require ( id ) ? ? { } ;
return module22 . _ _esModule && module22 . default ? module22 . default : module22 ;
2024-11-22 19:27:30 +00:00
} , _ _require ) ;
} ) ( ) ;
var _ _defProp2 = Object . defineProperty ;
var _ _getOwnPropDesc2 = Object . getOwnPropertyDescriptor ;
var _ _getOwnPropNames2 = Object . getOwnPropertyNames ;
var _ _hasOwnProp2 = Object . prototype . hasOwnProperty ;
var _ _export2 = ( target , all ) => {
for ( var name in all )
_ _defProp2 ( target , name , { get : all [ name ] , enumerable : true } ) ;
} ;
var _ _copyProps2 = ( to , from , except , desc ) => {
if ( from && typeof from === "object" || typeof from === "function" ) {
for ( let key of _ _getOwnPropNames2 ( from ) )
if ( ! _ _hasOwnProp2 . call ( to , key ) && key !== except )
_ _defProp2 ( to , key , { get : ( ) => from [ key ] , enumerable : ! ( desc = _ _getOwnPropDesc2 ( from , key ) ) || desc . enumerable } ) ;
}
return to ;
} ;
var _ _toCommonJS2 = ( mod ) => _ _copyProps2 ( _ _defProp2 ( { } , "__esModule" , { value : true } ) , mod ) ;
var Function _exports = { } ;
_ _export2 ( Function _exports , {
noop : ( ) => noop ,
noopAsync : ( ) => noopAsync ,
omitAsyncReturnType : ( ) => omitAsyncReturnType2 ,
omitReturnType : ( ) => omitReturnType
} ) ;
module2 . exports = _ _toCommonJS2 ( Function _exports ) ;
function noop ( ) {
}
async function noopAsync ( ) {
}
function omitAsyncReturnType2 ( fn ) {
return async ( ... args ) => {
await fn ( ... args ) ;
} ;
}
function omitReturnType ( fn ) {
return ( ... args ) => {
fn ( ... args ) ;
} ;
}
}
} ) ;
// node_modules/obsidian-typings/dist/implementations.cjs
var require _implementations = _ _commonJS ( {
"node_modules/obsidian-typings/dist/implementations.cjs" ( exports2 , module2 ) {
"use strict" ;
var _ _defProp2 = Object . defineProperty ;
var _ _getOwnPropDesc2 = Object . getOwnPropertyDescriptor ;
var _ _getOwnPropNames2 = Object . getOwnPropertyNames ;
var _ _hasOwnProp2 = Object . prototype . hasOwnProperty ;
var _ _export2 = ( target , all ) => {
for ( var name in all )
_ _defProp2 ( target , name , { get : all [ name ] , enumerable : true } ) ;
} ;
var _ _copyProps2 = ( to , from , except , desc ) => {
if ( from && typeof from === "object" || typeof from === "function" ) {
for ( let key of _ _getOwnPropNames2 ( from ) )
if ( ! _ _hasOwnProp2 . call ( to , key ) && key !== except )
_ _defProp2 ( to , key , { get : ( ) => from [ key ] , enumerable : ! ( desc = _ _getOwnPropDesc2 ( from , key ) ) || desc . enumerable } ) ;
}
return to ;
} ;
var _ _toCommonJS2 = ( mod ) => _ _copyProps2 ( _ _defProp2 ( { } , "__esModule" , { value : true } ) , mod ) ;
var implementations _exports = { } ;
_ _export2 ( implementations _exports , {
CustomArrayDictImpl : ( ) => CustomArrayDictImpl ,
InternalPluginName : ( ) => InternalPluginName ,
constructApp : ( ) => constructApp ,
constructInternalPlugin : ( ) => constructInternalPlugin ,
constructInternalPlugins : ( ) => constructInternalPlugins ,
constructTFile : ( ) => constructTFile ,
constructTFolder : ( ) => constructTFolder ,
createTFileInstance : ( ) => createTFileInstance ,
createTFolderInstance : ( ) => createTFolderInstance ,
isEmbedCache : ( ) => isEmbedCache ,
isFrontmatterLinkCache : ( ) => isFrontmatterLinkCache ,
isLinkCache : ( ) => isLinkCache ,
isReferenceCache : ( ) => isReferenceCache ,
parentFolderPath : ( ) => parentFolderPath
} ) ;
module2 . exports = _ _toCommonJS2 ( implementations _exports ) ;
function parentFolderPath ( path ) {
return path . replace ( /\/?[^\/]*$/ , "" ) || "/" ;
}
var import _obsidian5 = require ( "obsidian" ) ;
function constructTFolder ( vault , path ) {
return new import _obsidian5 . TFolder ( vault , path ) ;
}
function createTFolderInstance ( vault , path ) {
let folder = vault . getFolderByPath ( path ) ;
if ( folder ) {
return folder ;
}
folder = constructTFolder ( vault , path ) ;
folder . parent = createTFolderInstance ( vault , parentFolderPath ( path ) ) ;
folder . deleted = true ;
return folder ;
}
var CustomArrayDictImpl = class {
data = /* @__PURE__ */ new Map ( ) ;
add ( key , value ) {
let values = this . get ( key ) ;
if ( ! values ) {
values = [ ] ;
this . data . set ( key , values ) ;
}
if ( ! values . includes ( value ) ) {
values . push ( value ) ;
}
}
remove ( key , value ) {
const values = this . get ( key ) ;
if ( ! values ) {
return ;
}
values . remove ( value ) ;
if ( values . length === 0 ) {
this . clear ( key ) ;
}
}
get ( key ) {
return this . data . get ( key ) || null ;
}
keys ( ) {
return Array . from ( this . data . keys ( ) ) ;
}
clear ( key ) {
this . data . delete ( key ) ;
}
clearAll ( ) {
this . data . clear ( ) ;
}
contains ( key , value ) {
return ! ! this . get ( key ) ? . contains ( value ) ;
}
count ( ) {
let ans = 0 ;
for ( const key in this . keys ( ) ) {
ans += this . get ( key ) ? . length ? ? 0 ;
}
return ans ;
}
} ;
var InternalPluginName = {
AudioRecorder : "audio-recorder" ,
Backlink : "backlink" ,
Bookmarks : "bookmarks" ,
Canvas : "canvas" ,
CommandPalette : "command-palette" ,
DailyNotes : "daily-notes" ,
EditorStatus : "editor-status" ,
FileExplorer : "file-explorer" ,
FileRecovery : "file-recovery" ,
GlobalSearch : "global-search" ,
Graph : "graph" ,
MarkdownImporter : "markdown-importer" ,
NoteComposer : "note-composer" ,
OutgoingLink : "outgoing-link" ,
Outline : "outline" ,
PagePreview : "page-preview" ,
Properties : "properties" ,
Publish : "publish" ,
RandomNote : "random-note" ,
SlashCommand : "slash-command" ,
Slides : "slides" ,
Switcher : "switcher" ,
Sync : "sync" ,
TagPane : "tag-pane" ,
Templates : "templates" ,
WordCount : "word-count" ,
Workspaces : "workspaces" ,
ZkPrefixer : "zk-prefixer"
} ;
var import _obsidian22 = require ( "obsidian" ) ;
function constructTFile ( vault , path ) {
return new import _obsidian22 . TFile ( vault , path ) ;
}
function createTFileInstance ( vault , path ) {
let file = vault . getFileByPath ( path ) ;
if ( file ) {
return file ;
}
file = constructTFile ( vault , path ) ;
file . parent = createTFolderInstance ( vault , parentFolderPath ( path ) ) ;
file . deleted = true ;
return file ;
}
function isReferenceCache ( reference ) {
return ! ! reference . position ;
}
function isEmbedCache ( reference ) {
return isReferenceCache ( reference ) && reference . original [ 0 ] === "!" ;
}
function isFrontmatterLinkCache ( reference ) {
return ! ! reference . key ;
}
function isLinkCache ( reference ) {
return isReferenceCache ( reference ) && reference . original [ 0 ] !== "!" ;
}
function constructInternalPlugins ( app ) {
return new app . internalPlugins . constructor ( app ) ;
}
function constructInternalPlugin ( app , instance , internalPlugins ) {
const anyPlugin = Object . values ( app . internalPlugins . plugins ) [ 0 ] ;
if ( ! anyPlugin ) {
throw new Error ( "No internal plugin found" ) ;
}
return new anyPlugin . constructor ( app , instance , internalPlugins ) ;
}
var import _obsidian32 = require ( "obsidian" ) ;
function constructApp ( adapter , appId ) {
return new import _obsidian32 . App ( adapter , appId ) ;
}
}
} ) ;
// node_modules/path-browserify/index.js
var require _path _browserify = _ _commonJS ( {
"node_modules/path-browserify/index.js" ( exports2 , module2 ) {
var _ _process2 = globalThis [ "process" ] ? ? {
"cwd" : ( ) => "/" ,
"env" : { } ,
"platform" : "android"
} ;
function assertPath ( path ) {
if ( typeof path !== "string" ) {
throw new TypeError ( "Path must be a string. Received " + JSON . stringify ( path ) ) ;
}
}
function normalizeStringPosix ( path , allowAboveRoot ) {
var res = "" ;
var lastSegmentLength = 0 ;
var lastSlash = - 1 ;
var dots = 0 ;
var code ;
for ( var i = 0 ; i <= path . length ; ++ i ) {
if ( i < path . length )
code = path . charCodeAt ( i ) ;
else if ( code === 47 )
break ;
else
code = 47 ;
if ( code === 47 ) {
if ( lastSlash === i - 1 || dots === 1 ) {
} else if ( lastSlash !== i - 1 && dots === 2 ) {
if ( res . length < 2 || lastSegmentLength !== 2 || res . charCodeAt ( res . length - 1 ) !== 46 || res . charCodeAt ( res . length - 2 ) !== 46 ) {
if ( res . length > 2 ) {
var lastSlashIndex = res . lastIndexOf ( "/" ) ;
if ( lastSlashIndex !== res . length - 1 ) {
if ( lastSlashIndex === - 1 ) {
res = "" ;
lastSegmentLength = 0 ;
} else {
res = res . slice ( 0 , lastSlashIndex ) ;
lastSegmentLength = res . length - 1 - res . lastIndexOf ( "/" ) ;
}
lastSlash = i ;
dots = 0 ;
continue ;
}
} else if ( res . length === 2 || res . length === 1 ) {
res = "" ;
lastSegmentLength = 0 ;
lastSlash = i ;
dots = 0 ;
continue ;
}
}
if ( allowAboveRoot ) {
if ( res . length > 0 )
res += "/.." ;
else
res = ".." ;
lastSegmentLength = 2 ;
}
} else {
if ( res . length > 0 )
res += "/" + path . slice ( lastSlash + 1 , i ) ;
else
res = path . slice ( lastSlash + 1 , i ) ;
lastSegmentLength = i - lastSlash - 1 ;
}
lastSlash = i ;
dots = 0 ;
} else if ( code === 46 && dots !== - 1 ) {
++ dots ;
} else {
dots = - 1 ;
}
}
return res ;
}
function _format ( sep , pathObject ) {
var dir = pathObject . dir || pathObject . root ;
var base = pathObject . base || ( pathObject . name || "" ) + ( pathObject . ext || "" ) ;
if ( ! dir ) {
return base ;
}
if ( dir === pathObject . root ) {
return dir + base ;
}
return dir + sep + base ;
}
var posix = {
// path.resolve([from ...], to)
resolve : function resolve ( ) {
var resolvedPath = "" ;
var resolvedAbsolute = false ;
var cwd ;
for ( var i = arguments . length - 1 ; i >= - 1 && ! resolvedAbsolute ; i -- ) {
var path ;
if ( i >= 0 )
path = arguments [ i ] ;
else {
if ( cwd === void 0 )
cwd = _ _process2 . cwd ( ) ;
path = cwd ;
}
assertPath ( path ) ;
if ( path . length === 0 ) {
continue ;
}
resolvedPath = path + "/" + resolvedPath ;
resolvedAbsolute = path . charCodeAt ( 0 ) === 47 ;
}
resolvedPath = normalizeStringPosix ( resolvedPath , ! resolvedAbsolute ) ;
if ( resolvedAbsolute ) {
if ( resolvedPath . length > 0 )
return "/" + resolvedPath ;
else
return "/" ;
} else if ( resolvedPath . length > 0 ) {
return resolvedPath ;
} else {
return "." ;
}
} ,
normalize : function normalize ( path ) {
assertPath ( path ) ;
if ( path . length === 0 ) return "." ;
var isAbsolute = path . charCodeAt ( 0 ) === 47 ;
var trailingSeparator = path . charCodeAt ( path . length - 1 ) === 47 ;
path = normalizeStringPosix ( path , ! isAbsolute ) ;
if ( path . length === 0 && ! isAbsolute ) path = "." ;
if ( path . length > 0 && trailingSeparator ) path += "/" ;
if ( isAbsolute ) return "/" + path ;
return path ;
} ,
isAbsolute : function isAbsolute ( path ) {
assertPath ( path ) ;
return path . length > 0 && path . charCodeAt ( 0 ) === 47 ;
} ,
join : function join2 ( ) {
if ( arguments . length === 0 )
return "." ;
var joined ;
for ( var i = 0 ; i < arguments . length ; ++ i ) {
var arg = arguments [ i ] ;
assertPath ( arg ) ;
if ( arg . length > 0 ) {
if ( joined === void 0 )
joined = arg ;
else
joined += "/" + arg ;
}
}
if ( joined === void 0 )
return "." ;
return posix . normalize ( joined ) ;
} ,
relative : function relative ( from , to ) {
assertPath ( from ) ;
assertPath ( to ) ;
if ( from === to ) return "" ;
from = posix . resolve ( from ) ;
to = posix . resolve ( to ) ;
if ( from === to ) return "" ;
var fromStart = 1 ;
for ( ; fromStart < from . length ; ++ fromStart ) {
if ( from . charCodeAt ( fromStart ) !== 47 )
break ;
}
var fromEnd = from . length ;
var fromLen = fromEnd - fromStart ;
var toStart = 1 ;
for ( ; toStart < to . length ; ++ toStart ) {
if ( to . charCodeAt ( toStart ) !== 47 )
break ;
}
var toEnd = to . length ;
var toLen = toEnd - toStart ;
var length = fromLen < toLen ? fromLen : toLen ;
var lastCommonSep = - 1 ;
var i = 0 ;
for ( ; i <= length ; ++ i ) {
if ( i === length ) {
if ( toLen > length ) {
if ( to . charCodeAt ( toStart + i ) === 47 ) {
return to . slice ( toStart + i + 1 ) ;
} else if ( i === 0 ) {
return to . slice ( toStart + i ) ;
}
} else if ( fromLen > length ) {
if ( from . charCodeAt ( fromStart + i ) === 47 ) {
lastCommonSep = i ;
} else if ( i === 0 ) {
lastCommonSep = 0 ;
}
}
break ;
}
var fromCode = from . charCodeAt ( fromStart + i ) ;
var toCode = to . charCodeAt ( toStart + i ) ;
if ( fromCode !== toCode )
break ;
else if ( fromCode === 47 )
lastCommonSep = i ;
}
var out = "" ;
for ( i = fromStart + lastCommonSep + 1 ; i <= fromEnd ; ++ i ) {
if ( i === fromEnd || from . charCodeAt ( i ) === 47 ) {
if ( out . length === 0 )
out += ".." ;
else
out += "/.." ;
}
}
if ( out . length > 0 )
return out + to . slice ( toStart + lastCommonSep ) ;
else {
toStart += lastCommonSep ;
if ( to . charCodeAt ( toStart ) === 47 )
++ toStart ;
return to . slice ( toStart ) ;
}
} ,
_makeLong : function _makeLong ( path ) {
return path ;
} ,
dirname : function dirname4 ( path ) {
assertPath ( path ) ;
if ( path . length === 0 ) return "." ;
var code = path . charCodeAt ( 0 ) ;
var hasRoot = code === 47 ;
var end = - 1 ;
var matchedSlash = true ;
for ( var i = path . length - 1 ; i >= 1 ; -- i ) {
code = path . charCodeAt ( i ) ;
if ( code === 47 ) {
if ( ! matchedSlash ) {
end = i ;
break ;
}
} else {
matchedSlash = false ;
}
}
if ( end === - 1 ) return hasRoot ? "/" : "." ;
if ( hasRoot && end === 1 ) return "//" ;
return path . slice ( 0 , end ) ;
} ,
basename : function basename ( path , ext ) {
if ( ext !== void 0 && typeof ext !== "string" ) throw new TypeError ( '"ext" argument must be a string' ) ;
assertPath ( path ) ;
var start = 0 ;
var end = - 1 ;
var matchedSlash = true ;
var i ;
if ( ext !== void 0 && ext . length > 0 && ext . length <= path . length ) {
if ( ext . length === path . length && ext === path ) return "" ;
var extIdx = ext . length - 1 ;
var firstNonSlashEnd = - 1 ;
for ( i = path . length - 1 ; i >= 0 ; -- i ) {
var code = path . charCodeAt ( i ) ;
if ( code === 47 ) {
if ( ! matchedSlash ) {
start = i + 1 ;
break ;
}
} else {
if ( firstNonSlashEnd === - 1 ) {
matchedSlash = false ;
firstNonSlashEnd = i + 1 ;
}
if ( extIdx >= 0 ) {
if ( code === ext . charCodeAt ( extIdx ) ) {
if ( -- extIdx === - 1 ) {
end = i ;
}
} else {
extIdx = - 1 ;
end = firstNonSlashEnd ;
}
}
}
}
if ( start === end ) end = firstNonSlashEnd ;
else if ( end === - 1 ) end = path . length ;
return path . slice ( start , end ) ;
} else {
for ( i = path . length - 1 ; i >= 0 ; -- i ) {
if ( path . charCodeAt ( i ) === 47 ) {
if ( ! matchedSlash ) {
start = i + 1 ;
break ;
}
} else if ( end === - 1 ) {
matchedSlash = false ;
end = i + 1 ;
}
}
if ( end === - 1 ) return "" ;
return path . slice ( start , end ) ;
}
} ,
extname : function extname ( path ) {
assertPath ( path ) ;
var startDot = - 1 ;
var startPart = 0 ;
var end = - 1 ;
var matchedSlash = true ;
var preDotState = 0 ;
for ( var i = path . length - 1 ; i >= 0 ; -- i ) {
var code = path . charCodeAt ( i ) ;
if ( code === 47 ) {
if ( ! matchedSlash ) {
startPart = i + 1 ;
break ;
}
continue ;
}
if ( end === - 1 ) {
matchedSlash = false ;
end = i + 1 ;
}
if ( code === 46 ) {
if ( startDot === - 1 )
startDot = i ;
else if ( preDotState !== 1 )
preDotState = 1 ;
} else if ( startDot !== - 1 ) {
preDotState = - 1 ;
}
}
if ( startDot === - 1 || end === - 1 || // We saw a non-dot character immediately before the dot
preDotState === 0 || // The (right-most) trimmed path component is exactly '..'
preDotState === 1 && startDot === end - 1 && startDot === startPart + 1 ) {
return "" ;
}
return path . slice ( startDot , end ) ;
} ,
format : function format ( pathObject ) {
if ( pathObject === null || typeof pathObject !== "object" ) {
throw new TypeError ( 'The "pathObject" argument must be of type Object. Received type ' + typeof pathObject ) ;
}
return _format ( "/" , pathObject ) ;
} ,
parse : function parse ( path ) {
assertPath ( path ) ;
var ret = { root : "" , dir : "" , base : "" , ext : "" , name : "" } ;
if ( path . length === 0 ) return ret ;
var code = path . charCodeAt ( 0 ) ;
var isAbsolute = code === 47 ;
var start ;
if ( isAbsolute ) {
ret . root = "/" ;
start = 1 ;
} else {
start = 0 ;
}
var startDot = - 1 ;
var startPart = 0 ;
var end = - 1 ;
var matchedSlash = true ;
var i = path . length - 1 ;
var preDotState = 0 ;
for ( ; i >= start ; -- i ) {
code = path . charCodeAt ( i ) ;
if ( code === 47 ) {
if ( ! matchedSlash ) {
startPart = i + 1 ;
break ;
}
continue ;
}
if ( end === - 1 ) {
matchedSlash = false ;
end = i + 1 ;
}
if ( code === 46 ) {
if ( startDot === - 1 ) startDot = i ;
else if ( preDotState !== 1 ) preDotState = 1 ;
} else if ( startDot !== - 1 ) {
preDotState = - 1 ;
}
}
if ( startDot === - 1 || end === - 1 || // We saw a non-dot character immediately before the dot
preDotState === 0 || // The (right-most) trimmed path component is exactly '..'
preDotState === 1 && startDot === end - 1 && startDot === startPart + 1 ) {
if ( end !== - 1 ) {
if ( startPart === 0 && isAbsolute ) ret . base = ret . name = path . slice ( 1 , end ) ;
else ret . base = ret . name = path . slice ( startPart , end ) ;
}
} else {
if ( startPart === 0 && isAbsolute ) {
ret . name = path . slice ( 1 , startDot ) ;
ret . base = path . slice ( 1 , end ) ;
} else {
ret . name = path . slice ( startPart , startDot ) ;
ret . base = path . slice ( startPart , end ) ;
}
ret . ext = path . slice ( startDot , end ) ;
}
if ( startPart > 0 ) ret . dir = path . slice ( 0 , startPart - 1 ) ;
else if ( isAbsolute ) ret . dir = "/" ;
return ret ;
} ,
sep : "/" ,
delimiter : ":" ,
win32 : null ,
posix : null
} ;
posix . posix = posix ;
module2 . exports = posix ;
}
} ) ;
// node_modules/eventemitter3/index.js
var require _eventemitter3 = _ _commonJS ( {
"node_modules/eventemitter3/index.js" ( exports2 , module2 ) {
"use strict" ;
var has = Object . prototype . hasOwnProperty ;
var prefix = "~" ;
function Events ( ) {
}
if ( Object . create ) {
Events . prototype = /* @__PURE__ */ Object . create ( null ) ;
if ( ! new Events ( ) . _ _proto _ _ ) prefix = false ;
}
function EE ( fn , context , once ) {
this . fn = fn ;
this . context = context ;
this . once = once || false ;
}
function addListener ( emitter , event , fn , context , once ) {
if ( typeof fn !== "function" ) {
throw new TypeError ( "The listener must be a function" ) ;
}
var listener = new EE ( fn , context || emitter , once ) , evt = prefix ? prefix + event : event ;
if ( ! emitter . _events [ evt ] ) emitter . _events [ evt ] = listener , emitter . _eventsCount ++ ;
else if ( ! emitter . _events [ evt ] . fn ) emitter . _events [ evt ] . push ( listener ) ;
else emitter . _events [ evt ] = [ emitter . _events [ evt ] , listener ] ;
return emitter ;
}
function clearEvent ( emitter , evt ) {
if ( -- emitter . _eventsCount === 0 ) emitter . _events = new Events ( ) ;
else delete emitter . _events [ evt ] ;
}
function EventEmitter ( ) {
this . _events = new Events ( ) ;
this . _eventsCount = 0 ;
}
EventEmitter . prototype . eventNames = function eventNames ( ) {
var names = [ ] , events , name ;
if ( this . _eventsCount === 0 ) return names ;
for ( name in events = this . _events ) {
if ( has . call ( events , name ) ) names . push ( prefix ? name . slice ( 1 ) : name ) ;
}
if ( Object . getOwnPropertySymbols ) {
return names . concat ( Object . getOwnPropertySymbols ( events ) ) ;
}
return names ;
} ;
EventEmitter . prototype . listeners = function listeners ( event ) {
var evt = prefix ? prefix + event : event , handlers = this . _events [ evt ] ;
if ( ! handlers ) return [ ] ;
if ( handlers . fn ) return [ handlers . fn ] ;
for ( var i = 0 , l = handlers . length , ee = new Array ( l ) ; i < l ; i ++ ) {
ee [ i ] = handlers [ i ] . fn ;
}
return ee ;
} ;
EventEmitter . prototype . listenerCount = function listenerCount ( event ) {
var evt = prefix ? prefix + event : event , listeners = this . _events [ evt ] ;
if ( ! listeners ) return 0 ;
if ( listeners . fn ) return 1 ;
return listeners . length ;
} ;
EventEmitter . prototype . emit = function emit ( event , a1 , a2 , a3 , a4 , a5 ) {
var evt = prefix ? prefix + event : event ;
if ( ! this . _events [ evt ] ) return false ;
var listeners = this . _events [ evt ] , len = arguments . length , args , i ;
if ( listeners . fn ) {
if ( listeners . once ) this . removeListener ( event , listeners . fn , void 0 , true ) ;
switch ( len ) {
case 1 :
return listeners . fn . call ( listeners . context ) , true ;
case 2 :
return listeners . fn . call ( listeners . context , a1 ) , true ;
case 3 :
return listeners . fn . call ( listeners . context , a1 , a2 ) , true ;
case 4 :
return listeners . fn . call ( listeners . context , a1 , a2 , a3 ) , true ;
case 5 :
return listeners . fn . call ( listeners . context , a1 , a2 , a3 , a4 ) , true ;
case 6 :
return listeners . fn . call ( listeners . context , a1 , a2 , a3 , a4 , a5 ) , true ;
}
for ( i = 1 , args = new Array ( len - 1 ) ; i < len ; i ++ ) {
args [ i - 1 ] = arguments [ i ] ;
}
listeners . fn . apply ( listeners . context , args ) ;
} else {
var length = listeners . length , j ;
for ( i = 0 ; i < length ; i ++ ) {
if ( listeners [ i ] . once ) this . removeListener ( event , listeners [ i ] . fn , void 0 , true ) ;
switch ( len ) {
case 1 :
listeners [ i ] . fn . call ( listeners [ i ] . context ) ;
break ;
case 2 :
listeners [ i ] . fn . call ( listeners [ i ] . context , a1 ) ;
break ;
case 3 :
listeners [ i ] . fn . call ( listeners [ i ] . context , a1 , a2 ) ;
break ;
case 4 :
listeners [ i ] . fn . call ( listeners [ i ] . context , a1 , a2 , a3 ) ;
break ;
default :
if ( ! args ) for ( j = 1 , args = new Array ( len - 1 ) ; j < len ; j ++ ) {
args [ j - 1 ] = arguments [ j ] ;
}
listeners [ i ] . fn . apply ( listeners [ i ] . context , args ) ;
}
}
}
return true ;
} ;
EventEmitter . prototype . on = function on ( event , fn , context ) {
return addListener ( this , event , fn , context , false ) ;
} ;
EventEmitter . prototype . once = function once ( event , fn , context ) {
return addListener ( this , event , fn , context , true ) ;
} ;
EventEmitter . prototype . removeListener = function removeListener ( event , fn , context , once ) {
var evt = prefix ? prefix + event : event ;
if ( ! this . _events [ evt ] ) return this ;
if ( ! fn ) {
clearEvent ( this , evt ) ;
return this ;
}
var listeners = this . _events [ evt ] ;
if ( listeners . fn ) {
if ( listeners . fn === fn && ( ! once || listeners . once ) && ( ! context || listeners . context === context ) ) {
clearEvent ( this , evt ) ;
}
} else {
for ( var i = 0 , events = [ ] , length = listeners . length ; i < length ; i ++ ) {
if ( listeners [ i ] . fn !== fn || once && ! listeners [ i ] . once || context && listeners [ i ] . context !== context ) {
events . push ( listeners [ i ] ) ;
}
}
if ( events . length ) this . _events [ evt ] = events . length === 1 ? events [ 0 ] : events ;
else clearEvent ( this , evt ) ;
}
return this ;
} ;
EventEmitter . prototype . removeAllListeners = function removeAllListeners ( event ) {
var evt ;
if ( event ) {
evt = prefix ? prefix + event : event ;
if ( this . _events [ evt ] ) clearEvent ( this , evt ) ;
} else {
this . _events = new Events ( ) ;
this . _eventsCount = 0 ;
}
return this ;
} ;
EventEmitter . prototype . off = EventEmitter . prototype . removeListener ;
EventEmitter . prototype . addListener = EventEmitter . prototype . on ;
EventEmitter . prefixed = prefix ;
EventEmitter . EventEmitter = EventEmitter ;
if ( "undefined" !== typeof module2 ) {
module2 . exports = EventEmitter ;
}
}
} ) ;
// node_modules/obsidian-dev-utils/dist/lib/Error.cjs
var require _Error = _ _commonJS ( {
"node_modules/obsidian-dev-utils/dist/lib/Error.cjs" ( exports2 , module2 ) {
( function patchRequireEsmDefault ( ) {
const _ _require = require ;
require = Object . assign ( ( id ) => {
2024-11-29 13:32:34 +00:00
const module22 = _ _require ( id ) ? ? { } ;
return module22 . _ _esModule && module22 . default ? module22 . default : module22 ;
2024-11-22 19:27:30 +00:00
} , _ _require ) ;
} ) ( ) ;
var _ _defProp2 = Object . defineProperty ;
var _ _getOwnPropDesc2 = Object . getOwnPropertyDescriptor ;
var _ _getOwnPropNames2 = Object . getOwnPropertyNames ;
var _ _hasOwnProp2 = Object . prototype . hasOwnProperty ;
var _ _export2 = ( target , all ) => {
for ( var name in all )
_ _defProp2 ( target , name , { get : all [ name ] , enumerable : true } ) ;
} ;
var _ _copyProps2 = ( to , from , except , desc ) => {
if ( from && typeof from === "object" || typeof from === "function" ) {
for ( let key of _ _getOwnPropNames2 ( from ) )
if ( ! _ _hasOwnProp2 . call ( to , key ) && key !== except )
_ _defProp2 ( to , key , { get : ( ) => from [ key ] , enumerable : ! ( desc = _ _getOwnPropDesc2 ( from , key ) ) || desc . enumerable } ) ;
}
return to ;
} ;
var _ _toCommonJS2 = ( mod ) => _ _copyProps2 ( _ _defProp2 ( { } , "__esModule" , { value : true } ) , mod ) ;
var Error _exports = { } ;
_ _export2 ( Error _exports , {
emitAsyncErrorEvent : ( ) => emitAsyncErrorEvent ,
errorToString : ( ) => errorToString ,
getStackTrace : ( ) => getStackTrace ,
printError : ( ) => printError ,
registerAsyncErrorEventHandler : ( ) => registerAsyncErrorEventHandler ,
throwExpression : ( ) => throwExpression
} ) ;
module2 . exports = _ _toCommonJS2 ( Error _exports ) ;
var import _eventemitter3 = require _eventemitter3 ( ) ;
var ASYNC _ERROR _EVENT = "asyncError" ;
var asyncErrorEventEmitter = new import _eventemitter3 . EventEmitter ( ) ;
asyncErrorEventEmitter . on ( ASYNC _ERROR _EVENT , handleAsyncError ) ;
function emitAsyncErrorEvent ( asyncError ) {
asyncErrorEventEmitter . emit ( ASYNC _ERROR _EVENT , asyncError ) ;
}
function errorToString ( error ) {
return parseErrorEntries ( error ) . map ( ( entry ) => " " . repeat ( entry . level ) + entry . message ) . join ( "\n" ) ;
}
function getStackTrace ( ) {
const stack = new Error ( ) . stack ? ? "" ;
const lines = stack . split ( "\n" ) ;
return lines . slice ( 2 ) . join ( "\n" ) ;
}
function printError ( error ) {
const entries = parseErrorEntries ( error ) ;
for ( const entry of entries ) {
if ( entry . shouldClearAnsiSequence ) {
console . error ( ` \x 1B[0m ${ entry . message } \x 1B[0m ` ) ;
} else {
console . error ( entry . message ) ;
}
}
}
function registerAsyncErrorEventHandler ( handler ) {
asyncErrorEventEmitter . on ( ASYNC _ERROR _EVENT , handler ) ;
return ( ) => asyncErrorEventEmitter . off ( ASYNC _ERROR _EVENT , handler ) ;
}
function throwExpression ( error ) {
throw error ;
}
function handleAsyncError ( asyncError ) {
printError ( new Error ( "An unhandled error occurred executing async operation" , { cause : asyncError } ) ) ;
}
function parseErrorEntries ( error , level = 0 , entries = [ ] ) {
if ( error === void 0 ) {
return entries ;
}
if ( ! ( error instanceof Error ) ) {
let str = "" ;
if ( error === null ) {
str = "(null)" ;
} else if ( typeof error === "string" ) {
str = error ;
} else {
str = JSON . stringify ( error ) ;
}
entries . push ( { level , message : str } ) ;
return entries ;
}
const title = ` ${ error . name } : ${ error . message } ` ;
entries . push ( { level , message : title , shouldClearAnsiSequence : true } ) ;
if ( error . stack ) {
const restStack = error . stack . startsWith ( title ) ? error . stack . slice ( title . length + 1 ) : error . stack ;
entries . push ( { level , message : ` Error stack:
$ { restStack } ` });
}
if ( error . cause !== void 0 ) {
entries . push ( { level , message : "Caused by:" } ) ;
parseErrorEntries ( error . cause , level + 1 , entries ) ;
}
return entries ;
}
}
} ) ;
// node_modules/obsidian-dev-utils/dist/lib/RegExp.cjs
var require _RegExp = _ _commonJS ( {
"node_modules/obsidian-dev-utils/dist/lib/RegExp.cjs" ( exports2 , module2 ) {
( function patchRequireEsmDefault ( ) {
const _ _require = require ;
require = Object . assign ( ( id ) => {
2024-11-29 13:32:34 +00:00
const module22 = _ _require ( id ) ? ? { } ;
return module22 . _ _esModule && module22 . default ? module22 . default : module22 ;
2024-11-22 19:27:30 +00:00
} , _ _require ) ;
} ) ( ) ;
var _ _defProp2 = Object . defineProperty ;
var _ _getOwnPropDesc2 = Object . getOwnPropertyDescriptor ;
var _ _getOwnPropNames2 = Object . getOwnPropertyNames ;
var _ _hasOwnProp2 = Object . prototype . hasOwnProperty ;
var _ _export2 = ( target , all ) => {
for ( var name in all )
_ _defProp2 ( target , name , { get : all [ name ] , enumerable : true } ) ;
} ;
var _ _copyProps2 = ( to , from , except , desc ) => {
if ( from && typeof from === "object" || typeof from === "function" ) {
for ( let key of _ _getOwnPropNames2 ( from ) )
if ( ! _ _hasOwnProp2 . call ( to , key ) && key !== except )
_ _defProp2 ( to , key , { get : ( ) => from [ key ] , enumerable : ! ( desc = _ _getOwnPropDesc2 ( from , key ) ) || desc . enumerable } ) ;
}
return to ;
} ;
var _ _toCommonJS2 = ( mod ) => _ _copyProps2 ( _ _defProp2 ( { } , "__esModule" , { value : true } ) , mod ) ;
var RegExp _exports = { } ;
_ _export2 ( RegExp _exports , {
escapeRegExp : ( ) => escapeRegExp
} ) ;
module2 . exports = _ _toCommonJS2 ( RegExp _exports ) ;
function escapeRegExp ( str ) {
return str . replaceAll ( /[.*+?^${}()|[\]\\]/g , "\\$&" ) ;
}
}
} ) ;
// node_modules/obsidian-dev-utils/dist/lib/ValueProvider.cjs
var require _ValueProvider = _ _commonJS ( {
"node_modules/obsidian-dev-utils/dist/lib/ValueProvider.cjs" ( exports2 , module2 ) {
( function patchRequireEsmDefault ( ) {
const _ _require = require ;
require = Object . assign ( ( id ) => {
2024-11-29 13:32:34 +00:00
const module22 = _ _require ( id ) ? ? { } ;
return module22 . _ _esModule && module22 . default ? module22 . default : module22 ;
2024-11-22 19:27:30 +00:00
} , _ _require ) ;
} ) ( ) ;
var _ _defProp2 = Object . defineProperty ;
var _ _getOwnPropDesc2 = Object . getOwnPropertyDescriptor ;
var _ _getOwnPropNames2 = Object . getOwnPropertyNames ;
var _ _hasOwnProp2 = Object . prototype . hasOwnProperty ;
var _ _export2 = ( target , all ) => {
for ( var name in all )
_ _defProp2 ( target , name , { get : all [ name ] , enumerable : true } ) ;
} ;
var _ _copyProps2 = ( to , from , except , desc ) => {
if ( from && typeof from === "object" || typeof from === "function" ) {
for ( let key of _ _getOwnPropNames2 ( from ) )
if ( ! _ _hasOwnProp2 . call ( to , key ) && key !== except )
_ _defProp2 ( to , key , { get : ( ) => from [ key ] , enumerable : ! ( desc = _ _getOwnPropDesc2 ( from , key ) ) || desc . enumerable } ) ;
}
return to ;
} ;
var _ _toCommonJS2 = ( mod ) => _ _copyProps2 ( _ _defProp2 ( { } , "__esModule" , { value : true } ) , mod ) ;
var ValueProvider _exports = { } ;
_ _export2 ( ValueProvider _exports , {
resolveValue : ( ) => resolveValue
} ) ;
module2 . exports = _ _toCommonJS2 ( ValueProvider _exports ) ;
async function resolveValue ( provider , ... args ) {
if ( isFunction ( provider ) ) {
return await provider ( ... args ) ;
} else {
return provider ;
}
}
function isFunction ( value ) {
return typeof value === "function" ;
}
}
} ) ;
// node_modules/obsidian-dev-utils/dist/lib/String.cjs
var require _String = _ _commonJS ( {
"node_modules/obsidian-dev-utils/dist/lib/String.cjs" ( exports2 , module2 ) {
( function patchRequireEsmDefault ( ) {
const _ _require = require ;
require = Object . assign ( ( id ) => {
2024-11-29 13:32:34 +00:00
const module22 = _ _require ( id ) ? ? { } ;
return module22 . _ _esModule && module22 . default ? module22 . default : module22 ;
2024-11-22 19:27:30 +00:00
} , _ _require ) ;
} ) ( ) ;
var _ _defProp2 = Object . defineProperty ;
var _ _getOwnPropDesc2 = Object . getOwnPropertyDescriptor ;
var _ _getOwnPropNames2 = Object . getOwnPropertyNames ;
var _ _hasOwnProp2 = Object . prototype . hasOwnProperty ;
var _ _export2 = ( target , all ) => {
for ( var name in all )
_ _defProp2 ( target , name , { get : all [ name ] , enumerable : true } ) ;
} ;
var _ _copyProps2 = ( to , from , except , desc ) => {
if ( from && typeof from === "object" || typeof from === "function" ) {
for ( let key of _ _getOwnPropNames2 ( from ) )
if ( ! _ _hasOwnProp2 . call ( to , key ) && key !== except )
_ _defProp2 ( to , key , { get : ( ) => from [ key ] , enumerable : ! ( desc = _ _getOwnPropDesc2 ( from , key ) ) || desc . enumerable } ) ;
}
return to ;
} ;
var _ _toCommonJS2 = ( mod ) => _ _copyProps2 ( _ _defProp2 ( { } , "__esModule" , { value : true } ) , mod ) ;
var String _exports = { } ;
_ _export2 ( String _exports , {
ensureEndsWith : ( ) => ensureEndsWith ,
ensureStartsWith : ( ) => ensureStartsWith ,
escape : ( ) => escape ,
insertAt : ( ) => insertAt ,
makeValidVariableName : ( ) => makeValidVariableName ,
normalize : ( ) => normalize ,
replace : ( ) => replace ,
replaceAllAsync : ( ) => replaceAllAsync ,
trimEnd : ( ) => trimEnd ,
trimStart : ( ) => trimStart ,
unescape : ( ) => unescape
} ) ;
module2 . exports = _ _toCommonJS2 ( String _exports ) ;
var import _Error = require _Error ( ) ;
var import _RegExp = require _RegExp ( ) ;
var import _ValueProvider = require _ValueProvider ( ) ;
var ESCAPE _MAP = {
"\n" : "\\n" ,
"\r" : "\\r" ,
" " : "\\t" ,
"\b" : "\\b" ,
"\f" : "\\f" ,
"'" : "\\'" ,
'"' : '\\"' ,
"\\" : "\\\\"
} ;
var UNESCAPE _MAP = { } ;
for ( const [ key , value ] of Object . entries ( ESCAPE _MAP ) ) {
UNESCAPE _MAP [ value ] = key ;
}
function ensureEndsWith ( str , suffix ) {
return str . endsWith ( suffix ) ? str : str + suffix ;
}
function ensureStartsWith ( str , prefix ) {
return str . startsWith ( prefix ) ? str : prefix + str ;
}
function escape ( str ) {
return replace ( str , ESCAPE _MAP ) ;
}
function insertAt ( str , substring , startIndex , endIndex ) {
endIndex ? ? = startIndex ;
return str . slice ( 0 , startIndex ) + substring + str . slice ( endIndex ) ;
}
function makeValidVariableName ( str ) {
return str . replace ( /[^a-zA-Z0-9_]/g , "_" ) ;
}
function normalize ( str ) {
return str . replace ( /\u00A0|\u202F/g , " " ) . normalize ( "NFC" ) ;
}
function replace ( str , replacementsMap ) {
const regExp = new RegExp ( Object . keys ( replacementsMap ) . map ( ( source ) => ( 0 , import _RegExp . escapeRegExp ) ( source ) ) . join ( "|" ) , "g" ) ;
return str . replaceAll ( regExp , ( source ) => replacementsMap [ source ] ? ? ( 0 , import _Error . throwExpression ) ( new Error ( ` Unexpected replacement source: ${ source } ` ) ) ) ;
}
async function replaceAllAsync ( str , searchValue , replacer ) {
const replacementPromises = [ ] ;
str . replaceAll ( searchValue , ( substring , ... args ) => {
replacementPromises . push ( ( 0 , import _ValueProvider . resolveValue ) ( replacer , substring , ... args ) ) ;
return substring ;
} ) ;
const replacements = await Promise . all ( replacementPromises ) ;
return str . replaceAll ( searchValue , ( ) => replacements . shift ( ) ? ? ( 0 , import _Error . throwExpression ) ( new Error ( "Unexpected empty replacement" ) ) ) ;
}
function trimEnd ( str , suffix , validate ) {
if ( str . endsWith ( suffix ) ) {
return str . slice ( 0 , - suffix . length ) ;
}
if ( validate ) {
throw new Error ( ` String ${ str } does not end with suffix ${ suffix } ` ) ;
}
return str ;
}
function trimStart ( str , prefix , validate ) {
if ( str . startsWith ( prefix ) ) {
return str . slice ( prefix . length ) ;
}
if ( validate ) {
throw new Error ( ` String ${ str } does not start with prefix ${ prefix } ` ) ;
}
return str ;
}
function unescape ( str ) {
return replace ( str , UNESCAPE _MAP ) ;
}
}
} ) ;
// node_modules/obsidian-dev-utils/dist/lib/Path.cjs
var require _Path = _ _commonJS ( {
"node_modules/obsidian-dev-utils/dist/lib/Path.cjs" ( exports2 , module2 ) {
( function patchRequireEsmDefault ( ) {
const _ _require = require ;
require = Object . assign ( ( id ) => {
2024-11-29 13:32:34 +00:00
const module22 = _ _require ( id ) ? ? { } ;
return module22 . _ _esModule && module22 . default ? module22 . default : module22 ;
2024-11-22 19:27:30 +00:00
} , _ _require ) ;
} ) ( ) ;
var _ _create2 = Object . create ;
var _ _defProp2 = Object . defineProperty ;
var _ _getOwnPropDesc2 = Object . getOwnPropertyDescriptor ;
var _ _getOwnPropNames2 = Object . getOwnPropertyNames ;
var _ _getProtoOf2 = Object . getPrototypeOf ;
var _ _hasOwnProp2 = Object . prototype . hasOwnProperty ;
var _ _export2 = ( target , all ) => {
for ( var name in all )
_ _defProp2 ( target , name , { get : all [ name ] , enumerable : true } ) ;
} ;
var _ _copyProps2 = ( to , from , except , desc ) => {
if ( from && typeof from === "object" || typeof from === "function" ) {
for ( let key of _ _getOwnPropNames2 ( from ) )
if ( ! _ _hasOwnProp2 . call ( to , key ) && key !== except )
_ _defProp2 ( to , key , { get : ( ) => from [ key ] , enumerable : ! ( desc = _ _getOwnPropDesc2 ( from , key ) ) || desc . enumerable } ) ;
}
return to ;
} ;
var _ _toESM2 = ( mod , isNodeMode , target ) => ( target = mod != null ? _ _create2 ( _ _getProtoOf2 ( mod ) ) : { } , _ _copyProps2 (
// If the importer is in node compatibility mode or this is not an ESM
// file that has been converted to a CommonJS file using a Babel-
// compatible transform (i.e. "__esModule" has not been set), then set
// "default" to the CommonJS "module.exports" for node compatibility.
isNodeMode || ! mod || ! mod . _ _esModule ? _ _defProp2 ( target , "default" , { value : mod , enumerable : true } ) : target ,
mod
) ) ;
var _ _toCommonJS2 = ( mod ) => _ _copyProps2 ( _ _defProp2 ( { } , "__esModule" , { value : true } ) , mod ) ;
var Path _exports = { } ;
_ _export2 ( Path _exports , {
basename : ( ) => basename ,
delimiter : ( ) => delimiter ,
dirname : ( ) => dirname4 ,
extname : ( ) => extname ,
format : ( ) => format ,
getDirname : ( ) => getDirname ,
getFilename : ( ) => getFilename ,
isAbsolute : ( ) => isAbsolute ,
join : ( ) => join2 ,
makeFileName : ( ) => makeFileName ,
normalize : ( ) => normalize ,
normalizeIfRelative : ( ) => normalizeIfRelative ,
parse : ( ) => parse ,
posix : ( ) => posix ,
relative : ( ) => relative ,
resolve : ( ) => resolve ,
sep : ( ) => sep ,
toPosixBuffer : ( ) => toPosixBuffer ,
toPosixPath : ( ) => toPosixPath
} ) ;
module2 . exports = _ _toCommonJS2 ( Path _exports ) ;
var import _path _browserify = _ _toESM2 ( require _path _browserify ( ) , 1 ) ;
var import _String = require _String ( ) ;
var WINDOWS _POSIX _LIKE _PATH _REG _EXP = /[a-zA-Z]:\/[^:]*$/ ;
var posix = import _path _browserify . default . posix ;
var delimiter = posix . delimiter ;
var sep = import _path _browserify . default . posix . sep ;
var basename = posix . basename ;
var dirname4 = posix . dirname ;
var extname = posix . extname ;
var format = posix . format ;
function isAbsolute ( path2 ) {
return posix . isAbsolute ( path2 ) || WINDOWS _POSIX _LIKE _PATH _REG _EXP . exec ( path2 ) ? . [ 0 ] === path2 ;
}
var join2 = posix . join ;
var normalize = posix . normalize ;
var parse = posix . parse ;
var relative = posix . relative ;
function getDirname ( importMetaUrl ) {
return dirname4 ( getFilename ( importMetaUrl ) ) ;
}
function getFilename ( importMetaUrl ) {
return resolve ( new URL ( importMetaUrl ) . pathname ) ;
}
function makeFileName ( fileName , extension ) {
return extension ? ` ${ fileName } . ${ extension } ` : fileName ;
}
function normalizeIfRelative ( path2 ) {
if ( path2 . startsWith ( "/" ) || path2 . includes ( ":" ) ) {
return path2 ;
}
return ( 0 , import _String . ensureStartsWith ) ( path2 , "./" ) ;
}
function resolve ( ... pathSegments ) {
let path2 = posix . resolve ( ... pathSegments ) ;
path2 = toPosixPath ( path2 ) ;
const match = WINDOWS _POSIX _LIKE _PATH _REG _EXP . exec ( path2 ) ;
return match ? . [ 0 ] ? ? path2 ;
}
function toPosixBuffer ( buffer ) {
return Buffer . from ( toPosixPath ( buffer . toString ( ) ) ) ;
}
function toPosixPath ( path2 ) {
return path2 . replace ( /\\/g , "/" ) ;
}
}
} ) ;
// node_modules/obsidian-dev-utils/dist/lib/obsidian/FileSystem.cjs
var require _FileSystem = _ _commonJS ( {
"node_modules/obsidian-dev-utils/dist/lib/obsidian/FileSystem.cjs" ( exports2 , module2 ) {
( function patchRequireEsmDefault ( ) {
const _ _require = require ;
require = Object . assign ( ( id ) => {
2024-11-29 13:32:34 +00:00
const module22 = _ _require ( id ) ? ? { } ;
return module22 . _ _esModule && module22 . default ? module22 . default : module22 ;
2024-11-22 19:27:30 +00:00
} , _ _require ) ;
} ) ( ) ;
var _ _defProp2 = Object . defineProperty ;
var _ _getOwnPropDesc2 = Object . getOwnPropertyDescriptor ;
var _ _getOwnPropNames2 = Object . getOwnPropertyNames ;
var _ _hasOwnProp2 = Object . prototype . hasOwnProperty ;
var _ _export2 = ( target , all ) => {
for ( var name in all )
_ _defProp2 ( target , name , { get : all [ name ] , enumerable : true } ) ;
} ;
var _ _copyProps2 = ( to , from , except , desc ) => {
if ( from && typeof from === "object" || typeof from === "function" ) {
for ( let key of _ _getOwnPropNames2 ( from ) )
if ( ! _ _hasOwnProp2 . call ( to , key ) && key !== except )
_ _defProp2 ( to , key , { get : ( ) => from [ key ] , enumerable : ! ( desc = _ _getOwnPropDesc2 ( from , key ) ) || desc . enumerable } ) ;
}
return to ;
} ;
var _ _toCommonJS2 = ( mod ) => _ _copyProps2 ( _ _defProp2 ( { } , "__esModule" , { value : true } ) , mod ) ;
var FileSystem _exports = { } ;
_ _export2 ( FileSystem _exports , {
CANVAS _FILE _EXTENSION : ( ) => CANVAS _FILE _EXTENSION ,
MARKDOWN _FILE _EXTENSION : ( ) => MARKDOWN _FILE _EXTENSION2 ,
checkExtension : ( ) => checkExtension ,
getAbstractFile : ( ) => getAbstractFile ,
getAbstractFileOrNull : ( ) => getAbstractFileOrNull ,
getFile : ( ) => getFile ,
getFileOrNull : ( ) => getFileOrNull3 ,
getFolder : ( ) => getFolder ,
getFolderOrNull : ( ) => getFolderOrNull ,
getMarkdownFiles : ( ) => getMarkdownFiles ,
getOrCreateFile : ( ) => getOrCreateFile2 ,
getOrCreateFolder : ( ) => getOrCreateFolder ,
getPath : ( ) => getPath ,
isAbstractFile : ( ) => isAbstractFile ,
isCanvasFile : ( ) => isCanvasFile ,
isFile : ( ) => isFile ,
isFolder : ( ) => isFolder ,
isMarkdownFile : ( ) => isMarkdownFile2 ,
isNote : ( ) => isNote2 ,
trimMarkdownExtension : ( ) => trimMarkdownExtension
} ) ;
module2 . exports = _ _toCommonJS2 ( FileSystem _exports ) ;
var import _obsidian5 = require ( "obsidian" ) ;
var import _implementations = require _implementations ( ) ;
var import _Path4 = require _Path ( ) ;
var import _String = require _String ( ) ;
var MARKDOWN _FILE _EXTENSION2 = "md" ;
var CANVAS _FILE _EXTENSION = "canvas" ;
function checkExtension ( pathOrFile , extension ) {
if ( pathOrFile === null ) {
return false ;
}
return ( 0 , import _Path4 . extname ) ( getPath ( pathOrFile ) ) . toLowerCase ( ) . slice ( 1 ) === extension . toLowerCase ( ) ;
}
function getAbstractFile ( app , pathOrFile , insensitive ) {
const file = getAbstractFileOrNull ( app , pathOrFile , insensitive ) ;
if ( ! file ) {
throw new Error ( ` Abstract file not found: ${ pathOrFile } ` ) ;
}
return file ;
}
function getAbstractFileOrNull ( app , pathOrFile , insensitive ) {
if ( pathOrFile === null ) {
return null ;
}
if ( pathOrFile === "." || pathOrFile === "" ) {
return app . vault . getRoot ( ) ;
}
if ( isAbstractFile ( pathOrFile ) ) {
return pathOrFile ;
}
if ( insensitive ) {
return app . vault . getAbstractFileByPathInsensitive ( pathOrFile ) ;
}
return app . vault . getAbstractFileByPath ( pathOrFile ) ;
}
function getFile ( app , pathOrFile , allowNonExisting , insensitive ) {
let file = getFileOrNull3 ( app , pathOrFile , insensitive ) ;
if ( ! file ) {
if ( allowNonExisting ) {
file = ( 0 , import _implementations . createTFileInstance ) ( app . vault , pathOrFile ) ;
} else {
throw new Error ( ` File not found: ${ pathOrFile } ` ) ;
}
}
return file ;
}
function getFileOrNull3 ( app , pathOrFile , insensitive ) {
const file = getAbstractFileOrNull ( app , pathOrFile , insensitive ) ;
if ( isFile ( file ) ) {
return file ;
}
return null ;
}
function getFolder ( app , pathOrFolder , allowNonExisting , insensitive ) {
let folder = getFolderOrNull ( app , pathOrFolder , insensitive ) ;
if ( ! folder ) {
if ( allowNonExisting ) {
folder = ( 0 , import _implementations . createTFolderInstance ) ( app . vault , pathOrFolder ) ;
} else {
throw new Error ( ` Folder not found: ${ pathOrFolder } ` ) ;
}
}
return folder ;
}
function getFolderOrNull ( app , pathOrFolder , insensitive ) {
const folder = getAbstractFileOrNull ( app , pathOrFolder , insensitive ) ;
if ( isFolder ( folder ) ) {
return folder ;
}
return null ;
}
function getMarkdownFiles ( app , pathOrFolder , isRecursive ) {
const folder = getFolder ( app , pathOrFolder ) ;
let markdownFiles = [ ] ;
if ( ! isRecursive ) {
markdownFiles = folder . children . filter ( ( file ) => isMarkdownFile2 ( file ) ) ;
} else {
import _obsidian5 . Vault . recurseChildren ( folder , ( abstractFile ) => {
if ( isMarkdownFile2 ( abstractFile ) ) {
markdownFiles . push ( abstractFile ) ;
}
} ) ;
}
markdownFiles = markdownFiles . sort ( ( a , b ) => a . path . localeCompare ( b . path ) ) ;
return markdownFiles ;
}
async function getOrCreateFile2 ( app , path ) {
const file = getFileOrNull3 ( app , path ) ;
if ( file ) {
return file ;
}
const folderPath = ( 0 , import _implementations . parentFolderPath ) ( path ) ;
await getOrCreateFolder ( app , folderPath ) ;
return await app . vault . create ( path , "" ) ;
}
async function getOrCreateFolder ( app , path ) {
const folder = getFolderOrNull ( app , path ) ;
if ( folder ) {
return folder ;
}
return await app . vault . createFolder ( path ) ;
}
function getPath ( pathOrFile ) {
return isAbstractFile ( pathOrFile ) ? pathOrFile . path : pathOrFile ;
}
function isAbstractFile ( file ) {
return file instanceof import _obsidian5 . TAbstractFile ;
}
function isCanvasFile ( pathOrFile ) {
return checkExtension ( pathOrFile , CANVAS _FILE _EXTENSION ) ;
}
function isFile ( file ) {
return file instanceof import _obsidian5 . TFile ;
}
function isFolder ( file ) {
return file instanceof import _obsidian5 . TFolder ;
}
function isMarkdownFile2 ( pathOrFile ) {
return checkExtension ( pathOrFile , MARKDOWN _FILE _EXTENSION2 ) ;
}
function isNote2 ( pathOrFile ) {
return isMarkdownFile2 ( pathOrFile ) || isCanvasFile ( pathOrFile ) ;
}
function trimMarkdownExtension ( file ) {
if ( ! isMarkdownFile2 ( file ) ) {
return file . path ;
}
return ( 0 , import _String . trimEnd ) ( file . path , "." + MARKDOWN _FILE _EXTENSION2 ) ;
}
}
} ) ;
// node_modules/obsidian-dev-utils/dist/lib/obsidian/Plugin/PluginSettings.cjs
var require _PluginSettings = _ _commonJS ( {
"node_modules/obsidian-dev-utils/dist/lib/obsidian/Plugin/PluginSettings.cjs" ( exports2 , module2 ) {
( function patchRequireEsmDefault ( ) {
const _ _require = require ;
require = Object . assign ( ( id ) => {
2024-11-29 13:32:34 +00:00
const module22 = _ _require ( id ) ? ? { } ;
return module22 . _ _esModule && module22 . default ? module22 . default : module22 ;
2024-11-22 19:27:30 +00:00
} , _ _require ) ;
} ) ( ) ;
var _ _defProp2 = Object . defineProperty ;
var _ _getOwnPropDesc2 = Object . getOwnPropertyDescriptor ;
var _ _getOwnPropNames2 = Object . getOwnPropertyNames ;
var _ _hasOwnProp2 = Object . prototype . hasOwnProperty ;
var _ _export2 = ( target , all ) => {
for ( var name in all )
_ _defProp2 ( target , name , { get : all [ name ] , enumerable : true } ) ;
} ;
var _ _copyProps2 = ( to , from , except , desc ) => {
if ( from && typeof from === "object" || typeof from === "function" ) {
for ( let key of _ _getOwnPropNames2 ( from ) )
if ( ! _ _hasOwnProp2 . call ( to , key ) && key !== except )
_ _defProp2 ( to , key , { get : ( ) => from [ key ] , enumerable : ! ( desc = _ _getOwnPropDesc2 ( from , key ) ) || desc . enumerable } ) ;
}
return to ;
} ;
var _ _toCommonJS2 = ( mod ) => _ _copyProps2 ( _ _defProp2 ( { } , "__esModule" , { value : true } ) , mod ) ;
var PluginSettings _exports = { } ;
_ _export2 ( PluginSettings _exports , {
clonePluginSettings : ( ) => clonePluginSettings ,
loadPluginSettings : ( ) => loadPluginSettings
} ) ;
module2 . exports = _ _toCommonJS2 ( PluginSettings _exports ) ;
function clonePluginSettings ( defaultPluginSettingsFactory , settings ) {
return loadPluginSettings ( defaultPluginSettingsFactory , settings ) ;
}
function loadPluginSettings ( defaultPluginSettingsFactory , data ) {
const defaultPluginSettings = defaultPluginSettingsFactory ( ) ;
if ( data && typeof data === "object" ) {
const record = data ;
for ( const [ key , value ] of Object . entries ( record ) ) {
if ( key in defaultPluginSettings ) {
defaultPluginSettings [ key ] = value ;
}
}
}
return defaultPluginSettings ;
}
}
} ) ;
// node_modules/obsidian-dev-utils/dist/lib/obsidian/Plugin/PluginBase.cjs
var require _PluginBase = _ _commonJS ( {
"node_modules/obsidian-dev-utils/dist/lib/obsidian/Plugin/PluginBase.cjs" ( exports2 , module2 ) {
( function patchRequireEsmDefault ( ) {
const _ _require = require ;
require = Object . assign ( ( id ) => {
2024-11-29 13:32:34 +00:00
const module22 = _ _require ( id ) ? ? { } ;
return module22 . _ _esModule && module22 . default ? module22 . default : module22 ;
2024-11-22 19:27:30 +00:00
} , _ _require ) ;
} ) ( ) ;
var _ _defProp2 = Object . defineProperty ;
var _ _getOwnPropDesc2 = Object . getOwnPropertyDescriptor ;
var _ _getOwnPropNames2 = Object . getOwnPropertyNames ;
var _ _hasOwnProp2 = Object . prototype . hasOwnProperty ;
var _ _export2 = ( target , all ) => {
for ( var name in all )
_ _defProp2 ( target , name , { get : all [ name ] , enumerable : true } ) ;
} ;
var _ _copyProps2 = ( to , from , except , desc ) => {
if ( from && typeof from === "object" || typeof from === "function" ) {
for ( let key of _ _getOwnPropNames2 ( from ) )
if ( ! _ _hasOwnProp2 . call ( to , key ) && key !== except )
_ _defProp2 ( to , key , { get : ( ) => from [ key ] , enumerable : ! ( desc = _ _getOwnPropDesc2 ( from , key ) ) || desc . enumerable } ) ;
}
return to ;
} ;
var _ _toCommonJS2 = ( mod ) => _ _copyProps2 ( _ _defProp2 ( { } , "__esModule" , { value : true } ) , mod ) ;
var PluginBase _exports = { } ;
_ _export2 ( PluginBase _exports , {
PluginBase : ( ) => PluginBase2
} ) ;
module2 . exports = _ _toCommonJS2 ( PluginBase _exports ) ;
var import _obsidian5 = require ( "obsidian" ) ;
var import _Error = require _Error ( ) ;
var import _Function2 = require _Function ( ) ;
var import _PluginSettings = require _PluginSettings ( ) ;
var _ _process2 = globalThis [ "process" ] ? ? {
"cwd" : ( ) => "/" ,
"env" : { } ,
"platform" : "android"
} ;
var PluginBase2 = class extends import _obsidian5 . Plugin {
/ * *
* Gets a copy of the current plugin settings .
*
* @ returns A copy of the plugin settings .
* /
get settingsCopy ( ) {
return ( 0 , import _PluginSettings . clonePluginSettings ) ( this . createDefaultPluginSettings . bind ( this ) , this . settings ) ;
}
/ * *
* Gets the AbortSignal used for aborting long - running operations .
*
* @ returns The abort signal .
* /
get abortSignal ( ) {
return this . _abortSignal ;
}
/ * *
* Gets the plugin settings .
*
* @ returns The plugin settings .
* /
get settings ( ) {
return this . _settings ;
}
_abortSignal ;
_settings ;
notice ;
/ * *
* Called when the plugin is loaded
* /
async onload ( ) {
this . register ( ( 0 , import _Error . registerAsyncErrorEventHandler ) ( ( ) => {
this . showNotice ( "An unhandled error occurred. Please check the console for more information." ) ;
} ) ) ;
await this . loadSettings ( ) ;
const pluginSettingsTab = this . createPluginSettingsTab ( ) ;
if ( pluginSettingsTab ) {
this . addSettingTab ( pluginSettingsTab ) ;
}
const abortController = new AbortController ( ) ;
this . _abortSignal = abortController . signal ;
this . register ( ( ) => {
abortController . abort ( ) ;
} ) ;
await this . onloadComplete ( ) ;
this . app . workspace . onLayoutReady ( this . onLayoutReady . bind ( this ) ) ;
}
/ * *
* Saves the new plugin settings .
*
* @ param newSettings - The new settings to save .
* @ returns A promise that resolves when the settings are saved .
* /
async saveSettings ( newSettings ) {
this . _settings = ( 0 , import _PluginSettings . clonePluginSettings ) ( this . createDefaultPluginSettings . bind ( this ) , newSettings ) ;
await this . saveData ( this . settings ) ;
}
/ * *
* Called when the layout is ready . This method can be overridden by subclasses to perform actions once
* the layout is ready .
*
* @ returns A promise or void indicating the completion of the layout setup .
* /
onLayoutReady ( ) {
( 0 , import _Function2 . noop ) ( ) ;
}
/ * *
* Called when the plugin loading is complete . This method must be implemented by subclasses to perform
* any additional setup required after loading is complete .
*
* @ returns A promise or void indicating the completion of the load process .
* /
onloadComplete ( ) {
( 0 , import _Function2 . noop ) ( ) ;
}
/ * *
* Parses the provided settings data and returns the parsed ` PluginSettings ` .
*
* @ param data - The raw data to be parsed into ` PluginSettings ` .
* @ returns A promise that resolves to ` PluginSettings ` or the settings directly .
* /
parseSettings ( data ) {
return ( 0 , import _PluginSettings . loadPluginSettings ) ( this . createDefaultPluginSettings . bind ( this ) , data ) ;
}
/ * *
* Displays a notice message to the user .
*
* @ param message - The message to display .
* /
showNotice ( message ) {
if ( this . notice ) {
this . notice . hide ( ) ;
}
this . notice = new import _obsidian5 . Notice ( ` ${ this . manifest . name }
$ { message } ` );
}
/ * *
* Loads the plugin settings from the saved data .
*
* @ returns A promise that resolves when the settings are loaded .
* /
async loadSettings ( ) {
const data = await this . loadData ( ) ;
this . _settings = await this . parseSettings ( data ) ;
}
} ;
}
} ) ;
// node_modules/obsidian-dev-utils/dist/lib/Async.cjs
var require _Async = _ _commonJS ( {
"node_modules/obsidian-dev-utils/dist/lib/Async.cjs" ( exports2 , module2 ) {
( function patchRequireEsmDefault ( ) {
const _ _require = require ;
require = Object . assign ( ( id ) => {
2024-11-29 13:32:34 +00:00
const module22 = _ _require ( id ) ? ? { } ;
return module22 . _ _esModule && module22 . default ? module22 . default : module22 ;
2024-11-22 19:27:30 +00:00
} , _ _require ) ;
} ) ( ) ;
var _ _defProp2 = Object . defineProperty ;
var _ _getOwnPropDesc2 = Object . getOwnPropertyDescriptor ;
var _ _getOwnPropNames2 = Object . getOwnPropertyNames ;
var _ _hasOwnProp2 = Object . prototype . hasOwnProperty ;
var _ _export2 = ( target , all ) => {
for ( var name in all )
_ _defProp2 ( target , name , { get : all [ name ] , enumerable : true } ) ;
} ;
var _ _copyProps2 = ( to , from , except , desc ) => {
if ( from && typeof from === "object" || typeof from === "function" ) {
for ( let key of _ _getOwnPropNames2 ( from ) )
if ( ! _ _hasOwnProp2 . call ( to , key ) && key !== except )
_ _defProp2 ( to , key , { get : ( ) => from [ key ] , enumerable : ! ( desc = _ _getOwnPropDesc2 ( from , key ) ) || desc . enumerable } ) ;
}
return to ;
} ;
var _ _toCommonJS2 = ( mod ) => _ _copyProps2 ( _ _defProp2 ( { } , "__esModule" , { value : true } ) , mod ) ;
var Async _exports = { } ;
_ _export2 ( Async _exports , {
addErrorHandler : ( ) => addErrorHandler ,
asyncFilter : ( ) => asyncFilter ,
asyncFlatMap : ( ) => asyncFlatMap ,
asyncMap : ( ) => asyncMap ,
convertAsyncToSync : ( ) => convertAsyncToSync ,
convertSyncToAsync : ( ) => convertSyncToAsync ,
invokeAsyncSafely : ( ) => invokeAsyncSafely ,
marksAsTerminateRetry : ( ) => marksAsTerminateRetry ,
retryWithTimeout : ( ) => retryWithTimeout ,
runWithTimeout : ( ) => runWithTimeout ,
sleep : ( ) => sleep ,
timeout : ( ) => timeout ,
toArray : ( ) => toArray
} ) ;
module2 . exports = _ _toCommonJS2 ( Async _exports ) ;
var import _Error = require _Error ( ) ;
async function addErrorHandler ( asyncFn ) {
try {
await asyncFn ( ) ;
} catch ( asyncError ) {
( 0 , import _Error . emitAsyncErrorEvent ) ( asyncError ) ;
}
}
async function asyncFilter ( arr , predicate ) {
const predicateResults = await asyncMap ( arr , predicate ) ;
return arr . filter ( ( _ , index ) => predicateResults [ index ] ) ;
}
async function asyncFlatMap ( arr , callback ) {
return ( await asyncMap ( arr , callback ) ) . flat ( ) ;
}
async function asyncMap ( arr , callback ) {
return await Promise . all ( arr . map ( callback ) ) ;
}
function convertAsyncToSync ( asyncFunc ) {
return ( ... args ) => {
invokeAsyncSafely ( ( ) => asyncFunc ( ... args ) ) ;
} ;
}
function convertSyncToAsync ( syncFn ) {
return ( ... args ) => Promise . resolve ( ) . then ( ( ) => syncFn ( ... args ) ) ;
}
function invokeAsyncSafely ( asyncFn ) {
void addErrorHandler ( asyncFn ) ;
}
function marksAsTerminateRetry ( error ) {
return Object . assign ( error , { _ _terminateRetry : true } ) ;
}
async function retryWithTimeout ( fn , retryOptions = { } ) {
const stackTrace = ( 0 , import _Error . getStackTrace ) ( ) ;
const DEFAULT _RETRY _OPTIONS = {
retryDelayInMilliseconds : 100 ,
shouldRetryOnError : true ,
timeoutInMilliseconds : 5e3
} ;
const overriddenOptions = { ... DEFAULT _RETRY _OPTIONS , ... retryOptions } ;
await runWithTimeout ( overriddenOptions . timeoutInMilliseconds , async ( ) => {
let attempt = 0 ;
for ( ; ; ) {
attempt ++ ;
let isSuccess ;
try {
isSuccess = await fn ( ) ;
} catch ( error ) {
if ( ! overriddenOptions . shouldRetryOnError || error . _ _terminateRetry ) {
throw error ;
}
( 0 , import _Error . printError ) ( error ) ;
isSuccess = false ;
}
if ( isSuccess ) {
if ( attempt > 1 ) {
console . debug ( ` Retry completed successfully after ${ attempt . toString ( ) } attempts ` ) ;
}
return ;
}
console . debug ( ` Retry attempt ${ attempt . toString ( ) } completed unsuccessfully. Trying again in ${ overriddenOptions . retryDelayInMilliseconds . toString ( ) } milliseconds ` , {
fn ,
stackTrace
} ) ;
await sleep ( overriddenOptions . retryDelayInMilliseconds ) ;
}
} ) ;
}
async function runWithTimeout ( timeoutInMilliseconds , fn ) {
let timedOut = false ;
let result = null ;
await Promise . race ( [ run ( ) , timeout2 ( ) ] ) ;
if ( timedOut ) {
console . error ( ` Timed out in ${ timeoutInMilliseconds . toString ( ) } milliseconds ` , { fn } ) ;
throw new Error ( "Timed out" ) ;
}
return result ;
async function run ( ) {
result = await fn ( ) ;
timedOut = false ;
}
async function timeout2 ( ) {
await sleep ( timeoutInMilliseconds ) ;
timedOut = true ;
}
}
async function sleep ( milliseconds ) {
await new Promise ( ( resolve ) => setTimeout ( resolve , milliseconds ) ) ;
}
async function timeout ( timeoutInMilliseconds ) {
await sleep ( timeoutInMilliseconds ) ;
throw new Error ( ` Timed out in ${ timeoutInMilliseconds . toString ( ) } milliseconds ` ) ;
}
async function toArray ( iter ) {
const arr = [ ] ;
for await ( const item of iter ) {
arr . push ( item ) ;
}
return arr ;
}
}
} ) ;
// node_modules/obsidian-dev-utils/dist/lib/obsidian/App.cjs
var require _App = _ _commonJS ( {
"node_modules/obsidian-dev-utils/dist/lib/obsidian/App.cjs" ( exports2 , module2 ) {
( function patchRequireEsmDefault ( ) {
const _ _require = require ;
require = Object . assign ( ( id ) => {
2024-11-29 13:32:34 +00:00
const module22 = _ _require ( id ) ? ? { } ;
return module22 . _ _esModule && module22 . default ? module22 . default : module22 ;
2024-11-22 19:27:30 +00:00
} , _ _require ) ;
} ) ( ) ;
var _ _defProp2 = Object . defineProperty ;
var _ _getOwnPropDesc2 = Object . getOwnPropertyDescriptor ;
var _ _getOwnPropNames2 = Object . getOwnPropertyNames ;
var _ _hasOwnProp2 = Object . prototype . hasOwnProperty ;
var _ _export2 = ( target , all ) => {
for ( var name in all )
_ _defProp2 ( target , name , { get : all [ name ] , enumerable : true } ) ;
} ;
var _ _copyProps2 = ( to , from , except , desc ) => {
if ( from && typeof from === "object" || typeof from === "function" ) {
for ( let key of _ _getOwnPropNames2 ( from ) )
if ( ! _ _hasOwnProp2 . call ( to , key ) && key !== except )
_ _defProp2 ( to , key , { get : ( ) => from [ key ] , enumerable : ! ( desc = _ _getOwnPropDesc2 ( from , key ) ) || desc . enumerable } ) ;
}
return to ;
} ;
var _ _toCommonJS2 = ( mod ) => _ _copyProps2 ( _ _defProp2 ( { } , "__esModule" , { value : true } ) , mod ) ;
var App _exports = { } ;
_ _export2 ( App _exports , {
ValueWrapper : ( ) => ValueWrapper ,
getApp : ( ) => getApp ,
getObsidianDevUtilsState : ( ) => getObsidianDevUtilsState
} ) ;
module2 . exports = _ _toCommonJS2 ( App _exports ) ;
var ValueWrapper = class {
constructor ( value ) {
this . value = value ;
}
} ;
function getApp ( ) {
let canRequire ;
try {
globalThis . require . resolve ( "obsidian/app" ) ;
canRequire = true ;
} catch {
canRequire = false ;
}
if ( canRequire ) {
return globalThis . require ( "obsidian/app" ) ;
}
const app = globalThis . app ;
if ( app ) {
return app ;
}
throw new Error ( "Obsidian app not found" ) ;
}
function getObsidianDevUtilsState ( app , key , defaultValue ) {
const sharedStateWrapper = app ;
const sharedState = sharedStateWrapper . obsidianDevUtilsState ? ? = { } ;
return sharedState [ key ] ? ? = new ValueWrapper ( defaultValue ) ;
}
}
} ) ;
// node_modules/obsidian-dev-utils/dist/lib/obsidian/Logger.cjs
var require _Logger = _ _commonJS ( {
"node_modules/obsidian-dev-utils/dist/lib/obsidian/Logger.cjs" ( exports2 , module2 ) {
( function patchRequireEsmDefault ( ) {
const _ _require = require ;
require = Object . assign ( ( id ) => {
2024-11-29 13:32:34 +00:00
const module22 = _ _require ( id ) ? ? { } ;
return module22 . _ _esModule && module22 . default ? module22 . default : module22 ;
2024-11-22 19:27:30 +00:00
} , _ _require ) ;
} ) ( ) ;
var _ _defProp2 = Object . defineProperty ;
var _ _getOwnPropDesc2 = Object . getOwnPropertyDescriptor ;
var _ _getOwnPropNames2 = Object . getOwnPropertyNames ;
var _ _hasOwnProp2 = Object . prototype . hasOwnProperty ;
var _ _export2 = ( target , all ) => {
for ( var name in all )
_ _defProp2 ( target , name , { get : all [ name ] , enumerable : true } ) ;
} ;
var _ _copyProps2 = ( to , from , except , desc ) => {
if ( from && typeof from === "object" || typeof from === "function" ) {
for ( let key of _ _getOwnPropNames2 ( from ) )
if ( ! _ _hasOwnProp2 . call ( to , key ) && key !== except )
_ _defProp2 ( to , key , { get : ( ) => from [ key ] , enumerable : ! ( desc = _ _getOwnPropDesc2 ( from , key ) ) || desc . enumerable } ) ;
}
return to ;
} ;
var _ _toCommonJS2 = ( mod ) => _ _copyProps2 ( _ _defProp2 ( { } , "__esModule" , { value : true } ) , mod ) ;
var Logger _exports = { } ;
_ _export2 ( Logger _exports , {
invokeAsyncAndLog : ( ) => invokeAsyncAndLog
} ) ;
module2 . exports = _ _toCommonJS2 ( Logger _exports ) ;
var import _Error = require _Error ( ) ;
async function invokeAsyncAndLog ( title , fn , stackTrace ) {
const timestampStart = Date . now ( ) ;
if ( stackTrace === void 0 ) {
stackTrace = ( 0 , import _Error . getStackTrace ) ( ) . split ( "\n" ) . slice ( 1 ) . join ( "\n" ) ;
}
console . debug ( ` ${ title } :start ` , {
fn ,
stackTrace ,
timestampStart
} ) ;
try {
await fn ( ) ;
const timestampEnd = Date . now ( ) ;
console . debug ( ` ${ title } :end ` , {
duration : timestampEnd - timestampStart ,
timestampEnd ,
timestampStart
} ) ;
} catch ( error ) {
const timestampEnd = Date . now ( ) ;
console . debug ( ` ${ title } :error ` , {
duration : timestampEnd - timestampStart ,
error ,
timestampEnd : Date . now ( ) ,
timestampStart
} ) ;
throw error ;
}
}
}
} ) ;
// node_modules/obsidian-dev-utils/dist/lib/obsidian/Queue.cjs
var require _Queue = _ _commonJS ( {
"node_modules/obsidian-dev-utils/dist/lib/obsidian/Queue.cjs" ( exports2 , module2 ) {
( function patchRequireEsmDefault ( ) {
const _ _require = require ;
require = Object . assign ( ( id ) => {
2024-11-29 13:32:34 +00:00
const module22 = _ _require ( id ) ? ? { } ;
return module22 . _ _esModule && module22 . default ? module22 . default : module22 ;
2024-11-22 19:27:30 +00:00
} , _ _require ) ;
} ) ( ) ;
var _ _defProp2 = Object . defineProperty ;
var _ _getOwnPropDesc2 = Object . getOwnPropertyDescriptor ;
var _ _getOwnPropNames2 = Object . getOwnPropertyNames ;
var _ _hasOwnProp2 = Object . prototype . hasOwnProperty ;
var _ _export2 = ( target , all ) => {
for ( var name in all )
_ _defProp2 ( target , name , { get : all [ name ] , enumerable : true } ) ;
} ;
var _ _copyProps2 = ( to , from , except , desc ) => {
if ( from && typeof from === "object" || typeof from === "function" ) {
for ( let key of _ _getOwnPropNames2 ( from ) )
if ( ! _ _hasOwnProp2 . call ( to , key ) && key !== except )
_ _defProp2 ( to , key , { get : ( ) => from [ key ] , enumerable : ! ( desc = _ _getOwnPropDesc2 ( from , key ) ) || desc . enumerable } ) ;
}
return to ;
} ;
var _ _toCommonJS2 = ( mod ) => _ _copyProps2 ( _ _defProp2 ( { } , "__esModule" , { value : true } ) , mod ) ;
var Queue _exports = { } ;
_ _export2 ( Queue _exports , {
addToQueue : ( ) => addToQueue2 ,
addToQueueAndWait : ( ) => addToQueueAndWait ,
flushQueue : ( ) => flushQueue
} ) ;
module2 . exports = _ _toCommonJS2 ( Queue _exports ) ;
var import _Async = require _Async ( ) ;
var import _Error = require _Error ( ) ;
var import _Function2 = require _Function ( ) ;
var import _App = require _App ( ) ;
var import _Logger = require _Logger ( ) ;
var _ _process2 = globalThis [ "process" ] ? ? {
"cwd" : ( ) => "/" ,
"env" : { } ,
"platform" : "android"
} ;
function addToQueue2 ( app , fn , timeoutInMilliseconds ) {
void addToQueueAndWait ( app , fn , timeoutInMilliseconds ) ;
}
async function addToQueueAndWait ( app , fn , timeoutInMilliseconds ) {
const DEFAULT _TIMEOUT _IN _MILLISECONDS = 6e4 ;
timeoutInMilliseconds ? ? = DEFAULT _TIMEOUT _IN _MILLISECONDS ;
const stackTrace = ( 0 , import _Error . getStackTrace ) ( ) ;
const queue = getQueue ( app ) . value ;
queue . items . push ( { fn , stackTrace , timeoutInMilliseconds } ) ;
queue . promise = queue . promise . then ( ( ) => processNextQueueItem ( app ) ) ;
await queue . promise ;
}
async function flushQueue ( app ) {
await addToQueueAndWait ( app , import _Function2 . noop ) ;
}
function getQueue ( app ) {
return ( 0 , import _App . getObsidianDevUtilsState ) ( app , "queue" , { items : [ ] , promise : Promise . resolve ( ) } ) ;
}
async function processNextQueueItem ( app ) {
const queue = getQueue ( app ) . value ;
const item = queue . items [ 0 ] ;
if ( ! item ) {
return ;
}
await ( 0 , import _Async . addErrorHandler ) ( ( ) => ( 0 , import _Async . runWithTimeout ) ( item . timeoutInMilliseconds , ( ) => ( 0 , import _Logger . invokeAsyncAndLog ) ( processNextQueueItem . name , item . fn , item . stackTrace ) ) ) ;
queue . items . shift ( ) ;
}
}
} ) ;
// node_modules/monkey-around/dist/index.cjs
var require _dist = _ _commonJS ( {
"node_modules/monkey-around/dist/index.cjs" ( exports2 ) {
"use strict" ;
function around ( obj , factories ) {
const removers = Object . keys ( factories ) . map ( ( key ) => around1 ( obj , key , factories [ key ] ) ) ;
return removers . length === 1 ? removers [ 0 ] : function ( ) {
removers . forEach ( ( r ) => r ( ) ) ;
} ;
}
function around1 ( obj , method , createWrapper ) {
const inherited = obj [ method ] , hadOwn = obj . hasOwnProperty ( method ) , original = hadOwn ? inherited : function ( ) {
return Object . getPrototypeOf ( obj ) [ method ] . apply ( this , arguments ) ;
} ;
let current = createWrapper ( original ) ;
if ( inherited )
Object . setPrototypeOf ( current , inherited ) ;
Object . setPrototypeOf ( wrapper , current ) ;
obj [ method ] = wrapper ;
return remove ;
function wrapper ( ... args ) {
if ( current === original && obj [ method ] === wrapper )
remove ( ) ;
return current . apply ( this , args ) ;
}
function remove ( ) {
if ( obj [ method ] === wrapper ) {
if ( hadOwn )
obj [ method ] = original ;
else
delete obj [ method ] ;
}
if ( current === original )
return ;
current = original ;
Object . setPrototypeOf ( wrapper , inherited || Function ) ;
}
}
function dedupe ( key , oldFn , newFn ) {
check [ key ] = key ;
return check ;
function check ( ... args ) {
return ( oldFn [ key ] === key ? oldFn : newFn ) . apply ( this , args ) ;
}
}
function after ( promise , cb ) {
return promise . then ( cb , cb ) ;
}
function serialize ( asyncFunction ) {
let lastRun = Promise . resolve ( ) ;
function wrapper ( ... args ) {
return lastRun = new Promise ( ( res , rej ) => {
after ( lastRun , ( ) => {
asyncFunction . apply ( this , args ) . then ( res , rej ) ;
} ) ;
} ) ;
}
wrapper . after = function ( ) {
return lastRun = new Promise ( ( res , rej ) => {
after ( lastRun , res ) ;
} ) ;
} ;
return wrapper ;
}
exports2 . after = after ;
exports2 . around = around ;
exports2 . dedupe = dedupe ;
exports2 . serialize = serialize ;
}
} ) ;
// node_modules/obsidian-dev-utils/dist/lib/Object.cjs
var require _Object = _ _commonJS ( {
"node_modules/obsidian-dev-utils/dist/lib/Object.cjs" ( exports2 , module2 ) {
( function patchRequireEsmDefault ( ) {
const _ _require = require ;
require = Object . assign ( ( id ) => {
2024-11-29 13:32:34 +00:00
const module22 = _ _require ( id ) ? ? { } ;
return module22 . _ _esModule && module22 . default ? module22 . default : module22 ;
2024-11-22 19:27:30 +00:00
} , _ _require ) ;
} ) ( ) ;
var _ _defProp2 = Object . defineProperty ;
var _ _getOwnPropDesc2 = Object . getOwnPropertyDescriptor ;
var _ _getOwnPropNames2 = Object . getOwnPropertyNames ;
var _ _hasOwnProp2 = Object . prototype . hasOwnProperty ;
var _ _export2 = ( target , all ) => {
for ( var name in all )
_ _defProp2 ( target , name , { get : all [ name ] , enumerable : true } ) ;
} ;
var _ _copyProps2 = ( to , from , except , desc ) => {
if ( from && typeof from === "object" || typeof from === "function" ) {
for ( let key of _ _getOwnPropNames2 ( from ) )
if ( ! _ _hasOwnProp2 . call ( to , key ) && key !== except )
_ _defProp2 ( to , key , { get : ( ) => from [ key ] , enumerable : ! ( desc = _ _getOwnPropDesc2 ( from , key ) ) || desc . enumerable } ) ;
}
return to ;
} ;
var _ _toCommonJS2 = ( mod ) => _ _copyProps2 ( _ _defProp2 ( { } , "__esModule" , { value : true } ) , mod ) ;
var Object _exports = { } ;
_ _export2 ( Object _exports , {
assignWithNonEnumerableProperties : ( ) => assignWithNonEnumerableProperties ,
cloneWithNonEnumerableProperties : ( ) => cloneWithNonEnumerableProperties ,
deepEqual : ( ) => deepEqual ,
getNestedPropertyValue : ( ) => getNestedPropertyValue ,
getPrototypeOf : ( ) => getPrototypeOf ,
nameof : ( ) => nameof ,
setNestedPropertyValue : ( ) => setNestedPropertyValue ,
toJson : ( ) => toJson
} ) ;
module2 . exports = _ _toCommonJS2 ( Object _exports ) ;
var import _Error = require _Error ( ) ;
var _ _process2 = globalThis [ "process" ] ? ? {
"cwd" : ( ) => "/" ,
"env" : { } ,
"platform" : "android"
} ;
function assignWithNonEnumerableProperties ( target , ... sources ) {
return _assignWithNonEnumerableProperties ( target , ... sources ) ;
}
function cloneWithNonEnumerableProperties ( obj ) {
return Object . create ( getPrototypeOf ( obj ) , Object . getOwnPropertyDescriptors ( obj ) ) ;
}
function deepEqual ( a , b ) {
if ( a === b ) {
return true ;
}
if ( typeof a !== "object" || typeof b !== "object" || a === null || b === null ) {
return false ;
}
const keysA = Object . keys ( a ) ;
const keysB = Object . keys ( b ) ;
if ( keysA . length !== keysB . length ) {
return false ;
}
const aRecord = a ;
const bRecord = b ;
for ( const key of keysA ) {
if ( ! keysB . includes ( key ) || ! deepEqual ( aRecord [ key ] , bRecord [ key ] ) ) {
return false ;
}
}
return true ;
}
function getNestedPropertyValue ( obj , path ) {
let node = obj ;
const keys = path . split ( "." ) ;
for ( const key of keys ) {
if ( node === void 0 ) {
return void 0 ;
}
node = node [ key ] ;
}
return node ;
}
function getPrototypeOf ( instance ) {
if ( instance === void 0 || instance === null ) {
return instance ;
}
return Object . getPrototypeOf ( instance ) ;
}
function nameof ( name ) {
return name ;
}
function setNestedPropertyValue ( obj , path , value ) {
const error = new Error ( ` Property path ${ path } not found ` ) ;
let node = obj ;
const keys = path . split ( "." ) ;
for ( const key of keys . slice ( 0 , - 1 ) ) {
if ( node === void 0 ) {
throw error ;
}
node = node [ key ] ;
}
const lastKey = keys . at ( - 1 ) ;
if ( node === void 0 || lastKey === void 0 ) {
throw error ;
}
node [ lastKey ] = value ;
}
function toJson ( value , options = { } ) {
const {
shouldHandleFunctions = false ,
space = 2
} = options ;
if ( ! shouldHandleFunctions ) {
return JSON . stringify ( value , null , space ) ;
}
const functionTexts = [ ] ;
const replacer = ( _ , value2 ) => {
if ( typeof value2 === "function" ) {
const index = functionTexts . length ;
functionTexts . push ( value2 . toString ( ) ) ;
return ` __FUNCTION_ ${ index . toString ( ) } ` ;
}
return value2 ;
} ;
let json = JSON . stringify ( value , replacer , space ) ;
json = json . replaceAll ( /"__FUNCTION_(\d+)"/g , ( _ , indexStr ) => functionTexts [ parseInt ( indexStr ) ] ? ? ( 0 , import _Error . throwExpression ) ( new Error ( ` Function with index ${ indexStr } not found ` ) ) ) ;
return json ;
}
function _assignWithNonEnumerableProperties ( target , ... sources ) {
for ( const source of sources ) {
Object . defineProperties ( target , Object . getOwnPropertyDescriptors ( source ) ) ;
}
const sourcePrototypes = sources . map ( ( source ) => getPrototypeOf ( source ) ) . filter ( ( proto ) => ! ! proto ) ;
if ( sourcePrototypes . length > 0 ) {
const targetPrototype = _assignWithNonEnumerableProperties ( { } , getPrototypeOf ( target ) , ... sourcePrototypes ) ;
Object . setPrototypeOf ( target , targetPrototype ) ;
}
return target ;
}
}
} ) ;
// node_modules/obsidian-dev-utils/dist/lib/obsidian/AttachmentPath.cjs
var require _AttachmentPath = _ _commonJS ( {
"node_modules/obsidian-dev-utils/dist/lib/obsidian/AttachmentPath.cjs" ( exports2 , module2 ) {
( function patchRequireEsmDefault ( ) {
const _ _require = require ;
require = Object . assign ( ( id ) => {
2024-11-29 13:32:34 +00:00
const module22 = _ _require ( id ) ? ? { } ;
return module22 . _ _esModule && module22 . default ? module22 . default : module22 ;
2024-11-22 19:27:30 +00:00
} , _ _require ) ;
} ) ( ) ;
var _ _defProp2 = Object . defineProperty ;
var _ _getOwnPropDesc2 = Object . getOwnPropertyDescriptor ;
var _ _getOwnPropNames2 = Object . getOwnPropertyNames ;
var _ _hasOwnProp2 = Object . prototype . hasOwnProperty ;
var _ _export2 = ( target , all ) => {
for ( var name in all )
_ _defProp2 ( target , name , { get : all [ name ] , enumerable : true } ) ;
} ;
var _ _copyProps2 = ( to , from , except , desc ) => {
if ( from && typeof from === "object" || typeof from === "function" ) {
for ( let key of _ _getOwnPropNames2 ( from ) )
if ( ! _ _hasOwnProp2 . call ( to , key ) && key !== except )
_ _defProp2 ( to , key , { get : ( ) => from [ key ] , enumerable : ! ( desc = _ _getOwnPropDesc2 ( from , key ) ) || desc . enumerable } ) ;
}
return to ;
} ;
var _ _toCommonJS2 = ( mod ) => _ _copyProps2 ( _ _defProp2 ( { } , "__esModule" , { value : true } ) , mod ) ;
var AttachmentPath _exports = { } ;
_ _export2 ( AttachmentPath _exports , {
getAttachmentFilePath : ( ) => getAttachmentFilePath2 ,
getAttachmentFolderPath : ( ) => getAttachmentFolderPath ,
getAvailablePathForAttachments : ( ) => getAvailablePathForAttachments ,
hasOwnAttachmentFolder : ( ) => hasOwnAttachmentFolder
} ) ;
module2 . exports = _ _toCommonJS2 ( AttachmentPath _exports ) ;
var import _implementations = require _implementations ( ) ;
var import _Path4 = require _Path ( ) ;
var import _String = require _String ( ) ;
var import _FileSystem4 = require _FileSystem ( ) ;
async function getAttachmentFilePath2 ( app , attachmentPathOrFile , notePathOrFile ) {
const attachmentPath = ( 0 , import _FileSystem4 . getPath ) ( attachmentPathOrFile ) ;
const notePath = ( 0 , import _FileSystem4 . getPath ) ( notePathOrFile ) ;
const note = ( 0 , import _FileSystem4 . getFile ) ( app , notePath , true ) ;
const ext = ( 0 , import _Path4 . extname ) ( attachmentPath ) ;
const fileName = ( 0 , import _Path4 . basename ) ( attachmentPath , ext ) ;
const internalFn = app . vault . getAvailablePathForAttachments ;
if ( internalFn . isExtended ) {
return internalFn ( fileName , ext . slice ( 1 ) , note , true ) ;
}
return await getAvailablePathForAttachments ( app , fileName , ext . slice ( 1 ) , note , true ) ;
}
async function getAttachmentFolderPath ( app , notePathOrFile ) {
return ( 0 , import _implementations . parentFolderPath ) ( await getAttachmentFilePath2 ( app , "DUMMY_FILE.pdf" , notePathOrFile ) ) ;
}
async function getAvailablePathForAttachments ( app , filename , extension , file , skipFolderCreation ) {
let attachmentFolderPath = app . vault . getConfig ( "attachmentFolderPath" ) ;
const isCurrentFolder = attachmentFolderPath === "." || attachmentFolderPath === "./" ;
let relativePath = null ;
if ( attachmentFolderPath . startsWith ( "./" ) ) {
relativePath = ( 0 , import _String . trimStart ) ( attachmentFolderPath , "./" ) ;
}
if ( isCurrentFolder ) {
attachmentFolderPath = file ? file . parent ? . path ? ? "" : "" ;
} else if ( relativePath ) {
attachmentFolderPath = ( file ? file . parent ? . getParentPrefix ( ) ? ? "" : "" ) + relativePath ;
}
attachmentFolderPath = ( 0 , import _String . normalize ) ( normalizeSlashes ( attachmentFolderPath ) ) ;
filename = ( 0 , import _String . normalize ) ( normalizeSlashes ( filename ) ) ;
let folder = ( 0 , import _FileSystem4 . getFolderOrNull ) ( app , attachmentFolderPath , true ) ;
if ( ! folder && relativePath ) {
if ( ! skipFolderCreation ) {
folder = await app . vault . createFolder ( attachmentFolderPath ) ;
} else {
folder = ( 0 , import _FileSystem4 . getFolder ) ( app , attachmentFolderPath , true ) ;
}
}
const prefix = folder ? . getParentPrefix ( ) ? ? "" ;
return app . vault . getAvailablePath ( prefix + filename , extension ) ;
}
async function hasOwnAttachmentFolder ( app , path ) {
const attachmentFolderPath = await getAttachmentFolderPath ( app , path ) ;
const dummyAttachmentFolderPath = await getAttachmentFolderPath ( app , ( 0 , import _Path4 . join ) ( ( 0 , import _Path4 . dirname ) ( path ) , "DUMMY_FILE.md" ) ) ;
return attachmentFolderPath !== dummyAttachmentFolderPath ;
}
function normalizeSlashes ( path ) {
path = path . replace ( /([\\/])+/g , "/" ) ;
path = path . replace ( /(^\/+|\/+$)/g , "" ) ;
return path || "/" ;
}
}
} ) ;
// node_modules/obsidian-dev-utils/dist/lib/obsidian/FrontMatter.cjs
var require _FrontMatter = _ _commonJS ( {
"node_modules/obsidian-dev-utils/dist/lib/obsidian/FrontMatter.cjs" ( exports2 , module2 ) {
( function patchRequireEsmDefault ( ) {
const _ _require = require ;
require = Object . assign ( ( id ) => {
2024-11-29 13:32:34 +00:00
const module22 = _ _require ( id ) ? ? { } ;
return module22 . _ _esModule && module22 . default ? module22 . default : module22 ;
2024-11-22 19:27:30 +00:00
} , _ _require ) ;
} ) ( ) ;
var _ _defProp2 = Object . defineProperty ;
var _ _getOwnPropDesc2 = Object . getOwnPropertyDescriptor ;
var _ _getOwnPropNames2 = Object . getOwnPropertyNames ;
var _ _hasOwnProp2 = Object . prototype . hasOwnProperty ;
var _ _export2 = ( target , all ) => {
for ( var name in all )
_ _defProp2 ( target , name , { get : all [ name ] , enumerable : true } ) ;
} ;
var _ _copyProps2 = ( to , from , except , desc ) => {
if ( from && typeof from === "object" || typeof from === "function" ) {
for ( let key of _ _getOwnPropNames2 ( from ) )
if ( ! _ _hasOwnProp2 . call ( to , key ) && key !== except )
_ _defProp2 ( to , key , { get : ( ) => from [ key ] , enumerable : ! ( desc = _ _getOwnPropDesc2 ( from , key ) ) || desc . enumerable } ) ;
}
return to ;
} ;
var _ _toCommonJS2 = ( mod ) => _ _copyProps2 ( _ _defProp2 ( { } , "__esModule" , { value : true } ) , mod ) ;
var FrontMatter _exports = { } ;
_ _export2 ( FrontMatter _exports , {
parseFrontMatter : ( ) => parseFrontMatter ,
setFrontMatter : ( ) => setFrontMatter
} ) ;
module2 . exports = _ _toCommonJS2 ( FrontMatter _exports ) ;
var import _obsidian5 = require ( "obsidian" ) ;
var import _String = require _String ( ) ;
var _ _process2 = globalThis [ "process" ] ? ? {
"cwd" : ( ) => "/" ,
"env" : { } ,
"platform" : "android"
} ;
function parseFrontMatter ( content ) {
const frontMatterInfo = ( 0 , import _obsidian5 . getFrontMatterInfo ) ( content ) ;
return ( 0 , import _obsidian5 . parseYaml ) ( frontMatterInfo . frontmatter ) ? ? { } ;
}
function setFrontMatter ( content , newFrontMatter ) {
const frontMatterInfo = ( 0 , import _obsidian5 . getFrontMatterInfo ) ( content ) ;
if ( Object . keys ( newFrontMatter ) . length === 0 ) {
return content . slice ( frontMatterInfo . contentStart ) ;
}
const newFrontMatterStr = ( 0 , import _obsidian5 . stringifyYaml ) ( newFrontMatter ) ;
return frontMatterInfo . exists ? ( 0 , import _String . insertAt ) ( content , newFrontMatterStr , frontMatterInfo . from , frontMatterInfo . to ) : "---\n" + newFrontMatterStr + "---\n" + content ;
}
}
} ) ;
// node_modules/obsidian-dev-utils/dist/lib/obsidian/Reference.cjs
var require _Reference = _ _commonJS ( {
"node_modules/obsidian-dev-utils/dist/lib/obsidian/Reference.cjs" ( exports2 , module2 ) {
( function patchRequireEsmDefault ( ) {
const _ _require = require ;
require = Object . assign ( ( id ) => {
2024-11-29 13:32:34 +00:00
const module22 = _ _require ( id ) ? ? { } ;
return module22 . _ _esModule && module22 . default ? module22 . default : module22 ;
2024-11-22 19:27:30 +00:00
} , _ _require ) ;
} ) ( ) ;
var _ _defProp2 = Object . defineProperty ;
var _ _getOwnPropDesc2 = Object . getOwnPropertyDescriptor ;
var _ _getOwnPropNames2 = Object . getOwnPropertyNames ;
var _ _hasOwnProp2 = Object . prototype . hasOwnProperty ;
var _ _export2 = ( target , all ) => {
for ( var name in all )
_ _defProp2 ( target , name , { get : all [ name ] , enumerable : true } ) ;
} ;
var _ _copyProps2 = ( to , from , except , desc ) => {
if ( from && typeof from === "object" || typeof from === "function" ) {
for ( let key of _ _getOwnPropNames2 ( from ) )
if ( ! _ _hasOwnProp2 . call ( to , key ) && key !== except )
_ _defProp2 ( to , key , { get : ( ) => from [ key ] , enumerable : ! ( desc = _ _getOwnPropDesc2 ( from , key ) ) || desc . enumerable } ) ;
}
return to ;
} ;
var _ _toCommonJS2 = ( mod ) => _ _copyProps2 ( _ _defProp2 ( { } , "__esModule" , { value : true } ) , mod ) ;
var Reference _exports = { } ;
_ _export2 ( Reference _exports , {
referenceToFileChange : ( ) => referenceToFileChange2 ,
sortReferences : ( ) => sortReferences
} ) ;
module2 . exports = _ _toCommonJS2 ( Reference _exports ) ;
var import _implementations = require _implementations ( ) ;
function referenceToFileChange2 ( reference , newContent ) {
if ( ( 0 , import _implementations . isReferenceCache ) ( reference ) ) {
return {
endIndex : reference . position . end . offset ,
newContent ,
oldContent : reference . original ,
startIndex : reference . position . start . offset
} ;
} else if ( ( 0 , import _implementations . isFrontmatterLinkCache ) ( reference ) ) {
return {
frontMatterKey : reference . key ,
newContent ,
oldContent : reference . original
} ;
}
throw new Error ( "Unknown link type" ) ;
}
function sortReferences ( references ) {
return references . sort ( ( a , b ) => {
if ( ( 0 , import _implementations . isFrontmatterLinkCache ) ( a ) && ( 0 , import _implementations . isFrontmatterLinkCache ) ( b ) ) {
return a . key . localeCompare ( b . key ) ;
}
if ( ( 0 , import _implementations . isReferenceCache ) ( a ) && ( 0 , import _implementations . isReferenceCache ) ( b ) ) {
return a . position . start . offset - b . position . start . offset ;
}
return ( 0 , import _implementations . isFrontmatterLinkCache ) ( a ) ? 1 : - 1 ;
} ) ;
}
}
} ) ;
// node_modules/obsidian-dev-utils/dist/lib/obsidian/MetadataCache.cjs
var require _MetadataCache = _ _commonJS ( {
"node_modules/obsidian-dev-utils/dist/lib/obsidian/MetadataCache.cjs" ( exports2 , module2 ) {
( function patchRequireEsmDefault ( ) {
const _ _require = require ;
require = Object . assign ( ( id ) => {
2024-11-29 13:32:34 +00:00
const module22 = _ _require ( id ) ? ? { } ;
return module22 . _ _esModule && module22 . default ? module22 . default : module22 ;
2024-11-22 19:27:30 +00:00
} , _ _require ) ;
} ) ( ) ;
var _ _defProp2 = Object . defineProperty ;
var _ _getOwnPropDesc2 = Object . getOwnPropertyDescriptor ;
var _ _getOwnPropNames2 = Object . getOwnPropertyNames ;
var _ _hasOwnProp2 = Object . prototype . hasOwnProperty ;
var _ _export2 = ( target , all ) => {
for ( var name in all )
_ _defProp2 ( target , name , { get : all [ name ] , enumerable : true } ) ;
} ;
var _ _copyProps2 = ( to , from , except , desc ) => {
if ( from && typeof from === "object" || typeof from === "function" ) {
for ( let key of _ _getOwnPropNames2 ( from ) )
if ( ! _ _hasOwnProp2 . call ( to , key ) && key !== except )
_ _defProp2 ( to , key , { get : ( ) => from [ key ] , enumerable : ! ( desc = _ _getOwnPropDesc2 ( from , key ) ) || desc . enumerable } ) ;
}
return to ;
} ;
var _ _toCommonJS2 = ( mod ) => _ _copyProps2 ( _ _defProp2 ( { } , "__esModule" , { value : true } ) , mod ) ;
var MetadataCache _exports = { } ;
_ _export2 ( MetadataCache _exports , {
ensureMetadataCacheReady : ( ) => ensureMetadataCacheReady ,
getAllLinks : ( ) => getAllLinks3 ,
getBacklinksForFileOrPath : ( ) => getBacklinksForFileOrPath ,
getBacklinksForFileSafe : ( ) => getBacklinksForFileSafe2 ,
getBacklinksMap : ( ) => getBacklinksMap ,
getCacheSafe : ( ) => getCacheSafe3 ,
getFrontMatterSafe : ( ) => getFrontMatterSafe ,
registerFile : ( ) => registerFile ,
tempRegisterFileAndRun : ( ) => tempRegisterFileAndRun
} ) ;
module2 . exports = _ _toCommonJS2 ( MetadataCache _exports ) ;
var import _obsidian5 = require ( "obsidian" ) ;
var import _implementations = require _implementations ( ) ;
var import _Async = require _Async ( ) ;
var import _Function2 = require _Function ( ) ;
var import _Object = require _Object ( ) ;
var import _FileSystem4 = require _FileSystem ( ) ;
var import _FrontMatter = require _FrontMatter ( ) ;
var import _Reference2 = require _Reference ( ) ;
var _ _process2 = globalThis [ "process" ] ? ? {
"cwd" : ( ) => "/" ,
"env" : { } ,
"platform" : "android"
} ;
async function ensureMetadataCacheReady ( app ) {
for ( const [ path , cache ] of Object . entries ( app . metadataCache . fileCache ) ) {
if ( ! cache . hash ) {
continue ;
}
if ( app . metadataCache . metadataCache [ cache . hash ] ) {
continue ;
}
await getCacheSafe3 ( app , path ) ;
}
}
function getAllLinks3 ( cache ) {
let links = [ ] ;
if ( cache . links ) {
links . push ( ... cache . links ) ;
}
if ( cache . embeds ) {
links . push ( ... cache . embeds ) ;
}
if ( cache . frontmatterLinks ) {
links . push ( ... cache . frontmatterLinks ) ;
}
( 0 , import _Reference2 . sortReferences ) ( links ) ;
links = links . filter ( ( link , index ) => {
if ( index === 0 ) {
return true ;
}
const previousLink = links [ index - 1 ] ;
if ( ! previousLink ) {
return true ;
}
if ( ( 0 , import _implementations . isReferenceCache ) ( link ) && ( 0 , import _implementations . isReferenceCache ) ( previousLink ) ) {
return link . position . start . offset !== previousLink . position . start . offset ;
}
if ( ( 0 , import _implementations . isFrontmatterLinkCache ) ( link ) && ( 0 , import _implementations . isFrontmatterLinkCache ) ( previousLink ) ) {
return link . key !== previousLink . key ;
}
return true ;
} ) ;
return links ;
}
function getBacklinksForFileOrPath ( app , pathOrFile ) {
const file = ( 0 , import _FileSystem4 . getFile ) ( app , pathOrFile , true ) ;
return tempRegisterFileAndRun ( app , file , ( ) => app . metadataCache . getBacklinksForFile ( file ) ) ;
}
async function getBacklinksForFileSafe2 ( app , pathOrFile , retryOptions = { } ) {
const safeOverload = app . metadataCache . getBacklinksForFile . safe ;
if ( safeOverload ) {
return safeOverload ( pathOrFile ) ;
}
const DEFAULT _RETRY _OPTIONS = { timeoutInMilliseconds : 6e4 } ;
const overriddenOptions = { ... DEFAULT _RETRY _OPTIONS , ... retryOptions } ;
let backlinks = null ;
await ( 0 , import _Async . retryWithTimeout ) ( async ( ) => {
const file = ( 0 , import _FileSystem4 . getFile ) ( app , pathOrFile ) ;
await ensureMetadataCacheReady ( app ) ;
backlinks = getBacklinksForFileOrPath ( app , file ) ;
for ( const notePath of backlinks . keys ( ) ) {
const note = ( 0 , import _FileSystem4 . getFileOrNull ) ( app , notePath ) ;
if ( ! note ) {
return false ;
}
await saveNote ( app , note ) ;
const content = await app . vault . read ( note ) ;
const frontMatter = ( 0 , import _FrontMatter . parseFrontMatter ) ( content ) ;
const links = backlinks . get ( notePath ) ;
if ( ! links ) {
return false ;
}
for ( const link of links ) {
let actualLink ;
if ( ( 0 , import _implementations . isReferenceCache ) ( link ) ) {
actualLink = content . slice ( link . position . start . offset , link . position . end . offset ) ;
} else if ( ( 0 , import _implementations . isFrontmatterLinkCache ) ( link ) ) {
const linkValue = ( 0 , import _Object . getNestedPropertyValue ) ( frontMatter , link . key ) ;
if ( typeof linkValue !== "string" ) {
return false ;
}
actualLink = linkValue ;
} else {
return true ;
}
if ( actualLink !== link . original ) {
return false ;
}
}
}
return true ;
} , overriddenOptions ) ;
return backlinks ;
}
async function getBacklinksMap ( app , pathOrFiles , retryOptions = { } ) {
const map = /* @__PURE__ */ new Map ( ) ;
for ( const pathOrFile of pathOrFiles ) {
const customArrayDict = await getBacklinksForFileSafe2 ( app , pathOrFile , retryOptions ) ;
for ( const path of customArrayDict . keys ( ) ) {
const mapLinks = map . get ( path ) ? ? [ ] ;
const pathLinks = customArrayDict . get ( path ) ? ? [ ] ;
mapLinks . push ( ... pathLinks ) ;
map . set ( path , mapLinks ) ;
}
}
return map ;
}
async function getCacheSafe3 ( app , fileOrPath , retryOptions = { } ) {
const DEFAULT _RETRY _OPTIONS = { timeoutInMilliseconds : 6e4 } ;
const overriddenOptions = { ... DEFAULT _RETRY _OPTIONS , ... retryOptions } ;
let cache = null ;
await ( 0 , import _Async . retryWithTimeout ) ( async ( ) => {
const file = ( 0 , import _FileSystem4 . getFileOrNull ) ( app , fileOrPath ) ;
if ( ! file || file . deleted ) {
cache = null ;
return true ;
}
await saveNote ( app , file ) ;
const fileInfo = app . metadataCache . getFileInfo ( file . path ) ;
const stat = await app . vault . adapter . stat ( file . path ) ;
if ( ! fileInfo ) {
console . debug ( ` File cache info for ${ file . path } is missing ` ) ;
return false ;
} else if ( ! stat ) {
console . debug ( ` File stat for ${ file . path } is missing ` ) ;
return false ;
} else if ( file . stat . mtime < stat . mtime ) {
app . vault . onChange ( "modified" , file . path , void 0 , stat ) ;
console . debug ( ` Cached timestamp for ${ file . path } is from ${ new Date ( file . stat . mtime ) . toString ( ) } which is older than the file system modification timestamp ${ new Date ( stat . mtime ) . toString ( ) } ` ) ;
return false ;
} else if ( fileInfo . mtime < stat . mtime ) {
console . debug ( ` File cache info for ${ file . path } is from ${ new Date ( fileInfo . mtime ) . toString ( ) } which is older than the file modification timestamp ${ new Date ( stat . mtime ) . toString ( ) } ` ) ;
return false ;
} else {
cache = app . metadataCache . getFileCache ( file ) ;
if ( ! cache ) {
console . debug ( ` File cache for ${ file . path } is missing ` ) ;
return false ;
} else {
return true ;
}
}
} , overriddenOptions ) ;
return cache ;
}
async function getFrontMatterSafe ( app , pathOrFile ) {
const cache = await getCacheSafe3 ( app , pathOrFile ) ;
return cache ? . frontmatter ? ? { } ;
}
function registerFile ( app , file ) {
if ( ! file . deleted ) {
return import _Function2 . noop ;
}
const deletedPaths = [ ] ;
let deletedFile = file ;
while ( deletedFile . deleted ) {
deletedPaths . push ( deletedFile . path ) ;
app . vault . fileMap [ deletedFile . path ] = deletedFile ;
deletedFile = deletedFile . parent ? ? ( 0 , import _FileSystem4 . getFolder ) ( app , ( 0 , import _implementations . parentFolderPath ) ( deletedFile . path ) , true ) ;
}
if ( ( 0 , import _FileSystem4 . isFile ) ( file ) ) {
app . metadataCache . uniqueFileLookup . add ( file . name . toLowerCase ( ) , file ) ;
}
return ( ) => {
for ( const path of deletedPaths ) {
delete app . vault . fileMap [ path ] ;
}
if ( ( 0 , import _FileSystem4 . isFile ) ( file ) ) {
app . metadataCache . uniqueFileLookup . remove ( file . name . toLowerCase ( ) , file ) ;
}
} ;
}
function tempRegisterFileAndRun ( app , file , fn ) {
const unregister = registerFile ( app , file ) ;
try {
return fn ( ) ;
} finally {
unregister ( ) ;
}
}
async function saveNote ( app , pathOrFile ) {
if ( ! ( 0 , import _FileSystem4 . isMarkdownFile ) ( pathOrFile ) ) {
return ;
}
const path = ( 0 , import _FileSystem4 . getPath ) ( pathOrFile ) ;
for ( const leaf of app . workspace . getLeavesOfType ( "markdown" ) ) {
if ( leaf . view instanceof import _obsidian5 . MarkdownView && leaf . view . file ? . path === path ) {
await leaf . view . save ( ) ;
}
}
}
}
} ) ;
// node_modules/obsidian-dev-utils/dist/lib/obsidian/Vault.cjs
var require _Vault = _ _commonJS ( {
"node_modules/obsidian-dev-utils/dist/lib/obsidian/Vault.cjs" ( exports2 , module2 ) {
( function patchRequireEsmDefault ( ) {
const _ _require = require ;
require = Object . assign ( ( id ) => {
2024-11-29 13:32:34 +00:00
const module22 = _ _require ( id ) ? ? { } ;
return module22 . _ _esModule && module22 . default ? module22 . default : module22 ;
2024-11-22 19:27:30 +00:00
} , _ _require ) ;
} ) ( ) ;
var _ _defProp2 = Object . defineProperty ;
var _ _getOwnPropDesc2 = Object . getOwnPropertyDescriptor ;
var _ _getOwnPropNames2 = Object . getOwnPropertyNames ;
var _ _hasOwnProp2 = Object . prototype . hasOwnProperty ;
var _ _export2 = ( target , all ) => {
for ( var name in all )
_ _defProp2 ( target , name , { get : all [ name ] , enumerable : true } ) ;
} ;
var _ _copyProps2 = ( to , from , except , desc ) => {
if ( from && typeof from === "object" || typeof from === "function" ) {
for ( let key of _ _getOwnPropNames2 ( from ) )
if ( ! _ _hasOwnProp2 . call ( to , key ) && key !== except )
_ _defProp2 ( to , key , { get : ( ) => from [ key ] , enumerable : ! ( desc = _ _getOwnPropDesc2 ( from , key ) ) || desc . enumerable } ) ;
}
return to ;
} ;
var _ _toCommonJS2 = ( mod ) => _ _copyProps2 ( _ _defProp2 ( { } , "__esModule" , { value : true } ) , mod ) ;
var Vault _exports = { } ;
_ _export2 ( Vault _exports , {
copySafe : ( ) => copySafe2 ,
createFolderSafe : ( ) => createFolderSafe3 ,
createTempFile : ( ) => createTempFile ,
createTempFolder : ( ) => createTempFolder ,
deleteEmptyFolderHierarchy : ( ) => deleteEmptyFolderHierarchy2 ,
deleteSafe : ( ) => deleteSafe ,
getAvailablePath : ( ) => getAvailablePath2 ,
getMarkdownFilesSorted : ( ) => getMarkdownFilesSorted2 ,
getNoteFilesSorted : ( ) => getNoteFilesSorted ,
getSafeRenamePath : ( ) => getSafeRenamePath ,
isEmptyFolder : ( ) => isEmptyFolder ,
listSafe : ( ) => listSafe2 ,
process : ( ) => process2 ,
renameSafe : ( ) => renameSafe2
} ) ;
module2 . exports = _ _toCommonJS2 ( Vault _exports ) ;
var import _obsidian5 = require ( "obsidian" ) ;
var import _implementations = require _implementations ( ) ;
var import _Async = require _Async ( ) ;
var import _Error = require _Error ( ) ;
var import _Function2 = require _Function ( ) ;
var import _Path4 = require _Path ( ) ;
var import _ValueProvider = require _ValueProvider ( ) ;
var import _FileSystem4 = require _FileSystem ( ) ;
var import _MetadataCache3 = require _MetadataCache ( ) ;
var _ _process2 = globalThis [ "process" ] ? ? {
"cwd" : ( ) => "/" ,
"env" : { } ,
"platform" : "android"
} ;
async function copySafe2 ( app , oldPathOrFile , newPath ) {
const file = ( 0 , import _FileSystem4 . getFile ) ( app , oldPathOrFile ) ;
const newFolderPath = ( 0 , import _implementations . parentFolderPath ) ( newPath ) ;
await createFolderSafe3 ( app , newFolderPath ) ;
const newAvailablePath = getAvailablePath2 ( app , newPath ) ;
try {
await app . vault . copy ( file , newAvailablePath ) ;
} catch ( e ) {
if ( ! await app . vault . exists ( newAvailablePath ) ) {
throw e ;
}
}
return newAvailablePath ;
}
async function createFolderSafe3 ( app , path ) {
if ( await app . vault . adapter . exists ( path ) ) {
return false ;
}
try {
await app . vault . createFolder ( path ) ;
return true ;
} catch ( e ) {
if ( ! await app . vault . exists ( path ) ) {
throw e ;
}
return true ;
}
}
async function createTempFile ( app , path ) {
let file = ( 0 , import _FileSystem4 . getFileOrNull ) ( app , path ) ;
if ( file ) {
return import _Function2 . noopAsync ;
}
const folderCleanup = await createTempFolder ( app , ( 0 , import _implementations . parentFolderPath ) ( path ) ) ;
try {
await app . vault . create ( path , "" ) ;
} catch ( e ) {
if ( ! await app . vault . exists ( path ) ) {
throw e ;
}
}
file = ( 0 , import _FileSystem4 . getFile ) ( app , path ) ;
return async ( ) => {
if ( ! file . deleted ) {
await app . fileManager . trashFile ( file ) ;
}
await folderCleanup ( ) ;
} ;
}
async function createTempFolder ( app , path ) {
let folder = ( 0 , import _FileSystem4 . getFolderOrNull ) ( app , path ) ;
if ( folder ) {
return import _Function2 . noopAsync ;
}
const dirPath = ( 0 , import _implementations . parentFolderPath ) ( path ) ;
await createTempFolder ( app , dirPath ) ;
const folderCleanup = await createTempFolder ( app , ( 0 , import _implementations . parentFolderPath ) ( path ) ) ;
await createFolderSafe3 ( app , path ) ;
folder = ( 0 , import _FileSystem4 . getFolder ) ( app , path ) ;
return async ( ) => {
if ( ! folder . deleted ) {
await app . fileManager . trashFile ( folder ) ;
}
await folderCleanup ( ) ;
} ;
}
async function deleteEmptyFolderHierarchy2 ( app , pathOrFolder ) {
let folder = ( 0 , import _FileSystem4 . getFolderOrNull ) ( app , pathOrFolder ) ;
while ( folder ) {
if ( ! await isEmptyFolder ( app , folder ) ) {
return ;
}
const parent = folder . parent ;
await deleteSafe ( app , folder . path ) ;
folder = parent ;
}
}
async function deleteSafe ( app , pathOrFile , deletedNotePath , shouldReportUsedAttachments , shouldDeleteEmptyFolders ) {
const file = ( 0 , import _FileSystem4 . getAbstractFileOrNull ) ( app , pathOrFile ) ;
if ( ! file ) {
return false ;
}
let canDelete = ( 0 , import _FileSystem4 . isFile ) ( file ) || ( shouldDeleteEmptyFolders ? ? true ) ;
if ( ( 0 , import _FileSystem4 . isFile ) ( file ) ) {
const backlinks = await ( 0 , import _MetadataCache3 . getBacklinksForFileSafe ) ( app , file ) ;
if ( deletedNotePath ) {
backlinks . clear ( deletedNotePath ) ;
}
if ( backlinks . count ( ) !== 0 ) {
if ( shouldReportUsedAttachments ) {
new import _obsidian5 . Notice ( ` Attachment ${ file . path } is still used by other notes. It will not be deleted. ` ) ;
}
canDelete = false ;
}
} else if ( ( 0 , import _FileSystem4 . isFolder ) ( file ) ) {
const listedFiles = await listSafe2 ( app , file ) ;
for ( const child of [ ... listedFiles . files , ... listedFiles . folders ] ) {
canDelete && = await deleteSafe ( app , child , deletedNotePath , shouldReportUsedAttachments ) ;
}
canDelete && = await isEmptyFolder ( app , file ) ;
}
if ( canDelete ) {
try {
await app . fileManager . trashFile ( file ) ;
} catch ( e ) {
if ( await app . vault . exists ( file . path ) ) {
( 0 , import _Error . printError ) ( new Error ( ` Failed to delete ${ file . path } ` , { cause : e } ) ) ;
canDelete = false ;
}
}
}
return canDelete ;
}
function getAvailablePath2 ( app , path ) {
const ext = ( 0 , import _Path4 . extname ) ( path ) ;
return app . vault . getAvailablePath ( ( 0 , import _Path4 . join ) ( ( 0 , import _Path4 . dirname ) ( path ) , ( 0 , import _Path4 . basename ) ( path , ext ) ) , ext . slice ( 1 ) ) ;
}
function getMarkdownFilesSorted2 ( app ) {
return app . vault . getMarkdownFiles ( ) . sort ( ( a , b ) => a . path . localeCompare ( b . path ) ) ;
}
function getNoteFilesSorted ( app ) {
return app . vault . getAllLoadedFiles ( ) . filter ( ( file ) => ( 0 , import _FileSystem4 . isFile ) ( file ) && ( 0 , import _FileSystem4 . isNote ) ( file ) ) . sort ( ( a , b ) => a . path . localeCompare ( b . path ) ) ;
}
function getSafeRenamePath ( app , oldPathOrFile , newPath ) {
const oldPath = ( 0 , import _FileSystem4 . getPath ) ( oldPathOrFile ) ;
if ( app . vault . adapter . insensitive ) {
let folderPath = ( 0 , import _Path4 . dirname ) ( newPath ) ;
let nonExistingPath = ( 0 , import _Path4 . basename ) ( newPath ) ;
let folder = null ;
for ( ; ; ) {
folder = ( 0 , import _FileSystem4 . getFolderOrNull ) ( app , folderPath , true ) ;
if ( folder ) {
break ;
}
nonExistingPath = ( 0 , import _Path4 . join ) ( ( 0 , import _Path4 . basename ) ( folderPath ) , nonExistingPath ) ;
folderPath = ( 0 , import _Path4 . dirname ) ( folderPath ) ;
}
newPath = ( 0 , import _Path4 . join ) ( folder . getParentPrefix ( ) , nonExistingPath ) ;
}
if ( oldPath . toLowerCase ( ) === newPath . toLowerCase ( ) ) {
return newPath ;
}
return getAvailablePath2 ( app , newPath ) ;
}
async function isEmptyFolder ( app , pathOrFolder ) {
const listedFiles = await listSafe2 ( app , ( 0 , import _FileSystem4 . getPath ) ( pathOrFolder ) ) ;
return listedFiles . files . length === 0 && listedFiles . folders . length === 0 ;
}
async function listSafe2 ( app , pathOrFolder ) {
const path = ( 0 , import _FileSystem4 . getPath ) ( pathOrFolder ) ;
const EMPTY = { files : [ ] , folders : [ ] } ;
if ( ( await app . vault . adapter . stat ( path ) ) ? . type !== "folder" ) {
return EMPTY ;
}
try {
return await app . vault . adapter . list ( path ) ;
} catch ( e ) {
if ( await app . vault . exists ( path ) ) {
throw e ;
}
return EMPTY ;
}
}
async function process2 ( app , pathOrFile , newContentProvider , retryOptions = { } ) {
const file = ( 0 , import _FileSystem4 . getFile ) ( app , pathOrFile ) ;
const DEFAULT _RETRY _OPTIONS = { timeoutInMilliseconds : 6e4 } ;
const overriddenOptions = { ... DEFAULT _RETRY _OPTIONS , ... retryOptions } ;
await ( 0 , import _Async . retryWithTimeout ) ( async ( ) => {
if ( file . deleted ) {
throw ( 0 , import _Async . marksAsTerminateRetry ) ( new Error ( ` File ${ file . path } is deleted ` ) ) ;
}
const oldContent = await app . vault . read ( file ) ;
const newContent = await ( 0 , import _ValueProvider . resolveValue ) ( newContentProvider , oldContent ) ;
if ( newContent === null ) {
return false ;
}
let success = true ;
await app . vault . process ( file , ( content ) => {
if ( content !== oldContent ) {
console . warn ( "Content has changed since it was read. Retrying..." , {
actualContent : content ,
expectedContent : oldContent ,
path : file . path
} ) ;
success = false ;
return content ;
}
return newContent ;
} ) ;
return success ;
} , overriddenOptions ) ;
}
async function renameSafe2 ( app , oldPathOrFile , newPath ) {
const oldFile = ( 0 , import _FileSystem4 . getFile ) ( app , oldPathOrFile , false , true ) ;
const newAvailablePath = getSafeRenamePath ( app , oldPathOrFile , newPath ) ;
if ( oldFile . path . toLowerCase ( ) === newAvailablePath . toLowerCase ( ) ) {
if ( oldFile . path !== newPath ) {
await app . vault . rename ( oldFile , newAvailablePath ) ;
}
return newAvailablePath ;
}
const newFolderPath = ( 0 , import _implementations . parentFolderPath ) ( newAvailablePath ) ;
await createFolderSafe3 ( app , newFolderPath ) ;
try {
await app . vault . rename ( oldFile , newAvailablePath ) ;
} catch ( e ) {
if ( ! await app . vault . exists ( newAvailablePath ) || await app . vault . exists ( oldFile . path ) ) {
throw e ;
}
}
return newAvailablePath ;
}
}
} ) ;
// node_modules/obsidian-dev-utils/dist/lib/obsidian/FileChange.cjs
var require _FileChange = _ _commonJS ( {
"node_modules/obsidian-dev-utils/dist/lib/obsidian/FileChange.cjs" ( exports2 , module2 ) {
( function patchRequireEsmDefault ( ) {
const _ _require = require ;
require = Object . assign ( ( id ) => {
2024-11-29 13:32:34 +00:00
const module22 = _ _require ( id ) ? ? { } ;
return module22 . _ _esModule && module22 . default ? module22 . default : module22 ;
2024-11-22 19:27:30 +00:00
} , _ _require ) ;
} ) ( ) ;
var _ _defProp2 = Object . defineProperty ;
var _ _getOwnPropDesc2 = Object . getOwnPropertyDescriptor ;
var _ _getOwnPropNames2 = Object . getOwnPropertyNames ;
var _ _hasOwnProp2 = Object . prototype . hasOwnProperty ;
var _ _export2 = ( target , all ) => {
for ( var name in all )
_ _defProp2 ( target , name , { get : all [ name ] , enumerable : true } ) ;
} ;
var _ _copyProps2 = ( to , from , except , desc ) => {
if ( from && typeof from === "object" || typeof from === "function" ) {
for ( let key of _ _getOwnPropNames2 ( from ) )
if ( ! _ _hasOwnProp2 . call ( to , key ) && key !== except )
_ _defProp2 ( to , key , { get : ( ) => from [ key ] , enumerable : ! ( desc = _ _getOwnPropDesc2 ( from , key ) ) || desc . enumerable } ) ;
}
return to ;
} ;
var _ _toCommonJS2 = ( mod ) => _ _copyProps2 ( _ _defProp2 ( { } , "__esModule" , { value : true } ) , mod ) ;
var FileChange _exports = { } ;
_ _export2 ( FileChange _exports , {
applyFileChanges : ( ) => applyFileChanges2 ,
isContentChange : ( ) => isContentChange ,
isFrontmatterChange : ( ) => isFrontmatterChange
} ) ;
module2 . exports = _ _toCommonJS2 ( FileChange _exports ) ;
var import _Object = require _Object ( ) ;
var import _ValueProvider = require _ValueProvider ( ) ;
var import _FileSystem4 = require _FileSystem ( ) ;
var import _FrontMatter = require _FrontMatter ( ) ;
var import _Vault3 = require _Vault ( ) ;
var _ _process2 = globalThis [ "process" ] ? ? {
"cwd" : ( ) => "/" ,
"env" : { } ,
"platform" : "android"
} ;
async function applyFileChanges2 ( app , pathOrFile , changesProvider , retryOptions = { } ) {
const DEFAULT _RETRY _OPTIONS = { timeoutInMilliseconds : 6e4 } ;
const overriddenOptions = { ... DEFAULT _RETRY _OPTIONS , ... retryOptions } ;
await ( 0 , import _Vault3 . process ) ( app , pathOrFile , async ( content ) => {
let changes = await ( 0 , import _ValueProvider . resolveValue ) ( changesProvider ) ;
const frontMatter = ( 0 , import _FrontMatter . parseFrontMatter ) ( content ) ;
for ( const change of changes ) {
if ( isContentChange ( change ) ) {
const actualContent = content . slice ( change . startIndex , change . endIndex ) ;
if ( actualContent !== change . oldContent ) {
console . warn ( "Content mismatch" , {
actualContent ,
endIndex : change . endIndex ,
expectedContent : change . oldContent ,
path : ( 0 , import _FileSystem4 . getPath ) ( pathOrFile ) ,
startIndex : change . startIndex
} ) ;
return null ;
}
} else if ( isFrontmatterChange ( change ) ) {
const actualContent = ( 0 , import _Object . getNestedPropertyValue ) ( frontMatter , change . frontMatterKey ) ;
if ( actualContent !== change . oldContent ) {
console . warn ( "Content mismatch" , {
actualContent ,
expectedContent : change . oldContent ,
frontMatterKey : change . frontMatterKey ,
path : ( 0 , import _FileSystem4 . getPath ) ( pathOrFile )
} ) ;
return null ;
}
}
}
changes . sort ( ( a , b ) => {
if ( isContentChange ( a ) && isContentChange ( b ) ) {
return a . startIndex - b . startIndex ;
}
if ( isFrontmatterChange ( a ) && isFrontmatterChange ( b ) ) {
return a . frontMatterKey . localeCompare ( b . frontMatterKey ) ;
}
return isContentChange ( a ) ? - 1 : 1 ;
} ) ;
changes = changes . filter ( ( change , index ) => {
if ( change . oldContent === change . newContent ) {
return false ;
}
if ( index === 0 ) {
return true ;
}
return ! ( 0 , import _Object . deepEqual ) ( change , changes [ index - 1 ] ) ;
} ) ;
for ( let i = 1 ; i < changes . length ; i ++ ) {
const change = changes [ i ] ;
if ( ! change ) {
continue ;
}
const previousChange = changes [ i - 1 ] ;
if ( ! previousChange ) {
continue ;
}
if ( isContentChange ( previousChange ) && isContentChange ( change ) && previousChange . endIndex && change . startIndex && previousChange . endIndex > change . startIndex ) {
console . warn ( "Overlapping changes" , {
change ,
previousChange
} ) ;
return null ;
}
}
let newContent = "" ;
let lastIndex = 0 ;
let frontMatterChanged = false ;
for ( const change of changes ) {
if ( isContentChange ( change ) ) {
newContent += content . slice ( lastIndex , change . startIndex ) ;
newContent += change . newContent ;
lastIndex = change . endIndex ;
} else if ( isFrontmatterChange ( change ) ) {
( 0 , import _Object . setNestedPropertyValue ) ( frontMatter , change . frontMatterKey , change . newContent ) ;
frontMatterChanged = true ;
}
}
newContent += content . slice ( lastIndex ) ;
if ( frontMatterChanged ) {
newContent = ( 0 , import _FrontMatter . setFrontMatter ) ( newContent , frontMatter ) ;
}
return newContent ;
} , overriddenOptions ) ;
}
function isContentChange ( fileChange ) {
return fileChange . startIndex !== void 0 ;
}
function isFrontmatterChange ( fileChange ) {
return fileChange . frontMatterKey !== void 0 ;
}
}
} ) ;
// node_modules/obsidian-dev-utils/dist/lib/obsidian/ObsidianSettings.cjs
var require _ObsidianSettings = _ _commonJS ( {
"node_modules/obsidian-dev-utils/dist/lib/obsidian/ObsidianSettings.cjs" ( exports2 , module2 ) {
( function patchRequireEsmDefault ( ) {
const _ _require = require ;
require = Object . assign ( ( id ) => {
2024-11-29 13:32:34 +00:00
const module22 = _ _require ( id ) ? ? { } ;
return module22 . _ _esModule && module22 . default ? module22 . default : module22 ;
2024-11-22 19:27:30 +00:00
} , _ _require ) ;
} ) ( ) ;
var _ _defProp2 = Object . defineProperty ;
var _ _getOwnPropDesc2 = Object . getOwnPropertyDescriptor ;
var _ _getOwnPropNames2 = Object . getOwnPropertyNames ;
var _ _hasOwnProp2 = Object . prototype . hasOwnProperty ;
var _ _export2 = ( target , all ) => {
for ( var name in all )
_ _defProp2 ( target , name , { get : all [ name ] , enumerable : true } ) ;
} ;
var _ _copyProps2 = ( to , from , except , desc ) => {
if ( from && typeof from === "object" || typeof from === "function" ) {
for ( let key of _ _getOwnPropNames2 ( from ) )
if ( ! _ _hasOwnProp2 . call ( to , key ) && key !== except )
_ _defProp2 ( to , key , { get : ( ) => from [ key ] , enumerable : ! ( desc = _ _getOwnPropDesc2 ( from , key ) ) || desc . enumerable } ) ;
}
return to ;
} ;
var _ _toCommonJS2 = ( mod ) => _ _copyProps2 ( _ _defProp2 ( { } , "__esModule" , { value : true } ) , mod ) ;
var ObsidianSettings _exports = { } ;
_ _export2 ( ObsidianSettings _exports , {
shouldUseRelativeLinks : ( ) => shouldUseRelativeLinks ,
shouldUseWikilinks : ( ) => shouldUseWikilinks
} ) ;
module2 . exports = _ _toCommonJS2 ( ObsidianSettings _exports ) ;
function shouldUseRelativeLinks ( app ) {
return app . vault . getConfig ( "newLinkFormat" ) === "relative" ;
}
function shouldUseWikilinks ( app ) {
return ! app . vault . getConfig ( "useMarkdownLinks" ) ;
}
}
} ) ;
// node_modules/obsidian-dev-utils/dist/lib/obsidian/Link.cjs
var require _Link = _ _commonJS ( {
"node_modules/obsidian-dev-utils/dist/lib/obsidian/Link.cjs" ( exports2 , module2 ) {
( function patchRequireEsmDefault ( ) {
const _ _require = require ;
require = Object . assign ( ( id ) => {
2024-11-29 13:32:34 +00:00
const module22 = _ _require ( id ) ? ? { } ;
return module22 . _ _esModule && module22 . default ? module22 . default : module22 ;
2024-11-22 19:27:30 +00:00
} , _ _require ) ;
} ) ( ) ;
var _ _defProp2 = Object . defineProperty ;
var _ _getOwnPropDesc2 = Object . getOwnPropertyDescriptor ;
var _ _getOwnPropNames2 = Object . getOwnPropertyNames ;
var _ _hasOwnProp2 = Object . prototype . hasOwnProperty ;
var _ _export2 = ( target , all ) => {
for ( var name in all )
_ _defProp2 ( target , name , { get : all [ name ] , enumerable : true } ) ;
} ;
var _ _copyProps2 = ( to , from , except , desc ) => {
if ( from && typeof from === "object" || typeof from === "function" ) {
for ( let key of _ _getOwnPropNames2 ( from ) )
if ( ! _ _hasOwnProp2 . call ( to , key ) && key !== except )
_ _defProp2 ( to , key , { get : ( ) => from [ key ] , enumerable : ! ( desc = _ _getOwnPropDesc2 ( from , key ) ) || desc . enumerable } ) ;
}
return to ;
} ;
var _ _toCommonJS2 = ( mod ) => _ _copyProps2 ( _ _defProp2 ( { } , "__esModule" , { value : true } ) , mod ) ;
var Link _exports = { } ;
_ _export2 ( Link _exports , {
convertLink : ( ) => convertLink ,
editBacklinks : ( ) => editBacklinks ,
editLinks : ( ) => editLinks ,
extractLinkFile : ( ) => extractLinkFile3 ,
generateMarkdownLink : ( ) => generateMarkdownLink2 ,
shouldResetAlias : ( ) => shouldResetAlias ,
splitSubpath : ( ) => splitSubpath3 ,
testAngleBrackets : ( ) => testAngleBrackets ,
testEmbed : ( ) => testEmbed2 ,
testLeadingDot : ( ) => testLeadingDot ,
testWikilink : ( ) => testWikilink2 ,
updateLink : ( ) => updateLink ,
updateLinksInFile : ( ) => updateLinksInFile2
} ) ;
module2 . exports = _ _toCommonJS2 ( Link _exports ) ;
var import _obsidian5 = require ( "obsidian" ) ;
var import _Object = require _Object ( ) ;
var import _Path4 = require _Path ( ) ;
var import _String = require _String ( ) ;
var import _FileChange2 = require _FileChange ( ) ;
var import _FileSystem4 = require _FileSystem ( ) ;
var import _MetadataCache3 = require _MetadataCache ( ) ;
var import _ObsidianSettings = require _ObsidianSettings ( ) ;
var import _Reference2 = require _Reference ( ) ;
var SPECIAL _LINK _SYMBOLS _REGEXP = /[\\\x00\x08\x0B\x0C\x0E-\x1F ]/g ;
var SPECIAL _MARKDOWN _LINK _SYMBOLS _REGEX = /[\\[\]<>_*~=`$]/g ;
function convertLink ( options ) {
return updateLink ( {
app : options . app ,
forceMarkdownLinks : options . forceMarkdownLinks ,
link : options . link ,
oldPathOrFile : options . oldPathOrFile ,
pathOrFile : extractLinkFile3 ( options . app , options . link , options . sourcePathOrFile ) ,
renameMap : options . renameMap ,
shouldUpdateFilenameAlias : options . shouldUpdateFilenameAlias ,
sourcePathOrFile : options . sourcePathOrFile
} ) ;
}
async function editBacklinks ( app , pathOrFile , linkConverter , retryOptions = { } ) {
const backlinks = await ( 0 , import _MetadataCache3 . getBacklinksForFileSafe ) ( app , pathOrFile , retryOptions ) ;
for ( const backlinkNotePath of backlinks . keys ( ) ) {
const currentLinks = backlinks . get ( backlinkNotePath ) ? ? [ ] ;
const linkJsons = new Set ( currentLinks . map ( ( link ) => ( 0 , import _Object . toJson ) ( link ) ) ) ;
await editLinks ( app , backlinkNotePath , ( link ) => {
const linkJson = ( 0 , import _Object . toJson ) ( link ) ;
if ( ! linkJsons . has ( linkJson ) ) {
return ;
}
return linkConverter ( link ) ;
} , retryOptions ) ;
}
}
async function editLinks ( app , pathOrFile , linkConverter , retryOptions = { } ) {
await ( 0 , import _FileChange2 . applyFileChanges ) ( app , pathOrFile , async ( ) => {
const cache = await ( 0 , import _MetadataCache3 . getCacheSafe ) ( app , pathOrFile ) ;
if ( ! cache ) {
return [ ] ;
}
const changes = [ ] ;
for ( const link of ( 0 , import _MetadataCache3 . getAllLinks ) ( cache ) ) {
const newContent = await linkConverter ( link ) ;
if ( newContent === void 0 ) {
continue ;
}
changes . push ( ( 0 , import _Reference2 . referenceToFileChange ) ( link , newContent ) ) ;
}
return changes ;
} , retryOptions ) ;
}
function extractLinkFile3 ( app , link , notePathOrFile ) {
const { linkPath } = splitSubpath3 ( link . link ) ;
return app . metadataCache . getFirstLinkpathDest ( linkPath , ( 0 , import _FileSystem4 . getPath ) ( notePathOrFile ) ) ;
}
function generateMarkdownLink2 ( options ) {
const { app } = options ;
const configurableDefaultOptionsFn = app . fileManager . generateMarkdownLink . defaultOptionsFn ? ? ( ( ) => ( { } ) ) ;
const configurableDefaultOptions = configurableDefaultOptionsFn ( ) ;
const DEFAULT _OPTIONS = {
allowEmptyEmbedAlias : true
} ;
options = { ... DEFAULT _OPTIONS , ... configurableDefaultOptions , ... options } ;
const file = ( 0 , import _FileSystem4 . getFile ) ( app , options . pathOrFile , options . allowNonExistingFile ) ;
return ( 0 , import _MetadataCache3 . tempRegisterFileAndRun ) ( app , file , ( ) => {
const sourcePath = ( 0 , import _FileSystem4 . getPath ) ( options . sourcePathOrFile ) ;
const subpath = options . subpath ? ? "" ;
let alias = options . alias ? ? "" ;
const isEmbed = options . isEmbed ? ? ( options . originalLink ? testEmbed2 ( options . originalLink ) : void 0 ) ? ? ! ( 0 , import _FileSystem4 . isMarkdownFile ) ( file ) ;
const isWikilink = options . isWikilink ? ? ( options . originalLink ? testWikilink2 ( options . originalLink ) : void 0 ) ? ? ( 0 , import _ObsidianSettings . shouldUseWikilinks ) ( app ) ;
const forceRelativePath = options . forceRelativePath ? ? ( 0 , import _ObsidianSettings . shouldUseRelativeLinks ) ( app ) ;
const useLeadingDot = options . useLeadingDot ? ? ( options . originalLink ? testLeadingDot ( options . originalLink ) : void 0 ) ? ? false ;
const useAngleBrackets = options . useAngleBrackets ? ? ( options . originalLink ? testAngleBrackets ( options . originalLink ) : void 0 ) ? ? false ;
let linkText = file . path === sourcePath && subpath ? subpath : forceRelativePath ? ( 0 , import _Path4 . relative ) ( ( 0 , import _Path4 . dirname ) ( sourcePath ) , isWikilink ? ( 0 , import _FileSystem4 . trimMarkdownExtension ) ( file ) : file . path ) + subpath : app . metadataCache . fileToLinktext ( file , sourcePath , isWikilink ) + subpath ;
if ( forceRelativePath && useLeadingDot && ! linkText . startsWith ( "." ) && ! linkText . startsWith ( "#" ) ) {
linkText = "./" + linkText ;
}
const embedPrefix = isEmbed ? "!" : "" ;
if ( ! isWikilink ) {
if ( useAngleBrackets ) {
linkText = ` < ${ linkText } > ` ;
} else {
linkText = linkText . replace ( SPECIAL _LINK _SYMBOLS _REGEXP , function ( specialLinkSymbol ) {
return encodeURIComponent ( specialLinkSymbol ) ;
} ) ;
}
if ( ! alias && ( ! isEmbed || ! options . allowEmptyEmbedAlias ) ) {
alias = ! options . includeAttachmentExtensionToEmbedAlias || ( 0 , import _FileSystem4 . isMarkdownFile ) ( file ) ? file . basename : file . name ;
}
alias = alias . replace ( SPECIAL _MARKDOWN _LINK _SYMBOLS _REGEX , "\\$&" ) ;
return ` ${ embedPrefix } [ ${ alias } ]( ${ linkText } ) ` ;
} else {
if ( alias && alias . toLowerCase ( ) === linkText . toLowerCase ( ) ) {
linkText = alias ;
alias = "" ;
}
const aliasPart = alias ? ` | ${ alias } ` : "" ;
return ` ${ embedPrefix } [[ ${ linkText } ${ aliasPart } ]] ` ;
}
} ) ;
}
function shouldResetAlias ( options ) {
const {
app ,
displayText ,
isWikilink ,
otherPathOrFiles ,
pathOrFile ,
sourcePathOrFile
} = options ;
if ( isWikilink === false ) {
return false ;
}
const file = ( 0 , import _FileSystem4 . getFile ) ( app , pathOrFile ) ;
if ( ! displayText ) {
return true ;
}
const sourcePath = ( 0 , import _FileSystem4 . getPath ) ( sourcePathOrFile ) ;
const sourceDir = ( 0 , import _Path4 . dirname ) ( sourcePath ) ;
const aliasesToReset = /* @__PURE__ */ new Set ( ) ;
for ( const pathOrFile2 of [ file . path , ... otherPathOrFiles ] ) {
if ( ! pathOrFile2 ) {
continue ;
}
const path = ( 0 , import _FileSystem4 . getPath ) ( pathOrFile2 ) ;
aliasesToReset . add ( path ) ;
aliasesToReset . add ( ( 0 , import _Path4 . basename ) ( path ) ) ;
aliasesToReset . add ( ( 0 , import _Path4 . relative ) ( sourceDir , path ) ) ;
}
aliasesToReset . add ( app . metadataCache . fileToLinktext ( file , sourcePath , false ) ) ;
const cleanDisplayText = ( 0 , import _obsidian5 . normalizePath ) ( displayText . split ( " > " ) [ 0 ] ? ? "" ) . replace ( /^\.\// , "" ) . toLowerCase ( ) ;
for ( const alias of aliasesToReset ) {
if ( alias . toLowerCase ( ) === cleanDisplayText ) {
return true ;
}
const dir = ( 0 , import _Path4 . dirname ) ( alias ) ;
const base = ( 0 , import _Path4 . basename ) ( alias , ( 0 , import _Path4 . extname ) ( alias ) ) ;
if ( ( 0 , import _Path4 . join ) ( dir , base ) . toLowerCase ( ) === cleanDisplayText ) {
return true ;
}
}
return false ;
}
function splitSubpath3 ( link ) {
const parsed = ( 0 , import _obsidian5 . parseLinktext ) ( ( 0 , import _String . normalize ) ( link ) ) ;
return {
linkPath : parsed . path ,
subpath : parsed . subpath
} ;
}
function testAngleBrackets ( link ) {
return link . includes ( "](<" ) ;
}
function testEmbed2 ( link ) {
return link . startsWith ( "![" ) ;
}
function testLeadingDot ( link ) {
return link . includes ( "[[./" ) || link . includes ( "](./" ) || link . includes ( "](<./" ) ;
}
function testWikilink2 ( link ) {
return link . includes ( "[[" ) ;
}
function updateLink ( options ) {
const {
app ,
forceMarkdownLinks ,
link ,
oldPathOrFile ,
pathOrFile ,
renameMap ,
shouldUpdateFilenameAlias ,
sourcePathOrFile
} = options ;
if ( ! pathOrFile ) {
return link . original ;
}
let file = ( 0 , import _FileSystem4 . getFile ) ( app , pathOrFile ) ;
const oldPath = ( 0 , import _FileSystem4 . getPath ) ( oldPathOrFile ? ? sourcePathOrFile ) ;
const isWikilink = testWikilink2 ( link . original ) && forceMarkdownLinks !== true ;
const { subpath } = splitSubpath3 ( link . link ) ;
const newPath = renameMap ? . get ( file . path ) ;
let alias = shouldResetAlias ( {
app ,
displayText : link . displayText ,
isWikilink ,
otherPathOrFiles : [ oldPath , newPath ] ,
pathOrFile ,
sourcePathOrFile
} ) ? void 0 : link . displayText ;
if ( shouldUpdateFilenameAlias ? ? true ) {
if ( alias ? . toLowerCase ( ) === ( 0 , import _Path4 . basename ) ( oldPath , ( 0 , import _Path4 . extname ) ( oldPath ) ) . toLowerCase ( ) ) {
alias = file . basename ;
} else if ( alias ? . toLowerCase ( ) === ( 0 , import _Path4 . basename ) ( oldPath ) . toLowerCase ( ) ) {
alias = file . name ;
}
}
if ( newPath ) {
file = ( 0 , import _FileSystem4 . getFile ) ( app , newPath , true ) ;
}
const newLink = generateMarkdownLink2 ( {
alias ,
app ,
isWikilink : forceMarkdownLinks ? false : void 0 ,
originalLink : link . original ,
pathOrFile : file ,
sourcePathOrFile ,
subpath
} ) ;
return newLink ;
}
async function updateLinksInFile2 ( options ) {
const {
app ,
embedOnlyLinks ,
forceMarkdownLinks ,
oldPathOrFile ,
pathOrFile ,
renameMap ,
shouldUpdateFilenameAlias
} = options ;
await editLinks ( app , pathOrFile , ( link ) => {
const isEmbedLink = testEmbed2 ( link . original ) ;
if ( embedOnlyLinks !== void 0 && embedOnlyLinks !== isEmbedLink ) {
return ;
}
return convertLink ( {
app ,
forceMarkdownLinks ,
link ,
oldPathOrFile ,
renameMap ,
shouldUpdateFilenameAlias ,
sourcePathOrFile : pathOrFile
} ) ;
} ) ;
}
}
} ) ;
// node_modules/obsidian-dev-utils/dist/lib/obsidian/RenameDeleteHandler.cjs
var require _RenameDeleteHandler = _ _commonJS ( {
"node_modules/obsidian-dev-utils/dist/lib/obsidian/RenameDeleteHandler.cjs" ( exports2 , module2 ) {
( function patchRequireEsmDefault ( ) {
const _ _require = require ;
require = Object . assign ( ( id ) => {
2024-11-29 13:32:34 +00:00
const module22 = _ _require ( id ) ? ? { } ;
return module22 . _ _esModule && module22 . default ? module22 . default : module22 ;
2024-11-22 19:27:30 +00:00
} , _ _require ) ;
} ) ( ) ;
var _ _defProp2 = Object . defineProperty ;
var _ _getOwnPropDesc2 = Object . getOwnPropertyDescriptor ;
var _ _getOwnPropNames2 = Object . getOwnPropertyNames ;
var _ _hasOwnProp2 = Object . prototype . hasOwnProperty ;
var _ _export2 = ( target , all ) => {
for ( var name in all )
_ _defProp2 ( target , name , { get : all [ name ] , enumerable : true } ) ;
} ;
var _ _copyProps2 = ( to , from , except , desc ) => {
if ( from && typeof from === "object" || typeof from === "function" ) {
for ( let key of _ _getOwnPropNames2 ( from ) )
if ( ! _ _hasOwnProp2 . call ( to , key ) && key !== except )
_ _defProp2 ( to , key , { get : ( ) => from [ key ] , enumerable : ! ( desc = _ _getOwnPropDesc2 ( from , key ) ) || desc . enumerable } ) ;
}
return to ;
} ;
var _ _toCommonJS2 = ( mod ) => _ _copyProps2 ( _ _defProp2 ( { } , "__esModule" , { value : true } ) , mod ) ;
var RenameDeleteHandler _exports = { } ;
_ _export2 ( RenameDeleteHandler _exports , {
registerRenameDeleteHandlers : ( ) => registerRenameDeleteHandlers2
} ) ;
module2 . exports = _ _toCommonJS2 ( RenameDeleteHandler _exports ) ;
var import _monkey _around = require _dist ( ) ;
var import _obsidian5 = require ( "obsidian" ) ;
var import _Error = require _Error ( ) ;
var import _Function2 = require _Function ( ) ;
var import _Object = require _Object ( ) ;
var import _Path4 = require _Path ( ) ;
var import _App = require _App ( ) ;
var import _AttachmentPath2 = require _AttachmentPath ( ) ;
var import _FileSystem4 = require _FileSystem ( ) ;
var import _Link3 = require _Link ( ) ;
var import _MetadataCache3 = require _MetadataCache ( ) ;
var import _Queue2 = require _Queue ( ) ;
var import _Vault3 = require _Vault ( ) ;
var _ _process2 = globalThis [ "process" ] ? ? {
"cwd" : ( ) => "/" ,
"env" : { } ,
"platform" : "android"
} ;
var deletedMetadataCacheMap = /* @__PURE__ */ new Map ( ) ;
var handledRenames = /* @__PURE__ */ new Set ( ) ;
function registerRenameDeleteHandlers2 ( plugin , settingsBuilder ) {
const renameDeleteHandlersMap = getRenameDeleteHandlersMap ( plugin . app ) ;
const pluginId = plugin . manifest . id ;
renameDeleteHandlersMap . set ( pluginId , settingsBuilder ) ;
logRegisteredHandlers ( plugin . app ) ;
plugin . register ( ( ) => {
renameDeleteHandlersMap . delete ( pluginId ) ;
logRegisteredHandlers ( plugin . app ) ;
} ) ;
const app = plugin . app ;
plugin . registerEvent (
app . vault . on ( "delete" , ( file ) => {
if ( ! shouldInvokeHandler ( app , pluginId ) ) {
return ;
}
const path = file . path ;
( 0 , import _Queue2 . addToQueue ) ( app , ( ) => handleDelete ( app , path ) ) ;
} )
) ;
plugin . registerEvent (
app . vault . on ( "rename" , ( file , oldPath ) => {
if ( ! shouldInvokeHandler ( app , pluginId ) ) {
return ;
}
if ( ! ( 0 , import _FileSystem4 . isFile ) ( file ) ) {
return ;
}
const newPath = file . path ;
handleRename ( app , oldPath , newPath ) ;
} )
) ;
plugin . registerEvent (
app . metadataCache . on ( "deleted" , ( file , prevCache ) => {
handleMetadataDeleted ( app , file , prevCache ) ;
} )
) ;
}
async function fillRenameMap ( app , oldPath , newPath , renameMap ) {
renameMap . set ( oldPath , newPath ) ;
if ( ! ( 0 , import _FileSystem4 . isNote ) ( oldPath ) ) {
return ;
}
const settings = getSettings ( app ) ;
const oldAttachmentFolderPath = await ( 0 , import _AttachmentPath2 . getAttachmentFolderPath ) ( app , oldPath ) ;
const newAttachmentFolderPath = settings . shouldRenameAttachmentFolder ? await ( 0 , import _AttachmentPath2 . getAttachmentFolderPath ) ( app , newPath ) : oldAttachmentFolderPath ;
const oldAttachmentFolder = ( 0 , import _FileSystem4 . getFolderOrNull ) ( app , oldAttachmentFolderPath ) ;
if ( ! oldAttachmentFolder ) {
return ;
}
if ( oldAttachmentFolderPath === newAttachmentFolderPath && ! settings . shouldRenameAttachmentFiles ) {
return ;
}
const oldAttachmentFiles = [ ] ;
if ( ! await ( 0 , import _AttachmentPath2 . hasOwnAttachmentFolder ) ( app , oldPath ) ) {
2024-11-29 13:32:34 +00:00
const oldCache = await ( 0 , import _MetadataCache3 . getCacheSafe ) ( app , newPath ) ;
2024-11-22 19:27:30 +00:00
if ( ! oldCache ) {
return ;
}
for ( const oldLink of ( 0 , import _MetadataCache3 . getAllLinks ) ( oldCache ) ) {
const oldAttachmentFile = ( 0 , import _Link3 . extractLinkFile ) ( app , oldLink , oldPath ) ;
if ( ! oldAttachmentFile ) {
continue ;
}
if ( oldAttachmentFile . path . startsWith ( oldAttachmentFolderPath ) ) {
const oldAttachmentBacklinks = await ( 0 , import _MetadataCache3 . getBacklinksForFileSafe ) ( app , oldAttachmentFile ) ;
if ( oldAttachmentBacklinks . keys ( ) . length === 1 ) {
oldAttachmentFiles . push ( oldAttachmentFile ) ;
}
}
}
} else {
import _obsidian5 . Vault . recurseChildren ( oldAttachmentFolder , ( oldAttachmentFile ) => {
if ( ( 0 , import _FileSystem4 . isFile ) ( oldAttachmentFile ) ) {
oldAttachmentFiles . push ( oldAttachmentFile ) ;
}
} ) ;
}
const oldBasename = ( 0 , import _Path4 . basename ) ( oldPath , ( 0 , import _Path4 . extname ) ( oldPath ) ) ;
const newBasename = ( 0 , import _Path4 . basename ) ( newPath , ( 0 , import _Path4 . extname ) ( newPath ) ) ;
for ( const oldAttachmentFile of oldAttachmentFiles ) {
if ( ( 0 , import _FileSystem4 . isNote ) ( oldAttachmentFile ) ) {
continue ;
}
const relativePath = ( 0 , import _Path4 . relative ) ( oldAttachmentFolderPath , oldAttachmentFile . path ) ;
const newDir = ( 0 , import _Path4 . join ) ( newAttachmentFolderPath , ( 0 , import _Path4 . dirname ) ( relativePath ) ) ;
const newChildBasename = settings . shouldRenameAttachmentFiles ? oldAttachmentFile . basename . replaceAll ( oldBasename , newBasename ) : oldAttachmentFile . basename ;
let newChildPath = ( 0 , import _Path4 . join ) ( newDir , ( 0 , import _Path4 . makeFileName ) ( newChildBasename , oldAttachmentFile . extension ) ) ;
if ( oldAttachmentFile . path === newChildPath ) {
continue ;
}
if ( settings . shouldDeleteConflictingAttachments ) {
const newChildFile = ( 0 , import _FileSystem4 . getFileOrNull ) ( app , newChildPath ) ;
if ( newChildFile ) {
await app . fileManager . trashFile ( newChildFile ) ;
}
} else {
newChildPath = app . vault . getAvailablePath ( ( 0 , import _Path4 . join ) ( newDir , newChildBasename ) , oldAttachmentFile . extension ) ;
}
renameMap . set ( oldAttachmentFile . path , newChildPath ) ;
}
}
function getRenameDeleteHandlersMap ( app ) {
return ( 0 , import _App . getObsidianDevUtilsState ) ( app , "renameDeleteHandlersMap" , /* @__PURE__ */ new Map ( ) ) . value ;
}
function getSettings ( app ) {
const renameDeleteHandlersMap = getRenameDeleteHandlersMap ( app ) ;
const settingsBuilders = Array . from ( renameDeleteHandlersMap . values ( ) ) . reverse ( ) ;
const settings = { } ;
for ( const settingsBuilder of settingsBuilders ) {
const newSettings = settingsBuilder ( ) ;
for ( const [ key , value ] of Object . entries ( newSettings ) ) {
settings [ key ] || = value ;
}
}
return settings ;
}
async function handleDelete ( app , path ) {
console . debug ( ` Handle Delete ${ path } ` ) ;
if ( ! ( 0 , import _FileSystem4 . isNote ) ( path ) ) {
return ;
}
const settings = getSettings ( app ) ;
if ( ! settings . shouldDeleteOrphanAttachments ) {
return ;
}
const cache = deletedMetadataCacheMap . get ( path ) ;
deletedMetadataCacheMap . delete ( path ) ;
if ( cache ) {
const links = ( 0 , import _MetadataCache3 . getAllLinks ) ( cache ) ;
for ( const link of links ) {
const attachmentFile = ( 0 , import _Link3 . extractLinkFile ) ( app , link , path ) ;
if ( ! attachmentFile ) {
continue ;
}
if ( ( 0 , import _FileSystem4 . isNote ) ( attachmentFile ) ) {
continue ;
}
await ( 0 , import _Vault3 . deleteSafe ) ( app , attachmentFile , path , settings . shouldDeleteEmptyFolders ) ;
}
}
const attachmentFolderPath = await ( 0 , import _AttachmentPath2 . getAttachmentFolderPath ) ( app , path ) ;
const attachmentFolder = ( 0 , import _FileSystem4 . getFolderOrNull ) ( app , attachmentFolderPath ) ;
if ( ! attachmentFolder ) {
return ;
}
if ( ! await ( 0 , import _AttachmentPath2 . hasOwnAttachmentFolder ) ( app , path ) ) {
return ;
}
await ( 0 , import _Vault3 . deleteSafe ) ( app , attachmentFolder , path , false , settings . shouldDeleteEmptyFolders ) ;
}
function handleMetadataDeleted ( app , file , prevCache ) {
const settings = getSettings ( app ) ;
if ( ! settings . shouldDeleteOrphanAttachments ) {
return ;
}
if ( ( 0 , import _FileSystem4 . isMarkdownFile ) ( file ) && prevCache ) {
deletedMetadataCacheMap . set ( file . path , prevCache ) ;
}
}
function handleRename ( app , oldPath , newPath ) {
const key = makeKey ( oldPath , newPath ) ;
console . debug ( ` Handle Rename ${ key } ` ) ;
if ( handledRenames . has ( key ) ) {
handledRenames . delete ( key ) ;
return ;
}
const backlinks = ( 0 , import _MetadataCache3 . getBacklinksForFileOrPath ) ( app , oldPath ) ;
( 0 , import _Queue2 . addToQueue ) ( app , ( ) => handleRenameAsync ( app , oldPath , newPath , backlinks ) ) ;
}
async function handleRenameAsync ( app , oldPath , newPath , backlinks ) {
if ( app . vault . adapter . insensitive && oldPath . toLowerCase ( ) === newPath . toLowerCase ( ) ) {
const tempPath = ( 0 , import _Path4 . join ) ( ( 0 , import _Path4 . dirname ) ( newPath ) , "__temp__" + ( 0 , import _Path4 . basename ) ( newPath ) ) ;
await renameHandled ( app , newPath , tempPath ) ;
await handleRenameAsync ( app , oldPath , tempPath , backlinks ) ;
await app . vault . rename ( ( 0 , import _FileSystem4 . getFile ) ( app , tempPath ) , newPath ) ;
return ;
}
const restoreUpdateAllLinks = ( 0 , import _monkey _around . around ) ( app . fileManager , {
updateAllLinks : ( ) => import _Function2 . noopAsync
} ) ;
try {
const renameMap = /* @__PURE__ */ new Map ( ) ;
await fillRenameMap ( app , oldPath , newPath , renameMap ) ;
const backlinksMap = /* @__PURE__ */ new Map ( ) ;
initBacklinksMap ( backlinks . data , renameMap , backlinksMap , oldPath ) ;
for ( const attachmentOldPath of renameMap . keys ( ) ) {
if ( attachmentOldPath === oldPath ) {
continue ;
}
const currentBacklinksMap = await ( 0 , import _MetadataCache3 . getBacklinksMap ) ( app , [ attachmentOldPath ] ) ;
initBacklinksMap ( currentBacklinksMap , renameMap , backlinksMap , attachmentOldPath ) ;
}
const parentFolders = /* @__PURE__ */ new Set ( ) ;
for ( const [ oldRelatedPath , newRelatedPath ] of renameMap . entries ( ) ) {
if ( oldRelatedPath === oldPath ) {
continue ;
}
const fixedNewRelatedPath = await renameHandled ( app , oldRelatedPath , newRelatedPath ) ;
renameMap . set ( oldRelatedPath , fixedNewRelatedPath ) ;
parentFolders . add ( ( 0 , import _Path4 . dirname ) ( oldRelatedPath ) ) ;
}
const settings = getSettings ( app ) ;
if ( settings . shouldDeleteEmptyFolders ) {
for ( const parentFolder of parentFolders ) {
await ( 0 , import _Vault3 . deleteEmptyFolderHierarchy ) ( app , parentFolder ) ;
}
}
for ( const [ newBacklinkPath , linkJsonToPathMap ] of backlinksMap . entries ( ) ) {
await ( 0 , import _Link3 . editLinks ) ( app , newBacklinkPath , ( link ) => {
const oldRelatedPath = linkJsonToPathMap . get ( ( 0 , import _Object . toJson ) ( link ) ) ;
if ( ! oldRelatedPath ) {
return ;
}
const newRelatedPath = renameMap . get ( oldRelatedPath ) ;
if ( ! newRelatedPath ) {
return ;
}
return ( 0 , import _Link3 . updateLink ) ( {
app ,
link ,
oldPathOrFile : oldRelatedPath ,
pathOrFile : newRelatedPath ,
renameMap ,
shouldUpdateFilenameAlias : settings . shouldUpdateFilenameAliases ,
sourcePathOrFile : newBacklinkPath
} ) ;
} ) ;
}
if ( ( 0 , import _FileSystem4 . isCanvasFile ) ( newPath ) ) {
await ( 0 , import _Vault3 . process ) ( app , newPath , ( content ) => {
let canvasData ;
try {
canvasData = JSON . parse ( content ) ;
} catch ( e ) {
( 0 , import _Error . printError ) ( new Error ( ` Failed to parse canvas data for ${ newPath } ` , { cause : e } ) ) ;
return content ;
}
for ( const node of canvasData . nodes ) {
if ( node . type !== "file" ) {
continue ;
}
const newPath2 = renameMap . get ( node . file ) ;
if ( ! newPath2 ) {
continue ;
}
node . file = newPath2 ;
}
return ( 0 , import _Object . toJson ) ( canvasData ) ;
} ) ;
} else if ( ( 0 , import _FileSystem4 . isMarkdownFile ) ( newPath ) ) {
await ( 0 , import _Link3 . updateLinksInFile ) ( {
app ,
oldPathOrFile : oldPath ,
pathOrFile : newPath ,
renameMap ,
shouldUpdateFilenameAlias : settings . shouldUpdateFilenameAliases
} ) ;
}
} finally {
restoreUpdateAllLinks ( ) ;
const orphanKeys = Array . from ( handledRenames ) ;
( 0 , import _Queue2 . addToQueue ) ( app , ( ) => {
for ( const key of orphanKeys ) {
handledRenames . delete ( key ) ;
}
} ) ;
}
}
function initBacklinksMap ( currentBacklinksMap , renameMap , backlinksMap , path ) {
for ( const [ backlinkPath , links ] of currentBacklinksMap . entries ( ) ) {
const newBacklinkPath = renameMap . get ( backlinkPath ) ? ? backlinkPath ;
const linkJsonToPathMap = backlinksMap . get ( newBacklinkPath ) ? ? /* @__PURE__ */ new Map ( ) ;
backlinksMap . set ( newBacklinkPath , linkJsonToPathMap ) ;
for ( const link of links ) {
linkJsonToPathMap . set ( ( 0 , import _Object . toJson ) ( link ) , path ) ;
}
}
}
function logRegisteredHandlers ( app ) {
const renameDeleteHandlersMap = getRenameDeleteHandlersMap ( app ) ;
console . debug ( ` Plugins with registered rename/delete handlers: ${ Array . from ( renameDeleteHandlersMap . keys ( ) ) . join ( ", " ) } ` ) ;
}
function makeKey ( oldPath , newPath ) {
return ` ${ oldPath } -> ${ newPath } ` ;
}
async function renameHandled ( app , oldPath , newPath ) {
newPath = ( 0 , import _Vault3 . getSafeRenamePath ) ( app , oldPath , newPath ) ;
if ( oldPath === newPath ) {
return newPath ;
}
const key = makeKey ( oldPath , newPath ) ;
handledRenames . add ( key ) ;
newPath = await ( 0 , import _Vault3 . renameSafe ) ( app , oldPath , newPath ) ;
return newPath ;
}
function shouldInvokeHandler ( app , pluginId ) {
const renameDeleteHandlerPluginIds = getRenameDeleteHandlersMap ( app ) ;
const mainPluginId = Array . from ( renameDeleteHandlerPluginIds . keys ( ) ) [ 0 ] ;
if ( mainPluginId !== pluginId ) {
return false ;
}
return true ;
}
}
} ) ;
// node_modules/obsidian-dev-utils/dist/lib/obsidian/Plugin/PluginSettingsTabBase.cjs
var require _PluginSettingsTabBase = _ _commonJS ( {
"node_modules/obsidian-dev-utils/dist/lib/obsidian/Plugin/PluginSettingsTabBase.cjs" ( exports2 , module2 ) {
( function patchRequireEsmDefault ( ) {
const _ _require = require ;
require = Object . assign ( ( id ) => {
2024-11-29 13:32:34 +00:00
const module22 = _ _require ( id ) ? ? { } ;
return module22 . _ _esModule && module22 . default ? module22 . default : module22 ;
2024-11-22 19:27:30 +00:00
} , _ _require ) ;
} ) ( ) ;
var _ _defProp2 = Object . defineProperty ;
var _ _getOwnPropDesc2 = Object . getOwnPropertyDescriptor ;
var _ _getOwnPropNames2 = Object . getOwnPropertyNames ;
var _ _hasOwnProp2 = Object . prototype . hasOwnProperty ;
var _ _export2 = ( target , all ) => {
for ( var name in all )
_ _defProp2 ( target , name , { get : all [ name ] , enumerable : true } ) ;
} ;
var _ _copyProps2 = ( to , from , except , desc ) => {
if ( from && typeof from === "object" || typeof from === "function" ) {
for ( let key of _ _getOwnPropNames2 ( from ) )
if ( ! _ _hasOwnProp2 . call ( to , key ) && key !== except )
_ _defProp2 ( to , key , { get : ( ) => from [ key ] , enumerable : ! ( desc = _ _getOwnPropDesc2 ( from , key ) ) || desc . enumerable } ) ;
}
return to ;
} ;
var _ _toCommonJS2 = ( mod ) => _ _copyProps2 ( _ _defProp2 ( { } , "__esModule" , { value : true } ) , mod ) ;
var PluginSettingsTabBase _exports = { } ;
_ _export2 ( PluginSettingsTabBase _exports , {
PluginSettingsTabBase : ( ) => PluginSettingsTabBase2
} ) ;
module2 . exports = _ _toCommonJS2 ( PluginSettingsTabBase _exports ) ;
var import _obsidian5 = require ( "obsidian" ) ;
var import _PluginBase2 = require _PluginBase ( ) ;
var PluginSettingsTabBase2 = class extends import _obsidian5 . PluginSettingTab {
constructor ( plugin ) {
super ( plugin . app , plugin ) ;
this . plugin = plugin ;
}
} ;
}
} ) ;
// node_modules/obsidian-dev-utils/dist/lib/obsidian/Plugin/ValueComponent.cjs
var require _ValueComponent = _ _commonJS ( {
"node_modules/obsidian-dev-utils/dist/lib/obsidian/Plugin/ValueComponent.cjs" ( exports2 , module2 ) {
( function patchRequireEsmDefault ( ) {
const _ _require = require ;
require = Object . assign ( ( id ) => {
2024-11-29 13:32:34 +00:00
const module22 = _ _require ( id ) ? ? { } ;
return module22 . _ _esModule && module22 . default ? module22 . default : module22 ;
2024-11-22 19:27:30 +00:00
} , _ _require ) ;
} ) ( ) ;
var _ _defProp2 = Object . defineProperty ;
var _ _getOwnPropDesc2 = Object . getOwnPropertyDescriptor ;
var _ _getOwnPropNames2 = Object . getOwnPropertyNames ;
var _ _hasOwnProp2 = Object . prototype . hasOwnProperty ;
var _ _export2 = ( target , all ) => {
for ( var name in all )
_ _defProp2 ( target , name , { get : all [ name ] , enumerable : true } ) ;
} ;
var _ _copyProps2 = ( to , from , except , desc ) => {
if ( from && typeof from === "object" || typeof from === "function" ) {
for ( let key of _ _getOwnPropNames2 ( from ) )
if ( ! _ _hasOwnProp2 . call ( to , key ) && key !== except )
_ _defProp2 ( to , key , { get : ( ) => from [ key ] , enumerable : ! ( desc = _ _getOwnPropDesc2 ( from , key ) ) || desc . enumerable } ) ;
}
return to ;
} ;
var _ _toCommonJS2 = ( mod ) => _ _copyProps2 ( _ _defProp2 ( { } , "__esModule" , { value : true } ) , mod ) ;
var ValueComponent _exports = { } ;
_ _export2 ( ValueComponent _exports , {
extend : ( ) => extend2
} ) ;
module2 . exports = _ _toCommonJS2 ( ValueComponent _exports ) ;
var import _obsidian5 = require ( "obsidian" ) ;
var import _Object = require _Object ( ) ;
var ValueComponentEx = class {
constructor ( valueComponent ) {
this . valueComponent = valueComponent ;
}
/ * *
* Returns the ValueComponent with extended functionality .
* /
asExtended ( ) {
return ( 0 , import _Object . assignWithNonEnumerableProperties ) ( { } , this . valueComponent , this ) ;
}
/ * *
* Binds the ValueComponent to a property in the plugin settings .
*
* @ typeParam Plugin - The type of the plugin that extends ` PluginBase ` .
* @ typeParam Property - The key of the plugin setting that the component is bound to .
* @ typeParam PluginSettings - The type of the plugin settings object .
* @ param plugin - The plugin .
* @ param property - The property key in ` PluginSettings ` to bind to the UI component .
* @ param options - Configuration options .
* @ returns The ` ValueComponent ` instance that was bound to the property .
* /
bind ( plugin , property , options ) {
const DEFAULT _OPTIONS = {
autoSave : true ,
componentToPluginSettingsValueConverter : ( value ) => value ,
pluginSettingsToComponentValueConverter : ( value ) => value
} ;
const optionsExt = { ... DEFAULT _OPTIONS , ... options } ;
const pluginExt = plugin ;
const pluginSettingsFn = ( ) => optionsExt . pluginSettings ? ? pluginExt . settingsCopy ;
const validate = ( uiValue ) => {
if ( ! optionsExt . valueValidator ) {
return true ;
}
uiValue ? ? = this . valueComponent . getValue ( ) ;
const errorMessage = optionsExt . valueValidator ( uiValue ) ;
const validatorElement2 = getValidatorElement ( this . valueComponent ) ;
if ( validatorElement2 ) {
validatorElement2 . setCustomValidity ( errorMessage ? ? "" ) ;
validatorElement2 . reportValidity ( ) ;
}
return ! errorMessage ;
} ;
this . valueComponent . setValue ( optionsExt . pluginSettingsToComponentValueConverter ( pluginSettingsFn ( ) [ property ] ) ) . onChange ( async ( uiValue ) => {
if ( ! validate ( uiValue ) ) {
return ;
}
const pluginSettings = pluginSettingsFn ( ) ;
pluginSettings [ property ] = optionsExt . componentToPluginSettingsValueConverter ( uiValue ) ;
if ( optionsExt . autoSave ) {
await pluginExt . saveSettings ( pluginSettings ) ;
}
await optionsExt . onChanged ? . ( ) ;
} ) ;
validate ( ) ;
const validatorElement = getValidatorElement ( this . valueComponent ) ;
if ( validatorElement ) {
validatorElement . addEventListener ( "focus" , ( ) => validate ( ) ) ;
validatorElement . addEventListener ( "blur" , ( ) => validate ( ) ) ;
}
return this . asExtended ( ) ;
}
} ;
function extend2 ( valueComponent ) {
return new ValueComponentEx ( valueComponent ) . asExtended ( ) ;
}
function getValidatorElement ( valueComponent ) {
if ( valueComponent instanceof import _obsidian5 . DropdownComponent ) {
return valueComponent . selectEl ;
}
if ( valueComponent instanceof import _obsidian5 . SliderComponent ) {
return valueComponent . sliderEl ;
}
if ( valueComponent instanceof import _obsidian5 . TextAreaComponent ) {
return valueComponent . inputEl ;
}
if ( valueComponent instanceof import _obsidian5 . TextComponent ) {
return valueComponent . inputEl ;
}
return null ;
}
}
} ) ;
// src/main.ts
var main _exports = { } ;
_ _export ( main _exports , {
default : ( ) => main _default
} ) ;
module . exports = _ _toCommonJS ( main _exports ) ;
// src/ConsistentAttachmentsAndLinksPlugin.ts
var import _obsidian4 = require ( "obsidian" ) ;
var import _Function = _ _toESM ( require _Function ( ) , 1 ) ;
var import _FileSystem3 = _ _toESM ( require _FileSystem ( ) , 1 ) ;
var import _PluginBase = _ _toESM ( require _PluginBase ( ) , 1 ) ;
var import _Queue = _ _toESM ( require _Queue ( ) , 1 ) ;
var import _RenameDeleteHandler = _ _toESM ( require _RenameDeleteHandler ( ) , 1 ) ;
var import _Vault2 = _ _toESM ( require _Vault ( ) , 1 ) ;
var import _Path3 = _ _toESM ( require _Path ( ) , 1 ) ;
// src/ConsistentAttachmentsAndLinksPluginSettings.ts
var ConsistentAttachmentsAndLinksPluginSettings = class {
autoCollectAttachments = false ;
changeNoteBacklinksAlt = true ;
consistencyReportFile = "consistency-report.md" ;
deleteAttachmentsWithNote = true ;
deleteEmptyFolders = true ;
deleteExistFilesWhenMoveNote = true ;
ignoreFiles = [ "consistency\\-report\\.md" ] ;
ignoreFolders = [ ".git/" , ".obsidian/" ] ;
moveAttachmentsWithNote = true ;
showWarning = true ;
updateLinks = true ;
getIgnoreFilesRegex ( ) {
return this . ignoreFiles . map ( ( file ) => RegExp ( file ) ) ;
}
} ;
// src/ConsistentAttachmentsAndLinksPluginSettingsTab.ts
var import _obsidian = require ( "obsidian" ) ;
var import _PluginSettingsTabBase = _ _toESM ( require _PluginSettingsTabBase ( ) , 1 ) ;
var import _ValueComponent = _ _toESM ( require _ValueComponent ( ) , 1 ) ;
var ConsistentAttachmentsAndLinksPluginSettingsTab = class extends import _PluginSettingsTabBase . PluginSettingsTabBase {
display ( ) {
this . containerEl . empty ( ) ;
new import _obsidian . Setting ( this . containerEl ) . setName ( "Move Attachments with Note" ) . setDesc ( "Automatically move attachments when a note is relocated. This includes attachments located in the same folder or any of its subfolders." ) . addToggle ( ( toggle ) => ( 0 , import _ValueComponent . extend ) ( toggle ) . bind ( this . plugin , "moveAttachmentsWithNote" ) ) ;
new import _obsidian . Setting ( this . containerEl ) . setName ( "Delete Unused Attachments with Note" ) . setDesc ( "Automatically remove attachments that are no longer referenced in other notes when the note is deleted." ) . addToggle ( ( toggle ) => ( 0 , import _ValueComponent . extend ) ( toggle ) . bind ( this . plugin , "deleteAttachmentsWithNote" ) ) ;
new import _obsidian . Setting ( this . containerEl ) . setName ( "Update Links" ) . setDesc ( "Automatically update links to attachments and other notes when moving notes or attachments." ) . addToggle ( ( toggle ) => ( 0 , import _ValueComponent . extend ) ( toggle ) . bind ( this . plugin , "updateLinks" ) ) ;
new import _obsidian . Setting ( this . containerEl ) . setName ( "Delete Empty Folders" ) . setDesc ( "Automatically remove empty folders after moving notes with attachments." ) . addToggle ( ( toggle ) => ( 0 , import _ValueComponent . extend ) ( toggle ) . bind ( this . plugin , "deleteEmptyFolders" ) ) ;
new import _obsidian . Setting ( this . containerEl ) . setName ( "Delete Duplicate Attachments on Note Move" ) . setDesc ( "Automatically delete attachments when moving a note if a file with the same name exists in the destination folder. If disabled, the file will be renamed and moved." ) . addToggle ( ( toggle ) => ( 0 , import _ValueComponent . extend ) ( toggle ) . bind ( this . plugin , "deleteExistFilesWhenMoveNote" ) ) ;
new import _obsidian . Setting ( this . containerEl ) . setName ( "Update Backlink Text on Note Rename" ) . setDesc ( "When a note is renamed, its linked references are automatically updated. If this option is enabled, the text of backlinks to this note will also be modified." ) . addToggle ( ( toggle ) => ( 0 , import _ValueComponent . extend ) ( toggle ) . bind ( this . plugin , "changeNoteBacklinksAlt" ) ) ;
new import _obsidian . Setting ( this . containerEl ) . setName ( "Ignore Folders" ) . setDesc ( "Specify a list of folders to ignore. Enter each folder on a new line." ) . addTextArea (
( textArea ) => ( 0 , import _ValueComponent . extend ) ( textArea ) . bind ( this . plugin , "ignoreFolders" , {
componentToPluginSettingsValueConverter : ( value ) => value . trim ( ) . split ( "\n" ) . map ( ( value2 ) => this . getNormalizedPath ( value2 ) + "/" ) ,
pluginSettingsToComponentValueConverter : ( value ) => value . join ( "\n" )
} ) . setPlaceholder ( "Example: .git, .obsidian" )
) ;
new import _obsidian . Setting ( this . containerEl ) . setName ( "Ignore Files" ) . setDesc ( "Specify a list of files to ignore. Enter each file on a new line." ) . addTextArea (
( textArea ) => ( 0 , import _ValueComponent . extend ) ( textArea ) . bind ( this . plugin , "ignoreFiles" , {
componentToPluginSettingsValueConverter : ( value ) => value . trim ( ) . split ( "\n" ) ,
pluginSettingsToComponentValueConverter : ( value ) => value . join ( "\n" )
} ) . setPlaceholder ( "Example: consistent-report.md" )
) ;
new import _obsidian . Setting ( this . containerEl ) . setName ( "Consistency Report Filename" ) . setDesc ( "Specify the name of the file for the consistency report." ) . addText (
( text ) => ( 0 , import _ValueComponent . extend ) ( text ) . bind ( this . plugin , "consistencyReportFile" ) . setPlaceholder ( "Example: consistency-report.md" )
) ;
new import _obsidian . Setting ( this . containerEl ) . setName ( "Auto Collect Attachments" ) . setDesc ( "Automatically collect attachments when the note is edited." ) . addToggle ( ( toggle ) => ( 0 , import _ValueComponent . extend ) ( toggle ) . bind ( this . plugin , "autoCollectAttachments" ) ) ;
}
getNormalizedPath ( path ) {
return path . length == 0 ? path : ( 0 , import _obsidian . normalizePath ) ( path ) ;
}
} ;
// src/files-handler.ts
var import _obsidian3 = require ( "obsidian" ) ;
var import _AttachmentPath = _ _toESM ( require _AttachmentPath ( ) , 1 ) ;
var import _FileSystem2 = _ _toESM ( require _FileSystem ( ) , 1 ) ;
var import _Link2 = _ _toESM ( require _Link ( ) , 1 ) ;
var import _MetadataCache2 = _ _toESM ( require _MetadataCache ( ) , 1 ) ;
var import _Vault = _ _toESM ( require _Vault ( ) , 1 ) ;
var import _Path2 = _ _toESM ( require _Path ( ) , 1 ) ;
// src/links-handler.ts
var import _obsidian2 = require ( "obsidian" ) ;
var import _FileChange = _ _toESM ( require _FileChange ( ) , 1 ) ;
var import _FileSystem = _ _toESM ( require _FileSystem ( ) , 1 ) ;
var import _Link = _ _toESM ( require _Link ( ) , 1 ) ;
var import _MetadataCache = _ _toESM ( require _MetadataCache ( ) , 1 ) ;
var import _Reference = _ _toESM ( require _Reference ( ) , 1 ) ;
var import _Path = _ _toESM ( require _Path ( ) , 1 ) ;
var ConsistencyCheckResult = class extends Map {
constructor ( title ) {
super ( ) ;
this . title = title ;
}
add ( notePath , link ) {
if ( ! this . has ( notePath ) ) {
this . set ( notePath , [ ] ) ;
}
const arr = this . get ( notePath ) ;
if ( arr ) {
arr . push ( link ) ;
}
}
toString ( app , reportPath ) {
if ( this . size > 0 ) {
let str = ` # ${ this . title } ( ${ this . size . toString ( ) } files)
` ;
for ( const notePath of this . keys ( ) ) {
const note = ( 0 , import _FileSystem . getFileOrNull ) ( app , notePath ) ;
if ( ! note ) {
continue ;
}
const linkStr = ( 0 , import _Link . generateMarkdownLink ) ( {
app ,
pathOrFile : note ,
sourcePathOrFile : reportPath
} ) ;
str += ` ${ linkStr } :
` ;
for ( const link of this . get ( notePath ) ? ? [ ] ) {
str += ` - (line ${ ( link . position . start . line + 1 ) . toString ( ) } ): \` ${ link . link } \`
` ;
}
str += "\n\n" ;
}
return str ;
} else {
return ` # ${ this . title }
No problems found
` ;
}
}
} ;
var LinksHandler = class {
constructor ( app , consoleLogPrefix = "" , ignoreFolders = [ ] , ignoreFilesRegex = [ ] ) {
this . app = app ;
this . consoleLogPrefix = consoleLogPrefix ;
this . ignoreFolders = ignoreFolders ;
this . ignoreFilesRegex = ignoreFilesRegex ;
}
async checkConsistency ( note , badLinks , badEmbeds , wikiLinks , wikiEmbeds ) {
if ( this . isPathIgnored ( note . path ) ) {
return ;
}
const cache = await ( 0 , import _MetadataCache . getCacheSafe ) ( this . app , note . path ) ;
if ( ! cache ) {
return ;
}
const links = cache . links ? ? [ ] ;
const embeds = cache . embeds ? ? [ ] ;
for ( const link of links ) {
if ( ! await this . isValidLink ( link , note . path ) ) {
badLinks . add ( note . path , link ) ;
}
if ( ( 0 , import _Link . testWikilink ) ( link . original ) ) {
wikiLinks . add ( note . path , link ) ;
}
}
for ( const embed of embeds ) {
if ( ! await this . isValidLink ( embed , note . path ) ) {
badEmbeds . add ( note . path , embed ) ;
}
if ( ( 0 , import _Link . testWikilink ) ( embed . original ) ) {
wikiEmbeds . add ( note . path , embed ) ;
}
}
}
async convertAllNoteEmbedsPathsToRelative ( notePath ) {
return this . convertAllNoteRefPathsToRelative ( notePath , true ) ;
}
async convertAllNoteLinksPathsToRelative ( notePath ) {
return this . convertAllNoteRefPathsToRelative ( notePath , false ) ;
}
async getCachedNotesThatHaveLinkToFile ( filePath ) {
const file = ( 0 , import _FileSystem . getFileOrNull ) ( this . app , filePath ) ;
if ( ! file ) {
return [ ] ;
}
const backlinks = await ( 0 , import _MetadataCache . getBacklinksForFileSafe ) ( this . app , file ) ;
return backlinks . keys ( ) ;
}
getFullPathForLink ( link , owningNotePath ) {
( { linkPath : link } = ( 0 , import _Link . splitSubpath ) ( link ) ) ;
const parentFolder = ( 0 , import _Path . dirname ) ( owningNotePath ) ;
const fullPath = ( 0 , import _Path . join ) ( parentFolder , link ) ;
return fullPath ;
}
async replaceAllNoteWikilinksWithMarkdownLinks ( notePath , embedOnlyLinks ) {
if ( this . isPathIgnored ( notePath ) ) {
return 0 ;
}
const noteFile = ( 0 , import _FileSystem . getFileOrNull ) ( this . app , notePath ) ;
if ( ! noteFile ) {
console . warn ( this . consoleLogPrefix + "can't update wikilinks in note, file not found: " + notePath ) ;
return 0 ;
}
const cache = await ( 0 , import _MetadataCache . getCacheSafe ) ( this . app , noteFile ) ;
if ( ! cache ) {
return 0 ;
}
const links = ( embedOnlyLinks ? cache . embeds : cache . links ) ? ? [ ] ;
const result = links . filter ( ( link ) => ( 0 , import _Link . testWikilink ) ( link . original ) ) . length ;
await ( 0 , import _Link . updateLinksInFile ) ( {
app : this . app ,
embedOnlyLinks ,
forceMarkdownLinks : true ,
oldPathOrFile : noteFile . path ,
pathOrFile : noteFile ,
renameMap : /* @__PURE__ */ new Map ( )
} ) ;
return result ;
}
async updateChangedPathsInNote ( notePath , changedLinks ) {
if ( this . isPathIgnored ( notePath ) ) {
return ;
}
const note = ( 0 , import _FileSystem . getFileOrNull ) ( this . app , notePath ) ;
if ( ! note ) {
console . warn ( this . consoleLogPrefix + "can't update links in note, file not found: " + notePath ) ;
return ;
}
const pathChangeMap = /* @__PURE__ */ new Map ( ) ;
for ( const change of changedLinks ) {
pathChangeMap . set ( change . oldPath , change . newPath ) ;
}
await this . updateLinks ( note , note . path , pathChangeMap ) ;
}
async convertAllNoteRefPathsToRelative ( notePath , isEmbed ) {
if ( this . isPathIgnored ( notePath ) ) {
return [ ] ;
}
const note = ( 0 , import _FileSystem . getFileOrNull ) ( this . app , notePath ) ;
if ( ! note ) {
return [ ] ;
}
const changedRefs = [ ] ;
await ( 0 , import _FileChange . applyFileChanges ) ( this . app , note , async ( ) => {
const cache = await ( 0 , import _MetadataCache . getCacheSafe ) ( this . app , note ) ;
if ( ! cache ) {
return [ ] ;
}
const refs = ( isEmbed ? cache . embeds : cache . links ) ? ? [ ] ;
const changes = [ ] ;
for ( const ref of refs ) {
const change = {
endIndex : ref . position . end . offset ,
newContent : this . convertLink ( {
forceRelativePath : true ,
link : ref ,
note ,
oldNotePath : notePath
} ) ,
oldContent : ref . original ,
startIndex : ref . position . start . offset
} ;
changes . push ( change ) ;
changedRefs . push ( { newLink : change . newContent , old : ref } ) ;
}
return changes ;
} ) ;
return changedRefs ;
}
convertLink ( {
forceRelativePath ,
link ,
note ,
oldNotePath ,
pathChangeMap
} ) {
const { linkPath , subpath } = ( 0 , import _Link . splitSubpath ) ( link . link ) ;
const oldLinkPath = ( 0 , import _Link . extractLinkFile ) ( this . app , link , oldNotePath ) ? . path ? ? ( 0 , import _Path . join ) ( ( 0 , import _Path . dirname ) ( oldNotePath ) , linkPath ) ;
const newLinkPath = pathChangeMap ? pathChangeMap . get ( oldLinkPath ) : ( 0 , import _Link . extractLinkFile ) ( this . app , link , note . path ) ? . path ? ? ( 0 , import _Path . join ) ( ( 0 , import _Path . dirname ) ( note . path ) , linkPath ) ;
if ( ! newLinkPath ) {
return link . original ;
}
const newLinkedNote = ( 0 , import _FileSystem . getFileOrNull ) ( this . app , oldLinkPath ) ? ? ( 0 , import _FileSystem . getFileOrNull ) ( this . app , newLinkPath ) ;
if ( ! newLinkedNote ) {
return link . original ;
}
return ( 0 , import _Link . generateMarkdownLink ) ( {
alias : link . displayText ,
app : this . app ,
forceRelativePath ,
originalLink : link . original ,
pathOrFile : newLinkedNote ,
sourcePathOrFile : note . path ,
subpath
} ) ;
}
isPathIgnored ( path ) {
if ( path . startsWith ( "./" ) ) {
path = path . slice ( 2 ) ;
}
for ( const folder of this . ignoreFolders ) {
if ( path . startsWith ( folder ) ) {
return true ;
}
}
for ( const fileRegex of this . ignoreFilesRegex ) {
if ( fileRegex . test ( path ) ) {
return true ;
}
}
return false ;
}
async isValidLink ( link , notePath ) {
const { linkPath , subpath } = ( 0 , import _Link . splitSubpath ) ( link . link ) ;
let fullLinkPath ;
if ( ! linkPath ) {
fullLinkPath = notePath ;
} else if ( linkPath . startsWith ( "/" ) ) {
fullLinkPath = ( 0 , import _obsidian2 . normalizePath ) ( linkPath ) ;
} else {
fullLinkPath = ( 0 , import _Path . join ) ( ( 0 , import _Path . dirname ) ( notePath ) , linkPath ) ;
}
const file = ( 0 , import _FileSystem . getFileOrNull ) ( this . app , fullLinkPath ) ;
if ( ! file ) {
return false ;
}
if ( ! subpath ) {
return true ;
}
const ext = file . extension . toLocaleLowerCase ( ) ;
if ( ext === "pdf" ) {
return subpath . startsWith ( "#page=" ) ;
}
if ( ext !== import _FileSystem . MARKDOWN _FILE _EXTENSION ) {
return false ;
}
const cache = await ( 0 , import _MetadataCache . getCacheSafe ) ( this . app , file ) ;
if ( ! cache ) {
return false ;
}
if ( subpath . startsWith ( "#^" ) ) {
return Object . keys ( cache . blocks ? ? { } ) . includes ( subpath . slice ( 2 ) ) ;
} else {
return ( cache . headings ? ? [ ] ) . map ( ( h ) => h . heading . replaceAll ( "#" , " " ) ) . includes ( subpath . slice ( 1 ) ) ;
}
}
async updateLinks ( note , oldNotePath , pathChangeMap ) {
await ( 0 , import _FileChange . applyFileChanges ) ( this . app , note , async ( ) => {
const cache = await ( 0 , import _MetadataCache . getCacheSafe ) ( this . app , note ) ;
if ( ! cache ) {
return [ ] ;
}
const links = ( 0 , import _MetadataCache . getAllLinks ) ( cache ) ;
return links . map ( ( link ) => ( 0 , import _Reference . referenceToFileChange ) ( link , this . convertLink ( {
link ,
note ,
oldNotePath ,
pathChangeMap
} ) ) ) ;
} ) ;
}
} ;
// src/files-handler.ts
var FilesHandler = class {
constructor ( app , lh , consoleLogPrefix = "" , ignoreFolders = [ ] , ignoreFilesRegex = [ ] , shouldDeleteEmptyFolders = false ) {
this . app = app ;
this . lh = lh ;
this . consoleLogPrefix = consoleLogPrefix ;
this . ignoreFolders = ignoreFolders ;
this . ignoreFilesRegex = ignoreFilesRegex ;
this . shouldDeleteEmptyFolders = shouldDeleteEmptyFolders ;
}
async collectAttachmentsForCachedNote ( notePath , deleteExistFiles , deleteEmptyFolders ) {
if ( this . isPathIgnored ( notePath ) ) {
return { movedAttachments : [ ] , renamedFiles : [ ] } ;
}
const result = {
movedAttachments : [ ] ,
renamedFiles : [ ]
} ;
const cache = await ( 0 , import _MetadataCache2 . getCacheSafe ) ( this . app , notePath ) ;
if ( ! cache ) {
return result ;
}
for ( const link of ( 0 , import _MetadataCache2 . getAllLinks ) ( cache ) ) {
const { linkPath } = ( 0 , import _Link2 . splitSubpath ) ( link . link ) ;
if ( ! linkPath ) {
continue ;
}
const fullPathLink = this . lh . getFullPathForLink ( linkPath , notePath ) ;
if ( result . movedAttachments . findIndex ( ( x ) => x . oldPath == fullPathLink ) != - 1 ) {
continue ;
}
const file = ( 0 , import _Link2 . extractLinkFile ) ( this . app , link , notePath ) ;
if ( ! file ) {
const type = ( 0 , import _Link2 . testEmbed ) ( link . original ) ? "embed" : "link" ;
console . warn ( ` ${ this . consoleLogPrefix } ${ notePath } has bad ${ type } (file does not exist): ${ linkPath } ` ) ;
continue ;
}
if ( ! this . isAttachment ( file ) ) {
continue ;
}
const newPath = await ( 0 , import _AttachmentPath . getAttachmentFilePath ) ( this . app , file . path , notePath ) ;
if ( ( 0 , import _Path2 . dirname ) ( newPath ) === ( 0 , import _Path2 . dirname ) ( file . path ) ) {
continue ;
}
const res = await this . moveAttachment ( file , newPath , [ notePath ] , deleteExistFiles , deleteEmptyFolders ) ;
result . movedAttachments = result . movedAttachments . concat ( res . movedAttachments ) ;
result . renamedFiles = result . renamedFiles . concat ( res . renamedFiles ) ;
}
return result ;
}
async deleteEmptyFolders ( dirName ) {
if ( this . isPathIgnored ( dirName ) ) {
return ;
}
if ( dirName . startsWith ( "./" ) ) {
dirName = dirName . slice ( 2 ) ;
}
let list = await ( 0 , import _Vault . listSafe ) ( this . app , dirName ) ;
for ( const folder of list . folders ) {
await this . deleteEmptyFolders ( folder ) ;
}
list = await ( 0 , import _Vault . listSafe ) ( this . app , dirName ) ;
if ( list . files . length == 0 && list . folders . length == 0 ) {
console . log ( this . consoleLogPrefix + "delete empty folder: \n " + dirName ) ;
if ( await this . app . vault . exists ( dirName ) ) {
try {
await this . app . vault . adapter . rmdir ( dirName , false ) ;
} catch ( e ) {
if ( await this . app . vault . adapter . exists ( dirName ) ) {
throw e ;
}
}
}
}
}
async createFolderForAttachmentFromPath ( filePath ) {
await ( 0 , import _Vault . createFolderSafe ) ( this . app , ( 0 , import _Path2 . dirname ) ( filePath ) ) ;
}
async deleteFile ( file , deleteEmptyFolders ) {
await this . app . fileManager . trashFile ( file ) ;
if ( deleteEmptyFolders ) {
let dir = file . parent ;
while ( dir && dir . children . length === 0 ) {
await this . app . fileManager . trashFile ( dir ) ;
dir = dir . parent ;
}
}
}
isAttachment ( file ) {
return ! ( 0 , import _FileSystem2 . isNote ) ( file ) ;
}
isPathIgnored ( path ) {
if ( path . startsWith ( "./" ) ) {
path = path . slice ( 2 ) ;
}
for ( const folder of this . ignoreFolders ) {
if ( path . startsWith ( folder ) ) {
return true ;
}
}
for ( const fileRegex of this . ignoreFilesRegex ) {
const testResult = fileRegex . test ( path ) ;
if ( testResult ) {
return true ;
}
}
return false ;
}
async moveAttachment ( file , newLinkPath , parentNotePaths , deleteExistFiles , deleteEmptyFolders ) {
const path = file . path ;
const result = {
movedAttachments : [ ] ,
renamedFiles : [ ]
} ;
if ( this . isPathIgnored ( path ) ) {
return result ;
}
if ( ! this . isAttachment ( file ) ) {
return result ;
}
if ( path == newLinkPath ) {
console . warn ( this . consoleLogPrefix + "Can't move file. Source and destination path the same." ) ;
return result ;
}
await this . createFolderForAttachmentFromPath ( newLinkPath ) ;
const linkedNotes = await this . lh . getCachedNotesThatHaveLinkToFile ( path ) ;
for ( const notePath of parentNotePaths ) {
linkedNotes . remove ( notePath ) ;
}
if ( path !== file . path ) {
console . warn ( this . consoleLogPrefix + "File was moved already" ) ;
return await this . moveAttachment ( file , newLinkPath , parentNotePaths , deleteExistFiles , deleteEmptyFolders ) ;
}
const oldFolder = file . parent ;
if ( linkedNotes . length == 0 ) {
const existFile = ( 0 , import _FileSystem2 . getFileOrNull ) ( this . app , newLinkPath ) ;
if ( ! existFile ) {
console . log ( this . consoleLogPrefix + "move file [from, to]: \n " + path + "\n " + newLinkPath ) ;
result . movedAttachments . push ( { newPath : newLinkPath , oldPath : path } ) ;
await ( 0 , import _Vault . renameSafe ) ( this . app , file , newLinkPath ) ;
} else {
if ( deleteExistFiles ) {
console . log ( this . consoleLogPrefix + "delete file: \n " + path ) ;
result . movedAttachments . push ( { newPath : newLinkPath , oldPath : path } ) ;
await this . deleteFile ( file , deleteEmptyFolders ) ;
} else {
const newFileCopyName = ( 0 , import _Vault . getAvailablePath ) ( this . app , newLinkPath ) ;
console . log ( this . consoleLogPrefix + "copy file with new name [from, to]: \n " + path + "\n " + newFileCopyName ) ;
result . movedAttachments . push ( { newPath : newFileCopyName , oldPath : path } ) ;
await ( 0 , import _Vault . renameSafe ) ( this . app , file , newFileCopyName ) ;
result . renamedFiles . push ( { newPath : newFileCopyName , oldPath : newLinkPath } ) ;
}
}
} else {
const existFile = ( 0 , import _FileSystem2 . getFileOrNull ) ( this . app , newLinkPath ) ;
if ( ! existFile ) {
console . log ( this . consoleLogPrefix + "copy file [from, to]: \n " + path + "\n " + newLinkPath ) ;
result . movedAttachments . push ( { newPath : newLinkPath , oldPath : path } ) ;
await ( 0 , import _Vault . renameSafe ) ( this . app , file , newLinkPath ) ;
await ( 0 , import _Vault . copySafe ) ( this . app , file , path ) ;
} else if ( ! deleteExistFiles ) {
const newFileCopyName = ( 0 , import _Vault . getAvailablePath ) ( this . app , newLinkPath ) ;
console . log ( this . consoleLogPrefix + "copy file with new name [from, to]: \n " + path + "\n " + newFileCopyName ) ;
result . movedAttachments . push ( { newPath : newFileCopyName , oldPath : file . path } ) ;
await ( 0 , import _Vault . renameSafe ) ( this . app , file , newFileCopyName ) ;
await ( 0 , import _Vault . copySafe ) ( this . app , file , path ) ;
result . renamedFiles . push ( { newPath : newFileCopyName , oldPath : newLinkPath } ) ;
}
}
if ( this . shouldDeleteEmptyFolders ) {
await ( 0 , import _Vault . deleteEmptyFolderHierarchy ) ( this . app , oldFolder ) ;
}
return result ;
}
} ;
// src/ConsistentAttachmentsAndLinksPlugin.ts
var _ _process = globalThis [ "process" ] ? ? {
"cwd" : ( ) => "/" ,
"env" : { } ,
"platform" : "android"
} ;
var ConsistentAttachmentsAndLinksPlugin = class extends import _PluginBase . PluginBase {
deletedNoteCache = /* @__PURE__ */ new Map ( ) ;
fh ;
lh ;
async saveSettings ( newSettings ) {
await super . saveSettings ( newSettings ) ;
this . lh = new LinksHandler (
this . app ,
"Consistent Attachments and Links: " ,
this . settings . ignoreFolders ,
this . settings . getIgnoreFilesRegex ( )
) ;
this . fh = new FilesHandler (
this . app ,
this . lh ,
"Consistent Attachments and Links: " ,
this . settings . ignoreFolders ,
this . settings . getIgnoreFilesRegex ( )
) ;
}
createDefaultPluginSettings ( ) {
return new ConsistentAttachmentsAndLinksPluginSettings ( ) ;
}
createPluginSettingsTab ( ) {
return new ConsistentAttachmentsAndLinksPluginSettingsTab ( this ) ;
}
onloadComplete ( ) {
if ( this . settings . showWarning ) {
const notice = new import _obsidian4 . Notice ( createFragment ( ( f ) => {
f . appendText ( "Starting from " ) ;
appendCodeBlock ( f , "v3.0.0" ) ;
f . appendText ( ", the plugin " ) ;
appendCodeBlock ( f , "Consistent Attachments and Links" ) ;
f . appendText ( " has setting " ) ;
appendCodeBlock ( f , "Attachment Subfolder" ) ;
f . appendText ( " removed. This is a BREAKING CHANGE." ) ;
f . appendChild ( createEl ( "br" ) ) ;
f . appendChild ( createEl ( "a" , { href : "https://github.com/dy-sh/obsidian-consistent-attachments-and-links?tab=readme-ov-file#attachment-subfolder-setting" , text : "Read more" } ) ) ;
} ) , 0 ) ;
notice . noticeEl . onClickEvent ( ( ev ) => {
( 0 , import _Queue . addToQueue ) ( this . app , async ( ) => {
if ( ev . target instanceof HTMLAnchorElement ) {
window . open ( ev . target . href , "_blank" ) ;
}
this . settings . showWarning = false ;
await this . saveSettings ( this . settings ) ;
} ) ;
} ) ;
}
this . registerEvent (
this . app . metadataCache . on ( "deleted" , ( file , prevCache ) => {
if ( prevCache ) {
this . handleDeletedMetadata ( file , prevCache ) ;
}
} )
) ;
( 0 , import _RenameDeleteHandler . registerRenameDeleteHandlers ) ( this , ( ) => {
const settings = {
shouldDeleteConflictingAttachments : this . settings . deleteExistFilesWhenMoveNote ,
shouldDeleteEmptyFolders : this . settings . deleteEmptyFolders ,
shouldDeleteOrphanAttachments : this . settings . deleteAttachmentsWithNote ,
shouldRenameAttachmentFolder : this . settings . moveAttachmentsWithNote ,
shouldUpdateFilenameAliases : this . settings . changeNoteBacklinksAlt ,
shouldUpdateLinks : this . settings . updateLinks
} ;
return settings ;
} ) ;
this . addCommand ( {
callback : ( ) => this . collectAllAttachments ( ) ,
id : "collect-all-attachments" ,
name : "Collect All Attachments"
} ) ;
this . addCommand ( {
checkCallback : this . collectAttachmentsCurrentNote . bind ( this ) ,
id : "collect-attachments-current-note" ,
name : "Collect Attachments in Current Note"
} ) ;
this . addCommand ( {
callback : ( ) => this . deleteEmptyFolders ( ) ,
id : "delete-empty-folders" ,
name : "Delete Empty Folders"
} ) ;
this . addCommand ( {
callback : ( ) => this . convertAllLinkPathsToRelative ( ) ,
id : "convert-all-link-paths-to-relative" ,
name : "Convert All Link Paths to Relative"
} ) ;
this . addCommand ( {
checkCallback : this . convertAllLinkPathsToRelativeCurrentNote . bind ( this ) ,
id : "convert-all-link-paths-to-relative-current-note" ,
name : "Convert All Link Paths to Relative in Current Note"
} ) ;
this . addCommand ( {
callback : ( ) => this . convertAllEmbedsPathsToRelative ( ) ,
id : "convert-all-embed-paths-to-relative" ,
name : "Convert All Embed Paths to Relative"
} ) ;
this . addCommand ( {
checkCallback : this . convertAllEmbedsPathsToRelativeCurrentNote . bind ( this ) ,
id : "convert-all-embed-paths-to-relative-current-note" ,
name : "Convert All Embed Paths to Relative in Current Note"
} ) ;
this . addCommand ( {
callback : ( ) => this . replaceAllWikilinksWithMarkdownLinks ( ) ,
id : "replace-all-wikilinks-with-markdown-links" ,
name : "Replace All Wiki Links with Markdown Links"
} ) ;
this . addCommand ( {
checkCallback : this . replaceAllWikilinksWithMarkdownLinksCurrentNote . bind ( this ) ,
id : "replace-all-wikilinks-with-markdown-links-current-note" ,
name : "Replace All Wiki Links with Markdown Links in Current Note"
} ) ;
this . addCommand ( {
callback : ( ) => this . replaceAllWikiEmbedsWithMarkdownEmbeds ( ) ,
id : "replace-all-wiki-embeds-with-markdown-embeds" ,
name : "Replace All Wiki Embeds with Markdown Embeds"
} ) ;
this . addCommand ( {
checkCallback : this . replaceAllWikiEmbedsWithMarkdownEmbedsCurrentNote . bind ( this ) ,
id : "replace-all-wiki-embeds-with-markdown-embeds-current-note" ,
name : "Replace All Wiki Embeds with Markdown Embeds in Current Note"
} ) ;
this . addCommand ( {
callback : ( ) => this . reorganizeVault ( ) ,
id : "reorganize-vault" ,
name : "Reorganize Vault"
} ) ;
this . addCommand ( {
callback : ( ) => this . checkConsistency ( ) ,
id : "check-consistency" ,
name : "Check Vault consistency"
} ) ;
this . registerEvent ( this . app . metadataCache . on ( "changed" , ( file ) => {
( 0 , import _Queue . addToQueue ) ( this . app , ( ) => this . handleMetadataCacheChanged ( file ) ) ;
} ) ) ;
this . lh = new LinksHandler (
this . app ,
"Consistent Attachments and Links: " ,
this . settings . ignoreFolders ,
this . settings . getIgnoreFilesRegex ( )
) ;
this . fh = new FilesHandler (
this . app ,
this . lh ,
"Consistent Attachments and Links: " ,
this . settings . ignoreFolders ,
this . settings . getIgnoreFilesRegex ( ) ,
this . settings . deleteEmptyFolders
) ;
}
async checkConsistency ( ) {
await this . saveAllOpenNotes ( ) ;
const badLinks = new ConsistencyCheckResult ( "Bad links" ) ;
const badEmbeds = new ConsistencyCheckResult ( "Bad embeds" ) ;
const wikiLinks = new ConsistencyCheckResult ( "Wiki links" ) ;
const wikiEmbeds = new ConsistencyCheckResult ( "Wiki embeds" ) ;
const notes = ( 0 , import _Vault2 . getMarkdownFilesSorted ) ( this . app ) ;
let i = 0 ;
const notice = new import _obsidian4 . Notice ( "" , 0 ) ;
for ( const note2 of notes ) {
if ( this . abortSignal . aborted ) {
notice . hide ( ) ;
return ;
}
i ++ ;
const message = ` Checking note # ${ i . toString ( ) } / ${ notes . length . toString ( ) } - ${ note2 . path } ` ;
notice . setMessage ( message ) ;
console . debug ( message ) ;
await this . lh . checkConsistency ( note2 , badLinks , badEmbeds , wikiLinks , wikiEmbeds ) ;
}
notice . hide ( ) ;
const notePath = this . settings . consistencyReportFile ;
const text = badLinks . toString ( this . app , notePath ) + badEmbeds . toString ( this . app , notePath ) + wikiLinks . toString ( this . app , notePath ) + wikiEmbeds . toString ( this . app , notePath ) ;
await ( 0 , import _Vault2 . createFolderSafe ) ( this . app , ( 0 , import _Path3 . dirname ) ( notePath ) ) ;
const note = await ( 0 , import _FileSystem3 . getOrCreateFile ) ( this . app , notePath ) ;
await this . app . vault . modify ( note , text ) ;
let fileOpened = false ;
this . app . workspace . iterateAllLeaves ( ( leaf ) => {
if ( leaf . getDisplayText ( ) != "" && notePath . startsWith ( leaf . getDisplayText ( ) ) ) {
fileOpened = true ;
}
} ) ;
if ( ! fileOpened ) {
await this . app . workspace . openLinkText ( notePath , "/" , false ) ;
}
}
async collectAllAttachments ( ) {
let movedAttachmentsCount = 0 ;
let processedNotesCount = 0 ;
await this . saveAllOpenNotes ( ) ;
const notes = ( 0 , import _Vault2 . getMarkdownFilesSorted ) ( this . app ) ;
let i = 0 ;
const notice = new import _obsidian4 . Notice ( "" , 0 ) ;
for ( const note of notes ) {
if ( this . abortSignal . aborted ) {
notice . hide ( ) ;
return ;
}
i ++ ;
const message = ` Collecting attachments # ${ i . toString ( ) } / ${ notes . length . toString ( ) } - ${ note . path } ` ;
notice . setMessage ( message ) ;
console . debug ( message ) ;
if ( this . isPathIgnored ( note . path ) ) {
continue ;
}
const result = await this . fh . collectAttachmentsForCachedNote (
note . path ,
this . settings . deleteExistFilesWhenMoveNote ,
this . settings . deleteEmptyFolders
) ;
if ( result . movedAttachments . length > 0 ) {
await this . lh . updateChangedPathsInNote ( note . path , result . movedAttachments ) ;
movedAttachmentsCount += result . movedAttachments . length ;
processedNotesCount ++ ;
}
}
notice . hide ( ) ;
if ( movedAttachmentsCount == 0 ) {
new import _obsidian4 . Notice ( "No files found that need to be moved" ) ;
} else {
new import _obsidian4 . Notice ( ` Moved ${ movedAttachmentsCount . toString ( ) } attachment ${ movedAttachmentsCount > 1 ? "s" : "" } from ${ processedNotesCount . toString ( ) } note ${ processedNotesCount > 1 ? "s" : "" } ` ) ;
}
}
async collectAttachments ( note , isVerbose = true ) {
if ( this . isPathIgnored ( note . path ) ) {
new import _obsidian4 . Notice ( "Note path is ignored" ) ;
return ;
}
await this . saveAllOpenNotes ( ) ;
const result = await this . fh . collectAttachmentsForCachedNote (
note . path ,
this . settings . deleteExistFilesWhenMoveNote ,
this . settings . deleteEmptyFolders
) ;
if ( result . movedAttachments . length > 0 ) {
await this . lh . updateChangedPathsInNote ( note . path , result . movedAttachments ) ;
}
if ( result . movedAttachments . length == 0 ) {
if ( isVerbose ) {
new import _obsidian4 . Notice ( "No files found that need to be moved" ) ;
}
} else {
new import _obsidian4 . Notice ( ` Moved ${ result . movedAttachments . length . toString ( ) } attachment ${ result . movedAttachments . length > 1 ? "s" : "" } ` ) ;
}
}
collectAttachmentsCurrentNote ( checking ) {
const note = this . app . workspace . getActiveFile ( ) ;
if ( ! note || ! ( 0 , import _FileSystem3 . isMarkdownFile ) ( note ) ) {
return false ;
}
if ( ! checking ) {
( 0 , import _Queue . addToQueue ) ( this . app , ( ) => this . collectAttachments ( note ) ) ;
}
return true ;
}
async convertAllEmbedsPathsToRelative ( ) {
await this . saveAllOpenNotes ( ) ;
let changedEmbedCount = 0 ;
let processedNotesCount = 0 ;
const notes = ( 0 , import _Vault2 . getMarkdownFilesSorted ) ( this . app ) ;
let i = 0 ;
const notice = new import _obsidian4 . Notice ( "" , 0 ) ;
for ( const note of notes ) {
if ( this . abortSignal . aborted ) {
notice . hide ( ) ;
return ;
}
i ++ ;
const message = ` Converting embed paths to relative # ${ i . toString ( ) } / ${ notes . length . toString ( ) } - ${ note . path } ` ;
notice . setMessage ( message ) ;
console . debug ( message ) ;
if ( this . isPathIgnored ( note . path ) ) {
continue ;
}
const result = await this . lh . convertAllNoteEmbedsPathsToRelative ( note . path ) ;
if ( result . length > 0 ) {
changedEmbedCount += result . length ;
processedNotesCount ++ ;
}
}
notice . hide ( ) ;
if ( changedEmbedCount == 0 ) {
new import _obsidian4 . Notice ( "No embeds found that need to be converted" ) ;
} else {
new import _obsidian4 . Notice ( ` Converted ${ changedEmbedCount . toString ( ) } embed ${ changedEmbedCount > 1 ? "s" : "" } from ${ processedNotesCount . toString ( ) } note ${ processedNotesCount > 1 ? "s" : "" } ` ) ;
}
}
convertAllEmbedsPathsToRelativeCurrentNote ( checking ) {
const note = this . app . workspace . getActiveFile ( ) ;
if ( ! note || ! ( 0 , import _FileSystem3 . isMarkdownFile ) ( note ) ) {
return false ;
}
if ( ! checking ) {
( 0 , import _Queue . addToQueue ) ( this . app , ( 0 , import _Function . omitAsyncReturnType ) ( ( ) => this . lh . convertAllNoteEmbedsPathsToRelative ( note . path ) ) ) ;
}
return true ;
}
async convertAllLinkPathsToRelative ( ) {
await this . saveAllOpenNotes ( ) ;
let changedLinksCount = 0 ;
let processedNotesCount = 0 ;
const notes = ( 0 , import _Vault2 . getMarkdownFilesSorted ) ( this . app ) ;
let i = 0 ;
const notice = new import _obsidian4 . Notice ( "" , 0 ) ;
for ( const note of notes ) {
if ( this . abortSignal . aborted ) {
notice . hide ( ) ;
return ;
}
i ++ ;
const message = ` Converting link paths to relative # ${ i . toString ( ) } / ${ notes . length . toString ( ) } - ${ note . path } ` ;
notice . setMessage ( message ) ;
console . debug ( message ) ;
if ( this . isPathIgnored ( note . path ) ) {
continue ;
}
const result = await this . lh . convertAllNoteLinksPathsToRelative ( note . path ) ;
if ( result . length > 0 ) {
changedLinksCount += result . length ;
processedNotesCount ++ ;
}
}
notice . hide ( ) ;
if ( changedLinksCount == 0 ) {
new import _obsidian4 . Notice ( "No links found that need to be converted" ) ;
} else {
new import _obsidian4 . Notice ( ` Converted ${ changedLinksCount . toString ( ) } link ${ changedLinksCount > 1 ? "s" : "" } from ${ processedNotesCount . toString ( ) } note ${ processedNotesCount > 1 ? "s" : "" } ` ) ;
}
}
convertAllLinkPathsToRelativeCurrentNote ( checking ) {
const note = this . app . workspace . getActiveFile ( ) ;
if ( ! note || ! ( 0 , import _FileSystem3 . isMarkdownFile ) ( note ) ) {
return false ;
}
if ( ! checking ) {
( 0 , import _Queue . addToQueue ) ( this . app , ( 0 , import _Function . omitAsyncReturnType ) ( ( ) => this . lh . convertAllNoteLinksPathsToRelative ( note . path ) ) ) ;
}
return true ;
}
async deleteEmptyFolders ( ) {
await this . fh . deleteEmptyFolders ( "/" ) ;
}
handleDeletedMetadata ( file , prevCache ) {
if ( ! this . settings . deleteAttachmentsWithNote || this . isPathIgnored ( file . path ) || ! ( 0 , import _FileSystem3 . isMarkdownFile ) ( file ) ) {
return ;
}
this . deletedNoteCache . set ( file . path , prevCache ) ;
}
async handleMetadataCacheChanged ( file ) {
if ( ! this . settings . autoCollectAttachments ) {
return ;
}
const suggestionContainer = document . querySelector ( ".suggestion-container" ) ;
if ( suggestionContainer && suggestionContainer . style . display !== "none" ) {
return ;
}
await this . collectAttachments ( file , false ) ;
}
isPathIgnored ( path ) {
if ( path . startsWith ( "./" ) ) {
path = path . slice ( 2 ) ;
}
for ( const folder of this . settings . ignoreFolders ) {
if ( path . startsWith ( folder ) ) {
return true ;
}
}
for ( const fileRegex of this . settings . getIgnoreFilesRegex ( ) ) {
if ( fileRegex . test ( path ) ) {
return true ;
}
}
return false ;
}
async reorganizeVault ( ) {
await this . saveAllOpenNotes ( ) ;
await this . replaceAllWikilinksWithMarkdownLinks ( ) ;
await this . replaceAllWikiEmbedsWithMarkdownEmbeds ( ) ;
await this . convertAllEmbedsPathsToRelative ( ) ;
await this . convertAllLinkPathsToRelative ( ) ;
await this . collectAllAttachments ( ) ;
await this . deleteEmptyFolders ( ) ;
new import _obsidian4 . Notice ( "Reorganization of the vault completed" ) ;
}
async replaceAllWikiEmbedsWithMarkdownEmbeds ( ) {
await this . saveAllOpenNotes ( ) ;
let changedLinksCount = 0 ;
let processedNotesCount = 0 ;
const notes = ( 0 , import _Vault2 . getMarkdownFilesSorted ) ( this . app ) ;
let i = 0 ;
const notice = new import _obsidian4 . Notice ( "" , 0 ) ;
for ( const note of notes ) {
if ( this . abortSignal . aborted ) {
notice . hide ( ) ;
return ;
}
i ++ ;
const message = ` Replacing wiki embeds with markdown embeds # ${ i . toString ( ) } / ${ notes . length . toString ( ) } - ${ note . path } ` ;
notice . setMessage ( message ) ;
console . debug ( message ) ;
if ( this . isPathIgnored ( note . path ) ) {
continue ;
}
const result = await this . lh . replaceAllNoteWikilinksWithMarkdownLinks ( note . path , true ) ;
changedLinksCount += result ;
processedNotesCount ++ ;
}
notice . hide ( ) ;
if ( changedLinksCount == 0 ) {
new import _obsidian4 . Notice ( "No wiki embeds found that need to be replaced" ) ;
} else {
new import _obsidian4 . Notice ( ` Replaced ${ changedLinksCount . toString ( ) } wiki embed ${ changedLinksCount > 1 ? "s" : "" } from ${ processedNotesCount . toString ( ) } note ${ processedNotesCount > 1 ? "s" : "" } ` ) ;
}
}
replaceAllWikiEmbedsWithMarkdownEmbedsCurrentNote ( checking ) {
const note = this . app . workspace . getActiveFile ( ) ;
if ( ! note || ! ( 0 , import _FileSystem3 . isMarkdownFile ) ( note ) ) {
return false ;
}
if ( ! checking ) {
( 0 , import _Queue . addToQueue ) ( this . app , ( 0 , import _Function . omitAsyncReturnType ) ( ( ) => this . lh . replaceAllNoteWikilinksWithMarkdownLinks ( note . path , true ) ) ) ;
}
return true ;
}
async replaceAllWikilinksWithMarkdownLinks ( ) {
await this . saveAllOpenNotes ( ) ;
let changedLinksCount = 0 ;
let processedNotesCount = 0 ;
const notes = ( 0 , import _Vault2 . getMarkdownFilesSorted ) ( this . app ) ;
let i = 0 ;
const notice = new import _obsidian4 . Notice ( "" , 0 ) ;
for ( const note of notes ) {
if ( this . abortSignal . aborted ) {
notice . hide ( ) ;
return ;
}
i ++ ;
const message = ` Replacing wikilinks with markdown links # ${ i . toString ( ) } / ${ notes . length . toString ( ) } - ${ note . path } ` ;
notice . setMessage ( message ) ;
console . debug ( message ) ;
if ( this . isPathIgnored ( note . path ) ) {
continue ;
}
const result = await this . lh . replaceAllNoteWikilinksWithMarkdownLinks ( note . path , false ) ;
changedLinksCount += result ;
processedNotesCount ++ ;
}
notice . hide ( ) ;
if ( changedLinksCount == 0 ) {
new import _obsidian4 . Notice ( "No wiki links found that need to be replaced" ) ;
} else {
new import _obsidian4 . Notice ( ` Replaced ${ changedLinksCount . toString ( ) } wikilink ${ changedLinksCount > 1 ? "s" : "" } from ${ processedNotesCount . toString ( ) } note ${ processedNotesCount > 1 ? "s" : "" } ` ) ;
}
}
replaceAllWikilinksWithMarkdownLinksCurrentNote ( checking ) {
const note = this . app . workspace . getActiveFile ( ) ;
if ( ! note || ! ( 0 , import _FileSystem3 . isMarkdownFile ) ( note ) ) {
return false ;
}
if ( ! checking ) {
( 0 , import _Queue . addToQueue ) ( this . app , ( 0 , import _Function . omitAsyncReturnType ) ( ( ) => this . lh . replaceAllNoteWikilinksWithMarkdownLinks ( note . path , false ) ) ) ;
}
return true ;
}
async saveAllOpenNotes ( ) {
for ( const leaf of this . app . workspace . getLeavesOfType ( "markdown" ) ) {
if ( leaf . view instanceof import _obsidian4 . MarkdownView ) {
await leaf . view . save ( ) ;
}
}
}
} ;
function appendCodeBlock ( fragment , text ) {
fragment . appendChild ( createSpan ( { cls : "markdown-rendered code" } , ( span ) => {
span . style . fontWeight = "bold" ;
span . appendChild ( createEl ( "code" , { text } ) ) ;
} ) ) ;
}
// src/main.ts
var main _default = ConsistentAttachmentsAndLinksPlugin ;
/* nosourcemap */