@ncukondo/reference-manager 0.32.0 → 0.33.1

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 (62) hide show
  1. package/dist/chunks/{SearchableMultiSelect-jAKQd_B0.js → SearchableMultiSelect-a5BIz7Gb.js} +2 -2
  2. package/dist/chunks/{SearchableMultiSelect-jAKQd_B0.js.map → SearchableMultiSelect-a5BIz7Gb.js.map} +1 -1
  3. package/dist/chunks/{action-menu-DLEwSKrj.js → action-menu-CjmHSfmi.js} +3 -3
  4. package/dist/chunks/{action-menu-DLEwSKrj.js.map → action-menu-CjmHSfmi.js.map} +1 -1
  5. package/dist/chunks/{checker-kVM4S67y.js → checker-D_kpqqRi.js} +4 -4
  6. package/dist/chunks/{checker-kVM4S67y.js.map → checker-D_kpqqRi.js.map} +1 -1
  7. package/dist/chunks/{crossref-client-DcJ42Qt6.js → crossref-client-CXp-1QlL.js} +2 -2
  8. package/dist/chunks/{crossref-client-DcJ42Qt6.js.map → crossref-client-CXp-1QlL.js.map} +1 -1
  9. package/dist/chunks/{fix-interaction-DWUzp9Ri.js → fix-interaction-Va_6E2Kd.js} +5 -5
  10. package/dist/chunks/{fix-interaction-DWUzp9Ri.js.map → fix-interaction-Va_6E2Kd.js.map} +1 -1
  11. package/dist/chunks/{index-B4-i4PrU.js → index-CgOvxl5f.js} +679 -16
  12. package/dist/chunks/index-CgOvxl5f.js.map +1 -0
  13. package/dist/chunks/{index-CmkN2-2A.js → index-Cv1Tph02.js} +75 -32
  14. package/dist/chunks/index-Cv1Tph02.js.map +1 -0
  15. package/dist/chunks/{index-B8iEozpf.js → index-DwvwJZOU.js} +3 -3
  16. package/dist/chunks/index-DwvwJZOU.js.map +1 -0
  17. package/dist/chunks/{index-BuQm8A5F.js → index-Kfj6MVHP.js} +4 -4
  18. package/dist/chunks/{index-BuQm8A5F.js.map → index-Kfj6MVHP.js.map} +1 -1
  19. package/dist/chunks/{loader-BG2eomDC.js → loader-CMu82BI5.js} +42 -1
  20. package/dist/chunks/loader-CMu82BI5.js.map +1 -0
  21. package/dist/chunks/{pubmed-client-Bhzz4Gg5.js → pubmed-client-Cmq5_Bun.js} +2 -2
  22. package/dist/chunks/{pubmed-client-Bhzz4Gg5.js.map → pubmed-client-Cmq5_Bun.js.map} +1 -1
  23. package/dist/chunks/{reference-select-B9b9Ez7Q.js → reference-select-Afwq1-X1.js} +3 -3
  24. package/dist/chunks/{reference-select-B9b9Ez7Q.js.map → reference-select-Afwq1-X1.js.map} +1 -1
  25. package/dist/chunks/{style-select-aXByJLOo.js → style-select-iM-Af4O2.js} +3 -3
  26. package/dist/chunks/{style-select-aXByJLOo.js.map → style-select-iM-Af4O2.js.map} +1 -1
  27. package/dist/cli/commands/add.d.ts +9 -1
  28. package/dist/cli/commands/add.d.ts.map +1 -1
  29. package/dist/cli/index.d.ts.map +1 -1
  30. package/dist/cli.js +2 -2
  31. package/dist/config/defaults.d.ts.map +1 -1
  32. package/dist/config/key-parser.d.ts.map +1 -1
  33. package/dist/config/loader.d.ts.map +1 -1
  34. package/dist/config/schema.d.ts +42 -0
  35. package/dist/config/schema.d.ts.map +1 -1
  36. package/dist/features/attachments/types.d.ts +5 -1
  37. package/dist/features/attachments/types.d.ts.map +1 -1
  38. package/dist/features/import/browser.d.ts +16 -0
  39. package/dist/features/import/browser.d.ts.map +1 -0
  40. package/dist/features/import/detector.d.ts +11 -2
  41. package/dist/features/import/detector.d.ts.map +1 -1
  42. package/dist/features/import/importer.d.ts +17 -0
  43. package/dist/features/import/importer.d.ts.map +1 -1
  44. package/dist/features/import/url-archive.d.ts +18 -0
  45. package/dist/features/import/url-archive.d.ts.map +1 -0
  46. package/dist/features/import/url-fetcher.d.ts +35 -0
  47. package/dist/features/import/url-fetcher.d.ts.map +1 -0
  48. package/dist/features/import/url-fulltext.d.ts +10 -0
  49. package/dist/features/import/url-fulltext.d.ts.map +1 -0
  50. package/dist/features/import/url-metadata.d.ts +34 -0
  51. package/dist/features/import/url-metadata.d.ts.map +1 -0
  52. package/dist/features/operations/add.d.ts +11 -0
  53. package/dist/features/operations/add.d.ts.map +1 -1
  54. package/dist/features/operations/json-output.d.ts +1 -0
  55. package/dist/features/operations/json-output.d.ts.map +1 -1
  56. package/dist/index.js +1 -1
  57. package/dist/server.js +1 -1
  58. package/package.json +8 -1
  59. package/dist/chunks/index-B4-i4PrU.js.map +0 -1
  60. package/dist/chunks/index-B8iEozpf.js.map +0 -1
  61. package/dist/chunks/index-CmkN2-2A.js.map +0 -1
  62. package/dist/chunks/loader-BG2eomDC.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"style-select-aXByJLOo.js","sources":["../../src/features/interactive/style-select.ts"],"sourcesContent":["/**\n * Style selection prompt for citation style selection.\n *\n * Lists built-in styles and custom styles from csl_directory,\n * with the default style shown first.\n */\n\nimport * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport { render, useApp } from \"ink\";\nimport { createElement } from \"react\";\nimport type React from \"react\";\nimport { BUILTIN_STYLES } from \"../../config/csl-styles.js\";\nimport { restoreStdinAfterInk } from \"./alternate-screen.js\";\nimport { Select, type SelectOption } from \"./components/index.js\";\n\n/**\n * Options for style selection\n */\nexport interface StyleSelectOptions {\n /** Directory or directories containing custom CSL files */\n cslDirectory?: string | string[];\n /** Default style to show first */\n defaultStyle?: string;\n}\n\n/**\n * Result from style selection\n */\nexport interface StyleSelectResult {\n /** Selected style name */\n style?: string;\n /** Whether the selection was cancelled */\n cancelled: boolean;\n}\n\n/**\n * Expand tilde (~) in path to home directory\n */\nfunction expandTilde(filePath: string): string {\n if (filePath.startsWith(\"~/\")) {\n const home = process.env.HOME || process.env.USERPROFILE || \"\";\n return path.join(home, filePath.slice(2));\n }\n return filePath;\n}\n\n/**\n * List custom CSL style names from the specified directory/directories.\n *\n * @param cslDirectory - Directory or directories to search for CSL files\n * @returns Array of style names (without .csl extension)\n */\nexport function listCustomStyles(cslDirectory: string | string[] | undefined): string[] {\n if (!cslDirectory) {\n return [];\n }\n\n const directories = Array.isArray(cslDirectory) ? cslDirectory : [cslDirectory];\n const styles = new Set<string>();\n\n for (const dir of directories) {\n const expandedDir = expandTilde(dir);\n\n if (!fs.existsSync(expandedDir)) {\n continue;\n }\n\n try {\n const files = fs.readdirSync(expandedDir);\n for (const file of files) {\n if (file.endsWith(\".csl\")) {\n styles.add(file.slice(0, -4)); // Remove .csl extension\n }\n }\n } catch {\n // Ignore read errors\n }\n }\n\n return Array.from(styles).sort();\n}\n\n/**\n * Build style choices for the selection prompt.\n *\n * @param customStyles - Custom style names from csl_directory\n * @param defaultStyle - Default style to show first\n * @returns Array of SelectOption for Ink Select prompt\n */\nexport function buildStyleChoices(\n customStyles: string[],\n defaultStyle = \"apa\"\n): SelectOption<string>[] {\n const choices: SelectOption<string>[] = [];\n const addedStyles = new Set<string>();\n\n // Helper to add a style choice\n const addChoice = (styleName: string, isDefault: boolean): void => {\n if (addedStyles.has(styleName)) return;\n addedStyles.add(styleName);\n\n choices.push({\n label: isDefault ? `${styleName} (default)` : styleName,\n value: styleName,\n });\n };\n\n // Add default style first\n addChoice(defaultStyle, true);\n\n // Add built-in styles\n for (const style of BUILTIN_STYLES) {\n addChoice(style, false);\n }\n\n // Add custom styles (excluding any that match built-in names)\n for (const style of customStyles) {\n addChoice(style, false);\n }\n\n return choices;\n}\n\n/**\n * Props for the StyleSelectApp component\n */\ninterface StyleSelectAppProps {\n options: SelectOption<string>[];\n onSelect: (value: string) => void;\n onCancel: () => void;\n}\n\n/**\n * StyleSelectApp component - wraps Select for style selection\n */\nfunction StyleSelectApp({ options, onSelect, onCancel }: StyleSelectAppProps): React.ReactElement {\n const { exit } = useApp();\n\n const handleSelect = (value: string): void => {\n onSelect(value);\n exit();\n };\n\n const handleCancel = (): void => {\n onCancel();\n exit();\n };\n\n return createElement(Select<string>, {\n options,\n message: \"Select citation style:\",\n onSelect: handleSelect,\n onCancel: handleCancel,\n });\n}\n\n/**\n * Run the style selection prompt.\n *\n * @param options - Style selection options\n * @returns Selection result with style name\n */\nexport async function runStyleSelect(options: StyleSelectOptions): Promise<StyleSelectResult> {\n // List custom styles from csl_directory\n const customStyles = listCustomStyles(options.cslDirectory);\n\n // Build choices with default first\n const choices = buildStyleChoices(customStyles, options.defaultStyle);\n\n // Create a promise to capture the result\n return new Promise<StyleSelectResult>((resolve) => {\n let result: StyleSelectResult = { cancelled: true };\n\n const handleSelect = (value: string): void => {\n result = {\n style: value,\n cancelled: false,\n };\n };\n\n const handleCancel = (): void => {\n result = {\n cancelled: true,\n };\n };\n\n // Render the Ink app\n const { waitUntilExit, clear } = render(\n createElement(StyleSelectApp, {\n options: choices,\n onSelect: handleSelect,\n onCancel: handleCancel,\n })\n );\n\n // Wait for the app to exit, clear the screen, then resolve\n waitUntilExit()\n .then(() => {\n clear();\n restoreStdinAfterInk();\n resolve(result);\n })\n .catch(() => {\n clear();\n restoreStdinAfterInk();\n resolve({\n cancelled: true,\n });\n });\n });\n}\n"],"names":[],"mappings":";;;;;;AAuCA,SAAS,YAAY,UAA0B;AAC7C,MAAI,SAAS,WAAW,IAAI,GAAG;AAC7B,UAAM,OAAO,QAAQ,IAAI,QAAQ,QAAQ,IAAI,eAAe;AAC5D,WAAO,KAAK,KAAK,MAAM,SAAS,MAAM,CAAC,CAAC;AAAA,EAC1C;AACA,SAAO;AACT;AAQO,SAAS,iBAAiB,cAAuD;AACtF,MAAI,CAAC,cAAc;AACjB,WAAO,CAAA;AAAA,EACT;AAEA,QAAM,cAAc,MAAM,QAAQ,YAAY,IAAI,eAAe,CAAC,YAAY;AAC9E,QAAM,6BAAa,IAAA;AAEnB,aAAW,OAAO,aAAa;AAC7B,UAAM,cAAc,YAAY,GAAG;AAEnC,QAAI,CAAC,GAAG,WAAW,WAAW,GAAG;AAC/B;AAAA,IACF;AAEA,QAAI;AACF,YAAM,QAAQ,GAAG,YAAY,WAAW;AACxC,iBAAW,QAAQ,OAAO;AACxB,YAAI,KAAK,SAAS,MAAM,GAAG;AACzB,iBAAO,IAAI,KAAK,MAAM,GAAG,EAAE,CAAC;AAAA,QAC9B;AAAA,MACF;AAAA,IACF,QAAQ;AAAA,IAER;AAAA,EACF;AAEA,SAAO,MAAM,KAAK,MAAM,EAAE,KAAA;AAC5B;AASO,SAAS,kBACd,cACA,eAAe,OACS;AACxB,QAAM,UAAkC,CAAA;AACxC,QAAM,kCAAkB,IAAA;AAGxB,QAAM,YAAY,CAAC,WAAmB,cAA6B;AACjE,QAAI,YAAY,IAAI,SAAS,EAAG;AAChC,gBAAY,IAAI,SAAS;AAEzB,YAAQ,KAAK;AAAA,MACX,OAAO,YAAY,GAAG,SAAS,eAAe;AAAA,MAC9C,OAAO;AAAA,IAAA,CACR;AAAA,EACH;AAGA,YAAU,cAAc,IAAI;AAG5B,aAAW,SAAS,gBAAgB;AAClC,cAAU,OAAO,KAAK;AAAA,EACxB;AAGA,aAAW,SAAS,cAAc;AAChC,cAAU,OAAO,KAAK;AAAA,EACxB;AAEA,SAAO;AACT;"}
1
+ {"version":3,"file":"style-select-iM-Af4O2.js","sources":["../../src/features/interactive/style-select.ts"],"sourcesContent":["/**\n * Style selection prompt for citation style selection.\n *\n * Lists built-in styles and custom styles from csl_directory,\n * with the default style shown first.\n */\n\nimport * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport { render, useApp } from \"ink\";\nimport { createElement } from \"react\";\nimport type React from \"react\";\nimport { BUILTIN_STYLES } from \"../../config/csl-styles.js\";\nimport { restoreStdinAfterInk } from \"./alternate-screen.js\";\nimport { Select, type SelectOption } from \"./components/index.js\";\n\n/**\n * Options for style selection\n */\nexport interface StyleSelectOptions {\n /** Directory or directories containing custom CSL files */\n cslDirectory?: string | string[];\n /** Default style to show first */\n defaultStyle?: string;\n}\n\n/**\n * Result from style selection\n */\nexport interface StyleSelectResult {\n /** Selected style name */\n style?: string;\n /** Whether the selection was cancelled */\n cancelled: boolean;\n}\n\n/**\n * Expand tilde (~) in path to home directory\n */\nfunction expandTilde(filePath: string): string {\n if (filePath.startsWith(\"~/\")) {\n const home = process.env.HOME || process.env.USERPROFILE || \"\";\n return path.join(home, filePath.slice(2));\n }\n return filePath;\n}\n\n/**\n * List custom CSL style names from the specified directory/directories.\n *\n * @param cslDirectory - Directory or directories to search for CSL files\n * @returns Array of style names (without .csl extension)\n */\nexport function listCustomStyles(cslDirectory: string | string[] | undefined): string[] {\n if (!cslDirectory) {\n return [];\n }\n\n const directories = Array.isArray(cslDirectory) ? cslDirectory : [cslDirectory];\n const styles = new Set<string>();\n\n for (const dir of directories) {\n const expandedDir = expandTilde(dir);\n\n if (!fs.existsSync(expandedDir)) {\n continue;\n }\n\n try {\n const files = fs.readdirSync(expandedDir);\n for (const file of files) {\n if (file.endsWith(\".csl\")) {\n styles.add(file.slice(0, -4)); // Remove .csl extension\n }\n }\n } catch {\n // Ignore read errors\n }\n }\n\n return Array.from(styles).sort();\n}\n\n/**\n * Build style choices for the selection prompt.\n *\n * @param customStyles - Custom style names from csl_directory\n * @param defaultStyle - Default style to show first\n * @returns Array of SelectOption for Ink Select prompt\n */\nexport function buildStyleChoices(\n customStyles: string[],\n defaultStyle = \"apa\"\n): SelectOption<string>[] {\n const choices: SelectOption<string>[] = [];\n const addedStyles = new Set<string>();\n\n // Helper to add a style choice\n const addChoice = (styleName: string, isDefault: boolean): void => {\n if (addedStyles.has(styleName)) return;\n addedStyles.add(styleName);\n\n choices.push({\n label: isDefault ? `${styleName} (default)` : styleName,\n value: styleName,\n });\n };\n\n // Add default style first\n addChoice(defaultStyle, true);\n\n // Add built-in styles\n for (const style of BUILTIN_STYLES) {\n addChoice(style, false);\n }\n\n // Add custom styles (excluding any that match built-in names)\n for (const style of customStyles) {\n addChoice(style, false);\n }\n\n return choices;\n}\n\n/**\n * Props for the StyleSelectApp component\n */\ninterface StyleSelectAppProps {\n options: SelectOption<string>[];\n onSelect: (value: string) => void;\n onCancel: () => void;\n}\n\n/**\n * StyleSelectApp component - wraps Select for style selection\n */\nfunction StyleSelectApp({ options, onSelect, onCancel }: StyleSelectAppProps): React.ReactElement {\n const { exit } = useApp();\n\n const handleSelect = (value: string): void => {\n onSelect(value);\n exit();\n };\n\n const handleCancel = (): void => {\n onCancel();\n exit();\n };\n\n return createElement(Select<string>, {\n options,\n message: \"Select citation style:\",\n onSelect: handleSelect,\n onCancel: handleCancel,\n });\n}\n\n/**\n * Run the style selection prompt.\n *\n * @param options - Style selection options\n * @returns Selection result with style name\n */\nexport async function runStyleSelect(options: StyleSelectOptions): Promise<StyleSelectResult> {\n // List custom styles from csl_directory\n const customStyles = listCustomStyles(options.cslDirectory);\n\n // Build choices with default first\n const choices = buildStyleChoices(customStyles, options.defaultStyle);\n\n // Create a promise to capture the result\n return new Promise<StyleSelectResult>((resolve) => {\n let result: StyleSelectResult = { cancelled: true };\n\n const handleSelect = (value: string): void => {\n result = {\n style: value,\n cancelled: false,\n };\n };\n\n const handleCancel = (): void => {\n result = {\n cancelled: true,\n };\n };\n\n // Render the Ink app\n const { waitUntilExit, clear } = render(\n createElement(StyleSelectApp, {\n options: choices,\n onSelect: handleSelect,\n onCancel: handleCancel,\n })\n );\n\n // Wait for the app to exit, clear the screen, then resolve\n waitUntilExit()\n .then(() => {\n clear();\n restoreStdinAfterInk();\n resolve(result);\n })\n .catch(() => {\n clear();\n restoreStdinAfterInk();\n resolve({\n cancelled: true,\n });\n });\n });\n}\n"],"names":[],"mappings":";;;;;;AAuCA,SAAS,YAAY,UAA0B;AAC7C,MAAI,SAAS,WAAW,IAAI,GAAG;AAC7B,UAAM,OAAO,QAAQ,IAAI,QAAQ,QAAQ,IAAI,eAAe;AAC5D,WAAO,KAAK,KAAK,MAAM,SAAS,MAAM,CAAC,CAAC;AAAA,EAC1C;AACA,SAAO;AACT;AAQO,SAAS,iBAAiB,cAAuD;AACtF,MAAI,CAAC,cAAc;AACjB,WAAO,CAAA;AAAA,EACT;AAEA,QAAM,cAAc,MAAM,QAAQ,YAAY,IAAI,eAAe,CAAC,YAAY;AAC9E,QAAM,6BAAa,IAAA;AAEnB,aAAW,OAAO,aAAa;AAC7B,UAAM,cAAc,YAAY,GAAG;AAEnC,QAAI,CAAC,GAAG,WAAW,WAAW,GAAG;AAC/B;AAAA,IACF;AAEA,QAAI;AACF,YAAM,QAAQ,GAAG,YAAY,WAAW;AACxC,iBAAW,QAAQ,OAAO;AACxB,YAAI,KAAK,SAAS,MAAM,GAAG;AACzB,iBAAO,IAAI,KAAK,MAAM,GAAG,EAAE,CAAC;AAAA,QAC9B;AAAA,MACF;AAAA,IACF,QAAQ;AAAA,IAER;AAAA,EACF;AAEA,SAAO,MAAM,KAAK,MAAM,EAAE,KAAA;AAC5B;AASO,SAAS,kBACd,cACA,eAAe,OACS;AACxB,QAAM,UAAkC,CAAA;AACxC,QAAM,kCAAkB,IAAA;AAGxB,QAAM,YAAY,CAAC,WAAmB,cAA6B;AACjE,QAAI,YAAY,IAAI,SAAS,EAAG;AAChC,gBAAY,IAAI,SAAS;AAEzB,YAAQ,KAAK;AAAA,MACX,OAAO,YAAY,GAAG,SAAS,eAAe;AAAA,MAC9C,OAAO;AAAA,IAAA,CACR;AAAA,EACH;AAGA,YAAU,cAAc,IAAI;AAG5B,aAAW,SAAS,gBAAgB;AAClC,cAAU,OAAO,KAAK;AAAA,EACxB;AAGA,aAAW,SAAS,cAAc;AAChC,cAAU,OAAO,KAAK;AAAA,EACxB;AAEA,SAAO;AACT;"}
@@ -1,4 +1,4 @@
1
- import type { FulltextConfig } from "../../config/schema.js";
1
+ import type { FulltextConfig, UrlArchiveFormat, UrlConfig } from "../../config/schema.js";
2
2
  import type { ILibrary } from "../../core/library-interface.js";
3
3
  import type { PubmedConfig } from "../../features/import/fetcher.js";
4
4
  import type { AddReferencesResult, AddedItem, FailedItem, SkippedItem } from "../../features/operations/add.js";
@@ -24,6 +24,14 @@ export interface AddCommandOptions {
24
24
  output?: "json" | "text";
25
25
  /** Include full CSL-JSON data in JSON output */
26
26
  full?: boolean;
27
+ /** URL import configuration */
28
+ urlConfig?: UrlConfig | undefined;
29
+ /** Archive format override for URL imports */
30
+ archiveFormat?: UrlArchiveFormat | undefined;
31
+ /** Skip archive creation for URL imports */
32
+ noArchive?: boolean | undefined;
33
+ /** Attachments directory for saving URL import data */
34
+ attachmentsDirectory?: string | undefined;
27
35
  }
28
36
  /**
29
37
  * Result from add command execution.
@@ -1 +1 @@
1
- {"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/add.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAEhE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,KAAK,EACV,mBAAmB,EACnB,SAAS,EACT,UAAU,EACV,WAAW,EACZ,MAAM,kCAAkC,CAAC;AAC1C,OAAO,KAAK,EACV,oBAAoB,EACpB,mBAAmB,EACpB,MAAM,6CAA6C,CAAC;AAErD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAEhE;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,8CAA8C;IAC9C,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,+BAA+B;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,4BAA4B;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,+BAA+B;IAC/B,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,gCAAgC;IAChC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,yBAAyB;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,+BAA+B;IAC/B,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,gDAAgD;IAChD,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,mBAAmB,CAAC;AAGnD,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC;AAKnD;;;;;;;GAOG;AACH,wBAAsB,UAAU,CAC9B,OAAO,EAAE,iBAAiB,EAC1B,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,gBAAgB,CAAC,CAgB3B;AAiCD;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,gBAAgB,EAAE,OAAO,EAAE,OAAO,GAAG,MAAM,CAgClF;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CAa5D;AAED;;GAEG;AACH,KAAK,eAAe,GAAG,CACrB,OAAO,EAAE,QAAQ,EACjB,OAAO,EAAE,oBAAoB,KAC1B,OAAO,CAAC,mBAAmB,CAAC,CAAC;AAElC;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,cAAc,EAAE,cAAc,CAAC;IAC/B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,eAAe,CAAC;CAClC;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,UAAU,EAAE,SAAS,EAAE,EACvB,OAAO,EAAE,gBAAgB,EACzB,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAyBhC"}
1
+ {"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/add.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAC1F,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAEhE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,KAAK,EACV,mBAAmB,EACnB,SAAS,EACT,UAAU,EACV,WAAW,EACZ,MAAM,kCAAkC,CAAC;AAC1C,OAAO,KAAK,EACV,oBAAoB,EACpB,mBAAmB,EACpB,MAAM,6CAA6C,CAAC;AAErD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAEhE;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,8CAA8C;IAC9C,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,+BAA+B;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,4BAA4B;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,+BAA+B;IAC/B,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,gCAAgC;IAChC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,yBAAyB;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,+BAA+B;IAC/B,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,gDAAgD;IAChD,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,+BAA+B;IAC/B,SAAS,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAClC,8CAA8C;IAC9C,aAAa,CAAC,EAAE,gBAAgB,GAAG,SAAS,CAAC;IAC7C,4CAA4C;IAC5C,SAAS,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAChC,uDAAuD;IACvD,oBAAoB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC3C;AAED;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,mBAAmB,CAAC;AAGnD,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC;AAKnD;;;;;;;GAOG;AACH,wBAAsB,UAAU,CAC9B,OAAO,EAAE,iBAAiB,EAC1B,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,gBAAgB,CAAC,CA4B3B;AAuCD;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,gBAAgB,EAAE,OAAO,EAAE,OAAO,GAAG,MAAM,CAgClF;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CAa5D;AAED;;GAEG;AACH,KAAK,eAAe,GAAG,CACrB,OAAO,EAAE,QAAQ,EACjB,OAAO,EAAE,oBAAoB,KAC1B,OAAO,CAAC,mBAAmB,CAAC,CAAC;AAElC;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,cAAc,EAAE,cAAc,CAAC;IAC/B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,eAAe,CAAC;CAClC;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,UAAU,EAAE,SAAS,EAAE,EACvB,OAAO,EAAE,gBAAgB,EACzB,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAyBhC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAC;AAoE5C;;GAEG;AACH,wBAAgB,aAAa,IAAI,OAAO,CAmDvC;AA+1BD;;GAEG;AACH,wBAAsB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAmBxD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAC;AAoE5C;;GAEG;AACH,wBAAgB,aAAa,IAAI,OAAO,CAmDvC;AAq3BD;;GAEG;AACH,wBAAsB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAmBxD"}
package/dist/cli.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import "commander";
2
- import "./chunks/index-B4-i4PrU.js";
2
+ import "./chunks/index-CgOvxl5f.js";
3
3
  import "./chunks/file-watcher-CWHg1yol.js";
4
- import { c, m } from "./chunks/index-CmkN2-2A.js";
4
+ import { c, m } from "./chunks/index-Cv1Tph02.js";
5
5
  export {
6
6
  c as createProgram,
7
7
  m as main
@@ -1 +1 @@
1
- {"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C;;;GAGG;AACH,wBAAgB,yBAAyB,IAAI,MAAM,CAElD;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,CAE9C;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,IAAI,MAAM,CAEjD;AAED;;;GAGG;AACH,wBAAgB,kCAAkC,IAAI,MAAM,CAE3D;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,IAAI,MAAM,CAE/C;AAED;;;GAGG;AACH,wBAAgB,8BAA8B,IAAI,MAAM,CAEvD;AAED;;GAEG;AACH,eAAO,MAAM,aAAa,EAAE,MAgE3B,CAAC"}
1
+ {"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C;;;GAGG;AACH,wBAAgB,yBAAyB,IAAI,MAAM,CAElD;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,CAE9C;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,IAAI,MAAM,CAEjD;AAED;;;GAGG;AACH,wBAAgB,kCAAkC,IAAI,MAAM,CAE3D;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,IAAI,MAAM,CAE/C;AAED;;;GAGG;AACH,wBAAgB,8BAA8B,IAAI,MAAM,CAEvD;AAED;;GAEG;AACH,eAAO,MAAM,aAAa,EAAE,MAqE3B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"key-parser.d.ts","sourceRoot":"","sources":["../../src/config/key-parser.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,GAAG,UAAU,CAAC;AAErF;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,sCAAsC;IACtC,GAAG,EAAE,MAAM,CAAC;IACZ,qBAAqB;IACrB,IAAI,EAAE,eAAe,CAAC;IACtB,6BAA6B;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,yCAAyC;IACzC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,mDAAmD;IACnD,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAqOD;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAEpD;AAcD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CASrD;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAUlE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAW3D;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAcpD"}
1
+ {"version":3,"file":"key-parser.d.ts","sourceRoot":"","sources":["../../src/config/key-parser.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,GAAG,UAAU,CAAC;AAErF;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,sCAAsC;IACtC,GAAG,EAAE,MAAM,CAAC;IACZ,qBAAqB;IACrB,IAAI,EAAE,eAAe,CAAC;IACtB,6BAA6B;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,yCAAyC;IACzC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,mDAAmD;IACnD,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AA+OD;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAEpD;AAcD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CASrD;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAUlE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAW3D;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAcpD"}
@@ -1 +1 @@
1
- {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"AAAA;;GAEG;AAWH,OAAO,EACL,KAAK,MAAM,EAMZ,MAAM,aAAa,CAAC;AAErB;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,yDAAyD;IACzD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,mEAAmE;IACnE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,2EAA2E;IAC3E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,6BAA6B;IAC7B,SAAS,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;CAC7B;AAoUD;;;;;;;;;;GAUG;AACH,wBAAgB,UAAU,CAAC,OAAO,GAAE,iBAAsB,GAAG,MAAM,CAkDlE"}
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"AAAA;;GAEG;AAWH,OAAO,EACL,KAAK,MAAM,EAMZ,MAAM,aAAa,CAAC;AAErB;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,yDAAyD;IACzD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,mEAAmE;IACnE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,2EAA2E;IAC3E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,6BAA6B;IAC7B,SAAS,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;CAC7B;AA0UD;;;;;;;;;;GAUG;AACH,wBAAgB,UAAU,CAAC,OAAO,GAAE,iBAAsB,GAAG,MAAM,CAkDlE"}
@@ -204,6 +204,24 @@ export declare const fulltextConfigSchema: z.ZodObject<{
204
204
  ncbiTool: z.ZodOptional<z.ZodString>;
205
205
  }, z.core.$strip>;
206
206
  }, z.core.$strip>;
207
+ /**
208
+ * URL import archive format schema
209
+ */
210
+ export declare const urlArchiveFormatSchema: z.ZodEnum<{
211
+ html: "html";
212
+ mhtml: "mhtml";
213
+ }>;
214
+ /**
215
+ * URL import configuration schema
216
+ */
217
+ export declare const urlConfigSchema: z.ZodObject<{
218
+ archiveFormat: z.ZodEnum<{
219
+ html: "html";
220
+ mhtml: "mhtml";
221
+ }>;
222
+ browserPath: z.ZodString;
223
+ timeout: z.ZodNumber;
224
+ }, z.core.$strip>;
207
225
  /**
208
226
  * Attachments storage configuration schema
209
227
  */
@@ -294,6 +312,14 @@ export declare const configSchema: z.ZodObject<{
294
312
  attachments: z.ZodObject<{
295
313
  directory: z.ZodString;
296
314
  }, z.core.$strip>;
315
+ url: z.ZodObject<{
316
+ archiveFormat: z.ZodEnum<{
317
+ html: "html";
318
+ mhtml: "mhtml";
319
+ }>;
320
+ browserPath: z.ZodString;
321
+ timeout: z.ZodNumber;
322
+ }, z.core.$strip>;
297
323
  cli: z.ZodObject<{
298
324
  defaultLimit: z.ZodNumber;
299
325
  defaultSort: z.ZodEnum<{
@@ -459,6 +485,19 @@ export declare const partialConfigSchema: z.ZodObject<{
459
485
  attachments: z.ZodOptional<z.ZodObject<{
460
486
  directory: z.ZodOptional<z.ZodString>;
461
487
  }, z.core.$strip>>;
488
+ url: z.ZodOptional<z.ZodObject<{
489
+ archiveFormat: z.ZodOptional<z.ZodEnum<{
490
+ html: "html";
491
+ mhtml: "mhtml";
492
+ }>>;
493
+ archive_format: z.ZodOptional<z.ZodEnum<{
494
+ html: "html";
495
+ mhtml: "mhtml";
496
+ }>>;
497
+ browserPath: z.ZodOptional<z.ZodString>;
498
+ browser_path: z.ZodOptional<z.ZodString>;
499
+ timeout: z.ZodOptional<z.ZodNumber>;
500
+ }, z.core.$strip>>;
462
501
  cli: z.ZodOptional<z.ZodObject<{
463
502
  defaultLimit: z.ZodOptional<z.ZodNumber>;
464
503
  default_limit: z.ZodOptional<z.ZodNumber>;
@@ -522,6 +561,8 @@ export type FulltextSource = z.infer<typeof fulltextSourceSchema>;
522
561
  export type FulltextPreferredType = z.infer<typeof fulltextPreferredTypeSchema>;
523
562
  export type FulltextConfig = z.infer<typeof fulltextConfigSchema>;
524
563
  export type AttachmentsConfig = z.infer<typeof attachmentsConfigSchema>;
564
+ export type UrlArchiveFormat = z.infer<typeof urlArchiveFormatSchema>;
565
+ export type UrlConfig = z.infer<typeof urlConfigSchema>;
525
566
  export type TuiConfig = z.infer<typeof tuiConfigSchema>;
526
567
  export type EditConfigFormat = z.infer<typeof editFormatSchema>;
527
568
  export type EditConfig = z.infer<typeof editConfigSchema>;
@@ -546,6 +587,7 @@ export type DeepPartialConfig = {
546
587
  converters?: FulltextConfig["converters"];
547
588
  };
548
589
  attachments?: Partial<AttachmentsConfig>;
590
+ url?: Partial<UrlConfig>;
549
591
  cli?: Partial<Omit<CliConfig, "tui" | "edit">> & {
550
592
  tui?: Partial<TuiConfig>;
551
593
  edit?: Partial<EditConfig>;
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"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"}
@@ -13,7 +13,7 @@ export type Attachments = z.infer<typeof AttachmentsSchema>;
13
13
  /**
14
14
  * Reserved role identifiers with special constraints
15
15
  */
16
- export declare const RESERVED_ROLES: readonly ["fulltext", "supplement", "notes", "draft"];
16
+ export declare const RESERVED_ROLES: readonly ["fulltext", "supplement", "notes", "draft", "archive"];
17
17
  export type ReservedRole = (typeof RESERVED_ROLES)[number];
18
18
  /**
19
19
  * Check if a role is a reserved role
@@ -27,4 +27,8 @@ export declare function getExtension(filename: string): string;
27
27
  * Check if fulltext files satisfy the constraint: max 2 files (1 PDF + 1 Markdown)
28
28
  */
29
29
  export declare function isValidFulltextFiles(files: AttachmentFile[]): boolean;
30
+ /**
31
+ * Check if archive files satisfy the constraint: max 1 file
32
+ */
33
+ export declare function isValidArchiveFiles(files: AttachmentFile[]): boolean;
30
34
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/features/attachments/types.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,KAAK,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAE5F;;;GAGG;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE;;;GAGG;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D;;GAEG;AACH,eAAO,MAAM,cAAc,uDAAwD,CAAC;AAEpF,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAE3D;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,IAAI,YAAY,CAEjE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAGrD;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,cAAc,EAAE,GAAG,OAAO,CAiBrE"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/features/attachments/types.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,KAAK,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAE5F;;;GAGG;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE;;;GAGG;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D;;GAEG;AACH,eAAO,MAAM,cAAc,kEAAmE,CAAC;AAE/F,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAE3D;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,IAAI,YAAY,CAEjE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAGrD;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,cAAc,EAAE,GAAG,OAAO,CAiBrE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,cAAc,EAAE,GAAG,OAAO,CAGpE"}
@@ -0,0 +1,16 @@
1
+ import type { Browser } from "playwright-core";
2
+ import type { UrlConfig } from "../../config/schema.js";
3
+ /**
4
+ * Error thrown when Chrome/Chromium is not found on the system.
5
+ */
6
+ export declare class BrowserNotFoundError extends Error {
7
+ constructor(cause?: Error);
8
+ }
9
+ /**
10
+ * Launch a headless browser for URL import.
11
+ *
12
+ * Uses system-installed Chrome/Chromium via playwright-core.
13
+ * Falls back to config.browserPath if provided.
14
+ */
15
+ export declare function launchBrowser(config: UrlConfig): Promise<Browser>;
16
+ //# sourceMappingURL=browser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../../src/features/import/browser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAExD;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,KAAK;gBACjC,KAAK,CAAC,EAAE,KAAK;CAkB1B;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,CAyBvE"}
@@ -10,7 +10,7 @@
10
10
  /**
11
11
  * Supported input formats
12
12
  */
13
- export type InputFormat = "json" | "bibtex" | "ris" | "nbib" | "pmid" | "doi" | "isbn" | "arxiv" | "identifiers" | "unknown";
13
+ export type InputFormat = "json" | "bibtex" | "ris" | "nbib" | "pmid" | "doi" | "isbn" | "arxiv" | "url" | "identifiers" | "unknown";
14
14
  /**
15
15
  * Detect the format of the given input
16
16
  *
@@ -30,7 +30,16 @@ export declare function detectByContent(content: string): InputFormat;
30
30
  /**
31
31
  * Detect if a single string is a PMID, DOI, or ISBN
32
32
  */
33
- export declare function detectSingleIdentifier(input: string): "pmid" | "doi" | "isbn" | "arxiv" | "unknown";
33
+ export declare function detectSingleIdentifier(input: string): "pmid" | "doi" | "isbn" | "arxiv" | "url" | "unknown";
34
+ /**
35
+ * Try to extract a PMID or PMCID from a PubMed/PMC URL.
36
+ * Returns the extracted identifier string or null if not a PubMed URL.
37
+ */
38
+ export declare function extractPubmedId(input: string): string | null;
39
+ /**
40
+ * Check if input is an http/https URL that is not already matched as a known identifier (DOI, arXiv, PubMed).
41
+ */
42
+ export declare function isUrl(input: string): boolean;
34
43
  /**
35
44
  * Check if string is a valid DOI
36
45
  */
@@ -1 +1 @@
1
- {"version":3,"file":"detector.d.ts","sourceRoot":"","sources":["../../../src/features/import/detector.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH;;GAEG;AACH,MAAM,MAAM,WAAW,GACnB,MAAM,GACN,QAAQ,GACR,KAAK,GACL,MAAM,GACN,MAAM,GACN,KAAK,GACL,MAAM,GACN,OAAO,GACP,aAAa,GACb,SAAS,CAAC;AAsBd;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,WAAW,CAwBzE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,CAW5D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW,CA0B5D;AAkCD;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,MAAM,GACZ,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAsB/C;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAW5C;AA0BD;;GAEG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAc7C;AAED;;;;;;GAMG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAgC7C;AAED;;GAEG;AACH,eAAO,MAAM,gBAAgB,QAA4B,CAAC;AAE1D;;;;;;;GAOG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAY9C"}
1
+ {"version":3,"file":"detector.d.ts","sourceRoot":"","sources":["../../../src/features/import/detector.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH;;GAEG;AACH,MAAM,MAAM,WAAW,GACnB,MAAM,GACN,QAAQ,GACR,KAAK,GACL,MAAM,GACN,MAAM,GACN,KAAK,GACL,MAAM,GACN,OAAO,GACP,KAAK,GACL,aAAa,GACb,SAAS,CAAC;AAsBd;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,WAAW,CAwBzE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,CAW5D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW,CA0B5D;AAkCD;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,MAAM,GACZ,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,SAAS,CAgCvD;AAuBD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAQ5D;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAW5C;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAW5C;AA0BD;;GAEG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAc7C;AAED;;;;;;GAMG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAgC7C;AAED;;GAEG;AACH,eAAO,MAAM,gBAAgB,QAA4B,CAAC;AAE1D;;;;;;;GAOG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAY9C"}
@@ -4,10 +4,20 @@
4
4
  * Coordinates format detection, parsing, and fetching to import references
5
5
  * from various input formats.
6
6
  */
7
+ import type { UrlArchiveFormat, UrlConfig } from "../../config/schema.js";
7
8
  import type { CslItem } from "../../core/csl-json/types.js";
8
9
  import type { InputFormat } from "./detector.js";
9
10
  import type { FailureReason, PubmedConfig } from "./fetcher.js";
11
+ import type { ArchiveResult } from "./url-archive.js";
10
12
  export type { FailureReason } from "./fetcher.js";
13
+ /**
14
+ * URL-specific data returned alongside the CslItem for URL imports.
15
+ */
16
+ export interface UrlImportData {
17
+ fulltext: string;
18
+ archive?: ArchiveResult | undefined;
19
+ warnings: string[];
20
+ }
11
21
  /**
12
22
  * Result of importing a single item
13
23
  */
@@ -15,6 +25,7 @@ export type ImportItemResult = {
15
25
  success: true;
16
26
  item: CslItem;
17
27
  source: string;
28
+ urlData?: UrlImportData | undefined;
18
29
  } | {
19
30
  success: false;
20
31
  error: string;
@@ -58,6 +69,12 @@ export interface ImportInputsOptions extends ImportOptions {
58
69
  format?: InputFormat | "auto";
59
70
  /** Content from stdin (if provided, processed before file/identifier inputs) */
60
71
  stdinContent?: string;
72
+ /** URL import configuration (required for URL inputs) */
73
+ urlConfig?: UrlConfig | undefined;
74
+ /** Archive format override for URL imports */
75
+ archiveFormat?: UrlArchiveFormat | undefined;
76
+ /** Skip archive creation for URL imports */
77
+ noArchive?: boolean | undefined;
61
78
  }
62
79
  export declare function importFromInputs(inputs: string[], options: ImportInputsOptions): Promise<ImportResult>;
63
80
  //# sourceMappingURL=importer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"importer.d.ts","sourceRoot":"","sources":["../../../src/features/import/importer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAC;AAa5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjD,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAKhE,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAElD;;GAEG;AACH,MAAM,MAAM,gBAAgB,GACxB;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAChD;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,aAAa,CAAA;CAAE,CAAC;AAE7E;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,gBAAgB,EAAE,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B;AA8UD;;;;;;;GAOG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,WAAW,GAAG,MAAM,EAC5B,QAAQ,EAAE,aAAa,GACtB,OAAO,CAAC,YAAY,CAAC,CA2CvB;AAED;;;;;;GAMG;AACH,wBAAsB,qBAAqB,CACzC,WAAW,EAAE,MAAM,EAAE,EACrB,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,YAAY,CAAC,CA+BvB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAoB,SAAQ,aAAa;IACxD,oDAAoD;IACpD,MAAM,CAAC,EAAE,WAAW,GAAG,MAAM,CAAC;IAC9B,gFAAgF;IAChF,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AA0GD,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,MAAM,EAAE,EAChB,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,YAAY,CAAC,CAiCvB"}
1
+ {"version":3,"file":"importer.d.ts","sourceRoot":"","sources":["../../../src/features/import/importer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAC1E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAC;AAsB5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjD,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAGhE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAItD,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAElD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC;IACpC,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,MAAM,gBAAgB,GACxB;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,aAAa,GAAG,SAAS,CAAA;CAAE,GACrF;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,aAAa,CAAA;CAAE,CAAC;AAE7E;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,gBAAgB,EAAE,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B;AA8UD;;;;;;;GAOG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,WAAW,GAAG,MAAM,EAC5B,QAAQ,EAAE,aAAa,GACtB,OAAO,CAAC,YAAY,CAAC,CA2CvB;AAED;;;;;;GAMG;AACH,wBAAsB,qBAAqB,CACzC,WAAW,EAAE,MAAM,EAAE,EACrB,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,YAAY,CAAC,CA+BvB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAoB,SAAQ,aAAa;IACxD,oDAAoD;IACpD,MAAM,CAAC,EAAE,WAAW,GAAG,MAAM,CAAC;IAC9B,gFAAgF;IAChF,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,yDAAyD;IACzD,SAAS,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAClC,8CAA8C;IAC9C,aAAa,CAAC,EAAE,gBAAgB,GAAG,SAAS,CAAC;IAC7C,4CAA4C;IAC5C,SAAS,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CACjC;AAwOD,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,MAAM,EAAE,EAChB,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,YAAY,CAAC,CAiCvB"}
@@ -0,0 +1,18 @@
1
+ import type { Page } from "playwright-core";
2
+ import type { UrlArchiveFormat } from "../../config/schema.js";
3
+ /**
4
+ * Result of archive creation.
5
+ */
6
+ export interface ArchiveResult {
7
+ data: string;
8
+ extension: string;
9
+ }
10
+ /**
11
+ * Create an archive of the current page in the specified format.
12
+ *
13
+ * @param page - Playwright page
14
+ * @param format - "mhtml" (CDP snapshot) or "html" (page source)
15
+ * @returns Archive data and file extension
16
+ */
17
+ export declare function createArchive(page: Page, format: UrlArchiveFormat): Promise<ArchiveResult>;
18
+ //# sourceMappingURL=url-archive.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"url-archive.d.ts","sourceRoot":"","sources":["../../../src/features/import/url-archive.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE/D;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAsBD;;;;;;GAMG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,aAAa,CAAC,CAQhG"}
@@ -0,0 +1,35 @@
1
+ import type { UrlArchiveFormat, UrlConfig } from "../../config/schema.js";
2
+ import type { CslItem } from "../../core/csl-json/types.js";
3
+ import { type ArchiveResult } from "./url-archive.js";
4
+ /**
5
+ * Options for URL fetching.
6
+ */
7
+ export interface UrlFetchOptions {
8
+ urlConfig: UrlConfig;
9
+ archiveFormat?: UrlArchiveFormat | undefined;
10
+ noArchive?: boolean | undefined;
11
+ }
12
+ /**
13
+ * Result of fetching a URL.
14
+ */
15
+ export interface UrlFetchResult {
16
+ item: CslItem;
17
+ fulltext: string;
18
+ archive?: ArchiveResult | undefined;
19
+ warnings: string[];
20
+ }
21
+ /**
22
+ * Fetch a single URL and extract metadata, fulltext, and archive.
23
+ *
24
+ * Launches and closes a browser for this single URL.
25
+ * For multiple URLs, use fetchUrls() to share a browser instance.
26
+ */
27
+ export declare function fetchUrl(url: string, options: UrlFetchOptions): Promise<UrlFetchResult>;
28
+ /**
29
+ * Fetch multiple URLs reusing a single browser instance.
30
+ *
31
+ * Each URL is processed sequentially in a new page within the same browser.
32
+ * Returns one result per URL (success or error).
33
+ */
34
+ export declare function fetchUrls(urls: string[], options: UrlFetchOptions): Promise<Map<string, UrlFetchResult | Error>>;
35
+ //# sourceMappingURL=url-fetcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"url-fetcher.d.ts","sourceRoot":"","sources":["../../../src/features/import/url-fetcher.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAC1E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAC;AAE5D,OAAO,EAAE,KAAK,aAAa,EAAiB,MAAM,kBAAkB,CAAC;AAIrE;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,SAAS,CAAC;IACrB,aAAa,CAAC,EAAE,gBAAgB,GAAG,SAAS,CAAC;IAC7C,SAAS,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC;IACpC,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAuFD;;;;;GAKG;AACH,wBAAsB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC,CAa7F;AAED;;;;;GAKG;AACH,wBAAsB,SAAS,CAC7B,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,cAAc,GAAG,KAAK,CAAC,CAAC,CAuC9C"}
@@ -0,0 +1,10 @@
1
+ import type { Page } from "playwright-core";
2
+ /**
3
+ * Generate Markdown fulltext from a browser page.
4
+ *
5
+ * Uses Readability (in-browser) for clean HTML extraction,
6
+ * then Turndown (Node.js) for HTML → Markdown conversion.
7
+ * Falls back to full page HTML if Readability returns null.
8
+ */
9
+ export declare function generateFulltext(page: Page): Promise<string>;
10
+ //# sourceMappingURL=url-fulltext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"url-fulltext.d.ts","sourceRoot":"","sources":["../../../src/features/import/url-fulltext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAmD5C;;;;;;GAMG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CASlE"}
@@ -0,0 +1,34 @@
1
+ import type { Page } from "playwright-core";
2
+ import type { CslItem } from "../../core/csl-json/types.js";
3
+ /** Raw metadata extracted from the page via page.evaluate() */
4
+ interface RawMetadata {
5
+ jsonLd: unknown[];
6
+ citation: Record<string, string | string[]>;
7
+ dc: Record<string, string | string[]>;
8
+ og: Record<string, string>;
9
+ title: string;
10
+ }
11
+ /**
12
+ * Extract raw metadata from a Document-like object.
13
+ * Usable both from page.evaluate (browser) and JSDOM (tests).
14
+ *
15
+ * SYNC NOTE: The DOM scraping logic here must stay in sync with the
16
+ * inline page.evaluate string in extractMetadata() below.
17
+ * If you change selectors or extraction logic here, update the
18
+ * page.evaluate block as well.
19
+ */
20
+ export declare function extractRawMetadataFromDocument(doc: {
21
+ querySelectorAll(sel: string): Iterable<{
22
+ getAttribute(n: string): string | null;
23
+ textContent: string | null;
24
+ }>;
25
+ title: string;
26
+ }): RawMetadata;
27
+ /**
28
+ * Extract metadata from a browser page using multiple sources.
29
+ *
30
+ * Priority: JSON-LD → citation_* → Dublin Core → Open Graph → HTML
31
+ */
32
+ export declare function extractMetadata(page: Page): Promise<CslItem>;
33
+ export {};
34
+ //# sourceMappingURL=url-metadata.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"url-metadata.d.ts","sourceRoot":"","sources":["../../../src/features/import/url-metadata.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAC;AAE5D,+DAA+D;AAC/D,UAAU,WAAW;IACnB,MAAM,EAAE,OAAO,EAAE,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC;IAC5C,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC;IACtC,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;CACf;AAoTD;;;;;;;;GAQG;AACH,wBAAgB,8BAA8B,CAAC,GAAG,EAAE;IAClD,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,CAAC;QACtC,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;QACvC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;KAC5B,CAAC,CAAC;IACH,KAAK,EAAE,MAAM,CAAC;CACf,GAAG,WAAW,CAoBd;AAID;;;;GAIG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,CA6ElE"}
@@ -1,3 +1,4 @@
1
+ import type { UrlArchiveFormat, UrlConfig } from "../../config/schema.js";
1
2
  import type { ILibrary } from "../../core/library-interface.js";
2
3
  import type { InputFormat } from "../import/detector.js";
3
4
  import type { PubmedConfig } from "../import/fetcher.js";
@@ -14,6 +15,14 @@ export interface AddReferencesOptions {
14
15
  pubmedConfig?: PubmedConfig;
15
16
  /** Content from stdin (if provided, processed before file/identifier inputs) */
16
17
  stdinContent?: string;
18
+ /** URL import configuration */
19
+ urlConfig?: UrlConfig | undefined;
20
+ /** Archive format override for URL imports */
21
+ archiveFormat?: UrlArchiveFormat | undefined;
22
+ /** Skip archive creation for URL imports */
23
+ noArchive?: boolean | undefined;
24
+ /** Attachments directory for saving URL import data (fulltext/archive) */
25
+ attachmentsDirectory?: string | undefined;
17
26
  }
18
27
  /**
19
28
  * Information about a successfully added reference
@@ -27,6 +36,8 @@ export interface AddedItem {
27
36
  idChanged?: boolean;
28
37
  /** Original ID from source file before collision resolution */
29
38
  originalId?: string;
39
+ /** Warnings from URL import (e.g., content extraction issues, save failures) */
40
+ warnings?: string[];
30
41
  }
31
42
  /**
32
43
  * Information about a failed import
@@ -1 +1 @@
1
- {"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../../src/features/operations/add.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAEhE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAQzD,YAAY,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAE3D;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,+BAA+B;IAC/B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,4CAA4C;IAC5C,MAAM,CAAC,EAAE,WAAW,GAAG,MAAM,CAAC;IAC9B,+BAA+B;IAC/B,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,gFAAgF;IAChF,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,4EAA4E;IAC5E,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,+DAA+D;IAC/D,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,OAAO,uBAAuB,EAAE,aAAa,CAAC;CACvD;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,OAAO,uBAAuB,EAAE,aAAa,CAAC;CAC9D;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,OAAO,EAAE,WAAW,EAAE,CAAC;CACxB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,aAAa,CACjC,MAAM,EAAE,MAAM,EAAE,EAChB,OAAO,EAAE,QAAQ,EACjB,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,mBAAmB,CAAC,CAwC9B"}
1
+ {"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../../src/features/operations/add.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAG1E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAEhE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAUzD,YAAY,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAE3D;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,+BAA+B;IAC/B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,4CAA4C;IAC5C,MAAM,CAAC,EAAE,WAAW,GAAG,MAAM,CAAC;IAC9B,+BAA+B;IAC/B,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,gFAAgF;IAChF,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,+BAA+B;IAC/B,SAAS,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAClC,8CAA8C;IAC9C,aAAa,CAAC,EAAE,gBAAgB,GAAG,SAAS,CAAC;IAC7C,4CAA4C;IAC5C,SAAS,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAChC,0EAA0E;IAC1E,oBAAoB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC3C;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,4EAA4E;IAC5E,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,+DAA+D;IAC/D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gFAAgF;IAChF,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,OAAO,uBAAuB,EAAE,aAAa,CAAC;CACvD;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,OAAO,uBAAuB,EAAE,aAAa,CAAC;CAC9D;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,OAAO,EAAE,WAAW,EAAE,CAAC;CACxB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,aAAa,CACjC,MAAM,EAAE,MAAM,EAAE,EAChB,OAAO,EAAE,QAAQ,EACjB,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,mBAAmB,CAAC,CAgD9B"}
@@ -17,6 +17,7 @@ export interface AddJsonOutputItem {
17
17
  title: string;
18
18
  idChanged?: boolean;
19
19
  originalId?: string;
20
+ warnings?: string[];
20
21
  item?: CslItem;
21
22
  }
22
23
  export interface SkippedJsonOutputItem {
@@ -1 +1 @@
1
- {"version":3,"file":"json-output.d.ts","sourceRoot":"","sources":["../../../src/features/operations/json-output.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"json-output.d.ts","sourceRoot":"","sources":["../../../src/features/operations/json-output.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAEpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAMzD,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,WAAW,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,aAAa,CAAC;CAC9B;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,aAAa,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE;QACP,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,KAAK,EAAE,iBAAiB,EAAE,CAAC;IAC3B,OAAO,EAAE,qBAAqB,EAAE,CAAC;IACjC,MAAM,EAAE,oBAAoB,EAAE,CAAC;CAChC;AAMD,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAMD,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAMD,MAAM,WAAW,oBAAoB;IACnC,iCAAiC;IACjC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,qDAAqD;IACrD,KAAK,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC9B;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,mBAAmB,EAC3B,OAAO,EAAE,oBAAoB,GAC5B,aAAa,CAsDf;AAED,MAAM,WAAW,uBAAuB;IACtC,iCAAiC;IACjC,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,YAAY,EACpB,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,uBAAuB,GAC/B,gBAAgB,CAwBlB;AAED,MAAM,WAAW,uBAAuB;IACtC,gDAAgD;IAChD,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,0CAA0C;IAC1C,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AA8ED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,qBAAqB,EAC7B,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,uBAAuB,GAC/B,gBAAgB,CAalB"}
package/dist/index.js CHANGED
@@ -5,7 +5,7 @@ import { readFile, copyFile, stat, unlink, readdir } from "node:fs/promises";
5
5
  import { tmpdir } from "node:os";
6
6
  import { dirname, join } from "node:path";
7
7
  import { fileURLToPath } from "node:url";
8
- import { g as getOpenerCommand, o as openWithSystemApp, b as backupConfigSchema, c as configSchema, d as defaultConfig, a as getDefaultBackupDirectory, e as getDefaultCurrentDirConfigFilename, f as getDefaultLibraryPath, h as getDefaultUserConfigPath, l as loadConfig, i as logLevelSchema, n as normalizePartialConfig, p as partialConfigSchema, w as watchConfigSchema } from "./chunks/loader-BG2eomDC.js";
8
+ import { g as getOpenerCommand, o as openWithSystemApp, b as backupConfigSchema, c as configSchema, d as defaultConfig, a as getDefaultBackupDirectory, e as getDefaultCurrentDirConfigFilename, f as getDefaultLibraryPath, h as getDefaultUserConfigPath, l as loadConfig, i as logLevelSchema, n as normalizePartialConfig, p as partialConfigSchema, w as watchConfigSchema } from "./chunks/loader-CMu82BI5.js";
9
9
  function validateCslJson(data) {
10
10
  const parseResult = CslLibrarySchema.safeParse(data);
11
11
  if (!parseResult.success) {
package/dist/server.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import "hono";
2
2
  import "./chunks/file-watcher-CWHg1yol.js";
3
- import { y, v } from "./chunks/index-B4-i4PrU.js";
3
+ import { y, v } from "./chunks/index-CgOvxl5f.js";
4
4
  export {
5
5
  y as createServer,
6
6
  v as startServerWithFileWatcher
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ncukondo/reference-manager",
3
- "version": "0.32.0",
3
+ "version": "0.33.1",
4
4
  "description": "A local reference management tool using CSL-JSON as the single source of truth",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -54,6 +54,7 @@
54
54
  "@citation-js/plugin-ris": "^0.7.21",
55
55
  "@iarna/toml": "^2.2.5",
56
56
  "@modelcontextprotocol/sdk": "^1.25.1",
57
+ "@mozilla/readability": "^0.6.0",
57
58
  "@ncukondo/academic-fulltext": "^0.2.6",
58
59
  "chokidar": "^5.0.0",
59
60
  "commander": "^12.1.0",
@@ -62,8 +63,11 @@
62
63
  "ink": "^6.6.0",
63
64
  "ink-ui": "^0.4.0",
64
65
  "js-yaml": "^4.1.1",
66
+ "playwright-core": "^1.58.2",
65
67
  "react": "^19.2.3",
66
68
  "tabtab": "^3.0.2",
69
+ "turndown": "^7.2.2",
70
+ "turndown-plugin-gfm": "^1.0.2",
67
71
  "write-file-atomic": "^7.0.0",
68
72
  "yaml": "^2.8.2",
69
73
  "zod": "^4.1.13"
@@ -73,12 +77,15 @@
73
77
  "@hono/node-server": "^1.19.7",
74
78
  "@types/chokidar": "^1.7.5",
75
79
  "@types/js-yaml": "^4.0.9",
80
+ "@types/jsdom": "^28.0.1",
76
81
  "@types/node": "^22.19.2",
77
82
  "@types/react": "^19.2.9",
78
83
  "@types/tabtab": "^3.0.4",
84
+ "@types/turndown": "^5.0.6",
79
85
  "@types/write-file-atomic": "^4.0.3",
80
86
  "@vitest/coverage-v8": "^2.1.9",
81
87
  "husky": "^9.1.7",
88
+ "jsdom": "^29.0.1",
82
89
  "lint-staged": "^16.2.7",
83
90
  "react-devtools-core": "^6.1.5",
84
91
  "typescript": "^5.6.0",