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,152 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* URL Sanitization Utility
|
|
3
|
+
*
|
|
4
|
+
* Protects against XSS attacks via malicious URLs in href attributes.
|
|
5
|
+
* Blocks dangerous protocols like javascript:, data:, vbscript:, file:
|
|
6
|
+
*
|
|
7
|
+
* Security Context:
|
|
8
|
+
* - Prevents DOM-based XSS vulnerabilities
|
|
9
|
+
* - Critical for Electron apps with IPC access
|
|
10
|
+
* - Blocks protocol smuggling attacks
|
|
11
|
+
*
|
|
12
|
+
* @module urlSanitizer
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
import logger from './logger';
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* List of allowed URL protocols that are safe for href attributes
|
|
19
|
+
*/
|
|
20
|
+
const ALLOWED_PROTOCOLS = ['http:', 'https:', 'mailto:', 'tel:', 'ftp:', 'ftps:'] as const;
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* List of dangerous protocols that should be blocked
|
|
24
|
+
* These can execute code or access local resources
|
|
25
|
+
*/
|
|
26
|
+
const DANGEROUS_PROTOCOLS = [
|
|
27
|
+
'javascript:',
|
|
28
|
+
'data:',
|
|
29
|
+
'vbscript:',
|
|
30
|
+
'file:',
|
|
31
|
+
'about:',
|
|
32
|
+
'blob:',
|
|
33
|
+
] as const;
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Sanitizes a URL to prevent XSS attacks via href attributes.
|
|
37
|
+
*
|
|
38
|
+
* Validates the URL protocol and structure to ensure it's safe for use
|
|
39
|
+
* in HTML href attributes. Blocks dangerous protocols that could execute
|
|
40
|
+
* arbitrary code or access local resources.
|
|
41
|
+
*
|
|
42
|
+
* @param url - The URL to sanitize (can be string, null, or undefined)
|
|
43
|
+
* @returns A safe URL string, or '#' if the URL is invalid/dangerous
|
|
44
|
+
*
|
|
45
|
+
* @example
|
|
46
|
+
* ```typescript
|
|
47
|
+
* sanitizeUrl('https://example.com') // ✅ 'https://example.com'
|
|
48
|
+
* sanitizeUrl('javascript:alert("XSS")') // ❌ '#'
|
|
49
|
+
* sanitizeUrl('data:text/html,<script>') // ❌ '#'
|
|
50
|
+
* sanitizeUrl('mailto:user@example.com') // ✅ 'mailto:user@example.com'
|
|
51
|
+
* sanitizeUrl(null) // ❌ '#'
|
|
52
|
+
* sanitizeUrl('') // ❌ '#'
|
|
53
|
+
* ```
|
|
54
|
+
*/
|
|
55
|
+
export function sanitizeUrl(url: string | null | undefined): string {
|
|
56
|
+
// Handle null, undefined, or empty strings
|
|
57
|
+
if (!url || typeof url !== 'string') {
|
|
58
|
+
return '#';
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
// Trim whitespace
|
|
62
|
+
const trimmedUrl = url.trim();
|
|
63
|
+
|
|
64
|
+
// Check for empty string after trimming
|
|
65
|
+
if (trimmedUrl === '' || trimmedUrl === '#') {
|
|
66
|
+
return '#';
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
// Handle relative URLs (consider safe if they don't start with dangerous patterns)
|
|
70
|
+
if (trimmedUrl.startsWith('/') || trimmedUrl.startsWith('./') || trimmedUrl.startsWith('../')) {
|
|
71
|
+
// Relative URLs are generally safe in web contexts
|
|
72
|
+
// But in Electron, we want to be cautious
|
|
73
|
+
return '#';
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
// Check if URL starts with a hash (anchor link - safe)
|
|
77
|
+
if (trimmedUrl.startsWith('#')) {
|
|
78
|
+
return trimmedUrl;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
try {
|
|
82
|
+
// Parse the URL to extract protocol
|
|
83
|
+
// For URLs without protocol, URL constructor will throw
|
|
84
|
+
let parsedUrl: URL;
|
|
85
|
+
|
|
86
|
+
try {
|
|
87
|
+
parsedUrl = new URL(trimmedUrl);
|
|
88
|
+
} catch {
|
|
89
|
+
// If URL parsing fails, it might be a relative URL or malformed
|
|
90
|
+
// Check if it looks like it has a protocol
|
|
91
|
+
if (trimmedUrl.includes(':')) {
|
|
92
|
+
// Has a colon, might be a protocol - check if dangerous
|
|
93
|
+
const colonIndex = trimmedUrl.indexOf(':');
|
|
94
|
+
const possibleProtocol = trimmedUrl.substring(0, colonIndex + 1).toLowerCase();
|
|
95
|
+
|
|
96
|
+
// Check against dangerous protocols
|
|
97
|
+
if (DANGEROUS_PROTOCOLS.includes(possibleProtocol as any)) {
|
|
98
|
+
return '#';
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
// If no protocol or unknown format, return safe fallback
|
|
103
|
+
return '#';
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
// Convert protocol to lowercase for case-insensitive comparison
|
|
107
|
+
const protocol = parsedUrl.protocol.toLowerCase();
|
|
108
|
+
|
|
109
|
+
// Check against dangerous protocols
|
|
110
|
+
if (DANGEROUS_PROTOCOLS.includes(protocol as any)) {
|
|
111
|
+
return '#';
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
// Check if protocol is in allowed list
|
|
115
|
+
if (ALLOWED_PROTOCOLS.includes(protocol as any)) {
|
|
116
|
+
return trimmedUrl; // Return original URL (preserves casing)
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
// Unknown protocol - reject for safety
|
|
120
|
+
return '#';
|
|
121
|
+
} catch (error) {
|
|
122
|
+
// If any error occurs during parsing, return safe fallback
|
|
123
|
+
logger.warn('[URL Sanitizer] Failed to parse URL:', url, error);
|
|
124
|
+
return '#';
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* Checks if a URL is safe without modifying it.
|
|
130
|
+
*
|
|
131
|
+
* @param url - The URL to check
|
|
132
|
+
* @returns true if the URL is safe, false otherwise
|
|
133
|
+
*
|
|
134
|
+
* @example
|
|
135
|
+
* ```typescript
|
|
136
|
+
* isSafeUrl('https://example.com') // true
|
|
137
|
+
* isSafeUrl('javascript:alert("XSS")') // false
|
|
138
|
+
* ```
|
|
139
|
+
*/
|
|
140
|
+
export function isSafeUrl(url: string | null | undefined): boolean {
|
|
141
|
+
return sanitizeUrl(url) !== '#';
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* Sanitizes an array of URLs.
|
|
146
|
+
*
|
|
147
|
+
* @param urls - Array of URLs to sanitize
|
|
148
|
+
* @returns Array of sanitized URLs
|
|
149
|
+
*/
|
|
150
|
+
export function sanitizeUrls(urls: (string | null | undefined)[]): string[] {
|
|
151
|
+
return urls.map(sanitizeUrl);
|
|
152
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"extends": "./tsconfig.json",
|
|
3
|
+
"compilerOptions": {
|
|
4
|
+
"target": "ES2022",
|
|
5
|
+
"module": "commonjs",
|
|
6
|
+
"moduleResolution": "node",
|
|
7
|
+
"lib": ["ES2022"],
|
|
8
|
+
"types": ["node", "electron"],
|
|
9
|
+
"esModuleInterop": true,
|
|
10
|
+
"skipLibCheck": true,
|
|
11
|
+
"strict": false,
|
|
12
|
+
"noEmit": true,
|
|
13
|
+
"resolveJsonModule": true,
|
|
14
|
+
"allowSyntheticDefaultImports": true,
|
|
15
|
+
"forceConsistentCasingInFileNames": true
|
|
16
|
+
},
|
|
17
|
+
"include": ["electron/**/*"],
|
|
18
|
+
"exclude": ["node_modules", "dist", "release"]
|
|
19
|
+
}
|
package/tsconfig.json
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
{
|
|
2
|
+
"_comment": "Force TypeScript reload",
|
|
3
|
+
"compilerOptions": {
|
|
4
|
+
"target": "ES2022",
|
|
5
|
+
"useDefineForClassFields": true,
|
|
6
|
+
"lib": ["ES2022", "DOM", "DOM.Iterable"],
|
|
7
|
+
"module": "ESNext",
|
|
8
|
+
"skipLibCheck": true,
|
|
9
|
+
"moduleResolution": "bundler",
|
|
10
|
+
"allowImportingTsExtensions": true,
|
|
11
|
+
"resolveJsonModule": true,
|
|
12
|
+
"isolatedModules": true,
|
|
13
|
+
"noEmit": true,
|
|
14
|
+
"jsx": "react-jsx",
|
|
15
|
+
"strict": true,
|
|
16
|
+
"noUnusedLocals": false,
|
|
17
|
+
"noUnusedParameters": false,
|
|
18
|
+
"noFallthroughCasesInSwitch": true,
|
|
19
|
+
"esModuleInterop": true,
|
|
20
|
+
"forceConsistentCasingInFileNames": true,
|
|
21
|
+
"allowSyntheticDefaultImports": true,
|
|
22
|
+
"baseUrl": ".",
|
|
23
|
+
"paths": {
|
|
24
|
+
"@/*": ["./src/*"],
|
|
25
|
+
"@components/*": ["./src/components/*"],
|
|
26
|
+
"@hooks/*": ["./src/hooks/*"],
|
|
27
|
+
"@utils/*": ["./src/utils/*"],
|
|
28
|
+
"@styles/*": ["./src/styles/*"],
|
|
29
|
+
"@pages/*": ["./src/pages/*"],
|
|
30
|
+
"@contexts/*": ["./src/contexts/*"]
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
"include": ["src"],
|
|
34
|
+
"exclude": ["electron", "node_modules", "dist", "release", "src/**/__tests__", "src/**/*.test.ts", "src/**/*.test.tsx"],
|
|
35
|
+
"references": [{ "path": "./tsconfig.node.json" }]
|
|
36
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"composite": true,
|
|
4
|
+
"skipLibCheck": true,
|
|
5
|
+
"module": "ESNext",
|
|
6
|
+
"moduleResolution": "bundler",
|
|
7
|
+
"allowSyntheticDefaultImports": true,
|
|
8
|
+
"strict": true,
|
|
9
|
+
"forceConsistentCasingInFileNames": true
|
|
10
|
+
},
|
|
11
|
+
"include": ["vite.config.ts"]
|
|
12
|
+
}
|
package/typedoc.json
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://typedoc.org/schema.json",
|
|
3
|
+
"entryPoints": [
|
|
4
|
+
"./src/services/document/DocXMLaterProcessor.ts",
|
|
5
|
+
"./src/services/document/types/docx-processing.ts",
|
|
6
|
+
"./src/utils/textSanitizer.ts"
|
|
7
|
+
],
|
|
8
|
+
"out": "./docs/api",
|
|
9
|
+
"plugin": [],
|
|
10
|
+
"compilerOptions": {
|
|
11
|
+
"skipLibCheck": true
|
|
12
|
+
},
|
|
13
|
+
"readme": "./docs/api/API_README.md",
|
|
14
|
+
"name": "Documentation Hub - API Documentation",
|
|
15
|
+
"includeVersion": true,
|
|
16
|
+
"entryPointStrategy": "expand",
|
|
17
|
+
"categorizeByGroup": true,
|
|
18
|
+
"sort": ["source-order"],
|
|
19
|
+
"groupOrder": [
|
|
20
|
+
"Document I/O",
|
|
21
|
+
"Style Operations",
|
|
22
|
+
"Table Operations",
|
|
23
|
+
"Paragraph Formatting",
|
|
24
|
+
"High-Level Operations",
|
|
25
|
+
"Hyperlink Operations",
|
|
26
|
+
"Search & Replace",
|
|
27
|
+
"Document Statistics",
|
|
28
|
+
"Utilities",
|
|
29
|
+
"*"
|
|
30
|
+
],
|
|
31
|
+
"exclude": [
|
|
32
|
+
"**/*+(test|spec).ts",
|
|
33
|
+
"**/node_modules/**",
|
|
34
|
+
"**/dist/**"
|
|
35
|
+
],
|
|
36
|
+
"excludePrivate": true,
|
|
37
|
+
"excludeProtected": false,
|
|
38
|
+
"excludeInternal": false,
|
|
39
|
+
"hideGenerator": false,
|
|
40
|
+
"disableSources": false,
|
|
41
|
+
"searchInComments": true,
|
|
42
|
+
"navigationLinks": {
|
|
43
|
+
"GitHub": "https://github.com/ItMeDiaTech/Documentation_Hub"
|
|
44
|
+
}
|
|
45
|
+
}
|
package/vite.config.ts
ADDED
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
import { defineConfig } from 'vite';
|
|
2
|
+
import react from '@vitejs/plugin-react';
|
|
3
|
+
import electron from 'vite-plugin-electron';
|
|
4
|
+
import renderer from 'vite-plugin-electron-renderer';
|
|
5
|
+
import tailwindcss from '@tailwindcss/vite';
|
|
6
|
+
import { resolve } from 'path';
|
|
7
|
+
|
|
8
|
+
export default defineConfig({
|
|
9
|
+
optimizeDeps: {
|
|
10
|
+
include: ['lucide-react', 'docxmlater'],
|
|
11
|
+
},
|
|
12
|
+
plugins: [
|
|
13
|
+
tailwindcss(),
|
|
14
|
+
react(),
|
|
15
|
+
electron([
|
|
16
|
+
{
|
|
17
|
+
entry: 'electron/main.ts',
|
|
18
|
+
vite: {
|
|
19
|
+
resolve: {
|
|
20
|
+
alias: {
|
|
21
|
+
'@': resolve(__dirname, './src'),
|
|
22
|
+
'@components': resolve(__dirname, './src/components'),
|
|
23
|
+
'@hooks': resolve(__dirname, './src/hooks'),
|
|
24
|
+
'@utils': resolve(__dirname, './src/utils'),
|
|
25
|
+
'@styles': resolve(__dirname, './src/styles'),
|
|
26
|
+
'@pages': resolve(__dirname, './src/pages'),
|
|
27
|
+
'@contexts': resolve(__dirname, './src/contexts'),
|
|
28
|
+
},
|
|
29
|
+
preserveSymlinks: false,
|
|
30
|
+
},
|
|
31
|
+
build: {
|
|
32
|
+
outDir: 'dist/electron',
|
|
33
|
+
emptyOutDir: false,
|
|
34
|
+
minify: false, // Disable minification to debug electron import issues
|
|
35
|
+
commonjsOptions: {
|
|
36
|
+
include: [/node_modules/, /docxmlater/],
|
|
37
|
+
},
|
|
38
|
+
rollupOptions: {
|
|
39
|
+
external: [
|
|
40
|
+
'electron',
|
|
41
|
+
'canvas',
|
|
42
|
+
'docxmlater',
|
|
43
|
+
'xlsx',
|
|
44
|
+
'better-sqlite3',
|
|
45
|
+
'@azure/msal-node',
|
|
46
|
+
'electron-updater',
|
|
47
|
+
'electron-log',
|
|
48
|
+
],
|
|
49
|
+
output: {
|
|
50
|
+
format: 'cjs', // Use CommonJS to support __dirname natively
|
|
51
|
+
},
|
|
52
|
+
},
|
|
53
|
+
},
|
|
54
|
+
},
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
entry: 'electron/preload.ts',
|
|
58
|
+
onstart(options) {
|
|
59
|
+
options.reload();
|
|
60
|
+
},
|
|
61
|
+
vite: {
|
|
62
|
+
resolve: {
|
|
63
|
+
alias: {
|
|
64
|
+
'@': resolve(__dirname, './src'),
|
|
65
|
+
'@components': resolve(__dirname, './src/components'),
|
|
66
|
+
'@hooks': resolve(__dirname, './src/hooks'),
|
|
67
|
+
'@utils': resolve(__dirname, './src/utils'),
|
|
68
|
+
'@styles': resolve(__dirname, './src/styles'),
|
|
69
|
+
'@pages': resolve(__dirname, './src/pages'),
|
|
70
|
+
'@contexts': resolve(__dirname, './src/contexts'),
|
|
71
|
+
},
|
|
72
|
+
preserveSymlinks: false,
|
|
73
|
+
},
|
|
74
|
+
build: {
|
|
75
|
+
outDir: 'dist/electron',
|
|
76
|
+
commonjsOptions: {
|
|
77
|
+
include: [/node_modules/, /docxmlater/],
|
|
78
|
+
},
|
|
79
|
+
rollupOptions: {
|
|
80
|
+
external: [
|
|
81
|
+
'electron',
|
|
82
|
+
'canvas',
|
|
83
|
+
'docxmlater',
|
|
84
|
+
'xlsx',
|
|
85
|
+
'better-sqlite3',
|
|
86
|
+
'@azure/msal-node',
|
|
87
|
+
'electron-updater',
|
|
88
|
+
'electron-log',
|
|
89
|
+
],
|
|
90
|
+
output: {
|
|
91
|
+
format: 'cjs', // Use CommonJS to support __dirname natively
|
|
92
|
+
},
|
|
93
|
+
},
|
|
94
|
+
},
|
|
95
|
+
},
|
|
96
|
+
},
|
|
97
|
+
]),
|
|
98
|
+
renderer(),
|
|
99
|
+
],
|
|
100
|
+
resolve: {
|
|
101
|
+
alias: {
|
|
102
|
+
'@': resolve(__dirname, './src'),
|
|
103
|
+
'@components': resolve(__dirname, './src/components'),
|
|
104
|
+
'@hooks': resolve(__dirname, './src/hooks'),
|
|
105
|
+
'@utils': resolve(__dirname, './src/utils'),
|
|
106
|
+
'@styles': resolve(__dirname, './src/styles'),
|
|
107
|
+
'@pages': resolve(__dirname, './src/pages'),
|
|
108
|
+
'@contexts': resolve(__dirname, './src/contexts'),
|
|
109
|
+
},
|
|
110
|
+
preserveSymlinks: false,
|
|
111
|
+
},
|
|
112
|
+
server: {
|
|
113
|
+
port: 5173,
|
|
114
|
+
strictPort: true,
|
|
115
|
+
},
|
|
116
|
+
build: {
|
|
117
|
+
outDir: 'dist',
|
|
118
|
+
emptyOutDir: true,
|
|
119
|
+
chunkSizeWarningLimit: 600, // Increase from 500kb to 600kb
|
|
120
|
+
commonjsOptions: {
|
|
121
|
+
include: [/lucide-react/, /node_modules/, /docxmlater/],
|
|
122
|
+
},
|
|
123
|
+
// Use esbuild minification (faster and already included)
|
|
124
|
+
minify: 'esbuild',
|
|
125
|
+
rollupOptions: {
|
|
126
|
+
input: {
|
|
127
|
+
index: resolve(__dirname, 'index.html'),
|
|
128
|
+
},
|
|
129
|
+
output: {
|
|
130
|
+
// Manual chunk splitting for better caching and smaller bundles
|
|
131
|
+
manualChunks: {
|
|
132
|
+
// Core React libraries
|
|
133
|
+
'vendor-react': ['react', 'react-dom', 'react-router-dom'],
|
|
134
|
+
|
|
135
|
+
// Heavy charting library
|
|
136
|
+
'vendor-charts': ['recharts'],
|
|
137
|
+
|
|
138
|
+
// Search functionality
|
|
139
|
+
'vendor-search': ['fuse.js'],
|
|
140
|
+
|
|
141
|
+
// UI libraries
|
|
142
|
+
'vendor-ui': ['framer-motion', 'lucide-react', 'cmdk', '@radix-ui/react-dialog'],
|
|
143
|
+
|
|
144
|
+
// Database
|
|
145
|
+
'vendor-db': ['idb'],
|
|
146
|
+
},
|
|
147
|
+
},
|
|
148
|
+
},
|
|
149
|
+
// Use esbuild for CSS minification (Lightning CSS has issues with Tailwind escapes)
|
|
150
|
+
cssMinify: 'esbuild',
|
|
151
|
+
},
|
|
152
|
+
});
|