@real1ty-obsidian-plugins/utils 1.2.0 → 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.
Files changed (73) hide show
  1. package/dist/async-utils.d.ts +69 -0
  2. package/dist/async-utils.d.ts.map +1 -0
  3. package/dist/async-utils.js +108 -0
  4. package/dist/async-utils.js.map +1 -0
  5. package/dist/batch-operations.d.ts +11 -0
  6. package/dist/batch-operations.d.ts.map +1 -0
  7. package/dist/batch-operations.js +31 -0
  8. package/dist/batch-operations.js.map +1 -0
  9. package/dist/child-reference-utils.d.ts +9 -0
  10. package/dist/child-reference-utils.d.ts.map +1 -0
  11. package/dist/child-reference-utils.js +57 -0
  12. package/dist/child-reference-utils.js.map +1 -0
  13. package/dist/date-recurrence-utils.d.ts +30 -0
  14. package/dist/date-recurrence-utils.d.ts.map +1 -0
  15. package/dist/date-recurrence-utils.js +167 -0
  16. package/dist/date-recurrence-utils.js.map +1 -0
  17. package/dist/date-utils.d.ts +21 -0
  18. package/dist/date-utils.d.ts.map +1 -0
  19. package/dist/date-utils.js +105 -0
  20. package/dist/date-utils.js.map +1 -0
  21. package/dist/evaluator-base.d.ts +52 -0
  22. package/dist/evaluator-base.d.ts.map +1 -0
  23. package/dist/evaluator-base.js +84 -0
  24. package/dist/evaluator-base.js.map +1 -0
  25. package/dist/file-operations.d.ts +31 -0
  26. package/dist/file-operations.d.ts.map +1 -0
  27. package/dist/file-operations.js +160 -0
  28. package/dist/file-operations.js.map +1 -0
  29. package/dist/file-utils.d.ts +6 -0
  30. package/dist/file-utils.d.ts.map +1 -0
  31. package/dist/file-utils.js +25 -0
  32. package/dist/file-utils.js.map +1 -0
  33. package/dist/generate.d.ts +7 -0
  34. package/dist/generate.d.ts.map +1 -0
  35. package/dist/generate.js +13 -0
  36. package/dist/generate.js.map +1 -0
  37. package/dist/index.d.ts +14 -0
  38. package/dist/index.d.ts.map +1 -0
  39. package/dist/index.js +14 -0
  40. package/dist/index.js.map +1 -0
  41. package/dist/link-parser.d.ts +9 -0
  42. package/dist/link-parser.d.ts.map +1 -0
  43. package/dist/link-parser.js +19 -0
  44. package/dist/link-parser.js.map +1 -0
  45. package/dist/settings-store.d.ts +19 -0
  46. package/dist/settings-store.d.ts.map +1 -0
  47. package/dist/settings-store.js +79 -0
  48. package/dist/settings-store.js.map +1 -0
  49. package/dist/string-utils.d.ts +5 -0
  50. package/dist/string-utils.d.ts.map +1 -0
  51. package/dist/string-utils.js +25 -0
  52. package/dist/string-utils.js.map +1 -0
  53. package/dist/templater-utils.d.ts +4 -0
  54. package/dist/templater-utils.d.ts.map +1 -0
  55. package/dist/templater-utils.js +51 -0
  56. package/dist/templater-utils.js.map +1 -0
  57. package/dist/testing/index.d.ts +5 -0
  58. package/dist/testing/index.d.ts.map +1 -0
  59. package/dist/testing/index.js +6 -0
  60. package/dist/testing/index.js.map +1 -0
  61. package/dist/testing/mocks/obsidian.d.ts +149 -0
  62. package/dist/testing/mocks/obsidian.d.ts.map +1 -0
  63. package/dist/testing/mocks/obsidian.js +220 -0
  64. package/dist/testing/mocks/obsidian.js.map +1 -0
  65. package/dist/testing/mocks/utils.d.ts +14 -0
  66. package/dist/testing/mocks/utils.d.ts.map +1 -0
  67. package/dist/testing/mocks/utils.js +85 -0
  68. package/dist/testing/mocks/utils.js.map +1 -0
  69. package/dist/testing/setup.d.ts +2 -0
  70. package/dist/testing/setup.d.ts.map +1 -0
  71. package/dist/testing/setup.js +18 -0
  72. package/dist/testing/setup.js.map +1 -0
  73. package/package.json +7 -4
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Handles different link formats and edge cases:
3
+ * [[FileName]] -> FileName.md
4
+ * [[Folder/FileName]] -> Folder/FileName.md
5
+ * [[Folder/FileName|DisplayName]] -> Folder/FileName.md
6
+ * Normalizes paths and handles malformed links gracefully.
7
+ */
8
+ export const extractFilePathFromLink = (link) => {
9
+ const match = link.match(/\[\[([^|\]]+?)(?:\|.*?)?\]\]/);
10
+ if (!match)
11
+ return null;
12
+ const filePath = match[1].trim();
13
+ if (!filePath)
14
+ return null;
15
+ if (filePath.includes("[[") || filePath.includes("]]"))
16
+ return null;
17
+ return filePath.endsWith(".md") ? filePath : `${filePath}.md`;
18
+ };
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"]}
@@ -0,0 +1,19 @@
1
+ import type { Plugin } from "obsidian";
2
+ import { BehaviorSubject } from "rxjs";
3
+ import type { z } from "zod";
4
+ export declare class SettingsStore<TSchema extends z.ZodTypeAny> {
5
+ private plugin;
6
+ private schema;
7
+ readonly settings$: BehaviorSubject<z.infer<TSchema>>;
8
+ constructor(plugin: Plugin, schema: TSchema);
9
+ get currentSettings(): z.infer<TSchema>;
10
+ loadSettings(): Promise<void>;
11
+ saveSettings(): Promise<void>;
12
+ updateSettings(updater: (settings: z.infer<TSchema>) => z.infer<TSchema>): Promise<void>;
13
+ resetSettings(): Promise<void>;
14
+ updateProperty<K extends keyof z.infer<TSchema>>(key: K, value: z.infer<TSchema>[K]): Promise<void>;
15
+ updateProperties(updates: Partial<z.infer<TSchema>>): Promise<void>;
16
+ getDefaults(): z.infer<TSchema>;
17
+ hasCustomizations(): boolean;
18
+ }
19
+ //# sourceMappingURL=settings-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings-store.d.ts","sourceRoot":"","sources":["../src/settings-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,MAAM,CAAC;AACvC,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAE7B,qBAAa,aAAa,CAAC,OAAO,SAAS,CAAC,CAAC,UAAU;IACtD,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,MAAM,CAAU;IACxB,SAAgB,SAAS,EAAE,eAAe,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;gBAEjD,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO;IAM3C,IAAI,eAAe,IAAI,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAEtC;IAEK,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAiB7B,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAI7B,cAAc,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAaxF,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAK9B,cAAc,CAAC,CAAC,SAAS,MAAM,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,EACpD,GAAG,EAAE,CAAC,EACN,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GACxB,OAAO,CAAC,IAAI,CAAC;IAQV,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAMzE,WAAW,IAAI,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC;IAI/B,iBAAiB,IAAI,OAAO;CAI5B"}
@@ -0,0 +1,79 @@
1
+ import { __awaiter } from "tslib";
2
+ import { BehaviorSubject } from "rxjs";
3
+ export class SettingsStore {
4
+ constructor(plugin, schema) {
5
+ this.plugin = plugin;
6
+ this.schema = schema;
7
+ this.settings$ = new BehaviorSubject(schema.parse({}));
8
+ }
9
+ get currentSettings() {
10
+ return this.settings$.value;
11
+ }
12
+ loadSettings() {
13
+ return __awaiter(this, void 0, void 0, function* () {
14
+ try {
15
+ const data = yield this.plugin.loadData();
16
+ const sanitized = this.schema.parse(data !== null && data !== void 0 ? data : {});
17
+ this.settings$.next(sanitized);
18
+ // Save back if data was sanitized/normalized
19
+ if (JSON.stringify(sanitized) !== JSON.stringify(data !== null && data !== void 0 ? data : {})) {
20
+ yield this.saveSettings();
21
+ }
22
+ }
23
+ catch (error) {
24
+ console.error("Failed to load settings, using defaults:", error);
25
+ this.settings$.next(this.schema.parse({}));
26
+ yield this.saveSettings();
27
+ }
28
+ });
29
+ }
30
+ saveSettings() {
31
+ return __awaiter(this, void 0, void 0, function* () {
32
+ yield this.plugin.saveData(this.currentSettings);
33
+ });
34
+ }
35
+ updateSettings(updater) {
36
+ return __awaiter(this, void 0, void 0, function* () {
37
+ try {
38
+ const newSettings = updater(this.currentSettings);
39
+ const validated = this.schema.parse(newSettings);
40
+ this.settings$.next(validated);
41
+ yield this.saveSettings();
42
+ }
43
+ catch (error) {
44
+ console.error("Failed to update settings:", error);
45
+ throw error;
46
+ }
47
+ });
48
+ }
49
+ resetSettings() {
50
+ return __awaiter(this, void 0, void 0, function* () {
51
+ this.settings$.next(this.schema.parse({}));
52
+ yield this.saveSettings();
53
+ });
54
+ }
55
+ updateProperty(key, value) {
56
+ return __awaiter(this, void 0, void 0, function* () {
57
+ yield this.updateSettings((settings) => {
58
+ const updated = Object.assign({}, settings);
59
+ updated[key] = value;
60
+ return updated;
61
+ });
62
+ });
63
+ }
64
+ updateProperties(updates) {
65
+ return __awaiter(this, void 0, void 0, function* () {
66
+ yield this.updateSettings((settings) => {
67
+ return Object.assign({}, settings, updates);
68
+ });
69
+ });
70
+ }
71
+ getDefaults() {
72
+ return this.schema.parse({});
73
+ }
74
+ hasCustomizations() {
75
+ const defaults = this.getDefaults();
76
+ return JSON.stringify(this.currentSettings) !== JSON.stringify(defaults);
77
+ }
78
+ }
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"]}
@@ -0,0 +1,5 @@
1
+ export declare const capitalize: (str: string) => string;
2
+ export declare const generateDuplicatedTitle: (originalTitle: string) => string;
3
+ export declare const pluralize: (count: number) => string;
4
+ export declare const getWeekDirection: (weeks: number) => "next" | "previous";
5
+ //# sourceMappingURL=string-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"string-utils.d.ts","sourceRoot":"","sources":["../src/string-utils.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,UAAU,GAAI,KAAK,MAAM,KAAG,MAGxC,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAAI,eAAe,MAAM,KAAG,MAY/D,CAAC;AAEF,eAAO,MAAM,SAAS,GAAI,OAAO,MAAM,KAAG,MAEzC,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,OAAO,MAAM,KAAG,MAAM,GAAG,UAEzD,CAAC"}
@@ -0,0 +1,25 @@
1
+ export const capitalize = (str) => {
2
+ if (!str)
3
+ return str;
4
+ return str.charAt(0).toUpperCase() + str.slice(1).toLowerCase();
5
+ };
6
+ export const generateDuplicatedTitle = (originalTitle) => {
7
+ // Check if title already has a counter pattern like " (2)", " - Copy", etc.
8
+ const counterMatch = originalTitle.match(/^(.*?)(?:\s*\((\d+)\)|\s*-?\s*Copy(?:\s*(\d+))?)$/);
9
+ if (counterMatch) {
10
+ const baseName = counterMatch[1];
11
+ const existingCounter = counterMatch[2] || counterMatch[3];
12
+ const nextCounter = existingCounter ? parseInt(existingCounter, 10) + 1 : 2;
13
+ return `${baseName} (${nextCounter})`;
14
+ }
15
+ else {
16
+ return `${originalTitle} (2)`;
17
+ }
18
+ };
19
+ export const pluralize = (count) => {
20
+ return count === 1 ? "" : "s";
21
+ };
22
+ export const getWeekDirection = (weeks) => {
23
+ return weeks > 0 ? "next" : "previous";
24
+ };
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"]}
@@ -0,0 +1,4 @@
1
+ import { type App, type TFile } from "obsidian";
2
+ export declare function isTemplaterAvailable(app: App): boolean;
3
+ export declare function createFromTemplate(app: App, templatePath: string, targetFolder?: string, filename?: string, openNewNote?: boolean): Promise<TFile | null>;
4
+ //# sourceMappingURL=templater-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"templater-utils.d.ts","sourceRoot":"","sources":["../src/templater-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,GAAG,EAAyB,KAAK,KAAK,EAAE,MAAM,UAAU,CAAC;AAgCvE,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAGtD;AAED,wBAAsB,kBAAkB,CACvC,GAAG,EAAE,GAAG,EACR,YAAY,EAAE,MAAM,EACpB,YAAY,CAAC,EAAE,MAAM,EACrB,QAAQ,CAAC,EAAE,MAAM,EACjB,WAAW,UAAQ,GACjB,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,CA+BvB"}
@@ -0,0 +1,51 @@
1
+ import { __awaiter } from "tslib";
2
+ import { Notice, normalizePath } from "obsidian";
3
+ const TEMPLATER_ID = "templater-obsidian";
4
+ function waitForTemplater(app_1) {
5
+ return __awaiter(this, arguments, void 0, function* (app, timeoutMs = 8000) {
6
+ var _a, _b, _c, _d;
7
+ yield new Promise((resolve) => app.workspace.onLayoutReady(resolve));
8
+ const started = Date.now();
9
+ while (Date.now() - started < timeoutMs) {
10
+ const plug = (_b = (_a = app.plugins) === null || _a === void 0 ? void 0 : _a.getPlugin) === null || _b === void 0 ? void 0 : _b.call(_a, TEMPLATER_ID);
11
+ const api = (_c = plug === null || plug === void 0 ? void 0 : plug.templater) !== null && _c !== void 0 ? _c : null;
12
+ const createFn = (_d = api === null || api === void 0 ? void 0 : api.create_new_note_from_template) === null || _d === void 0 ? void 0 : _d.bind(api);
13
+ if (typeof createFn === "function") {
14
+ return { create_new_note_from_template: createFn };
15
+ }
16
+ yield new Promise((r) => setTimeout(r, 150));
17
+ }
18
+ return null;
19
+ });
20
+ }
21
+ export function isTemplaterAvailable(app) {
22
+ var _a, _b;
23
+ const instance = (_b = (_a = app.plugins) === null || _a === void 0 ? void 0 : _a.getPlugin) === null || _b === void 0 ? void 0 : _b.call(_a, TEMPLATER_ID);
24
+ return !!instance;
25
+ }
26
+ export function createFromTemplate(app_1, templatePath_1, targetFolder_1, filename_1) {
27
+ return __awaiter(this, arguments, void 0, function* (app, templatePath, targetFolder, filename, openNewNote = false) {
28
+ const templater = yield waitForTemplater(app);
29
+ if (!templater) {
30
+ console.warn("Templater isn't ready yet (or not installed/enabled).");
31
+ new Notice("Templater plugin is not available or enabled. Please ensure it is installed and enabled.");
32
+ return null;
33
+ }
34
+ const templateFile = app.vault.getFileByPath(normalizePath(templatePath));
35
+ if (!templateFile) {
36
+ console.error(`Template not found: ${templatePath}`);
37
+ new Notice(`Template file not found: ${templatePath}. Please ensure the template file exists.`);
38
+ return null;
39
+ }
40
+ try {
41
+ const newFile = yield templater.create_new_note_from_template(templateFile, targetFolder, filename, openNewNote);
42
+ return newFile !== null && newFile !== void 0 ? newFile : null;
43
+ }
44
+ catch (error) {
45
+ console.error("Error creating file from template:", error);
46
+ new Notice("Error creating file from template. Please ensure the template file is valid.");
47
+ return null;
48
+ }
49
+ });
50
+ }
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"]}
@@ -0,0 +1,5 @@
1
+ export * from "./mocks/obsidian";
2
+ export { createMockApp, createMockFile, createMockFileCache, Modal, Notice, Plugin, PluginSettingTab, Setting, TFile, } from "./mocks/obsidian";
3
+ export * from "./mocks/utils";
4
+ export { mockFileOperations, mockLinkParser, resetAllMocks, setupDefaultMockImplementations, setupMockImplementation, setupMockReturnValue, verifyMockCalls, } from "./mocks/utils";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/testing/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AAEjC,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"}
@@ -0,0 +1,6 @@
1
+ export * from "./mocks/obsidian";
2
+ // Re-export commonly used combinations
3
+ export { createMockApp, createMockFile, createMockFileCache, Modal, Notice, Plugin, PluginSettingTab, Setting, TFile, } from "./mocks/obsidian";
4
+ export * from "./mocks/utils";
5
+ export { mockFileOperations, mockLinkParser, resetAllMocks, setupDefaultMockImplementations, setupMockImplementation, setupMockReturnValue, verifyMockCalls, } from "./mocks/utils";
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"]}
@@ -0,0 +1,149 @@
1
+ import { vi } from "vitest";
2
+ export declare class Plugin {
3
+ app: any;
4
+ manifest: any;
5
+ settings: any;
6
+ constructor(app: any, manifest: any);
7
+ addSettingTab: import("vitest").Mock<(...args: any[]) => any>;
8
+ registerEvent: import("vitest").Mock<(...args: any[]) => any>;
9
+ loadData: import("vitest").Mock<(...args: any[]) => any>;
10
+ saveData: import("vitest").Mock<(...args: any[]) => any>;
11
+ onload: import("vitest").Mock<(...args: any[]) => any>;
12
+ onunload: import("vitest").Mock<(...args: any[]) => any>;
13
+ addRibbonIcon: import("vitest").Mock<(...args: any[]) => any>;
14
+ addStatusBarItem: import("vitest").Mock<(...args: any[]) => any>;
15
+ addCommand: import("vitest").Mock<(...args: any[]) => any>;
16
+ removeCommand: import("vitest").Mock<(...args: any[]) => any>;
17
+ registerDomEvent: import("vitest").Mock<(...args: any[]) => any>;
18
+ registerCodeMirror: import("vitest").Mock<(...args: any[]) => any>;
19
+ registerEditorExtension: import("vitest").Mock<(...args: any[]) => any>;
20
+ registerMarkdownPostProcessor: import("vitest").Mock<(...args: any[]) => any>;
21
+ registerMarkdownCodeBlockProcessor: import("vitest").Mock<(...args: any[]) => any>;
22
+ registerObsidianProtocolHandler: import("vitest").Mock<(...args: any[]) => any>;
23
+ registerEditorSuggest: import("vitest").Mock<(...args: any[]) => any>;
24
+ registerHoverLinkSource: import("vitest").Mock<(...args: any[]) => any>;
25
+ registerInterval: import("vitest").Mock<(...args: any[]) => any>;
26
+ registerView: import("vitest").Mock<(...args: any[]) => any>;
27
+ registerExtensions: import("vitest").Mock<(...args: any[]) => any>;
28
+ onUserEnable: import("vitest").Mock<(...args: any[]) => any>;
29
+ load: import("vitest").Mock<(...args: any[]) => any>;
30
+ unload: import("vitest").Mock<(...args: any[]) => any>;
31
+ addChild: import("vitest").Mock<(...args: any[]) => any>;
32
+ removeChild: import("vitest").Mock<(...args: any[]) => any>;
33
+ register: import("vitest").Mock<(...args: any[]) => any>;
34
+ }
35
+ export declare class PluginSettingTab {
36
+ app: any;
37
+ plugin: any;
38
+ containerEl: HTMLElement;
39
+ constructor(app: any, plugin: any);
40
+ display: import("vitest").Mock<(...args: any[]) => any>;
41
+ }
42
+ export declare class ItemView {
43
+ app: any;
44
+ leaf: any;
45
+ containerEl: HTMLElement;
46
+ constructor(leaf: any);
47
+ getViewType(): string;
48
+ getDisplayText(): string;
49
+ getIcon(): string;
50
+ getState: import("vitest").Mock<(...args: any[]) => any>;
51
+ setState: import("vitest").Mock<(...args: any[]) => any>;
52
+ }
53
+ export declare class Setting {
54
+ settingEl: HTMLElement;
55
+ nameEl: HTMLElement;
56
+ descEl: HTMLElement;
57
+ controlEl: HTMLElement;
58
+ constructor(_containerEl: HTMLElement);
59
+ setName: import("vitest").Mock<(...args: any[]) => any>;
60
+ setDesc: import("vitest").Mock<(...args: any[]) => any>;
61
+ addText: import("vitest").Mock<(...args: any[]) => any>;
62
+ addTextArea: import("vitest").Mock<(...args: any[]) => any>;
63
+ }
64
+ export declare class TFolder {
65
+ path: string;
66
+ name: string;
67
+ children: any[];
68
+ vault: any;
69
+ parent: TFolder | null;
70
+ constructor(path: string);
71
+ isRoot(): boolean;
72
+ }
73
+ export declare class TFile {
74
+ path: string;
75
+ name: string;
76
+ basename: string;
77
+ extension: string;
78
+ stat: any;
79
+ vault: any;
80
+ parent: TFolder | null;
81
+ constructor(path: string, parentPath?: string);
82
+ }
83
+ export declare class Modal {
84
+ app: any;
85
+ containerEl: HTMLElement;
86
+ titleEl: HTMLElement;
87
+ contentEl: HTMLElement;
88
+ constructor(app: any);
89
+ open: import("vitest").Mock<(...args: any[]) => any>;
90
+ close: import("vitest").Mock<(...args: any[]) => any>;
91
+ onOpen: import("vitest").Mock<(...args: any[]) => any>;
92
+ onClose: import("vitest").Mock<(...args: any[]) => any>;
93
+ }
94
+ export declare class Notice {
95
+ constructor(message: string);
96
+ }
97
+ export declare const MarkdownRenderer: {
98
+ render: import("vitest").Mock<(...args: any[]) => any>;
99
+ };
100
+ export declare function debounce<T extends (...args: any[]) => any>(func: T, wait: number, immediate?: boolean): T;
101
+ export declare const App: import("vitest").Mock<(...args: any[]) => any>;
102
+ export interface MockApp {
103
+ fileManager: {
104
+ processFrontMatter: ReturnType<typeof vi.fn>;
105
+ };
106
+ metadataCache: {
107
+ getFileCache: ReturnType<typeof vi.fn>;
108
+ };
109
+ vault: {
110
+ getAbstractFileByPath: ReturnType<typeof vi.fn>;
111
+ on: ReturnType<typeof vi.fn>;
112
+ read: ReturnType<typeof vi.fn>;
113
+ modify: ReturnType<typeof vi.fn>;
114
+ create: ReturnType<typeof vi.fn>;
115
+ delete: ReturnType<typeof vi.fn>;
116
+ rename: ReturnType<typeof vi.fn>;
117
+ getFiles: ReturnType<typeof vi.fn>;
118
+ getMarkdownFiles: ReturnType<typeof vi.fn>;
119
+ getFolderByPath: ReturnType<typeof vi.fn>;
120
+ };
121
+ workspace: {
122
+ getActiveFile: ReturnType<typeof vi.fn>;
123
+ on: ReturnType<typeof vi.fn>;
124
+ };
125
+ }
126
+ export declare function createMockApp(): MockApp;
127
+ export declare function createMockFile(path: string, options?: {
128
+ basename?: string;
129
+ parentPath?: string;
130
+ extension?: string;
131
+ }): TFile;
132
+ export declare function createMockFileCache(frontmatter?: Record<string, any>): {
133
+ frontmatter: Record<string, any>;
134
+ frontmatterPosition: {
135
+ start: {
136
+ line: number;
137
+ };
138
+ end: {
139
+ line: number;
140
+ };
141
+ } | null;
142
+ sections: never[];
143
+ headings: never[];
144
+ links: never[];
145
+ embeds: never[];
146
+ tags: never[];
147
+ listItems: never[];
148
+ };
149
+ //# sourceMappingURL=obsidian.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"obsidian.d.ts","sourceRoot":"","sources":["../../../src/testing/mocks/obsidian.ts"],"names":[],"mappings":"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"}