@real1ty-obsidian-plugins/utils 1.2.1 → 1.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -105,4 +105,4 @@ export function onceAsyncResettable(fn) {
105
105
  },
106
106
  };
107
107
  }
108
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXN5bmMtdXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvYXN5bmMtdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBdUJHO0FBQ0gsTUFBTSxVQUFVLFNBQVMsQ0FBSSxFQUFvQjtJQUNoRCxJQUFJLE9BQU8sR0FBc0IsSUFBSSxDQUFDO0lBRXRDLE9BQU8sR0FBRyxFQUFFO1FBQ1gsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2QsSUFBSSxDQUFDO2dCQUNKLE9BQU8sR0FBRyxFQUFFLEVBQUUsQ0FBQztZQUNoQixDQUFDO1lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztnQkFDaEIsa0RBQWtEO2dCQUNsRCxPQUFPLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNqQyxDQUFDO1FBQ0YsQ0FBQztRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ2hCLENBQUMsQ0FBQztBQUNILENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JHO0FBQ0gsTUFBTSxVQUFVLGNBQWMsQ0FDN0IsRUFBd0M7SUFFeEMsTUFBTSxLQUFLLEdBQUcsSUFBSSxHQUFHLEVBQTRCLENBQUM7SUFFbEQsT0FBTyxDQUFDLEdBQUcsSUFBVyxFQUFFLEVBQUU7UUFDekIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVqQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3JCLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDN0IsQ0FBQztRQUVELE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUUsQ0FBQztJQUN4QixDQUFDLENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtCRztBQUNILE1BQU0sVUFBVSxtQkFBbUIsQ0FBSSxFQUFvQjtJQUkxRCxJQUFJLE9BQU8sR0FBc0IsSUFBSSxDQUFDO0lBRXRDLE9BQU87UUFDTixPQUFPLEVBQUUsR0FBRyxFQUFFO1lBQ2IsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNkLElBQUksQ0FBQztvQkFDSixPQUFPLEdBQUcsRUFBRSxFQUFFLENBQUM7Z0JBQ2hCLENBQUM7Z0JBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztvQkFDaEIsa0RBQWtEO29CQUNsRCxPQUFPLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDakMsQ0FBQztZQUNGLENBQUM7WUFDRCxPQUFPLE9BQU8sQ0FBQztRQUNoQixDQUFDO1FBQ0QsS0FBSyxFQUFFLEdBQUcsRUFBRTtZQUNYLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDaEIsQ0FBQztLQUNELENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBlbnN1cmVzIGFuIGFzeW5jIG9wZXJhdGlvbiBydW5zIG9ubHkgb25jZSxcbiAqIHJldHVybmluZyB0aGUgc2FtZSBwcm9taXNlIGZvciBjb25jdXJyZW50IGNhbGxzLlxuICpcbiAqIFVzZWZ1bCBmb3IgaW5pdGlhbGl6YXRpb24gcGF0dGVybnMgd2hlcmUgeW91IHdhbnQgdG8gZW5zdXJlXG4gKiBleHBlbnNpdmUgYXN5bmMgb3BlcmF0aW9ucyAobGlrZSBpbmRleGluZywgQVBJIGNhbGxzLCBldGMuKVxuICogb25seSBoYXBwZW4gb25jZSBldmVuIGlmIGNhbGxlZCBtdWx0aXBsZSB0aW1lcy5cbiAqXG4gKiBAcGFyYW0gZm4gVGhlIGFzeW5jIGZ1bmN0aW9uIHRvIG1lbW9pemVcbiAqIEByZXR1cm5zIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSBzYW1lIHByb21pc2Ugb24gc3Vic2VxdWVudCBjYWxsc1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBpbml0aWFsaXplT25jZSA9IG9uY2VBc3luYyhhc3luYyAoKSA9PiB7XG4gKiAgIGF3YWl0IGhlYXZ5SW5pdGlhbGl6YXRpb24oKTtcbiAqICAgY29uc29sZS5sb2coXCJJbml0aWFsaXplZCFcIik7XG4gKiB9KTtcbiAqXG4gKiAvLyBBbGwgdGhlc2UgY2FsbHMgd2lsbCBzaGFyZSB0aGUgc2FtZSBwcm9taXNlXG4gKiBhd2FpdCBpbml0aWFsaXplT25jZSgpO1xuICogYXdhaXQgaW5pdGlhbGl6ZU9uY2UoKTsgLy8gV29uJ3QgcnVuIGFnYWluXG4gKiBhd2FpdCBpbml0aWFsaXplT25jZSgpOyAvLyBXb24ndCBydW4gYWdhaW5cbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gb25jZUFzeW5jPFQ+KGZuOiAoKSA9PiBQcm9taXNlPFQ+KTogKCkgPT4gUHJvbWlzZTxUPiB7XG5cdGxldCBwcm9taXNlOiBQcm9taXNlPFQ+IHwgbnVsbCA9IG51bGw7XG5cblx0cmV0dXJuICgpID0+IHtcblx0XHRpZiAoIXByb21pc2UpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHByb21pc2UgPSBmbigpO1xuXHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0Ly8gQ29udmVydCBzeW5jaHJvbm91cyBlcnJvcnMgdG8gcmVqZWN0ZWQgcHJvbWlzZXNcblx0XHRcdFx0cHJvbWlzZSA9IFByb21pc2UucmVqZWN0KGVycm9yKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHByb21pc2U7XG5cdH07XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgZW5zdXJlcyBhbiBhc3luYyBvcGVyYXRpb24gcnVucyBvbmx5IG9uY2UgcGVyIGtleSxcbiAqIHVzZWZ1bCBmb3IgY2FjaGluZyBleHBlbnNpdmUgb3BlcmF0aW9ucyB3aXRoIGRpZmZlcmVudCBwYXJhbWV0ZXJzLlxuICpcbiAqIEBwYXJhbSBmbiBUaGUgYXN5bmMgZnVuY3Rpb24gdG8gbWVtb2l6ZVxuICogQHJldHVybnMgQSBmdW5jdGlvbiB0aGF0IG1lbW9pemVzIHJlc3VsdHMgYnkga2V5XG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IGZldGNoVXNlck9uY2UgPSBvbmNlQXN5bmNLZXllZChhc3luYyAodXNlcklkOiBzdHJpbmcpID0+IHtcbiAqICAgcmV0dXJuIGF3YWl0IGFwaS5nZXRVc2VyKHVzZXJJZCk7XG4gKiB9KTtcbiAqXG4gKiAvLyBFYWNoIHVuaXF1ZSB1c2VySWQgd2lsbCBvbmx5IGJlIGZldGNoZWQgb25jZVxuICogYXdhaXQgZmV0Y2hVc2VyT25jZShcInVzZXIxXCIpO1xuICogYXdhaXQgZmV0Y2hVc2VyT25jZShcInVzZXIxXCIpOyAvLyBSZXR1cm5zIGNhY2hlZCBwcm9taXNlXG4gKiBhd2FpdCBmZXRjaFVzZXJPbmNlKFwidXNlcjJcIik7IC8vIE5ldyBmZXRjaCBmb3IgZGlmZmVyZW50IGtleVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvbmNlQXN5bmNLZXllZDxUQXJncyBleHRlbmRzIHJlYWRvbmx5IHVua25vd25bXSwgVFJldHVybj4oXG5cdGZuOiAoLi4uYXJnczogVEFyZ3MpID0+IFByb21pc2U8VFJldHVybj5cbik6ICguLi5hcmdzOiBUQXJncykgPT4gUHJvbWlzZTxUUmV0dXJuPiB7XG5cdGNvbnN0IGNhY2hlID0gbmV3IE1hcDxzdHJpbmcsIFByb21pc2U8VFJldHVybj4+KCk7XG5cblx0cmV0dXJuICguLi5hcmdzOiBUQXJncykgPT4ge1xuXHRcdGNvbnN0IGtleSA9IEpTT04uc3RyaW5naWZ5KGFyZ3MpO1xuXG5cdFx0aWYgKCFjYWNoZS5oYXMoa2V5KSkge1xuXHRcdFx0Y2FjaGUuc2V0KGtleSwgZm4oLi4uYXJncykpO1xuXHRcdH1cblxuXHRcdHJldHVybiBjYWNoZS5nZXQoa2V5KSE7XG5cdH07XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHJlc2V0dGFibGUgdmVyc2lvbiBvZiBvbmNlQXN5bmMgdGhhdCBjYW4gYmUgY2xlYXJlZCBhbmQgcmUtcnVuLlxuICpcbiAqIEBwYXJhbSBmbiBUaGUgYXN5bmMgZnVuY3Rpb24gdG8gbWVtb2l6ZVxuICogQHJldHVybnMgT2JqZWN0IHdpdGggZXhlY3V0ZSBhbmQgcmVzZXQgbWV0aG9kc1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCB7IGV4ZWN1dGU6IGluaXRpYWxpemUsIHJlc2V0IH0gPSBvbmNlQXN5bmNSZXNldHRhYmxlKGFzeW5jICgpID0+IHtcbiAqICAgYXdhaXQgaGVhdnlJbml0aWFsaXphdGlvbigpO1xuICogfSk7XG4gKlxuICogYXdhaXQgaW5pdGlhbGl6ZSgpOyAvLyBSdW5zXG4gKiBhd2FpdCBpbml0aWFsaXplKCk7IC8vIENhY2hlZFxuICpcbiAqIHJlc2V0KCk7IC8vIENsZWFyIGNhY2hlXG4gKiBhd2FpdCBpbml0aWFsaXplKCk7IC8vIFJ1bnMgYWdhaW5cbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gb25jZUFzeW5jUmVzZXR0YWJsZTxUPihmbjogKCkgPT4gUHJvbWlzZTxUPik6IHtcblx0ZXhlY3V0ZTogKCkgPT4gUHJvbWlzZTxUPjtcblx0cmVzZXQ6ICgpID0+IHZvaWQ7XG59IHtcblx0bGV0IHByb21pc2U6IFByb21pc2U8VD4gfCBudWxsID0gbnVsbDtcblxuXHRyZXR1cm4ge1xuXHRcdGV4ZWN1dGU6ICgpID0+IHtcblx0XHRcdGlmICghcHJvbWlzZSkge1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdHByb21pc2UgPSBmbigpO1xuXHRcdFx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0XHRcdC8vIENvbnZlcnQgc3luY2hyb25vdXMgZXJyb3JzIHRvIHJlamVjdGVkIHByb21pc2VzXG5cdFx0XHRcdFx0cHJvbWlzZSA9IFByb21pc2UucmVqZWN0KGVycm9yKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHByb21pc2U7XG5cdFx0fSxcblx0XHRyZXNldDogKCkgPT4ge1xuXHRcdFx0cHJvbWlzZSA9IG51bGw7XG5cdFx0fSxcblx0fTtcbn1cbiJdfQ==
108
+ //# sourceMappingURL=async-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"async-utils.js","sourceRoot":"","sources":["../src/async-utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,UAAU,SAAS,CAAI,EAAoB;IAChD,IAAI,OAAO,GAAsB,IAAI,CAAC;IAEtC,OAAO,GAAG,EAAE;QACX,IAAI,CAAC,OAAO,EAAE,CAAC;YACd,IAAI,CAAC;gBACJ,OAAO,GAAG,EAAE,EAAE,CAAC;YAChB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAChB,kDAAkD;gBAClD,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACjC,CAAC;QACF,CAAC;QACD,OAAO,OAAO,CAAC;IAChB,CAAC,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,cAAc,CAC7B,EAAwC;IAExC,MAAM,KAAK,GAAG,IAAI,GAAG,EAA4B,CAAC;IAElD,OAAO,CAAC,GAAG,IAAW,EAAE,EAAE;QACzB,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAEjC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACrB,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;QAC7B,CAAC;QAED,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC;IACxB,CAAC,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,mBAAmB,CAAI,EAAoB;IAI1D,IAAI,OAAO,GAAsB,IAAI,CAAC;IAEtC,OAAO;QACN,OAAO,EAAE,GAAG,EAAE;YACb,IAAI,CAAC,OAAO,EAAE,CAAC;gBACd,IAAI,CAAC;oBACJ,OAAO,GAAG,EAAE,EAAE,CAAC;gBAChB,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBAChB,kDAAkD;oBAClD,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBACjC,CAAC;YACF,CAAC;YACD,OAAO,OAAO,CAAC;QAChB,CAAC;QACD,KAAK,EAAE,GAAG,EAAE;YACX,OAAO,GAAG,IAAI,CAAC;QAChB,CAAC;KACD,CAAC;AACH,CAAC","sourcesContent":["/**\n * Creates a function that ensures an async operation runs only once,\n * returning the same promise for concurrent calls.\n *\n * Useful for initialization patterns where you want to ensure\n * expensive async operations (like indexing, API calls, etc.)\n * only happen once even if called multiple times.\n *\n * @param fn The async function to memoize\n * @returns A function that returns the same promise on subsequent calls\n *\n * @example\n * ```typescript\n * const initializeOnce = onceAsync(async () => {\n * await heavyInitialization();\n * console.log(\"Initialized!\");\n * });\n *\n * // All these calls will share the same promise\n * await initializeOnce();\n * await initializeOnce(); // Won't run again\n * await initializeOnce(); // Won't run again\n * ```\n */\nexport function onceAsync<T>(fn: () => Promise<T>): () => Promise<T> {\n\tlet promise: Promise<T> | null = null;\n\n\treturn () => {\n\t\tif (!promise) {\n\t\t\ttry {\n\t\t\t\tpromise = fn();\n\t\t\t} catch (error) {\n\t\t\t\t// Convert synchronous errors to rejected promises\n\t\t\t\tpromise = Promise.reject(error);\n\t\t\t}\n\t\t}\n\t\treturn promise;\n\t};\n}\n\n/**\n * Creates a function that ensures an async operation runs only once per key,\n * useful for caching expensive operations with different parameters.\n *\n * @param fn The async function to memoize\n * @returns A function that memoizes results by key\n *\n * @example\n * ```typescript\n * const fetchUserOnce = onceAsyncKeyed(async (userId: string) => {\n * return await api.getUser(userId);\n * });\n *\n * // Each unique userId will only be fetched once\n * await fetchUserOnce(\"user1\");\n * await fetchUserOnce(\"user1\"); // Returns cached promise\n * await fetchUserOnce(\"user2\"); // New fetch for different key\n * ```\n */\nexport function onceAsyncKeyed<TArgs extends readonly unknown[], TReturn>(\n\tfn: (...args: TArgs) => Promise<TReturn>\n): (...args: TArgs) => Promise<TReturn> {\n\tconst cache = new Map<string, Promise<TReturn>>();\n\n\treturn (...args: TArgs) => {\n\t\tconst key = JSON.stringify(args);\n\n\t\tif (!cache.has(key)) {\n\t\t\tcache.set(key, fn(...args));\n\t\t}\n\n\t\treturn cache.get(key)!;\n\t};\n}\n\n/**\n * Creates a resettable version of onceAsync that can be cleared and re-run.\n *\n * @param fn The async function to memoize\n * @returns Object with execute and reset methods\n *\n * @example\n * ```typescript\n * const { execute: initialize, reset } = onceAsyncResettable(async () => {\n * await heavyInitialization();\n * });\n *\n * await initialize(); // Runs\n * await initialize(); // Cached\n *\n * reset(); // Clear cache\n * await initialize(); // Runs again\n * ```\n */\nexport function onceAsyncResettable<T>(fn: () => Promise<T>): {\n\texecute: () => Promise<T>;\n\treset: () => void;\n} {\n\tlet promise: Promise<T> | null = null;\n\n\treturn {\n\t\texecute: () => {\n\t\t\tif (!promise) {\n\t\t\t\ttry {\n\t\t\t\t\tpromise = fn();\n\t\t\t\t} catch (error) {\n\t\t\t\t\t// Convert synchronous errors to rejected promises\n\t\t\t\t\tpromise = Promise.reject(error);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn promise;\n\t\t},\n\t\treset: () => {\n\t\t\tpromise = null;\n\t\t},\n\t};\n}\n"]}
@@ -28,4 +28,4 @@ export function showBatchOperationResult(operation, successCount, errorCount) {
28
28
  new Notice(`${operation}: ${successCount} succeeded, ${errorCount} failed. Check console for details.`);
29
29
  }
30
30
  }
31
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmF0Y2gtb3BlcmF0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9iYXRjaC1vcGVyYXRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBWWxDLE1BQU0sVUFBZ0IsaUJBQWlCO3lEQUN0QyxLQUFVLEVBQ1YsY0FBc0IsRUFDdEIsT0FBbUMsRUFDbkMsYUFBc0IsSUFBSTtRQUUxQixJQUFJLFlBQVksR0FBRyxDQUFDLENBQUM7UUFDckIsSUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFDO1FBRW5CLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDO2dCQUNKLE1BQU0sT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNwQixZQUFZLEVBQUUsQ0FBQztZQUNoQixDQUFDO1lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztnQkFDaEIsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLGNBQWMsMEJBQTBCLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ2xFLFVBQVUsRUFBRSxDQUFDO1lBQ2QsQ0FBQztRQUNGLENBQUM7UUFFRCxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ2hCLHdCQUF3QixDQUFDLGNBQWMsRUFBRSxZQUFZLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDcEUsQ0FBQztRQUVELE9BQU8sRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLENBQUM7SUFDckMsQ0FBQztDQUFBO0FBRUQsTUFBTSxVQUFVLHdCQUF3QixDQUN2QyxTQUFpQixFQUNqQixZQUFvQixFQUNwQixVQUFrQjtJQUVsQixJQUFJLFVBQVUsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUN0QixJQUFJLE1BQU0sQ0FDVCxHQUFHLFNBQVMsS0FBSyxZQUFZLFFBQVEsWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLHlCQUF5QixDQUMzRixDQUFDO0lBQ0gsQ0FBQztTQUFNLENBQUM7UUFDUCxJQUFJLE1BQU0sQ0FDVCxHQUFHLFNBQVMsS0FBSyxZQUFZLGVBQWUsVUFBVSxxQ0FBcUMsQ0FDM0YsQ0FBQztJQUNILENBQUM7QUFDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTm90aWNlIH0gZnJvbSBcIm9ic2lkaWFuXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmF0Y2hPcGVyYXRpb25PcHRpb25zIHtcblx0Y2xvc2VBZnRlcj86IGJvb2xlYW47XG5cdGNhbGxPbkNvbXBsZXRlPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCYXRjaE9wZXJhdGlvblJlc3VsdCB7XG5cdHN1Y2Nlc3NDb3VudDogbnVtYmVyO1xuXHRlcnJvckNvdW50OiBudW1iZXI7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5CYXRjaE9wZXJhdGlvbjxUPihcblx0aXRlbXM6IFRbXSxcblx0b3BlcmF0aW9uTGFiZWw6IHN0cmluZyxcblx0aGFuZGxlcjogKGl0ZW06IFQpID0+IFByb21pc2U8dm9pZD4sXG5cdHNob3dSZXN1bHQ6IGJvb2xlYW4gPSB0cnVlXG4pOiBQcm9taXNlPEJhdGNoT3BlcmF0aW9uUmVzdWx0PiB7XG5cdGxldCBzdWNjZXNzQ291bnQgPSAwO1xuXHRsZXQgZXJyb3JDb3VudCA9IDA7XG5cblx0Zm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG5cdFx0dHJ5IHtcblx0XHRcdGF3YWl0IGhhbmRsZXIoaXRlbSk7XG5cdFx0XHRzdWNjZXNzQ291bnQrKztcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0Y29uc29sZS5lcnJvcihgJHtvcGVyYXRpb25MYWJlbH06IGVycm9yIHByb2Nlc3NpbmcgaXRlbTpgLCBlcnJvcik7XG5cdFx0XHRlcnJvckNvdW50Kys7XG5cdFx0fVxuXHR9XG5cblx0aWYgKHNob3dSZXN1bHQpIHtcblx0XHRzaG93QmF0Y2hPcGVyYXRpb25SZXN1bHQob3BlcmF0aW9uTGFiZWwsIHN1Y2Nlc3NDb3VudCwgZXJyb3JDb3VudCk7XG5cdH1cblxuXHRyZXR1cm4geyBzdWNjZXNzQ291bnQsIGVycm9yQ291bnQgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNob3dCYXRjaE9wZXJhdGlvblJlc3VsdChcblx0b3BlcmF0aW9uOiBzdHJpbmcsXG5cdHN1Y2Nlc3NDb3VudDogbnVtYmVyLFxuXHRlcnJvckNvdW50OiBudW1iZXJcbik6IHZvaWQge1xuXHRpZiAoZXJyb3JDb3VudCA9PT0gMCkge1xuXHRcdG5ldyBOb3RpY2UoXG5cdFx0XHRgJHtvcGVyYXRpb259OiAke3N1Y2Nlc3NDb3VudH0gaXRlbSR7c3VjY2Vzc0NvdW50ID09PSAxID8gXCJcIiA6IFwic1wifSBwcm9jZXNzZWQgc3VjY2Vzc2Z1bGx5YFxuXHRcdCk7XG5cdH0gZWxzZSB7XG5cdFx0bmV3IE5vdGljZShcblx0XHRcdGAke29wZXJhdGlvbn06ICR7c3VjY2Vzc0NvdW50fSBzdWNjZWVkZWQsICR7ZXJyb3JDb3VudH0gZmFpbGVkLiBDaGVjayBjb25zb2xlIGZvciBkZXRhaWxzLmBcblx0XHQpO1xuXHR9XG59XG4iXX0=
31
+ //# sourceMappingURL=batch-operations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"batch-operations.js","sourceRoot":"","sources":["../src/batch-operations.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAYlC,MAAM,UAAgB,iBAAiB;yDACtC,KAAU,EACV,cAAsB,EACtB,OAAmC,EACnC,aAAsB,IAAI;QAE1B,IAAI,YAAY,GAAG,CAAC,CAAC;QACrB,IAAI,UAAU,GAAG,CAAC,CAAC;QAEnB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YAC1B,IAAI,CAAC;gBACJ,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;gBACpB,YAAY,EAAE,CAAC;YAChB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAChB,OAAO,CAAC,KAAK,CAAC,GAAG,cAAc,0BAA0B,EAAE,KAAK,CAAC,CAAC;gBAClE,UAAU,EAAE,CAAC;YACd,CAAC;QACF,CAAC;QAED,IAAI,UAAU,EAAE,CAAC;YAChB,wBAAwB,CAAC,cAAc,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC;QACpE,CAAC;QAED,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC;IACrC,CAAC;CAAA;AAED,MAAM,UAAU,wBAAwB,CACvC,SAAiB,EACjB,YAAoB,EACpB,UAAkB;IAElB,IAAI,UAAU,KAAK,CAAC,EAAE,CAAC;QACtB,IAAI,MAAM,CACT,GAAG,SAAS,KAAK,YAAY,QAAQ,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,yBAAyB,CAC3F,CAAC;IACH,CAAC;SAAM,CAAC;QACP,IAAI,MAAM,CACT,GAAG,SAAS,KAAK,YAAY,eAAe,UAAU,qCAAqC,CAC3F,CAAC;IACH,CAAC;AACF,CAAC","sourcesContent":["import { Notice } from \"obsidian\";\n\nexport interface BatchOperationOptions {\n\tcloseAfter?: boolean;\n\tcallOnComplete?: boolean;\n}\n\nexport interface BatchOperationResult {\n\tsuccessCount: number;\n\terrorCount: number;\n}\n\nexport async function runBatchOperation<T>(\n\titems: T[],\n\toperationLabel: string,\n\thandler: (item: T) => Promise<void>,\n\tshowResult: boolean = true\n): Promise<BatchOperationResult> {\n\tlet successCount = 0;\n\tlet errorCount = 0;\n\n\tfor (const item of items) {\n\t\ttry {\n\t\t\tawait handler(item);\n\t\t\tsuccessCount++;\n\t\t} catch (error) {\n\t\t\tconsole.error(`${operationLabel}: error processing item:`, error);\n\t\t\terrorCount++;\n\t\t}\n\t}\n\n\tif (showResult) {\n\t\tshowBatchOperationResult(operationLabel, successCount, errorCount);\n\t}\n\n\treturn { successCount, errorCount };\n}\n\nexport function showBatchOperationResult(\n\toperation: string,\n\tsuccessCount: number,\n\terrorCount: number\n): void {\n\tif (errorCount === 0) {\n\t\tnew Notice(\n\t\t\t`${operation}: ${successCount} item${successCount === 1 ? \"\" : \"s\"} processed successfully`\n\t\t);\n\t} else {\n\t\tnew Notice(\n\t\t\t`${operation}: ${successCount} succeeded, ${errorCount} failed. Check console for details.`\n\t\t);\n\t}\n}\n"]}
@@ -54,4 +54,4 @@ export function normalizeChildReferences(childRefs, vault, currentFileDirectory)
54
54
  return normalizeChildReference(childRef, vault, currentFileDirectory);
55
55
  });
56
56
  }
57
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hpbGQtcmVmZXJlbmNlLXV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NoaWxkLXJlZmVyZW5jZS11dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFNeEQsTUFBTSxVQUFVLG9CQUFvQixDQUFDLFFBQWdCO0lBQ3BELE1BQU0sY0FBYyxHQUFHLFFBQVEsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDakQsSUFBSSxjQUFjLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUMzQixPQUFPLEVBQUUsQ0FBQztJQUNYLENBQUM7SUFDRCxPQUFPLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLGNBQWMsQ0FBQyxDQUFDO0FBQzlDLENBQUM7QUFFRCxNQUFNLFVBQVUsd0JBQXdCLENBQUMsUUFBZ0I7SUFDeEQsTUFBTSxRQUFRLEdBQUcsdUJBQXVCLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDbkQsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2YsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUNELE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2hDLENBQUM7QUFFRCxNQUFNLFVBQVUsdUJBQXVCLENBQ3RDLFFBQWdCLEVBQ2hCLEtBQW1CLEVBQ25CLG9CQUE2QjtJQUU3QixNQUFNLFFBQVEsR0FBRyx1QkFBdUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUVuRCxxREFBcUQ7SUFDckQsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2YsdUVBQXVFO1FBQ3ZFLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLG9CQUFvQixLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ25FLDJFQUEyRTtZQUMzRSxNQUFNLGFBQWEsR0FBRyxvQkFBb0I7Z0JBQ3pDLENBQUMsQ0FBQyxHQUFHLG9CQUFvQixJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLEtBQUssRUFBRTtnQkFDckYsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO29CQUN6QixDQUFDLENBQUMsUUFBUTtvQkFDVixDQUFDLENBQUMsR0FBRyxRQUFRLEtBQUssQ0FBQztZQUNyQixNQUFNLElBQUksR0FBRyxLQUFLLENBQUMscUJBQXFCLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDeEQsSUFBSSxJQUFJLFlBQVksS0FBSyxFQUFFLENBQUM7Z0JBQzNCLE9BQU8sY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzdCLENBQUM7UUFDRixDQUFDO1FBQ0QsT0FBTyxRQUFRLENBQUM7SUFDakIsQ0FBQztJQUVELHFEQUFxRDtJQUNyRCxJQUFJLHdCQUF3QixDQUFDLFFBQVEsQ0FBQyxJQUFJLG9CQUFvQixFQUFFLENBQUM7UUFDaEUsTUFBTSxZQUFZLEdBQUcsR0FBRyxvQkFBb0IsSUFBSSxRQUFRLEVBQUUsQ0FBQztRQUMzRCxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMscUJBQXFCLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDdkQsSUFBSSxJQUFJLFlBQVksS0FBSyxFQUFFLENBQUM7WUFDM0IsT0FBTyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0IsQ0FBQztJQUNGLENBQUM7SUFFRCxtRkFBbUY7SUFDbkYsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ25ELElBQUksSUFBSSxZQUFZLEtBQUssRUFBRSxDQUFDO1FBQzNCLE9BQU8sY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRCxPQUFPLFFBQVEsQ0FBQztBQUNqQixDQUFDO0FBRUQsTUFBTSxVQUFVLHdCQUF3QixDQUN2QyxTQUFtQixFQUNuQixLQUFtQixFQUNuQixvQkFBNkI7SUFFN0IsT0FBTyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7UUFDakMsT0FBTyx1QkFBdUIsQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLG9CQUFvQixDQUFDLENBQUM7SUFDdkUsQ0FBQyxDQUFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVEZpbGUgfSBmcm9tIFwib2JzaWRpYW5cIjtcbmltcG9ydCB7IGNyZWF0ZUZpbGVMaW5rIH0gZnJvbSBcIi4vZmlsZS1vcGVyYXRpb25zXCI7XG5pbXBvcnQgeyBleHRyYWN0RmlsZVBhdGhGcm9tTGluayB9IGZyb20gXCIuL2xpbmstcGFyc2VyXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmF1bHRBZGFwdGVyIHtcblx0Z2V0QWJzdHJhY3RGaWxlQnlQYXRoKHBhdGg6IHN0cmluZyk6IFRGaWxlIHwgbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3REaXJlY3RvcnlQYXRoKGZpbGVQYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRjb25zdCBsYXN0U2xhc2hJbmRleCA9IGZpbGVQYXRoLmxhc3RJbmRleE9mKFwiL1wiKTtcblx0aWYgKGxhc3RTbGFzaEluZGV4ID09PSAtMSkge1xuXHRcdHJldHVybiBcIlwiO1xuXHR9XG5cdHJldHVybiBmaWxlUGF0aC5zdWJzdHJpbmcoMCwgbGFzdFNsYXNoSW5kZXgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNSZWxhdGl2ZUNoaWxkUmVmZXJlbmNlKGNoaWxkUmVmOiBzdHJpbmcpOiBib29sZWFuIHtcblx0Y29uc3QgZmlsZVBhdGggPSBleHRyYWN0RmlsZVBhdGhGcm9tTGluayhjaGlsZFJlZik7XG5cdGlmICghZmlsZVBhdGgpIHtcblx0XHRyZXR1cm4gIWNoaWxkUmVmLmluY2x1ZGVzKFwiL1wiKTtcblx0fVxuXHRyZXR1cm4gIWZpbGVQYXRoLmluY2x1ZGVzKFwiL1wiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZUNoaWxkUmVmZXJlbmNlKFxuXHRjaGlsZFJlZjogc3RyaW5nLFxuXHR2YXVsdDogVmF1bHRBZGFwdGVyLFxuXHRjdXJyZW50RmlsZURpcmVjdG9yeT86IHN0cmluZ1xuKTogc3RyaW5nIHtcblx0Y29uc3QgZmlsZVBhdGggPSBleHRyYWN0RmlsZVBhdGhGcm9tTGluayhjaGlsZFJlZik7XG5cblx0Ly8gSGFuZGxlIHBsYWluIHRleHQgcmVmZXJlbmNlcyAobm90IHdyYXBwZWQgaW4gW1tdXSlcblx0aWYgKCFmaWxlUGF0aCkge1xuXHRcdC8vIElmIGl0J3Mgbm90IGEgbGluayBmb3JtYXQsIGNoZWNrIGlmIGl0IHNob3VsZCBiZSBjb252ZXJ0ZWQgdG8gYSBsaW5rXG5cdFx0aWYgKCFjaGlsZFJlZi5pbmNsdWRlcyhcIi9cIikgJiYgY3VycmVudEZpbGVEaXJlY3RvcnkgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Ly8gVGhpcyBpcyBhIHBsYWluIHRleHQgcmVmZXJlbmNlIHRoYXQgbWlnaHQgbmVlZCB0byBiZSBjb252ZXJ0ZWQgdG8gYSBsaW5rXG5cdFx0XHRjb25zdCBwb3RlbnRpYWxQYXRoID0gY3VycmVudEZpbGVEaXJlY3Rvcnlcblx0XHRcdFx0PyBgJHtjdXJyZW50RmlsZURpcmVjdG9yeX0vJHtjaGlsZFJlZi5lbmRzV2l0aChcIi5tZFwiKSA/IGNoaWxkUmVmIDogYCR7Y2hpbGRSZWZ9Lm1kYH1gXG5cdFx0XHRcdDogY2hpbGRSZWYuZW5kc1dpdGgoXCIubWRcIilcblx0XHRcdFx0XHQ/IGNoaWxkUmVmXG5cdFx0XHRcdFx0OiBgJHtjaGlsZFJlZn0ubWRgO1xuXHRcdFx0Y29uc3QgZmlsZSA9IHZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChwb3RlbnRpYWxQYXRoKTtcblx0XHRcdGlmIChmaWxlIGluc3RhbmNlb2YgVEZpbGUpIHtcblx0XHRcdFx0cmV0dXJuIGNyZWF0ZUZpbGVMaW5rKGZpbGUpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gY2hpbGRSZWY7XG5cdH1cblxuXHQvLyBIYW5kbGUgcmVsYXRpdmUgcmVmZXJlbmNlcyBieSBtYWtpbmcgdGhlbSBhYnNvbHV0ZVxuXHRpZiAoaXNSZWxhdGl2ZUNoaWxkUmVmZXJlbmNlKGNoaWxkUmVmKSAmJiBjdXJyZW50RmlsZURpcmVjdG9yeSkge1xuXHRcdGNvbnN0IGFic29sdXRlUGF0aCA9IGAke2N1cnJlbnRGaWxlRGlyZWN0b3J5fS8ke2ZpbGVQYXRofWA7XG5cdFx0Y29uc3QgZmlsZSA9IHZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChhYnNvbHV0ZVBhdGgpO1xuXHRcdGlmIChmaWxlIGluc3RhbmNlb2YgVEZpbGUpIHtcblx0XHRcdHJldHVybiBjcmVhdGVGaWxlTGluayhmaWxlKTtcblx0XHR9XG5cdH1cblxuXHQvLyBGb3IgYWJzb2x1dGUgcmVmZXJlbmNlcyBvciB3aGVuIG5vIGRpcmVjdG9yeSBjb250ZXh0LCB0cnkgdG8gZmluZCB0aGUgZmlsZSBhcy1pc1xuXHRjb25zdCBmaWxlID0gdmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKGZpbGVQYXRoKTtcblx0aWYgKGZpbGUgaW5zdGFuY2VvZiBURmlsZSkge1xuXHRcdHJldHVybiBjcmVhdGVGaWxlTGluayhmaWxlKTtcblx0fVxuXG5cdHJldHVybiBjaGlsZFJlZjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZUNoaWxkUmVmZXJlbmNlcyhcblx0Y2hpbGRSZWZzOiBzdHJpbmdbXSxcblx0dmF1bHQ6IFZhdWx0QWRhcHRlcixcblx0Y3VycmVudEZpbGVEaXJlY3Rvcnk/OiBzdHJpbmdcbik6IHN0cmluZ1tdIHtcblx0cmV0dXJuIGNoaWxkUmVmcy5tYXAoKGNoaWxkUmVmKSA9PiB7XG5cdFx0cmV0dXJuIG5vcm1hbGl6ZUNoaWxkUmVmZXJlbmNlKGNoaWxkUmVmLCB2YXVsdCwgY3VycmVudEZpbGVEaXJlY3RvcnkpO1xuXHR9KTtcbn1cbiJdfQ==
57
+ //# sourceMappingURL=child-reference-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"child-reference-utils.js","sourceRoot":"","sources":["../src/child-reference-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACjC,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAMxD,MAAM,UAAU,oBAAoB,CAAC,QAAgB;IACpD,MAAM,cAAc,GAAG,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IACjD,IAAI,cAAc,KAAK,CAAC,CAAC,EAAE,CAAC;QAC3B,OAAO,EAAE,CAAC;IACX,CAAC;IACD,OAAO,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,QAAgB;IACxD,MAAM,QAAQ,GAAG,uBAAuB,CAAC,QAAQ,CAAC,CAAC;IACnD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACf,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IAChC,CAAC;IACD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,uBAAuB,CACtC,QAAgB,EAChB,KAAmB,EACnB,oBAA6B;IAE7B,MAAM,QAAQ,GAAG,uBAAuB,CAAC,QAAQ,CAAC,CAAC;IAEnD,qDAAqD;IACrD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACf,uEAAuE;QACvE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,oBAAoB,KAAK,SAAS,EAAE,CAAC;YACnE,2EAA2E;YAC3E,MAAM,aAAa,GAAG,oBAAoB;gBACzC,CAAC,CAAC,GAAG,oBAAoB,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,KAAK,EAAE;gBACrF,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC;oBACzB,CAAC,CAAC,QAAQ;oBACV,CAAC,CAAC,GAAG,QAAQ,KAAK,CAAC;YACrB,MAAM,IAAI,GAAG,KAAK,CAAC,qBAAqB,CAAC,aAAa,CAAC,CAAC;YACxD,IAAI,IAAI,YAAY,KAAK,EAAE,CAAC;gBAC3B,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC;YAC7B,CAAC;QACF,CAAC;QACD,OAAO,QAAQ,CAAC;IACjB,CAAC;IAED,qDAAqD;IACrD,IAAI,wBAAwB,CAAC,QAAQ,CAAC,IAAI,oBAAoB,EAAE,CAAC;QAChE,MAAM,YAAY,GAAG,GAAG,oBAAoB,IAAI,QAAQ,EAAE,CAAC;QAC3D,MAAM,IAAI,GAAG,KAAK,CAAC,qBAAqB,CAAC,YAAY,CAAC,CAAC;QACvD,IAAI,IAAI,YAAY,KAAK,EAAE,CAAC;YAC3B,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC;IACF,CAAC;IAED,mFAAmF;IACnF,MAAM,IAAI,GAAG,KAAK,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC;IACnD,IAAI,IAAI,YAAY,KAAK,EAAE,CAAC;QAC3B,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAED,OAAO,QAAQ,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,wBAAwB,CACvC,SAAmB,EACnB,KAAmB,EACnB,oBAA6B;IAE7B,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE;QACjC,OAAO,uBAAuB,CAAC,QAAQ,EAAE,KAAK,EAAE,oBAAoB,CAAC,CAAC;IACvE,CAAC,CAAC,CAAC;AACJ,CAAC","sourcesContent":["import { TFile } from \"obsidian\";\nimport { createFileLink } from \"./file-operations\";\nimport { extractFilePathFromLink } from \"./link-parser\";\n\nexport interface VaultAdapter {\n\tgetAbstractFileByPath(path: string): TFile | null;\n}\n\nexport function extractDirectoryPath(filePath: string): string {\n\tconst lastSlashIndex = filePath.lastIndexOf(\"/\");\n\tif (lastSlashIndex === -1) {\n\t\treturn \"\";\n\t}\n\treturn filePath.substring(0, lastSlashIndex);\n}\n\nexport function isRelativeChildReference(childRef: string): boolean {\n\tconst filePath = extractFilePathFromLink(childRef);\n\tif (!filePath) {\n\t\treturn !childRef.includes(\"/\");\n\t}\n\treturn !filePath.includes(\"/\");\n}\n\nexport function normalizeChildReference(\n\tchildRef: string,\n\tvault: VaultAdapter,\n\tcurrentFileDirectory?: string\n): string {\n\tconst filePath = extractFilePathFromLink(childRef);\n\n\t// Handle plain text references (not wrapped in [[]])\n\tif (!filePath) {\n\t\t// If it's not a link format, check if it should be converted to a link\n\t\tif (!childRef.includes(\"/\") && currentFileDirectory !== undefined) {\n\t\t\t// This is a plain text reference that might need to be converted to a link\n\t\t\tconst potentialPath = currentFileDirectory\n\t\t\t\t? `${currentFileDirectory}/${childRef.endsWith(\".md\") ? childRef : `${childRef}.md`}`\n\t\t\t\t: childRef.endsWith(\".md\")\n\t\t\t\t\t? childRef\n\t\t\t\t\t: `${childRef}.md`;\n\t\t\tconst file = vault.getAbstractFileByPath(potentialPath);\n\t\t\tif (file instanceof TFile) {\n\t\t\t\treturn createFileLink(file);\n\t\t\t}\n\t\t}\n\t\treturn childRef;\n\t}\n\n\t// Handle relative references by making them absolute\n\tif (isRelativeChildReference(childRef) && currentFileDirectory) {\n\t\tconst absolutePath = `${currentFileDirectory}/${filePath}`;\n\t\tconst file = vault.getAbstractFileByPath(absolutePath);\n\t\tif (file instanceof TFile) {\n\t\t\treturn createFileLink(file);\n\t\t}\n\t}\n\n\t// For absolute references or when no directory context, try to find the file as-is\n\tconst file = vault.getAbstractFileByPath(filePath);\n\tif (file instanceof TFile) {\n\t\treturn createFileLink(file);\n\t}\n\n\treturn childRef;\n}\n\nexport function normalizeChildReferences(\n\tchildRefs: string[],\n\tvault: VaultAdapter,\n\tcurrentFileDirectory?: string\n): string[] {\n\treturn childRefs.map((childRef) => {\n\t\treturn normalizeChildReference(childRef, vault, currentFileDirectory);\n\t});\n}\n"]}
@@ -164,4 +164,4 @@ export function calculateRecurringInstanceDateTime(nextInstanceDateTime, nodeRec
164
164
  return nextInstanceDateTime.startOf("day");
165
165
  }
166
166
  }
167
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1yZWN1cnJlbmNlLXV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2RhdGUtcmVjdXJyZW5jZS11dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFhQSxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBNEI7SUFDekQsTUFBTSxFQUFFLENBQUM7SUFDVCxNQUFNLEVBQUUsQ0FBQztJQUNULE9BQU8sRUFBRSxDQUFDO0lBQ1YsU0FBUyxFQUFFLENBQUM7SUFDWixRQUFRLEVBQUUsQ0FBQztJQUNYLE1BQU0sRUFBRSxDQUFDO0lBQ1QsUUFBUSxFQUFFLENBQUM7Q0FDWCxDQUFDO0FBRUY7O0dBRUc7QUFDSCxNQUFNLFVBQVUsaUJBQWlCLENBQ2hDLFdBQXFCLEVBQ3JCLGNBQThCLEVBQzlCLFFBQW9CO0lBRXBCLFFBQVEsY0FBYyxFQUFFLENBQUM7UUFDeEIsS0FBSyxPQUFPO1lBQ1gsT0FBTyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdEMsS0FBSyxRQUFRO1lBQ1osSUFBSSxRQUFRLElBQUksUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDckMsT0FBTyx3QkFBd0IsQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDeEQsQ0FBQztZQUNELE9BQU8sV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZDLEtBQUssV0FBVztZQUNmLElBQUksUUFBUSxJQUFJLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3JDLE9BQU8seUJBQXlCLENBQUMsV0FBVyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQ3pELENBQUM7WUFDRCxPQUFPLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN2QyxLQUFLLFNBQVM7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QUVELE9BQU8sb0JBQW9CLENBQUMsR0FBRyxDQUFDO2dCQUMvQixHQUFHLEVBQUUsb0JBQW9CLENBQUMsR0FBRztnQkFDN0IsSUFBSSxFQUFFLG9CQUFvQixDQUFDLElBQUk7Z0JBQy9CLE1BQU0sRUFBRSxvQkFBb0IsQ0FBQyxNQUFNO2dCQUNuQyxNQUFNLEVBQUUsQ0FBQztnQkFDVCxXQUFXLEVBQUUsQ0FBQzthQUNkLENBQUMsQ0FBQztRQUNKLENBQUM7UUFFRCxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDZixJQUFJLE1BQU0sRUFBRSxDQUFDO2dCQUNaLE9BQU8sb0JBQW9CO3FCQUN6QixHQUFHLENBQUM7b0JBQ0osS0FBSyxFQUFFLG9CQUFvQixDQUFDLEtBQUs7b0JBQ2pDLEdBQUcsRUFBRSxvQkFBb0IsQ0FBQyxHQUFHO2lCQUM3QixDQUFDO3FCQUNELE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNsQixDQUFDO1lBRUQsT0FBTyxvQkFBb0IsQ0FBQyxHQUFHLENBQUM7Z0JBQy9CLEtBQUssRUFBRSxvQkFBb0IsQ0FBQyxLQUFLO2dCQUNqQyxHQUFHLEVBQUUsb0JBQW9CLENBQUMsR0FBRztnQkFDN0IsSUFBSSxFQUFFLG9CQUFvQixDQUFDLElBQUk7Z0JBQy9CLE1BQU0sRUFBRSxvQkFBb0IsQ0FBQyxNQUFNO2dCQUNuQyxNQUFNLEVBQUUsQ0FBQztnQkFDVCxXQUFXLEVBQUUsQ0FBQzthQUNkLENBQUMsQ0FBQztRQUNKLENBQUM7UUFFRDtZQUNDLE9BQU8sb0JBQW9CLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzdDLENBQUM7QUFDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBEYXRlVGltZSB9IGZyb20gXCJsdXhvblwiO1xuXG5leHBvcnQgdHlwZSBSZWN1cnJlbmNlVHlwZSA9IFwiZGFpbHlcIiB8IFwid2Vla2x5XCIgfCBcImJpLXdlZWtseVwiIHwgXCJtb250aGx5XCIgfCBcImJpLW1vbnRobHlcIiB8IFwieWVhcmx5XCI7XG5cbmV4cG9ydCB0eXBlIFdlZWtkYXkgPVxuXHR8IFwic3VuZGF5XCJcblx0fCBcIm1vbmRheVwiXG5cdHwgXCJ0dWVzZGF5XCJcblx0fCBcIndlZG5lc2RheVwiXG5cdHwgXCJ0aHVyc2RheVwiXG5cdHwgXCJmcmlkYXlcIlxuXHR8IFwic2F0dXJkYXlcIjtcblxuZXhwb3J0IGNvbnN0IFdFRUtEQVlfVE9fTlVNQkVSOiBSZWNvcmQ8V2Vla2RheSwgbnVtYmVyPiA9IHtcblx0c3VuZGF5OiAwLFxuXHRtb25kYXk6IDEsXG5cdHR1ZXNkYXk6IDIsXG5cdHdlZG5lc2RheTogMyxcblx0dGh1cnNkYXk6IDQsXG5cdGZyaWRheTogNSxcblx0c2F0dXJkYXk6IDYsXG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIG5leHQgb2NjdXJyZW5jZSBkYXRlIGJhc2VkIG9uIHJlY3VycmVuY2UgdHlwZSBhbmQgb3B0aW9uYWwgd2Vla2RheXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE5leHRPY2N1cnJlbmNlKFxuXHRjdXJyZW50RGF0ZTogRGF0ZVRpbWUsXG5cdHJlY3VycmVuY2VUeXBlOiBSZWN1cnJlbmNlVHlwZSxcblx0d2Vla2RheXM/OiBXZWVrZGF5W11cbik6IERhdGVUaW1lIHtcblx0c3dpdGNoIChyZWN1cnJlbmNlVHlwZSkge1xuXHRcdGNhc2UgXCJkYWlseVwiOlxuXHRcdFx0cmV0dXJuIGN1cnJlbnREYXRlLnBsdXMoeyBkYXlzOiAxIH0pO1xuXHRcdGNhc2UgXCJ3ZWVrbHlcIjpcblx0XHRcdGlmICh3ZWVrZGF5cyAmJiB3ZWVrZGF5cy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdHJldHVybiBnZXROZXh0V2Vla2RheU9jY3VycmVuY2UoY3VycmVudERhdGUsIHdlZWtkYXlzKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBjdXJyZW50RGF0ZS5wbHVzKHsgd2Vla3M6IDEgfSk7XG5cdFx0Y2FzZSBcImJpLXdlZWtseVwiOlxuXHRcdFx0aWYgKHdlZWtkYXlzICYmIHdlZWtkYXlzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0cmV0dXJuIGdldE5leHRCaVdlZWtseU9jY3VycmVuY2UoY3VycmVudERhdGUsIHdlZWtkYXlzKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBjdXJyZW50RGF0ZS5wbHVzKHsgd2Vla3M6IDIgfSk7XG5cdFx0Y2FzZSBcIm1vbnRobHlcIjpcblx0XHRcdHJldHVybiBjdXJyZW50RGF0ZS5wbHVzKHsgbW9udGhzOiAxIH0pO1xuXHRcdGNhc2UgXCJiaS1tb250aGx5XCI6XG5cdFx0XHRyZXR1cm4gY3VycmVudERhdGUucGx1cyh7IG1vbnRoczogMiB9KTtcblx0XHRjYXNlIFwieWVhcmx5XCI6XG5cdFx0XHRyZXR1cm4gY3VycmVudERhdGUucGx1cyh7IHllYXJzOiAxIH0pO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHRyZXR1cm4gY3VycmVudERhdGUucGx1cyh7IGRheXM6IDEgfSk7XG5cdH1cbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYSBnaXZlbiBkYXRlIG1hdGNoZXMgYW55IG9mIHRoZSBzcGVjaWZpZWQgd2Vla2RheXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRGF0ZU9uV2Vla2RheXMoZGF0ZTogRGF0ZVRpbWUsIHdlZWtkYXlzOiBXZWVrZGF5W10pOiBib29sZWFuIHtcblx0Y29uc3QgZGF0ZVdlZWtkYXkgPSBkYXRlLndlZWtkYXk7XG5cdGNvbnN0IGx1eG9uV2Vla2RheXMgPSB3ZWVrZGF5cy5tYXAoKGRheSkgPT4ge1xuXHRcdGNvbnN0IGRheU51bWJlciA9IFdFRUtEQVlfVE9fTlVNQkVSW2RheV07XG5cdFx0cmV0dXJuIGRheU51bWJlciA9PT0gMCA/IDcgOiBkYXlOdW1iZXI7IC8vIENvbnZlcnQgU3VuZGF5IGZyb20gMCB0byA3IGZvciBMdXhvblxuXHR9KTtcblxuXHRyZXR1cm4gbHV4b25XZWVrZGF5cy5pbmNsdWRlcyhkYXRlV2Vla2RheSk7XG59XG5cbi8qKlxuICogRmluZHMgdGhlIG5leHQgb2NjdXJyZW5jZSBvbiBzcGVjaWZpZWQgd2Vla2RheXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE5leHRXZWVrZGF5T2NjdXJyZW5jZShjdXJyZW50RGF0ZTogRGF0ZVRpbWUsIHdlZWtkYXlzOiBXZWVrZGF5W10pOiBEYXRlVGltZSB7XG5cdGNvbnN0IGN1cnJlbnRXZWVrZGF5ID0gY3VycmVudERhdGUud2Vla2RheTtcblx0Y29uc3QgbHV4b25XZWVrZGF5cyA9IHdlZWtkYXlzLm1hcCgoZGF5KSA9PiB7XG5cdFx0Y29uc3QgZGF5TnVtYmVyID0gV0VFS0RBWV9UT19OVU1CRVJbZGF5XTtcblx0XHRyZXR1cm4gZGF5TnVtYmVyID09PSAwID8gNyA6IGRheU51bWJlcjsgLy8gQ29udmVydCBTdW5kYXkgZnJvbSAwIHRvIDcgZm9yIEx1eG9uXG5cdH0pO1xuXG5cdC8vIEZpbmQgbmV4dCB3ZWVrZGF5IGluIHRoZSBjdXJyZW50IHdlZWsgKGFmdGVyIHRvZGF5KVxuXHRjb25zdCBuZXh0V2Vla2RheSA9IGx1eG9uV2Vla2RheXMuZmluZCgoZGF5KSA9PiBkYXkgPiBjdXJyZW50V2Vla2RheSk7XG5cdGlmIChuZXh0V2Vla2RheSkge1xuXHRcdHJldHVybiBjdXJyZW50RGF0ZS5zZXQoeyB3ZWVrZGF5OiBuZXh0V2Vla2RheSBhcyAxIHwgMiB8IDMgfCA0IHwgNSB8IDYgfCA3IH0pO1xuXHR9XG5cblx0Ly8gTm8gbW9yZSB3ZWVrZGF5cyB0aGlzIHdlZWssIGdvIHRvIGZpcnN0IHdlZWtkYXkgb2YgbmV4dCB3ZWVrXG5cdGNvbnN0IGZpcnN0V2Vla2RheSA9IE1hdGgubWluKC4uLmx1eG9uV2Vla2RheXMpO1xuXHRyZXR1cm4gY3VycmVudERhdGUucGx1cyh7IHdlZWtzOiAxIH0pLnNldCh7IHdlZWtkYXk6IGZpcnN0V2Vla2RheSBhcyAxIHwgMiB8IDMgfCA0IHwgNSB8IDYgfCA3IH0pO1xufVxuXG4vKipcbiAqIEZpbmRzIHRoZSBuZXh0IGJpLXdlZWtseSBvY2N1cnJlbmNlIG9uIHNwZWNpZmllZCB3ZWVrZGF5c1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TmV4dEJpV2Vla2x5T2NjdXJyZW5jZShjdXJyZW50RGF0ZTogRGF0ZVRpbWUsIHdlZWtkYXlzOiBXZWVrZGF5W10pOiBEYXRlVGltZSB7XG5cdGNvbnN0IG5leHRXZWVrbHkgPSBnZXROZXh0V2Vla2RheU9jY3VycmVuY2UoY3VycmVudERhdGUsIHdlZWtkYXlzKTtcblx0Ly8gQWRkIG9uZSBtb3JlIHdlZWsgdG8gbWFrZSBpdCBiaS13ZWVrbHlcblx0cmV0dXJuIG5leHRXZWVrbHkucGx1cyh7IHdlZWtzOiAxIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24qIGl0ZXJhdGVPY2N1cnJlbmNlc0luUmFuZ2UoXG5cdHN0YXJ0RGF0ZTogRGF0ZVRpbWUsXG5cdHJydWxlczogeyB0eXBlOiBSZWN1cnJlbmNlVHlwZTsgd2Vla2RheXM/OiBXZWVrZGF5W10gfSxcblx0cmFuZ2VTdGFydDogRGF0ZVRpbWUsXG5cdHJhbmdlRW5kOiBEYXRlVGltZVxuKTogR2VuZXJhdG9yPERhdGVUaW1lLCB2b2lkLCB1bmtub3duPiB7XG5cdGxldCBjdXJyZW50RGF0ZSA9IHN0YXJ0RGF0ZSA+PSByYW5nZVN0YXJ0ID8gc3RhcnREYXRlIDogcmFuZ2VTdGFydDtcblxuXHR3aGlsZSAoY3VycmVudERhdGUgPD0gcmFuZ2VFbmQpIHtcblx0XHQvLyBDaGVjayBpZiBjdXJyZW50IGRhdGUgc2hvdWxkIGhhdmUgYW4gZXZlbnRcblx0XHRsZXQgc2hvdWxkQWRkRXZlbnQgPSBmYWxzZTtcblxuXHRcdGlmIChycnVsZXMudHlwZSA9PT0gXCJkYWlseVwiKSB7XG5cdFx0XHRzaG91bGRBZGRFdmVudCA9IHRydWU7XG5cdFx0fSBlbHNlIGlmIChycnVsZXMudHlwZSA9PT0gXCJ3ZWVrbHlcIiB8fCBycnVsZXMudHlwZSA9PT0gXCJiaS13ZWVrbHlcIikge1xuXHRcdFx0aWYgKHJydWxlcy53ZWVrZGF5cyAmJiBycnVsZXMud2Vla2RheXMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRzaG91bGRBZGRFdmVudCA9IGlzRGF0ZU9uV2Vla2RheXMoY3VycmVudERhdGUsIHJydWxlcy53ZWVrZGF5cyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzaG91bGRBZGRFdmVudCA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHNob3VsZEFkZEV2ZW50ID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRpZiAoc2hvdWxkQWRkRXZlbnQpIHtcblx0XHRcdHlpZWxkIGN1cnJlbnREYXRlO1xuXHRcdH1cblxuXHRcdGNvbnN0IG5leHREYXRlID0gZ2V0TmV4dE9jY3VycmVuY2UoY3VycmVudERhdGUsIHJydWxlcy50eXBlLCBycnVsZXMud2Vla2RheXMpO1xuXG5cdFx0aWYgKG5leHREYXRlIDw9IHJhbmdlRW5kKSB7XG5cdFx0XHRjdXJyZW50RGF0ZSA9IG5leHREYXRlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRicmVhaztcblx0XHR9XG5cdH1cbn1cblxuLyoqXG4gKiBDYWxjdWxhdGVzIGEgRGF0ZVRpbWUgZm9yIGEgc3BlY2lmaWMgZGF0ZSB3aXRoIG9wdGlvbmFsIHRpbWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhbGN1bGF0ZUluc3RhbmNlRGF0ZVRpbWUoaW5zdGFuY2VEYXRlOiBEYXRlVGltZSwgdGltZVN0cmluZz86IHN0cmluZyk6IERhdGVUaW1lIHtcblx0aWYgKCF0aW1lU3RyaW5nKSB7XG5cdFx0cmV0dXJuIGluc3RhbmNlRGF0ZS5zdGFydE9mKFwiZGF5XCIpO1xuXHR9XG5cblx0Y29uc3QgW2hvdXJzLCBtaW51dGVzXSA9IHRpbWVTdHJpbmcuc3BsaXQoXCI6XCIpLm1hcChOdW1iZXIpO1xuXHRyZXR1cm4gaW5zdGFuY2VEYXRlLnNldCh7IGhvdXI6IGhvdXJzLCBtaW51dGU6IG1pbnV0ZXMsIHNlY29uZDogMCwgbWlsbGlzZWNvbmQ6IDAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjYWxjdWxhdGVSZWN1cnJpbmdJbnN0YW5jZURhdGVUaW1lKFxuXHRuZXh0SW5zdGFuY2VEYXRlVGltZTogRGF0ZVRpbWUsXG5cdG5vZGVSZWN1cmluZ0V2ZW50RGF0ZVRpbWU6IERhdGVUaW1lLFxuXHRyZWN1cnJlbmNlVHlwZTogUmVjdXJyZW5jZVR5cGUsXG5cdGFsbERheT86IGJvb2xlYW5cbik6IERhdGVUaW1lIHtcblx0Ly8gQ29udmVydCB0aGUgb3JpZ2luYWwgZXZlbnQgdGltZSB0byB0aGUgdGFyZ2V0IHRpbWV6b25lIG9uY2UgdG8gcHJlc2VydmUgbG9jYWwgdGltZVxuXHRjb25zdCBvcmlnaW5hbEluVGFyZ2V0Wm9uZSA9IG5vZGVSZWN1cmluZ0V2ZW50RGF0ZVRpbWUuc2V0Wm9uZShuZXh0SW5zdGFuY2VEYXRlVGltZS56b25lKTtcblxuXHRzd2l0Y2ggKHJlY3VycmVuY2VUeXBlKSB7XG5cdFx0Y2FzZSBcImRhaWx5XCI6XG5cdFx0Y2FzZSBcIndlZWtseVwiOlxuXHRcdGNhc2UgXCJiaS13ZWVrbHlcIjoge1xuXHRcdFx0aWYgKGFsbERheSkge1xuXHRcdFx0XHRyZXR1cm4gbmV4dEluc3RhbmNlRGF0ZVRpbWUuc3RhcnRPZihcImRheVwiKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIG5leHRJbnN0YW5jZURhdGVUaW1lLnNldCh7XG5cdFx0XHRcdGhvdXI6IG9yaWdpbmFsSW5UYXJnZXRab25lLmhvdXIsXG5cdFx0XHRcdG1pbnV0ZTogb3JpZ2luYWxJblRhcmdldFpvbmUubWludXRlLFxuXHRcdFx0XHRzZWNvbmQ6IDAsXG5cdFx0XHRcdG1pbGxpc2Vjb25kOiAwLFxuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0Y2FzZSBcIm1vbnRobHlcIjpcblx0XHRjYXNlIFwiYmktbW9udGhseVwiOiB7XG5cdFx0XHRpZiAoYWxsRGF5KSB7XG5cdFx0XHRcdHJldHVybiBuZXh0SW5zdGFuY2VEYXRlVGltZS5zZXQoeyBkYXk6IG9yaWdpbmFsSW5UYXJnZXRab25lLmRheSB9KS5zdGFydE9mKFwiZGF5XCIpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gbmV4dEluc3RhbmNlRGF0ZVRpbWUuc2V0KHtcblx0XHRcdFx0ZGF5OiBvcmlnaW5hbEluVGFyZ2V0Wm9uZS5kYXksXG5cdFx0XHRcdGhvdXI6IG9yaWdpbmFsSW5UYXJnZXRab25lLmhvdXIsXG5cdFx0XHRcdG1pbnV0ZTogb3JpZ2luYWxJblRhcmdldFpvbmUubWludXRlLFxuXHRcdFx0XHRzZWNvbmQ6IDAsXG5cdFx0XHRcdG1pbGxpc2Vjb25kOiAwLFxuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0Y2FzZSBcInllYXJseVwiOiB7XG5cdFx0XHRpZiAoYWxsRGF5KSB7XG5cdFx0XHRcdHJldHVybiBuZXh0SW5zdGFuY2VEYXRlVGltZVxuXHRcdFx0XHRcdC5zZXQoe1xuXHRcdFx0XHRcdFx0bW9udGg6IG9yaWdpbmFsSW5UYXJnZXRab25lLm1vbnRoLFxuXHRcdFx0XHRcdFx0ZGF5OiBvcmlnaW5hbEluVGFyZ2V0Wm9uZS5kYXksXG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuc3RhcnRPZihcImRheVwiKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIG5leHRJbnN0YW5jZURhdGVUaW1lLnNldCh7XG5cdFx0XHRcdG1vbnRoOiBvcmlnaW5hbEluVGFyZ2V0Wm9uZS5tb250aCxcblx0XHRcdFx0ZGF5OiBvcmlnaW5hbEluVGFyZ2V0Wm9uZS5kYXksXG5cdFx0XHRcdGhvdXI6IG9yaWdpbmFsSW5UYXJnZXRab25lLmhvdXIsXG5cdFx0XHRcdG1pbnV0ZTogb3JpZ2luYWxJblRhcmdldFpvbmUubWludXRlLFxuXHRcdFx0XHRzZWNvbmQ6IDAsXG5cdFx0XHRcdG1pbGxpc2Vjb25kOiAwLFxuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0ZGVmYXVsdDpcblx0XHRcdHJldHVybiBuZXh0SW5zdGFuY2VEYXRlVGltZS5zdGFydE9mKFwiZGF5XCIpO1xuXHR9XG59XG4iXX0=
167
+ //# sourceMappingURL=date-recurrence-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date-recurrence-utils.js","sourceRoot":"","sources":["../src/date-recurrence-utils.ts"],"names":[],"mappings":"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","sourcesContent":["import type { DateTime } from \"luxon\";\n\nexport type RecurrenceType = \"daily\" | \"weekly\" | \"bi-weekly\" | \"monthly\" | \"bi-monthly\" | \"yearly\";\n\nexport type Weekday =\n\t| \"sunday\"\n\t| \"monday\"\n\t| \"tuesday\"\n\t| \"wednesday\"\n\t| \"thursday\"\n\t| \"friday\"\n\t| \"saturday\";\n\nexport const WEEKDAY_TO_NUMBER: Record<Weekday, number> = {\n\tsunday: 0,\n\tmonday: 1,\n\ttuesday: 2,\n\twednesday: 3,\n\tthursday: 4,\n\tfriday: 5,\n\tsaturday: 6,\n};\n\n/**\n * Calculates the next occurrence date based on recurrence type and optional weekdays\n */\nexport function getNextOccurrence(\n\tcurrentDate: DateTime,\n\trecurrenceType: RecurrenceType,\n\tweekdays?: Weekday[]\n): DateTime {\n\tswitch (recurrenceType) {\n\t\tcase \"daily\":\n\t\t\treturn currentDate.plus({ days: 1 });\n\t\tcase \"weekly\":\n\t\t\tif (weekdays && weekdays.length > 0) {\n\t\t\t\treturn getNextWeekdayOccurrence(currentDate, weekdays);\n\t\t\t}\n\t\t\treturn currentDate.plus({ weeks: 1 });\n\t\tcase \"bi-weekly\":\n\t\t\tif (weekdays && weekdays.length > 0) {\n\t\t\t\treturn getNextBiWeeklyOccurrence(currentDate, weekdays);\n\t\t\t}\n\t\t\treturn currentDate.plus({ weeks: 2 });\n\t\tcase \"monthly\":\n\t\t\treturn currentDate.plus({ months: 1 });\n\t\tcase \"bi-monthly\":\n\t\t\treturn currentDate.plus({ months: 2 });\n\t\tcase \"yearly\":\n\t\t\treturn currentDate.plus({ years: 1 });\n\t\tdefault:\n\t\t\treturn currentDate.plus({ days: 1 });\n\t}\n}\n\n/**\n * Checks if a given date matches any of the specified weekdays\n */\nexport function isDateOnWeekdays(date: DateTime, weekdays: Weekday[]): boolean {\n\tconst dateWeekday = date.weekday;\n\tconst luxonWeekdays = weekdays.map((day) => {\n\t\tconst dayNumber = WEEKDAY_TO_NUMBER[day];\n\t\treturn dayNumber === 0 ? 7 : dayNumber; // Convert Sunday from 0 to 7 for Luxon\n\t});\n\n\treturn luxonWeekdays.includes(dateWeekday);\n}\n\n/**\n * Finds the next occurrence on specified weekdays\n */\nexport function getNextWeekdayOccurrence(currentDate: DateTime, weekdays: Weekday[]): DateTime {\n\tconst currentWeekday = currentDate.weekday;\n\tconst luxonWeekdays = weekdays.map((day) => {\n\t\tconst dayNumber = WEEKDAY_TO_NUMBER[day];\n\t\treturn dayNumber === 0 ? 7 : dayNumber; // Convert Sunday from 0 to 7 for Luxon\n\t});\n\n\t// Find next weekday in the current week (after today)\n\tconst nextWeekday = luxonWeekdays.find((day) => day > currentWeekday);\n\tif (nextWeekday) {\n\t\treturn currentDate.set({ weekday: nextWeekday as 1 | 2 | 3 | 4 | 5 | 6 | 7 });\n\t}\n\n\t// No more weekdays this week, go to first weekday of next week\n\tconst firstWeekday = Math.min(...luxonWeekdays);\n\treturn currentDate.plus({ weeks: 1 }).set({ weekday: firstWeekday as 1 | 2 | 3 | 4 | 5 | 6 | 7 });\n}\n\n/**\n * Finds the next bi-weekly occurrence on specified weekdays\n */\nexport function getNextBiWeeklyOccurrence(currentDate: DateTime, weekdays: Weekday[]): DateTime {\n\tconst nextWeekly = getNextWeekdayOccurrence(currentDate, weekdays);\n\t// Add one more week to make it bi-weekly\n\treturn nextWeekly.plus({ weeks: 1 });\n}\n\nexport function* iterateOccurrencesInRange(\n\tstartDate: DateTime,\n\trrules: { type: RecurrenceType; weekdays?: Weekday[] },\n\trangeStart: DateTime,\n\trangeEnd: DateTime\n): Generator<DateTime, void, unknown> {\n\tlet currentDate = startDate >= rangeStart ? startDate : rangeStart;\n\n\twhile (currentDate <= rangeEnd) {\n\t\t// Check if current date should have an event\n\t\tlet shouldAddEvent = false;\n\n\t\tif (rrules.type === \"daily\") {\n\t\t\tshouldAddEvent = true;\n\t\t} else if (rrules.type === \"weekly\" || rrules.type === \"bi-weekly\") {\n\t\t\tif (rrules.weekdays && rrules.weekdays.length > 0) {\n\t\t\t\tshouldAddEvent = isDateOnWeekdays(currentDate, rrules.weekdays);\n\t\t\t} else {\n\t\t\t\tshouldAddEvent = true;\n\t\t\t}\n\t\t} else {\n\t\t\tshouldAddEvent = true;\n\t\t}\n\n\t\tif (shouldAddEvent) {\n\t\t\tyield currentDate;\n\t\t}\n\n\t\tconst nextDate = getNextOccurrence(currentDate, rrules.type, rrules.weekdays);\n\n\t\tif (nextDate <= rangeEnd) {\n\t\t\tcurrentDate = nextDate;\n\t\t} else {\n\t\t\tbreak;\n\t\t}\n\t}\n}\n\n/**\n * Calculates a DateTime for a specific date with optional time\n */\nexport function calculateInstanceDateTime(instanceDate: DateTime, timeString?: string): DateTime {\n\tif (!timeString) {\n\t\treturn instanceDate.startOf(\"day\");\n\t}\n\n\tconst [hours, minutes] = timeString.split(\":\").map(Number);\n\treturn instanceDate.set({ hour: hours, minute: minutes, second: 0, millisecond: 0 });\n}\n\nexport function calculateRecurringInstanceDateTime(\n\tnextInstanceDateTime: DateTime,\n\tnodeRecuringEventDateTime: DateTime,\n\trecurrenceType: RecurrenceType,\n\tallDay?: boolean\n): DateTime {\n\t// Convert the original event time to the target timezone once to preserve local time\n\tconst originalInTargetZone = nodeRecuringEventDateTime.setZone(nextInstanceDateTime.zone);\n\n\tswitch (recurrenceType) {\n\t\tcase \"daily\":\n\t\tcase \"weekly\":\n\t\tcase \"bi-weekly\": {\n\t\t\tif (allDay) {\n\t\t\t\treturn nextInstanceDateTime.startOf(\"day\");\n\t\t\t}\n\n\t\t\treturn nextInstanceDateTime.set({\n\t\t\t\thour: originalInTargetZone.hour,\n\t\t\t\tminute: originalInTargetZone.minute,\n\t\t\t\tsecond: 0,\n\t\t\t\tmillisecond: 0,\n\t\t\t});\n\t\t}\n\n\t\tcase \"monthly\":\n\t\tcase \"bi-monthly\": {\n\t\t\tif (allDay) {\n\t\t\t\treturn nextInstanceDateTime.set({ day: originalInTargetZone.day }).startOf(\"day\");\n\t\t\t}\n\n\t\t\treturn nextInstanceDateTime.set({\n\t\t\t\tday: originalInTargetZone.day,\n\t\t\t\thour: originalInTargetZone.hour,\n\t\t\t\tminute: originalInTargetZone.minute,\n\t\t\t\tsecond: 0,\n\t\t\t\tmillisecond: 0,\n\t\t\t});\n\t\t}\n\n\t\tcase \"yearly\": {\n\t\t\tif (allDay) {\n\t\t\t\treturn nextInstanceDateTime\n\t\t\t\t\t.set({\n\t\t\t\t\t\tmonth: originalInTargetZone.month,\n\t\t\t\t\t\tday: originalInTargetZone.day,\n\t\t\t\t\t})\n\t\t\t\t\t.startOf(\"day\");\n\t\t\t}\n\n\t\t\treturn nextInstanceDateTime.set({\n\t\t\t\tmonth: originalInTargetZone.month,\n\t\t\t\tday: originalInTargetZone.day,\n\t\t\t\thour: originalInTargetZone.hour,\n\t\t\t\tminute: originalInTargetZone.minute,\n\t\t\t\tsecond: 0,\n\t\t\t\tmillisecond: 0,\n\t\t\t});\n\t\t}\n\n\t\tdefault:\n\t\t\treturn nextInstanceDateTime.startOf(\"day\");\n\t}\n}\n"]}
@@ -102,4 +102,4 @@ export const parseDateTimeString = (value) => {
102
102
  return dt;
103
103
  return undefined;
104
104
  };
105
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS11dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9kYXRlLXV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFFakMsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsQ0FBQyxVQUFrQixFQUFVLEVBQUU7SUFDcEUsSUFBSSxDQUFDLFVBQVU7UUFBRSxPQUFPLEVBQUUsQ0FBQztJQUUzQixJQUFJLENBQUM7UUFDSixNQUFNLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNsQyxxREFBcUQ7UUFDckQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ2hDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUMzRCxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNwRCxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN2RCxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUUzRCxPQUFPLEdBQUcsSUFBSSxJQUFJLEtBQUssSUFBSSxHQUFHLElBQUksS0FBSyxJQUFJLE9BQU8sRUFBRSxDQUFDO0lBQ3RELENBQUM7SUFBQyxXQUFNLENBQUM7UUFDUixPQUFPLEVBQUUsQ0FBQztJQUNYLENBQUM7QUFDRixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLFVBQWtCLEVBQVUsRUFBRTtJQUNoRSxJQUFJLENBQUMsVUFBVTtRQUFFLE9BQU8sRUFBRSxDQUFDO0lBRTNCLElBQUksQ0FBQztRQUNKLE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2xDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNoQyxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDM0QsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFFcEQsT0FBTyxHQUFHLElBQUksSUFBSSxLQUFLLElBQUksR0FBRyxFQUFFLENBQUM7SUFDbEMsQ0FBQztJQUFDLFdBQU0sQ0FBQztRQUNSLE9BQU8sRUFBRSxDQUFDO0lBQ1gsQ0FBQztBQUNGLENBQUMsQ0FBQztBQUVGOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxDQUFDLFVBQWtCLEVBQWlCLEVBQUU7SUFDMUUsSUFBSSxDQUFDO1FBQ0osT0FBTyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUMzQyxDQUFDO0lBQUMsV0FBTSxDQUFDO1FBQ1IsT0FBTyxJQUFJLENBQUM7SUFDYixDQUFDO0FBQ0YsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLENBQUMsT0FBZSxFQUFVLEVBQUU7SUFDekQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDdkMsTUFBTSxJQUFJLEdBQUcsT0FBTyxHQUFHLEVBQUUsQ0FBQztJQUMxQixPQUFPLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQztBQUNoRixDQUFDLENBQUM7QUFFRjs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsQ0FBQyxLQUFvQixFQUF3QixFQUFFO0lBQzdFLElBQUksS0FBSyxLQUFLLElBQUk7UUFBRSxPQUFPLFNBQVMsQ0FBQztJQUVyQyxNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7SUFFdkIsb0RBQW9EO0lBQ3BELElBQUksZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQzdCLE9BQU8sU0FBUyxDQUFDLENBQUMsMkJBQTJCO0lBQzlDLENBQUM7SUFFRCw0RUFBNEU7SUFDNUUsSUFBSSxFQUFFLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLHlDQUF5QztJQUMxRixJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU87UUFBRSxFQUFFLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLCtCQUErQjtJQUM3RixJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU87UUFBRSxFQUFFLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsa0JBQWtCLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUVwRixPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQ3BDLENBQUMsQ0FBQztBQUVGOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLENBQUMsS0FBb0IsRUFBd0IsRUFBRTtJQUNqRixJQUFJLEtBQUssS0FBSyxJQUFJO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFFckMsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3ZCLElBQUksQ0FBQyxDQUFDO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFFekIsdURBQXVEO0lBQ3ZELElBQUksRUFBWSxDQUFDO0lBRWpCLHdDQUF3QztJQUN4QyxFQUFFLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUM1QyxJQUFJLEVBQUUsQ0FBQyxPQUFPO1FBQUUsT0FBTyxFQUFFLENBQUM7SUFFMUIsMENBQTBDO0lBQzFDLEVBQUUsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzVDLElBQUksRUFBRSxDQUFDLE9BQU87UUFBRSxPQUFPLEVBQUUsQ0FBQztJQUUxQixxREFBcUQ7SUFDckQsRUFBRSxHQUFHLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLGtCQUFrQixFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDbkUsSUFBSSxFQUFFLENBQUMsT0FBTztRQUFFLE9BQU8sRUFBRSxDQUFDO0lBRTFCLCtEQUErRDtJQUMvRCxFQUFFLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDN0QsSUFBSSxFQUFFLENBQUMsT0FBTztRQUFFLE9BQU8sRUFBRSxDQUFDO0lBRTFCLHNDQUFzQztJQUN0QyxFQUFFLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUM1QyxJQUFJLEVBQUUsQ0FBQyxPQUFPO1FBQUUsT0FBTyxFQUFFLENBQUM7SUFFMUIsT0FBTyxTQUFTLENBQUM7QUFDbEIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGF0ZVRpbWUgfSBmcm9tIFwibHV4b25cIjtcblxuZXhwb3J0IGNvbnN0IGZvcm1hdERhdGVUaW1lRm9ySW5wdXQgPSAoZGF0ZVN0cmluZzogc3RyaW5nKTogc3RyaW5nID0+IHtcblx0aWYgKCFkYXRlU3RyaW5nKSByZXR1cm4gXCJcIjtcblxuXHR0cnkge1xuXHRcdGNvbnN0IGRhdGUgPSBuZXcgRGF0ZShkYXRlU3RyaW5nKTtcblx0XHQvLyBGb3JtYXQgZm9yIGRhdGV0aW1lLWxvY2FsIGlucHV0IChZWVlZLU1NLUREVEhIOm1tKVxuXHRcdGNvbnN0IHllYXIgPSBkYXRlLmdldEZ1bGxZZWFyKCk7XG5cdFx0Y29uc3QgbW9udGggPSBTdHJpbmcoZGF0ZS5nZXRNb250aCgpICsgMSkucGFkU3RhcnQoMiwgXCIwXCIpO1xuXHRcdGNvbnN0IGRheSA9IFN0cmluZyhkYXRlLmdldERhdGUoKSkucGFkU3RhcnQoMiwgXCIwXCIpO1xuXHRcdGNvbnN0IGhvdXJzID0gU3RyaW5nKGRhdGUuZ2V0SG91cnMoKSkucGFkU3RhcnQoMiwgXCIwXCIpO1xuXHRcdGNvbnN0IG1pbnV0ZXMgPSBTdHJpbmcoZGF0ZS5nZXRNaW51dGVzKCkpLnBhZFN0YXJ0KDIsIFwiMFwiKTtcblxuXHRcdHJldHVybiBgJHt5ZWFyfS0ke21vbnRofS0ke2RheX1UJHtob3Vyc306JHttaW51dGVzfWA7XG5cdH0gY2F0Y2gge1xuXHRcdHJldHVybiBcIlwiO1xuXHR9XG59O1xuXG5leHBvcnQgY29uc3QgZm9ybWF0RGF0ZUZvcklucHV0ID0gKGRhdGVTdHJpbmc6IHN0cmluZyk6IHN0cmluZyA9PiB7XG5cdGlmICghZGF0ZVN0cmluZykgcmV0dXJuIFwiXCI7XG5cblx0dHJ5IHtcblx0XHRjb25zdCBkYXRlID0gbmV3IERhdGUoZGF0ZVN0cmluZyk7XG5cdFx0Y29uc3QgeWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKTtcblx0XHRjb25zdCBtb250aCA9IFN0cmluZyhkYXRlLmdldE1vbnRoKCkgKyAxKS5wYWRTdGFydCgyLCBcIjBcIik7XG5cdFx0Y29uc3QgZGF5ID0gU3RyaW5nKGRhdGUuZ2V0RGF0ZSgpKS5wYWRTdGFydCgyLCBcIjBcIik7XG5cblx0XHRyZXR1cm4gYCR7eWVhcn0tJHttb250aH0tJHtkYXl9YDtcblx0fSBjYXRjaCB7XG5cdFx0cmV0dXJuIFwiXCI7XG5cdH1cbn07XG5cbi8qKlxuICogQ29udmVydHMgaW5wdXQgdmFsdWUgdG8gSVNPIHN0cmluZywgaGFuZGxpbmcgZWRnZSBjYXNlcyB3aGVyZVxuICogYnJvd3NlciBkYXRldGltZS1sb2NhbCBpbnB1dHMgYmVoYXZlIGRpZmZlcmVudGx5IGFjcm9zcyBwbGF0Zm9ybXMuXG4gKiBSZXR1cm5zIG51bGwgZm9yIGludmFsaWQgZGF0ZXMgdG8gcHJldmVudCBzaWxlbnQgZmFpbHVyZXMuXG4gKi9cbmV4cG9ydCBjb25zdCBpbnB1dFZhbHVlVG9JU09TdHJpbmcgPSAoaW5wdXRWYWx1ZTogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCA9PiB7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIG5ldyBEYXRlKGlucHV0VmFsdWUpLnRvSVNPU3RyaW5nKCk7XG5cdH0gY2F0Y2gge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG59O1xuXG5leHBvcnQgY29uc3QgZm9ybWF0RHVyYXRpb24gPSAobWludXRlczogbnVtYmVyKTogc3RyaW5nID0+IHtcblx0Y29uc3QgaG91cnMgPSBNYXRoLmZsb29yKG1pbnV0ZXMgLyA2MCk7XG5cdGNvbnN0IG1pbnMgPSBtaW51dGVzICUgNjA7XG5cdHJldHVybiBgJHtTdHJpbmcoaG91cnMpLnBhZFN0YXJ0KDIsIFwiMFwiKX06JHtTdHJpbmcobWlucykucGFkU3RhcnQoMiwgXCIwXCIpfTowMGA7XG59O1xuXG4vKipcbiAqIFBhcnNlIHRpbWUgc3RyaW5nIGZyb20gZGF0ZXRpbWUgdmFsdWUgLSByZXR1cm5zIERhdGVUaW1lIG9iamVjdFxuICogUmVqZWN0cyBwbGFpbiBISDptbSBmb3JtYXQsIHJlcXVpcmVzIGZ1bGwgZGF0ZXRpbWVcbiAqL1xuZXhwb3J0IGNvbnN0IHBhcnNlVGltZVN0cmluZyA9ICh2YWx1ZTogc3RyaW5nIHwgbnVsbCk6IERhdGVUaW1lIHwgdW5kZWZpbmVkID0+IHtcblx0aWYgKHZhbHVlID09PSBudWxsKSByZXR1cm4gdW5kZWZpbmVkO1xuXG5cdGNvbnN0IHYgPSB2YWx1ZS50cmltKCk7XG5cblx0Ly8gUmVqZWN0IHBsYWluIEhIOm1tIGZvcm1hdCAtIHJlcXVpcmUgZnVsbCBkYXRldGltZVxuXHRpZiAoL15cXGR7Mn06XFxkezJ9JC8udGVzdCh2KSkge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7IC8vIFJlamVjdCBwbGFpbiB0aW1lIGZvcm1hdFxuXHR9XG5cblx0Ly8gVHJ5IElTTyBmb3JtYXQgZmlyc3QgKG1vc3QgY29tbW9uKSAtIEVYQUNUIHNhbWUgbG9naWMgYXMgcmVjdXJyaW5nIGV2ZW50c1xuXHRsZXQgZHQgPSBEYXRlVGltZS5mcm9tSVNPKHYsIHsgc2V0Wm9uZTogdHJ1ZSB9KTsgLy8gSVNPOiB3aXRoL3dpdGhvdXQgc2Vjb25kcywgWi9vZmZzZXQsIFRcblx0aWYgKCFkdC5pc1ZhbGlkKSBkdCA9IERhdGVUaW1lLmZyb21TUUwodiwgeyBzZXRab25lOiB0cnVlIH0pOyAvLyBcIllZWVktTU0tREQgSEg6bW1bOnNzXVwiIGV0Yy5cblx0aWYgKCFkdC5pc1ZhbGlkKSBkdCA9IERhdGVUaW1lLmZyb21Gb3JtYXQodiwgXCJ5eXl5LU1NLWRkIEhIOm1tXCIsIHsgc2V0Wm9uZTogdHJ1ZSB9KTtcblxuXHRyZXR1cm4gZHQuaXNWYWxpZCA/IGR0IDogdW5kZWZpbmVkO1xufTtcblxuLyoqXG4gKiBQYXJzZSBhbmQgdmFsaWRhdGUgZGF0ZXRpbWUgc3RyaW5ncyBmb3IgZXZlbnQgcGFyc2luZ1xuICogU3VwcG9ydHMgbXVsdGlwbGUgZm9ybWF0cyBpbmNsdWRpbmcgZGF0ZS1vbmx5IGFuZCBkYXRldGltZSBmb3JtYXRzXG4gKi9cbmV4cG9ydCBjb25zdCBwYXJzZURhdGVUaW1lU3RyaW5nID0gKHZhbHVlOiBzdHJpbmcgfCBudWxsKTogRGF0ZVRpbWUgfCB1bmRlZmluZWQgPT4ge1xuXHRpZiAodmFsdWUgPT09IG51bGwpIHJldHVybiB1bmRlZmluZWQ7XG5cblx0Y29uc3QgdiA9IHZhbHVlLnRyaW0oKTtcblx0aWYgKCF2KSByZXR1cm4gdW5kZWZpbmVkO1xuXG5cdC8vIFRyeSBtdWx0aXBsZSBkYXRldGltZSBmb3JtYXRzIGluIG9yZGVyIG9mIHByZWZlcmVuY2Vcblx0bGV0IGR0OiBEYXRlVGltZTtcblxuXHQvLyAxLiBUcnkgSVNPIGZvcm1hdCBmaXJzdCAobW9zdCBjb21tb24pXG5cdGR0ID0gRGF0ZVRpbWUuZnJvbUlTTyh2LCB7IHNldFpvbmU6IHRydWUgfSk7XG5cdGlmIChkdC5pc1ZhbGlkKSByZXR1cm4gZHQ7XG5cblx0Ly8gMi4gVHJ5IFNRTCBmb3JtYXQgKFlZWVktTU0tREQgSEg6bW06c3MpXG5cdGR0ID0gRGF0ZVRpbWUuZnJvbVNRTCh2LCB7IHNldFpvbmU6IHRydWUgfSk7XG5cdGlmIChkdC5pc1ZhbGlkKSByZXR1cm4gZHQ7XG5cblx0Ly8gMy4gVHJ5IGNvbW1vbiBmb3JtYXQgd2l0aCBzcGFjZSAoWVlZWS1NTS1ERCBISDptbSlcblx0ZHQgPSBEYXRlVGltZS5mcm9tRm9ybWF0KHYsIFwieXl5eS1NTS1kZCBISDptbVwiLCB7IHNldFpvbmU6IHRydWUgfSk7XG5cdGlmIChkdC5pc1ZhbGlkKSByZXR1cm4gZHQ7XG5cblx0Ly8gNC4gVHJ5IGRhdGUtb25seSBmb3JtYXQgKFlZWVktTU0tREQpIC0gdHJlYXQgYXMgc3RhcnQgb2YgZGF5XG5cdGR0ID0gRGF0ZVRpbWUuZnJvbUZvcm1hdCh2LCBcInl5eXktTU0tZGRcIiwgeyBzZXRab25lOiB0cnVlIH0pO1xuXHRpZiAoZHQuaXNWYWxpZCkgcmV0dXJuIGR0O1xuXG5cdC8vIDUuIFRyeSBJU08gZGF0ZSBmb3JtYXQgKFlZWVktTU0tREQpXG5cdGR0ID0gRGF0ZVRpbWUuZnJvbUlTTyh2LCB7IHNldFpvbmU6IHRydWUgfSk7XG5cdGlmIChkdC5pc1ZhbGlkKSByZXR1cm4gZHQ7XG5cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn07XG4iXX0=
105
+ //# sourceMappingURL=date-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date-utils.js","sourceRoot":"","sources":["../src/date-utils.ts"],"names":[],"mappings":"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","sourcesContent":["import { DateTime } from \"luxon\";\n\nexport const formatDateTimeForInput = (dateString: string): string => {\n\tif (!dateString) return \"\";\n\n\ttry {\n\t\tconst date = new Date(dateString);\n\t\t// Format for datetime-local input (YYYY-MM-DDTHH:mm)\n\t\tconst year = date.getFullYear();\n\t\tconst month = String(date.getMonth() + 1).padStart(2, \"0\");\n\t\tconst day = String(date.getDate()).padStart(2, \"0\");\n\t\tconst hours = String(date.getHours()).padStart(2, \"0\");\n\t\tconst minutes = String(date.getMinutes()).padStart(2, \"0\");\n\n\t\treturn `${year}-${month}-${day}T${hours}:${minutes}`;\n\t} catch {\n\t\treturn \"\";\n\t}\n};\n\nexport const formatDateForInput = (dateString: string): string => {\n\tif (!dateString) return \"\";\n\n\ttry {\n\t\tconst date = new Date(dateString);\n\t\tconst year = date.getFullYear();\n\t\tconst month = String(date.getMonth() + 1).padStart(2, \"0\");\n\t\tconst day = String(date.getDate()).padStart(2, \"0\");\n\n\t\treturn `${year}-${month}-${day}`;\n\t} catch {\n\t\treturn \"\";\n\t}\n};\n\n/**\n * Converts input value to ISO string, handling edge cases where\n * browser datetime-local inputs behave differently across platforms.\n * Returns null for invalid dates to prevent silent failures.\n */\nexport const inputValueToISOString = (inputValue: string): string | null => {\n\ttry {\n\t\treturn new Date(inputValue).toISOString();\n\t} catch {\n\t\treturn null;\n\t}\n};\n\nexport const formatDuration = (minutes: number): string => {\n\tconst hours = Math.floor(minutes / 60);\n\tconst mins = minutes % 60;\n\treturn `${String(hours).padStart(2, \"0\")}:${String(mins).padStart(2, \"0\")}:00`;\n};\n\n/**\n * Parse time string from datetime value - returns DateTime object\n * Rejects plain HH:mm format, requires full datetime\n */\nexport const parseTimeString = (value: string | null): DateTime | undefined => {\n\tif (value === null) return undefined;\n\n\tconst v = value.trim();\n\n\t// Reject plain HH:mm format - require full datetime\n\tif (/^\\d{2}:\\d{2}$/.test(v)) {\n\t\treturn undefined; // Reject plain time format\n\t}\n\n\t// Try ISO format first (most common) - EXACT same logic as recurring events\n\tlet dt = DateTime.fromISO(v, { setZone: true }); // ISO: with/without seconds, Z/offset, T\n\tif (!dt.isValid) dt = DateTime.fromSQL(v, { setZone: true }); // \"YYYY-MM-DD HH:mm[:ss]\" etc.\n\tif (!dt.isValid) dt = DateTime.fromFormat(v, \"yyyy-MM-dd HH:mm\", { setZone: true });\n\n\treturn dt.isValid ? dt : undefined;\n};\n\n/**\n * Parse and validate datetime strings for event parsing\n * Supports multiple formats including date-only and datetime formats\n */\nexport const parseDateTimeString = (value: string | null): DateTime | undefined => {\n\tif (value === null) return undefined;\n\n\tconst v = value.trim();\n\tif (!v) return undefined;\n\n\t// Try multiple datetime formats in order of preference\n\tlet dt: DateTime;\n\n\t// 1. Try ISO format first (most common)\n\tdt = DateTime.fromISO(v, { setZone: true });\n\tif (dt.isValid) return dt;\n\n\t// 2. Try SQL format (YYYY-MM-DD HH:mm:ss)\n\tdt = DateTime.fromSQL(v, { setZone: true });\n\tif (dt.isValid) return dt;\n\n\t// 3. Try common format with space (YYYY-MM-DD HH:mm)\n\tdt = DateTime.fromFormat(v, \"yyyy-MM-dd HH:mm\", { setZone: true });\n\tif (dt.isValid) return dt;\n\n\t// 4. Try date-only format (YYYY-MM-DD) - treat as start of day\n\tdt = DateTime.fromFormat(v, \"yyyy-MM-dd\", { setZone: true });\n\tif (dt.isValid) return dt;\n\n\t// 5. Try ISO date format (YYYY-MM-DD)\n\tdt = DateTime.fromISO(v, { setZone: true });\n\tif (dt.isValid) return dt;\n\n\treturn undefined;\n};\n"]}
@@ -81,4 +81,4 @@ export class BaseEvaluator {
81
81
  }));
82
82
  }
83
83
  }
84
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZhbHVhdG9yLWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZXZhbHVhdG9yLWJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBUUE7OztHQUdHO0FBQ0gsTUFBTSxPQUFnQixhQUFhO0lBTWxDLFlBQVksYUFBeUM7UUFMM0Msa0JBQWEsR0FFbkIsRUFBRSxDQUFDO1FBQ0MseUJBQW9CLEdBQXdCLElBQUksQ0FBQztRQUd4RCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1RCxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRWhDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7WUFDaEUsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUM3QyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzdCLENBQUMsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQU9EOztPQUVHO0lBQ0ssWUFBWSxDQUFDLEtBQWM7UUFDbEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7UUFFeEIsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFO2dCQUFFLFNBQVM7WUFFdkQsSUFBSSxDQUFDO2dCQUNKLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBRS9DLCtEQUErRDtnQkFDL0QsK0NBQStDO2dCQUMvQyxNQUFNLEVBQUUsR0FBRyxJQUFJLFFBQVEsQ0FBQyxJQUFJLEVBQUUsV0FBVyxlQUFlLElBQUksQ0FFaEQsQ0FBQztnQkFFYixxRUFBcUU7Z0JBQ3JFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFFUCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksaUNBQ25CLElBQUksS0FDUCxVQUFVLEVBQUUsZUFBZSxFQUMzQixFQUFFLElBQ0QsQ0FBQztZQUNKLENBQUM7WUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO2dCQUNoQixPQUFPLENBQUMsSUFBSSxDQUFDLDRCQUE0QixJQUFJLENBQUMsVUFBVSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDdEUsQ0FBQztRQUNGLENBQUM7SUFDRixDQUFDO0lBRUQ7O09BRUc7SUFDTyxZQUFZLENBQ3JCLElBQXVFLEVBQ3ZFLFdBQW9DO1FBRXBDLElBQUksQ0FBQztZQUNKLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUM3QixDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNoQixPQUFPLENBQUMsSUFBSSxDQUFDLDBCQUEwQixJQUFJLENBQUMsVUFBVSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDbkUsT0FBTyxTQUFTLENBQUM7UUFDbEIsQ0FBQztJQUNGLENBQUM7SUFFRDs7T0FFRztJQUNPLFFBQVEsQ0FBQyxNQUEyQjtRQUM3QyxPQUFPLE1BQU0sS0FBSyxJQUFJLENBQUM7SUFDeEIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsT0FBTztRQUNOLElBQUksSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7WUFDL0IsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3hDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUM7UUFDbEMsQ0FBQztRQUNELElBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRDs7T0FFRztJQUNILGtCQUFrQjtRQUNqQixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDO0lBQ2xDLENBQUM7SUFFRDs7T0FFRztJQUNILFdBQVc7UUFDVixNQUFNLGdCQUFnQixHQUFHLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUU5RSxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3hDLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVTtZQUMzQixPQUFPLEVBQUUsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7WUFDOUMsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO1NBQ3JCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBCZWhhdmlvclN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gXCJyeGpzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmFzZVJ1bGUge1xuXHRpZDogc3RyaW5nO1xuXHRleHByZXNzaW9uOiBzdHJpbmc7XG5cdGVuYWJsZWQ6IGJvb2xlYW47XG59XG5cbi8qKlxuICogR2VuZXJpYyBiYXNlIGNsYXNzIGZvciBldmFsdWF0aW5nIEphdmFTY3JpcHQgZXhwcmVzc2lvbnMgYWdhaW5zdCBmcm9udG1hdHRlciBvYmplY3RzLlxuICogUHJvdmlkZXMgcmVhY3RpdmUgY29tcGlsYXRpb24gb2YgcnVsZXMgdmlhIFJ4SlMgc3Vic2NyaXB0aW9uIGFuZCBzYWZlIGV2YWx1YXRpb24uXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYXNlRXZhbHVhdG9yPFRSdWxlIGV4dGVuZHMgQmFzZVJ1bGUsIFRTZXR0aW5ncz4ge1xuXHRwcm90ZWN0ZWQgY29tcGlsZWRSdWxlczogQXJyYXk8XG5cdFx0VFJ1bGUgJiB7IGZuOiAoZnJvbnRtYXR0ZXI6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiBib29sZWFuIH1cblx0PiA9IFtdO1xuXHRwcml2YXRlIHNldHRpbmdzU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCBudWxsID0gbnVsbDtcblxuXHRjb25zdHJ1Y3RvcihzZXR0aW5nc1N0b3JlOiBCZWhhdmlvclN1YmplY3Q8VFNldHRpbmdzPikge1xuXHRcdGNvbnN0IGluaXRpYWxSdWxlcyA9IHRoaXMuZXh0cmFjdFJ1bGVzKHNldHRpbmdzU3RvcmUudmFsdWUpO1xuXHRcdHRoaXMuY29tcGlsZVJ1bGVzKGluaXRpYWxSdWxlcyk7XG5cblx0XHR0aGlzLnNldHRpbmdzU3Vic2NyaXB0aW9uID0gc2V0dGluZ3NTdG9yZS5zdWJzY3JpYmUoKHNldHRpbmdzKSA9PiB7XG5cdFx0XHRjb25zdCBuZXdSdWxlcyA9IHRoaXMuZXh0cmFjdFJ1bGVzKHNldHRpbmdzKTtcblx0XHRcdHRoaXMuY29tcGlsZVJ1bGVzKG5ld1J1bGVzKTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBFeHRyYWN0IHJ1bGVzIGZyb20gc2V0dGluZ3Mgb2JqZWN0LiBNdXN0IGJlIGltcGxlbWVudGVkIGJ5IHN1YmNsYXNzZXMuXG5cdCAqL1xuXHRwcm90ZWN0ZWQgYWJzdHJhY3QgZXh0cmFjdFJ1bGVzKHNldHRpbmdzOiBUU2V0dGluZ3MpOiBUUnVsZVtdO1xuXG5cdC8qKlxuXHQgKiBDb21waWxlIHJ1bGVzIGludG8gZXhlY3V0YWJsZSBmdW5jdGlvbnMgd2l0aCBlcnJvciBoYW5kbGluZy5cblx0ICovXG5cdHByaXZhdGUgY29tcGlsZVJ1bGVzKHJ1bGVzOiBUUnVsZVtdKTogdm9pZCB7XG5cdFx0dGhpcy5jb21waWxlZFJ1bGVzID0gW107XG5cblx0XHRmb3IgKGNvbnN0IHJ1bGUgb2YgcnVsZXMpIHtcblx0XHRcdGlmICghcnVsZS5lbmFibGVkIHx8ICFydWxlLmV4cHJlc3Npb24udHJpbSgpKSBjb250aW51ZTtcblxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Y29uc3QgY2xlYW5FeHByZXNzaW9uID0gcnVsZS5leHByZXNzaW9uLnRyaW0oKTtcblxuXHRcdFx0XHQvLyBDcmVhdGUgYSBmdW5jdGlvbiB0aGF0IHRha2VzICdmbScgKGZyb250bWF0dGVyKSBhcyBwYXJhbWV0ZXJcblx0XHRcdFx0Ly8gYW5kIGV2YWx1YXRlcyB0aGUgZXhwcmVzc2lvbiBpbiB0aGF0IGNvbnRleHRcblx0XHRcdFx0Y29uc3QgZm4gPSBuZXcgRnVuY3Rpb24oXCJmbVwiLCBgcmV0dXJuICgke2NsZWFuRXhwcmVzc2lvbn0pO2ApIGFzIChcblx0XHRcdFx0XHRmcm9udG1hdHRlcjogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cblx0XHRcdFx0KSA9PiBib29sZWFuO1xuXG5cdFx0XHRcdC8vIFRlc3QgdGhlIGZ1bmN0aW9uIHdpdGggYSBkdW1teSBvYmplY3QgdG8gY2F0Y2ggc3ludGF4IGVycm9ycyBlYXJseVxuXHRcdFx0XHRmbih7fSk7XG5cblx0XHRcdFx0dGhpcy5jb21waWxlZFJ1bGVzLnB1c2goe1xuXHRcdFx0XHRcdC4uLnJ1bGUsXG5cdFx0XHRcdFx0ZXhwcmVzc2lvbjogY2xlYW5FeHByZXNzaW9uLFxuXHRcdFx0XHRcdGZuLFxuXHRcdFx0XHR9KTtcblx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRcdGNvbnNvbGUud2FybihgSW52YWxpZCBydWxlIGV4cHJlc3Npb24gXCIke3J1bGUuZXhwcmVzc2lvbn1cIjpgLCBlcnJvcik7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEV2YWx1YXRlIGEgc2luZ2xlIHJ1bGUgYWdhaW5zdCBmcm9udG1hdHRlci4gUmV0dXJucyB0aGUgcmVzdWx0IG9yIHVuZGVmaW5lZCBpZiBlcnJvci5cblx0ICovXG5cdHByb3RlY3RlZCBldmFsdWF0ZVJ1bGUoXG5cdFx0cnVsZTogVFJ1bGUgJiB7IGZuOiAoZnJvbnRtYXR0ZXI6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiBib29sZWFuIH0sXG5cdFx0ZnJvbnRtYXR0ZXI6IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG5cdCk6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuXHRcdHRyeSB7XG5cdFx0XHRyZXR1cm4gcnVsZS5mbihmcm9udG1hdHRlcik7XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdGNvbnNvbGUud2FybihgRXJyb3IgZXZhbHVhdGluZyBydWxlIFwiJHtydWxlLmV4cHJlc3Npb259XCI6YCwgZXJyb3IpO1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydCBldmFsdWF0aW9uIHJlc3VsdCB0byBib29sZWFuIC0gb25seSBleHBsaWNpdCB0cnVlIGlzIGNvbnNpZGVyZWQgdHJ1dGh5LlxuXHQgKi9cblx0cHJvdGVjdGVkIGlzVHJ1dGh5KHJlc3VsdDogYm9vbGVhbiB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiByZXN1bHQgPT09IHRydWU7XG5cdH1cblxuXHQvKipcblx0ICogQ2xlYW4gdXAgc3Vic2NyaXB0aW9ucyBhbmQgY29tcGlsZWQgcnVsZXMuXG5cdCAqL1xuXHRkZXN0cm95KCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLnNldHRpbmdzU3Vic2NyaXB0aW9uKSB7XG5cdFx0XHR0aGlzLnNldHRpbmdzU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG5cdFx0XHR0aGlzLnNldHRpbmdzU3Vic2NyaXB0aW9uID0gbnVsbDtcblx0XHR9XG5cdFx0dGhpcy5jb21waWxlZFJ1bGVzID0gW107XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBudW1iZXIgb2YgYWN0aXZlIChjb21waWxlZCkgcnVsZXMuXG5cdCAqL1xuXHRnZXRBY3RpdmVSdWxlQ291bnQoKTogbnVtYmVyIHtcblx0XHRyZXR1cm4gdGhpcy5jb21waWxlZFJ1bGVzLmxlbmd0aDtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgaW5mb3JtYXRpb24gYWJvdXQgYWxsIHJ1bGVzIGluY2x1ZGluZyB0aGVpciB2YWxpZGl0eS5cblx0ICovXG5cdGdldFJ1bGVJbmZvKCk6IEFycmF5PHsgZXhwcmVzc2lvbjogc3RyaW5nOyBpc1ZhbGlkOiBib29sZWFuOyBlbmFibGVkOiBib29sZWFuIH0+IHtcblx0XHRjb25zdCB2YWxpZEV4cHJlc3Npb25zID0gbmV3IFNldCh0aGlzLmNvbXBpbGVkUnVsZXMubWFwKChyKSA9PiByLmV4cHJlc3Npb24pKTtcblxuXHRcdHJldHVybiB0aGlzLmNvbXBpbGVkUnVsZXMubWFwKChydWxlKSA9PiAoe1xuXHRcdFx0ZXhwcmVzc2lvbjogcnVsZS5leHByZXNzaW9uLFxuXHRcdFx0aXNWYWxpZDogdmFsaWRFeHByZXNzaW9ucy5oYXMocnVsZS5leHByZXNzaW9uKSxcblx0XHRcdGVuYWJsZWQ6IHJ1bGUuZW5hYmxlZCxcblx0XHR9KSk7XG5cdH1cbn1cbiJdfQ==
84
+ //# sourceMappingURL=evaluator-base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evaluator-base.js","sourceRoot":"","sources":["../src/evaluator-base.ts"],"names":[],"mappings":"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","sourcesContent":["import type { BehaviorSubject, Subscription } from \"rxjs\";\n\nexport interface BaseRule {\n\tid: string;\n\texpression: string;\n\tenabled: boolean;\n}\n\n/**\n * Generic base class for evaluating JavaScript expressions against frontmatter objects.\n * Provides reactive compilation of rules via RxJS subscription and safe evaluation.\n */\nexport abstract class BaseEvaluator<TRule extends BaseRule, TSettings> {\n\tprotected compiledRules: Array<\n\t\tTRule & { fn: (frontmatter: Record<string, unknown>) => boolean }\n\t> = [];\n\tprivate settingsSubscription: Subscription | null = null;\n\n\tconstructor(settingsStore: BehaviorSubject<TSettings>) {\n\t\tconst initialRules = this.extractRules(settingsStore.value);\n\t\tthis.compileRules(initialRules);\n\n\t\tthis.settingsSubscription = settingsStore.subscribe((settings) => {\n\t\t\tconst newRules = this.extractRules(settings);\n\t\t\tthis.compileRules(newRules);\n\t\t});\n\t}\n\n\t/**\n\t * Extract rules from settings object. Must be implemented by subclasses.\n\t */\n\tprotected abstract extractRules(settings: TSettings): TRule[];\n\n\t/**\n\t * Compile rules into executable functions with error handling.\n\t */\n\tprivate compileRules(rules: TRule[]): void {\n\t\tthis.compiledRules = [];\n\n\t\tfor (const rule of rules) {\n\t\t\tif (!rule.enabled || !rule.expression.trim()) continue;\n\n\t\t\ttry {\n\t\t\t\tconst cleanExpression = rule.expression.trim();\n\n\t\t\t\t// Create a function that takes 'fm' (frontmatter) as parameter\n\t\t\t\t// and evaluates the expression in that context\n\t\t\t\tconst fn = new Function(\"fm\", `return (${cleanExpression});`) as (\n\t\t\t\t\tfrontmatter: Record<string, unknown>\n\t\t\t\t) => boolean;\n\n\t\t\t\t// Test the function with a dummy object to catch syntax errors early\n\t\t\t\tfn({});\n\n\t\t\t\tthis.compiledRules.push({\n\t\t\t\t\t...rule,\n\t\t\t\t\texpression: cleanExpression,\n\t\t\t\t\tfn,\n\t\t\t\t});\n\t\t\t} catch (error) {\n\t\t\t\tconsole.warn(`Invalid rule expression \"${rule.expression}\":`, error);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Evaluate a single rule against frontmatter. Returns the result or undefined if error.\n\t */\n\tprotected evaluateRule(\n\t\trule: TRule & { fn: (frontmatter: Record<string, unknown>) => boolean },\n\t\tfrontmatter: Record<string, unknown>\n\t): boolean | undefined {\n\t\ttry {\n\t\t\treturn rule.fn(frontmatter);\n\t\t} catch (error) {\n\t\t\tconsole.warn(`Error evaluating rule \"${rule.expression}\":`, error);\n\t\t\treturn undefined;\n\t\t}\n\t}\n\n\t/**\n\t * Convert evaluation result to boolean - only explicit true is considered truthy.\n\t */\n\tprotected isTruthy(result: boolean | undefined): boolean {\n\t\treturn result === true;\n\t}\n\n\t/**\n\t * Clean up subscriptions and compiled rules.\n\t */\n\tdestroy(): void {\n\t\tif (this.settingsSubscription) {\n\t\t\tthis.settingsSubscription.unsubscribe();\n\t\t\tthis.settingsSubscription = null;\n\t\t}\n\t\tthis.compiledRules = [];\n\t}\n\n\t/**\n\t * Get the number of active (compiled) rules.\n\t */\n\tgetActiveRuleCount(): number {\n\t\treturn this.compiledRules.length;\n\t}\n\n\t/**\n\t * Get information about all rules including their validity.\n\t */\n\tgetRuleInfo(): Array<{ expression: string; isValid: boolean; enabled: boolean }> {\n\t\tconst validExpressions = new Set(this.compiledRules.map((r) => r.expression));\n\n\t\treturn this.compiledRules.map((rule) => ({\n\t\t\texpression: rule.expression,\n\t\t\tisValid: validExpressions.has(rule.expression),\n\t\t\tenabled: rule.enabled,\n\t\t}));\n\t}\n}\n"]}
@@ -157,4 +157,4 @@ export const duplicateFileWithNewZettelId = (app, file, zettelIdProp) => __await
157
157
  }
158
158
  return newFile;
159
159
  });
160
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1vcGVyYXRpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2ZpbGUtb3BlcmF0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxLQUFLLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN2QyxPQUFPLEtBQUssSUFBSSxNQUFNLFdBQVcsQ0FBQztBQUNsQyxPQUFPLEVBQVksTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFeEQsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLENBQUMsWUFBb0IsRUFBVSxFQUFFO0lBQ3hELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsWUFBWSxZQUFZLEVBQUUsQ0FBQyxDQUFDO0FBQzVELENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLENBQUMsR0FBUSxFQUFTLEVBQUU7SUFDdkQsTUFBTSxVQUFVLEdBQWlCLEdBQUcsQ0FBQyxTQUFTLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDL0QsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2pCLElBQUksTUFBTSxDQUFDLHdCQUF3QixDQUFDLENBQUM7UUFDckMsTUFBTSxJQUFJLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFDRCxPQUFPLFVBQVUsQ0FBQztBQUNuQixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxDQUFPLEdBQVEsRUFBRSxZQUFvQixFQUFtQixFQUFFO0lBQzNGLE1BQU0sWUFBWSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMscUJBQXFCLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDbkUsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ25CLElBQUksTUFBTSxDQUFDLDBCQUEwQixZQUFZLEVBQUUsQ0FBQyxDQUFD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LENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNwRSxNQUFNLFFBQVEsR0FBRyxnQkFBZ0IsRUFBRSxDQUFDO0lBQ3BDLE1BQU0sV0FBVyxHQUFHLEdBQUcscUJBQXFCLElBQUksUUFBUSxFQUFFLENBQUM7SUFDM0QsTUFBTSxXQUFXLEdBQUcsc0JBQXNCLENBQUMsR0FBRyxFQUFFLFVBQVUsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUV6RSw0Q0FBNEM7SUFDNUMsTUFBTSxPQUFPLEdBQUcsTUFBTSxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFFN0QsbURBQW1EO0lBQ25ELElBQUksWUFBWSxFQUFFLENBQUM7UUFDbEIsTUFBTSxHQUFHLENBQUMsV0FBVyxDQUFDLGtCQUFrQixDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFO1lBQ3hELEVBQUUsQ0FBQyxZQUFZLENBQUMsR0FBRyxRQUFRLENBQUM7UUFDN0IsQ0FBQyxDQUFDLENBQUM7SUFDSixDQUFDO0lBRUQsT0FBTyxPQUFPLENBQUM7QUFDaEIsQ0FBQyxDQUFBLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBmcyBmcm9tIFwibm9kZTpmcy9wcm9taXNlc1wiO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyB0eXBlIEFwcCwgTm90aWNlLCBURmlsZSB9IGZyb20gXCJvYnNpZGlhblwiO1xuaW1wb3J0IHsgZXh0cmFjdEZpbGVQYXRoRnJvbUxpbmsgfSBmcm9tIFwiLi9saW5rLXBhcnNlclwiO1xuXG5leHBvcnQgY29uc3QgZnJvbVJvb3QgPSAocmVsYXRpdmVQYXRoOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuXHRyZXR1cm4gcGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgYC4uLy4uLy4uLyR7cmVsYXRpdmVQYXRofWApO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEFjdGl2ZUZpbGVPclRocm93ID0gKGFwcDogQXBwKTogVEZpbGUgPT4ge1xuXHRjb25zdCBhY3RpdmVGaWxlOiBURmlsZSB8IG51bGwgPSBhcHAud29ya3NwYWNlLmdldEFjdGl2ZUZpbGUoKTtcblx0aWYgKCFhY3RpdmVGaWxlKSB7XG5cdFx0bmV3IE5vdGljZShg4pqg77iPICBPcGVuIGEgbm90ZSBmaXJzdC5gKTtcblx0XHR0aHJvdyBuZXcgRXJyb3IoYE9wZW4gYSBub3RlIGZpcnN0LmApO1xuXHR9XG5cdHJldHVybiBhY3RpdmVGaWxlO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFRlbXBsYXRlQ29udGVudCA9IGFzeW5jIChhcHA6IEFwcCwgdGVtcGxhdGVQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4gPT4ge1xuXHRjb25zdCB0ZW1wbGF0ZUZpbGUgPSBhcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKHRlbXBsYXRlUGF0aCk7XG5cdGlmICghdGVtcGxhdGVGaWxlKSB7XG5cdFx0bmV3IE5vdGljZShg4p2MICBUZW1wbGF0ZSBub3QgZm91bmQ6ICR7dGVtcGxhdGVQYXRofWApO1xuXHRcdHRocm93IG5ldyBFcnJvcihgVGVtcGxhdGUgbm90IGZvdW5kOiAke3RlbXBsYXRlUGF0aH1gKTtcblx0fVxuXG5cdHJldHVybiBhd2FpdCBhcHAudmF1bHQucmVhZCh0ZW1wbGF0ZUZpbGUgYXMgVEZpbGUpO1xufTtcblxuZXhwb3J0IGNvbnN0IGVuc3VyZUZvbGRlckV4aXN0cyA9IGFzeW5jIChhcHA6IEFwcCwgZm9sZGVyUGF0aDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiA9PiB7XG5cdGlmICghYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChmb2xkZXJQYXRoKSkge1xuXHRcdGF3YWl0IGFwcC52YXVsdC5jcmVhdGVGb2xkZXIoZm9sZGVyUGF0aCkuY2F0Y2goKCkgPT4ge30pO1xuXHR9XG59O1xuXG5leHBvcnQgY29uc3Qgb3BlbkZpbGVJbk5ld0xlYWYgPSBhc3luYyAoYXBwOiBBcHAsIGZpbGU6IFRGaWxlKTogUHJvbWlzZTx2b2lkPiA9PiB7XG5cdGF3YWl0IGFwcC53b3Jrc3BhY2UuZ2V0TGVhZih0cnVlKS5vcGVuRmlsZShmaWxlKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXROb3RlRmlsZXNGcm9tRGlyID0gYXN5bmMgKGRpcmVjdG9yeVBhdGg6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nW10+ID0+IHtcblx0Y29uc3QgZmlsZXMgPSBhd2FpdCBmcy5yZWFkZGlyKGRpcmVjdG9yeVBhdGgpO1xuXHRjb25zdCBkaXJlY3RvcnlOYW1lID0gcGF0aC5iYXNlbmFtZShkaXJlY3RvcnlQYXRoKTtcblxuXHRyZXR1cm4gZmlsZXMuZmlsdGVyKChmaWxlKSA9PiB7XG5cdFx0aWYgKCFmaWxlLmVuZHNXaXRoKFwiLm1kXCIpKSByZXR1cm4gZmFsc2U7XG5cblx0XHRjb25zdCBmaWxlTmFtZVdpdGhvdXRFeHQgPSBwYXRoLnBhcnNlKGZpbGUpLm5hbWU7XG5cdFx0aWYgKGZpbGVOYW1lV2l0aG91dEV4dCA9PT0gZGlyZWN0b3J5TmFtZSkge1xuXHRcdFx0Y29uc29sZS5sb2coYOKPre+4jyBTa2lwcGluZyBkaXJlY3RvcnktbGV2ZWwgZmlsZTogJHtmaWxlfWApO1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRUYXJnZXRGaWxlRnJvbUxpbmsgPSAoYXBwOiBBcHAsIHJlbGF0aW9uc2hpcExpbms6IHN0cmluZyk6IFRGaWxlIHwgbnVsbCA9PiB7XG5cdGNvbnN0IHRhcmdldEZpbGVQYXRoID0gZXh0cmFjdEZpbGVQYXRoRnJvbUxpbmsocmVsYXRpb25zaGlwTGluayk7XG5cdGlmICghdGFyZ2V0RmlsZVBhdGgpIHtcblx0XHRjb25zb2xlLndhcm4oYEZhaWxlZCB0byBleHRyYWN0IGZpbGUgcGF0aCBmcm9tIGxpbms6ICR7cmVsYXRpb25zaGlwTGlua31gKTtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdGNvbnN0IHRhcmdldEZpbGUgPSBhcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKHRhcmdldEZpbGVQYXRoKSBhcyBURmlsZTtcblx0aWYgKCF0YXJnZXRGaWxlKSB7XG5cdFx0Y29uc29sZS53YXJuKGBUYXJnZXQgZmlsZSBub3QgZm91bmQgZm9yIGxpbms6ICR7cmVsYXRpb25zaGlwTGlua31gKTtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdHJldHVybiB0YXJnZXRGaWxlO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUZpbGVMaW5rID0gKGZpbGU6IFRGaWxlKTogc3RyaW5nID0+IHtcblx0Y29uc3QgZm9sZGVyID0gZmlsZS5wYXJlbnQ/LnBhdGggJiYgZmlsZS5wYXJlbnQucGF0aCAhPT0gXCIvXCIgPyBmaWxlLnBhcmVudC5wYXRoIDogXCJcIjtcblx0cmV0dXJuIGZvbGRlciA/IGBbWyR7Zm9sZGVyfS8ke2ZpbGUuYmFzZW5hbWV9fCR7ZmlsZS5iYXNlbmFtZX1dXWAgOiBgW1ske2ZpbGUuYmFzZW5hbWV9XV1gO1xufTtcblxuZXhwb3J0IGNvbnN0IG5vcm1hbGl6ZUFycmF5ID0gKHZhbHVlOiBzdHJpbmcgfCBzdHJpbmdbXSB8IHVuZGVmaW5lZCk6IHN0cmluZ1tdID0+IHtcblx0aWYgKCF2YWx1ZSkge1xuXHRcdHJldHVybiBbXTtcblx0fVxuXHRpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSB7XG5cdFx0cmV0dXJuIFt2YWx1ZV07XG5cdH1cblx0aWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9XG5cdHJldHVybiBbXTtcbn07XG5cbmV4cG9ydCBjb25zdCBhcnJheXNFcXVhbCA9IChhOiBzdHJpbmdbXSwgYjogc3RyaW5nW10pOiBib29sZWFuID0+IHtcblx0cmV0dXJuIGEubGVuZ3RoID09PSBiLmxlbmd0aCAmJiBhLmV2ZXJ5KCh2YWwsIGluZGV4KSA9PiB2YWwgPT09IGJbaW5kZXhdKTtcbn07XG5cbi8qKlxuICogTm9ybWFsaXplcyBmcm9udG1hdHRlciBjb250ZW50IGJ5IGNvbnZlcnRpbmcgcXVvdGVkIG51bWVyaWMgX1pldHRlbElEcyB0byBudW1iZXJzLlxuICogVGhpcyBoYW5kbGVzIGVkZ2UgY2FzZXMgd2hlcmUgWUFNTCBwYXJzZXJzIHRyZWF0IG51bWVyaWMgc3RyaW5ncyBpbmNvbnNpc3RlbnRseS5cbiAqL1xuZXhwb3J0IGNvbnN0IG5vcm1hbGl6ZUNvbnRlbnQgPSAoY29udGVudDogc3RyaW5nKTogc3RyaW5nID0+IHtcblx0bGV0IG5vcm1hbGl6ZWQgPSBjb250ZW50O1xuXHRsZXQgaGFzQ2hhbmdlcyA9IGZhbHNlO1xuXG5cdC8vIE5vcm1hbGl6ZSBfWmV0dGVsSUQ6IFwic3RyaW5nXCIg4oaSIG51bWJlciAocmVtb3ZlIHF1b3Rlcylcblx0Y29uc3QgemV0dGVsSWRNYXRjaCA9IG5vcm1hbGl6ZWQubWF0Y2goL15fWmV0dGVsSUQ6XFxzKlwiKFxcZCspXCIvbSk7XG5cdGlmICh6ZXR0ZWxJZE1hdGNoKSB7XG5cdFx0Y29uc3QgW2Z1bGxNYXRjaCwgbnVtZXJpY0lkXSA9IHpldHRlbElkTWF0Y2g7XG5cdFx0Y29uc3QgcmVwbGFjZW1lbnQgPSBgX1pldHRlbElEOiAke251bWVyaWNJZH1gO1xuXHRcdG5vcm1hbGl6ZWQgPSBub3JtYWxpemVkLnJlcGxhY2UoZnVsbE1hdGNoLCByZXBsYWNlbWVudCk7XG5cdFx0aGFzQ2hhbmdlcyA9IHRydWU7XG5cdFx0Y29uc29sZS5sb2coYCAg4pyFIF9aZXR0ZWxJRDogXCIke251bWVyaWNJZH1cIiDihpIgJHtudW1lcmljSWR9YCk7XG5cdH1cblxuXHRyZXR1cm4gaGFzQ2hhbmdlcyA/IG5vcm1hbGl6ZWQgOiBjb250ZW50O1xufTtcblxuLyoqXG4gKiBTYWZlbHkgcGVyZm9ybXMgYSBmaWxlIG9wZXJhdGlvbiB3aXRoIGVycm9yIGhhbmRsaW5nIGFuZCBmaWxlIHZhbGlkYXRpb24uXG4gKiBSZWR1Y2VzIGJvaWxlcnBsYXRlIGZvciBjb21tb24gZmlsZSBvcGVyYXRpb25zLlxuICovXG5leHBvcnQgY29uc3Qgd2l0aEZpbGVPcGVyYXRpb24gPSBhc3luYyA8VD4oXG5cdGFwcDogQXBwLFxuXHRldmVudDogYW55LFxuXHRvcGVyYXRpb246IChmaWxlOiBURmlsZSkgPT4gUHJvbWlzZTxUPixcblx0ZXJyb3JNZXNzYWdlOiBzdHJpbmcgPSBcIk9wZXJhdGlvbiBmYWlsZWRcIlxuKTogUHJvbWlzZTxUIHwgbnVsbD4gPT4ge1xuXHR0cnkge1xuXHRcdGNvbnN0IGZpbGVQYXRoID0gZXZlbnQuZXh0ZW5kZWRQcm9wcy5maWxlUGF0aDtcblx0XHRjb25zdCBmaWxlID0gYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChmaWxlUGF0aCk7XG5cblx0XHRpZiAoIShmaWxlIGluc3RhbmNlb2YgVEZpbGUpKSB7XG5cdFx0XHRuZXcgTm90aWNlKFwiQ291bGQgbm90IGZpbmQgdGhlIGZpbGVcIik7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cblx0XHRyZXR1cm4gYXdhaXQgb3BlcmF0aW9uKGZpbGUpO1xuXHR9IGNhdGNoIChlcnJvcikge1xuXHRcdGNvbnNvbGUuZXJyb3IoYEVycm9yIGluIGZpbGUgb3BlcmF0aW9uOmAsIGVycm9yKTtcblx0XHRuZXcgTm90aWNlKGVycm9yTWVzc2FnZSk7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cbn07XG5cbi8qKlxuICogU2FmZWx5IHBlcmZvcm1zIGEgZmlsZSBvcGVyYXRpb24gYnkgZmlsZSBwYXRoIHdpdGggZXJyb3IgaGFuZGxpbmcgYW5kIGZpbGUgdmFsaWRhdGlvbi5cbiAqL1xuZXhwb3J0IGNvbnN0IHdpdGhGaWxlID0gYXN5bmMgPFQ+KFxuXHRhcHA6IEFwcCxcblx0ZmlsZVBhdGg6IHN0cmluZyxcblx0b3BlcmF0aW9uOiAoZmlsZTogVEZpbGUpID0+IFByb21pc2U8VD4sXG5cdGVycm9yTWVzc2FnZTogc3RyaW5nID0gXCJPcGVyYXRpb24gZmFpbGVkXCJcbik6IFByb21pc2U8VCB8IG51bGw+ID0+IHtcblx0dHJ5IHtcblx0XHRjb25zdCBmaWxlID0gYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChmaWxlUGF0aCk7XG5cblx0XHRpZiAoIShmaWxlIGluc3RhbmNlb2YgVEZpbGUpKSB7XG5cdFx0XHRuZXcgTm90aWNlKFwiQ291bGQgbm90IGZpbmQgdGhlIGZpbGVcIik7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cblx0XHRyZXR1cm4gYXdhaXQgb3BlcmF0aW9uKGZpbGUpO1xuXHR9IGNhdGNoIChlcnJvcikge1xuXHRcdGNvbnNvbGUuZXJyb3IoYEVycm9yIGluIGZpbGUgb3BlcmF0aW9uOmAsIGVycm9yKTtcblx0XHRuZXcgTm90aWNlKGVycm9yTWVzc2FnZSk7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cbn07XG5cbi8qKlxuICogRHVwbGljYXRlcyBhIGZpbGUgd2l0aCBhIG5ldyBaZXR0ZWxJRCwgcHJlc2VydmluZyB0aGUgb3JpZ2luYWwgY29udGVudFxuICogYnV0IHVwZGF0aW5nIHRoZSBaZXR0ZWxJRCBpbiBmcm9udG1hdHRlciBpZiBjb25maWd1cmVkLlxuICovXG5leHBvcnQgY29uc3QgZHVwbGljYXRlRmlsZVdpdGhOZXdaZXR0ZWxJZCA9IGFzeW5jIChcblx0YXBwOiBBcHAsXG5cdGZpbGU6IFRGaWxlLFxuXHR6ZXR0ZWxJZFByb3A/OiBzdHJpbmdcbik6IFByb21pc2U8VEZpbGU+ID0+IHtcblx0Y29uc3QgY29udGVudCA9IGF3YWl0IGFwcC52YXVsdC5yZWFkKGZpbGUpO1xuXHRjb25zdCB7IGdlbmVyYXRlWmV0dGVsSWQgfSA9IGF3YWl0IGltcG9ydChcIi4vZ2VuZXJhdGVcIik7XG5cdGNvbnN0IHsgZ2VuZXJhdGVVbmlxdWVGaWxlUGF0aCB9ID0gYXdhaXQgaW1wb3J0KFwiLi9maWxlLXV0aWxzXCIpO1xuXG5cdGNvbnN0IHBhcmVudFBhdGggPSBmaWxlLnBhcmVudD8ucGF0aCB8fCBcIlwiO1xuXHRjb25zdCBiYXNlTmFtZVdpdGhvdXRaZXR0ZWwgPSBmaWxlLmJhc2VuYW1lLnJlcGxhY2UoLy1cXGR7MTR9JC8sIFwiXCIpO1xuXHRjb25zdCB6ZXR0ZWxJZCA9IGdlbmVyYXRlWmV0dGVsSWQoKTtcblx0Y29uc3QgbmV3QmFzZW5hbWUgPSBgJHtiYXNlTmFtZVdpdGhvdXRaZXR0ZWx9LSR7emV0dGVsSWR9YDtcblx0Y29uc3QgbmV3RmlsZVBhdGggPSBnZW5lcmF0ZVVuaXF1ZUZpbGVQYXRoKGFwcCwgcGFyZW50UGF0aCwgbmV3QmFzZW5hbWUpO1xuXG5cdC8vIENyZWF0ZSB0aGUgbmV3IGZpbGUgd2l0aCBvcmlnaW5hbCBjb250ZW50XG5cdGNvbnN0IG5ld0ZpbGUgPSBhd2FpdCBhcHAudmF1bHQuY3JlYXRlKG5ld0ZpbGVQYXRoLCBjb250ZW50KTtcblxuXHQvLyBVcGRhdGUgdGhlIFpldHRlbElEIGluIGZyb250bWF0dGVyIGlmIGNvbmZpZ3VyZWRcblx0aWYgKHpldHRlbElkUHJvcCkge1xuXHRcdGF3YWl0IGFwcC5maWxlTWFuYWdlci5wcm9jZXNzRnJvbnRNYXR0ZXIobmV3RmlsZSwgKGZtKSA9PiB7XG5cdFx0XHRmbVt6ZXR0ZWxJZFByb3BdID0gemV0dGVsSWQ7XG5cdFx0fSk7XG5cdH1cblxuXHRyZXR1cm4gbmV3RmlsZTtcbn07XG4iXX0=
160
+ //# sourceMappingURL=file-operations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-operations.js","sourceRoot":"","sources":["../src/file-operations.ts"],"names":[],"mappings":"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","sourcesContent":["import * as fs from \"node:fs/promises\";\nimport * as path from \"node:path\";\nimport { type App, Notice, TFile } from \"obsidian\";\nimport { extractFilePathFromLink } from \"./link-parser\";\n\nexport const fromRoot = (relativePath: string): string => {\n\treturn path.resolve(__dirname, `../../../${relativePath}`);\n};\n\nexport const getActiveFileOrThrow = (app: App): TFile => {\n\tconst activeFile: TFile | null = app.workspace.getActiveFile();\n\tif (!activeFile) {\n\t\tnew Notice(`⚠️ Open a note first.`);\n\t\tthrow new Error(`Open a note first.`);\n\t}\n\treturn activeFile;\n};\n\nexport const getTemplateContent = async (app: App, templatePath: string): Promise<string> => {\n\tconst templateFile = app.vault.getAbstractFileByPath(templatePath);\n\tif (!templateFile) {\n\t\tnew Notice(`❌ Template not found: ${templatePath}`);\n\t\tthrow new Error(`Template not found: ${templatePath}`);\n\t}\n\n\treturn await app.vault.read(templateFile as TFile);\n};\n\nexport const ensureFolderExists = async (app: App, folderPath: string): Promise<void> => {\n\tif (!app.vault.getAbstractFileByPath(folderPath)) {\n\t\tawait app.vault.createFolder(folderPath).catch(() => {});\n\t}\n};\n\nexport const openFileInNewLeaf = async (app: App, file: TFile): Promise<void> => {\n\tawait app.workspace.getLeaf(true).openFile(file);\n};\n\nexport const getNoteFilesFromDir = async (directoryPath: string): Promise<string[]> => {\n\tconst files = await fs.readdir(directoryPath);\n\tconst directoryName = path.basename(directoryPath);\n\n\treturn files.filter((file) => {\n\t\tif (!file.endsWith(\".md\")) return false;\n\n\t\tconst fileNameWithoutExt = path.parse(file).name;\n\t\tif (fileNameWithoutExt === directoryName) {\n\t\t\tconsole.log(`⏭️ Skipping directory-level file: ${file}`);\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t});\n};\n\nexport const getTargetFileFromLink = (app: App, relationshipLink: string): TFile | null => {\n\tconst targetFilePath = extractFilePathFromLink(relationshipLink);\n\tif (!targetFilePath) {\n\t\tconsole.warn(`Failed to extract file path from link: ${relationshipLink}`);\n\t\treturn null;\n\t}\n\n\tconst targetFile = app.vault.getAbstractFileByPath(targetFilePath) as TFile;\n\tif (!targetFile) {\n\t\tconsole.warn(`Target file not found for link: ${relationshipLink}`);\n\t\treturn null;\n\t}\n\n\treturn targetFile;\n};\n\nexport const createFileLink = (file: TFile): string => {\n\tconst folder = file.parent?.path && file.parent.path !== \"/\" ? file.parent.path : \"\";\n\treturn folder ? `[[${folder}/${file.basename}|${file.basename}]]` : `[[${file.basename}]]`;\n};\n\nexport const normalizeArray = (value: string | string[] | undefined): string[] => {\n\tif (!value) {\n\t\treturn [];\n\t}\n\tif (typeof value === \"string\") {\n\t\treturn [value];\n\t}\n\tif (Array.isArray(value)) {\n\t\treturn value;\n\t}\n\treturn [];\n};\n\nexport const arraysEqual = (a: string[], b: string[]): boolean => {\n\treturn a.length === b.length && a.every((val, index) => val === b[index]);\n};\n\n/**\n * Normalizes frontmatter content by converting quoted numeric _ZettelIDs to numbers.\n * This handles edge cases where YAML parsers treat numeric strings inconsistently.\n */\nexport const normalizeContent = (content: string): string => {\n\tlet normalized = content;\n\tlet hasChanges = false;\n\n\t// Normalize _ZettelID: \"string\" → number (remove quotes)\n\tconst zettelIdMatch = normalized.match(/^_ZettelID:\\s*\"(\\d+)\"/m);\n\tif (zettelIdMatch) {\n\t\tconst [fullMatch, numericId] = zettelIdMatch;\n\t\tconst replacement = `_ZettelID: ${numericId}`;\n\t\tnormalized = normalized.replace(fullMatch, replacement);\n\t\thasChanges = true;\n\t\tconsole.log(` ✅ _ZettelID: \"${numericId}\" → ${numericId}`);\n\t}\n\n\treturn hasChanges ? normalized : content;\n};\n\n/**\n * Safely performs a file operation with error handling and file validation.\n * Reduces boilerplate for common file operations.\n */\nexport const withFileOperation = async <T>(\n\tapp: App,\n\tevent: any,\n\toperation: (file: TFile) => Promise<T>,\n\terrorMessage: string = \"Operation failed\"\n): Promise<T | null> => {\n\ttry {\n\t\tconst filePath = event.extendedProps.filePath;\n\t\tconst file = app.vault.getAbstractFileByPath(filePath);\n\n\t\tif (!(file instanceof TFile)) {\n\t\t\tnew Notice(\"Could not find the file\");\n\t\t\treturn null;\n\t\t}\n\n\t\treturn await operation(file);\n\t} catch (error) {\n\t\tconsole.error(`Error in file operation:`, error);\n\t\tnew Notice(errorMessage);\n\t\treturn null;\n\t}\n};\n\n/**\n * Safely performs a file operation by file path with error handling and file validation.\n */\nexport const withFile = async <T>(\n\tapp: App,\n\tfilePath: string,\n\toperation: (file: TFile) => Promise<T>,\n\terrorMessage: string = \"Operation failed\"\n): Promise<T | null> => {\n\ttry {\n\t\tconst file = app.vault.getAbstractFileByPath(filePath);\n\n\t\tif (!(file instanceof TFile)) {\n\t\t\tnew Notice(\"Could not find the file\");\n\t\t\treturn null;\n\t\t}\n\n\t\treturn await operation(file);\n\t} catch (error) {\n\t\tconsole.error(`Error in file operation:`, error);\n\t\tnew Notice(errorMessage);\n\t\treturn null;\n\t}\n};\n\n/**\n * Duplicates a file with a new ZettelID, preserving the original content\n * but updating the ZettelID in frontmatter if configured.\n */\nexport const duplicateFileWithNewZettelId = async (\n\tapp: App,\n\tfile: TFile,\n\tzettelIdProp?: string\n): Promise<TFile> => {\n\tconst content = await app.vault.read(file);\n\tconst { generateZettelId } = await import(\"./generate\");\n\tconst { generateUniqueFilePath } = await import(\"./file-utils\");\n\n\tconst parentPath = file.parent?.path || \"\";\n\tconst baseNameWithoutZettel = file.basename.replace(/-\\d{14}$/, \"\");\n\tconst zettelId = generateZettelId();\n\tconst newBasename = `${baseNameWithoutZettel}-${zettelId}`;\n\tconst newFilePath = generateUniqueFilePath(app, parentPath, newBasename);\n\n\t// Create the new file with original content\n\tconst newFile = await app.vault.create(newFilePath, content);\n\n\t// Update the ZettelID in frontmatter if configured\n\tif (zettelIdProp) {\n\t\tawait app.fileManager.processFrontMatter(newFile, (fm) => {\n\t\t\tfm[zettelIdProp] = zettelId;\n\t\t});\n\t}\n\n\treturn newFile;\n};\n"]}
@@ -22,4 +22,4 @@ export const isFileInConfiguredDirectory = (filePath, directory) => {
22
22
  const normalizedDir = directory.endsWith("/") ? directory.slice(0, -1) : directory;
23
23
  return filePath.startsWith(`${normalizedDir}/`) || filePath === normalizedDir;
24
24
  };
25
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS11dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9maWxlLXV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLENBQ3JDLEdBQVEsRUFDUixNQUFjLEVBQ2QsUUFBZ0IsRUFDaEIsWUFBb0IsSUFBSSxFQUNmLEVBQUU7SUFDWCxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUM5QyxJQUFJLFFBQVEsR0FBRyxHQUFHLFVBQVUsR0FBRyxRQUFRLElBQUksU0FBUyxFQUFFLENBQUM7SUFDdkQsSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFDO0lBRWhCLE9BQU8sR0FBRyxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1FBQ2xELFFBQVEsR0FBRyxHQUFHLFVBQVUsR0FBRyxRQUFRLElBQUksT0FBTyxFQUFFLElBQUksU0FBUyxFQUFFLENBQUM7SUFDakUsQ0FBQztJQUVELE9BQU8sUUFBUSxDQUFDO0FBQ2pCLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLENBQUMsS0FBYSxFQUFVLEVBQUU7SUFDNUQsT0FBTyxLQUFLO1NBQ1YsT0FBTyxDQUFDLGVBQWUsRUFBRSxFQUFFLENBQUMsQ0FBQyxxQ0FBcUM7U0FDbEUsT0FBTyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyw4QkFBOEI7U0FDbkQsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyx1Q0FBdUM7U0FDM0QsT0FBTyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQyxrQ0FBa0M7U0FDeEQsV0FBVyxFQUFFLENBQUM7QUFDakIsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxRQUFnQixFQUFVLEVBQUU7SUFDL0QsT0FBTyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLFNBQVMsQ0FBQztBQUMvQyxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSwyQkFBMkIsR0FBRyxDQUFDLFFBQWdCLEVBQUUsU0FBaUIsRUFBVyxFQUFFO0lBQzNGLE1BQU0sYUFBYSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUNuRixPQUFPLFFBQVEsQ0FBQyxVQUFVLENBQUMsR0FBRyxhQUFhLEdBQUcsQ0FBQyxJQUFJLFFBQVEsS0FBSyxhQUFhLENBQUM7QUFDL0UsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tIFwib2JzaWRpYW5cIjtcblxuZXhwb3J0IGNvbnN0IGdlbmVyYXRlVW5pcXVlRmlsZVBhdGggPSAoXG5cdGFwcDogQXBwLFxuXHRmb2xkZXI6IHN0cmluZyxcblx0YmFzZU5hbWU6IHN0cmluZyxcblx0ZXh0ZW5zaW9uOiBzdHJpbmcgPSBcIm1kXCJcbik6IHN0cmluZyA9PiB7XG5cdGNvbnN0IGZvbGRlclBhdGggPSBmb2xkZXIgPyBgJHtmb2xkZXJ9L2AgOiBcIlwiO1xuXHRsZXQgZmlsZVBhdGggPSBgJHtmb2xkZXJQYXRofSR7YmFzZU5hbWV9LiR7ZXh0ZW5zaW9ufWA7XG5cdGxldCBjb3VudGVyID0gMTtcblxuXHR3aGlsZSAoYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChmaWxlUGF0aCkpIHtcblx0XHRmaWxlUGF0aCA9IGAke2ZvbGRlclBhdGh9JHtiYXNlTmFtZX0gJHtjb3VudGVyKyt9LiR7ZXh0ZW5zaW9ufWA7XG5cdH1cblxuXHRyZXR1cm4gZmlsZVBhdGg7XG59O1xuXG5leHBvcnQgY29uc3Qgc2FuaXRpemVGb3JGaWxlbmFtZSA9IChpbnB1dDogc3RyaW5nKTogc3RyaW5nID0+IHtcblx0cmV0dXJuIGlucHV0XG5cdFx0LnJlcGxhY2UoL1s8PjpcIi9cXFxcfD8qXS9nLCBcIlwiKSAvLyBSZW1vdmUgaW52YWxpZCBmaWxlbmFtZSBjaGFyYWN0ZXJzXG5cdFx0LnJlcGxhY2UoL1xccysvZywgXCItXCIpIC8vIFJlcGxhY2Ugc3BhY2VzIHdpdGggaHlwaGVuc1xuXHRcdC5yZXBsYWNlKC8tKy9nLCBcIi1cIikgLy8gUmVwbGFjZSBtdWx0aXBsZSBoeXBoZW5zIHdpdGggc2luZ2xlXG5cdFx0LnJlcGxhY2UoL14tfC0kL2csIFwiXCIpIC8vIFJlbW92ZSBsZWFkaW5nL3RyYWlsaW5nIGh5cGhlbnNcblx0XHQudG9Mb3dlckNhc2UoKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRGaWxlbmFtZUZyb21QYXRoID0gKGZpbGVQYXRoOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuXHRyZXR1cm4gZmlsZVBhdGguc3BsaXQoXCIvXCIpLnBvcCgpIHx8IFwiVW5rbm93blwiO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzRmlsZUluQ29uZmlndXJlZERpcmVjdG9yeSA9IChmaWxlUGF0aDogc3RyaW5nLCBkaXJlY3Rvcnk6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xuXHRjb25zdCBub3JtYWxpemVkRGlyID0gZGlyZWN0b3J5LmVuZHNXaXRoKFwiL1wiKSA/IGRpcmVjdG9yeS5zbGljZSgwLCAtMSkgOiBkaXJlY3Rvcnk7XG5cdHJldHVybiBmaWxlUGF0aC5zdGFydHNXaXRoKGAke25vcm1hbGl6ZWREaXJ9L2ApIHx8IGZpbGVQYXRoID09PSBub3JtYWxpemVkRGlyO1xufTtcbiJdfQ==
25
+ //# sourceMappingURL=file-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-utils.js","sourceRoot":"","sources":["../src/file-utils.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,sBAAsB,GAAG,CACrC,GAAQ,EACR,MAAc,EACd,QAAgB,EAChB,YAAoB,IAAI,EACf,EAAE;IACX,MAAM,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9C,IAAI,QAAQ,GAAG,GAAG,UAAU,GAAG,QAAQ,IAAI,SAAS,EAAE,CAAC;IACvD,IAAI,OAAO,GAAG,CAAC,CAAC;IAEhB,OAAO,GAAG,CAAC,KAAK,CAAC,qBAAqB,CAAC,QAAQ,CAAC,EAAE,CAAC;QAClD,QAAQ,GAAG,GAAG,UAAU,GAAG,QAAQ,IAAI,OAAO,EAAE,IAAI,SAAS,EAAE,CAAC;IACjE,CAAC;IAED,OAAO,QAAQ,CAAC;AACjB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,KAAa,EAAU,EAAE;IAC5D,OAAO,KAAK;SACV,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC,qCAAqC;SAClE,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,8BAA8B;SACnD,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,uCAAuC;SAC3D,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,kCAAkC;SACxD,WAAW,EAAE,CAAC;AACjB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,QAAgB,EAAU,EAAE;IAC/D,OAAO,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,SAAS,CAAC;AAC/C,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,QAAgB,EAAE,SAAiB,EAAW,EAAE;IAC3F,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACnF,OAAO,QAAQ,CAAC,UAAU,CAAC,GAAG,aAAa,GAAG,CAAC,IAAI,QAAQ,KAAK,aAAa,CAAC;AAC/E,CAAC,CAAC","sourcesContent":["import type { App } from \"obsidian\";\n\nexport const generateUniqueFilePath = (\n\tapp: App,\n\tfolder: string,\n\tbaseName: string,\n\textension: string = \"md\"\n): string => {\n\tconst folderPath = folder ? `${folder}/` : \"\";\n\tlet filePath = `${folderPath}${baseName}.${extension}`;\n\tlet counter = 1;\n\n\twhile (app.vault.getAbstractFileByPath(filePath)) {\n\t\tfilePath = `${folderPath}${baseName} ${counter++}.${extension}`;\n\t}\n\n\treturn filePath;\n};\n\nexport const sanitizeForFilename = (input: string): string => {\n\treturn input\n\t\t.replace(/[<>:\"/\\\\|?*]/g, \"\") // Remove invalid filename characters\n\t\t.replace(/\\s+/g, \"-\") // Replace spaces with hyphens\n\t\t.replace(/-+/g, \"-\") // Replace multiple hyphens with single\n\t\t.replace(/^-|-$/g, \"\") // Remove leading/trailing hyphens\n\t\t.toLowerCase();\n};\n\nexport const getFilenameFromPath = (filePath: string): string => {\n\treturn filePath.split(\"/\").pop() || \"Unknown\";\n};\n\nexport const isFileInConfiguredDirectory = (filePath: string, directory: string): boolean => {\n\tconst normalizedDir = directory.endsWith(\"/\") ? directory.slice(0, -1) : directory;\n\treturn filePath.startsWith(`${normalizedDir}/`) || filePath === normalizedDir;\n};\n"]}
package/dist/generate.js CHANGED
@@ -10,4 +10,4 @@ export const generateTimestamps = () => {
10
10
  const uniqueZettelId = generateZettelId();
11
11
  return { startDate: formattedStartDate, zettelId: uniqueZettelId };
12
12
  };
13
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZ2VuZXJhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBS0EsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsR0FBVyxFQUFFO0lBQzVDLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztJQUNwQyxNQUFNLFdBQVcsR0FBRyxDQUFDLE1BQWMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDeEUsT0FBTyxNQUFNLENBQ1osR0FBRyxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUUsR0FBRyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsV0FBVyxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUcsV0FBVyxDQUFDLGdCQUFnQixDQUFDLFVBQVUsRUFBRSxDQUFDLEdBQUcsV0FBVyxDQUFDLGdCQUFnQixDQUFDLFVBQVUsRUFBRSxDQUFDLEVBQUUsQ0FDalEsQ0FBQztBQUNILENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLEdBQWtCLEVBQUU7SUFDckQsTUFBTSxXQUFXLEdBQUcsQ0FBQyxNQUFjLEVBQVUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ2hGLE1BQU0sV0FBVyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7SUFFL0IsTUFBTSxrQkFBa0IsR0FBVyxHQUFHLFdBQVcsQ0FBQyxXQUFXLEVBQUUsSUFBSSxXQUFXLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDO0lBQ25KLE1BQU0sY0FBYyxHQUFXLGdCQUFnQixFQUFFLENBQUM7SUFFbEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxrQkFBa0IsRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFFLENBQUM7QUFDcEUsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBUaW1lc3RhbXBEYXRhIHtcblx0c3RhcnREYXRlOiBzdHJpbmc7XG5cdHpldHRlbElkOiBudW1iZXI7XG59XG5cbmV4cG9ydCBjb25zdCBnZW5lcmF0ZVpldHRlbElkID0gKCk6IG51bWJlciA9PiB7XG5cdGNvbnN0IGN1cnJlbnRUaW1lc3RhbXAgPSBuZXcgRGF0ZSgpO1xuXHRjb25zdCBwYWRXaXRoWmVybyA9IChudW1iZXI6IG51bWJlcikgPT4gU3RyaW5nKG51bWJlcikucGFkU3RhcnQoMiwgXCIwXCIpO1xuXHRyZXR1cm4gTnVtYmVyKFxuXHRcdGAke2N1cnJlbnRUaW1lc3RhbXAuZ2V0RnVsbFllYXIoKX0ke3BhZFdpdGhaZXJvKGN1cnJlbnRUaW1lc3RhbXAuZ2V0TW9udGgoKSArIDEpfSR7cGFkV2l0aFplcm8oY3VycmVudFRpbWVzdGFtcC5nZXREYXRlKCkpfSR7cGFkV2l0aFplcm8oY3VycmVudFRpbWVzdGFtcC5nZXRIb3VycygpKX0ke3BhZFdpdGhaZXJvKGN1cnJlbnRUaW1lc3RhbXAuZ2V0TWludXRlcygpKX0ke3BhZFdpdGhaZXJvKGN1cnJlbnRUaW1lc3RhbXAuZ2V0U2Vjb25kcygpKX1gXG5cdCk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2VuZXJhdGVUaW1lc3RhbXBzID0gKCk6IFRpbWVzdGFtcERhdGEgPT4ge1xuXHRjb25zdCBwYWRXaXRoWmVybyA9IChudW1iZXI6IG51bWJlcik6IHN0cmluZyA9PiBTdHJpbmcobnVtYmVyKS5wYWRTdGFydCgyLCBcIjBcIik7XG5cdGNvbnN0IGN1cnJlbnREYXRlID0gbmV3IERhdGUoKTtcblxuXHRjb25zdCBmb3JtYXR0ZWRTdGFydERhdGU6IHN0cmluZyA9IGAke2N1cnJlbnREYXRlLmdldEZ1bGxZZWFyKCl9LSR7cGFkV2l0aFplcm8oY3VycmVudERhdGUuZ2V0TW9udGgoKSArIDEpfS0ke3BhZFdpdGhaZXJvKGN1cnJlbnREYXRlLmdldERhdGUoKSl9YDtcblx0Y29uc3QgdW5pcXVlWmV0dGVsSWQ6IG51bWJlciA9IGdlbmVyYXRlWmV0dGVsSWQoKTtcblxuXHRyZXR1cm4geyBzdGFydERhdGU6IGZvcm1hdHRlZFN0YXJ0RGF0ZSwgemV0dGVsSWQ6IHVuaXF1ZVpldHRlbElkIH07XG59O1xuIl19
13
+ //# sourceMappingURL=generate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate.js","sourceRoot":"","sources":["../src/generate.ts"],"names":[],"mappings":"AAKA,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAW,EAAE;IAC5C,MAAM,gBAAgB,GAAG,IAAI,IAAI,EAAE,CAAC;IACpC,MAAM,WAAW,GAAG,CAAC,MAAc,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACxE,OAAO,MAAM,CACZ,GAAG,gBAAgB,CAAC,WAAW,EAAE,GAAG,WAAW,CAAC,gBAAgB,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,GAAG,WAAW,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,GAAG,WAAW,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,GAAG,WAAW,CAAC,gBAAgB,CAAC,UAAU,EAAE,CAAC,GAAG,WAAW,CAAC,gBAAgB,CAAC,UAAU,EAAE,CAAC,EAAE,CACjQ,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAkB,EAAE;IACrD,MAAM,WAAW,GAAG,CAAC,MAAc,EAAU,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAChF,MAAM,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC;IAE/B,MAAM,kBAAkB,GAAW,GAAG,WAAW,CAAC,WAAW,EAAE,IAAI,WAAW,CAAC,WAAW,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,IAAI,WAAW,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;IACnJ,MAAM,cAAc,GAAW,gBAAgB,EAAE,CAAC;IAElD,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,QAAQ,EAAE,cAAc,EAAE,CAAC;AACpE,CAAC,CAAC","sourcesContent":["export interface TimestampData {\n\tstartDate: string;\n\tzettelId: number;\n}\n\nexport const generateZettelId = (): number => {\n\tconst currentTimestamp = new Date();\n\tconst padWithZero = (number: number) => String(number).padStart(2, \"0\");\n\treturn Number(\n\t\t`${currentTimestamp.getFullYear()}${padWithZero(currentTimestamp.getMonth() + 1)}${padWithZero(currentTimestamp.getDate())}${padWithZero(currentTimestamp.getHours())}${padWithZero(currentTimestamp.getMinutes())}${padWithZero(currentTimestamp.getSeconds())}`\n\t);\n};\n\nexport const generateTimestamps = (): TimestampData => {\n\tconst padWithZero = (number: number): string => String(number).padStart(2, \"0\");\n\tconst currentDate = new Date();\n\n\tconst formattedStartDate: string = `${currentDate.getFullYear()}-${padWithZero(currentDate.getMonth() + 1)}-${padWithZero(currentDate.getDate())}`;\n\tconst uniqueZettelId: number = generateZettelId();\n\n\treturn { startDate: formattedStartDate, zettelId: uniqueZettelId };\n};\n"]}
package/dist/index.js CHANGED
@@ -11,4 +11,4 @@ export * from "./link-parser";
11
11
  export * from "./settings-store";
12
12
  export * from "./string-utils";
13
13
  export * from "./templater-utils";
14
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxlQUFlLENBQUM7QUFDOUIsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsWUFBWSxDQUFDO0FBQzNCLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsa0JBQWtCLENBQUM7QUFDakMsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLG1CQUFtQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4vYXN5bmMtdXRpbHNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2JhdGNoLW9wZXJhdGlvbnNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NoaWxkLXJlZmVyZW5jZS11dGlsc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vZGF0ZS1yZWN1cnJlbmNlLXV0aWxzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9kYXRlLXV0aWxzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9ldmFsdWF0b3ItYmFzZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vZmlsZS1vcGVyYXRpb25zXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9maWxlLXV0aWxzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9nZW5lcmF0ZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vbGluay1wYXJzZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3NldHRpbmdzLXN0b3JlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9zdHJpbmctdXRpbHNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3RlbXBsYXRlci11dGlsc1wiO1xuIl19
14
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC","sourcesContent":["export * from \"./async-utils\";\nexport * from \"./batch-operations\";\nexport * from \"./child-reference-utils\";\nexport * from \"./date-recurrence-utils\";\nexport * from \"./date-utils\";\nexport * from \"./evaluator-base\";\nexport * from \"./file-operations\";\nexport * from \"./file-utils\";\nexport * from \"./generate\";\nexport * from \"./link-parser\";\nexport * from \"./settings-store\";\nexport * from \"./string-utils\";\nexport * from \"./templater-utils\";\n"]}
@@ -16,4 +16,4 @@ export const extractFilePathFromLink = (link) => {
16
16
  return null;
17
17
  return filePath.endsWith(".md") ? filePath : `${filePath}.md`;
18
18
  };
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluay1wYXJzZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvbGluay1wYXJzZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcsQ0FBQyxJQUFZLEVBQWlCLEVBQUU7SUFDdEUsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO0lBQ3pELElBQUksQ0FBQyxLQUFLO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFFeEIsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2pDLElBQUksQ0FBQyxRQUFRO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFFM0IsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFFcEUsT0FBTyxRQUFRLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxLQUFLLENBQUM7QUFDL0QsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBIYW5kbGVzIGRpZmZlcmVudCBsaW5rIGZvcm1hdHMgYW5kIGVkZ2UgY2FzZXM6XG4gKiBbW0ZpbGVOYW1lXV0gLT4gRmlsZU5hbWUubWRcbiAqIFtbRm9sZGVyL0ZpbGVOYW1lXV0gLT4gRm9sZGVyL0ZpbGVOYW1lLm1kXG4gKiBbW0ZvbGRlci9GaWxlTmFtZXxEaXNwbGF5TmFtZV1dIC0+IEZvbGRlci9GaWxlTmFtZS5tZFxuICogTm9ybWFsaXplcyBwYXRocyBhbmQgaGFuZGxlcyBtYWxmb3JtZWQgbGlua3MgZ3JhY2VmdWxseS5cbiAqL1xuZXhwb3J0IGNvbnN0IGV4dHJhY3RGaWxlUGF0aEZyb21MaW5rID0gKGxpbms6IHN0cmluZyk6IHN0cmluZyB8IG51bGwgPT4ge1xuXHRjb25zdCBtYXRjaCA9IGxpbmsubWF0Y2goL1xcW1xcWyhbXnxcXF1dKz8pKD86XFx8Lio/KT9cXF1cXF0vKTtcblx0aWYgKCFtYXRjaCkgcmV0dXJuIG51bGw7XG5cblx0Y29uc3QgZmlsZVBhdGggPSBtYXRjaFsxXS50cmltKCk7XG5cdGlmICghZmlsZVBhdGgpIHJldHVybiBudWxsO1xuXG5cdGlmIChmaWxlUGF0aC5pbmNsdWRlcyhcIltbXCIpIHx8IGZpbGVQYXRoLmluY2x1ZGVzKFwiXV1cIikpIHJldHVybiBudWxsO1xuXG5cdHJldHVybiBmaWxlUGF0aC5lbmRzV2l0aChcIi5tZFwiKSA/IGZpbGVQYXRoIDogYCR7ZmlsZVBhdGh9Lm1kYDtcbn07XG4iXX0=
19
+ //# sourceMappingURL=link-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"link-parser.js","sourceRoot":"","sources":["../src/link-parser.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,IAAY,EAAiB,EAAE;IACtE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;IACzD,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IAExB,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACjC,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAE3B,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAEpE,OAAO,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,KAAK,CAAC;AAC/D,CAAC,CAAC","sourcesContent":["/**\n * Handles different link formats and edge cases:\n * [[FileName]] -> FileName.md\n * [[Folder/FileName]] -> Folder/FileName.md\n * [[Folder/FileName|DisplayName]] -> Folder/FileName.md\n * Normalizes paths and handles malformed links gracefully.\n */\nexport const extractFilePathFromLink = (link: string): string | null => {\n\tconst match = link.match(/\\[\\[([^|\\]]+?)(?:\\|.*?)?\\]\\]/);\n\tif (!match) return null;\n\n\tconst filePath = match[1].trim();\n\tif (!filePath) return null;\n\n\tif (filePath.includes(\"[[\") || filePath.includes(\"]]\")) return null;\n\n\treturn filePath.endsWith(\".md\") ? filePath : `${filePath}.md`;\n};\n"]}
@@ -76,4 +76,4 @@ export class SettingsStore {
76
76
  return JSON.stringify(this.currentSettings) !== JSON.stringify(defaults);
77
77
  }
78
78
  }
79
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dGluZ3Mtc3RvcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvc2V0dGluZ3Mtc3RvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUNBLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHdkMsTUFBTSxPQUFPLGFBQWE7SUFLekIsWUFBWSxNQUFjLEVBQUUsTUFBZTtRQUMxQyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksZUFBZSxDQUFtQixNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDMUUsQ0FBQztJQUVELElBQUksZUFBZTtRQUNsQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDO0lBQzdCLENBQUM7SUFFSyxZQUFZOztZQUNqQixJQUFJLENBQUM7Z0JBQ0osTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUMxQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLGFBQUosSUFBSSxjQUFKLElBQUksR0FBSSxFQUFFLENBQUMsQ0FBQztnQkFDaEQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBRS9CLDZDQUE2QztnQkFDN0MsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxLQUFLLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxhQUFKLElBQUksY0FBSixJQUFJLEdBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztvQkFDOUQsTUFBTSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQzNCLENBQUM7WUFDRixDQUFDO1lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztnQkFDaEIsT0FBTyxDQUFDLEtBQUssQ0FBQywwQ0FBMEMsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDakUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDM0MsTUFBTSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDM0IsQ0FBQztRQUNGLENBQUM7S0FBQTtJQUVLLFlBQVk7O1lBQ2pCLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ2xELENBQUM7S0FBQTtJQUVLLGNBQWMsQ0FBQyxPQUF5RDs7WUFDN0UsSUFBSSxDQUFDO2dCQUNKLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7Z0JBQ2xELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUVqRCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDL0IsTUFBTSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDM0IsQ0FBQztZQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7Z0JBQ2hCLE9BQU8sQ0FBQyxLQUFLLENBQUMsNEJBQTRCLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ25ELE1BQU0sS0FBSyxDQUFDO1lBQ2IsQ0FBQztRQUNGLENBQUM7S0FBQTtJQUVLLGFBQWE7O1lBQ2xCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDM0MsTUFBTSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDM0IsQ0FBQztLQUFBO0lBRUssY0FBYyxDQUNuQixHQUFNLEVBQ04sS0FBMEI7O1lBRTFCLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFO2dCQUN0QyxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsQ0FBQztnQkFDM0MsT0FBZSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztnQkFDOUIsT0FBTyxPQUFPLENBQUM7WUFDaEIsQ0FBQyxDQUFDLENBQUM7UUFDSixDQUFDO0tBQUE7SUFFSyxnQkFBZ0IsQ0FBQyxPQUFrQzs7WUFDeEQsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7Z0JBQ3RDLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQzdDLENBQUMsQ0FBQyxDQUFDO1FBQ0osQ0FBQztLQUFBO0lBRUQsV0FBVztRQUNWLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVELGlCQUFpQjtRQUNoQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDcEMsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzFFLENBQUM7Q0FDRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUGx1Z2luIH0gZnJvbSBcIm9ic2lkaWFuXCI7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHR5cGUgeyB6IH0gZnJvbSBcInpvZFwiO1xuXG5leHBvcnQgY2xhc3MgU2V0dGluZ3NTdG9yZTxUU2NoZW1hIGV4dGVuZHMgei5ab2RUeXBlQW55PiB7XG5cdHByaXZhdGUgcGx1Z2luOiBQbHVnaW47XG5cdHByaXZhdGUgc2NoZW1hOiBUU2NoZW1hO1xuXHRwdWJsaWMgcmVhZG9ubHkgc2V0dGluZ3MkOiBCZWhhdmlvclN1YmplY3Q8ei5pbmZlcjxUU2NoZW1hPj47XG5cblx0Y29uc3RydWN0b3IocGx1Z2luOiBQbHVnaW4sIHNjaGVtYTogVFNjaGVtYSkge1xuXHRcdHRoaXMucGx1Z2luID0gcGx1Z2luO1xuXHRcdHRoaXMuc2NoZW1hID0gc2NoZW1hO1xuXHRcdHRoaXMuc2V0dGluZ3MkID0gbmV3IEJlaGF2aW9yU3ViamVjdDx6LmluZmVyPFRTY2hlbWE+PihzY2hlbWEucGFyc2Uoe30pKTtcblx0fVxuXG5cdGdldCBjdXJyZW50U2V0dGluZ3MoKTogei5pbmZlcjxUU2NoZW1hPiB7XG5cdFx0cmV0dXJuIHRoaXMuc2V0dGluZ3MkLnZhbHVlO1xuXHR9XG5cblx0YXN5bmMgbG9hZFNldHRpbmdzKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5wbHVnaW4ubG9hZERhdGEoKTtcblx0XHRcdGNvbnN0IHNhbml0aXplZCA9IHRoaXMuc2NoZW1hLnBhcnNlKGRhdGEgPz8ge30pO1xuXHRcdFx0dGhpcy5zZXR0aW5ncyQubmV4dChzYW5pdGl6ZWQpO1xuXG5cdFx0XHQvLyBTYXZlIGJhY2sgaWYgZGF0YSB3YXMgc2FuaXRpemVkL25vcm1hbGl6ZWRcblx0XHRcdGlmIChKU09OLnN0cmluZ2lmeShzYW5pdGl6ZWQpICE9PSBKU09OLnN0cmluZ2lmeShkYXRhID8/IHt9KSkge1xuXHRcdFx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRjb25zb2xlLmVycm9yKFwiRmFpbGVkIHRvIGxvYWQgc2V0dGluZ3MsIHVzaW5nIGRlZmF1bHRzOlwiLCBlcnJvcik7XG5cdFx0XHR0aGlzLnNldHRpbmdzJC5uZXh0KHRoaXMuc2NoZW1hLnBhcnNlKHt9KSk7XG5cdFx0XHRhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xuXHRcdH1cblx0fVxuXG5cdGFzeW5jIHNhdmVTZXR0aW5ncygpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRhd2FpdCB0aGlzLnBsdWdpbi5zYXZlRGF0YSh0aGlzLmN1cnJlbnRTZXR0aW5ncyk7XG5cdH1cblxuXHRhc3luYyB1cGRhdGVTZXR0aW5ncyh1cGRhdGVyOiAoc2V0dGluZ3M6IHouaW5mZXI8VFNjaGVtYT4pID0+IHouaW5mZXI8VFNjaGVtYT4pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgbmV3U2V0dGluZ3MgPSB1cGRhdGVyKHRoaXMuY3VycmVudFNldHRpbmdzKTtcblx0XHRcdGNvbnN0IHZhbGlkYXRlZCA9IHRoaXMuc2NoZW1hLnBhcnNlKG5ld1NldHRpbmdzKTtcblxuXHRcdFx0dGhpcy5zZXR0aW5ncyQubmV4dCh2YWxpZGF0ZWQpO1xuXHRcdFx0YXdhaXQgdGhpcy5zYXZlU2V0dGluZ3MoKTtcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0Y29uc29sZS5lcnJvcihcIkZhaWxlZCB0byB1cGRhdGUgc2V0dGluZ3M6XCIsIGVycm9yKTtcblx0XHRcdHRocm93IGVycm9yO1xuXHRcdH1cblx0fVxuXG5cdGFzeW5jIHJlc2V0U2V0dGluZ3MoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0dGhpcy5zZXR0aW5ncyQubmV4dCh0aGlzLnNjaGVtYS5wYXJzZSh7fSkpO1xuXHRcdGF3YWl0IHRoaXMuc2F2ZVNldHRpbmdzKCk7XG5cdH1cblxuXHRhc3luYyB1cGRhdGVQcm9wZXJ0eTxLIGV4dGVuZHMga2V5b2Ygei5pbmZlcjxUU2NoZW1hPj4oXG5cdFx0a2V5OiBLLFxuXHRcdHZhbHVlOiB6LmluZmVyPFRTY2hlbWE+W0tdXG5cdCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGF3YWl0IHRoaXMudXBkYXRlU2V0dGluZ3MoKHNldHRpbmdzKSA9PiB7XG5cdFx0XHRjb25zdCB1cGRhdGVkID0gT2JqZWN0LmFzc2lnbih7fSwgc2V0dGluZ3MpO1xuXHRcdFx0KHVwZGF0ZWQgYXMgYW55KVtrZXldID0gdmFsdWU7XG5cdFx0XHRyZXR1cm4gdXBkYXRlZDtcblx0XHR9KTtcblx0fVxuXG5cdGFzeW5jIHVwZGF0ZVByb3BlcnRpZXModXBkYXRlczogUGFydGlhbDx6LmluZmVyPFRTY2hlbWE+Pik6IFByb21pc2U8dm9pZD4ge1xuXHRcdGF3YWl0IHRoaXMudXBkYXRlU2V0dGluZ3MoKHNldHRpbmdzKSA9PiB7XG5cdFx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc2V0dGluZ3MsIHVwZGF0ZXMpO1xuXHRcdH0pO1xuXHR9XG5cblx0Z2V0RGVmYXVsdHMoKTogei5pbmZlcjxUU2NoZW1hPiB7XG5cdFx0cmV0dXJuIHRoaXMuc2NoZW1hLnBhcnNlKHt9KTtcblx0fVxuXG5cdGhhc0N1c3RvbWl6YXRpb25zKCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IGRlZmF1bHRzID0gdGhpcy5nZXREZWZhdWx0cygpO1xuXHRcdHJldHVybiBKU09OLnN0cmluZ2lmeSh0aGlzLmN1cnJlbnRTZXR0aW5ncykgIT09IEpTT04uc3RyaW5naWZ5KGRlZmF1bHRzKTtcblx0fVxufVxuIl19
79
+ //# sourceMappingURL=settings-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings-store.js","sourceRoot":"","sources":["../src/settings-store.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Plugin } from \"obsidian\";\nimport { BehaviorSubject } from \"rxjs\";\nimport type { z } from \"zod\";\n\nexport class SettingsStore<TSchema extends z.ZodTypeAny> {\n\tprivate plugin: Plugin;\n\tprivate schema: TSchema;\n\tpublic readonly settings$: BehaviorSubject<z.infer<TSchema>>;\n\n\tconstructor(plugin: Plugin, schema: TSchema) {\n\t\tthis.plugin = plugin;\n\t\tthis.schema = schema;\n\t\tthis.settings$ = new BehaviorSubject<z.infer<TSchema>>(schema.parse({}));\n\t}\n\n\tget currentSettings(): z.infer<TSchema> {\n\t\treturn this.settings$.value;\n\t}\n\n\tasync loadSettings(): Promise<void> {\n\t\ttry {\n\t\t\tconst data = await this.plugin.loadData();\n\t\t\tconst sanitized = this.schema.parse(data ?? {});\n\t\t\tthis.settings$.next(sanitized);\n\n\t\t\t// Save back if data was sanitized/normalized\n\t\t\tif (JSON.stringify(sanitized) !== JSON.stringify(data ?? {})) {\n\t\t\t\tawait this.saveSettings();\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tconsole.error(\"Failed to load settings, using defaults:\", error);\n\t\t\tthis.settings$.next(this.schema.parse({}));\n\t\t\tawait this.saveSettings();\n\t\t}\n\t}\n\n\tasync saveSettings(): Promise<void> {\n\t\tawait this.plugin.saveData(this.currentSettings);\n\t}\n\n\tasync updateSettings(updater: (settings: z.infer<TSchema>) => z.infer<TSchema>): Promise<void> {\n\t\ttry {\n\t\t\tconst newSettings = updater(this.currentSettings);\n\t\t\tconst validated = this.schema.parse(newSettings);\n\n\t\t\tthis.settings$.next(validated);\n\t\t\tawait this.saveSettings();\n\t\t} catch (error) {\n\t\t\tconsole.error(\"Failed to update settings:\", error);\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tasync resetSettings(): Promise<void> {\n\t\tthis.settings$.next(this.schema.parse({}));\n\t\tawait this.saveSettings();\n\t}\n\n\tasync updateProperty<K extends keyof z.infer<TSchema>>(\n\t\tkey: K,\n\t\tvalue: z.infer<TSchema>[K]\n\t): Promise<void> {\n\t\tawait this.updateSettings((settings) => {\n\t\t\tconst updated = Object.assign({}, settings);\n\t\t\t(updated as any)[key] = value;\n\t\t\treturn updated;\n\t\t});\n\t}\n\n\tasync updateProperties(updates: Partial<z.infer<TSchema>>): Promise<void> {\n\t\tawait this.updateSettings((settings) => {\n\t\t\treturn Object.assign({}, settings, updates);\n\t\t});\n\t}\n\n\tgetDefaults(): z.infer<TSchema> {\n\t\treturn this.schema.parse({});\n\t}\n\n\thasCustomizations(): boolean {\n\t\tconst defaults = this.getDefaults();\n\t\treturn JSON.stringify(this.currentSettings) !== JSON.stringify(defaults);\n\t}\n}\n"]}
@@ -22,4 +22,4 @@ export const pluralize = (count) => {
22
22
  export const getWeekDirection = (weeks) => {
23
23
  return weeks > 0 ? "next" : "previous";
24
24
  };
25
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyaW5nLXV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3N0cmluZy11dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsQ0FBQyxHQUFXLEVBQVUsRUFBRTtJQUNqRCxJQUFJLENBQUMsR0FBRztRQUFFLE9BQU8sR0FBRyxDQUFDO0lBQ3JCLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQ2pFLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLENBQUMsYUFBcUIsRUFBVSxFQUFFO0lBQ3hFLDRFQUE0RTtJQUM1RSxNQUFNLFlBQVksR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDLG1EQUFtRCxDQUFDLENBQUM7SUFFOUYsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNsQixNQUFNLFFBQVEsR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakMsTUFBTSxlQUFlLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMzRCxNQUFNLFdBQVcsR0FBRyxlQUFlLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUUsT0FBTyxHQUFHLFFBQVEsS0FBSyxXQUFXLEdBQUcsQ0FBQztJQUN2QyxDQUFDO1NBQU0sQ0FBQztRQUNQLE9BQU8sR0FBRyxhQUFhLE1BQU0sQ0FBQztJQUMvQixDQUFDO0FBQ0YsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLENBQUMsS0FBYSxFQUFVLEVBQUU7SUFDbEQsT0FBTyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztBQUMvQixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLEtBQWEsRUFBdUIsRUFBRTtJQUN0RSxPQUFPLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDO0FBQ3hDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBjYXBpdGFsaXplID0gKHN0cjogc3RyaW5nKTogc3RyaW5nID0+IHtcblx0aWYgKCFzdHIpIHJldHVybiBzdHI7XG5cdHJldHVybiBzdHIuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBzdHIuc2xpY2UoMSkudG9Mb3dlckNhc2UoKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZW5lcmF0ZUR1cGxpY2F0ZWRUaXRsZSA9IChvcmlnaW5hbFRpdGxlOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuXHQvLyBDaGVjayBpZiB0aXRsZSBhbHJlYWR5IGhhcyBhIGNvdW50ZXIgcGF0dGVybiBsaWtlIFwiICgyKVwiLCBcIiAtIENvcHlcIiwgZXRjLlxuXHRjb25zdCBjb3VudGVyTWF0Y2ggPSBvcmlnaW5hbFRpdGxlLm1hdGNoKC9eKC4qPykoPzpcXHMqXFwoKFxcZCspXFwpfFxccyotP1xccypDb3B5KD86XFxzKihcXGQrKSk/KSQvKTtcblxuXHRpZiAoY291bnRlck1hdGNoKSB7XG5cdFx0Y29uc3QgYmFzZU5hbWUgPSBjb3VudGVyTWF0Y2hbMV07XG5cdFx0Y29uc3QgZXhpc3RpbmdDb3VudGVyID0gY291bnRlck1hdGNoWzJdIHx8IGNvdW50ZXJNYXRjaFszXTtcblx0XHRjb25zdCBuZXh0Q291bnRlciA9IGV4aXN0aW5nQ291bnRlciA/IHBhcnNlSW50KGV4aXN0aW5nQ291bnRlciwgMTApICsgMSA6IDI7XG5cdFx0cmV0dXJuIGAke2Jhc2VOYW1lfSAoJHtuZXh0Q291bnRlcn0pYDtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gYCR7b3JpZ2luYWxUaXRsZX0gKDIpYDtcblx0fVxufTtcblxuZXhwb3J0IGNvbnN0IHBsdXJhbGl6ZSA9IChjb3VudDogbnVtYmVyKTogc3RyaW5nID0+IHtcblx0cmV0dXJuIGNvdW50ID09PSAxID8gXCJcIiA6IFwic1wiO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFdlZWtEaXJlY3Rpb24gPSAod2Vla3M6IG51bWJlcik6IFwibmV4dFwiIHwgXCJwcmV2aW91c1wiID0+IHtcblx0cmV0dXJuIHdlZWtzID4gMCA/IFwibmV4dFwiIDogXCJwcmV2aW91c1wiO1xufTtcbiJdfQ==
25
+ //# sourceMappingURL=string-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"string-utils.js","sourceRoot":"","sources":["../src/string-utils.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,GAAW,EAAU,EAAE;IACjD,IAAI,CAAC,GAAG;QAAE,OAAO,GAAG,CAAC;IACrB,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;AACjE,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,aAAqB,EAAU,EAAE;IACxE,4EAA4E;IAC5E,MAAM,YAAY,GAAG,aAAa,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAC;IAE9F,IAAI,YAAY,EAAE,CAAC;QAClB,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;QACjC,MAAM,eAAe,GAAG,YAAY,CAAC,CAAC,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;QAC3D,MAAM,WAAW,GAAG,eAAe,CAAC,CAAC,CAAC,QAAQ,CAAC,eAAe,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5E,OAAO,GAAG,QAAQ,KAAK,WAAW,GAAG,CAAC;IACvC,CAAC;SAAM,CAAC;QACP,OAAO,GAAG,aAAa,MAAM,CAAC;IAC/B,CAAC;AACF,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,KAAa,EAAU,EAAE;IAClD,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;AAC/B,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,KAAa,EAAuB,EAAE;IACtE,OAAO,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC;AACxC,CAAC,CAAC","sourcesContent":["export const capitalize = (str: string): string => {\n\tif (!str) return str;\n\treturn str.charAt(0).toUpperCase() + str.slice(1).toLowerCase();\n};\n\nexport const generateDuplicatedTitle = (originalTitle: string): string => {\n\t// Check if title already has a counter pattern like \" (2)\", \" - Copy\", etc.\n\tconst counterMatch = originalTitle.match(/^(.*?)(?:\\s*\\((\\d+)\\)|\\s*-?\\s*Copy(?:\\s*(\\d+))?)$/);\n\n\tif (counterMatch) {\n\t\tconst baseName = counterMatch[1];\n\t\tconst existingCounter = counterMatch[2] || counterMatch[3];\n\t\tconst nextCounter = existingCounter ? parseInt(existingCounter, 10) + 1 : 2;\n\t\treturn `${baseName} (${nextCounter})`;\n\t} else {\n\t\treturn `${originalTitle} (2)`;\n\t}\n};\n\nexport const pluralize = (count: number): string => {\n\treturn count === 1 ? \"\" : \"s\";\n};\n\nexport const getWeekDirection = (weeks: number): \"next\" | \"previous\" => {\n\treturn weeks > 0 ? \"next\" : \"previous\";\n};\n"]}
@@ -48,4 +48,4 @@ export function createFromTemplate(app_1, templatePath_1, targetFolder_1, filena
48
48
  }
49
49
  });
50
50
  }
51
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGVyLXV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3RlbXBsYXRlci11dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFZLE1BQU0sRUFBRSxhQUFhLEVBQWMsTUFBTSxVQUFVLENBQUM7QUFFdkUsTUFBTSxZQUFZLEdBQUcsb0JBQW9CLENBQUM7QUFhMUMsU0FBZSxnQkFBZ0I7eURBQUMsR0FBUSxFQUFFLFNBQVMsR0FBRyxJQUFJOztRQUN6RCxNQUFNLElBQUksT0FBTyxDQUFPLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBRTNFLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUMzQixPQUFPLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxPQUFPLEdBQUcsU0FBUyxFQUFFLENBQUM7WUFDekMsTUFBTSxJQUFJLEdBQVEsTUFBQSxNQUFDLEdBQVcsQ0FBQyxPQUFPLDBDQUFFLFNBQVMsbURBQUcsWUFBWSxDQUFDLENBQUM7WUFDbEUsTUFBTSxHQUFHLEdBQUcsTUFBQSxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUUsU0FBUyxtQ0FBSSxJQUFJLENBQUM7WUFFcEMsTUFBTSxRQUFRLEdBQXlCLE1BQUEsR0FBRyxhQUFILEdBQUcsdUJBQUgsR0FBRyxDQUFFLDZCQUE2QiwwQ0FBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDckYsSUFBSSxPQUFPLFFBQVEsS0FBSyxVQUFVLEVBQUUsQ0FBQztnQkFDcEMsT0FBTyxFQUFFLDZCQUE2QixFQUFFLFFBQVEsRUFBRSxDQUFDO1lBQ3BELENBQUM7WUFDRCxNQUFNLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDOUMsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2IsQ0FBQztDQUFBO0FBRUQsTUFBTSxVQUFVLG9CQUFvQixDQUFDLEdBQVE7O0lBQzVDLE1BQU0sUUFBUSxHQUFHLE1BQUEsTUFBQyxHQUFXLENBQUMsT0FBTywwQ0FBRSxTQUFTLG1EQUFHLFlBQVksQ0FBQyxDQUFDO0lBQ2pFLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQztBQUNuQixDQUFDO0FBRUQsTUFBTSxVQUFnQixrQkFBa0I7eURBQ3ZDLEdBQVEsRUFDUixZQUFvQixFQUNwQixZQUFxQixFQUNyQixRQUFpQixFQUNqQixXQUFXLEdBQUcsS0FBSztRQUVuQixNQUFNLFNBQVMsR0FBRyxNQUFNLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNoQixPQUFPLENBQUMsSUFBSSxDQUFDLHVEQUF1RCxDQUFDLENBQUM7WUFDdEUsSUFBSSxNQUFNLENBQ1QsMEZBQTBGLENBQzFGLENBQUM7WUFDRixPQUFPLElBQUksQ0FBQztRQUNiLENBQUM7UUFFRCxNQUFNLFlBQVksR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztRQUMxRSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDbkIsT0FBTyxDQUFDLEtBQUssQ0FBQyx1QkFBdUIsWUFBWSxFQUFFLENBQUMsQ0FBQztZQUNyRCxJQUFJLE1BQU0sQ0FBQyw0QkFBNEIsWUFBWSwyQ0FBMkMsQ0FBQyxDQUFDO1lBQ2hHLE9BQU8sSUFBSSxDQUFDO1FBQ2IsQ0FBQztRQUVELElBQUksQ0FBQztZQUNKLE1BQU0sT0FBTyxHQUFHLE1BQU0sU0FBUyxDQUFDLDZCQUE2QixDQUM1RCxZQUFZLEVBQ1osWUFBWSxFQUNaLFFBQVEsRUFDUixXQUFXLENBQ1gsQ0FBQztZQUVGLE9BQU8sT0FBTyxhQUFQLE9BQU8sY0FBUCxPQUFPLEdBQUksSUFBSSxDQUFDO1FBQ3hCLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2hCLE9BQU8sQ0FBQyxLQUFLLENBQUMsb0NBQW9DLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDM0QsSUFBSSxNQUFNLENBQUMsOEVBQThFLENBQUMsQ0FBQztZQUMzRixPQUFPLElBQUksQ0FBQztRQUNiLENBQUM7SUFDRixDQUFDO0NBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0eXBlIEFwcCwgTm90aWNlLCBub3JtYWxpemVQYXRoLCB0eXBlIFRGaWxlIH0gZnJvbSBcIm9ic2lkaWFuXCI7XG5cbmNvbnN0IFRFTVBMQVRFUl9JRCA9IFwidGVtcGxhdGVyLW9ic2lkaWFuXCI7XG5cbnR5cGUgQ3JlYXRlRm4gPSAoXG5cdHRlbXBsYXRlRmlsZTogVEZpbGUsXG5cdGZvbGRlcj86IHN0cmluZyxcblx0ZmlsZW5hbWU/OiBzdHJpbmcsXG5cdG9wZW5OZXdOb3RlPzogYm9vbGVhblxuKSA9PiBQcm9taXNlPFRGaWxlIHwgdW5kZWZpbmVkPjtcblxuaW50ZXJmYWNlIFRlbXBsYXRlckxpa2Uge1xuXHRjcmVhdGVfbmV3X25vdGVfZnJvbV90ZW1wbGF0ZTogQ3JlYXRlRm47XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHdhaXRGb3JUZW1wbGF0ZXIoYXBwOiBBcHAsIHRpbWVvdXRNcyA9IDgwMDApOiBQcm9taXNlPFRlbXBsYXRlckxpa2UgfCBudWxsPiB7XG5cdGF3YWl0IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiBhcHAud29ya3NwYWNlLm9uTGF5b3V0UmVhZHkocmVzb2x2ZSkpO1xuXG5cdGNvbnN0IHN0YXJ0ZWQgPSBEYXRlLm5vdygpO1xuXHR3aGlsZSAoRGF0ZS5ub3coKSAtIHN0YXJ0ZWQgPCB0aW1lb3V0TXMpIHtcblx0XHRjb25zdCBwbHVnOiBhbnkgPSAoYXBwIGFzIGFueSkucGx1Z2lucz8uZ2V0UGx1Z2luPy4oVEVNUExBVEVSX0lEKTtcblx0XHRjb25zdCBhcGkgPSBwbHVnPy50ZW1wbGF0ZXIgPz8gbnVsbDtcblxuXHRcdGNvbnN0IGNyZWF0ZUZuOiBDcmVhdGVGbiB8IHVuZGVmaW5lZCA9IGFwaT8uY3JlYXRlX25ld19ub3RlX2Zyb21fdGVtcGxhdGU/LmJpbmQoYXBpKTtcblx0XHRpZiAodHlwZW9mIGNyZWF0ZUZuID09PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRcdHJldHVybiB7IGNyZWF0ZV9uZXdfbm90ZV9mcm9tX3RlbXBsYXRlOiBjcmVhdGVGbiB9O1xuXHRcdH1cblx0XHRhd2FpdCBuZXcgUHJvbWlzZSgocikgPT4gc2V0VGltZW91dChyLCAxNTApKTtcblx0fVxuXHRyZXR1cm4gbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVGVtcGxhdGVyQXZhaWxhYmxlKGFwcDogQXBwKTogYm9vbGVhbiB7XG5cdGNvbnN0IGluc3RhbmNlID0gKGFwcCBhcyBhbnkpLnBsdWdpbnM/LmdldFBsdWdpbj8uKFRFTVBMQVRFUl9JRCk7XG5cdHJldHVybiAhIWluc3RhbmNlO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlRnJvbVRlbXBsYXRlKFxuXHRhcHA6IEFwcCxcblx0dGVtcGxhdGVQYXRoOiBzdHJpbmcsXG5cdHRhcmdldEZvbGRlcj86IHN0cmluZyxcblx0ZmlsZW5hbWU/OiBzdHJpbmcsXG5cdG9wZW5OZXdOb3RlID0gZmFsc2Vcbik6IFByb21pc2U8VEZpbGUgfCBudWxsPiB7XG5cdGNvbnN0IHRlbXBsYXRlciA9IGF3YWl0IHdhaXRGb3JUZW1wbGF0ZXIoYXBwKTtcblx0aWYgKCF0ZW1wbGF0ZXIpIHtcblx0XHRjb25zb2xlLndhcm4oXCJUZW1wbGF0ZXIgaXNuJ3QgcmVhZHkgeWV0IChvciBub3QgaW5zdGFsbGVkL2VuYWJsZWQpLlwiKTtcblx0XHRuZXcgTm90aWNlKFxuXHRcdFx0XCJUZW1wbGF0ZXIgcGx1Z2luIGlzIG5vdCBhdmFpbGFibGUgb3IgZW5hYmxlZC4gUGxlYXNlIGVuc3VyZSBpdCBpcyBpbnN0YWxsZWQgYW5kIGVuYWJsZWQuXCJcblx0XHQpO1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0Y29uc3QgdGVtcGxhdGVGaWxlID0gYXBwLnZhdWx0LmdldEZpbGVCeVBhdGgobm9ybWFsaXplUGF0aCh0ZW1wbGF0ZVBhdGgpKTtcblx0aWYgKCF0ZW1wbGF0ZUZpbGUpIHtcblx0XHRjb25zb2xlLmVycm9yKGBUZW1wbGF0ZSBub3QgZm91bmQ6ICR7dGVtcGxhdGVQYXRofWApO1xuXHRcdG5ldyBOb3RpY2UoYFRlbXBsYXRlIGZpbGUgbm90IGZvdW5kOiAke3RlbXBsYXRlUGF0aH0uIFBsZWFzZSBlbnN1cmUgdGhlIHRlbXBsYXRlIGZpbGUgZXhpc3RzLmApO1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0dHJ5IHtcblx0XHRjb25zdCBuZXdGaWxlID0gYXdhaXQgdGVtcGxhdGVyLmNyZWF0ZV9uZXdfbm90ZV9mcm9tX3RlbXBsYXRlKFxuXHRcdFx0dGVtcGxhdGVGaWxlLFxuXHRcdFx0dGFyZ2V0Rm9sZGVyLFxuXHRcdFx0ZmlsZW5hbWUsXG5cdFx0XHRvcGVuTmV3Tm90ZVxuXHRcdCk7XG5cblx0XHRyZXR1cm4gbmV3RmlsZSA/PyBudWxsO1xuXHR9IGNhdGNoIChlcnJvcikge1xuXHRcdGNvbnNvbGUuZXJyb3IoXCJFcnJvciBjcmVhdGluZyBmaWxlIGZyb20gdGVtcGxhdGU6XCIsIGVycm9yKTtcblx0XHRuZXcgTm90aWNlKFwiRXJyb3IgY3JlYXRpbmcgZmlsZSBmcm9tIHRlbXBsYXRlLiBQbGVhc2UgZW5zdXJlIHRoZSB0ZW1wbGF0ZSBmaWxlIGlzIHZhbGlkLlwiKTtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxufVxuIl19
51
+ //# sourceMappingURL=templater-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"templater-utils.js","sourceRoot":"","sources":["../src/templater-utils.ts"],"names":[],"mappings":";AAAA,OAAO,EAAY,MAAM,EAAE,aAAa,EAAc,MAAM,UAAU,CAAC;AAEvE,MAAM,YAAY,GAAG,oBAAoB,CAAC;AAa1C,SAAe,gBAAgB;yDAAC,GAAQ,EAAE,SAAS,GAAG,IAAI;;QACzD,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;QAE3E,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC3B,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,GAAG,SAAS,EAAE,CAAC;YACzC,MAAM,IAAI,GAAQ,MAAA,MAAC,GAAW,CAAC,OAAO,0CAAE,SAAS,mDAAG,YAAY,CAAC,CAAC;YAClE,MAAM,GAAG,GAAG,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,SAAS,mCAAI,IAAI,CAAC;YAEpC,MAAM,QAAQ,GAAyB,MAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,6BAA6B,0CAAE,IAAI,CAAC,GAAG,CAAC,CAAC;YACrF,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE,CAAC;gBACpC,OAAO,EAAE,6BAA6B,EAAE,QAAQ,EAAE,CAAC;YACpD,CAAC;YACD,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QAC9C,CAAC;QACD,OAAO,IAAI,CAAC;IACb,CAAC;CAAA;AAED,MAAM,UAAU,oBAAoB,CAAC,GAAQ;;IAC5C,MAAM,QAAQ,GAAG,MAAA,MAAC,GAAW,CAAC,OAAO,0CAAE,SAAS,mDAAG,YAAY,CAAC,CAAC;IACjE,OAAO,CAAC,CAAC,QAAQ,CAAC;AACnB,CAAC;AAED,MAAM,UAAgB,kBAAkB;yDACvC,GAAQ,EACR,YAAoB,EACpB,YAAqB,EACrB,QAAiB,EACjB,WAAW,GAAG,KAAK;QAEnB,MAAM,SAAS,GAAG,MAAM,gBAAgB,CAAC,GAAG,CAAC,CAAC;QAC9C,IAAI,CAAC,SAAS,EAAE,CAAC;YAChB,OAAO,CAAC,IAAI,CAAC,uDAAuD,CAAC,CAAC;YACtE,IAAI,MAAM,CACT,0FAA0F,CAC1F,CAAC;YACF,OAAO,IAAI,CAAC;QACb,CAAC;QAED,MAAM,YAAY,GAAG,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC,CAAC;QAC1E,IAAI,CAAC,YAAY,EAAE,CAAC;YACnB,OAAO,CAAC,KAAK,CAAC,uBAAuB,YAAY,EAAE,CAAC,CAAC;YACrD,IAAI,MAAM,CAAC,4BAA4B,YAAY,2CAA2C,CAAC,CAAC;YAChG,OAAO,IAAI,CAAC;QACb,CAAC;QAED,IAAI,CAAC;YACJ,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,6BAA6B,CAC5D,YAAY,EACZ,YAAY,EACZ,QAAQ,EACR,WAAW,CACX,CAAC;YAEF,OAAO,OAAO,aAAP,OAAO,cAAP,OAAO,GAAI,IAAI,CAAC;QACxB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,OAAO,CAAC,KAAK,CAAC,oCAAoC,EAAE,KAAK,CAAC,CAAC;YAC3D,IAAI,MAAM,CAAC,8EAA8E,CAAC,CAAC;YAC3F,OAAO,IAAI,CAAC;QACb,CAAC;IACF,CAAC;CAAA","sourcesContent":["import { type App, Notice, normalizePath, type TFile } from \"obsidian\";\n\nconst TEMPLATER_ID = \"templater-obsidian\";\n\ntype CreateFn = (\n\ttemplateFile: TFile,\n\tfolder?: string,\n\tfilename?: string,\n\topenNewNote?: boolean\n) => Promise<TFile | undefined>;\n\ninterface TemplaterLike {\n\tcreate_new_note_from_template: CreateFn;\n}\n\nasync function waitForTemplater(app: App, timeoutMs = 8000): Promise<TemplaterLike | null> {\n\tawait new Promise<void>((resolve) => app.workspace.onLayoutReady(resolve));\n\n\tconst started = Date.now();\n\twhile (Date.now() - started < timeoutMs) {\n\t\tconst plug: any = (app as any).plugins?.getPlugin?.(TEMPLATER_ID);\n\t\tconst api = plug?.templater ?? null;\n\n\t\tconst createFn: CreateFn | undefined = api?.create_new_note_from_template?.bind(api);\n\t\tif (typeof createFn === \"function\") {\n\t\t\treturn { create_new_note_from_template: createFn };\n\t\t}\n\t\tawait new Promise((r) => setTimeout(r, 150));\n\t}\n\treturn null;\n}\n\nexport function isTemplaterAvailable(app: App): boolean {\n\tconst instance = (app as any).plugins?.getPlugin?.(TEMPLATER_ID);\n\treturn !!instance;\n}\n\nexport async function createFromTemplate(\n\tapp: App,\n\ttemplatePath: string,\n\ttargetFolder?: string,\n\tfilename?: string,\n\topenNewNote = false\n): Promise<TFile | null> {\n\tconst templater = await waitForTemplater(app);\n\tif (!templater) {\n\t\tconsole.warn(\"Templater isn't ready yet (or not installed/enabled).\");\n\t\tnew Notice(\n\t\t\t\"Templater plugin is not available or enabled. Please ensure it is installed and enabled.\"\n\t\t);\n\t\treturn null;\n\t}\n\n\tconst templateFile = app.vault.getFileByPath(normalizePath(templatePath));\n\tif (!templateFile) {\n\t\tconsole.error(`Template not found: ${templatePath}`);\n\t\tnew Notice(`Template file not found: ${templatePath}. Please ensure the template file exists.`);\n\t\treturn null;\n\t}\n\n\ttry {\n\t\tconst newFile = await templater.create_new_note_from_template(\n\t\t\ttemplateFile,\n\t\t\ttargetFolder,\n\t\t\tfilename,\n\t\t\topenNewNote\n\t\t);\n\n\t\treturn newFile ?? null;\n\t} catch (error) {\n\t\tconsole.error(\"Error creating file from template:\", error);\n\t\tnew Notice(\"Error creating file from template. Please ensure the template file is valid.\");\n\t\treturn null;\n\t}\n}\n"]}
@@ -3,4 +3,4 @@ export * from "./mocks/obsidian";
3
3
  export { createMockApp, createMockFile, createMockFileCache, Modal, Notice, Plugin, PluginSettingTab, Setting, TFile, } from "./mocks/obsidian";
4
4
  export * from "./mocks/utils";
5
5
  export { mockFileOperations, mockLinkParser, resetAllMocks, setupDefaultMockImplementations, setupMockImplementation, setupMockReturnValue, verifyMockCalls, } from "./mocks/utils";
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVzdGluZy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLHVDQUF1QztBQUN2QyxPQUFPLEVBQ04sYUFBYSxFQUNiLGNBQWMsRUFDZCxtQkFBbUIsRUFDbkIsS0FBSyxFQUNMLE1BQU0sRUFDTixNQUFNLEVBQ04sZ0JBQWdCLEVBQ2hCLE9BQU8sRUFDUCxLQUFLLEdBQ0wsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixjQUFjLGVBQWUsQ0FBQztBQUM5QixPQUFPLEVBQ04sa0JBQWtCLEVBQ2xCLGNBQWMsRUFDZCxhQUFhLEVBQ2IsK0JBQStCLEVBQy9CLHVCQUF1QixFQUN2QixvQkFBb0IsRUFDcEIsZUFBZSxHQUNmLE1BQU0sZUFBZSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4vbW9ja3Mvb2JzaWRpYW5cIjtcbi8vIFJlLWV4cG9ydCBjb21tb25seSB1c2VkIGNvbWJpbmF0aW9uc1xuZXhwb3J0IHtcblx0Y3JlYXRlTW9ja0FwcCxcblx0Y3JlYXRlTW9ja0ZpbGUsXG5cdGNyZWF0ZU1vY2tGaWxlQ2FjaGUsXG5cdE1vZGFsLFxuXHROb3RpY2UsXG5cdFBsdWdpbixcblx0UGx1Z2luU2V0dGluZ1RhYixcblx0U2V0dGluZyxcblx0VEZpbGUsXG59IGZyb20gXCIuL21vY2tzL29ic2lkaWFuXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9tb2Nrcy91dGlsc1wiO1xuZXhwb3J0IHtcblx0bW9ja0ZpbGVPcGVyYXRpb25zLFxuXHRtb2NrTGlua1BhcnNlcixcblx0cmVzZXRBbGxNb2Nrcyxcblx0c2V0dXBEZWZhdWx0TW9ja0ltcGxlbWVudGF0aW9ucyxcblx0c2V0dXBNb2NrSW1wbGVtZW50YXRpb24sXG5cdHNldHVwTW9ja1JldHVyblZhbHVlLFxuXHR2ZXJpZnlNb2NrQ2FsbHMsXG59IGZyb20gXCIuL21vY2tzL3V0aWxzXCI7XG4iXX0=
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/testing/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,uCAAuC;AACvC,OAAO,EACN,aAAa,EACb,cAAc,EACd,mBAAmB,EACnB,KAAK,EACL,MAAM,EACN,MAAM,EACN,gBAAgB,EAChB,OAAO,EACP,KAAK,GACL,MAAM,kBAAkB,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,OAAO,EACN,kBAAkB,EAClB,cAAc,EACd,aAAa,EACb,+BAA+B,EAC/B,uBAAuB,EACvB,oBAAoB,EACpB,eAAe,GACf,MAAM,eAAe,CAAC","sourcesContent":["export * from \"./mocks/obsidian\";\n// Re-export commonly used combinations\nexport {\n\tcreateMockApp,\n\tcreateMockFile,\n\tcreateMockFileCache,\n\tModal,\n\tNotice,\n\tPlugin,\n\tPluginSettingTab,\n\tSetting,\n\tTFile,\n} from \"./mocks/obsidian\";\nexport * from \"./mocks/utils\";\nexport {\n\tmockFileOperations,\n\tmockLinkParser,\n\tresetAllMocks,\n\tsetupDefaultMockImplementations,\n\tsetupMockImplementation,\n\tsetupMockReturnValue,\n\tverifyMockCalls,\n} from \"./mocks/utils\";\n"]}
@@ -217,4 +217,4 @@ export function createMockFileCache(frontmatter) {
217
217
  listItems: [],
218
218
  };
219
219
  }
220
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JzaWRpYW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdGVzdGluZy9tb2Nrcy9vYnNpZGlhbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBRTVCLHlCQUF5QjtBQUN6QixNQUFNLE9BQU8sTUFBTTtJQUtsQixZQUFZLEdBQVEsRUFBRSxRQUFhO1FBS25DLHNCQUFzQjtRQUN0QixrQkFBYSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUN4QixrQkFBYSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUN4QixhQUFRLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3pDLGFBQVEsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDaEQsV0FBTSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUNqQixhQUFRLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBRW5CLGFBQWE7UUFDYixrQkFBYSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUN4QixxQkFBZ0IsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDM0IsZUFBVSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUNyQixrQkFBYSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUV4QixnQkFBZ0I7UUFDaEIscUJBQWdCLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQzNCLHVCQUFrQixHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUM3Qiw0QkFBdUIsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDbEMsa0NBQTZCLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxD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LElBQUksT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLFFBQVEsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQztJQUNsQyxDQUFDO0lBQ0QsSUFBSSxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsU0FBUyxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDO0lBQ3BDLENBQUM7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNiLENBQUM7QUFFRCxtQ0FBbUM7QUFDbkMsTUFBTSxVQUFVLG1CQUFtQixDQUFDLFdBQWlDO0lBQ3BFLE9BQU87UUFDTixXQUFXLEVBQUUsV0FBVyxJQUFJLEVBQUU7UUFDOUIsbUJBQW1CLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSTtRQUNsRixRQUFRLEVBQUUsRUFBRTtRQUNaLFFBQVEsRUFBRSxFQUFFO1FBQ1osS0FBSyxFQUFFLEVBQUU7UUFDVCxNQUFNLEVBQUUsRUFBRTtRQUNWLElBQUksRUFBRSxFQUFFO1FBQ1IsU0FBUyxFQUFFLEVBQUU7S0FDYixDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHZpIH0gZnJvbSBcInZpdGVzdFwiO1xuXG4vLyBCYXNlIFBsdWdpbiBjbGFzcyBtb2NrXG5leHBvcnQgY2xhc3MgUGx1Z2luIHtcblx0YXBwOiBhbnk7XG5cdG1hbmlmZXN0OiBhbnk7XG5cdHNldHRpbmdzOiBhbnk7XG5cblx0Y29uc3RydWN0b3IoYXBwOiBhbnksIG1hbmlmZXN0OiBhbnkpIHtcblx0XHR0aGlzLmFwcCA9IGFwcDtcblx0XHR0aGlzLm1hbmlmZXN0ID0gbWFuaWZlc3Q7XG5cdH1cblxuXHQvLyBDb3JlIHBsdWdpbiBtZXRob2RzXG5cdGFkZFNldHRpbmdUYWIgPSB2aS5mbigpO1xuXHRyZWdpc3RlckV2ZW50ID0gdmkuZm4oKTtcblx0bG9hZERhdGEgPSB2aS5mbigpLm1vY2tSZXNvbHZlZFZhbHVlKHt9KTtcblx0c2F2ZURhdGEgPSB2aS5mbigpLm1vY2tSZXNvbHZlZFZhbHVlKHVuZGVmaW5lZCk7XG5cdG9ubG9hZCA9IHZpLmZuKCk7XG5cdG9udW5sb2FkID0gdmkuZm4oKTtcblxuXHQvLyBVSSBtZXRob2RzXG5cdGFkZFJpYmJvbkljb24gPSB2aS5mbigpO1xuXHRhZGRTdGF0dXNCYXJJdGVtID0gdmkuZm4oKTtcblx0YWRkQ29tbWFuZCA9IHZpLmZuKCk7XG5cdHJlbW92ZUNvbW1hbmQgPSB2aS5mbigpO1xuXG5cdC8vIEV2ZW50IG1ldGhvZHNcblx0cmVnaXN0ZXJEb21FdmVudCA9IHZpLmZuKCk7XG5cdHJlZ2lzdGVyQ29kZU1pcnJvciA9IHZpLmZuKCk7XG5cdHJlZ2lzdGVyRWRpdG9yRXh0ZW5zaW9uID0gdmkuZm4oKTtcblx0cmVnaXN0ZXJNYXJrZG93blBvc3RQcm9jZXNzb3IgPSB2aS5mbigpO1xuXHRyZWdpc3Rlck1hcmtkb3duQ29kZUJsb2NrUHJvY2Vzc29yID0gdmkuZm4oKTtcblx0cmVnaXN0ZXJPYnNpZGlhblByb3RvY29sSGFuZGxlciA9IHZpLmZuKCk7XG5cdHJlZ2lzdGVyRWRpdG9yU3VnZ2VzdCA9IHZpLmZuKCk7XG5cdHJlZ2lzdGVySG92ZXJMaW5rU291cmNlID0gdmkuZm4oKTtcblxuXHQvLyBJbnRlcnZhbCBtZXRob2RzXG5cdHJlZ2lzdGVySW50ZXJ2YWwgPSB2aS5mbigpO1xuXG5cdC8vIFZpZXcgYW5kIGV4dGVuc2lvbiBtZXRob2RzXG5cdHJlZ2lzdGVyVmlldyA9IHZpLmZuKCk7XG5cdHJlZ2lzdGVyRXh0ZW5zaW9ucyA9IHZpLmZuKCk7XG5cblx0Ly8gTGlmZWN5Y2xlIG1ldGhvZHNcblx0b25Vc2VyRW5hYmxlID0gdmkuZm4oKTtcblx0bG9hZCA9IHZpLmZuKCk7XG5cdHVubG9hZCA9IHZpLmZuKCk7XG5cblx0Ly8gT3RoZXIgbWV0aG9kc1xuXHRhZGRDaGlsZCA9IHZpLmZuKCk7XG5cdHJlbW92ZUNoaWxkID0gdmkuZm4oKTtcblx0cmVnaXN0ZXIgPSB2aS5mbigpO1xufVxuXG4vLyBQbHVnaW5TZXR0aW5nVGFiIG1vY2tcbmV4cG9ydCBjbGFzcyBQbHVnaW5TZXR0aW5nVGFiIHtcblx0YXBwOiBhbnk7XG5cdHBsdWdpbjogYW55O1xuXHRjb250YWluZXJFbDogSFRNTEVsZW1lbnQ7XG5cblx0Y29uc3RydWN0b3IoYXBwOiBhbnksIHBsdWdpbjogYW55KSB7XG5cdFx0dGhpcy5hcHAgPSBhcHA7XG5cdFx0dGhpcy5wbHVnaW4gPSBwbHVnaW47XG5cdFx0dGhpcy5jb250YWluZXJFbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cdH1cblxuXHRkaXNwbGF5ID0gdmkuZm4oKTtcbn1cblxuLy8gSXRlbVZpZXcgbW9ja1xuZXhwb3J0IGNsYXNzIEl0ZW1WaWV3IHtcblx0YXBwOiBhbnk7XG5cdGxlYWY6IGFueTtcblx0Y29udGFpbmVyRWw6IEhUTUxFbGVtZW50O1xuXG5cdGNvbnN0cnVjdG9yKGxlYWY6IGFueSkge1xuXHRcdHRoaXMubGVhZiA9IGxlYWY7XG5cdFx0dGhpcy5hcHAgPSBsZWFmPy5hcHA7XG5cdFx0dGhpcy5jb250YWluZXJFbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cdH1cblxuXHQvLyBEb24ndCBvdmVycmlkZSBvbk9wZW4vb25DbG9zZSAtIGxldCBzdWJjbGFzc2VzIGltcGxlbWVudCB0aGVtXG5cdC8vIFRoZXNlIG1ldGhvZHMgYXJlIGltcGxlbWVudGVkIGJ5IE1vdW50YWJsZVZpZXcgbWl4aW5cblxuXHQvLyBEb24ndCBwcm92aWRlIGRlZmF1bHQgaW1wbGVtZW50YXRpb25zIGZvciB0aGVzZSBtZXRob2RzXG5cdC8vIExldCBzdWJjbGFzc2VzIGltcGxlbWVudCB0aGVtXG5cdGdldFZpZXdUeXBlKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIFwibW9jay12aWV3XCI7XG5cdH1cblxuXHRnZXREaXNwbGF5VGV4dCgpOiBzdHJpbmcge1xuXHRcdHJldHVybiBcIk1vY2sgVmlld1wiO1xuXHR9XG5cblx0Z2V0SWNvbigpOiBzdHJpbmcge1xuXHRcdHJldHVybiBcIm1vY2staWNvblwiO1xuXHR9XG5cblx0Z2V0U3RhdGUgPSB2aS5mbigpLm1vY2tSZXR1cm5WYWx1ZSh7fSk7XG5cdHNldFN0YXRlID0gdmkuZm4oKS5tb2NrUmVzb2x2ZWRWYWx1ZSh1bmRlZmluZWQpO1xufVxuXG4vLyBTZXR0aW5nIGNvbXBvbmVudCBtb2NrXG5leHBvcnQgY2xhc3MgU2V0dGluZyB7XG5cdHNldHRpbmdFbDogSFRNTEVsZW1lbnQ7XG5cdG5hbWVFbDogSFRNTEVsZW1lbnQ7XG5cdGRlc2NFbDogSFRNTEVsZW1lbnQ7XG5cdGNvbnRyb2xFbDogSFRNTEVsZW1lbnQ7XG5cblx0Y29uc3RydWN0b3IoX2NvbnRhaW5lckVsOiBIVE1MRWxlbWVudCkge1xuXHRcdHRoaXMuc2V0dGluZ0VsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblx0XHR0aGlzLm5hbWVFbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cdFx0dGhpcy5kZXNjRWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXHRcdHRoaXMuY29udHJvbEVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblx0fVxuXG5cdHNldE5hbWUgPSB2aS5mbigpLm1vY2tSZXR1cm5UaGlzKCk7XG5cdHNldERlc2MgPSB2aS5mbigpLm1vY2tSZXR1cm5UaGlzKCk7XG5cdGFkZFRleHQgPSB2aS5mbigpLm1vY2tSZXR1cm5UaGlzKCk7XG5cdGFkZFRleHRBcmVhID0gdmkuZm4oKS5tb2NrUmV0dXJuVGhpcygpO1xufVxuXG4vLyBURm9sZGVyIG1vY2tcbmV4cG9ydCBjbGFzcyBURm9sZGVyIHtcblx0cGF0aDogc3RyaW5nO1xuXHRuYW1lOiBzdHJpbmc7XG5cdGNoaWxkcmVuOiBhbnlbXTtcblx0dmF1bHQ6IGFueTtcblx0cGFyZW50OiBURm9sZGVyIHwgbnVsbDtcblxuXHRjb25zdHJ1Y3RvcihwYXRoOiBzdHJpbmcpIHtcblx0XHR0aGlzLnBhdGggPSBwYXRoO1xuXHRcdHRoaXMubmFtZSA9IHBhdGguc3BsaXQoXCIvXCIpLnBvcCgpIHx8IFwiXCI7XG5cdFx0dGhpcy5jaGlsZHJlbiA9IFtdO1xuXHRcdHRoaXMudmF1bHQgPSB7fTtcblx0XHR0aGlzLnBhcmVudCA9IG51bGw7XG5cdH1cblxuXHRpc1Jvb3QoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMucGF0aCA9PT0gXCJcIiB8fCB0aGlzLnBhdGggPT09IFwiL1wiO1xuXHR9XG59XG5cbi8vIFRGaWxlIG1vY2sgd2l0aCBmdWxsIGludGVyZmFjZVxuZXhwb3J0IGNsYXNzIFRGaWxlIHtcblx0cGF0aDogc3RyaW5nO1xuXHRuYW1lOiBzdHJpbmc7XG5cdGJhc2VuYW1lOiBzdHJpbmc7XG5cdGV4dGVuc2lvbjogc3RyaW5nO1xuXHRzdGF0OiBhbnk7XG5cdHZhdWx0OiBhbnk7XG5cdHBhcmVudDogVEZvbGRlciB8IG51bGw7XG5cblx0Y29uc3RydWN0b3IocGF0aDogc3RyaW5nLCBwYXJlbnRQYXRoPzogc3RyaW5nKSB7XG5cdFx0dGhpcy5wYXRoID0gcGF0aDtcblx0XHR0aGlzLm5hbWUgPSBwYXRoLnNwbGl0KFwiL1wiKS5wb3AoKSB8fCBcIlwiO1xuXHRcdHRoaXMuYmFzZW5hbWUgPSB0aGlzLm5hbWUucmVwbGFjZSgvXFwuW14vLl0rJC8sIFwiXCIpOyAvLyBSZW1vdmUgZXh0ZW5zaW9uXG5cdFx0dGhpcy5leHRlbnNpb24gPSBwYXRoLnNwbGl0KFwiLlwiKS5wb3AoKSB8fCBcIm1kXCI7XG5cdFx0dGhpcy5zdGF0ID0ge307XG5cdFx0dGhpcy52YXVsdCA9IHt9O1xuXG5cdFx0Ly8gU2V0IHBhcmVudCBiYXNlZCBvbiBwYXRoIG9yIGV4cGxpY2l0IHBhcmVudFBhdGhcblx0XHRpZiAocGFyZW50UGF0aCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aGlzLnBhcmVudCA9IHBhcmVudFBhdGggPyBuZXcgVEZvbGRlcihwYXJlbnRQYXRoKSA6IG51bGw7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIERlcml2ZSBwYXJlbnQgZnJvbSBwYXRoXG5cdFx0XHRjb25zdCBsYXN0U2xhc2ggPSBwYXRoLmxhc3RJbmRleE9mKFwiL1wiKTtcblx0XHRcdGlmIChsYXN0U2xhc2ggPiAwKSB7XG5cdFx0XHRcdHRoaXMucGFyZW50ID0gbmV3IFRGb2xkZXIocGF0aC5zdWJzdHJpbmcoMCwgbGFzdFNsYXNoKSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLnBhcmVudCA9IG51bGw7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG5cbi8vIE1vZGFsIG1vY2tcbmV4cG9ydCBjbGFzcyBNb2RhbCB7XG5cdGFwcDogYW55O1xuXHRjb250YWluZXJFbDogSFRNTEVsZW1lbnQ7XG5cdHRpdGxlRWw6IEhUTUxFbGVtZW50O1xuXHRjb250ZW50RWw6IEhUTUxFbGVtZW50O1xuXG5cdGNvbnN0cnVjdG9yKGFwcDogYW55KSB7XG5cdFx0dGhpcy5hcHAgPSBhcHA7XG5cdFx0dGhpcy5jb250YWluZXJFbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cdFx0dGhpcy50aXRsZUVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblx0XHR0aGlzLmNvbnRlbnRFbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cdH1cblxuXHRvcGVuID0gdmkuZm4oKTtcblx0Y2xvc2UgPSB2aS5mbigpO1xuXHRvbk9wZW4gPSB2aS5mbigpO1xuXHRvbkNsb3NlID0gdmkuZm4oKTtcbn1cblxuLy8gTm90aWNlIG1vY2tcbmV4cG9ydCBjbGFzcyBOb3RpY2Uge1xuXHRjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcpIHtcblx0XHRjb25zb2xlLmxvZyhgTm90aWNlOiAke21lc3NhZ2V9YCk7XG5cdH1cbn1cblxuLy8gTWFya2Rvd25SZW5kZXJlciBtb2NrXG5leHBvcnQgY29uc3QgTWFya2Rvd25SZW5kZXJlciA9IHtcblx0cmVuZGVyOiB2aS5mbigpLm1vY2tSZXNvbHZlZFZhbHVlKHVuZGVmaW5lZCksXG59O1xuXG4vLyBEZWJvdW5jZSBmdW5jdGlvbiBtb2NrXG5leHBvcnQgZnVuY3Rpb24gZGVib3VuY2U8VCBleHRlbmRzICguLi5hcmdzOiBhbnlbXSkgPT4gYW55Pihcblx0ZnVuYzogVCxcblx0d2FpdDogbnVtYmVyLFxuXHRpbW1lZGlhdGU/OiBib29sZWFuXG4pOiBUIHtcblx0bGV0IHRpbWVvdXQ6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgbnVsbCA9IG51bGw7XG5cblx0cmV0dXJuICgoLi4uYXJnczogUGFyYW1ldGVyczxUPikgPT4ge1xuXHRcdGNvbnN0IGxhdGVyID0gKCkgPT4ge1xuXHRcdFx0dGltZW91dCA9IG51bGw7XG5cdFx0XHRpZiAoIWltbWVkaWF0ZSkgZnVuYyguLi5hcmdzKTtcblx0XHR9O1xuXG5cdFx0Y29uc3QgY2FsbE5vdyA9IGltbWVkaWF0ZSAmJiAhdGltZW91dDtcblxuXHRcdGlmICh0aW1lb3V0ICE9PSBudWxsKSB7XG5cdFx0XHRjbGVhclRpbWVvdXQodGltZW91dCk7XG5cdFx0fVxuXG5cdFx0dGltZW91dCA9IHNldFRpbWVvdXQobGF0ZXIsIHdhaXQpO1xuXG5cdFx0aWYgKGNhbGxOb3cpIGZ1bmMoLi4uYXJncyk7XG5cdH0pIGFzIFQ7XG59XG5cbi8vIEFwcCBtb2NrXG5leHBvcnQgY29uc3QgQXBwID0gdmkuZm4oKTtcblxuLy8gTW9jayBpbnRlcmZhY2VzIGZvciBUeXBlU2NyaXB0XG5leHBvcnQgaW50ZXJmYWNlIE1vY2tBcHAge1xuXHRmaWxlTWFuYWdlcjoge1xuXHRcdHByb2Nlc3NGcm9udE1hdHRlcjogUmV0dXJuVHlwZTx0eXBlb2YgdmkuZm4+O1xuXHR9O1xuXHRtZXRhZGF0YUNhY2hlOiB7XG5cdFx0Z2V0RmlsZUNhY2hlOiBSZXR1cm5UeXBlPHR5cGVvZiB2aS5mbj47XG5cdH07XG5cdHZhdWx0OiB7XG5cdFx0Z2V0QWJzdHJhY3RGaWxlQnlQYXRoOiBSZXR1cm5UeXBlPHR5cGVvZiB2aS5mbj47XG5cdFx0b246IFJldHVyblR5cGU8dHlwZW9mIHZpLmZuPjtcblx0XHRyZWFkOiBSZXR1cm5UeXBlPHR5cGVvZiB2aS5mbj47XG5cdFx0bW9kaWZ5OiBSZXR1cm5UeXBlPHR5cGVvZiB2aS5mbj47XG5cdFx0Y3JlYXRlOiBSZXR1cm5UeXBlPHR5cGVvZiB2aS5mbj47XG5cdFx0ZGVsZXRlOiBSZXR1cm5UeXBlPHR5cGVvZiB2aS5mbj47XG5cdFx0cmVuYW1lOiBSZXR1cm5UeXBlPHR5cGVvZiB2aS5mbj47XG5cdFx0Z2V0RmlsZXM6IFJldHVyblR5cGU8dHlwZW9mIHZpLmZuPjtcblx0XHRnZXRNYXJrZG93bkZpbGVzOiBSZXR1cm5UeXBlPHR5cGVvZiB2aS5mbj47XG5cdFx0Z2V0Rm9sZGVyQnlQYXRoOiBSZXR1cm5UeXBlPHR5cGVvZiB2aS5mbj47XG5cdH07XG5cdHdvcmtzcGFjZToge1xuXHRcdGdldEFjdGl2ZUZpbGU6IFJldHVyblR5cGU8dHlwZW9mIHZpLmZuPjtcblx0XHRvbjogUmV0dXJuVHlwZTx0eXBlb2YgdmkuZm4+O1xuXHR9O1xufVxuXG4vLyBIZWxwZXIgZnVuY3Rpb24gdG8gY3JlYXRlIGEgZnVsbHkgbW9ja2VkIGFwcFxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1vY2tBcHAoKTogTW9ja0FwcCB7XG5cdHJldHVybiB7XG5cdFx0ZmlsZU1hbmFnZXI6IHtcblx0XHRcdHByb2Nlc3NGcm9udE1hdHRlcjogdmkuZm4oKSxcblx0XHR9LFxuXHRcdG1ldGFkYXRhQ2FjaGU6IHtcblx0XHRcdGdldEZpbGVDYWNoZTogdmkuZm4oKSxcblx0XHR9LFxuXHRcdHZhdWx0OiB7XG5cdFx0XHRnZXRBYnN0cmFjdEZpbGVCeVBhdGg6IHZpLmZuKCksXG5cdFx0XHRvbjogdmkuZm4oKSxcblx0XHRcdHJlYWQ6IHZpLmZuKCksXG5cdFx0XHRtb2RpZnk6IHZpLmZuKCksXG5cdFx0XHRjcmVhdGU6IHZpLmZuKCksXG5cdFx0XHRkZWxldGU6IHZpLmZuKCksXG5cdFx0XHRyZW5hbWU6IHZpLmZuKCksXG5cdFx0XHRnZXRGaWxlczogdmkuZm4oKS5tb2NrUmV0dXJuVmFsdWUoW10pLFxuXHRcdFx0Z2V0TWFya2Rvd25GaWxlczogdmkuZm4oKS5tb2NrUmV0dXJuVmFsdWUoW10pLFxuXHRcdFx0Z2V0Rm9sZGVyQnlQYXRoOiB2aS5mbigpLFxuXHRcdH0sXG5cdFx0d29ya3NwYWNlOiB7XG5cdFx0XHRnZXRBY3RpdmVGaWxlOiB2aS5mbigpLFxuXHRcdFx0b246IHZpLmZuKCksXG5cdFx0fSxcblx0fTtcbn1cblxuLy8gSGVscGVyIHRvIGNyZWF0ZSBtb2NrIFRGaWxlIGluc3RhbmNlc1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1vY2tGaWxlKFxuXHRwYXRoOiBzdHJpbmcsXG5cdG9wdGlvbnM/OiB7XG5cdFx0YmFzZW5hbWU/OiBzdHJpbmc7XG5cdFx0cGFyZW50UGF0aD86IHN0cmluZztcblx0XHRleHRlbnNpb24/OiBzdHJpbmc7XG5cdH1cbik6IFRGaWxlIHtcblx0Y29uc3QgZmlsZSA9IG5ldyBURmlsZShwYXRoLCBvcHRpb25zPy5wYXJlbnRQYXRoKTtcblx0aWYgKG9wdGlvbnM/LmJhc2VuYW1lKSB7XG5cdFx0ZmlsZS5iYXNlbmFtZSA9IG9wdGlvbnMuYmFzZW5hbWU7XG5cdH1cblx0aWYgKG9wdGlvbnM/LmV4dGVuc2lvbikge1xuXHRcdGZpbGUuZXh0ZW5zaW9uID0gb3B0aW9ucy5leHRlbnNpb247XG5cdH1cblx0cmV0dXJuIGZpbGU7XG59XG5cbi8vIEhlbHBlciB0byBjcmVhdGUgbW9jayBmaWxlIGNhY2hlXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTW9ja0ZpbGVDYWNoZShmcm9udG1hdHRlcj86IFJlY29yZDxzdHJpbmcsIGFueT4pIHtcblx0cmV0dXJuIHtcblx0XHRmcm9udG1hdHRlcjogZnJvbnRtYXR0ZXIgfHwge30sXG5cdFx0ZnJvbnRtYXR0ZXJQb3NpdGlvbjogZnJvbnRtYXR0ZXIgPyB7IHN0YXJ0OiB7IGxpbmU6IDAgfSwgZW5kOiB7IGxpbmU6IDMgfSB9IDogbnVsbCxcblx0XHRzZWN0aW9uczogW10sXG5cdFx0aGVhZGluZ3M6IFtdLFxuXHRcdGxpbmtzOiBbXSxcblx0XHRlbWJlZHM6IFtdLFxuXHRcdHRhZ3M6IFtdLFxuXHRcdGxpc3RJdGVtczogW10sXG5cdH07XG59XG4iXX0=
220
+ //# sourceMappingURL=obsidian.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"obsidian.js","sourceRoot":"","sources":["../../../src/testing/mocks/obsidian.ts"],"names":[],"mappings":"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","sourcesContent":["import { vi } from \"vitest\";\n\n// Base Plugin class mock\nexport class Plugin {\n\tapp: any;\n\tmanifest: any;\n\tsettings: any;\n\n\tconstructor(app: any, manifest: any) {\n\t\tthis.app = app;\n\t\tthis.manifest = manifest;\n\t}\n\n\t// Core plugin methods\n\taddSettingTab = vi.fn();\n\tregisterEvent = vi.fn();\n\tloadData = vi.fn().mockResolvedValue({});\n\tsaveData = vi.fn().mockResolvedValue(undefined);\n\tonload = vi.fn();\n\tonunload = vi.fn();\n\n\t// UI methods\n\taddRibbonIcon = vi.fn();\n\taddStatusBarItem = vi.fn();\n\taddCommand = vi.fn();\n\tremoveCommand = vi.fn();\n\n\t// Event methods\n\tregisterDomEvent = vi.fn();\n\tregisterCodeMirror = vi.fn();\n\tregisterEditorExtension = vi.fn();\n\tregisterMarkdownPostProcessor = vi.fn();\n\tregisterMarkdownCodeBlockProcessor = vi.fn();\n\tregisterObsidianProtocolHandler = vi.fn();\n\tregisterEditorSuggest = vi.fn();\n\tregisterHoverLinkSource = vi.fn();\n\n\t// Interval methods\n\tregisterInterval = vi.fn();\n\n\t// View and extension methods\n\tregisterView = vi.fn();\n\tregisterExtensions = vi.fn();\n\n\t// Lifecycle methods\n\tonUserEnable = vi.fn();\n\tload = vi.fn();\n\tunload = vi.fn();\n\n\t// Other methods\n\taddChild = vi.fn();\n\tremoveChild = vi.fn();\n\tregister = vi.fn();\n}\n\n// PluginSettingTab mock\nexport class PluginSettingTab {\n\tapp: any;\n\tplugin: any;\n\tcontainerEl: HTMLElement;\n\n\tconstructor(app: any, plugin: any) {\n\t\tthis.app = app;\n\t\tthis.plugin = plugin;\n\t\tthis.containerEl = document.createElement(\"div\");\n\t}\n\n\tdisplay = vi.fn();\n}\n\n// ItemView mock\nexport class ItemView {\n\tapp: any;\n\tleaf: any;\n\tcontainerEl: HTMLElement;\n\n\tconstructor(leaf: any) {\n\t\tthis.leaf = leaf;\n\t\tthis.app = leaf?.app;\n\t\tthis.containerEl = document.createElement(\"div\");\n\t}\n\n\t// Don't override onOpen/onClose - let subclasses implement them\n\t// These methods are implemented by MountableView mixin\n\n\t// Don't provide default implementations for these methods\n\t// Let subclasses implement them\n\tgetViewType(): string {\n\t\treturn \"mock-view\";\n\t}\n\n\tgetDisplayText(): string {\n\t\treturn \"Mock View\";\n\t}\n\n\tgetIcon(): string {\n\t\treturn \"mock-icon\";\n\t}\n\n\tgetState = vi.fn().mockReturnValue({});\n\tsetState = vi.fn().mockResolvedValue(undefined);\n}\n\n// Setting component mock\nexport class Setting {\n\tsettingEl: HTMLElement;\n\tnameEl: HTMLElement;\n\tdescEl: HTMLElement;\n\tcontrolEl: HTMLElement;\n\n\tconstructor(_containerEl: HTMLElement) {\n\t\tthis.settingEl = document.createElement(\"div\");\n\t\tthis.nameEl = document.createElement(\"div\");\n\t\tthis.descEl = document.createElement(\"div\");\n\t\tthis.controlEl = document.createElement(\"div\");\n\t}\n\n\tsetName = vi.fn().mockReturnThis();\n\tsetDesc = vi.fn().mockReturnThis();\n\taddText = vi.fn().mockReturnThis();\n\taddTextArea = vi.fn().mockReturnThis();\n}\n\n// TFolder mock\nexport class TFolder {\n\tpath: string;\n\tname: string;\n\tchildren: any[];\n\tvault: any;\n\tparent: TFolder | null;\n\n\tconstructor(path: string) {\n\t\tthis.path = path;\n\t\tthis.name = path.split(\"/\").pop() || \"\";\n\t\tthis.children = [];\n\t\tthis.vault = {};\n\t\tthis.parent = null;\n\t}\n\n\tisRoot(): boolean {\n\t\treturn this.path === \"\" || this.path === \"/\";\n\t}\n}\n\n// TFile mock with full interface\nexport class TFile {\n\tpath: string;\n\tname: string;\n\tbasename: string;\n\textension: string;\n\tstat: any;\n\tvault: any;\n\tparent: TFolder | null;\n\n\tconstructor(path: string, parentPath?: string) {\n\t\tthis.path = path;\n\t\tthis.name = path.split(\"/\").pop() || \"\";\n\t\tthis.basename = this.name.replace(/\\.[^/.]+$/, \"\"); // Remove extension\n\t\tthis.extension = path.split(\".\").pop() || \"md\";\n\t\tthis.stat = {};\n\t\tthis.vault = {};\n\n\t\t// Set parent based on path or explicit parentPath\n\t\tif (parentPath !== undefined) {\n\t\t\tthis.parent = parentPath ? new TFolder(parentPath) : null;\n\t\t} else {\n\t\t\t// Derive parent from path\n\t\t\tconst lastSlash = path.lastIndexOf(\"/\");\n\t\t\tif (lastSlash > 0) {\n\t\t\t\tthis.parent = new TFolder(path.substring(0, lastSlash));\n\t\t\t} else {\n\t\t\t\tthis.parent = null;\n\t\t\t}\n\t\t}\n\t}\n}\n\n// Modal mock\nexport class Modal {\n\tapp: any;\n\tcontainerEl: HTMLElement;\n\ttitleEl: HTMLElement;\n\tcontentEl: HTMLElement;\n\n\tconstructor(app: any) {\n\t\tthis.app = app;\n\t\tthis.containerEl = document.createElement(\"div\");\n\t\tthis.titleEl = document.createElement(\"div\");\n\t\tthis.contentEl = document.createElement(\"div\");\n\t}\n\n\topen = vi.fn();\n\tclose = vi.fn();\n\tonOpen = vi.fn();\n\tonClose = vi.fn();\n}\n\n// Notice mock\nexport class Notice {\n\tconstructor(message: string) {\n\t\tconsole.log(`Notice: ${message}`);\n\t}\n}\n\n// MarkdownRenderer mock\nexport const MarkdownRenderer = {\n\trender: vi.fn().mockResolvedValue(undefined),\n};\n\n// Debounce function mock\nexport function debounce<T extends (...args: any[]) => any>(\n\tfunc: T,\n\twait: number,\n\timmediate?: boolean\n): T {\n\tlet timeout: ReturnType<typeof setTimeout> | null = null;\n\n\treturn ((...args: Parameters<T>) => {\n\t\tconst later = () => {\n\t\t\ttimeout = null;\n\t\t\tif (!immediate) func(...args);\n\t\t};\n\n\t\tconst callNow = immediate && !timeout;\n\n\t\tif (timeout !== null) {\n\t\t\tclearTimeout(timeout);\n\t\t}\n\n\t\ttimeout = setTimeout(later, wait);\n\n\t\tif (callNow) func(...args);\n\t}) as T;\n}\n\n// App mock\nexport const App = vi.fn();\n\n// Mock interfaces for TypeScript\nexport interface MockApp {\n\tfileManager: {\n\t\tprocessFrontMatter: ReturnType<typeof vi.fn>;\n\t};\n\tmetadataCache: {\n\t\tgetFileCache: ReturnType<typeof vi.fn>;\n\t};\n\tvault: {\n\t\tgetAbstractFileByPath: ReturnType<typeof vi.fn>;\n\t\ton: ReturnType<typeof vi.fn>;\n\t\tread: ReturnType<typeof vi.fn>;\n\t\tmodify: ReturnType<typeof vi.fn>;\n\t\tcreate: ReturnType<typeof vi.fn>;\n\t\tdelete: ReturnType<typeof vi.fn>;\n\t\trename: ReturnType<typeof vi.fn>;\n\t\tgetFiles: ReturnType<typeof vi.fn>;\n\t\tgetMarkdownFiles: ReturnType<typeof vi.fn>;\n\t\tgetFolderByPath: ReturnType<typeof vi.fn>;\n\t};\n\tworkspace: {\n\t\tgetActiveFile: ReturnType<typeof vi.fn>;\n\t\ton: ReturnType<typeof vi.fn>;\n\t};\n}\n\n// Helper function to create a fully mocked app\nexport function createMockApp(): MockApp {\n\treturn {\n\t\tfileManager: {\n\t\t\tprocessFrontMatter: vi.fn(),\n\t\t},\n\t\tmetadataCache: {\n\t\t\tgetFileCache: vi.fn(),\n\t\t},\n\t\tvault: {\n\t\t\tgetAbstractFileByPath: vi.fn(),\n\t\t\ton: vi.fn(),\n\t\t\tread: vi.fn(),\n\t\t\tmodify: vi.fn(),\n\t\t\tcreate: vi.fn(),\n\t\t\tdelete: vi.fn(),\n\t\t\trename: vi.fn(),\n\t\t\tgetFiles: vi.fn().mockReturnValue([]),\n\t\t\tgetMarkdownFiles: vi.fn().mockReturnValue([]),\n\t\t\tgetFolderByPath: vi.fn(),\n\t\t},\n\t\tworkspace: {\n\t\t\tgetActiveFile: vi.fn(),\n\t\t\ton: vi.fn(),\n\t\t},\n\t};\n}\n\n// Helper to create mock TFile instances\nexport function createMockFile(\n\tpath: string,\n\toptions?: {\n\t\tbasename?: string;\n\t\tparentPath?: string;\n\t\textension?: string;\n\t}\n): TFile {\n\tconst file = new TFile(path, options?.parentPath);\n\tif (options?.basename) {\n\t\tfile.basename = options.basename;\n\t}\n\tif (options?.extension) {\n\t\tfile.extension = options.extension;\n\t}\n\treturn file;\n}\n\n// Helper to create mock file cache\nexport function createMockFileCache(frontmatter?: Record<string, any>) {\n\treturn {\n\t\tfrontmatter: frontmatter || {},\n\t\tfrontmatterPosition: frontmatter ? { start: { line: 0 }, end: { line: 3 } } : null,\n\t\tsections: [],\n\t\theadings: [],\n\t\tlinks: [],\n\t\tembeds: [],\n\t\ttags: [],\n\t\tlistItems: [],\n\t};\n}\n"]}
@@ -82,4 +82,4 @@ export function verifyMockCalls(mockName, expectedCalls) {
82
82
  expect(mock).toHaveBeenNthCalledWith(index + 1, ...args);
83
83
  });
84
84
  }
85
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdGVzdGluZy9tb2Nrcy91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUVwQyx3QkFBd0I7QUFDeEIsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUc7SUFDakMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUU7SUFDcEIsY0FBYyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUU7SUFDdkIsY0FBYyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Q0FDdkIsQ0FBQztBQUVGLG9CQUFvQjtBQUNwQixNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUc7SUFDN0IsdUJBQXVCLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRTtDQUNoQyxDQUFDO0FBRUYsOERBQThEO0FBQzlELE1BQU0sVUFBVSwrQkFBK0I7SUFDOUMsK0JBQStCO0lBQy9CLGtCQUFrQixDQUFDLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQzVELEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQzNDLENBQUM7SUFFRixrQkFBa0IsQ0FBQyxXQUFXLENBQUMsa0JBQWtCLENBQ2hELENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUNqRCxDQUFDO0lBRUYsa0JBQWtCLENBQUMsY0FBYyxDQUFDLGtCQUFrQixDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7O1FBQzdELElBQUksQ0FBQyxJ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Q0FBQyxRQUFRLENBQUMsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDMUQsQ0FBQztBQUNGLENBQUM7QUFFRCw4QkFBOEI7QUFDOUIsTUFBTSxVQUFVLGVBQWUsQ0FDOUIsUUFBdUUsRUFDdkUsYUFBc0I7SUFFdEIsTUFBTSxJQUFJLEdBQ1QsUUFBUSxJQUFJLGtCQUFrQjtRQUM3QixDQUFDLENBQUUsa0JBQTBCLENBQUMsUUFBUSxDQUFDO1FBQ3ZDLENBQUMsQ0FBRSxjQUFzQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBRXRDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDekQsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRTtRQUNyQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsdUJBQXVCLENBQUMsS0FBSyxHQUFHLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0lBQzFELENBQUMsQ0FBQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGV4cGVjdCwgdmkgfSBmcm9tIFwidml0ZXN0XCI7XG5cbi8vIEZpbGUgb3BlcmF0aW9ucyBtb2Nrc1xuZXhwb3J0IGNvbnN0IG1vY2tGaWxlT3BlcmF0aW9ucyA9IHtcblx0YXJyYXlzRXF1YWw6IHZpLmZuKCksXG5cdG5vcm1hbGl6ZUFycmF5OiB2aS5mbigpLFxuXHRjcmVhdGVGaWxlTGluazogdmkuZm4oKSxcbn07XG5cbi8vIExpbmsgcGFyc2VyIG1vY2tzXG5leHBvcnQgY29uc3QgbW9ja0xpbmtQYXJzZXIgPSB7XG5cdGV4dHJhY3RGaWxlUGF0aEZyb21MaW5rOiB2aS5mbigpLFxufTtcblxuLy8gRGVmYXVsdCBtb2NrIGltcGxlbWVudGF0aW9ucyB0aGF0IG1hdGNoIHRoZSBhY3R1YWwgYmVoYXZpb3JcbmV4cG9ydCBmdW5jdGlvbiBzZXR1cERlZmF1bHRNb2NrSW1wbGVtZW50YXRpb25zKCkge1xuXHQvLyBTZXQgdXAgZmlsZSBvcGVyYXRpb25zIG1vY2tzXG5cdG1vY2tGaWxlT3BlcmF0aW9ucy5ub3JtYWxpemVBcnJheS5tb2NrSW1wbGVtZW50YXRpb24oKGFycikgPT5cblx0XHRBcnJheS5pc0FycmF5KGFycikgPyBhcnIgOiBhcnIgPyBbYXJyXSA6IFtdXG5cdCk7XG5cblx0bW9ja0ZpbGVPcGVyYXRpb25zLmFycmF5c0VxdWFsLm1vY2tJbXBsZW1lbnRhdGlvbihcblx0XHQoYSwgYikgPT4gSlNPTi5zdHJpbmdpZnkoYSkgPT09IEpTT04uc3RyaW5naWZ5KGIpXG5cdCk7XG5cblx0bW9ja0ZpbGVPcGVyYXRpb25zLmNyZWF0ZUZpbGVMaW5rLm1vY2tJbXBsZW1lbnRhdGlvbigoZmlsZSkgPT4ge1xuXHRcdGlmICghZmlsZSkgcmV0dXJuIFwiW1tVbmtub3duIEZpbGVdXVwiO1xuXG5cdFx0Y29uc3QgYmFzZW5hbWUgPVxuXHRcdFx0ZmlsZS5iYXNlbmFtZSB8fFxuXHRcdFx0ZmlsZS5wYXRoXG5cdFx0XHRcdD8uc3BsaXQoXCIvXCIpXG5cdFx0XHRcdC5wb3AoKVxuXHRcdFx0XHQ/LnJlcGxhY2UoL1xcLlteLy5dKyQvLCBcIlwiKSB8fFxuXHRcdFx0XCJcIjtcblx0XHRjb25zdCBwYXJlbnRQYXRoID0gZmlsZS5wYXJlbnQ/LnBhdGg7XG5cblx0XHRpZiAoIXBhcmVudFBhdGggfHwgcGFyZW50UGF0aCA9PT0gXCIvXCIgfHwgcGFyZW50UGF0aCA9PT0gXCJcIikge1xuXHRcdFx0cmV0dXJuIGBbWyR7YmFzZW5hbWV9XV1gO1xuXHRcdH1cblxuXHRcdHJldHVybiBgW1ske3BhcmVudFBhdGh9LyR7YmFzZW5hbWV9fCR7YmFzZW5hbWV9XV1gO1xuXHR9KTtcblxuXHQvLyBTZXQgdXAgbGluayBwYXJzZXIgbW9ja3Ncblx0bW9ja0xpbmtQYXJzZXIuZXh0cmFjdEZpbGVQYXRoRnJvbUxpbmsubW9ja0ltcGxlbWVudGF0aW9uKChsaW5rKSA9PiB7XG5cdFx0aWYgKCFsaW5rIHx8IHR5cGVvZiBsaW5rICE9PSBcInN0cmluZ1wiKSByZXR1cm4gbnVsbDtcblxuXHRcdC8vIEhhbmRsZSB0ZXh0IHRoYXQgY29udGFpbnMgYSBsaW5rXG5cdFx0Y29uc3QgbGlua01hdGNoID0gbGluay5tYXRjaCgvXFxbXFxbKFteXFxdXSspXFxdXFxdLyk7XG5cdFx0aWYgKGxpbmtNYXRjaCkge1xuXHRcdFx0Y29uc3QgY29udGVudCA9IGxpbmtNYXRjaFsxXTtcblx0XHRcdC8vIFJlbW92ZSBkaXNwbGF5IG5hbWUgaWYgcHJlc2VudFxuXHRcdFx0Y29uc3QgZmlsZVBhcnQgPSBjb250ZW50LnNwbGl0KFwifFwiKVswXS50cmltKCk7XG5cdFx0XHRpZiAoIWZpbGVQYXJ0KSByZXR1cm4gbnVsbDtcblxuXHRcdFx0Ly8gQWRkIC5tZCBleHRlbnNpb24gaWYgbm90IHByZXNlbnRcblx0XHRcdHJldHVybiBmaWxlUGFydC5lbmRzV2l0aChcIi5tZFwiKSA/IGZpbGVQYXJ0IDogYCR7ZmlsZVBhcnR9Lm1kYDtcblx0XHR9XG5cblx0XHRyZXR1cm4gbnVsbDtcblx0fSk7XG59XG5cbi8vIFJlc2V0IGFsbCBtb2Nrc1xuZXhwb3J0IGZ1bmN0aW9uIHJlc2V0QWxsTW9ja3MoKSB7XG5cdE9iamVjdC52YWx1ZXMobW9ja0ZpbGVPcGVyYXRpb25zKS5mb3JFYWNoKChtb2NrKSA9PiB7XG5cdFx0bW9jay5tb2NrUmVzZXQoKTtcblx0fSk7XG5cdE9iamVjdC52YWx1ZXMobW9ja0xpbmtQYXJzZXIpLmZvckVhY2goKG1vY2spID0+IHtcblx0XHRtb2NrLm1vY2tSZXNldCgpO1xuXHR9KTtcbn1cblxuLy8gSGVscGVyIHRvIHNldHVwIG1vY2tzIHdpdGggc3BlY2lmaWMgaW1wbGVtZW50YXRpb25zXG5leHBvcnQgZnVuY3Rpb24gc2V0dXBNb2NrSW1wbGVtZW50YXRpb24oXG5cdG1vY2tOYW1lOiBrZXlvZiB0eXBlb2YgbW9ja0ZpbGVPcGVyYXRpb25zIHwga2V5b2YgdHlwZW9mIG1vY2tMaW5rUGFyc2VyLFxuXHRpbXBsZW1lbnRhdGlvbjogKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnlcbikge1xuXHRpZiAobW9ja05hbWUgaW4gbW9ja0ZpbGVPcGVyYXRpb25zKSB7XG5cdFx0KG1vY2tGaWxlT3BlcmF0aW9ucyBhcyBhbnkpW21vY2tOYW1lXS5tb2NrSW1wbGVtZW50YXRpb24oaW1wbGVtZW50YXRpb24pO1xuXHR9IGVsc2UgaWYgKG1vY2tOYW1lIGluIG1vY2tMaW5rUGFyc2VyKSB7XG5cdFx0KG1vY2tMaW5rUGFyc2VyIGFzIGFueSlbbW9ja05hbWVdLm1vY2tJbXBsZW1lbnRhdGlvbihpbXBsZW1lbnRhdGlvbik7XG5cdH1cbn1cblxuLy8gSGVscGVyIHRvIHNldHVwIG1vY2sgcmV0dXJuIHZhbHVlc1xuZXhwb3J0IGZ1bmN0aW9uIHNldHVwTW9ja1JldHVyblZhbHVlKFxuXHRtb2NrTmFtZToga2V5b2YgdHlwZW9mIG1vY2tGaWxlT3BlcmF0aW9ucyB8IGtleW9mIHR5cGVvZiBtb2NrTGlua1BhcnNlcixcblx0dmFsdWU6IGFueVxuKSB7XG5cdGlmIChtb2NrTmFtZSBpbiBtb2NrRmlsZU9wZXJhdGlvbnMpIHtcblx0XHQobW9ja0ZpbGVPcGVyYXRpb25zIGFzIGFueSlbbW9ja05hbWVdLm1vY2tSZXR1cm5WYWx1ZSh2YWx1ZSk7XG5cdH0gZWxzZSBpZiAobW9ja05hbWUgaW4gbW9ja0xpbmtQYXJzZXIpIHtcblx0XHQobW9ja0xpbmtQYXJzZXIgYXMgYW55KVttb2NrTmFtZV0ubW9ja1JldHVyblZhbHVlKHZhbHVlKTtcblx0fVxufVxuXG4vLyBIZWxwZXIgdG8gdmVyaWZ5IG1vY2sgY2FsbHNcbmV4cG9ydCBmdW5jdGlvbiB2ZXJpZnlNb2NrQ2FsbHMoXG5cdG1vY2tOYW1lOiBrZXlvZiB0eXBlb2YgbW9ja0ZpbGVPcGVyYXRpb25zIHwga2V5b2YgdHlwZW9mIG1vY2tMaW5rUGFyc2VyLFxuXHRleHBlY3RlZENhbGxzOiBhbnlbXVtdXG4pIHtcblx0Y29uc3QgbW9jayA9XG5cdFx0bW9ja05hbWUgaW4gbW9ja0ZpbGVPcGVyYXRpb25zXG5cdFx0XHQ/IChtb2NrRmlsZU9wZXJhdGlvbnMgYXMgYW55KVttb2NrTmFtZV1cblx0XHRcdDogKG1vY2tMaW5rUGFyc2VyIGFzIGFueSlbbW9ja05hbWVdO1xuXG5cdGV4cGVjdChtb2NrKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoZXhwZWN0ZWRDYWxscy5sZW5ndGgpO1xuXHRleHBlY3RlZENhbGxzLmZvckVhY2goKGFyZ3MsIGluZGV4KSA9PiB7XG5cdFx0ZXhwZWN0KG1vY2spLnRvSGF2ZUJlZW5OdGhDYWxsZWRXaXRoKGluZGV4ICsgMSwgLi4uYXJncyk7XG5cdH0pO1xufVxuIl19
85
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/testing/mocks/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAEpC,wBAAwB;AACxB,MAAM,CAAC,MAAM,kBAAkB,GAAG;IACjC,WAAW,EAAE,EAAE,CAAC,EAAE,EAAE;IACpB,cAAc,EAAE,EAAE,CAAC,EAAE,EAAE;IACvB,cAAc,EAAE,EAAE,CAAC,EAAE,EAAE;CACvB,CAAC;AAEF,oBAAoB;AACpB,MAAM,CAAC,MAAM,cAAc,GAAG;IAC7B,uBAAuB,EAAE,EAAE,CAAC,EAAE,EAAE;CAChC,CAAC;AAEF,8DAA8D;AAC9D,MAAM,UAAU,+BAA+B;IAC9C,+BAA+B;IAC/B,kBAAkB,CAAC,cAAc,CAAC,kBAAkB,CAAC,CAAC,GAAG,EAAE,EAAE,CAC5D,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAC3C,CAAC;IAEF,kBAAkB,CAAC,WAAW,CAAC,kBAAkB,CAChD,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CACjD,CAAC;IAEF,kBAAkB,CAAC,cAAc,CAAC,kBAAkB,CAAC,CAAC,IAAI,EAAE,EAAE;;QAC7D,IAAI,CAAC,IAAI;YAAE,OAAO,kBAAkB,CAAC;QAErC,MAAM,QAAQ,GACb,IAAI,CAAC,QAAQ;aACb,MAAA,MAAA,IAAI,CAAC,IAAI,0CACN,KAAK,CAAC,GAAG,EACV,GAAG,EAAE,0CACJ,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAA;YAC3B,EAAE,CAAC;QACJ,MAAM,UAAU,GAAG,MAAA,IAAI,CAAC,MAAM,0CAAE,IAAI,CAAC;QAErC,IAAI,CAAC,UAAU,IAAI,UAAU,KAAK,GAAG,IAAI,UAAU,KAAK,EAAE,EAAE,CAAC;YAC5D,OAAO,KAAK,QAAQ,IAAI,CAAC;QAC1B,CAAC;QAED,OAAO,KAAK,UAAU,IAAI,QAAQ,IAAI,QAAQ,IAAI,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,2BAA2B;IAC3B,cAAc,CAAC,uBAAuB,CAAC,kBAAkB,CAAC,CAAC,IAAI,EAAE,EAAE;QAClE,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QAEnD,mCAAmC;QACnC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;QACjD,IAAI,SAAS,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;YAC7B,iCAAiC;YACjC,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAC9C,IAAI,CAAC,QAAQ;gBAAE,OAAO,IAAI,CAAC;YAE3B,mCAAmC;YACnC,OAAO,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,KAAK,CAAC;QAC/D,CAAC;QAED,OAAO,IAAI,CAAC;IACb,CAAC,CAAC,CAAC;AACJ,CAAC;AAED,kBAAkB;AAClB,MAAM,UAAU,aAAa;IAC5B,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QAClD,IAAI,CAAC,SAAS,EAAE,CAAC;IAClB,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QAC9C,IAAI,CAAC,SAAS,EAAE,CAAC;IAClB,CAAC,CAAC,CAAC;AACJ,CAAC;AAED,sDAAsD;AACtD,MAAM,UAAU,uBAAuB,CACtC,QAAuE,EACvE,cAAuC;IAEvC,IAAI,QAAQ,IAAI,kBAAkB,EAAE,CAAC;QACnC,kBAA0B,CAAC,QAAQ,CAAC,CAAC,kBAAkB,CAAC,cAAc,CAAC,CAAC;IAC1E,CAAC;SAAM,IAAI,QAAQ,IAAI,cAAc,EAAE,CAAC;QACtC,cAAsB,CAAC,QAAQ,CAAC,CAAC,kBAAkB,CAAC,cAAc,CAAC,CAAC;IACtE,CAAC;AACF,CAAC;AAED,qCAAqC;AACrC,MAAM,UAAU,oBAAoB,CACnC,QAAuE,EACvE,KAAU;IAEV,IAAI,QAAQ,IAAI,kBAAkB,EAAE,CAAC;QACnC,kBAA0B,CAAC,QAAQ,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;IAC9D,CAAC;SAAM,IAAI,QAAQ,IAAI,cAAc,EAAE,CAAC;QACtC,cAAsB,CAAC,QAAQ,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;IAC1D,CAAC;AACF,CAAC;AAED,8BAA8B;AAC9B,MAAM,UAAU,eAAe,CAC9B,QAAuE,EACvE,aAAsB;IAEtB,MAAM,IAAI,GACT,QAAQ,IAAI,kBAAkB;QAC7B,CAAC,CAAE,kBAA0B,CAAC,QAAQ,CAAC;QACvC,CAAC,CAAE,cAAsB,CAAC,QAAQ,CAAC,CAAC;IAEtC,MAAM,CAAC,IAAI,CAAC,CAAC,qBAAqB,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IACzD,aAAa,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QACrC,MAAM,CAAC,IAAI,CAAC,CAAC,uBAAuB,CAAC,KAAK,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;AACJ,CAAC","sourcesContent":["import { expect, vi } from \"vitest\";\n\n// File operations mocks\nexport const mockFileOperations = {\n\tarraysEqual: vi.fn(),\n\tnormalizeArray: vi.fn(),\n\tcreateFileLink: vi.fn(),\n};\n\n// Link parser mocks\nexport const mockLinkParser = {\n\textractFilePathFromLink: vi.fn(),\n};\n\n// Default mock implementations that match the actual behavior\nexport function setupDefaultMockImplementations() {\n\t// Set up file operations mocks\n\tmockFileOperations.normalizeArray.mockImplementation((arr) =>\n\t\tArray.isArray(arr) ? arr : arr ? [arr] : []\n\t);\n\n\tmockFileOperations.arraysEqual.mockImplementation(\n\t\t(a, b) => JSON.stringify(a) === JSON.stringify(b)\n\t);\n\n\tmockFileOperations.createFileLink.mockImplementation((file) => {\n\t\tif (!file) return \"[[Unknown File]]\";\n\n\t\tconst basename =\n\t\t\tfile.basename ||\n\t\t\tfile.path\n\t\t\t\t?.split(\"/\")\n\t\t\t\t.pop()\n\t\t\t\t?.replace(/\\.[^/.]+$/, \"\") ||\n\t\t\t\"\";\n\t\tconst parentPath = file.parent?.path;\n\n\t\tif (!parentPath || parentPath === \"/\" || parentPath === \"\") {\n\t\t\treturn `[[${basename}]]`;\n\t\t}\n\n\t\treturn `[[${parentPath}/${basename}|${basename}]]`;\n\t});\n\n\t// Set up link parser mocks\n\tmockLinkParser.extractFilePathFromLink.mockImplementation((link) => {\n\t\tif (!link || typeof link !== \"string\") return null;\n\n\t\t// Handle text that contains a link\n\t\tconst linkMatch = link.match(/\\[\\[([^\\]]+)\\]\\]/);\n\t\tif (linkMatch) {\n\t\t\tconst content = linkMatch[1];\n\t\t\t// Remove display name if present\n\t\t\tconst filePart = content.split(\"|\")[0].trim();\n\t\t\tif (!filePart) return null;\n\n\t\t\t// Add .md extension if not present\n\t\t\treturn filePart.endsWith(\".md\") ? filePart : `${filePart}.md`;\n\t\t}\n\n\t\treturn null;\n\t});\n}\n\n// Reset all mocks\nexport function resetAllMocks() {\n\tObject.values(mockFileOperations).forEach((mock) => {\n\t\tmock.mockReset();\n\t});\n\tObject.values(mockLinkParser).forEach((mock) => {\n\t\tmock.mockReset();\n\t});\n}\n\n// Helper to setup mocks with specific implementations\nexport function setupMockImplementation(\n\tmockName: keyof typeof mockFileOperations | keyof typeof mockLinkParser,\n\timplementation: (...args: any[]) => any\n) {\n\tif (mockName in mockFileOperations) {\n\t\t(mockFileOperations as any)[mockName].mockImplementation(implementation);\n\t} else if (mockName in mockLinkParser) {\n\t\t(mockLinkParser as any)[mockName].mockImplementation(implementation);\n\t}\n}\n\n// Helper to setup mock return values\nexport function setupMockReturnValue(\n\tmockName: keyof typeof mockFileOperations | keyof typeof mockLinkParser,\n\tvalue: any\n) {\n\tif (mockName in mockFileOperations) {\n\t\t(mockFileOperations as any)[mockName].mockReturnValue(value);\n\t} else if (mockName in mockLinkParser) {\n\t\t(mockLinkParser as any)[mockName].mockReturnValue(value);\n\t}\n}\n\n// Helper to verify mock calls\nexport function verifyMockCalls(\n\tmockName: keyof typeof mockFileOperations | keyof typeof mockLinkParser,\n\texpectedCalls: any[][]\n) {\n\tconst mock =\n\t\tmockName in mockFileOperations\n\t\t\t? (mockFileOperations as any)[mockName]\n\t\t\t: (mockLinkParser as any)[mockName];\n\n\texpect(mock).toHaveBeenCalledTimes(expectedCalls.length);\n\texpectedCalls.forEach((args, index) => {\n\t\texpect(mock).toHaveBeenNthCalledWith(index + 1, ...args);\n\t});\n}\n"]}
@@ -15,4 +15,4 @@ export function setupTestEnvironment() {
15
15
  vi.clearAllMocks();
16
16
  };
17
17
  }
18
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVzdGluZy9zZXR1cC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbkUsNERBQTREO0FBQzVELE1BQU0sVUFBVSxvQkFBb0I7SUFDbkMseUJBQXlCO0lBQ3pCLEVBQUUsQ0FBQyxJQUFJLENBQUMseUNBQXlDLEVBQUUsR0FBRyxFQUFFLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUM3RSxFQUFFLENBQUMsSUFBSSxDQUFDLHFDQUFxQyxFQUFFLEdBQUcsRUFBRSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBRXJFLHNDQUFzQztJQUN0QyxFQUFFLENBQUMsSUFBSSxDQUFDLGdDQUFnQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDaEQsK0JBQStCLEVBQUUsTUFBTSxjQUFjO1NBQUc7S0FDeEQsQ0FBQyxDQUFDLENBQUM7SUFFSiwwQkFBMEI7SUFDMUIsT0FBTyxHQUFHLEVBQUU7UUFDWCxFQUFFLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDcEIsQ0FBQyxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHZpIH0gZnJvbSBcInZpdGVzdFwiO1xuaW1wb3J0IHsgbW9ja0ZpbGVPcGVyYXRpb25zLCBtb2NrTGlua1BhcnNlciB9IGZyb20gXCIuL21vY2tzL3V0aWxzXCI7XG5cbi8vIEdsb2JhbCB0ZXN0IHNldHVwIHRoYXQgY2FuIGJlIGltcG9ydGVkIG9uY2UgcGVyIHRlc3QgZmlsZVxuZXhwb3J0IGZ1bmN0aW9uIHNldHVwVGVzdEVudmlyb25tZW50KCkge1xuXHQvLyBNb2NrIHRoZSB1dGlscyBtb2R1bGVzXG5cdHZpLm1vY2soXCJAb2JzaWRpYW4tcGx1Z2lucy91dGlscy9maWxlLW9wZXJhdGlvbnNcIiwgKCkgPT4gbW9ja0ZpbGVPcGVyYXRpb25zKTtcblx0dmkubW9jayhcIkBvYnNpZGlhbi1wbHVnaW5zL3V0aWxzL2xpbmstcGFyc2VyXCIsICgpID0+IG1vY2tMaW5rUGFyc2VyKTtcblxuXHQvLyBNb2NrIGFueSBwbHVnaW4tc3BlY2lmaWMgY29tcG9uZW50c1xuXHR2aS5tb2NrKFwiLi4vc3JjL2NvbXBvbmVudHMvc2V0dGluZ3MtdGFiXCIsICgpID0+ICh7XG5cdFx0VHJlZVByb3BlcnRpZXNNYW5hZ2VyU2V0dGluZ1RhYjogY2xhc3MgTW9ja1NldHRpbmdUYWIge30sXG5cdH0pKTtcblxuXHQvLyBSZXR1cm4gY2xlYW51cCBmdW5jdGlvblxuXHRyZXR1cm4gKCkgPT4ge1xuXHRcdHZpLmNsZWFyQWxsTW9ja3MoKTtcblx0fTtcbn1cbiJdfQ==
18
+ //# sourceMappingURL=setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/testing/setup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEnE,4DAA4D;AAC5D,MAAM,UAAU,oBAAoB;IACnC,yBAAyB;IACzB,EAAE,CAAC,IAAI,CAAC,yCAAyC,EAAE,GAAG,EAAE,CAAC,kBAAkB,CAAC,CAAC;IAC7E,EAAE,CAAC,IAAI,CAAC,qCAAqC,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,CAAC;IAErE,sCAAsC;IACtC,EAAE,CAAC,IAAI,CAAC,gCAAgC,EAAE,GAAG,EAAE,CAAC,CAAC;QAChD,+BAA+B,EAAE,MAAM,cAAc;SAAG;KACxD,CAAC,CAAC,CAAC;IAEJ,0BAA0B;IAC1B,OAAO,GAAG,EAAE;QACX,EAAE,CAAC,aAAa,EAAE,CAAC;IACpB,CAAC,CAAC;AACH,CAAC","sourcesContent":["import { vi } from \"vitest\";\nimport { mockFileOperations, mockLinkParser } from \"./mocks/utils\";\n\n// Global test setup that can be imported once per test file\nexport function setupTestEnvironment() {\n\t// Mock the utils modules\n\tvi.mock(\"@obsidian-plugins/utils/file-operations\", () => mockFileOperations);\n\tvi.mock(\"@obsidian-plugins/utils/link-parser\", () => mockLinkParser);\n\n\t// Mock any plugin-specific components\n\tvi.mock(\"../src/components/settings-tab\", () => ({\n\t\tTreePropertiesManagerSettingTab: class MockSettingTab {},\n\t}));\n\n\t// Return cleanup function\n\treturn () => {\n\t\tvi.clearAllMocks();\n\t};\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@real1ty-obsidian-plugins/utils",
3
- "version": "1.2.1",
3
+ "version": "1.2.2",
4
4
  "description": "Shared utilities for Obsidian plugins",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -20,7 +20,10 @@
20
20
  }
21
21
  },
22
22
  "files": [
23
- "dist/**/*",
23
+ "dist/**/*.js",
24
+ "dist/**/*.d.ts",
25
+ "dist/**/*.js.map",
26
+ "dist/**/*.d.ts.map",
24
27
  "README.md",
25
28
  "LICENSE"
26
29
  ],