@pierre/diffs 1.0.0-beta.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.
- package/LICENSE.txt +201 -0
- package/README.md +26 -0
- package/dist/components/File.d.ts +78 -0
- package/dist/components/File.d.ts.map +1 -0
- package/dist/components/File.js +322 -0
- package/dist/components/File.js.map +1 -0
- package/dist/components/FileDiff.d.ts +90 -0
- package/dist/components/FileDiff.d.ts.map +1 -0
- package/dist/components/FileDiff.js +392 -0
- package/dist/components/FileDiff.js.map +1 -0
- package/dist/components/FileStream.d.ts +40 -0
- package/dist/components/FileStream.d.ts.map +1 -0
- package/dist/components/FileStream.js +161 -0
- package/dist/components/FileStream.js.map +1 -0
- package/dist/components/web-components.d.ts +5 -0
- package/dist/components/web-components.d.ts.map +1 -0
- package/dist/components/web-components.js +25 -0
- package/dist/components/web-components.js.map +1 -0
- package/dist/constants.d.ts +21 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +23 -0
- package/dist/constants.js.map +1 -0
- package/dist/highlighter/languages/areLanguagesAttached.d.ts +7 -0
- package/dist/highlighter/languages/areLanguagesAttached.d.ts.map +1 -0
- package/dist/highlighter/languages/areLanguagesAttached.js +11 -0
- package/dist/highlighter/languages/areLanguagesAttached.js.map +1 -0
- package/dist/highlighter/languages/attachResolvedLanguages.d.ts +9 -0
- package/dist/highlighter/languages/attachResolvedLanguages.d.ts.map +1 -0
- package/dist/highlighter/languages/attachResolvedLanguages.js +20 -0
- package/dist/highlighter/languages/attachResolvedLanguages.js.map +1 -0
- package/dist/highlighter/languages/cleanUpResolvedLanguages.d.ts +5 -0
- package/dist/highlighter/languages/cleanUpResolvedLanguages.d.ts.map +1 -0
- package/dist/highlighter/languages/cleanUpResolvedLanguages.js +11 -0
- package/dist/highlighter/languages/cleanUpResolvedLanguages.js.map +1 -0
- package/dist/highlighter/languages/constants.d.ts +11 -0
- package/dist/highlighter/languages/constants.d.ts.map +1 -0
- package/dist/highlighter/languages/constants.js +8 -0
- package/dist/highlighter/languages/constants.js.map +1 -0
- package/dist/highlighter/languages/getResolvedLanguages.d.ts +9 -0
- package/dist/highlighter/languages/getResolvedLanguages.d.ts.map +1 -0
- package/dist/highlighter/languages/getResolvedLanguages.js +16 -0
- package/dist/highlighter/languages/getResolvedLanguages.js.map +1 -0
- package/dist/highlighter/languages/getResolvedOrResolveLanguage.d.ts +9 -0
- package/dist/highlighter/languages/getResolvedOrResolveLanguage.d.ts.map +1 -0
- package/dist/highlighter/languages/getResolvedOrResolveLanguage.js +11 -0
- package/dist/highlighter/languages/getResolvedOrResolveLanguage.js.map +1 -0
- package/dist/highlighter/languages/hasResolvedLanguages.d.ts +7 -0
- package/dist/highlighter/languages/hasResolvedLanguages.d.ts.map +1 -0
- package/dist/highlighter/languages/hasResolvedLanguages.js +11 -0
- package/dist/highlighter/languages/hasResolvedLanguages.js.map +1 -0
- package/dist/highlighter/languages/resolveLanguage.d.ts +9 -0
- package/dist/highlighter/languages/resolveLanguage.d.ts.map +1 -0
- package/dist/highlighter/languages/resolveLanguage.js +30 -0
- package/dist/highlighter/languages/resolveLanguage.js.map +1 -0
- package/dist/highlighter/languages/resolveLanguages.d.ts +9 -0
- package/dist/highlighter/languages/resolveLanguages.d.ts.map +1 -0
- package/dist/highlighter/languages/resolveLanguages.js +25 -0
- package/dist/highlighter/languages/resolveLanguages.js.map +1 -0
- package/dist/highlighter/shared_highlighter.d.ts +21 -0
- package/dist/highlighter/shared_highlighter.d.ts.map +1 -0
- package/dist/highlighter/shared_highlighter.js +71 -0
- package/dist/highlighter/shared_highlighter.js.map +1 -0
- package/dist/highlighter/themes/areThemesAttached.d.ts +7 -0
- package/dist/highlighter/themes/areThemesAttached.d.ts.map +1 -0
- package/dist/highlighter/themes/areThemesAttached.js +12 -0
- package/dist/highlighter/themes/areThemesAttached.js.map +1 -0
- package/dist/highlighter/themes/attachResolvedThemes.d.ts +7 -0
- package/dist/highlighter/themes/attachResolvedThemes.d.ts.map +1 -0
- package/dist/highlighter/themes/attachResolvedThemes.js +24 -0
- package/dist/highlighter/themes/attachResolvedThemes.js.map +1 -0
- package/dist/highlighter/themes/cleanUpResolvedThemes.d.ts +5 -0
- package/dist/highlighter/themes/cleanUpResolvedThemes.d.ts.map +1 -0
- package/dist/highlighter/themes/cleanUpResolvedThemes.js +11 -0
- package/dist/highlighter/themes/cleanUpResolvedThemes.js.map +1 -0
- package/dist/highlighter/themes/constants.d.ts +11 -0
- package/dist/highlighter/themes/constants.d.ts.map +1 -0
- package/dist/highlighter/themes/constants.js +9 -0
- package/dist/highlighter/themes/constants.js.map +1 -0
- package/dist/highlighter/themes/getResolvedOrResolveTheme.d.ts +7 -0
- package/dist/highlighter/themes/getResolvedOrResolveTheme.d.ts.map +1 -0
- package/dist/highlighter/themes/getResolvedOrResolveTheme.js +11 -0
- package/dist/highlighter/themes/getResolvedOrResolveTheme.js.map +1 -0
- package/dist/highlighter/themes/getResolvedThemes.d.ts +7 -0
- package/dist/highlighter/themes/getResolvedThemes.d.ts.map +1 -0
- package/dist/highlighter/themes/getResolvedThemes.js +16 -0
- package/dist/highlighter/themes/getResolvedThemes.js.map +1 -0
- package/dist/highlighter/themes/hasResolvedThemes.d.ts +7 -0
- package/dist/highlighter/themes/hasResolvedThemes.d.ts.map +1 -0
- package/dist/highlighter/themes/hasResolvedThemes.js +11 -0
- package/dist/highlighter/themes/hasResolvedThemes.js.map +1 -0
- package/dist/highlighter/themes/registerCustomTheme.d.ts +7 -0
- package/dist/highlighter/themes/registerCustomTheme.d.ts.map +1 -0
- package/dist/highlighter/themes/registerCustomTheme.js +14 -0
- package/dist/highlighter/themes/registerCustomTheme.js.map +1 -0
- package/dist/highlighter/themes/resolveTheme.d.ts +7 -0
- package/dist/highlighter/themes/resolveTheme.d.ts.map +1 -0
- package/dist/highlighter/themes/resolveTheme.js +35 -0
- package/dist/highlighter/themes/resolveTheme.js.map +1 -0
- package/dist/highlighter/themes/resolveThemes.d.ts +7 -0
- package/dist/highlighter/themes/resolveThemes.d.ts.map +1 -0
- package/dist/highlighter/themes/resolveThemes.js +21 -0
- package/dist/highlighter/themes/resolveThemes.js.map +1 -0
- package/dist/index.d.ts +84 -0
- package/dist/index.js +83 -0
- package/dist/managers/LineSelectionManager.d.ts +64 -0
- package/dist/managers/LineSelectionManager.d.ts.map +1 -0
- package/dist/managers/LineSelectionManager.js +276 -0
- package/dist/managers/LineSelectionManager.js.map +1 -0
- package/dist/managers/MouseEventManager.d.ts +64 -0
- package/dist/managers/MouseEventManager.d.ts.map +1 -0
- package/dist/managers/MouseEventManager.js +244 -0
- package/dist/managers/MouseEventManager.js.map +1 -0
- package/dist/managers/ResizeManager.d.ts +11 -0
- package/dist/managers/ResizeManager.d.ts.map +1 -0
- package/dist/managers/ResizeManager.js +132 -0
- package/dist/managers/ResizeManager.js.map +1 -0
- package/dist/managers/ScrollSyncManager.d.ts +15 -0
- package/dist/managers/ScrollSyncManager.d.ts.map +1 -0
- package/dist/managers/ScrollSyncManager.js +54 -0
- package/dist/managers/ScrollSyncManager.js.map +1 -0
- package/dist/managers/UniversalRenderingManager.d.ts +6 -0
- package/dist/managers/UniversalRenderingManager.d.ts.map +1 -0
- package/dist/managers/UniversalRenderingManager.js +32 -0
- package/dist/managers/UniversalRenderingManager.js.map +1 -0
- package/dist/react/File.d.ts +19 -0
- package/dist/react/File.d.ts.map +1 -0
- package/dist/react/File.js +36 -0
- package/dist/react/File.js.map +1 -0
- package/dist/react/FileDiff.d.ts +22 -0
- package/dist/react/FileDiff.d.ts.map +1 -0
- package/dist/react/FileDiff.js +36 -0
- package/dist/react/FileDiff.js.map +1 -0
- package/dist/react/MultiFileDiff.d.ts +24 -0
- package/dist/react/MultiFileDiff.d.ts.map +1 -0
- package/dist/react/MultiFileDiff.js +38 -0
- package/dist/react/MultiFileDiff.js.map +1 -0
- package/dist/react/PatchDiff.d.ts +21 -0
- package/dist/react/PatchDiff.d.ts.map +1 -0
- package/dist/react/PatchDiff.js +42 -0
- package/dist/react/PatchDiff.js.map +1 -0
- package/dist/react/WorkerPoolContext.d.ts +20 -0
- package/dist/react/WorkerPoolContext.d.ts.map +1 -0
- package/dist/react/WorkerPoolContext.js +41 -0
- package/dist/react/WorkerPoolContext.js.map +1 -0
- package/dist/react/constants.d.ts +7 -0
- package/dist/react/constants.d.ts.map +1 -0
- package/dist/react/constants.js +11 -0
- package/dist/react/constants.js.map +1 -0
- package/dist/react/index.d.ts +17 -0
- package/dist/react/index.js +14 -0
- package/dist/react/jsx.d.ts +12 -0
- package/dist/react/jsx.d.ts.map +1 -0
- package/dist/react/types.d.ts +34 -0
- package/dist/react/types.d.ts.map +1 -0
- package/dist/react/types.js +1 -0
- package/dist/react/utils/renderDiffChildren.d.ts +29 -0
- package/dist/react/utils/renderDiffChildren.d.ts.map +1 -0
- package/dist/react/utils/renderDiffChildren.js +32 -0
- package/dist/react/utils/renderDiffChildren.js.map +1 -0
- package/dist/react/utils/renderFileChildren.d.ts +25 -0
- package/dist/react/utils/renderFileChildren.d.ts.map +1 -0
- package/dist/react/utils/renderFileChildren.js +28 -0
- package/dist/react/utils/renderFileChildren.js.map +1 -0
- package/dist/react/utils/templateRender.d.ts +7 -0
- package/dist/react/utils/templateRender.d.ts.map +1 -0
- package/dist/react/utils/templateRender.js +14 -0
- package/dist/react/utils/templateRender.js.map +1 -0
- package/dist/react/utils/useFileDiffInstance.d.ts +31 -0
- package/dist/react/utils/useFileDiffInstance.d.ts.map +1 -0
- package/dist/react/utils/useFileDiffInstance.js +54 -0
- package/dist/react/utils/useFileDiffInstance.js.map +1 -0
- package/dist/react/utils/useFileInstance.d.ts +27 -0
- package/dist/react/utils/useFileInstance.d.ts.map +1 -0
- package/dist/react/utils/useFileInstance.js +49 -0
- package/dist/react/utils/useFileInstance.js.map +1 -0
- package/dist/react/utils/useStableCallback.d.ts +5 -0
- package/dist/react/utils/useStableCallback.d.ts.map +1 -0
- package/dist/react/utils/useStableCallback.js +14 -0
- package/dist/react/utils/useStableCallback.js.map +1 -0
- package/dist/renderers/DiffHunksRenderer.d.ts +62 -0
- package/dist/renderers/DiffHunksRenderer.d.ts.map +1 -0
- package/dist/renderers/DiffHunksRenderer.js +651 -0
- package/dist/renderers/DiffHunksRenderer.js.map +1 -0
- package/dist/renderers/FileRenderer.d.ts +49 -0
- package/dist/renderers/FileRenderer.d.ts.map +1 -0
- package/dist/renderers/FileRenderer.js +239 -0
- package/dist/renderers/FileRenderer.js.map +1 -0
- package/dist/shiki-stream/index.d.ts +4 -0
- package/dist/shiki-stream/index.js +4 -0
- package/dist/shiki-stream/stream.d.ts +17 -0
- package/dist/shiki-stream/stream.d.ts.map +1 -0
- package/dist/shiki-stream/stream.js +32 -0
- package/dist/shiki-stream/stream.js.map +1 -0
- package/dist/shiki-stream/tokenizer.d.ts +24 -0
- package/dist/shiki-stream/tokenizer.d.ts.map +1 -0
- package/dist/shiki-stream/tokenizer.js +71 -0
- package/dist/shiki-stream/tokenizer.js.map +1 -0
- package/dist/shiki-stream/types.d.ts +45 -0
- package/dist/shiki-stream/types.d.ts.map +1 -0
- package/dist/shiki-stream/types.js +0 -0
- package/dist/sprite.d.ts +6 -0
- package/dist/sprite.d.ts.map +1 -0
- package/dist/sprite.js +55 -0
- package/dist/sprite.js.map +1 -0
- package/dist/ssr/FileDiffReact.d.ts +21 -0
- package/dist/ssr/FileDiffReact.d.ts.map +1 -0
- package/dist/ssr/FileDiffReact.js +53 -0
- package/dist/ssr/FileDiffReact.js.map +1 -0
- package/dist/ssr/index.d.ts +6 -0
- package/dist/ssr/index.js +6 -0
- package/dist/ssr/preloadDiffs.d.ts +72 -0
- package/dist/ssr/preloadDiffs.d.ts.map +1 -0
- package/dist/ssr/preloadDiffs.js +66 -0
- package/dist/ssr/preloadDiffs.js.map +1 -0
- package/dist/ssr/preloadFile.d.ts +23 -0
- package/dist/ssr/preloadFile.d.ts.map +1 -0
- package/dist/ssr/preloadFile.js +26 -0
- package/dist/ssr/preloadFile.js.map +1 -0
- package/dist/ssr/preloadPatchFile.d.ts +15 -0
- package/dist/ssr/preloadPatchFile.d.ts.map +1 -0
- package/dist/ssr/preloadPatchFile.js +17 -0
- package/dist/ssr/preloadPatchFile.js.map +1 -0
- package/dist/ssr/renderHTML.d.ts +7 -0
- package/dist/ssr/renderHTML.d.ts.map +1 -0
- package/dist/ssr/renderHTML.js +11 -0
- package/dist/ssr/renderHTML.js.map +1 -0
- package/dist/string-import.d.ts +6 -0
- package/dist/string-import.d.ts.map +1 -0
- package/dist/style.js +6 -0
- package/dist/style.js.map +1 -0
- package/dist/themes/pierre-dark.js +1328 -0
- package/dist/themes/pierre-dark.js.map +1 -0
- package/dist/themes/pierre-light.js +1328 -0
- package/dist/themes/pierre-light.js.map +1 -0
- package/dist/types.d.ts +238 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +0 -0
- package/dist/utils/areFilesEqual.d.ts +7 -0
- package/dist/utils/areFilesEqual.d.ts.map +1 -0
- package/dist/utils/areFilesEqual.js +8 -0
- package/dist/utils/areFilesEqual.js.map +1 -0
- package/dist/utils/areObjectsEqual.d.ts +5 -0
- package/dist/utils/areObjectsEqual.d.ts.map +1 -0
- package/dist/utils/areObjectsEqual.js +18 -0
- package/dist/utils/areObjectsEqual.js.map +1 -0
- package/dist/utils/areOptionsEqual.d.ts +9 -0
- package/dist/utils/areOptionsEqual.d.ts.map +1 -0
- package/dist/utils/areOptionsEqual.js +12 -0
- package/dist/utils/areOptionsEqual.js.map +1 -0
- package/dist/utils/areSelectionsEqual.d.ts +7 -0
- package/dist/utils/areSelectionsEqual.d.ts.map +1 -0
- package/dist/utils/areSelectionsEqual.js +8 -0
- package/dist/utils/areSelectionsEqual.js.map +1 -0
- package/dist/utils/areThemesEqual.d.ts +7 -0
- package/dist/utils/areThemesEqual.d.ts.map +1 -0
- package/dist/utils/areThemesEqual.js +9 -0
- package/dist/utils/areThemesEqual.js.map +1 -0
- package/dist/utils/cleanLastNewline.d.ts +5 -0
- package/dist/utils/cleanLastNewline.d.ts.map +1 -0
- package/dist/utils/cleanLastNewline.js +8 -0
- package/dist/utils/cleanLastNewline.js.map +1 -0
- package/dist/utils/createAnnotationElement.d.ts +8 -0
- package/dist/utils/createAnnotationElement.d.ts.map +1 -0
- package/dist/utils/createAnnotationElement.js +21 -0
- package/dist/utils/createAnnotationElement.js.map +1 -0
- package/dist/utils/createAnnotationWrapperNode.d.ts +5 -0
- package/dist/utils/createAnnotationWrapperNode.d.ts.map +1 -0
- package/dist/utils/createAnnotationWrapperNode.js +12 -0
- package/dist/utils/createAnnotationWrapperNode.js.map +1 -0
- package/dist/utils/createCodeNode.d.ts +12 -0
- package/dist/utils/createCodeNode.d.ts.map +1 -0
- package/dist/utils/createCodeNode.js +12 -0
- package/dist/utils/createCodeNode.js.map +1 -0
- package/dist/utils/createEmptyRowBuffer.d.ts +7 -0
- package/dist/utils/createEmptyRowBuffer.d.ts.map +1 -0
- package/dist/utils/createEmptyRowBuffer.js +16 -0
- package/dist/utils/createEmptyRowBuffer.js.map +1 -0
- package/dist/utils/createFileHeaderElement.d.ts +17 -0
- package/dist/utils/createFileHeaderElement.d.ts.map +1 -0
- package/dist/utils/createFileHeaderElement.js +84 -0
- package/dist/utils/createFileHeaderElement.js.map +1 -0
- package/dist/utils/createHoverContentNode.d.ts +5 -0
- package/dist/utils/createHoverContentNode.d.ts.map +1 -0
- package/dist/utils/createHoverContentNode.js +15 -0
- package/dist/utils/createHoverContentNode.js.map +1 -0
- package/dist/utils/createNoNewlineElement.d.ts +7 -0
- package/dist/utils/createNoNewlineElement.d.ts.map +1 -0
- package/dist/utils/createNoNewlineElement.js +24 -0
- package/dist/utils/createNoNewlineElement.js.map +1 -0
- package/dist/utils/createPreElement.d.ts +18 -0
- package/dist/utils/createPreElement.d.ts.map +1 -0
- package/dist/utils/createPreElement.js +28 -0
- package/dist/utils/createPreElement.js.map +1 -0
- package/dist/utils/createRowNodes.d.ts +8 -0
- package/dist/utils/createRowNodes.d.ts.map +1 -0
- package/dist/utils/createRowNodes.js +20 -0
- package/dist/utils/createRowNodes.js.map +1 -0
- package/dist/utils/createSeparator.d.ts +25 -0
- package/dist/utils/createSeparator.d.ts.map +1 -0
- package/dist/utils/createSeparator.js +69 -0
- package/dist/utils/createSeparator.js.map +1 -0
- package/dist/utils/createSpanNodeFromToken.d.ts +7 -0
- package/dist/utils/createSpanNodeFromToken.d.ts.map +1 -0
- package/dist/utils/createSpanNodeFromToken.js +13 -0
- package/dist/utils/createSpanNodeFromToken.js.map +1 -0
- package/dist/utils/createStyleElement.d.ts +7 -0
- package/dist/utils/createStyleElement.d.ts.map +1 -0
- package/dist/utils/createStyleElement.js +19 -0
- package/dist/utils/createStyleElement.js.map +1 -0
- package/dist/utils/createTransformerWithState.d.ts +13 -0
- package/dist/utils/createTransformerWithState.d.ts.map +1 -0
- package/dist/utils/createTransformerWithState.js +56 -0
- package/dist/utils/createTransformerWithState.js.map +1 -0
- package/dist/utils/createUnsafeCSSStyleNode.d.ts +5 -0
- package/dist/utils/createUnsafeCSSStyleNode.d.ts.map +1 -0
- package/dist/utils/createUnsafeCSSStyleNode.js +12 -0
- package/dist/utils/createUnsafeCSSStyleNode.js.map +1 -0
- package/dist/utils/cssWrappers.d.ts +6 -0
- package/dist/utils/cssWrappers.d.ts.map +1 -0
- package/dist/utils/cssWrappers.js +21 -0
- package/dist/utils/cssWrappers.js.map +1 -0
- package/dist/utils/diffAcceptRejectHunk.d.ts +7 -0
- package/dist/utils/diffAcceptRejectHunk.d.ts.map +1 -0
- package/dist/utils/diffAcceptRejectHunk.js +82 -0
- package/dist/utils/diffAcceptRejectHunk.js.map +1 -0
- package/dist/utils/formatCSSVariablePrefix.d.ts +5 -0
- package/dist/utils/formatCSSVariablePrefix.d.ts.map +1 -0
- package/dist/utils/formatCSSVariablePrefix.js +8 -0
- package/dist/utils/formatCSSVariablePrefix.js.map +1 -0
- package/dist/utils/getFiletypeFromFileName.d.ts +9 -0
- package/dist/utils/getFiletypeFromFileName.d.ts.map +1 -0
- package/dist/utils/getFiletypeFromFileName.js +343 -0
- package/dist/utils/getFiletypeFromFileName.js.map +1 -0
- package/dist/utils/getHighlighterOptions.d.ts +14 -0
- package/dist/utils/getHighlighterOptions.d.ts.map +1 -0
- package/dist/utils/getHighlighterOptions.js +13 -0
- package/dist/utils/getHighlighterOptions.js.map +1 -0
- package/dist/utils/getHighlighterThemeStyles.d.ts +16 -0
- package/dist/utils/getHighlighterThemeStyles.d.ts.map +1 -0
- package/dist/utils/getHighlighterThemeStyles.js +40 -0
- package/dist/utils/getHighlighterThemeStyles.js.map +1 -0
- package/dist/utils/getHunkSeparatorSlotName.d.ts +5 -0
- package/dist/utils/getHunkSeparatorSlotName.d.ts.map +1 -0
- package/dist/utils/getHunkSeparatorSlotName.js +8 -0
- package/dist/utils/getHunkSeparatorSlotName.js.map +1 -0
- package/dist/utils/getIconForType.d.ts +8 -0
- package/dist/utils/getIconForType.d.ts.map +1 -0
- package/dist/utils/getIconForType.js +15 -0
- package/dist/utils/getIconForType.js.map +1 -0
- package/dist/utils/getLineAnnotationName.d.ts +7 -0
- package/dist/utils/getLineAnnotationName.d.ts.map +1 -0
- package/dist/utils/getLineAnnotationName.js +8 -0
- package/dist/utils/getLineAnnotationName.js.map +1 -0
- package/dist/utils/getLineEndingType.d.ts +5 -0
- package/dist/utils/getLineEndingType.d.ts.map +1 -0
- package/dist/utils/getLineEndingType.js +11 -0
- package/dist/utils/getLineEndingType.js.map +1 -0
- package/dist/utils/getLineNodes.d.ts +7 -0
- package/dist/utils/getLineNodes.d.ts.map +1 -0
- package/dist/utils/getLineNodes.js +15 -0
- package/dist/utils/getLineNodes.js.map +1 -0
- package/dist/utils/getSingularPatch.d.ts +7 -0
- package/dist/utils/getSingularPatch.d.ts.map +1 -0
- package/dist/utils/getSingularPatch.js +20 -0
- package/dist/utils/getSingularPatch.js.map +1 -0
- package/dist/utils/getThemes.d.ts +7 -0
- package/dist/utils/getThemes.d.ts.map +1 -0
- package/dist/utils/getThemes.js +16 -0
- package/dist/utils/getThemes.js.map +1 -0
- package/dist/utils/getTotalLineCountFromHunks.d.ts +7 -0
- package/dist/utils/getTotalLineCountFromHunks.d.ts.map +1 -0
- package/dist/utils/getTotalLineCountFromHunks.js +10 -0
- package/dist/utils/getTotalLineCountFromHunks.js.map +1 -0
- package/dist/utils/hast_utils.d.ts +31 -0
- package/dist/utils/hast_utils.d.ts.map +1 -0
- package/dist/utils/hast_utils.js +42 -0
- package/dist/utils/hast_utils.js.map +1 -0
- package/dist/utils/isWorkerContext.d.ts +5 -0
- package/dist/utils/isWorkerContext.d.ts.map +1 -0
- package/dist/utils/isWorkerContext.js +8 -0
- package/dist/utils/isWorkerContext.js.map +1 -0
- package/dist/utils/parseDiffDecorations.d.ts +31 -0
- package/dist/utils/parseDiffDecorations.d.ts.map +1 -0
- package/dist/utils/parseDiffDecorations.js +34 -0
- package/dist/utils/parseDiffDecorations.js.map +1 -0
- package/dist/utils/parseDiffFromFile.d.ts +14 -0
- package/dist/utils/parseDiffFromFile.d.ts.map +1 -0
- package/dist/utils/parseDiffFromFile.js +23 -0
- package/dist/utils/parseDiffFromFile.js.map +1 -0
- package/dist/utils/parseLineType.d.ts +11 -0
- package/dist/utils/parseLineType.d.ts.map +1 -0
- package/dist/utils/parseLineType.js +16 -0
- package/dist/utils/parseLineType.js.map +1 -0
- package/dist/utils/parsePatchFiles.d.ts +16 -0
- package/dist/utils/parsePatchFiles.d.ts.map +1 -0
- package/dist/utils/parsePatchFiles.js +204 -0
- package/dist/utils/parsePatchFiles.js.map +1 -0
- package/dist/utils/prerenderHTMLIfNecessary.d.ts +5 -0
- package/dist/utils/prerenderHTMLIfNecessary.d.ts.map +1 -0
- package/dist/utils/prerenderHTMLIfNecessary.js +10 -0
- package/dist/utils/prerenderHTMLIfNecessary.js.map +1 -0
- package/dist/utils/processLine.d.ts +8 -0
- package/dist/utils/processLine.d.ts.map +1 -0
- package/dist/utils/processLine.js +42 -0
- package/dist/utils/processLine.js.map +1 -0
- package/dist/utils/renderDiffWithHighlighter.d.ts +7 -0
- package/dist/utils/renderDiffWithHighlighter.d.ts.map +1 -0
- package/dist/utils/renderDiffWithHighlighter.js +323 -0
- package/dist/utils/renderDiffWithHighlighter.js.map +1 -0
- package/dist/utils/renderFileWithHighlighter.d.ts +10 -0
- package/dist/utils/renderFileWithHighlighter.d.ts.map +1 -0
- package/dist/utils/renderFileWithHighlighter.js +52 -0
- package/dist/utils/renderFileWithHighlighter.js.map +1 -0
- package/dist/utils/setLanguageOverride.d.ts +7 -0
- package/dist/utils/setLanguageOverride.d.ts.map +1 -0
- package/dist/utils/setLanguageOverride.js +11 -0
- package/dist/utils/setLanguageOverride.js.map +1 -0
- package/dist/utils/setWrapperNodeProps.d.ts +20 -0
- package/dist/utils/setWrapperNodeProps.d.ts.map +1 -0
- package/dist/utils/setWrapperNodeProps.js +29 -0
- package/dist/utils/setWrapperNodeProps.js.map +1 -0
- package/dist/worker/WorkerPoolManager.d.ts +72 -0
- package/dist/worker/WorkerPoolManager.d.ts.map +1 -0
- package/dist/worker/WorkerPoolManager.js +421 -0
- package/dist/worker/WorkerPoolManager.js.map +1 -0
- package/dist/worker/getOrCreateWorkerPoolSingleton.d.ts +16 -0
- package/dist/worker/getOrCreateWorkerPoolSingleton.d.ts.map +1 -0
- package/dist/worker/getOrCreateWorkerPoolSingleton.js +20 -0
- package/dist/worker/getOrCreateWorkerPoolSingleton.js.map +1 -0
- package/dist/worker/index.d.ts +4 -0
- package/dist/worker/index.js +4 -0
- package/dist/worker/types.d.ts +140 -0
- package/dist/worker/types.d.ts.map +1 -0
- package/dist/worker/types.js +0 -0
- package/dist/worker/worker-portable.d.ts +1 -0
- package/dist/worker/worker-portable.js +14872 -0
- package/dist/worker/worker-portable.js.map +1 -0
- package/dist/worker/worker.d.ts +1 -0
- package/dist/worker/worker.js +1061 -0
- package/dist/worker/worker.js.map +1 -0
- package/package.json +76 -0
|
@@ -0,0 +1,323 @@
|
|
|
1
|
+
import { DEFAULT_THEMES } from "../constants.js";
|
|
2
|
+
import { getFiletypeFromFileName } from "./getFiletypeFromFileName.js";
|
|
3
|
+
import { cleanLastNewline } from "./cleanLastNewline.js";
|
|
4
|
+
import { createTransformerWithState } from "./createTransformerWithState.js";
|
|
5
|
+
import { formatCSSVariablePrefix } from "./formatCSSVariablePrefix.js";
|
|
6
|
+
import { getHighlighterThemeStyles } from "./getHighlighterThemeStyles.js";
|
|
7
|
+
import { getLineNodes } from "./getLineNodes.js";
|
|
8
|
+
import { createDiffSpanDecoration, pushOrJoinSpan } from "./parseDiffDecorations.js";
|
|
9
|
+
import { diffChars, diffWordsWithSpace } from "diff";
|
|
10
|
+
|
|
11
|
+
//#region src/utils/renderDiffWithHighlighter.ts
|
|
12
|
+
function renderDiffWithHighlighter(diff, highlighter, options, forcePlainText = false) {
|
|
13
|
+
const baseThemeType = (() => {
|
|
14
|
+
const theme = options.theme ?? DEFAULT_THEMES;
|
|
15
|
+
if (typeof theme === "string") return highlighter.getTheme(theme).type;
|
|
16
|
+
})();
|
|
17
|
+
const themeStyles = getHighlighterThemeStyles({
|
|
18
|
+
theme: options.theme,
|
|
19
|
+
highlighter
|
|
20
|
+
});
|
|
21
|
+
if (diff.newLines != null && diff.oldLines != null) {
|
|
22
|
+
const { oldContent, newContent, oldInfo, newInfo, oldDecorations, newDecorations } = processLines({
|
|
23
|
+
hunks: diff.hunks,
|
|
24
|
+
oldLines: diff.oldLines,
|
|
25
|
+
newLines: diff.newLines,
|
|
26
|
+
lineDiffType: options.lineDiffType
|
|
27
|
+
});
|
|
28
|
+
return {
|
|
29
|
+
code: renderTwoFiles({
|
|
30
|
+
oldFile: {
|
|
31
|
+
name: diff.prevName ?? diff.name,
|
|
32
|
+
contents: oldContent
|
|
33
|
+
},
|
|
34
|
+
oldInfo,
|
|
35
|
+
oldDecorations,
|
|
36
|
+
newFile: {
|
|
37
|
+
name: diff.name,
|
|
38
|
+
contents: newContent
|
|
39
|
+
},
|
|
40
|
+
newInfo,
|
|
41
|
+
newDecorations,
|
|
42
|
+
highlighter,
|
|
43
|
+
options,
|
|
44
|
+
languageOverride: forcePlainText ? "text" : diff.lang
|
|
45
|
+
}),
|
|
46
|
+
themeStyles,
|
|
47
|
+
baseThemeType
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
const hunks = [];
|
|
51
|
+
let lineIndex = 0;
|
|
52
|
+
for (const hunk of diff.hunks) {
|
|
53
|
+
const { oldContent, newContent, oldInfo, newInfo, oldDecorations, newDecorations, lineIndex: newLineIndex } = processLines({
|
|
54
|
+
hunks: [hunk],
|
|
55
|
+
lineIndex,
|
|
56
|
+
lineDiffType: options.lineDiffType
|
|
57
|
+
});
|
|
58
|
+
const oldFile = {
|
|
59
|
+
name: diff.prevName ?? diff.name,
|
|
60
|
+
contents: oldContent
|
|
61
|
+
};
|
|
62
|
+
const newFile = {
|
|
63
|
+
name: diff.name,
|
|
64
|
+
contents: newContent
|
|
65
|
+
};
|
|
66
|
+
hunks.push(renderTwoFiles({
|
|
67
|
+
oldFile,
|
|
68
|
+
oldInfo,
|
|
69
|
+
oldDecorations,
|
|
70
|
+
newFile,
|
|
71
|
+
newInfo,
|
|
72
|
+
newDecorations,
|
|
73
|
+
highlighter,
|
|
74
|
+
options,
|
|
75
|
+
languageOverride: forcePlainText ? "text" : diff.lang
|
|
76
|
+
}));
|
|
77
|
+
lineIndex = newLineIndex;
|
|
78
|
+
}
|
|
79
|
+
return {
|
|
80
|
+
code: (() => {
|
|
81
|
+
if (hunks.length <= 1) {
|
|
82
|
+
const hunk = hunks[0] ?? {
|
|
83
|
+
oldLines: [],
|
|
84
|
+
newLines: []
|
|
85
|
+
};
|
|
86
|
+
if (hunk.newLines.length === 0 || hunk.oldLines.length === 0) return hunk;
|
|
87
|
+
}
|
|
88
|
+
return { hunks };
|
|
89
|
+
})(),
|
|
90
|
+
themeStyles,
|
|
91
|
+
baseThemeType
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
function computeLineDiffDecorations({ oldLine, newLine, oldLineIndex, newLineIndex, oldDecorations, newDecorations, lineDiffType }) {
|
|
95
|
+
if (oldLine == null || newLine == null || lineDiffType === "none") return;
|
|
96
|
+
oldLine = cleanLastNewline(oldLine);
|
|
97
|
+
newLine = cleanLastNewline(newLine);
|
|
98
|
+
const lineDiff = lineDiffType === "char" ? diffChars(oldLine, newLine) : diffWordsWithSpace(oldLine, newLine);
|
|
99
|
+
const deletionSpans = [];
|
|
100
|
+
const additionSpans = [];
|
|
101
|
+
const enableJoin = lineDiffType === "word-alt";
|
|
102
|
+
for (const item of lineDiff) {
|
|
103
|
+
const isLastItem = item === lineDiff[lineDiff.length - 1];
|
|
104
|
+
if (!item.added && !item.removed) {
|
|
105
|
+
pushOrJoinSpan({
|
|
106
|
+
item,
|
|
107
|
+
arr: deletionSpans,
|
|
108
|
+
enableJoin,
|
|
109
|
+
isNeutral: true,
|
|
110
|
+
isLastItem
|
|
111
|
+
});
|
|
112
|
+
pushOrJoinSpan({
|
|
113
|
+
item,
|
|
114
|
+
arr: additionSpans,
|
|
115
|
+
enableJoin,
|
|
116
|
+
isNeutral: true,
|
|
117
|
+
isLastItem
|
|
118
|
+
});
|
|
119
|
+
} else if (item.removed) pushOrJoinSpan({
|
|
120
|
+
item,
|
|
121
|
+
arr: deletionSpans,
|
|
122
|
+
enableJoin,
|
|
123
|
+
isLastItem
|
|
124
|
+
});
|
|
125
|
+
else pushOrJoinSpan({
|
|
126
|
+
item,
|
|
127
|
+
arr: additionSpans,
|
|
128
|
+
enableJoin,
|
|
129
|
+
isLastItem
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
let spanIndex = 0;
|
|
133
|
+
for (const span of deletionSpans) {
|
|
134
|
+
if (span[0] === 1) oldDecorations.push(createDiffSpanDecoration({
|
|
135
|
+
line: oldLineIndex - 1,
|
|
136
|
+
spanStart: spanIndex,
|
|
137
|
+
spanLength: span[1].length
|
|
138
|
+
}));
|
|
139
|
+
spanIndex += span[1].length;
|
|
140
|
+
}
|
|
141
|
+
spanIndex = 0;
|
|
142
|
+
for (const span of additionSpans) {
|
|
143
|
+
if (span[0] === 1) newDecorations.push(createDiffSpanDecoration({
|
|
144
|
+
line: newLineIndex - 1,
|
|
145
|
+
spanStart: spanIndex,
|
|
146
|
+
spanLength: span[1].length
|
|
147
|
+
}));
|
|
148
|
+
spanIndex += span[1].length;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
function processLines({ hunks, oldLines, newLines, lineIndex = 0, lineDiffType }) {
|
|
152
|
+
const oldInfo = {};
|
|
153
|
+
const newInfo = {};
|
|
154
|
+
const oldDecorations = [];
|
|
155
|
+
const newDecorations = [];
|
|
156
|
+
let newLineIndex = 1;
|
|
157
|
+
let oldLineIndex = 1;
|
|
158
|
+
let newLineNumber = 1;
|
|
159
|
+
let oldLineNumber = 1;
|
|
160
|
+
let oldContent = "";
|
|
161
|
+
let newContent = "";
|
|
162
|
+
for (const hunk of hunks) {
|
|
163
|
+
while (oldLines != null && newLines != null && newLineIndex < hunk.additionStart && oldLineIndex < hunk.deletionStart) {
|
|
164
|
+
oldInfo[oldLineIndex] = {
|
|
165
|
+
type: "context-expanded",
|
|
166
|
+
lineNumber: oldLineNumber,
|
|
167
|
+
lineIndex
|
|
168
|
+
};
|
|
169
|
+
newInfo[newLineIndex] = {
|
|
170
|
+
type: "context-expanded",
|
|
171
|
+
lineNumber: newLineNumber,
|
|
172
|
+
lineIndex
|
|
173
|
+
};
|
|
174
|
+
oldContent += oldLines[oldLineIndex - 1];
|
|
175
|
+
newContent += newLines[newLineIndex - 1];
|
|
176
|
+
oldLineIndex++;
|
|
177
|
+
newLineIndex++;
|
|
178
|
+
oldLineNumber++;
|
|
179
|
+
newLineNumber++;
|
|
180
|
+
lineIndex++;
|
|
181
|
+
}
|
|
182
|
+
oldLineNumber = hunk.deletionStart;
|
|
183
|
+
newLineNumber = hunk.additionStart;
|
|
184
|
+
for (const hunkContent of hunk.hunkContent) if (hunkContent.type === "context") for (const line of hunkContent.lines) {
|
|
185
|
+
oldInfo[oldLineIndex] = {
|
|
186
|
+
type: "context",
|
|
187
|
+
lineNumber: oldLineNumber,
|
|
188
|
+
lineIndex
|
|
189
|
+
};
|
|
190
|
+
newInfo[newLineIndex] = {
|
|
191
|
+
type: "context",
|
|
192
|
+
lineNumber: newLineNumber,
|
|
193
|
+
lineIndex
|
|
194
|
+
};
|
|
195
|
+
oldContent += line;
|
|
196
|
+
newContent += line;
|
|
197
|
+
oldLineIndex++;
|
|
198
|
+
newLineIndex++;
|
|
199
|
+
newLineNumber++;
|
|
200
|
+
oldLineNumber++;
|
|
201
|
+
lineIndex++;
|
|
202
|
+
}
|
|
203
|
+
else {
|
|
204
|
+
const len = Math.max(hunkContent.additions.length, hunkContent.deletions.length);
|
|
205
|
+
let i = 0;
|
|
206
|
+
while (i < len) {
|
|
207
|
+
const oldLine = hunkContent.deletions[i];
|
|
208
|
+
const newLine = hunkContent.additions[i];
|
|
209
|
+
computeLineDiffDecorations({
|
|
210
|
+
newLine,
|
|
211
|
+
oldLine,
|
|
212
|
+
oldLineIndex,
|
|
213
|
+
newLineIndex,
|
|
214
|
+
oldDecorations,
|
|
215
|
+
newDecorations,
|
|
216
|
+
lineDiffType
|
|
217
|
+
});
|
|
218
|
+
if (oldLine != null) {
|
|
219
|
+
oldInfo[oldLineIndex] = {
|
|
220
|
+
type: "change-deletion",
|
|
221
|
+
lineNumber: oldLineNumber,
|
|
222
|
+
lineIndex
|
|
223
|
+
};
|
|
224
|
+
oldContent += oldLine;
|
|
225
|
+
oldLineIndex++;
|
|
226
|
+
oldLineNumber++;
|
|
227
|
+
}
|
|
228
|
+
if (newLine != null) {
|
|
229
|
+
newInfo[newLineIndex] = {
|
|
230
|
+
type: "change-addition",
|
|
231
|
+
lineNumber: newLineNumber,
|
|
232
|
+
lineIndex
|
|
233
|
+
};
|
|
234
|
+
newContent += newLine;
|
|
235
|
+
newLineIndex++;
|
|
236
|
+
newLineNumber++;
|
|
237
|
+
}
|
|
238
|
+
lineIndex++;
|
|
239
|
+
i++;
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
if (oldLines == null || newLines == null || hunk !== hunks[hunks.length - 1]) continue;
|
|
243
|
+
while (oldLineIndex <= oldLines.length || newLineIndex <= oldLines.length) {
|
|
244
|
+
const oldLine = oldLines[oldLineIndex - 1];
|
|
245
|
+
const newLine = newLines[newLineIndex - 1];
|
|
246
|
+
if (oldLine == null && newLine == null) break;
|
|
247
|
+
if (oldLine != null) {
|
|
248
|
+
oldInfo[oldLineIndex] = {
|
|
249
|
+
type: "context-expanded",
|
|
250
|
+
lineNumber: oldLineNumber,
|
|
251
|
+
lineIndex
|
|
252
|
+
};
|
|
253
|
+
oldContent += oldLine;
|
|
254
|
+
oldLineIndex++;
|
|
255
|
+
oldLineNumber++;
|
|
256
|
+
}
|
|
257
|
+
if (newLine != null) {
|
|
258
|
+
newInfo[newLineIndex] = {
|
|
259
|
+
type: "context-expanded",
|
|
260
|
+
lineNumber: newLineNumber,
|
|
261
|
+
lineIndex
|
|
262
|
+
};
|
|
263
|
+
newContent += newLine;
|
|
264
|
+
newLineIndex++;
|
|
265
|
+
newLineNumber++;
|
|
266
|
+
}
|
|
267
|
+
lineIndex++;
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
return {
|
|
271
|
+
oldContent: cleanLastNewline(oldContent),
|
|
272
|
+
newContent: cleanLastNewline(newContent),
|
|
273
|
+
oldInfo,
|
|
274
|
+
newInfo,
|
|
275
|
+
oldDecorations,
|
|
276
|
+
newDecorations,
|
|
277
|
+
lineIndex
|
|
278
|
+
};
|
|
279
|
+
}
|
|
280
|
+
function renderTwoFiles({ oldFile, newFile, oldInfo, newInfo, highlighter, oldDecorations, newDecorations, languageOverride, options: { theme: themeOrThemes = DEFAULT_THEMES,...options } }) {
|
|
281
|
+
const oldLang = languageOverride ?? getFiletypeFromFileName(oldFile.name);
|
|
282
|
+
const newLang = languageOverride ?? getFiletypeFromFileName(newFile.name);
|
|
283
|
+
const { state, transformers } = createTransformerWithState();
|
|
284
|
+
const hastConfig = (() => {
|
|
285
|
+
return typeof themeOrThemes === "string" ? {
|
|
286
|
+
...options,
|
|
287
|
+
lang: "text",
|
|
288
|
+
theme: themeOrThemes,
|
|
289
|
+
transformers,
|
|
290
|
+
decorations: void 0,
|
|
291
|
+
defaultColor: false,
|
|
292
|
+
cssVariablePrefix: formatCSSVariablePrefix()
|
|
293
|
+
} : {
|
|
294
|
+
...options,
|
|
295
|
+
lang: "text",
|
|
296
|
+
themes: themeOrThemes,
|
|
297
|
+
transformers,
|
|
298
|
+
decorations: void 0,
|
|
299
|
+
defaultColor: false,
|
|
300
|
+
cssVariablePrefix: formatCSSVariablePrefix()
|
|
301
|
+
};
|
|
302
|
+
})();
|
|
303
|
+
return {
|
|
304
|
+
oldLines: (() => {
|
|
305
|
+
if (oldFile.contents === "") return [];
|
|
306
|
+
hastConfig.lang = oldLang;
|
|
307
|
+
state.lineInfo = oldInfo;
|
|
308
|
+
hastConfig.decorations = oldDecorations;
|
|
309
|
+
return getLineNodes(highlighter.codeToHast(oldFile.contents, hastConfig));
|
|
310
|
+
})(),
|
|
311
|
+
newLines: (() => {
|
|
312
|
+
if (newFile.contents === "") return [];
|
|
313
|
+
hastConfig.lang = newLang;
|
|
314
|
+
hastConfig.decorations = newDecorations;
|
|
315
|
+
state.lineInfo = newInfo;
|
|
316
|
+
return getLineNodes(highlighter.codeToHast(newFile.contents, hastConfig));
|
|
317
|
+
})()
|
|
318
|
+
};
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
//#endregion
|
|
322
|
+
export { renderDiffWithHighlighter };
|
|
323
|
+
//# sourceMappingURL=renderDiffWithHighlighter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderDiffWithHighlighter.js","names":["hunks: RenderDiffFilesResult[]","deletionSpans: [0 | 1, string][]","additionSpans: [0 | 1, string][]","oldInfo: Record<number, LineInfo | undefined>","newInfo: Record<number, LineInfo | undefined>","oldDecorations: DecorationItem[]","newDecorations: DecorationItem[]","hastConfig: CodeToHastOptions<DiffsThemeNames>"],"sources":["../../src/utils/renderDiffWithHighlighter.ts"],"sourcesContent":["import { diffChars, diffWordsWithSpace } from 'diff';\n\nimport { DEFAULT_THEMES } from '../constants';\nimport type {\n CodeToHastOptions,\n DecorationItem,\n DiffsHighlighter,\n DiffsThemeNames,\n FileContents,\n FileDiffMetadata,\n Hunk,\n LineDiffTypes,\n LineInfo,\n RenderDiffFilesResult,\n RenderDiffOptions,\n SupportedLanguages,\n ThemedDiffResult,\n} from '../types';\nimport { cleanLastNewline } from './cleanLastNewline';\nimport { createTransformerWithState } from './createTransformerWithState';\nimport { formatCSSVariablePrefix } from './formatCSSVariablePrefix';\nimport { getFiletypeFromFileName } from './getFiletypeFromFileName';\nimport { getHighlighterThemeStyles } from './getHighlighterThemeStyles';\nimport { getLineNodes } from './getLineNodes';\nimport {\n createDiffSpanDecoration,\n pushOrJoinSpan,\n} from './parseDiffDecorations';\n\nexport function renderDiffWithHighlighter(\n diff: FileDiffMetadata,\n highlighter: DiffsHighlighter,\n options: RenderDiffOptions,\n forcePlainText = false\n): ThemedDiffResult {\n const baseThemeType = (() => {\n const theme = options.theme ?? DEFAULT_THEMES;\n if (typeof theme === 'string') {\n return highlighter.getTheme(theme).type;\n }\n return undefined;\n })();\n const themeStyles = getHighlighterThemeStyles({\n theme: options.theme,\n highlighter,\n });\n // If we've received a diff with both files\n if (diff.newLines != null && diff.oldLines != null) {\n const {\n oldContent,\n newContent,\n oldInfo,\n newInfo,\n oldDecorations,\n newDecorations,\n } = processLines({\n hunks: diff.hunks,\n oldLines: diff.oldLines,\n newLines: diff.newLines,\n lineDiffType: options.lineDiffType,\n });\n const oldFile = {\n name: diff.prevName ?? diff.name,\n contents: oldContent,\n };\n const newFile = {\n name: diff.name,\n contents: newContent,\n };\n const code = renderTwoFiles({\n oldFile,\n oldInfo,\n oldDecorations,\n\n newFile,\n newInfo,\n newDecorations,\n\n highlighter,\n options,\n languageOverride: forcePlainText ? 'text' : diff.lang,\n });\n return { code, themeStyles, baseThemeType };\n }\n const hunks: RenderDiffFilesResult[] = [];\n let lineIndex = 0;\n for (const hunk of diff.hunks) {\n const result = processLines({\n hunks: [hunk],\n lineIndex,\n lineDiffType: options.lineDiffType,\n });\n const {\n oldContent,\n newContent,\n oldInfo,\n newInfo,\n oldDecorations,\n newDecorations,\n lineIndex: newLineIndex,\n } = result;\n const oldFile = {\n name: diff.prevName ?? diff.name,\n contents: oldContent,\n };\n const newFile = {\n name: diff.name,\n contents: newContent,\n };\n hunks.push(\n renderTwoFiles({\n oldFile,\n oldInfo,\n oldDecorations,\n\n newFile,\n newInfo,\n newDecorations,\n\n highlighter,\n options,\n languageOverride: forcePlainText ? 'text' : diff.lang,\n })\n );\n lineIndex = newLineIndex;\n }\n\n const code = (() => {\n if (hunks.length <= 1) {\n const hunk = hunks[0] ?? { oldLines: [], newLines: [] };\n if (hunk.newLines.length === 0 || hunk.oldLines.length === 0) {\n return hunk;\n }\n }\n return { hunks };\n })();\n\n return { code, themeStyles, baseThemeType };\n}\n\ninterface ProcessLineDiffProps {\n oldLine: string | undefined;\n newLine: string | undefined;\n oldLineIndex: number;\n newLineIndex: number;\n oldDecorations: DecorationItem[];\n newDecorations: DecorationItem[];\n lineDiffType: LineDiffTypes;\n}\n\nfunction computeLineDiffDecorations({\n oldLine,\n newLine,\n oldLineIndex,\n newLineIndex,\n oldDecorations,\n newDecorations,\n lineDiffType,\n}: ProcessLineDiffProps) {\n if (oldLine == null || newLine == null || lineDiffType === 'none') {\n return;\n }\n oldLine = cleanLastNewline(oldLine);\n newLine = cleanLastNewline(newLine);\n // NOTE(amadeus): Because we visually trim trailing newlines when rendering,\n // we also gotta make sure the diff parsing doesn't include the newline\n // character that could be there...\n const lineDiff =\n lineDiffType === 'char'\n ? diffChars(oldLine, newLine)\n : diffWordsWithSpace(oldLine, newLine);\n const deletionSpans: [0 | 1, string][] = [];\n const additionSpans: [0 | 1, string][] = [];\n const enableJoin = lineDiffType === 'word-alt';\n for (const item of lineDiff) {\n const isLastItem = item === lineDiff[lineDiff.length - 1];\n if (!item.added && !item.removed) {\n pushOrJoinSpan({\n item,\n arr: deletionSpans,\n enableJoin,\n isNeutral: true,\n isLastItem,\n });\n pushOrJoinSpan({\n item,\n arr: additionSpans,\n enableJoin,\n isNeutral: true,\n isLastItem,\n });\n } else if (item.removed) {\n pushOrJoinSpan({ item, arr: deletionSpans, enableJoin, isLastItem });\n } else {\n pushOrJoinSpan({ item, arr: additionSpans, enableJoin, isLastItem });\n }\n }\n let spanIndex = 0;\n for (const span of deletionSpans) {\n if (span[0] === 1) {\n oldDecorations.push(\n createDiffSpanDecoration({\n // Decoration indexes start at 0\n line: oldLineIndex - 1,\n spanStart: spanIndex,\n spanLength: span[1].length,\n })\n );\n }\n spanIndex += span[1].length;\n }\n spanIndex = 0;\n for (const span of additionSpans) {\n if (span[0] === 1) {\n newDecorations.push(\n createDiffSpanDecoration({\n // Decoration indexes start at 0\n line: newLineIndex - 1,\n spanStart: spanIndex,\n spanLength: span[1].length,\n })\n );\n }\n spanIndex += span[1].length;\n }\n}\n\ninterface ProcessLinesProps {\n hunks: Hunk[];\n oldLines?: string[];\n newLines?: string[];\n lineIndex?: number;\n newLineIndex?: number;\n oldLineIndex?: number;\n lineDiffType: LineDiffTypes;\n}\n\nfunction processLines({\n hunks,\n oldLines,\n newLines,\n lineIndex = 0,\n lineDiffType,\n}: ProcessLinesProps) {\n const oldInfo: Record<number, LineInfo | undefined> = {};\n const newInfo: Record<number, LineInfo | undefined> = {};\n const oldDecorations: DecorationItem[] = [];\n const newDecorations: DecorationItem[] = [];\n let newLineIndex = 1;\n let oldLineIndex = 1;\n let newLineNumber = 1;\n let oldLineNumber = 1;\n let oldContent = '';\n let newContent = '';\n for (const hunk of hunks) {\n // If there's content prior to the hunk, lets fill it up\n while (\n oldLines != null &&\n newLines != null &&\n newLineIndex < hunk.additionStart &&\n oldLineIndex < hunk.deletionStart\n ) {\n oldInfo[oldLineIndex] = {\n type: 'context-expanded',\n lineNumber: oldLineNumber,\n lineIndex,\n };\n newInfo[newLineIndex] = {\n type: 'context-expanded',\n lineNumber: newLineNumber,\n lineIndex,\n };\n oldContent += oldLines[oldLineIndex - 1];\n newContent += newLines[newLineIndex - 1];\n oldLineIndex++;\n newLineIndex++;\n oldLineNumber++;\n newLineNumber++;\n lineIndex++;\n }\n oldLineNumber = hunk.deletionStart;\n newLineNumber = hunk.additionStart;\n\n // Lets process the actual hunk content\n for (const hunkContent of hunk.hunkContent) {\n if (hunkContent.type === 'context') {\n for (const line of hunkContent.lines) {\n oldInfo[oldLineIndex] = {\n type: 'context',\n lineNumber: oldLineNumber,\n lineIndex,\n };\n newInfo[newLineIndex] = {\n type: 'context',\n lineNumber: newLineNumber,\n lineIndex,\n };\n oldContent += line;\n newContent += line;\n oldLineIndex++;\n newLineIndex++;\n newLineNumber++;\n oldLineNumber++;\n lineIndex++;\n }\n } else {\n const len = Math.max(\n hunkContent.additions.length,\n hunkContent.deletions.length\n );\n let i = 0;\n while (i < len) {\n const oldLine = hunkContent.deletions[i];\n const newLine = hunkContent.additions[i];\n computeLineDiffDecorations({\n newLine,\n oldLine,\n oldLineIndex,\n newLineIndex,\n oldDecorations,\n newDecorations,\n lineDiffType,\n });\n if (oldLine != null) {\n oldInfo[oldLineIndex] = {\n type: 'change-deletion',\n lineNumber: oldLineNumber,\n lineIndex,\n };\n oldContent += oldLine;\n oldLineIndex++;\n oldLineNumber++;\n }\n if (newLine != null) {\n newInfo[newLineIndex] = {\n type: 'change-addition',\n lineNumber: newLineNumber,\n lineIndex,\n };\n newContent += newLine;\n newLineIndex++;\n newLineNumber++;\n }\n lineIndex++;\n i++;\n }\n }\n }\n\n if (\n oldLines == null ||\n newLines == null ||\n hunk !== hunks[hunks.length - 1]\n )\n continue;\n // If we are on the last hunk, we should fully iterate through the rest\n // of the lines\n while (oldLineIndex <= oldLines.length || newLineIndex <= oldLines.length) {\n const oldLine = oldLines[oldLineIndex - 1];\n const newLine = newLines[newLineIndex - 1];\n if (oldLine == null && newLine == null) {\n break;\n }\n if (oldLine != null) {\n oldInfo[oldLineIndex] = {\n type: 'context-expanded',\n lineNumber: oldLineNumber,\n lineIndex,\n };\n oldContent += oldLine;\n oldLineIndex++;\n oldLineNumber++;\n }\n if (newLine != null) {\n newInfo[newLineIndex] = {\n type: 'context-expanded',\n lineNumber: newLineNumber,\n lineIndex,\n };\n newContent += newLine;\n newLineIndex++;\n newLineNumber++;\n }\n lineIndex++;\n }\n }\n return {\n oldContent: cleanLastNewline(oldContent),\n newContent: cleanLastNewline(newContent),\n oldInfo,\n newInfo,\n oldDecorations,\n newDecorations,\n lineIndex,\n };\n}\n\ninterface RenderTwoFilesProps {\n oldFile: FileContents;\n newFile: FileContents;\n oldInfo: Record<number, LineInfo | undefined>;\n newInfo: Record<number, LineInfo | undefined>;\n oldDecorations: DecorationItem[];\n newDecorations: DecorationItem[];\n options: RenderDiffOptions;\n highlighter: DiffsHighlighter;\n languageOverride: SupportedLanguages | undefined;\n}\n\nfunction renderTwoFiles({\n oldFile,\n newFile,\n oldInfo,\n newInfo,\n highlighter,\n oldDecorations,\n newDecorations,\n languageOverride,\n options: { theme: themeOrThemes = DEFAULT_THEMES, ...options },\n}: RenderTwoFilesProps) {\n const oldLang = languageOverride ?? getFiletypeFromFileName(oldFile.name);\n const newLang = languageOverride ?? getFiletypeFromFileName(newFile.name);\n const { state, transformers } = createTransformerWithState();\n const hastConfig: CodeToHastOptions<DiffsThemeNames> = (() => {\n return typeof themeOrThemes === 'string'\n ? {\n ...options,\n // language will be overwritten for each highlight\n lang: 'text',\n theme: themeOrThemes,\n transformers,\n decorations: undefined,\n defaultColor: false,\n cssVariablePrefix: formatCSSVariablePrefix(),\n }\n : {\n ...options,\n // language will be overwritten for each highlight\n lang: 'text',\n themes: themeOrThemes,\n transformers,\n decorations: undefined,\n defaultColor: false,\n cssVariablePrefix: formatCSSVariablePrefix(),\n };\n })();\n\n const oldLines = (() => {\n if (oldFile.contents === '') {\n return [];\n }\n hastConfig.lang = oldLang;\n state.lineInfo = oldInfo;\n hastConfig.decorations = oldDecorations;\n return getLineNodes(highlighter.codeToHast(oldFile.contents, hastConfig));\n })();\n const newLines = (() => {\n if (newFile.contents === '') {\n return [];\n }\n hastConfig.lang = newLang;\n hastConfig.decorations = newDecorations;\n state.lineInfo = newInfo;\n return getLineNodes(highlighter.codeToHast(newFile.contents, hastConfig));\n })();\n\n return { oldLines, newLines };\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { DiffsHighlighter, FileContents, RenderFileOptions, ThemedFileResult } from "../types.js";
|
|
2
|
+
|
|
3
|
+
//#region src/utils/renderFileWithHighlighter.d.ts
|
|
4
|
+
declare function renderFileWithHighlighter(file: FileContents, highlighter: DiffsHighlighter, {
|
|
5
|
+
theme,
|
|
6
|
+
tokenizeMaxLineLength
|
|
7
|
+
}: RenderFileOptions, forcePlainText?: boolean): ThemedFileResult;
|
|
8
|
+
//#endregion
|
|
9
|
+
export { renderFileWithHighlighter };
|
|
10
|
+
//# sourceMappingURL=renderFileWithHighlighter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderFileWithHighlighter.d.ts","names":[],"sources":["../../src/utils/renderFileWithHighlighter.ts"],"sourcesContent":[],"mappings":";;;iBAgBgB,yBAAA,OACR,2BACO;;;GACsC,8CAElD"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { DEFAULT_THEMES } from "../constants.js";
|
|
2
|
+
import { getFiletypeFromFileName } from "./getFiletypeFromFileName.js";
|
|
3
|
+
import { cleanLastNewline } from "./cleanLastNewline.js";
|
|
4
|
+
import { createTransformerWithState } from "./createTransformerWithState.js";
|
|
5
|
+
import { formatCSSVariablePrefix } from "./formatCSSVariablePrefix.js";
|
|
6
|
+
import { getHighlighterThemeStyles } from "./getHighlighterThemeStyles.js";
|
|
7
|
+
import { getLineNodes } from "./getLineNodes.js";
|
|
8
|
+
|
|
9
|
+
//#region src/utils/renderFileWithHighlighter.ts
|
|
10
|
+
function renderFileWithHighlighter(file, highlighter, { theme = DEFAULT_THEMES, tokenizeMaxLineLength }, forcePlainText = false) {
|
|
11
|
+
const { state, transformers } = createTransformerWithState();
|
|
12
|
+
const lang = forcePlainText ? "text" : file.lang ?? getFiletypeFromFileName(file.name);
|
|
13
|
+
const baseThemeType = (() => {
|
|
14
|
+
if (typeof theme === "string") return highlighter.getTheme(theme).type;
|
|
15
|
+
})();
|
|
16
|
+
const themeStyles = getHighlighterThemeStyles({
|
|
17
|
+
theme,
|
|
18
|
+
highlighter
|
|
19
|
+
});
|
|
20
|
+
state.lineInfo = (shikiLineNumber) => ({
|
|
21
|
+
type: "context",
|
|
22
|
+
lineIndex: shikiLineNumber - 1,
|
|
23
|
+
lineNumber: shikiLineNumber
|
|
24
|
+
});
|
|
25
|
+
const hastConfig = (() => {
|
|
26
|
+
if (typeof theme === "string") return {
|
|
27
|
+
lang,
|
|
28
|
+
theme,
|
|
29
|
+
transformers,
|
|
30
|
+
defaultColor: false,
|
|
31
|
+
cssVariablePrefix: formatCSSVariablePrefix(),
|
|
32
|
+
tokenizeMaxLineLength
|
|
33
|
+
};
|
|
34
|
+
return {
|
|
35
|
+
lang,
|
|
36
|
+
themes: theme,
|
|
37
|
+
transformers,
|
|
38
|
+
defaultColor: false,
|
|
39
|
+
cssVariablePrefix: formatCSSVariablePrefix(),
|
|
40
|
+
tokenizeMaxLineLength
|
|
41
|
+
};
|
|
42
|
+
})();
|
|
43
|
+
return {
|
|
44
|
+
code: getLineNodes(highlighter.codeToHast(cleanLastNewline(file.contents), hastConfig)),
|
|
45
|
+
themeStyles,
|
|
46
|
+
baseThemeType
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
//#endregion
|
|
51
|
+
export { renderFileWithHighlighter };
|
|
52
|
+
//# sourceMappingURL=renderFileWithHighlighter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderFileWithHighlighter.js","names":["hastConfig: CodeToHastOptions<DiffsThemeNames>"],"sources":["../../src/utils/renderFileWithHighlighter.ts"],"sourcesContent":["import { DEFAULT_THEMES } from '../constants';\nimport type {\n CodeToHastOptions,\n DiffsHighlighter,\n DiffsThemeNames,\n FileContents,\n RenderFileOptions,\n ThemedFileResult,\n} from '../types';\nimport { cleanLastNewline } from './cleanLastNewline';\nimport { createTransformerWithState } from './createTransformerWithState';\nimport { formatCSSVariablePrefix } from './formatCSSVariablePrefix';\nimport { getFiletypeFromFileName } from './getFiletypeFromFileName';\nimport { getHighlighterThemeStyles } from './getHighlighterThemeStyles';\nimport { getLineNodes } from './getLineNodes';\n\nexport function renderFileWithHighlighter(\n file: FileContents,\n highlighter: DiffsHighlighter,\n { theme = DEFAULT_THEMES, tokenizeMaxLineLength }: RenderFileOptions,\n forcePlainText = false\n): ThemedFileResult {\n const { state, transformers } = createTransformerWithState();\n const lang = forcePlainText\n ? 'text'\n : (file.lang ?? getFiletypeFromFileName(file.name));\n const baseThemeType = (() => {\n if (typeof theme === 'string') {\n return highlighter.getTheme(theme).type;\n }\n return undefined;\n })();\n const themeStyles = getHighlighterThemeStyles({\n theme,\n highlighter,\n });\n state.lineInfo = (shikiLineNumber: number) => ({\n type: 'context',\n lineIndex: shikiLineNumber - 1,\n lineNumber: shikiLineNumber,\n });\n const hastConfig: CodeToHastOptions<DiffsThemeNames> = (() => {\n if (typeof theme === 'string') {\n return {\n lang,\n theme,\n transformers,\n defaultColor: false,\n cssVariablePrefix: formatCSSVariablePrefix(),\n tokenizeMaxLineLength,\n };\n }\n return {\n lang,\n themes: theme,\n transformers,\n defaultColor: false,\n cssVariablePrefix: formatCSSVariablePrefix(),\n tokenizeMaxLineLength,\n };\n })();\n return {\n code: getLineNodes(\n highlighter.codeToHast(cleanLastNewline(file.contents), hastConfig)\n ),\n themeStyles,\n baseThemeType: baseThemeType,\n };\n}\n"],"mappings":";;;;;;;;;AAgBA,SAAgB,0BACd,MACA,aACA,EAAE,QAAQ,gBAAgB,yBAC1B,iBAAiB,OACC;CAClB,MAAM,EAAE,OAAO,iBAAiB,4BAA4B;CAC5D,MAAM,OAAO,iBACT,SACC,KAAK,QAAQ,wBAAwB,KAAK,KAAK;CACpD,MAAM,uBAAuB;AAC3B,MAAI,OAAO,UAAU,SACnB,QAAO,YAAY,SAAS,MAAM,CAAC;KAGnC;CACJ,MAAM,cAAc,0BAA0B;EAC5C;EACA;EACD,CAAC;AACF,OAAM,YAAY,qBAA6B;EAC7C,MAAM;EACN,WAAW,kBAAkB;EAC7B,YAAY;EACb;CACD,MAAMA,oBAAwD;AAC5D,MAAI,OAAO,UAAU,SACnB,QAAO;GACL;GACA;GACA;GACA,cAAc;GACd,mBAAmB,yBAAyB;GAC5C;GACD;AAEH,SAAO;GACL;GACA,QAAQ;GACR;GACA,cAAc;GACd,mBAAmB,yBAAyB;GAC5C;GACD;KACC;AACJ,QAAO;EACL,MAAM,aACJ,YAAY,WAAW,iBAAiB,KAAK,SAAS,EAAE,WAAW,CACpE;EACD;EACe;EAChB"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { FileContents, FileDiffMetadata, SupportedLanguages } from "../types.js";
|
|
2
|
+
|
|
3
|
+
//#region src/utils/setLanguageOverride.d.ts
|
|
4
|
+
declare function setLanguageOverride<T extends FileContents | FileDiffMetadata>(fileOrDiff: T, lang: SupportedLanguages): T;
|
|
5
|
+
//#endregion
|
|
6
|
+
export { setLanguageOverride };
|
|
7
|
+
//# sourceMappingURL=setLanguageOverride.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setLanguageOverride.d.ts","names":[],"sources":["../../src/utils/setLanguageOverride.ts"],"sourcesContent":[],"mappings":";;;iBAMgB,8BAA8B,eAAe,8BAC/C,SACN,qBACL"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setLanguageOverride.js","names":[],"sources":["../../src/utils/setLanguageOverride.ts"],"sourcesContent":["import type {\n FileContents,\n FileDiffMetadata,\n SupportedLanguages,\n} from '../types';\n\nexport function setLanguageOverride<T extends FileContents | FileDiffMetadata>(\n fileOrDiff: T,\n lang: SupportedLanguages\n): T {\n return { ...fileOrDiff, lang };\n}\n"],"mappings":";AAMA,SAAgB,oBACd,YACA,MACG;AACH,QAAO;EAAE,GAAG;EAAY;EAAM"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { PrePropertiesConfig } from "../types.js";
|
|
2
|
+
|
|
3
|
+
//#region src/utils/setWrapperNodeProps.d.ts
|
|
4
|
+
interface SetPreNodePropertiesProps extends PrePropertiesConfig {
|
|
5
|
+
pre: HTMLPreElement;
|
|
6
|
+
}
|
|
7
|
+
declare function setPreNodeProperties({
|
|
8
|
+
diffIndicators,
|
|
9
|
+
disableBackground,
|
|
10
|
+
disableLineNumbers,
|
|
11
|
+
overflow,
|
|
12
|
+
pre,
|
|
13
|
+
split,
|
|
14
|
+
themeStyles,
|
|
15
|
+
themeType,
|
|
16
|
+
totalLines
|
|
17
|
+
}: SetPreNodePropertiesProps): HTMLPreElement;
|
|
18
|
+
//#endregion
|
|
19
|
+
export { SetPreNodePropertiesProps, setPreNodeProperties };
|
|
20
|
+
//# sourceMappingURL=setWrapperNodeProps.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setWrapperNodeProps.d.ts","names":[],"sources":["../../src/utils/setWrapperNodeProps.ts"],"sourcesContent":[],"mappings":";;;UAEiB,yBAAA,SAAkC;OAC5C;AADP;AAIgB,iBAAA,oBAAA,CAAA;EAAA,cAAA;EAAA,iBAAA;EAAA,kBAAA;EAAA,QAAA;EAAA,GAAA;EAAA,KAAA;EAAA,WAAA;EAAA,SAAA;EAAA;AAAA,CAAA,EAUb,yBAVa,CAAA,EAUe,cAVf"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
//#region src/utils/setWrapperNodeProps.ts
|
|
2
|
+
function setPreNodeProperties({ diffIndicators, disableBackground, disableLineNumbers, overflow, pre, split, themeStyles, themeType, totalLines }) {
|
|
3
|
+
if (themeType === "system") delete pre.dataset.themeType;
|
|
4
|
+
else pre.dataset.themeType = themeType;
|
|
5
|
+
switch (diffIndicators) {
|
|
6
|
+
case "bars":
|
|
7
|
+
case "classic":
|
|
8
|
+
pre.dataset.indicators = diffIndicators;
|
|
9
|
+
break;
|
|
10
|
+
case "none":
|
|
11
|
+
delete pre.dataset.indicators;
|
|
12
|
+
break;
|
|
13
|
+
}
|
|
14
|
+
if (disableLineNumbers) pre.dataset.disableLineNumbers = "";
|
|
15
|
+
else delete pre.dataset.disableLineNumbers;
|
|
16
|
+
if (disableBackground) delete pre.dataset.background;
|
|
17
|
+
else pre.dataset.background = "";
|
|
18
|
+
pre.dataset.type = split ? "split" : "file";
|
|
19
|
+
pre.dataset.overflow = overflow;
|
|
20
|
+
pre.dataset.diffs = "";
|
|
21
|
+
pre.tabIndex = 0;
|
|
22
|
+
pre.style = themeStyles;
|
|
23
|
+
pre.style.setProperty("--diffs-min-number-column-width-default", `${`${totalLines}`.length}ch`);
|
|
24
|
+
return pre;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
//#endregion
|
|
28
|
+
export { setPreNodeProperties };
|
|
29
|
+
//# sourceMappingURL=setWrapperNodeProps.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setWrapperNodeProps.js","names":[],"sources":["../../src/utils/setWrapperNodeProps.ts"],"sourcesContent":["import type { PrePropertiesConfig } from '../types';\n\nexport interface SetPreNodePropertiesProps extends PrePropertiesConfig {\n pre: HTMLPreElement;\n}\n\nexport function setPreNodeProperties({\n diffIndicators,\n disableBackground,\n disableLineNumbers,\n overflow,\n pre,\n split,\n themeStyles,\n themeType,\n totalLines,\n}: SetPreNodePropertiesProps): HTMLPreElement {\n if (themeType === 'system') {\n delete pre.dataset.themeType;\n } else {\n pre.dataset.themeType = themeType;\n }\n switch (diffIndicators) {\n case 'bars':\n case 'classic':\n pre.dataset.indicators = diffIndicators;\n break;\n case 'none':\n delete pre.dataset.indicators;\n break;\n }\n if (disableLineNumbers) {\n pre.dataset.disableLineNumbers = '';\n } else {\n delete pre.dataset.disableLineNumbers;\n }\n if (disableBackground) {\n delete pre.dataset.background;\n } else {\n pre.dataset.background = '';\n }\n pre.dataset.type = split ? 'split' : 'file';\n pre.dataset.overflow = overflow;\n pre.dataset.diffs = '';\n pre.tabIndex = 0;\n // Set theme color custom properties as inline styles on pre element\n pre.style = themeStyles;\n // Set CSS custom property for line number column width\n pre.style.setProperty(\n '--diffs-min-number-column-width-default',\n `${`${totalLines}`.length}ch`\n );\n return pre;\n}\n"],"mappings":";AAMA,SAAgB,qBAAqB,EACnC,gBACA,mBACA,oBACA,UACA,KACA,OACA,aACA,WACA,cAC4C;AAC5C,KAAI,cAAc,SAChB,QAAO,IAAI,QAAQ;KAEnB,KAAI,QAAQ,YAAY;AAE1B,SAAQ,gBAAR;EACE,KAAK;EACL,KAAK;AACH,OAAI,QAAQ,aAAa;AACzB;EACF,KAAK;AACH,UAAO,IAAI,QAAQ;AACnB;;AAEJ,KAAI,mBACF,KAAI,QAAQ,qBAAqB;KAEjC,QAAO,IAAI,QAAQ;AAErB,KAAI,kBACF,QAAO,IAAI,QAAQ;KAEnB,KAAI,QAAQ,aAAa;AAE3B,KAAI,QAAQ,OAAO,QAAQ,UAAU;AACrC,KAAI,QAAQ,WAAW;AACvB,KAAI,QAAQ,QAAQ;AACpB,KAAI,WAAW;AAEf,KAAI,QAAQ;AAEZ,KAAI,MAAM,YACR,2CACA,GAAG,GAAG,aAAa,OAAO,IAC3B;AACD,QAAO"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { FileContents, FileDiffMetadata, RenderDiffOptions, RenderDiffResult, RenderFileOptions, RenderFileResult, SupportedLanguages, ThemedDiffResult, ThemedFileResult } from "../types.js";
|
|
2
|
+
import { DiffRendererInstance, FileRendererInstance, WorkerInitializationRenderOptions, WorkerPoolOptions, WorkerRenderingOptions, WorkerStats } from "./types.js";
|
|
3
|
+
import { LRUMap } from "lru_map";
|
|
4
|
+
|
|
5
|
+
//#region src/worker/WorkerPoolManager.d.ts
|
|
6
|
+
interface GetCachesResult {
|
|
7
|
+
fileCache: LRUMap<string, RenderFileResult>;
|
|
8
|
+
diffCache: LRUMap<string, RenderDiffResult>;
|
|
9
|
+
}
|
|
10
|
+
interface ThemeSubscriber {
|
|
11
|
+
rerender(): void;
|
|
12
|
+
}
|
|
13
|
+
declare class WorkerPoolManager {
|
|
14
|
+
private options;
|
|
15
|
+
private highlighter;
|
|
16
|
+
private renderOptions;
|
|
17
|
+
private initialized;
|
|
18
|
+
private workers;
|
|
19
|
+
private taskQueue;
|
|
20
|
+
private pendingTasks;
|
|
21
|
+
private nextRequestId;
|
|
22
|
+
private themeSubscribers;
|
|
23
|
+
private workersFailed;
|
|
24
|
+
private instanceRequestMap;
|
|
25
|
+
private fileCache;
|
|
26
|
+
private diffCache;
|
|
27
|
+
constructor(options: WorkerPoolOptions, {
|
|
28
|
+
langs,
|
|
29
|
+
theme,
|
|
30
|
+
lineDiffType,
|
|
31
|
+
tokenizeMaxLineLength
|
|
32
|
+
}: WorkerInitializationRenderOptions);
|
|
33
|
+
isWorkingPool(): boolean;
|
|
34
|
+
getFileResultCache(file: FileContents): RenderFileResult | undefined;
|
|
35
|
+
getDiffResultCache(diff: FileDiffMetadata): RenderDiffResult | undefined;
|
|
36
|
+
inspectCaches(): GetCachesResult;
|
|
37
|
+
evictFileFromCache(cacheKey: string): boolean;
|
|
38
|
+
evictDiffFromCache(cacheKey: string): boolean;
|
|
39
|
+
setRenderOptions({
|
|
40
|
+
theme,
|
|
41
|
+
lineDiffType,
|
|
42
|
+
tokenizeMaxLineLength
|
|
43
|
+
}: Partial<WorkerRenderingOptions>): Promise<void>;
|
|
44
|
+
getFileRenderOptions(): RenderFileOptions;
|
|
45
|
+
getDiffRenderOptions(): RenderDiffOptions;
|
|
46
|
+
private setRenderOptionsOnWorkers;
|
|
47
|
+
subscribeToThemeChanges(instance: ThemeSubscriber): () => void;
|
|
48
|
+
unsubscribeToThemeChanges(instance: ThemeSubscriber): void;
|
|
49
|
+
isInitialized(): boolean;
|
|
50
|
+
initialize(languages?: SupportedLanguages[]): Promise<void>;
|
|
51
|
+
private initializeWorkers;
|
|
52
|
+
private drainQueue;
|
|
53
|
+
highlightFileAST(instance: FileRendererInstance, file: FileContents): void;
|
|
54
|
+
getPlainFileAST(file: FileContents): ThemedFileResult | undefined;
|
|
55
|
+
highlightDiffAST(instance: DiffRendererInstance, diff: FileDiffMetadata): void;
|
|
56
|
+
getPlainDiffAST(diff: FileDiffMetadata): ThemedDiffResult | undefined;
|
|
57
|
+
terminate(): void;
|
|
58
|
+
private terminateWorkers;
|
|
59
|
+
getStats(): WorkerStats;
|
|
60
|
+
private submitTask;
|
|
61
|
+
private submitTask;
|
|
62
|
+
private resolveLanguagesAndExecuteTask;
|
|
63
|
+
private handleWorkerMessage;
|
|
64
|
+
private _queuedDrain;
|
|
65
|
+
private queueDrain;
|
|
66
|
+
private executeTask;
|
|
67
|
+
private getAvailableWorker;
|
|
68
|
+
private generateRequestId;
|
|
69
|
+
}
|
|
70
|
+
//#endregion
|
|
71
|
+
export { WorkerPoolManager };
|
|
72
|
+
//# sourceMappingURL=WorkerPoolManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WorkerPoolManager.d.ts","names":["options: WorkerPoolOptions"],"sources":["../../src/worker/WorkerPoolManager.ts"],"sourcesContent":[],"mappings":";;;;;UAmDU,eAAA;aACG,eAAe;EALrB,SAIG,EAEG,MAFH,CAAA,MAAA,EAEkB,gBAFlB,CAAA;;UAYA,eAAA,CAXG;EACe,QAAA,EAAA,EAAA,IAAA;;AAAf,cAcA,iBAAA,CAdA;EAAA,QAUH,OAAA;EAIV,QAAa,WAAA;EAkBQ,QAAA,aAAA;EAEf,QAAA,WAAA;EACA,QAAA,OAAA;EACA,QAAA,SAAA;EACA,QAAA,YAAA;EACC,QAAA,aAAA;EAYoB,QAAA,gBAAA;EAAe,QAAA,aAAA;EAMf,QAAA,kBAAA;EAAmB,QAAA,SAAA;EAM3B,QAAA,SAAA;EAcf,WAAA,CAAA,OAAA,EA5CiB,iBA4CjB,EAAA;IAAA,KAAA;IAAA,KAAA;IAAA,YAAA;IAAA;EAAA,CAAA,EAtCG,iCAsCH;EACA,aAAA,CAAA,CAAA,EAAA,OAAA;EACA,kBAAA,CAAA,IAAA,EA5BuB,YA4BvB,CAAA,EA5BsC,gBA4BtC,GAAA,SAAA;EACS,kBAAA,CAAA,IAAA,EAvBc,gBAuBd,CAAA,EAvBiC,gBAuBjC,GAAA,SAAA;EAAR,aAAA,CAAA,CAAA,EAjBc,eAiBd;EAAkC,kBAAA,CAAA,QAAA,EAAA,MAAA,CAAA,EAAA,OAAA;EAoDb,kBAAA,CAAA,QAAA,EAAA,MAAA,CAAA,EAAA,OAAA;EAKA,gBAAA,CAAA;IAAA,KAAA;IAAA,YAAA;IAAA;EAAA,CAAA,EAzDrB,OAyDqB,CAzDb,sBAyDa,CAAA,CAAA,EAzDa,OAyDb,CAAA,IAAA,CAAA;EA8CU,oBAAA,CAAA,CAAA,EAnDV,iBAmDU;EAOE,oBAAA,CAAA,CAAA,EArDZ,iBAqDY;EAQR,QAAA,yBAAA;EAA4B,uBAAA,CAAA,QAAA,EAftB,eAesB,CAAA,EAAA,GAAA,GAAA,IAAA;EA8H7B,yBAAA,CAAA,QAAA,EAtIS,eAsIT,CAAA,EAAA,IAAA;EAA4B,aAAA,CAAA,CAAA,EAAA,OAAA;EAIjC,UAAA,CAAA,SAAA,CAAA,EAlIM,kBAkIN,EAAA,CAAA,EAlIkC,OAkIlC,CAAA,IAAA,CAAA;EAAe,QAAA,iBAAA;EAczB,QAAA,UAAA;EACJ,gBAAA,CAAA,QAAA,EAnBmB,oBAmBnB,EAAA,IAAA,EAnB+C,YAmB/C,CAAA,EAAA,IAAA;EAKc,eAAA,CAAA,IAAA,EApBA,YAoBA,CAAA,EApBe,gBAoBf,GAAA,SAAA;EAAmB,gBAAA,CAAA,QAAA,EAN7B,oBAM6B,EAAA,IAAA,EALjC,gBAKiC,CAAA,EAAA,IAAA;EA8B7B,eAAA,CAAA,IAAA,EA9BU,gBA8BV,CAAA,EA9B6B,gBA8B7B,GAAA,SAAA;EAAA,SAAA,CAAA,CAAA,EAAA,IAAA;;cAAA"}
|