@wirecat/cli-memo 0.0.0-stage → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (191) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +314 -2
  3. package/dist/answers/command.d.ts +35 -0
  4. package/dist/answers/command.d.ts.map +1 -0
  5. package/dist/answers/command.js +117 -0
  6. package/dist/answers/command.js.map +1 -0
  7. package/dist/app.d.ts +9 -0
  8. package/dist/app.d.ts.map +1 -0
  9. package/dist/app.js +10 -0
  10. package/dist/app.js.map +1 -0
  11. package/dist/bin/memo.d.ts +3 -0
  12. package/dist/bin/memo.d.ts.map +1 -0
  13. package/dist/bin/memo.js +14 -0
  14. package/dist/bin/memo.js.map +1 -0
  15. package/dist/config.d.ts +39 -0
  16. package/dist/config.d.ts.map +1 -0
  17. package/dist/config.js +40 -0
  18. package/dist/config.js.map +1 -0
  19. package/dist/context/command.d.ts +6 -0
  20. package/dist/context/command.d.ts.map +1 -0
  21. package/dist/context/command.js +73 -0
  22. package/dist/context/command.js.map +1 -0
  23. package/dist/context/context.d.ts +28 -0
  24. package/dist/context/context.d.ts.map +1 -0
  25. package/dist/context/context.js +49 -0
  26. package/dist/context/context.js.map +1 -0
  27. package/dist/knowledge/command.d.ts +4 -0
  28. package/dist/knowledge/command.d.ts.map +1 -0
  29. package/dist/knowledge/command.js +158 -0
  30. package/dist/knowledge/command.js.map +1 -0
  31. package/dist/mail/command.d.ts +4 -0
  32. package/dist/mail/command.d.ts.map +1 -0
  33. package/dist/mail/command.js +61 -0
  34. package/dist/mail/command.js.map +1 -0
  35. package/dist/mail/gmail.d.ts +18 -0
  36. package/dist/mail/gmail.d.ts.map +1 -0
  37. package/dist/mail/gmail.js +103 -0
  38. package/dist/mail/gmail.js.map +1 -0
  39. package/dist/mail/himalaya.d.ts +4 -0
  40. package/dist/mail/himalaya.d.ts.map +1 -0
  41. package/dist/mail/himalaya.js +13 -0
  42. package/dist/mail/himalaya.js.map +1 -0
  43. package/dist/mail/import.d.ts +53 -0
  44. package/dist/mail/import.d.ts.map +1 -0
  45. package/dist/mail/import.js +170 -0
  46. package/dist/mail/import.js.map +1 -0
  47. package/dist/mail/parse.d.ts +21 -0
  48. package/dist/mail/parse.d.ts.map +1 -0
  49. package/dist/mail/parse.js +86 -0
  50. package/dist/mail/parse.js.map +1 -0
  51. package/dist/notes/about.d.ts +31 -0
  52. package/dist/notes/about.d.ts.map +1 -0
  53. package/dist/notes/about.js +69 -0
  54. package/dist/notes/about.js.map +1 -0
  55. package/dist/notes/bound.d.ts +24 -0
  56. package/dist/notes/bound.d.ts.map +1 -0
  57. package/dist/notes/bound.js +57 -0
  58. package/dist/notes/bound.js.map +1 -0
  59. package/dist/notes/command.d.ts +4 -0
  60. package/dist/notes/command.d.ts.map +1 -0
  61. package/dist/notes/command.js +222 -0
  62. package/dist/notes/command.js.map +1 -0
  63. package/dist/notes/dialects/common.d.ts +18 -0
  64. package/dist/notes/dialects/common.d.ts.map +1 -0
  65. package/dist/notes/dialects/common.js +79 -0
  66. package/dist/notes/dialects/common.js.map +1 -0
  67. package/dist/notes/dialects/index.d.ts +5 -0
  68. package/dist/notes/dialects/index.d.ts.map +1 -0
  69. package/dist/notes/dialects/index.js +6 -0
  70. package/dist/notes/dialects/index.js.map +1 -0
  71. package/dist/notes/dialects/markdown.d.ts +7 -0
  72. package/dist/notes/dialects/markdown.d.ts.map +1 -0
  73. package/dist/notes/dialects/markdown.js +51 -0
  74. package/dist/notes/dialects/markdown.js.map +1 -0
  75. package/dist/notes/dialects/obsidian.d.ts +6 -0
  76. package/dist/notes/dialects/obsidian.d.ts.map +1 -0
  77. package/dist/notes/dialects/obsidian.js +33 -0
  78. package/dist/notes/dialects/obsidian.js.map +1 -0
  79. package/dist/notes/dialects/types.d.ts +39 -0
  80. package/dist/notes/dialects/types.d.ts.map +1 -0
  81. package/dist/notes/dialects/types.js +2 -0
  82. package/dist/notes/dialects/types.js.map +1 -0
  83. package/dist/notes/embed.d.ts +51 -0
  84. package/dist/notes/embed.d.ts.map +1 -0
  85. package/dist/notes/embed.js +109 -0
  86. package/dist/notes/embed.js.map +1 -0
  87. package/dist/notes/export.d.ts +27 -0
  88. package/dist/notes/export.d.ts.map +1 -0
  89. package/dist/notes/export.js +76 -0
  90. package/dist/notes/export.js.map +1 -0
  91. package/dist/notes/files.d.ts +14 -0
  92. package/dist/notes/files.d.ts.map +1 -0
  93. package/dist/notes/files.js +77 -0
  94. package/dist/notes/files.js.map +1 -0
  95. package/dist/notes/folders-command.d.ts +4 -0
  96. package/dist/notes/folders-command.d.ts.map +1 -0
  97. package/dist/notes/folders-command.js +113 -0
  98. package/dist/notes/folders-command.js.map +1 -0
  99. package/dist/notes/folders.d.ts +27 -0
  100. package/dist/notes/folders.d.ts.map +1 -0
  101. package/dist/notes/folders.js +46 -0
  102. package/dist/notes/folders.js.map +1 -0
  103. package/dist/notes/import.d.ts +33 -0
  104. package/dist/notes/import.d.ts.map +1 -0
  105. package/dist/notes/import.js +183 -0
  106. package/dist/notes/import.js.map +1 -0
  107. package/dist/notes/internal.d.ts +17 -0
  108. package/dist/notes/internal.d.ts.map +1 -0
  109. package/dist/notes/internal.js +47 -0
  110. package/dist/notes/internal.js.map +1 -0
  111. package/dist/notes/links.d.ts +18 -0
  112. package/dist/notes/links.d.ts.map +1 -0
  113. package/dist/notes/links.js +44 -0
  114. package/dist/notes/links.js.map +1 -0
  115. package/dist/notes/renames.d.ts +11 -0
  116. package/dist/notes/renames.d.ts.map +1 -0
  117. package/dist/notes/renames.js +24 -0
  118. package/dist/notes/renames.js.map +1 -0
  119. package/dist/notes/search.d.ts +5 -0
  120. package/dist/notes/search.d.ts.map +1 -0
  121. package/dist/notes/search.js +20 -0
  122. package/dist/notes/search.js.map +1 -0
  123. package/dist/notes/state.d.ts +14 -0
  124. package/dist/notes/state.d.ts.map +1 -0
  125. package/dist/notes/state.js +21 -0
  126. package/dist/notes/state.js.map +1 -0
  127. package/dist/options.d.ts +4 -0
  128. package/dist/options.d.ts.map +1 -0
  129. package/dist/options.js +12 -0
  130. package/dist/options.js.map +1 -0
  131. package/dist/people/command.d.ts +5 -0
  132. package/dist/people/command.d.ts.map +1 -0
  133. package/dist/people/command.js +57 -0
  134. package/dist/people/command.js.map +1 -0
  135. package/dist/people/identity.d.ts +4 -0
  136. package/dist/people/identity.d.ts.map +1 -0
  137. package/dist/people/identity.js +13 -0
  138. package/dist/people/identity.js.map +1 -0
  139. package/dist/people/notes-map.d.ts +13 -0
  140. package/dist/people/notes-map.d.ts.map +1 -0
  141. package/dist/people/notes-map.js +49 -0
  142. package/dist/people/notes-map.js.map +1 -0
  143. package/dist/people/subject.d.ts +8 -0
  144. package/dist/people/subject.d.ts.map +1 -0
  145. package/dist/people/subject.js +19 -0
  146. package/dist/people/subject.js.map +1 -0
  147. package/dist/program.d.ts +7 -0
  148. package/dist/program.d.ts.map +1 -0
  149. package/dist/program.js +34 -0
  150. package/dist/program.js.map +1 -0
  151. package/dist/run/auto.d.ts +20 -0
  152. package/dist/run/auto.d.ts.map +1 -0
  153. package/dist/run/auto.js +139 -0
  154. package/dist/run/auto.js.map +1 -0
  155. package/dist/run/import.d.ts +18 -0
  156. package/dist/run/import.d.ts.map +1 -0
  157. package/dist/run/import.js +114 -0
  158. package/dist/run/import.js.map +1 -0
  159. package/dist/search/command.d.ts +38 -0
  160. package/dist/search/command.d.ts.map +1 -0
  161. package/dist/search/command.js +269 -0
  162. package/dist/search/command.js.map +1 -0
  163. package/dist/store/gone.d.ts +17 -0
  164. package/dist/store/gone.d.ts.map +1 -0
  165. package/dist/store/gone.js +52 -0
  166. package/dist/store/gone.js.map +1 -0
  167. package/dist/store/scope.d.ts +19 -0
  168. package/dist/store/scope.d.ts.map +1 -0
  169. package/dist/store/scope.js +34 -0
  170. package/dist/store/scope.js.map +1 -0
  171. package/dist/store/source-target.d.ts +18 -0
  172. package/dist/store/source-target.d.ts.map +1 -0
  173. package/dist/store/source-target.js +28 -0
  174. package/dist/store/source-target.js.map +1 -0
  175. package/dist/tags/command.d.ts +4 -0
  176. package/dist/tags/command.d.ts.map +1 -0
  177. package/dist/tags/command.js +166 -0
  178. package/dist/tags/command.js.map +1 -0
  179. package/dist/tasks/command.d.ts +4 -0
  180. package/dist/tasks/command.d.ts.map +1 -0
  181. package/dist/tasks/command.js +83 -0
  182. package/dist/tasks/command.js.map +1 -0
  183. package/dist/tasks/context.d.ts +16 -0
  184. package/dist/tasks/context.d.ts.map +1 -0
  185. package/dist/tasks/context.js +68 -0
  186. package/dist/tasks/context.js.map +1 -0
  187. package/dist/version.d.ts +2 -0
  188. package/dist/version.d.ts.map +1 -0
  189. package/dist/version.js +2 -0
  190. package/dist/version.js.map +1 -0
  191. package/package.json +53 -4
@@ -0,0 +1 @@
1
+ {"version":3,"file":"about.js","sourceRoot":"","sources":["../../src/notes/about.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import type { MessageStore } from "@wirecat/cli-messaging/store";
2
+ import { type NoteFolder } from "./folders.js";
3
+ export type BoundFolder = NoteFolder & {
4
+ id: string;
5
+ };
6
+ /**
7
+ * A folder imported before store version 25 has an id but its path still waits in the store, which hands
8
+ * it over once. It goes straight into this computer's config, so it is never lost between claim and save.
9
+ */
10
+ export declare const claimPendingFolders: (store: MessageStore, env: NodeJS.ProcessEnv) => Promise<void>;
11
+ /**
12
+ * The configured folders the store knows, after claiming pending paths; `only` narrows them by path or id.
13
+ * `strict` refuses a folder with no id — an import must not invent one — while a read just leaves it out.
14
+ */
15
+ export declare const boundFolders: (store: MessageStore, env: NodeJS.ProcessEnv, { only, strict }?: {
16
+ only?: string[];
17
+ strict?: boolean;
18
+ }) => Promise<BoundFolder[]>;
19
+ /** The folder a file lies in, and its path inside it. */
20
+ export declare const folderOfFile: (folders: BoundFolder[], file: string) => {
21
+ folder: BoundFolder;
22
+ path: string;
23
+ };
24
+ //# sourceMappingURL=bound.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bound.d.ts","sourceRoot":"","sources":["../../src/notes/bound.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAA;AAEhE,OAAO,EAAc,KAAK,UAAU,EAAe,MAAM,cAAc,CAAA;AAEvE,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,CAAA;AAErD;;;GAGG;AACH,eAAO,MAAM,mBAAmB,UAAiB,YAAY,OAAO,MAAM,CAAC,UAAU,KAAG,OAAO,CAAC,IAAI,CAWnG,CAAA;AAQD;;;GAGG;AACH,eAAO,MAAM,YAAY,UAChB,YAAY,OACd,MAAM,CAAC,UAAU,qBACG;IAAE,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,KAC7D,OAAO,CAAC,WAAW,EAAE,CAiBvB,CAAA;AAED,yDAAyD;AACzD,eAAO,MAAM,YAAY,YAAa,WAAW,EAAE,QAAQ,MAAM,KAAG;IAAE,MAAM,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAKtG,CAAA"}
@@ -0,0 +1,57 @@
1
+ import { resolve } from "node:path";
2
+ import { CliError } from "@wirecat/cli-core";
3
+ import { loadConfig, updateConfig } from "../config.js";
4
+ import { bindFolder, noteFolders } from "./folders.js";
5
+ /**
6
+ * A folder imported before store version 25 has an id but its path still waits in the store, which hands
7
+ * it over once. It goes straight into this computer's config, so it is never lost between claim and save.
8
+ */
9
+ export const claimPendingFolders = async (store, env) => {
10
+ for (const folder of await store.notes.folders()) {
11
+ if (folder.pendingPath === null)
12
+ continue;
13
+ const { path } = await store.notes.claimFolderPath(folder.id);
14
+ if (path === null)
15
+ continue;
16
+ updateConfig((config) => {
17
+ const here = noteFolders(config.notes).find((entry) => entry.path === resolve(path));
18
+ if (here?.id && here.id !== folder.id)
19
+ return config;
20
+ return bindFolder(config, { id: folder.id, path, format: here?.format ?? folder.format });
21
+ }, env);
22
+ }
23
+ };
24
+ const unbound = (path) => new CliError("configuration_error", `${path} has no folder id — memo folders add ${path}, or memo folders attach <id> ${path} if another computer made one`);
25
+ /**
26
+ * The configured folders the store knows, after claiming pending paths; `only` narrows them by path or id.
27
+ * `strict` refuses a folder with no id — an import must not invent one — while a read just leaves it out.
28
+ */
29
+ export const boundFolders = async (store, env, { only, strict = true } = {}) => {
30
+ await claimPendingFolders(store, env);
31
+ const known = new Set((await store.notes.folders()).map(({ id }) => id));
32
+ const configured = noteFolders(loadConfig(env).notes);
33
+ const wanted = only === undefined
34
+ ? configured
35
+ : only.map((name) => {
36
+ const found = configured.find((folder) => folder.id === name || folder.path === resolve(name));
37
+ if (!found)
38
+ throw unbound(resolve(name));
39
+ return found;
40
+ });
41
+ return wanted.flatMap((folder) => {
42
+ if (folder.id !== null && known.has(folder.id))
43
+ return [folder];
44
+ if (strict)
45
+ throw unbound(folder.path);
46
+ return [];
47
+ });
48
+ };
49
+ /** The folder a file lies in, and its path inside it. */
50
+ export const folderOfFile = (folders, file) => {
51
+ const at = resolve(file);
52
+ const folder = folders.find((candidate) => at.startsWith(`${candidate.path}/`));
53
+ if (!folder)
54
+ throw new CliError("not_found", `${at} is in no configured folder of notes`);
55
+ return { folder, path: at.slice(folder.path.length + 1) };
56
+ };
57
+ //# sourceMappingURL=bound.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bound.js","sourceRoot":"","sources":["../../src/notes/bound.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAE5C,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AACvD,OAAO,EAAE,UAAU,EAAmB,WAAW,EAAE,MAAM,cAAc,CAAA;AAIvE;;;GAGG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,EAAE,KAAmB,EAAE,GAAsB,EAAiB,EAAE;IACtG,KAAK,MAAM,MAAM,IAAI,MAAM,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;QACjD,IAAI,MAAM,CAAC,WAAW,KAAK,IAAI;YAAE,SAAQ;QACzC,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;QAC7D,IAAI,IAAI,KAAK,IAAI;YAAE,SAAQ;QAC3B,YAAY,CAAC,CAAC,MAAM,EAAE,EAAE;YACtB,MAAM,IAAI,GAAG,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC,CAAA;YACpF,IAAI,IAAI,EAAE,EAAE,IAAI,IAAI,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE;gBAAE,OAAO,MAAM,CAAA;YACpD,OAAO,UAAU,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC,CAAA;QAC3F,CAAC,EAAE,GAAG,CAAC,CAAA;IACT,CAAC;AACH,CAAC,CAAA;AAED,MAAM,OAAO,GAAG,CAAC,IAAY,EAAE,EAAE,CAC/B,IAAI,QAAQ,CACV,qBAAqB,EACrB,GAAG,IAAI,wCAAwC,IAAI,iCAAiC,IAAI,+BAA+B,CACxH,CAAA;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,EAC/B,KAAmB,EACnB,GAAsB,EACtB,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,EAAE,GAA0C,EAAE,EAC3C,EAAE;IAC1B,MAAM,mBAAmB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;IACrC,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;IACxE,MAAM,UAAU,GAAG,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAA;IACrD,MAAM,MAAM,GACV,IAAI,KAAK,SAAS;QAChB,CAAC,CAAC,UAAU;QACZ,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YAChB,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,IAAI,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC,CAAA;YAC9F,IAAI,CAAC,KAAK;gBAAE,MAAM,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAA;YACxC,OAAO,KAAK,CAAA;QACd,CAAC,CAAC,CAAA;IACR,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;QAC/B,IAAI,MAAM,CAAC,EAAE,KAAK,IAAI,IAAI,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YAAE,OAAO,CAAC,MAAqB,CAAC,CAAA;QAC9E,IAAI,MAAM;YAAE,MAAM,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QACtC,OAAO,EAAE,CAAA;IACX,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA;AAED,yDAAyD;AACzD,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,OAAsB,EAAE,IAAY,EAAyC,EAAE;IAC1G,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACxB,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,SAAS,CAAC,IAAI,GAAG,CAAC,CAAC,CAAA;IAC/E,IAAI,CAAC,MAAM;QAAE,MAAM,IAAI,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE,sCAAsC,CAAC,CAAA;IACzF,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAA;AAC3D,CAAC,CAAA"}
@@ -0,0 +1,4 @@
1
+ import { type Streams } from "@wirecat/cli-core";
2
+ import { type Command } from "commander";
3
+ export declare const notesCommand: (program: Command, streams: Streams, env: NodeJS.ProcessEnv) => void;
4
+ //# sourceMappingURL=command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../src/notes/command.ts"],"names":[],"mappings":"AACA,OAAO,EAA4B,KAAK,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAE1E,OAAO,EAAE,KAAK,OAAO,EAAwB,MAAM,WAAW,CAAA;AAiD9D,eAAO,MAAM,YAAY,YAAa,OAAO,WAAW,OAAO,OAAO,MAAM,CAAC,UAAU,KAAG,IAoOzF,CAAA"}
@@ -0,0 +1,222 @@
1
+ import { readFileSync } from "node:fs";
2
+ import { CliError, createRenderer } from "@wirecat/cli-core";
3
+ import { openStore } from "@wirecat/cli-messaging/store";
4
+ import { InvalidArgumentError } from "commander";
5
+ import { loadConfig } from "../config.js";
6
+ import { positive } from "../options.js";
7
+ import { importNotesMap } from "../people/notes-map.js";
8
+ import { subjectOf } from "../people/subject.js";
9
+ import { aboutText, notesAbout } from "./about.js";
10
+ import { boundFolders, folderOfFile } from "./bound.js";
11
+ import { DIALECTS } from "./dialects/index.js";
12
+ import { embedNoteChunks } from "./embed.js";
13
+ import { folderNotes, importNotes } from "./import.js";
14
+ import { exportInternal, exportTarget, internalNotes } from "./internal.js";
15
+ import { loadFolderState } from "./state.js";
16
+ const formatOf = (value) => {
17
+ if (!DIALECTS.includes(value))
18
+ throw new InvalidArgumentError(`choose ${DIALECTS.join(", ")}`);
19
+ return value;
20
+ };
21
+ const sourceOf = (value) => {
22
+ if (value !== "file" && value !== "internal")
23
+ throw new InvalidArgumentError("choose file or internal");
24
+ return value;
25
+ };
26
+ const importText = (results) => results
27
+ .map((result) => `${result.folder}: ${result.notes} notes, ${result.changed} changed, ${result.renamed} moved, ${result.deleted} gone` +
28
+ (result.deletionsSkipped === undefined ? "" : `\nDeletions skipped: ${result.deletionsSkipped}`))
29
+ .join("\n");
30
+ const textOf = (options, given) => {
31
+ const sources = [given, options.text, options.file].filter((value) => value !== undefined);
32
+ if (sources.length !== 1)
33
+ throw new CliError("validation_error", "give the text once: as an argument, --text or --file");
34
+ if (options.file !== undefined)
35
+ return readFileSync(options.file === "-" ? 0 : options.file, "utf8");
36
+ return sources[0];
37
+ };
38
+ /** `note:<id>`, or a file inside a configured folder. */
39
+ const noteOf = async (store, env, reference) => {
40
+ if (reference.startsWith("note:"))
41
+ return store.notes.note(reference.slice("note:".length));
42
+ const { folder, path } = folderOfFile(await boundFolders(store, env, { strict: false }), reference);
43
+ const found = (await folderNotes(store, folder.id)).find((note) => note.path === path);
44
+ if (!found)
45
+ throw new CliError("not_found", `${reference} is not imported — memo notes import`);
46
+ return found;
47
+ };
48
+ export const notesCommand = (program, streams, env) => {
49
+ const print = (json, value, text) => {
50
+ if (json)
51
+ createRenderer({ format: "json", color: false, streams }).result(value);
52
+ else
53
+ streams.data(`${text}\n`);
54
+ };
55
+ const withStore = async (work) => {
56
+ const store = await openStore({ env });
57
+ try {
58
+ await importNotesMap(store, env, await boundFolders(store, env, { strict: false }));
59
+ return await work(store);
60
+ }
61
+ finally {
62
+ await store.close();
63
+ }
64
+ };
65
+ const notes = program
66
+ .command("notes")
67
+ .description("Notes: files from your folders, and notes you write here about messages, people and projects");
68
+ notes
69
+ .command("import")
70
+ .description("Bring the folders' notes, their links and tags into the shared store — only what changed")
71
+ .option("--folder <path-or-id...>", "only these configured folders")
72
+ .option("--ignore <path...>", "files or folders inside them to skip, added to notes.ignore — a path or a glob")
73
+ .option("--no-embed", "skip embedding the notes for search by meaning this run")
74
+ .option("--json", "print JSON")
75
+ .action(async (options) => {
76
+ const results = await withStore(async (store) => {
77
+ const config = loadConfig(env).notes;
78
+ const folders = await boundFolders(store, env, options.folder === undefined ? {} : { only: options.folder });
79
+ if (folders.length === 0)
80
+ throw new CliError("configuration_error", "no folders of notes — memo folders add <path>");
81
+ const ignore = [...(config?.ignore ?? []), ...(options.ignore ?? [])];
82
+ const imported = [];
83
+ for (const folder of folders)
84
+ imported.push(await importNotes(store, folder, { ignore, env }));
85
+ await importNotesMap(store, env, folders);
86
+ const embedded = await embedNoteChunks(store, { embed: options.embed && config?.embed !== false, env });
87
+ if (embedded.notEmbedded !== undefined)
88
+ streams.diagnostic(`Not searchable by meaning: ${embedded.notEmbedded}\n`);
89
+ else if (embedded.left)
90
+ streams.diagnostic(`${embedded.chunks} chunks embedded; run again to embed the rest\n`);
91
+ return imported;
92
+ });
93
+ print(options.json, results, importText(results));
94
+ });
95
+ notes
96
+ .command("about")
97
+ .description("Notes about a person, project or note, and the notes that link them — through links, never a name in plain text")
98
+ .argument("<subject>", "<messenger>:<name or id>, person:<uid>, entity:<id> or note:<id>")
99
+ .option("--limit <n>", "most notes of each kind", positive, 20)
100
+ .option("--json", "print JSON")
101
+ .action(async (subject, options) => {
102
+ const answer = await withStore(async (store) => notesAbout(store, await subjectOf(store, subject), options.limit));
103
+ print(options.json, answer, aboutText(answer));
104
+ });
105
+ notes
106
+ .command("show")
107
+ .description("One note: its text, tags, what it links and what links it")
108
+ .argument("<note>", "note:<id>, or a file in a configured folder")
109
+ .option("--json", "print JSON")
110
+ .action(async (reference, options) => {
111
+ const answer = await withStore(async (store) => {
112
+ const note = await noteOf(store, env, reference);
113
+ const ref = `note:${note.id}`;
114
+ const labels = await store.notes.noteTags(note.id);
115
+ return {
116
+ ...note,
117
+ ref,
118
+ tags: labels.map(({ tag }) => tag),
119
+ labels,
120
+ links: await store.notes.links({ from: ref }),
121
+ backlinks: await store.notes.links({ to: ref }),
122
+ provenance: note.folderId === null
123
+ ? null
124
+ : (loadFolderState(env, note.folderId)?.documents[note.path] ?? null),
125
+ };
126
+ });
127
+ print(options.json, answer, answer.text);
128
+ });
129
+ notes
130
+ .command("list")
131
+ .description("Notes, newest first")
132
+ .option("--about <subject>", "only notes about this: <messenger>:<name or id> or a typed reference")
133
+ .option("--source <source>", "file or internal", sourceOf)
134
+ .option("--search <text>", "only notes holding this text, as written")
135
+ .option("--offset <n>", "skip this many", Number, 0)
136
+ .option("--limit <n>", "most notes, at most 500", positive, 20)
137
+ .option("--json", "print JSON")
138
+ .action(async (options) => {
139
+ const page = await withStore(async (store) => store.notes.notes({
140
+ limit: options.limit,
141
+ offset: options.offset,
142
+ ...(options.about === undefined ? {} : { about: (await subjectOf(store, options.about)).ref }),
143
+ ...(options.source === undefined ? {} : { source: options.source }),
144
+ ...(options.search === undefined ? {} : { search: options.search }),
145
+ }));
146
+ print(options.json, page, page.items
147
+ .map((note) => `${note.id} ${note.source} ${note.path ?? note.title ?? note.text.split("\n")[0]}`)
148
+ .join("\n") || "No notes.");
149
+ });
150
+ notes
151
+ .command("add")
152
+ .description("Write a note of your own about messages, people, projects or other notes")
153
+ .argument("[text]", "the note; or --text, or --file")
154
+ .option("--text <text>", "the note")
155
+ .option("--file <path>", "read the note from a file; - reads stdin")
156
+ .option("--title <title>", "a title")
157
+ .option("--about <subject...>", "what it is about: <messenger>:<name or id>, msg:, chat:, person:, entity:, task:, note:")
158
+ .option("--export [dir]", "also write it as a file — to this folder, or notes.export.dir")
159
+ .option("--format <format>", `the file's format: ${DIALECTS.join(", ")}`, formatOf)
160
+ .option("--json", "print JSON")
161
+ .action(async (given, options) => {
162
+ const body = textOf(options, given);
163
+ const answer = await withStore(async (store) => {
164
+ const about = await Promise.all((options.about ?? []).map(async (subject) => (await subjectOf(store, subject)).ref));
165
+ const note = await store.notes.addNote({
166
+ text: body,
167
+ about,
168
+ ...(options.title === undefined ? {} : { title: options.title }),
169
+ });
170
+ if (options.export === undefined)
171
+ return { note };
172
+ const target = exportTarget(loadConfig(env), options.export, options.format);
173
+ return { note, exported: await exportInternal(store, { ...target, notes: [note] }) };
174
+ });
175
+ print(options.json, answer, answer.note.id);
176
+ });
177
+ notes
178
+ .command("edit")
179
+ .description("Change a note you wrote here; a file's note is edited in its file")
180
+ .argument("<id>", "the note's id")
181
+ .requiredOption("--revision <n>", "its current revision, so an edit made meanwhile is not lost", positive)
182
+ .option("--text <text>", "the new text")
183
+ .option("--file <path>", "read the new text from a file; - reads stdin")
184
+ .option("--export [dir]", "also rewrite its file — in this folder, or notes.export.dir")
185
+ .option("--format <format>", `the file's format: ${DIALECTS.join(", ")}`, formatOf)
186
+ .option("--json", "print JSON")
187
+ .action(async (id, options) => {
188
+ const body = textOf(options);
189
+ const answer = await withStore(async (store) => {
190
+ const note = await store.notes.editNote(id.replace(/^note:/, ""), body, options.revision);
191
+ if (options.export === undefined)
192
+ return { note };
193
+ const target = exportTarget(loadConfig(env), options.export, options.format);
194
+ return { note, exported: await exportInternal(store, { ...target, notes: [note] }) };
195
+ });
196
+ print(options.json, answer, `${answer.note.id} revision ${answer.note.revision}`);
197
+ });
198
+ notes
199
+ .command("remove")
200
+ .description("Delete a note you wrote here; a file it was exported to stays")
201
+ .argument("<id>", "the note's id")
202
+ .option("--json", "print JSON")
203
+ .action(async (id, options) => {
204
+ const answer = await withStore((store) => store.notes.removeNote(id.replace(/^note:/, "")));
205
+ print(options.json, answer, `${answer.id} removed`);
206
+ });
207
+ notes
208
+ .command("export")
209
+ .description("Write the notes you wrote here as files, never overwriting one you edited")
210
+ .option("--to <dir>", "the folder to write to (default: notes.export.dir)")
211
+ .option("--format <format>", `the files' format: ${DIALECTS.join(", ")}`, formatOf)
212
+ .option("--json", "print JSON")
213
+ .action(async (options) => {
214
+ const target = exportTarget(loadConfig(env), options.to, options.format);
215
+ const result = await withStore(async (store) => exportInternal(store, { ...target, notes: await internalNotes(store) }));
216
+ print(options.json, result, [
217
+ `${result.dir}: ${result.written.length} written, ${result.unchanged.length} unchanged`,
218
+ ...result.edited.map(({ path }) => `Edited since export, left as it is: ${path}`),
219
+ ].join("\n"));
220
+ });
221
+ };
222
+ //# sourceMappingURL=command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command.js","sourceRoot":"","sources":["../../src/notes/command.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { NoteForExport, NoteLink, ParsedNote } from "./types.js";
2
+ export declare const isReference: (target: string) => boolean;
3
+ export declare const splitFrontMatter: (text: string) => {
4
+ frontMatter: Record<string, unknown>;
5
+ body: string;
6
+ };
7
+ export declare const frontMatterAliases: (frontMatter: Record<string, unknown>) => string[];
8
+ export declare const frontMatterTags: (frontMatter: Record<string, unknown>) => string[];
9
+ /** Code says what a reader typed into a fence, not what the note links to or is tagged with. */
10
+ export declare const withoutCode: (body: string) => string;
11
+ export declare const titleOf: (frontMatter: Record<string, unknown>, body: string, path: string) => string;
12
+ export declare const dropNoteExtension: (target: string) => string;
13
+ /** `msg:…` written in the text with no link syntax around it. */
14
+ export declare const bareReferences: (body: string) => NoteLink[];
15
+ export declare const dedupe: (links: NoteLink[]) => NoteLink[];
16
+ export declare const parsedNote: (frontMatter: Record<string, unknown>, body: string, path: string, links: NoteLink[], inlineTags?: string[]) => ParsedNote;
17
+ export declare const renderNote: (note: NoteForExport, link: (link: NoteLink) => string) => string;
18
+ //# sourceMappingURL=common.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../../src/notes/dialects/common.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAOrE,eAAO,MAAM,WAAW,WAAY,MAAM,KAAG,OAAiC,CAAA;AAE9E,eAAO,MAAM,gBAAgB,SAAU,MAAM,KAAG;IAAE,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAWnG,CAAA;AAYD,eAAO,MAAM,kBAAkB,gBAAiB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAG,MAAM,EAG/E,CAAA;AAED,eAAO,MAAM,eAAe,gBAAiB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAG,MAAM,EACK,CAAA;AAElF,gGAAgG;AAChG,eAAO,MAAM,WAAW,SAAU,MAAM,KAAG,MAC2C,CAAA;AAEtF,eAAO,MAAM,OAAO,gBAAiB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,MAAM,QAAQ,MAAM,KAAG,MAI1F,CAAA;AAED,eAAO,MAAM,iBAAiB,WAAY,MAAM,KAAG,MAAiD,CAAA;AAEpG,iEAAiE;AACjE,eAAO,MAAM,cAAc,SAAU,MAAM,KAAG,QAAQ,EAKjD,CAAA;AAEL,eAAO,MAAM,MAAM,UAAW,QAAQ,EAAE,KAAG,QAAQ,EAUlD,CAAA;AAED,eAAO,MAAM,UAAU,gBACR,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,QAC9B,MAAM,QACN,MAAM,SACL,QAAQ,EAAE,eACL,MAAM,EAAE,KACnB,UAMD,CAAA;AAEF,eAAO,MAAM,UAAU,SAAU,aAAa,QAAQ,CAAC,IAAI,EAAE,QAAQ,KAAK,MAAM,KAAG,MASlF,CAAA"}
@@ -0,0 +1,79 @@
1
+ import { posix } from "node:path";
2
+ import { parse, stringify } from "yaml";
3
+ const FRONT_MATTER = /^---\r?\n([\s\S]*?)\r?\n---(?:\r?\n|$)/;
4
+ const REFERENCE = /^(msg|note|person|entity|task|chat|contact):\S+$/;
5
+ const BARE_REFERENCE = /(?<![\w/:])((?:msg|note|person|entity|task|chat|contact):[^\s<>()[\]"'`]+)/g;
6
+ const MAX_LINKS = 200;
7
+ export const isReference = (target) => REFERENCE.test(target);
8
+ export const splitFrontMatter = (text) => {
9
+ const match = FRONT_MATTER.exec(text);
10
+ if (!match)
11
+ return { frontMatter: {}, body: text };
12
+ let data;
13
+ try {
14
+ data = parse(match[1] ?? "");
15
+ }
16
+ catch {
17
+ data = null;
18
+ }
19
+ const frontMatter = data !== null && typeof data === "object" && !Array.isArray(data) ? data : {};
20
+ return { frontMatter: frontMatter, body: text.slice(match[0].length) };
21
+ };
22
+ const strings = (value) => typeof value === "string"
23
+ ? value
24
+ .split(/[,\s]+/)
25
+ .map((item) => item.trim())
26
+ .filter(Boolean)
27
+ : Array.isArray(value)
28
+ ? value.filter((item) => typeof item === "string").map((item) => item.trim())
29
+ : [];
30
+ export const frontMatterAliases = (frontMatter) => {
31
+ const value = frontMatter.aliases ?? frontMatter.alias;
32
+ return typeof value === "string" ? [value.trim()] : strings(value);
33
+ };
34
+ export const frontMatterTags = (frontMatter) => strings(frontMatter.tags ?? frontMatter.tag).map((tag) => tag.replace(/^#/, ""));
35
+ /** Code says what a reader typed into a fence, not what the note links to or is tagged with. */
36
+ export const withoutCode = (body) => body.replace(/^(```|~~~)[^\n]*\n[\s\S]*?^\1[^\n]*$/gm, "").replace(/`[^`\n]*`/g, "");
37
+ export const titleOf = (frontMatter, body, path) => {
38
+ if (typeof frontMatter.title === "string" && frontMatter.title.trim())
39
+ return frontMatter.title.trim();
40
+ const heading = /^#\s+(.+?)\s*#*\s*$/m.exec(withoutCode(body))?.[1];
41
+ return heading ?? posix.basename(path.replace(/\\/g, "/")).replace(/\.[^./]+$/, "");
42
+ };
43
+ export const dropNoteExtension = (target) => target.replace(/\.(md|markdown)$/i, "");
44
+ /** `msg:…` written in the text with no link syntax around it. */
45
+ export const bareReferences = (body) => [...body.matchAll(BARE_REFERENCE)].map((match) => ({
46
+ target: (match[1] ?? "").replace(/[.,;:!?]+$/, ""),
47
+ anchor: null,
48
+ label: null,
49
+ }));
50
+ export const dedupe = (links) => {
51
+ const seen = new Set();
52
+ return links
53
+ .filter((link) => {
54
+ const key = `${link.target}\u0000${link.anchor ?? ""}\u0000${link.label ?? ""}`;
55
+ if (seen.has(key))
56
+ return false;
57
+ seen.add(key);
58
+ return true;
59
+ })
60
+ .slice(0, MAX_LINKS);
61
+ };
62
+ export const parsedNote = (frontMatter, body, path, links, inlineTags = []) => ({
63
+ title: titleOf(frontMatter, body, path),
64
+ aliases: frontMatterAliases(frontMatter),
65
+ tags: [...new Set([...frontMatterTags(frontMatter), ...inlineTags])],
66
+ links: dedupe(links),
67
+ frontMatter,
68
+ });
69
+ export const renderNote = (note, link) => {
70
+ const frontMatter = {
71
+ ...note.frontMatter,
72
+ ...(note.aliases.length ? { aliases: note.aliases } : {}),
73
+ ...(note.tags.length ? { tags: note.tags } : {}),
74
+ };
75
+ const head = Object.keys(frontMatter).length ? `---\n${stringify(frontMatter).trimEnd()}\n---\n` : "";
76
+ const links = note.links.length ? `\n\n${note.links.map((item) => `- ${link(item)}`).join("\n")}` : "";
77
+ return `${head}# ${note.title}\n\n${note.text.trimEnd()}${links}\n`;
78
+ };
79
+ //# sourceMappingURL=common.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"common.js","sourceRoot":"","sources":["../../../src/notes/dialects/common.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { DialectName, NoteDialect } from "./types.js";
2
+ export declare const dialectOf: (name?: DialectName) => NoteDialect;
3
+ export type { DialectName, NoteDialect, NoteForExport, NoteLink, ParsedNote } from "./types.js";
4
+ export { DIALECTS } from "./types.js";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/notes/dialects/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAI1D,eAAO,MAAM,SAAS,UAAU,WAAW,KAAgB,WAA4B,CAAA;AAEvF,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,aAAa,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAC/F,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA"}
@@ -0,0 +1,6 @@
1
+ import { markdown } from "./markdown.js";
2
+ import { obsidian } from "./obsidian.js";
3
+ const BY_NAME = { obsidian, markdown };
4
+ export const dialectOf = (name = "obsidian") => BY_NAME[name];
5
+ export { DIALECTS } from "./types.js";
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/notes/dialects/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAGxC,MAAM,OAAO,GAAqC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAA;AAExE,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,IAAI,GAAgB,UAAU,EAAe,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;AAGvF,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA"}
@@ -0,0 +1,7 @@
1
+ import type { NoteDialect, NoteLink } from "./types.js";
2
+ /** `[label](path.md#Heading)` and `[label](person:…)`; web links are not notes and are left out. */
3
+ export declare const markdownLinks: (body: string) => NoteLink[];
4
+ export declare const stripMarkdownLinks: (body: string) => string;
5
+ export declare const markdownLink: (link: NoteLink) => string;
6
+ export declare const markdown: NoteDialect;
7
+ //# sourceMappingURL=markdown.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../../../src/notes/dialects/markdown.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AA4BvD,oGAAoG;AACpG,eAAO,MAAM,aAAa,SAAU,MAAM,KAAG,QAAQ,EAGC,CAAA;AAEtD,eAAO,MAAM,kBAAkB,SAAU,MAAM,KAAG,MAAiC,CAAA;AAKnF,eAAO,MAAM,YAAY,SAAU,QAAQ,KAAG,MAK7C,CAAA;AAED,eAAO,MAAM,QAAQ,EAAE,WAQtB,CAAA"}
@@ -0,0 +1,51 @@
1
+ import { NOTE_EXTENSIONS } from "../files.js";
2
+ import { bareReferences, dropNoteExtension, isReference, parsedNote, renderNote, splitFrontMatter, withoutCode, } from "./common.js";
3
+ const LINK = /(?<!!)\[([^\]\n]*)\]\(\s*(<[^>\n]+>|[^)\s]+)(?:\s+"[^"\n]*")?\s*\)/g;
4
+ const SCHEME = /^[a-z][a-z0-9+.-]*:/i;
5
+ const decode = (value) => {
6
+ try {
7
+ return decodeURIComponent(value);
8
+ }
9
+ catch {
10
+ return value;
11
+ }
12
+ };
13
+ const linkOf = (label, destination) => {
14
+ const angled = destination.startsWith("<") && destination.endsWith(">");
15
+ const raw = angled ? destination.slice(1, -1) : destination;
16
+ if (isReference(raw))
17
+ return { target: raw, anchor: null, label: label.trim() || null };
18
+ if (SCHEME.test(raw))
19
+ return null;
20
+ const hash = raw.indexOf("#");
21
+ const path = hash < 0 ? raw : raw.slice(0, hash);
22
+ const fragment = hash < 0 ? null : raw.slice(hash + 1);
23
+ return {
24
+ target: dropNoteExtension(angled ? path : decode(path)).trim(),
25
+ anchor: fragment === null ? null : `#${angled ? fragment : decode(fragment)}`,
26
+ label: label.trim() || null,
27
+ };
28
+ };
29
+ /** `[label](path.md#Heading)` and `[label](person:…)`; web links are not notes and are left out. */
30
+ export const markdownLinks = (body) => [...withoutCode(body).matchAll(LINK)]
31
+ .map((match) => linkOf(match[1] ?? "", match[2] ?? ""))
32
+ .filter((link) => link !== null);
33
+ export const stripMarkdownLinks = (body) => body.replace(LINK, " ");
34
+ const hasOwnExtension = (target) => NOTE_EXTENSIONS.some((extension) => target.toLowerCase().endsWith(extension));
35
+ export const markdownLink = (link) => {
36
+ if (isReference(link.target))
37
+ return `[${link.label ?? link.target}](${link.target})`;
38
+ const file = hasOwnExtension(link.target) ? link.target : `${link.target}.md`;
39
+ const label = link.label ?? link.target.split("/").pop() ?? link.target;
40
+ return `[${label}](<${file}${link.anchor ?? ""}>)`;
41
+ };
42
+ export const markdown = {
43
+ name: "markdown",
44
+ parse(text, path) {
45
+ const { frontMatter, body } = splitFrontMatter(text);
46
+ const links = markdownLinks(body);
47
+ return parsedNote(frontMatter, body, path, [...links, ...bareReferences(withoutCode(stripMarkdownLinks(body)))]);
48
+ },
49
+ render: (note) => renderNote(note, markdownLink),
50
+ };
51
+ //# sourceMappingURL=markdown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown.js","sourceRoot":"","sources":["../../../src/notes/dialects/markdown.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { NoteDialect, NoteLink } from "./types.js";
2
+ export declare const wikiLinks: (body: string) => NoteLink[];
3
+ /** Obsidian reads `#tag` anywhere in the text except code, links and headings. */
4
+ export declare const inlineTags: (body: string) => string[];
5
+ export declare const obsidian: NoteDialect;
6
+ //# sourceMappingURL=obsidian.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"obsidian.d.ts","sourceRoot":"","sources":["../../../src/notes/dialects/obsidian.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAKvD,eAAO,MAAM,SAAS,SAAU,MAAM,KAAG,QAAQ,EAW7C,CAAA;AAEJ,kFAAkF;AAClF,eAAO,MAAM,UAAU,SAAU,MAAM,KAAG,MAAM,EAI/C,CAAA;AAOD,eAAO,MAAM,QAAQ,EAAE,WActB,CAAA"}
@@ -0,0 +1,33 @@
1
+ import { bareReferences, dropNoteExtension, isReference, parsedNote, renderNote, splitFrontMatter, withoutCode, } from "./common.js";
2
+ import { markdownLink, markdownLinks, stripMarkdownLinks } from "./markdown.js";
3
+ const WIKI = /!?\[\[([^\]|\n]+)(?:\|([^\]\n]*))?\]\]/g;
4
+ const TAG = /(?<![\p{L}\p{N}_#&/])#([\p{L}_][\p{L}\p{N}_/-]*)/gu;
5
+ export const wikiLinks = (body) => [...withoutCode(body).matchAll(WIKI)].map((match) => {
6
+ const raw = (match[1] ?? "").trim();
7
+ const label = match[2]?.trim() || null;
8
+ if (isReference(raw))
9
+ return { target: raw, anchor: null, label };
10
+ const split = raw.search(/[#^]/);
11
+ return {
12
+ target: dropNoteExtension(split < 0 ? raw : raw.slice(0, split)).trim(),
13
+ anchor: split < 0 ? null : raw.slice(split),
14
+ label,
15
+ };
16
+ });
17
+ /** Obsidian reads `#tag` anywhere in the text except code, links and headings. */
18
+ export const inlineTags = (body) => [
19
+ ...new Set([...stripMarkdownLinks(withoutCode(body).replace(WIKI, " ")).matchAll(TAG)].map((match) => match[1] ?? "")),
20
+ ];
21
+ const wikiLink = (link) => isReference(link.target)
22
+ ? markdownLink(link)
23
+ : `[[${link.target}${link.anchor ?? ""}${link.label ? `|${link.label}` : ""}]]`;
24
+ export const obsidian = {
25
+ name: "obsidian",
26
+ parse(text, path) {
27
+ const { frontMatter, body } = splitFrontMatter(text);
28
+ const rest = stripMarkdownLinks(withoutCode(body).replace(WIKI, " "));
29
+ return parsedNote(frontMatter, body, path, [...wikiLinks(body), ...markdownLinks(body), ...bareReferences(rest)], inlineTags(body));
30
+ },
31
+ render: (note) => renderNote(note, wikiLink),
32
+ };
33
+ //# sourceMappingURL=obsidian.js.map