documentation-hub 5.7.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintrc.json +43 -0
- package/.github/workflows/build.yml +64 -0
- package/.github/workflows/ci.yml +39 -0
- package/.vscode/extensions.json +3 -0
- package/Current.md +97 -0
- package/DocHub_Image.png +0 -0
- package/README.md +666 -0
- package/USER_GUIDE.md +1173 -0
- package/Updater.md +311 -0
- package/build/256x256.png +0 -0
- package/build/512x512.png +0 -0
- package/build/app-update.yml +4 -0
- package/build/create-icon.js +208 -0
- package/build/icon.ico +0 -0
- package/build/icon.png +0 -0
- package/build/icon_1024x1024.png +0 -0
- package/dist/assets/Analytics-BpsG9895.js +1 -0
- package/dist/assets/Card-IAZin8kp.js +1 -0
- package/dist/assets/CurrentSession-B-rFkHvf.js +12 -0
- package/dist/assets/Dashboard-C_5gMb0q.js +1 -0
- package/dist/assets/Documents-CqZ25axS.js +1 -0
- package/dist/assets/Input-l89xwXBi.js +1 -0
- package/dist/assets/Reporting-DqdHJY_a.js +1 -0
- package/dist/assets/Search-XNbu5z_3.js +1 -0
- package/dist/assets/SessionManager-lH9hZfzH.js +1 -0
- package/dist/assets/Sessions-ClZOPYNc.js +1 -0
- package/dist/assets/Settings-DUEHGURa.js +11 -0
- package/dist/assets/index-8xUe8ptc.js +24 -0
- package/dist/assets/index-RYyJqF7O.css +1 -0
- package/dist/assets/path-BkOl0AGO.js +1 -0
- package/dist/assets/promises-ID_B9S-h.js +1 -0
- package/dist/assets/urlHelpers-TvgahX0r.js +1 -0
- package/dist/assets/useToast-yRSO1dkm.js +1 -0
- package/dist/assets/vendor-charts-RkGK5ROP.js +36 -0
- package/dist/assets/vendor-db-l0sNRNKZ.js +1 -0
- package/dist/assets/vendor-react-BVZ_anCF.js +4 -0
- package/dist/assets/vendor-search-Dw8P0qyA.js +1 -0
- package/dist/assets/vendor-ui-BU7NfluV.js +53 -0
- package/dist/electron/PowerAutomateApiService-LfW09ZGr.js +147 -0
- package/dist/electron/main-CXkNtyv-.js +19789 -0
- package/dist/electron/main.js +5 -0
- package/dist/electron/preload.js +1 -0
- package/dist/icon.png +0 -0
- package/dist/index.html +27 -0
- package/docs/CODEBASE_ANALYSIS_REPORT.md +309 -0
- package/docs/DEBUG_LOGGING_GUIDE.md +244 -0
- package/docs/README.md +115 -0
- package/docs/TOC_WIRING_GUIDE.md +344 -0
- package/docs/analysis/Bullet_Symbol_Bug_Analysis.md +136 -0
- package/docs/analysis/DOCXMLATER_ANALYSIS_SUMMARY.txt +169 -0
- package/docs/analysis/Document_Processing_Issues_Analysis.md +704 -0
- package/docs/analysis/FIELD_PRESERVATION_ANALYSIS.md +1200 -0
- package/docs/analysis/INDENTATION_PRESERVE_ANALYSIS.md +181 -0
- package/docs/analysis/INDENTATION_PRESERVE_IMPLEMENTATION.md +207 -0
- package/docs/analysis/List_Implementation.md +206 -0
- package/docs/analysis/List_Implementation_Accuracy_Report.md +366 -0
- package/docs/analysis/PROCESSING_OPTIONS_UI_UPDATES.md +220 -0
- package/docs/analysis/RefactorStyles.md +852 -0
- package/docs/analysis/STYLE_PARAMETER_ENHANCEMENT.md +143 -0
- package/docs/analysis/docxmlater-comparison-todo-2025-11-13.md +636 -0
- package/docs/analysis/docxmlater-implementation-analysis-2025-11-13.md +340 -0
- package/docs/analysis/docxmlater-template_ui-integration-analysis.md +263 -0
- package/docs/analysis/github-issues-to-create.md +237 -0
- package/docs/api/API_README.md +538 -0
- package/docs/api/API_REFERENCE.md +751 -0
- package/docs/api/TYPE_DEFINITIONS.md +869 -0
- package/docs/architecture/FONT_EMBEDDING_GUIDE.md +318 -0
- package/docs/architecture/docxmlater-functions-and-structure.md +726 -0
- package/docs/docxmlater-readme.md +1341 -0
- package/docs/fixes/EXECUTION_LOG_TEST_BASE.md +573 -0
- package/docs/fixes/HYPERLINK_TEXT_SANITIZATION.md +253 -0
- package/docs/fixes/README.md +37 -0
- package/docs/github-issues/issue-1-body.md +125 -0
- package/docs/github-issues/issue-10-body.md +850 -0
- package/docs/github-issues/issue-2-body.md +200 -0
- package/docs/github-issues/issue-3-body.md +270 -0
- package/docs/github-issues/issue-4-body.md +169 -0
- package/docs/github-issues/issue-5-body.md +173 -0
- package/docs/github-issues/issue-6-body.md +158 -0
- package/docs/github-issues/issue-7-body.md +171 -0
- package/docs/github-issues/issue-8-body.md +407 -0
- package/docs/github-issues/issue-9-body.md +515 -0
- package/docs/github-issues/issue-tracker.md +274 -0
- package/docs/github-issues/predictive-analysis-2025-10-18.md +2131 -0
- package/docs/implementation/List_Framework_Refactor_Plan.md +336 -0
- package/docs/implementation/PRIMARY_TEXT_COLOR_FEATURE.md +217 -0
- package/docs/implementation/RELEASE_PLAN_v2.1.0.md +362 -0
- package/docs/implementation/RefactorStyles.md +588 -0
- package/docs/implementation/implement-plan.md +489 -0
- package/docs/implementation/missing-helpers-implementation.md +391 -0
- package/docs/implementation/refactor-plan.md +520 -0
- package/docs/implementation/session-implementation-complete.md +233 -0
- package/docs/implementation/session-management-plan.md +250 -0
- package/docs/setup-checklist.md +77 -0
- package/docs/versions/changelog.md +345 -0
- package/electron/customUpdater.ts +656 -0
- package/electron/main.ts +2441 -0
- package/electron/memoryConfig.ts +187 -0
- package/electron/preload.ts +394 -0
- package/electron/proxyConfig.ts +340 -0
- package/electron/services/BackupService.ts +452 -0
- package/electron/services/DictionaryService.ts +402 -0
- package/electron/services/LocalDictionaryLookupService.ts +147 -0
- package/electron/services/PowerAutomateApiService.ts +231 -0
- package/electron/services/SharePointSyncService.ts +474 -0
- package/electron/windowsCertStore.ts +427 -0
- package/electron/zscalerConfig.ts +381 -0
- package/eslint.config.js +92 -0
- package/jest.config.js +52 -0
- package/package.json +214 -0
- package/postcss.config.mjs +6 -0
- package/public/icon.png +0 -0
- package/publish-release.ps1 +5 -0
- package/renovate.json +30 -0
- package/src/App.tsx +216 -0
- package/src/__mocks__/p-limit.js +12 -0
- package/src/__mocks__/styleMock.js +1 -0
- package/src/components/common/BugReportButton.tsx +44 -0
- package/src/components/common/BugReportDialog.tsx +193 -0
- package/src/components/common/Button.tsx +153 -0
- package/src/components/common/Card.tsx +86 -0
- package/src/components/common/ColorPickerDialog.tsx +177 -0
- package/src/components/common/ConfirmDialog.tsx +96 -0
- package/src/components/common/DebugConsole.tsx +275 -0
- package/src/components/common/EmptyState.tsx +183 -0
- package/src/components/common/ErrorBoundary.tsx +98 -0
- package/src/components/common/ErrorDetailsDialog.tsx +153 -0
- package/src/components/common/ErrorFallback.tsx +218 -0
- package/src/components/common/Input.tsx +109 -0
- package/src/components/common/Skeleton.tsx +184 -0
- package/src/components/common/SplashScreen.tsx +81 -0
- package/src/components/common/Toast.tsx +155 -0
- package/src/components/common/Tooltip.tsx +79 -0
- package/src/components/common/UpdateNotification.tsx +320 -0
- package/src/components/comparison/ComparisonWindow.tsx +374 -0
- package/src/components/comparison/SideBySideDiff.tsx +486 -0
- package/src/components/comparison/index.ts +8 -0
- package/src/components/document/DocumentUploader.tsx +288 -0
- package/src/components/document/HyperlinkPreview.tsx +430 -0
- package/src/components/document/HyperlinkService.md +1484 -0
- package/src/components/document/Hyperlink_Technical_Documentation.md +496 -0
- package/src/components/document/InlineChangesView.tsx +707 -0
- package/src/components/document/ProcessingProgress.tsx +303 -0
- package/src/components/document/ProcessingResults.tsx +256 -0
- package/src/components/document/TrackedChangesDetail.tsx +530 -0
- package/src/components/document/TrackedChangesPanel.tsx +546 -0
- package/src/components/document/VirtualDocumentList.tsx +240 -0
- package/src/components/editor/DocumentEditor.tsx +723 -0
- package/src/components/editor/DocumentEditorModal.tsx +640 -0
- package/src/components/editor/EditorQuickActions.tsx +502 -0
- package/src/components/editor/EditorToolbar.tsx +312 -0
- package/src/components/editor/TableEditor.tsx +926 -0
- package/src/components/editor/index.ts +18 -0
- package/src/components/layout/Header.tsx +190 -0
- package/src/components/layout/Sidebar.tsx +313 -0
- package/src/components/layout/TitleBar.tsx +190 -0
- package/src/components/navigation/CommandPalette.tsx +233 -0
- package/src/components/navigation/KeyboardShortcutsModal.tsx +173 -0
- package/src/components/sessions/ChangeItem.tsx +408 -0
- package/src/components/sessions/ChangeViewer.tsx +1155 -0
- package/src/components/sessions/DocumentComparisonModal.tsx +314 -0
- package/src/components/sessions/ProcessingOptions.tsx +297 -0
- package/src/components/sessions/ReplacementsTab.tsx +438 -0
- package/src/components/sessions/RevisionHandlingOptions.tsx +87 -0
- package/src/components/sessions/SessionManager.tsx +188 -0
- package/src/components/sessions/StylesEditor.tsx +1335 -0
- package/src/components/sessions/TabContainer.tsx +151 -0
- package/src/components/sessions/VirtualSessionList.tsx +157 -0
- package/src/components/sessions/sessionToProcessorManager.tsx +420 -0
- package/src/components/settings/CertificateManager.tsx +410 -0
- package/src/components/settings/SegmentedControl.tsx +88 -0
- package/src/components/settings/SettingRow.tsx +52 -0
- package/src/contexts/GlobalStatsContext.tsx +396 -0
- package/src/contexts/SessionContext.tsx +2129 -0
- package/src/contexts/ThemeContext.tsx +428 -0
- package/src/contexts/UserSettingsContext.tsx +290 -0
- package/src/contexts/__tests__/GlobalStatsContext.test.tsx +390 -0
- package/src/global.d.ts +273 -0
- package/src/hooks/useDocumentQueue.tsx +210 -0
- package/src/hooks/useToast.tsx +55 -0
- package/src/main.tsx +10 -0
- package/src/pages/Analytics.tsx +386 -0
- package/src/pages/CurrentSession.tsx +1174 -0
- package/src/pages/Dashboard.tsx +319 -0
- package/src/pages/Documents.tsx +317 -0
- package/src/pages/Projects.tsx +250 -0
- package/src/pages/Reporting.tsx +386 -0
- package/src/pages/Search.tsx +349 -0
- package/src/pages/Sessions.tsx +285 -0
- package/src/pages/Settings.tsx +2662 -0
- package/src/services/HyperlinkService.ts +1085 -0
- package/src/services/document/DocXMLaterProcessor.ts +617 -0
- package/src/services/document/DocumentProcessingComparison.ts +856 -0
- package/src/services/document/DocumentSnapshotService.ts +575 -0
- package/src/services/document/WordDocumentProcessor.ts +10509 -0
- package/src/services/document/__tests__/DocXMLaterProcessor.hyperlinks.test.md +311 -0
- package/src/services/document/__tests__/WordDocumentProcessor.integration.test.ts +515 -0
- package/src/services/document/__tests__/WordDocumentProcessor.test.ts +812 -0
- package/src/services/document/blanklines/BlankLineManager.ts +658 -0
- package/src/services/document/blanklines/__tests__/paragraphChecks.test.ts +281 -0
- package/src/services/document/blanklines/helpers/blankLineInsertion.ts +87 -0
- package/src/services/document/blanklines/helpers/blankLineSnapshot.ts +251 -0
- package/src/services/document/blanklines/helpers/clearCustom.ts +121 -0
- package/src/services/document/blanklines/helpers/contextChecks.ts +117 -0
- package/src/services/document/blanklines/helpers/imageChecks.ts +51 -0
- package/src/services/document/blanklines/helpers/paragraphChecks.ts +236 -0
- package/src/services/document/blanklines/helpers/removeBlanksBetweenListItems.ts +91 -0
- package/src/services/document/blanklines/helpers/removeTrailingBlanks.ts +35 -0
- package/src/services/document/blanklines/helpers/tableGuards.ts +21 -0
- package/src/services/document/blanklines/index.ts +67 -0
- package/src/services/document/blanklines/rules/additionRules.ts +337 -0
- package/src/services/document/blanklines/rules/indentationRules.ts +317 -0
- package/src/services/document/blanklines/rules/removalRules.ts +362 -0
- package/src/services/document/blanklines/rules/ruleTypes.ts +92 -0
- package/src/services/document/blanklines/types.ts +29 -0
- package/src/services/document/helpers/ImageBorderCropper.ts +377 -0
- package/src/services/document/helpers/__tests__/whitespace.test.ts +272 -0
- package/src/services/document/helpers/whitespace.ts +117 -0
- package/src/services/document/list/ListNormalizer.ts +947 -0
- package/src/services/document/list/index.ts +45 -0
- package/src/services/document/list/list-detection.ts +275 -0
- package/src/services/document/list/list-types.ts +162 -0
- package/src/services/document/processors/HyperlinkProcessor.ts +370 -0
- package/src/services/document/processors/ListProcessor.ts +257 -0
- package/src/services/document/processors/StructureProcessor.ts +176 -0
- package/src/services/document/processors/StyleProcessor.ts +389 -0
- package/src/services/document/processors/TableProcessor.ts +2238 -0
- package/src/services/document/processors/__tests__/HyperlinkProcessor.test.ts +314 -0
- package/src/services/document/processors/__tests__/ListProcessor.test.ts +291 -0
- package/src/services/document/processors/__tests__/StructureProcessor.test.ts +257 -0
- package/src/services/document/processors/__tests__/TableProcessor.hlp-tips-bullets.test.ts +459 -0
- package/src/services/document/processors/__tests__/TableProcessor.test.ts +1604 -0
- package/src/services/document/processors/index.ts +28 -0
- package/src/services/document/types/docx-processing.ts +310 -0
- package/src/services/editor/EditorActionHandlers.ts +901 -0
- package/src/services/editor/index.ts +13 -0
- package/src/setupTests.ts +47 -0
- package/src/styles/global.css +782 -0
- package/src/types/backup.ts +132 -0
- package/src/types/dictionary.ts +125 -0
- package/src/types/document-processing.ts +331 -0
- package/src/types/docxmlater-augments.d.ts +142 -0
- package/src/types/editor.ts +280 -0
- package/src/types/electron.ts +340 -0
- package/src/types/globalStats.ts +155 -0
- package/src/types/hyperlink.ts +471 -0
- package/src/types/operations.ts +354 -0
- package/src/types/session.ts +427 -0
- package/src/types/settings.ts +112 -0
- package/src/utils/MemoryMonitor.ts +248 -0
- package/src/utils/cn.ts +6 -0
- package/src/utils/colorConvert.ts +306 -0
- package/src/utils/diffUtils.ts +347 -0
- package/src/utils/documentUtils.ts +202 -0
- package/src/utils/electronGuard.ts +62 -0
- package/src/utils/indexedDB.ts +915 -0
- package/src/utils/logger.ts +717 -0
- package/src/utils/pathSecurity.ts +232 -0
- package/src/utils/pathValidator.ts +236 -0
- package/src/utils/processingTimeEstimator.ts +153 -0
- package/src/utils/safeJsonParse.ts +62 -0
- package/src/utils/textSanitizer.ts +162 -0
- package/src/utils/urlHelpers.ts +304 -0
- package/src/utils/urlPatterns.ts +198 -0
- package/src/utils/urlSanitizer.ts +152 -0
- package/src/vite-env.d.ts +11 -0
- package/tsconfig.electron.json +19 -0
- package/tsconfig.json +36 -0
- package/tsconfig.node.json +12 -0
- package/typedoc.json +45 -0
- package/vite.config.ts +152 -0
|
@@ -0,0 +1,471 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hyperlink-specific type definitions
|
|
3
|
+
* Implements the two-part OpenXML hyperlink reference system
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import type { XMLElement } from './document-processing';
|
|
7
|
+
|
|
8
|
+
// Hyperlink types
|
|
9
|
+
export type HyperlinkType = 'external' | 'internal' | 'bookmark' | 'email' | 'file';
|
|
10
|
+
|
|
11
|
+
// Hyperlink data structure
|
|
12
|
+
export interface HyperlinkData {
|
|
13
|
+
id: string;
|
|
14
|
+
relationshipId: string;
|
|
15
|
+
type: HyperlinkType;
|
|
16
|
+
target: string;
|
|
17
|
+
displayText: string;
|
|
18
|
+
tooltip?: string;
|
|
19
|
+
created: Date;
|
|
20
|
+
modified?: Date;
|
|
21
|
+
isValid?: boolean;
|
|
22
|
+
validationMessage?: string;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
// Detailed hyperlink information for processing
|
|
26
|
+
export interface DetailedHyperlinkInfo {
|
|
27
|
+
id: string;
|
|
28
|
+
relationshipId: string;
|
|
29
|
+
element: XMLElement;
|
|
30
|
+
containingPart: string; // e.g., 'document.xml', 'header1.xml'
|
|
31
|
+
url: string;
|
|
32
|
+
displayText: string;
|
|
33
|
+
tooltip?: string;
|
|
34
|
+
type: HyperlinkType;
|
|
35
|
+
isInternal: boolean;
|
|
36
|
+
isValid: boolean;
|
|
37
|
+
validationMessage?: string;
|
|
38
|
+
context?: string; // Surrounding text for context
|
|
39
|
+
paragraphIndex?: number;
|
|
40
|
+
characterPosition?: number;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
// Patterns for identifying special URLs
|
|
44
|
+
export interface URLPattern {
|
|
45
|
+
name: string;
|
|
46
|
+
pattern: RegExp;
|
|
47
|
+
description: string;
|
|
48
|
+
action?: 'append' | 'replace' | 'validate';
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// Pre-defined patterns for theSource URLs
|
|
52
|
+
export const URL_PATTERNS: Readonly<{
|
|
53
|
+
CONTENT_ID: URLPattern;
|
|
54
|
+
DOCUMENT_ID: URLPattern;
|
|
55
|
+
THE_SOURCE: URLPattern;
|
|
56
|
+
}> = {
|
|
57
|
+
CONTENT_ID: {
|
|
58
|
+
name: 'ContentId',
|
|
59
|
+
pattern: /(TSRC|CMS)-([a-zA-Z0-9]+)-(\d{6})/i,
|
|
60
|
+
description: 'Matches theSource Content IDs',
|
|
61
|
+
action: 'append',
|
|
62
|
+
},
|
|
63
|
+
DOCUMENT_ID: {
|
|
64
|
+
name: 'DocumentId',
|
|
65
|
+
pattern: /docid=([a-zA-Z0-9-]+)(?:[^a-zA-Z0-9-]|$)/i,
|
|
66
|
+
description: 'Matches theSource Document IDs',
|
|
67
|
+
action: 'append',
|
|
68
|
+
},
|
|
69
|
+
THE_SOURCE: {
|
|
70
|
+
name: 'TheSource',
|
|
71
|
+
pattern: /thesource\.cvshealth\.com/i,
|
|
72
|
+
description: 'Matches theSource domain URLs',
|
|
73
|
+
action: 'validate',
|
|
74
|
+
},
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
// Hyperlink processing options
|
|
78
|
+
export interface HyperlinkProcessingOptions {
|
|
79
|
+
processExternalLinks?: boolean;
|
|
80
|
+
processInternalLinks?: boolean;
|
|
81
|
+
validateUrls?: boolean;
|
|
82
|
+
updateDisplayText?: boolean;
|
|
83
|
+
appendContentId?: boolean;
|
|
84
|
+
contentIdToAppend?: string;
|
|
85
|
+
removeOrphanedRelationships?: boolean;
|
|
86
|
+
consolidateDuplicates?: boolean;
|
|
87
|
+
preserveTooltips?: boolean;
|
|
88
|
+
urlPattern?: string | RegExp;
|
|
89
|
+
displayTextPattern?: string | RegExp;
|
|
90
|
+
trackChanges?: boolean; // Enable DocHub change tracking for Document Changes UI
|
|
91
|
+
apiEndpoint?: string;
|
|
92
|
+
operations?: {
|
|
93
|
+
fixContentIds?: boolean;
|
|
94
|
+
updateTitles?: boolean;
|
|
95
|
+
replaceOutdatedTitles?: boolean; // Standalone title replacement (fallback when API unavailable)
|
|
96
|
+
fixInternalHyperlinks?: boolean;
|
|
97
|
+
updateTopHyperlinks?: boolean;
|
|
98
|
+
/**
|
|
99
|
+
* Populate/refresh the Table of Contents after save using docxmlater's
|
|
100
|
+
* replaceTableOfContents() helper. When true, the TOC field code is
|
|
101
|
+
* preserved but the entries themselves (hyperlinks) are generated so
|
|
102
|
+
* recipients do not need to "Right-click to update field".
|
|
103
|
+
*/
|
|
104
|
+
updateTocHyperlinks?: boolean;
|
|
105
|
+
/**
|
|
106
|
+
* Force remove Heading 1 from Table of Contents entries.
|
|
107
|
+
* When true (default), excludes Heading 1 (document title) from TOC.
|
|
108
|
+
* This ensures the document title doesn't appear as a TOC entry.
|
|
109
|
+
*/
|
|
110
|
+
forceRemoveHeading1FromTOC?: boolean;
|
|
111
|
+
/**
|
|
112
|
+
* Alias for updateTocHyperlinks for clearer intent in higher-level
|
|
113
|
+
* processing options (e.g., dochub-app). Either flag being true
|
|
114
|
+
* should trigger TOC population logic.
|
|
115
|
+
*/
|
|
116
|
+
populateToc?: boolean;
|
|
117
|
+
standardizeHyperlinkColor?: boolean;
|
|
118
|
+
validateHeader2Tables?: boolean; // NEW in 1.6.0: Validate Header 2 table formatting
|
|
119
|
+
validateDocumentStyles?: boolean; // NEW in 1.6.0: Validate all document styles using applyStylesFromObjects()
|
|
120
|
+
processHyperlinks?: boolean; // Enable hyperlink defragmentation using docxmlater v1.15.0+
|
|
121
|
+
};
|
|
122
|
+
textReplacements?: any[];
|
|
123
|
+
styles?: any;
|
|
124
|
+
header2Spacing?: {
|
|
125
|
+
spaceBefore: number;
|
|
126
|
+
spaceAfter: number;
|
|
127
|
+
};
|
|
128
|
+
customStyleSpacing?: {
|
|
129
|
+
header1?: { spaceBefore: number; spaceAfter: number; lineSpacing?: number };
|
|
130
|
+
header2?: { spaceBefore: number; spaceAfter: number; lineSpacing?: number };
|
|
131
|
+
normal?: { spaceBefore: number; spaceAfter: number; lineSpacing?: number };
|
|
132
|
+
};
|
|
133
|
+
// Snapshot capture for document comparison
|
|
134
|
+
captureSnapshot?: boolean;
|
|
135
|
+
sessionId?: string;
|
|
136
|
+
documentId?: string;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
// Hyperlink fixing options (advanced)
|
|
140
|
+
export interface HyperlinkFixingOptions extends HyperlinkProcessingOptions {
|
|
141
|
+
createBackup?: boolean;
|
|
142
|
+
updateTitles?: boolean;
|
|
143
|
+
powerAutomateUrl?: string;
|
|
144
|
+
apiTimeout?: number;
|
|
145
|
+
retryOnFailure?: boolean;
|
|
146
|
+
maxRetries?: number;
|
|
147
|
+
customPatterns?: URLPattern[];
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
// Hyperlink modification result
|
|
151
|
+
export interface HyperlinkModificationResult {
|
|
152
|
+
hyperlinkId: string;
|
|
153
|
+
relationshipId: string;
|
|
154
|
+
originalUrl: string;
|
|
155
|
+
newUrl?: string;
|
|
156
|
+
originalDisplayText: string;
|
|
157
|
+
newDisplayText?: string;
|
|
158
|
+
modificationType: 'url' | 'text' | 'both' | 'removed';
|
|
159
|
+
success: boolean;
|
|
160
|
+
error?: string;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
// Hyperlink processing result
|
|
164
|
+
export interface HyperlinkProcessingResult {
|
|
165
|
+
success: boolean;
|
|
166
|
+
totalHyperlinks: number;
|
|
167
|
+
processedHyperlinks: number;
|
|
168
|
+
modifiedHyperlinks: number;
|
|
169
|
+
skippedHyperlinks: number;
|
|
170
|
+
updatedUrls?: number;
|
|
171
|
+
updatedDisplayTexts?: number;
|
|
172
|
+
appendedContentIds?: number;
|
|
173
|
+
mergedHyperlinks?: number; // Count of defragmented hyperlinks (docxmlater v1.15.0+)
|
|
174
|
+
errorCount: number;
|
|
175
|
+
errorMessages: string[];
|
|
176
|
+
processedLinks: HyperlinkSummary[];
|
|
177
|
+
validationIssues?: HyperlinkValidationIssue[];
|
|
178
|
+
backupPath?: string;
|
|
179
|
+
duration?: number; // in milliseconds
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
// Hyperlink fixing result (advanced)
|
|
183
|
+
export interface HyperlinkFixingResult extends HyperlinkProcessingResult {
|
|
184
|
+
updatedUrls: number;
|
|
185
|
+
updatedDisplayTexts: number;
|
|
186
|
+
appendedContentIds: number;
|
|
187
|
+
validationIssues: HyperlinkValidationIssue[];
|
|
188
|
+
apiResponses?: HyperlinkApiResponse[];
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
// Hyperlink summary for reporting
|
|
192
|
+
export interface HyperlinkSummary {
|
|
193
|
+
id: string;
|
|
194
|
+
url: string;
|
|
195
|
+
displayText: string;
|
|
196
|
+
type: HyperlinkType;
|
|
197
|
+
location: string; // e.g., 'Main Document', 'Header', 'Footer'
|
|
198
|
+
status: 'processed' | 'skipped' | 'error';
|
|
199
|
+
modifications?: string[];
|
|
200
|
+
before?: string;
|
|
201
|
+
after?: string;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
// Hyperlink validation
|
|
205
|
+
export interface HyperlinkValidationIssue {
|
|
206
|
+
hyperlinkId: string;
|
|
207
|
+
url: string;
|
|
208
|
+
issueType: 'invalid_url' | 'broken_link' | 'missing_relationship' | 'duplicate' | 'orphaned';
|
|
209
|
+
severity: 'error' | 'warning' | 'info';
|
|
210
|
+
message: string;
|
|
211
|
+
suggestion?: string;
|
|
212
|
+
autoFixable: boolean;
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
// Hyperlink change tracking
|
|
216
|
+
export interface HyperlinkChange {
|
|
217
|
+
hyperlinkId: string;
|
|
218
|
+
relationshipId: string;
|
|
219
|
+
timestamp: Date;
|
|
220
|
+
changeType: HyperlinkChangeType;
|
|
221
|
+
originalUrl?: string;
|
|
222
|
+
newUrl?: string;
|
|
223
|
+
originalDisplayText?: string;
|
|
224
|
+
newDisplayText?: string;
|
|
225
|
+
author?: string;
|
|
226
|
+
reason?: string;
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
export enum HyperlinkChangeType {
|
|
230
|
+
URL_UPDATED = 'url_updated',
|
|
231
|
+
TEXT_UPDATED = 'text_updated',
|
|
232
|
+
BOTH_UPDATED = 'both_updated',
|
|
233
|
+
ADDED = 'added',
|
|
234
|
+
REMOVED = 'removed',
|
|
235
|
+
CONTENT_ID_APPENDED = 'content_id_appended',
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
// Hyperlink API integration
|
|
239
|
+
export interface HyperlinkApiSettings {
|
|
240
|
+
apiUrl: string;
|
|
241
|
+
apiKey?: string;
|
|
242
|
+
headers?: Record<string, string>;
|
|
243
|
+
timeout?: number;
|
|
244
|
+
retryAttempts?: number;
|
|
245
|
+
retryDelay?: number;
|
|
246
|
+
userAgent?: string;
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
export interface HyperlinkApiRequest {
|
|
250
|
+
urls: string[];
|
|
251
|
+
requestType?: 'validate' | 'update' | 'fetch_metadata';
|
|
252
|
+
options?: Record<string, unknown>;
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
export interface HyperlinkApiResponse {
|
|
256
|
+
success: boolean;
|
|
257
|
+
timestamp: Date;
|
|
258
|
+
body?: {
|
|
259
|
+
results: HyperlinkApiResult[];
|
|
260
|
+
errors?: string[];
|
|
261
|
+
};
|
|
262
|
+
error?: string;
|
|
263
|
+
statusCode?: number;
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
export interface HyperlinkApiResult {
|
|
267
|
+
url: string;
|
|
268
|
+
documentId: string;
|
|
269
|
+
contentId: string;
|
|
270
|
+
title?: string;
|
|
271
|
+
status: 'active' | 'deprecated' | 'expired' | 'moved' | 'not_found';
|
|
272
|
+
suggestedUrl?: string;
|
|
273
|
+
metadata?: Record<string, unknown>;
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
// Hyperlink replacement rules
|
|
277
|
+
export interface HyperlinkReplacementRule {
|
|
278
|
+
id: string;
|
|
279
|
+
enabled: boolean;
|
|
280
|
+
pattern: string | RegExp;
|
|
281
|
+
replacement: string;
|
|
282
|
+
scope: 'url' | 'text' | 'both';
|
|
283
|
+
caseSensitive?: boolean;
|
|
284
|
+
wholeWord?: boolean;
|
|
285
|
+
description?: string;
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
// Batch hyperlink operations
|
|
289
|
+
export interface HyperlinkBatchOperation {
|
|
290
|
+
documentPath: string;
|
|
291
|
+
operations: HyperlinkOperation[];
|
|
292
|
+
options?: HyperlinkProcessingOptions;
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
export interface HyperlinkOperation {
|
|
296
|
+
type: 'update' | 'validate' | 'remove' | 'append_content_id';
|
|
297
|
+
target?: string | RegExp;
|
|
298
|
+
value?: string;
|
|
299
|
+
options?: Record<string, unknown>;
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
// Hyperlink search and replace
|
|
303
|
+
export interface HyperlinkSearchCriteria {
|
|
304
|
+
urlPattern?: string | RegExp;
|
|
305
|
+
displayTextPattern?: string | RegExp;
|
|
306
|
+
type?: HyperlinkType;
|
|
307
|
+
location?: 'document' | 'header' | 'footer' | 'all';
|
|
308
|
+
isValid?: boolean;
|
|
309
|
+
hasContentId?: boolean;
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
export interface HyperlinkReplaceOptions {
|
|
313
|
+
searchCriteria: HyperlinkSearchCriteria;
|
|
314
|
+
newUrl?: string;
|
|
315
|
+
newDisplayText?: string;
|
|
316
|
+
preserveOriginal?: boolean;
|
|
317
|
+
createBackup?: boolean;
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
// Hyperlink statistics
|
|
321
|
+
export interface HyperlinkStatistics {
|
|
322
|
+
total: number;
|
|
323
|
+
byType: Record<HyperlinkType, number>;
|
|
324
|
+
byLocation: {
|
|
325
|
+
document: number;
|
|
326
|
+
headers: number;
|
|
327
|
+
footers: number;
|
|
328
|
+
};
|
|
329
|
+
valid: number;
|
|
330
|
+
invalid: number;
|
|
331
|
+
withContentId: number;
|
|
332
|
+
withoutContentId: number;
|
|
333
|
+
duplicates: number;
|
|
334
|
+
orphaned: number;
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
// Batch processing types from Feature implementation
|
|
338
|
+
export interface BatchProcessingOptions extends HyperlinkProcessingOptions {
|
|
339
|
+
maxConcurrency?: number;
|
|
340
|
+
continueOnError?: boolean;
|
|
341
|
+
progressCallback?: (progress: BatchProgress) => void;
|
|
342
|
+
abortSignal?: AbortSignal;
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
export interface BatchProgress {
|
|
346
|
+
completed: number;
|
|
347
|
+
total: number;
|
|
348
|
+
percentage: number;
|
|
349
|
+
currentFile?: string;
|
|
350
|
+
status: 'pending' | 'processing' | 'completed' | 'failed';
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
export interface BatchProcessingResult {
|
|
354
|
+
results: Map<string, HyperlinkProcessingResult>;
|
|
355
|
+
summary: {
|
|
356
|
+
totalFiles: number;
|
|
357
|
+
successfulFiles: number;
|
|
358
|
+
failedFiles: number;
|
|
359
|
+
totalHyperlinksProcessed: number;
|
|
360
|
+
totalHyperlinksModified: number;
|
|
361
|
+
processingTimeMs: number;
|
|
362
|
+
errors: Array<{ file: string; error: string }>;
|
|
363
|
+
};
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
export interface FileProcessingStatus {
|
|
367
|
+
filePath: string;
|
|
368
|
+
status: 'pending' | 'processing' | 'completed' | 'failed';
|
|
369
|
+
result?: HyperlinkProcessingResult;
|
|
370
|
+
error?: string;
|
|
371
|
+
startTime?: number;
|
|
372
|
+
endTime?: number;
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
// PowerAutomate specific types from Feature implementation
|
|
376
|
+
export interface PowerAutomateRequest {
|
|
377
|
+
Lookup_ID: string[];
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
export interface PowerAutomateResponse {
|
|
381
|
+
StatusCode: string;
|
|
382
|
+
Headers: {
|
|
383
|
+
'Content-Type': string;
|
|
384
|
+
};
|
|
385
|
+
Body: {
|
|
386
|
+
Results: Array<{
|
|
387
|
+
Document_ID: string;
|
|
388
|
+
Content_ID: string;
|
|
389
|
+
Title: string;
|
|
390
|
+
Status: string;
|
|
391
|
+
}>;
|
|
392
|
+
Version?: string;
|
|
393
|
+
Changes?: string;
|
|
394
|
+
};
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
// IPC channel types for Electron integration
|
|
398
|
+
export interface IpcChannels {
|
|
399
|
+
'hyperlink:process-document': {
|
|
400
|
+
request: {
|
|
401
|
+
filePath: string;
|
|
402
|
+
options: HyperlinkProcessingOptions;
|
|
403
|
+
};
|
|
404
|
+
response: HyperlinkProcessingResult;
|
|
405
|
+
};
|
|
406
|
+
'hyperlink:batch-process': {
|
|
407
|
+
request: {
|
|
408
|
+
filePaths: string[];
|
|
409
|
+
options: BatchProcessingOptions;
|
|
410
|
+
};
|
|
411
|
+
response: BatchProcessingResult;
|
|
412
|
+
};
|
|
413
|
+
'hyperlink:validate-api': {
|
|
414
|
+
request: {
|
|
415
|
+
apiUrl: string;
|
|
416
|
+
};
|
|
417
|
+
response: {
|
|
418
|
+
isValid: boolean;
|
|
419
|
+
message: string;
|
|
420
|
+
responseTime?: number;
|
|
421
|
+
};
|
|
422
|
+
};
|
|
423
|
+
'hyperlink:cancel-operation': {
|
|
424
|
+
request: {
|
|
425
|
+
operationId: string;
|
|
426
|
+
};
|
|
427
|
+
response: {
|
|
428
|
+
success: boolean;
|
|
429
|
+
message?: string;
|
|
430
|
+
};
|
|
431
|
+
};
|
|
432
|
+
'hyperlink:get-progress': {
|
|
433
|
+
request: {
|
|
434
|
+
operationId: string;
|
|
435
|
+
};
|
|
436
|
+
response: BatchProgress;
|
|
437
|
+
};
|
|
438
|
+
}
|
|
439
|
+
|
|
440
|
+
// Hyperlink export/import
|
|
441
|
+
export interface HyperlinkExport {
|
|
442
|
+
version: string;
|
|
443
|
+
exportDate: Date;
|
|
444
|
+
documentPath: string;
|
|
445
|
+
hyperlinks: ExportedHyperlink[];
|
|
446
|
+
statistics: HyperlinkStatistics;
|
|
447
|
+
}
|
|
448
|
+
|
|
449
|
+
export interface ExportedHyperlink {
|
|
450
|
+
id: string;
|
|
451
|
+
url: string;
|
|
452
|
+
displayText: string;
|
|
453
|
+
type: HyperlinkType;
|
|
454
|
+
location: string;
|
|
455
|
+
context?: string;
|
|
456
|
+
metadata?: Record<string, unknown>;
|
|
457
|
+
}
|
|
458
|
+
|
|
459
|
+
// Utility function type signatures
|
|
460
|
+
export interface HyperlinkUtilities {
|
|
461
|
+
isValidUrl(url: string): boolean;
|
|
462
|
+
extractDomain(url: string): string | null;
|
|
463
|
+
normalizeUrl(url: string): string;
|
|
464
|
+
isTheSourceUrl(url: string): boolean;
|
|
465
|
+
needsContentId(url: string): boolean;
|
|
466
|
+
extractContentId(url: string): string | null;
|
|
467
|
+
extractDocumentId(url: string): string | null;
|
|
468
|
+
buildTheSourceUrl(documentId: string, contentId?: string): string;
|
|
469
|
+
compareUrls(url1: string, url2: string): boolean;
|
|
470
|
+
generateRelationshipId(): string;
|
|
471
|
+
}
|