@pierre/diffs 1.5.2 → 1.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -3
- package/dist/components/CodeView.d.ts +3 -2
- package/dist/components/CodeView.d.ts.map +1 -1
- package/dist/components/CodeView.js +24 -19
- package/dist/components/CodeView.js.map +1 -1
- package/dist/components/File.d.ts +31 -9
- package/dist/components/File.d.ts.map +1 -1
- package/dist/components/File.js +176 -90
- package/dist/components/File.js.map +1 -1
- package/dist/components/FileDiff.d.ts +32 -9
- package/dist/components/FileDiff.d.ts.map +1 -1
- package/dist/components/FileDiff.js +225 -131
- package/dist/components/FileDiff.js.map +1 -1
- package/dist/components/FileStream.d.ts +6 -4
- package/dist/components/FileStream.d.ts.map +1 -1
- package/dist/components/FileStream.js +49 -36
- package/dist/components/FileStream.js.map +1 -1
- package/dist/components/UnresolvedFile.d.ts +14 -4
- package/dist/components/UnresolvedFile.d.ts.map +1 -1
- package/dist/components/UnresolvedFile.js +35 -16
- package/dist/components/UnresolvedFile.js.map +1 -1
- package/dist/components/VirtualizedFile.d.ts +3 -2
- package/dist/components/VirtualizedFile.d.ts.map +1 -1
- package/dist/components/VirtualizedFile.js +28 -20
- package/dist/components/VirtualizedFile.js.map +1 -1
- package/dist/components/VirtualizedFileDiff.d.ts +3 -2
- package/dist/components/VirtualizedFileDiff.d.ts.map +1 -1
- package/dist/components/VirtualizedFileDiff.js +31 -24
- package/dist/components/VirtualizedFileDiff.js.map +1 -1
- package/dist/constants.d.ts +4 -2
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +3 -1
- package/dist/constants.js.map +1 -1
- package/dist/editor/editor.d.ts +2 -1
- package/dist/editor/editor.d.ts.map +1 -1
- package/dist/editor/editor.js +5 -1
- package/dist/editor/editor.js.map +1 -1
- package/dist/editor/platform.d.ts +1 -1
- package/dist/editor/platform.js +5 -4
- package/dist/editor/platform.js.map +1 -1
- package/dist/editor/selection.d.ts +2 -2
- package/dist/editor/selection.d.ts.map +1 -1
- package/dist/editor/selection.js +31 -6
- package/dist/editor/selection.js.map +1 -1
- package/dist/editor/tokenizer.d.ts +6 -4
- package/dist/editor/tokenizer.d.ts.map +1 -1
- package/dist/editor/tokenizer.js +25 -470
- package/dist/editor/tokenizer.js.map +1 -1
- package/dist/highlighter/DiffsEditorTokenizer.d.ts +16 -0
- package/dist/highlighter/DiffsEditorTokenizer.d.ts.map +1 -0
- package/dist/highlighter/DiffsEditorTokenizer.js +0 -0
- package/dist/highlighter/DiffsHighlighter.d.ts +41 -0
- package/dist/highlighter/DiffsHighlighter.d.ts.map +1 -0
- package/dist/highlighter/DiffsHighlighter.js +39 -0
- package/dist/highlighter/DiffsHighlighter.js.map +1 -0
- package/dist/highlighter/backends/highlights.d.ts +26 -0
- package/dist/highlighter/backends/highlights.d.ts.map +1 -0
- package/dist/highlighter/backends/highlights.js +71 -0
- package/dist/highlighter/backends/highlights.js.map +1 -0
- package/dist/highlighter/backends/shiki.d.ts +27 -0
- package/dist/highlighter/backends/shiki.d.ts.map +1 -0
- package/dist/highlighter/backends/shiki.js +107 -0
- package/dist/highlighter/backends/shiki.js.map +1 -0
- package/dist/highlighter/highlighterType.d.ts +13 -0
- package/dist/highlighter/highlighterType.d.ts.map +1 -0
- package/dist/highlighter/highlighterType.js +32 -0
- package/dist/highlighter/highlighterType.js.map +1 -0
- package/dist/highlighter/highlights-editor.d.ts +24 -0
- package/dist/highlighter/highlights-editor.d.ts.map +1 -0
- package/dist/highlighter/highlights-editor.js +166 -0
- package/dist/highlighter/highlights-editor.js.map +1 -0
- package/dist/highlighter/highlights-stream.d.ts +20 -0
- package/dist/highlighter/highlights-stream.d.ts.map +1 -0
- package/dist/highlighter/highlights-stream.js +93 -0
- package/dist/highlighter/highlights-stream.js.map +1 -0
- package/dist/highlighter/languages/areLanguagesAttached.d.ts +2 -1
- package/dist/highlighter/languages/areLanguagesAttached.d.ts.map +1 -1
- package/dist/highlighter/languages/areLanguagesAttached.js +4 -6
- package/dist/highlighter/languages/areLanguagesAttached.js.map +1 -1
- package/dist/highlighter/languages/attachResolvedLanguages.d.ts +6 -1
- package/dist/highlighter/languages/attachResolvedLanguages.d.ts.map +1 -1
- package/dist/highlighter/languages/attachResolvedLanguages.js +6 -11
- package/dist/highlighter/languages/attachResolvedLanguages.js.map +1 -1
- package/dist/highlighter/languages/constants.d.ts +1 -1
- package/dist/highlighter/languages/getResolvedLanguages.d.ts +1 -1
- package/dist/highlighter/languages/getResolvedOrResolveLanguage.d.ts +1 -1
- package/dist/highlighter/languages/resolveLanguage.d.ts +1 -1
- package/dist/highlighter/languages/resolveLanguage.d.ts.map +1 -1
- package/dist/highlighter/languages/resolveLanguage.js +19 -16
- package/dist/highlighter/languages/resolveLanguage.js.map +1 -1
- package/dist/highlighter/languages/resolveLanguages.d.ts +1 -1
- package/dist/highlighter/shared_highlighter.d.ts +24 -9
- package/dist/highlighter/shared_highlighter.d.ts.map +1 -1
- package/dist/highlighter/shared_highlighter.js +59 -47
- package/dist/highlighter/shared_highlighter.js.map +1 -1
- package/dist/highlighter/shiki-editor.d.ts +25 -0
- package/dist/highlighter/shiki-editor.d.ts.map +1 -0
- package/dist/highlighter/shiki-editor.js +483 -0
- package/dist/highlighter/shiki-editor.js.map +1 -0
- package/dist/highlighter/shiki-stream.d.ts +20 -0
- package/dist/highlighter/shiki-stream.d.ts.map +1 -0
- package/dist/highlighter/shiki-stream.js +60 -0
- package/dist/highlighter/shiki-stream.js.map +1 -0
- package/dist/highlighter/stream-tokenizer.d.ts +40 -0
- package/dist/highlighter/stream-tokenizer.d.ts.map +1 -0
- package/dist/highlighter/stream-tokenizer.js +70 -0
- package/dist/highlighter/stream-tokenizer.js.map +1 -0
- package/dist/highlighter/themes/areThemesAttached.d.ts +3 -2
- package/dist/highlighter/themes/areThemesAttached.d.ts.map +1 -1
- package/dist/highlighter/themes/areThemesAttached.js +5 -4
- package/dist/highlighter/themes/areThemesAttached.js.map +1 -1
- package/dist/highlighter/themes/attachResolvedThemes.d.ts +5 -2
- package/dist/highlighter/themes/attachResolvedThemes.d.ts.map +1 -1
- package/dist/highlighter/themes/attachResolvedThemes.js +4 -16
- package/dist/highlighter/themes/attachResolvedThemes.js.map +1 -1
- package/dist/highlighter/themes/cleanUpResolvedThemes.d.ts +3 -1
- package/dist/highlighter/themes/cleanUpResolvedThemes.d.ts.map +1 -1
- package/dist/highlighter/themes/cleanUpResolvedThemes.js +8 -5
- package/dist/highlighter/themes/cleanUpResolvedThemes.js.map +1 -1
- package/dist/highlighter/themes/createCSSVariablesTheme.d.ts +7 -0
- package/dist/highlighter/themes/createCSSVariablesTheme.d.ts.map +1 -0
- package/dist/highlighter/themes/createCSSVariablesTheme.js +89 -0
- package/dist/highlighter/themes/createCSSVariablesTheme.js.map +1 -0
- package/dist/highlighter/themes/createCachedLoader.d.ts +5 -0
- package/dist/highlighter/themes/createCachedLoader.d.ts.map +1 -0
- package/dist/highlighter/themes/createCachedLoader.js +15 -0
- package/dist/highlighter/themes/createCachedLoader.js.map +1 -0
- package/dist/highlighter/themes/getResolvedOrResolveTheme.d.ts +3 -2
- package/dist/highlighter/themes/getResolvedOrResolveTheme.d.ts.map +1 -1
- package/dist/highlighter/themes/getResolvedOrResolveTheme.js +4 -4
- package/dist/highlighter/themes/getResolvedOrResolveTheme.js.map +1 -1
- package/dist/highlighter/themes/getResolvedThemes.d.ts +3 -2
- package/dist/highlighter/themes/getResolvedThemes.d.ts.map +1 -1
- package/dist/highlighter/themes/getResolvedThemes.js +4 -3
- package/dist/highlighter/themes/getResolvedThemes.js.map +1 -1
- package/dist/highlighter/themes/hasResolvedThemes.d.ts +2 -2
- package/dist/highlighter/themes/hasResolvedThemes.d.ts.map +1 -1
- package/dist/highlighter/themes/hasResolvedThemes.js +4 -3
- package/dist/highlighter/themes/hasResolvedThemes.js.map +1 -1
- package/dist/highlighter/themes/registerCustomCSSVariableTheme.d.ts.map +1 -1
- package/dist/highlighter/themes/registerCustomCSSVariableTheme.js +3 -3
- package/dist/highlighter/themes/registerCustomCSSVariableTheme.js.map +1 -1
- package/dist/highlighter/themes/registerCustomTheme.d.ts +9 -4
- package/dist/highlighter/themes/registerCustomTheme.d.ts.map +1 -1
- package/dist/highlighter/themes/registerCustomTheme.js +8 -16
- package/dist/highlighter/themes/registerCustomTheme.js.map +1 -1
- package/dist/highlighter/themes/resolveTheme.d.ts +3 -2
- package/dist/highlighter/themes/resolveTheme.d.ts.map +1 -1
- package/dist/highlighter/themes/resolveTheme.js +4 -7
- package/dist/highlighter/themes/resolveTheme.js.map +1 -1
- package/dist/highlighter/themes/resolveThemes.d.ts +3 -2
- package/dist/highlighter/themes/resolveThemes.d.ts.map +1 -1
- package/dist/highlighter/themes/resolveThemes.js +4 -7
- package/dist/highlighter/themes/resolveThemes.js.map +1 -1
- package/dist/highlighter/themes/themeResolver.d.ts +10 -4
- package/dist/highlighter/themes/themeResolver.d.ts.map +1 -1
- package/dist/highlighter/themes/themeResolver.js +141 -2
- package/dist/highlighter/themes/themeResolver.js.map +1 -1
- package/dist/highlighter/themes/types.d.ts +23 -0
- package/dist/highlighter/themes/types.d.ts.map +1 -0
- package/dist/highlighter/themes/types.js +0 -0
- package/dist/highlighter/tokenizer-types.d.ts +35 -0
- package/dist/highlighter/tokenizer-types.d.ts.map +1 -0
- package/dist/highlighter/tokenizer-types.js +0 -0
- package/dist/highlighter/types.d.ts +55 -0
- package/dist/highlighter/types.d.ts.map +1 -0
- package/dist/highlighter/types.js +0 -0
- package/dist/index.d.ts +22 -13
- package/dist/index.js +21 -18
- package/dist/managers/InteractionManager.d.ts.map +1 -1
- package/dist/managers/InteractionManager.js +2 -2
- package/dist/managers/InteractionManager.js.map +1 -1
- package/dist/node_modules/.pnpm/@types_hast@3.0.4/node_modules/@types/hast/index.d.ts +9 -1
- package/dist/node_modules/.pnpm/@types_hast@3.0.4/node_modules/@types/hast/index.d.ts.map +1 -1
- package/dist/react/CodeView.d.ts +4 -3
- package/dist/react/CodeView.d.ts.map +1 -1
- package/dist/react/CodeView.js +47 -38
- package/dist/react/CodeView.js.map +1 -1
- package/dist/react/File.js +3 -3
- package/dist/react/File.js.map +1 -1
- package/dist/react/FileDiff.js +3 -3
- package/dist/react/FileDiff.js.map +1 -1
- package/dist/react/MultiFileDiff.js +2 -2
- package/dist/react/MultiFileDiff.js.map +1 -1
- package/dist/react/PatchDiff.js +3 -3
- package/dist/react/PatchDiff.js.map +1 -1
- package/dist/react/UnresolvedFile.js +2 -2
- package/dist/react/UnresolvedFile.js.map +1 -1
- package/dist/react/index.d.ts +9 -4
- package/dist/react/types.d.ts +4 -2
- package/dist/react/types.d.ts.map +1 -1
- package/dist/react/utils/renderDiffChildren.js +1 -1
- package/dist/react/utils/renderDiffChildren.js.map +1 -1
- package/dist/react/utils/renderFileChildren.js +1 -1
- package/dist/react/utils/renderFileChildren.js.map +1 -1
- package/dist/react/utils/useFileDiffInstance.d.ts +1 -0
- package/dist/react/utils/useFileDiffInstance.d.ts.map +1 -1
- package/dist/react/utils/useFileDiffInstance.js +29 -24
- package/dist/react/utils/useFileDiffInstance.js.map +1 -1
- package/dist/react/utils/useFileInstance.d.ts +2 -0
- package/dist/react/utils/useFileInstance.d.ts.map +1 -1
- package/dist/react/utils/useFileInstance.js +38 -28
- package/dist/react/utils/useFileInstance.js.map +1 -1
- package/dist/react/utils/useForceUpdate.d.ts +5 -0
- package/dist/react/utils/useForceUpdate.d.ts.map +1 -0
- package/dist/react/utils/useForceUpdate.js +27 -0
- package/dist/react/utils/useForceUpdate.js.map +1 -0
- package/dist/react/utils/useNextRenderData.d.ts +9 -0
- package/dist/react/utils/useNextRenderData.d.ts.map +1 -0
- package/dist/react/utils/useNextRenderData.js +9 -0
- package/dist/react/utils/useNextRenderData.js.map +1 -0
- package/dist/react/utils/useUnresolvedFileInstance.d.ts +1 -0
- package/dist/react/utils/useUnresolvedFileInstance.d.ts.map +1 -1
- package/dist/react/utils/useUnresolvedFileInstance.js +26 -11
- package/dist/react/utils/useUnresolvedFileInstance.js.map +1 -1
- package/dist/renderers/DiffHunksRenderer.d.ts +4 -2
- package/dist/renderers/DiffHunksRenderer.d.ts.map +1 -1
- package/dist/renderers/DiffHunksRenderer.js +82 -43
- package/dist/renderers/DiffHunksRenderer.js.map +1 -1
- package/dist/renderers/FileRenderer.d.ts +6 -2
- package/dist/renderers/FileRenderer.d.ts.map +1 -1
- package/dist/renderers/FileRenderer.js +77 -43
- package/dist/renderers/FileRenderer.js.map +1 -1
- package/dist/renderers/UnresolvedFileHunksRenderer.d.ts.map +1 -1
- package/dist/renderers/UnresolvedFileHunksRenderer.js +1 -1
- package/dist/renderers/UnresolvedFileHunksRenderer.js.map +1 -1
- package/dist/shiki-stream/index.d.ts +3 -3
- package/dist/shiki-stream/index.js +1 -2
- package/dist/shiki-stream/stream.d.ts +4 -4
- package/dist/shiki-stream/stream.d.ts.map +1 -1
- package/dist/shiki-stream/stream.js +20 -9
- package/dist/shiki-stream/stream.js.map +1 -1
- package/dist/shiki-stream/types.d.ts +7 -38
- package/dist/shiki-stream/types.d.ts.map +1 -1
- package/dist/ssr/index.d.ts +7 -2
- package/dist/ssr/renderHTML.js +2 -2
- package/dist/ssr/renderHTML.js.map +1 -1
- package/dist/style.js +1 -1
- package/dist/style.js.map +1 -1
- package/dist/types.d.ts +20 -11
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/canUseWASM.d.ts +13 -0
- package/dist/utils/canUseWASM.d.ts.map +1 -0
- package/dist/utils/canUseWASM.js +59 -0
- package/dist/utils/canUseWASM.js.map +1 -0
- package/dist/utils/createSpanNodeFromToken.d.ts +3 -2
- package/dist/utils/createSpanNodeFromToken.d.ts.map +1 -1
- package/dist/utils/createSpanNodeFromToken.js +4 -5
- package/dist/utils/createSpanNodeFromToken.js.map +1 -1
- package/dist/utils/cssWrappers.d.ts.map +1 -1
- package/dist/utils/cssWrappers.js +12 -0
- package/dist/utils/cssWrappers.js.map +1 -1
- package/dist/utils/getCodeViewItemRenderData.d.ts +10 -0
- package/dist/utils/getCodeViewItemRenderData.d.ts.map +1 -0
- package/dist/utils/getCodeViewItemRenderData.js +19 -0
- package/dist/utils/getCodeViewItemRenderData.js.map +1 -0
- package/dist/utils/getHighlighterOptions.d.ts.map +1 -1
- package/dist/utils/getHighlighterOptions.js +3 -2
- package/dist/utils/getHighlighterOptions.js.map +1 -1
- package/dist/utils/getHighlighterThemeStyles.d.ts +2 -1
- package/dist/utils/getHighlighterThemeStyles.d.ts.map +1 -1
- package/dist/utils/getHighlighterThemeStyles.js +13 -3
- package/dist/utils/getHighlighterThemeStyles.js.map +1 -1
- package/dist/utils/getTokenOptions.d.ts +7 -0
- package/dist/utils/getTokenOptions.d.ts.map +1 -0
- package/dist/utils/getTokenOptions.js +16 -0
- package/dist/utils/getTokenOptions.js.map +1 -0
- package/dist/utils/hastToHtml.d.ts +10 -0
- package/dist/utils/hastToHtml.d.ts.map +1 -0
- package/dist/utils/hastToHtml.js +125 -0
- package/dist/utils/hastToHtml.js.map +1 -0
- package/dist/utils/hydratePartialDiff.js +4 -0
- package/dist/utils/hydratePartialDiff.js.map +1 -1
- package/dist/utils/parseDiffDecorations.d.ts +2 -1
- package/dist/utils/parseDiffDecorations.d.ts.map +1 -1
- package/dist/utils/parseMergeConflictDiffFromFile.d.ts.map +1 -1
- package/dist/utils/parseMergeConflictDiffFromFile.js +2 -0
- package/dist/utils/parseMergeConflictDiffFromFile.js.map +1 -1
- package/dist/utils/parsePatchFiles.d.ts.map +1 -1
- package/dist/utils/parsePatchFiles.js +24 -4
- package/dist/utils/parsePatchFiles.js.map +1 -1
- package/dist/utils/renderDiffWithHighlighter.d.ts +3 -2
- package/dist/utils/renderDiffWithHighlighter.d.ts.map +1 -1
- package/dist/utils/renderDiffWithHighlighter.js +33 -48
- package/dist/utils/renderDiffWithHighlighter.js.map +1 -1
- package/dist/utils/renderFileWithHighlighter.d.ts +3 -2
- package/dist/utils/renderFileWithHighlighter.d.ts.map +1 -1
- package/dist/utils/renderFileWithHighlighter.js +10 -26
- package/dist/utils/renderFileWithHighlighter.js.map +1 -1
- package/dist/utils/renderTokenLines.d.ts +22 -0
- package/dist/utils/renderTokenLines.d.ts.map +1 -0
- package/dist/utils/renderTokenLines.js +250 -0
- package/dist/utils/renderTokenLines.js.map +1 -0
- package/dist/utils/resolvePreferredHighlighter.d.ts +13 -0
- package/dist/utils/resolvePreferredHighlighter.d.ts.map +1 -0
- package/dist/utils/resolvePreferredHighlighter.js +11 -0
- package/dist/utils/resolvePreferredHighlighter.js.map +1 -0
- package/dist/utils/resolveRegion.js +20 -10
- package/dist/utils/resolveRegion.js.map +1 -1
- package/dist/utils/setDeferredArrayItem.d.ts +5 -0
- package/dist/utils/setDeferredArrayItem.d.ts.map +1 -0
- package/dist/utils/setDeferredArrayItem.js +39 -0
- package/dist/utils/setDeferredArrayItem.js.map +1 -0
- package/dist/utils/tokenStyle.d.ts +11 -0
- package/dist/utils/tokenStyle.d.ts.map +1 -0
- package/dist/utils/tokenStyle.js +32 -0
- package/dist/utils/tokenStyle.js.map +1 -0
- package/dist/utils/tokensToHtml.d.ts +11 -0
- package/dist/utils/tokensToHtml.d.ts.map +1 -0
- package/dist/utils/tokensToHtml.js +48 -0
- package/dist/utils/tokensToHtml.js.map +1 -0
- package/dist/utils/updateDiffHunks.d.ts +2 -2
- package/dist/utils/updateDiffHunks.d.ts.map +1 -1
- package/dist/utils/updateDiffHunks.js +7 -3
- package/dist/utils/updateDiffHunks.js.map +1 -1
- package/dist/utils/wrapTokenFragments.js.map +1 -1
- package/dist/worker/WorkerPoolManager.d.ts +14 -2
- package/dist/worker/WorkerPoolManager.d.ts.map +1 -1
- package/dist/worker/WorkerPoolManager.js +155 -67
- package/dist/worker/WorkerPoolManager.js.map +1 -1
- package/dist/worker/hastLinesTransport.d.ts +14 -0
- package/dist/worker/hastLinesTransport.d.ts.map +1 -0
- package/dist/worker/hastLinesTransport.js +156 -0
- package/dist/worker/hastLinesTransport.js.map +1 -0
- package/dist/worker/highlights-CpZm9DAR.js +317 -0
- package/dist/worker/highlights-CpZm9DAR.js.map +1 -0
- package/dist/worker/index.d.ts +1 -1
- package/dist/worker/shiki-Ci4cdHsM.js +697 -0
- package/dist/worker/shiki-Ci4cdHsM.js.map +1 -0
- package/dist/worker/stream-tokenizer-DK9xp5M5.js +427 -0
- package/dist/worker/stream-tokenizer-DK9xp5M5.js.map +1 -0
- package/dist/worker/types.d.ts +16 -3
- package/dist/worker/types.d.ts.map +1 -1
- package/dist/worker/worker-portable.js +41 -13337
- package/dist/worker/worker-portable.js.map +1 -1
- package/dist/worker/worker.js +681 -349
- package/dist/worker/worker.js.map +1 -1
- package/dist/worker/workerMessage.d.ts +24 -0
- package/dist/worker/workerMessage.d.ts.map +1 -0
- package/dist/worker/workerMessage.js +0 -0
- package/package.json +5 -3
- package/dist/highlighter/themes/constants.d.ts +0 -5
- package/dist/highlighter/themes/constants.d.ts.map +0 -1
- package/dist/highlighter/themes/constants.js +0 -6
- package/dist/highlighter/themes/constants.js.map +0 -1
- package/dist/highlighter/themes/themeResolution.d.ts +0 -7
- package/dist/highlighter/themes/themeResolution.d.ts.map +0 -1
- package/dist/highlighter/themes/themeResolution.js +0 -21
- package/dist/highlighter/themes/themeResolution.js.map +0 -1
- package/dist/shiki-stream/tokenizer.d.ts +0 -23
- package/dist/shiki-stream/tokenizer.d.ts.map +0 -1
- package/dist/shiki-stream/tokenizer.js +0 -72
- package/dist/shiki-stream/tokenizer.js.map +0 -1
- package/dist/utils/createTransformerWithState.d.ts +0 -12
- package/dist/utils/createTransformerWithState.d.ts.map +0 -1
- package/dist/utils/createTransformerWithState.js +0 -89
- package/dist/utils/createTransformerWithState.js.map +0 -1
- package/dist/worker/wasm-B9ZqxnKj.js +0 -8
- package/dist/worker/wasm-B9ZqxnKj.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wrapTokenFragments.js","names":[],"sources":["../../src/utils/wrapTokenFragments.ts"],"sourcesContent":["import type { ElementContent, Element as HASTElement } from 'hast';\n\nimport { createHastElement } from './hast_utils';\n\nconst NO_TOKEN: unique symbol = Symbol('no-token');\nconst MULTIPLE_TOKENS: unique symbol = Symbol('multiple-tokens');\n\ntype TokenFragmentState = number | typeof NO_TOKEN | typeof MULTIPLE_TOKENS;\n\n// Walk a rendered line and add a single outer token wrapper around all\n// fragments that still belong to the same original
|
|
1
|
+
{"version":3,"file":"wrapTokenFragments.js","names":[],"sources":["../../src/utils/wrapTokenFragments.ts"],"sourcesContent":["import type { ElementContent, Element as HASTElement } from 'hast';\n\nimport { createHastElement } from './hast_utils';\n\nconst NO_TOKEN: unique symbol = Symbol('no-token');\nconst MULTIPLE_TOKENS: unique symbol = Symbol('multiple-tokens');\n\ntype TokenFragmentState = number | typeof NO_TOKEN | typeof MULTIPLE_TOKENS;\n\n// Walk a rendered line and add a single outer token wrapper around all\n// fragments that still belong to the same original syntax token.\nexport function wrapTokenFragments(container: HASTElement): TokenFragmentState {\n const ownTokenChar = getTokenChar(container);\n if (ownTokenChar != null) {\n return ownTokenChar;\n }\n\n let containerTokenState: TokenFragmentState = NO_TOKEN;\n const wrappedChildren: ElementContent[] = [];\n let currentTokenChildren: ElementContent[] = [];\n let currentTokenChar: number | undefined;\n\n const flushTokenChildren = () => {\n if (currentTokenChildren.length === 0 || currentTokenChar == null) {\n currentTokenChildren = [];\n currentTokenChar = undefined;\n return;\n }\n\n if (currentTokenChildren.length === 1) {\n const child = currentTokenChildren[0];\n if (child?.type === 'element') {\n setTokenChar(child, currentTokenChar);\n for (const grandChild of child.children) {\n stripTokenChar(grandChild);\n }\n } else {\n stripTokenChar(child);\n }\n wrappedChildren.push(child);\n currentTokenChildren = [];\n currentTokenChar = undefined;\n return;\n }\n\n for (const child of currentTokenChildren) {\n stripTokenChar(child);\n }\n\n wrappedChildren.push(\n createHastElement({\n tagName: 'span',\n properties: { 'data-char': currentTokenChar },\n children: currentTokenChildren,\n })\n );\n\n currentTokenChildren = [];\n currentTokenChar = undefined;\n };\n\n const mergeContainerTokenState = (childTokenState: TokenFragmentState) => {\n if (childTokenState === NO_TOKEN) {\n return;\n }\n if (childTokenState === MULTIPLE_TOKENS) {\n containerTokenState = MULTIPLE_TOKENS;\n return;\n }\n if (containerTokenState === NO_TOKEN) {\n containerTokenState = childTokenState;\n return;\n }\n if (containerTokenState !== childTokenState) {\n containerTokenState = MULTIPLE_TOKENS;\n }\n };\n\n for (const child of container.children) {\n const childTokenState: TokenFragmentState =\n child.type === 'element' ? wrapTokenFragments(child) : NO_TOKEN;\n mergeContainerTokenState(childTokenState);\n\n if (typeof childTokenState !== 'number') {\n flushTokenChildren();\n wrappedChildren.push(child);\n continue;\n }\n\n if (currentTokenChar != null && currentTokenChar !== childTokenState) {\n flushTokenChildren();\n }\n\n currentTokenChar ??= childTokenState;\n currentTokenChildren.push(child);\n }\n\n flushTokenChildren();\n container.children = wrappedChildren;\n return containerTokenState;\n}\n\nfunction getTokenChar(node: HASTElement): number | undefined {\n const value = node.properties['data-char'];\n if (typeof value === 'number') {\n return value;\n }\n return undefined;\n}\n\nfunction stripTokenChar(node: ElementContent): void {\n if (node.type !== 'element') return;\n node.properties['data-char'] = undefined;\n for (const child of node.children) {\n stripTokenChar(child);\n }\n}\n\nfunction setTokenChar(node: HASTElement, char: number): void {\n node.properties['data-char'] = char;\n}\n"],"mappings":";;AAIA,MAAM,WAA0B,OAAO,UAAU;AACjD,MAAM,kBAAiC,OAAO,iBAAiB;AAM/D,SAAgB,mBAAmB,WAA4C;CAC7E,MAAM,eAAe,aAAa,SAAS;CAC3C,IAAI,gBAAgB,MAClB,OAAO;CAGT,IAAI,sBAA0C;CAC9C,MAAM,kBAAoC,CAAC;CAC3C,IAAI,uBAAyC,CAAC;CAC9C,IAAI;CAEJ,MAAM,2BAA2B;EAC/B,IAAI,qBAAqB,WAAW,KAAK,oBAAoB,MAAM;GACjE,uBAAuB,CAAC;GACxB,mBAAmB,KAAA;GACnB;EACF;EAEA,IAAI,qBAAqB,WAAW,GAAG;GACrC,MAAM,QAAQ,qBAAqB;GACnC,IAAI,OAAO,SAAS,WAAW;IAC7B,aAAa,OAAO,gBAAgB;IACpC,KAAK,MAAM,cAAc,MAAM,UAC7B,eAAe,UAAU;GAE7B,OACE,eAAe,KAAK;GAEtB,gBAAgB,KAAK,KAAK;GAC1B,uBAAuB,CAAC;GACxB,mBAAmB,KAAA;GACnB;EACF;EAEA,KAAK,MAAM,SAAS,sBAClB,eAAe,KAAK;EAGtB,gBAAgB,KACd,kBAAkB;GAChB,SAAS;GACT,YAAY,EAAE,aAAa,iBAAiB;GAC5C,UAAU;EACZ,CAAC,CACH;EAEA,uBAAuB,CAAC;EACxB,mBAAmB,KAAA;CACrB;CAEA,MAAM,4BAA4B,oBAAwC;EACxE,IAAI,oBAAoB,UACtB;EAEF,IAAI,oBAAoB,iBAAiB;GACvC,sBAAsB;GACtB;EACF;EACA,IAAI,wBAAwB,UAAU;GACpC,sBAAsB;GACtB;EACF;EACA,IAAI,wBAAwB,iBAC1B,sBAAsB;CAE1B;CAEA,KAAK,MAAM,SAAS,UAAU,UAAU;EACtC,MAAM,kBACJ,MAAM,SAAS,YAAY,mBAAmB,KAAK,IAAI;EACzD,yBAAyB,eAAe;EAExC,IAAI,OAAO,oBAAoB,UAAU;GACvC,mBAAmB;GACnB,gBAAgB,KAAK,KAAK;GAC1B;EACF;EAEA,IAAI,oBAAoB,QAAQ,qBAAqB,iBACnD,mBAAmB;EAGrB,qBAAqB;EACrB,qBAAqB,KAAK,KAAK;CACjC;CAEA,mBAAmB;CACnB,UAAU,WAAW;CACrB,OAAO;AACT;AAEA,SAAS,aAAa,MAAuC;CAC3D,MAAM,QAAQ,KAAK,WAAW;CAC9B,IAAI,OAAO,UAAU,UACnB,OAAO;AAGX;AAEA,SAAS,eAAe,MAA4B;CAClD,IAAI,KAAK,SAAS,WAAW;CAC7B,KAAK,WAAW,eAAe,KAAA;CAC/B,KAAK,MAAM,SAAS,KAAK,UACvB,eAAe,KAAK;AAExB;AAEA,SAAS,aAAa,MAAmB,MAAoB;CAC3D,KAAK,WAAW,eAAe;AACjC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { FileContents, FileDiffMetadata, HighlighterTypes, HunkExpansionRegion, RenderDiffOptions, RenderDiffResult, RenderFileOptions, RenderFileResult, SupportedLanguages, ThemedDiffResult, ThemedFileResult } from "../types.js";
|
|
2
1
|
import { DiffRendererInstance, FileRendererInstance, WorkerInitializationRenderOptions, WorkerPoolOptions, WorkerRenderingOptions, WorkerStats } from "./types.js";
|
|
2
|
+
import { FileContents, FileDiffMetadata, HighlighterTypes, HunkExpansionRegion, RenderDiffOptions, RenderDiffResult, RenderFileOptions, RenderFileResult, SupportedLanguages, ThemedDiffResult, ThemedFileResult } from "../types.js";
|
|
3
3
|
import { LRUMap } from "lru_map";
|
|
4
4
|
//#region src/worker/WorkerPoolManager.d.ts
|
|
5
5
|
interface GetCachesResult {
|
|
@@ -12,7 +12,6 @@ interface ThemeSubscriber {
|
|
|
12
12
|
type RenderTaskInstance = FileRendererInstance | DiffRendererInstance;
|
|
13
13
|
declare class WorkerPoolManager {
|
|
14
14
|
private options;
|
|
15
|
-
private highlighter;
|
|
16
15
|
private readonly preferredHighlighter;
|
|
17
16
|
private renderOptions;
|
|
18
17
|
private renderOptionsRequestVersion;
|
|
@@ -27,6 +26,7 @@ declare class WorkerPoolManager {
|
|
|
27
26
|
private nextRequestId;
|
|
28
27
|
private themeSubscribers;
|
|
29
28
|
private workersFailed;
|
|
29
|
+
private terminated;
|
|
30
30
|
private statSubscribers;
|
|
31
31
|
private fileCache;
|
|
32
32
|
private diffCache;
|
|
@@ -34,8 +34,16 @@ declare class WorkerPoolManager {
|
|
|
34
34
|
private lifecycleGeneration;
|
|
35
35
|
constructor(options: WorkerPoolOptions, { langs, theme, useTokenTransformer, lineDiffType, maxLineDiffLength, tokenizeMaxLineLength, preferredHighlighter }: WorkerInitializationRenderOptions);
|
|
36
36
|
isWorkingPool(): boolean;
|
|
37
|
+
/**
|
|
38
|
+
* Whether a file or diff fits within `mainThreadMaxCharacters`, so it
|
|
39
|
+
* highlights on the main thread instead of a worker. Files count `contents`;
|
|
40
|
+
* diffs count both sides.
|
|
41
|
+
*/
|
|
42
|
+
shouldHighlightOnMainThread(fileOrDiff: FileContents | FileDiffMetadata): boolean;
|
|
37
43
|
getFileResultCache(file: FileContents): RenderFileResult | undefined;
|
|
38
44
|
getDiffResultCache(diff: FileDiffMetadata): RenderDiffResult | undefined;
|
|
45
|
+
setFileResultCache(cacheKey: string | undefined, { result, options }: RenderFileResult): boolean;
|
|
46
|
+
setDiffResultCache(cacheKey: string | undefined, { result, options }: RenderDiffResult): boolean;
|
|
39
47
|
inspectCaches(): GetCachesResult;
|
|
40
48
|
evictFileFromCache(cacheKey: string): boolean;
|
|
41
49
|
evictDiffFromCache(cacheKey: string): boolean;
|
|
@@ -52,6 +60,7 @@ declare class WorkerPoolManager {
|
|
|
52
60
|
cleanUpTasks(instance: RenderTaskInstance): void;
|
|
53
61
|
isInitialized(): boolean;
|
|
54
62
|
initialize(languages?: SupportedLanguages[]): Promise<void>;
|
|
63
|
+
private loadSharedHighlighter;
|
|
55
64
|
private initializeWorkers;
|
|
56
65
|
/**
|
|
57
66
|
* Pass worker errors to onWorkerError, or log them if no callback is set.
|
|
@@ -65,10 +74,13 @@ declare class WorkerPoolManager {
|
|
|
65
74
|
private drainQueue;
|
|
66
75
|
highlightFileAST(instance: FileRendererInstance, file: FileContents): void;
|
|
67
76
|
primeFileHighlightCache(file: FileContents): Promise<void>;
|
|
77
|
+
private shouldPrimeFileHighlightCache;
|
|
68
78
|
private getOrCreateFileHighlightCacheTask;
|
|
69
79
|
getPlainFileAST(file: FileContents, startingLine: number, totalLines: number, lines?: string[]): ThemedFileResult | undefined;
|
|
70
80
|
highlightDiffAST(instance: DiffRendererInstance, diff: FileDiffMetadata): void;
|
|
71
81
|
primeDiffHighlightCache(diff: FileDiffMetadata): Promise<void>;
|
|
82
|
+
private shouldPrimeDiffHighlightCache;
|
|
83
|
+
private primeHighlightCacheOnMainThread;
|
|
72
84
|
private getOrCreateDiffHighlightCacheTask;
|
|
73
85
|
getPlainDiffAST(diff: FileDiffMetadata, startingLine: number, totalLines: number, expandedHunks?: Map<number, HunkExpansionRegion> | true, collapsedContextThreshold?: number): ThemedDiffResult | undefined;
|
|
74
86
|
terminate(): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WorkerPoolManager.d.ts","names":[],"sources":["../../src/worker/WorkerPoolManager.ts"],"mappings":";;;;
|
|
1
|
+
{"version":3,"file":"WorkerPoolManager.d.ts","names":[],"sources":["../../src/worker/WorkerPoolManager.ts"],"mappings":";;;;UAmFU;EACR,WAAW,eAAe;EAC1B,WAAW,eAAe;;UAYlB;EACR;;KAKG,qBAAqB,uBAAuB;cAEpC;UAkCD;mBAjCO;UACT;UACA;UACA;UACA;UACA;UAEA;UACA;UAIA;UAGA;UACA;UAKA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UAEA;EAER,YACU,SAAS,qBAEf,OACA,OACA,qBACA,cACA,mBACA,uBACA,wBACC;EAeE;;;;;;EASA,4BACL,YAAY,eAAe;EAUtB,mBAAmB,MAAM,eAAe;EAMxC,mBACL,MAAM,mBACL;EAQI,mBACL,gCACE,QAAQ,WAAW;EAehB,mBACL,gCACE,QAAQ,WAAW;EAahB,iBAAiB;EAKjB,mBAAmB;EAQnB,mBAAmB;EAQpB,mBACJ,OACA,qBACA,cACA,mBACA,yBACC,QAAQ,0BAA0B;EAmF9B,2BAA2B;EAI3B,wBAAwB;EAMxB,wBAAwB;UAIjB;EA6CP,wBAAwB,UAAU;EASlC,0BAA0B,UAAU;EAKpC,uBACL,WAAW,OAAO;UASZ;UAKA;EAWD,aAAa,UAAU;EAkBvB;EAIM,WAAW,YAAW,uBAA4B;UAwFjD;UAiBA;;;;;;;;;UAgGN;UA8BA;EA2BD,iBACL,UAAU,sBACV,MAAM;EAqBD,wBAAwB,MAAM,eAAe;UAgC5C;UAkBA;EA2BD,gBACL,MAAM,cACN,sBACA,oBACA,mBACC;EAgBI,iBACL,UAAU,sBACV,MAAM;EAqBD,wBAAwB,MAAM,mBAAmB;UAgChD;UAuBA;UA0BA;EA2BD,gBACL,MAAM,kBACN,sBACA,oBACA,gBAAgB,YAAY,6BAC5B,qCACC;EAiBI;UAqBC;UAIA;UAUA;UAWA;EAOD,YAAY;UAwBX;UA+DA;UA0CA;UAcM;UA0DN;UAsHA;UACA;UAMA;UAYA;UAqBA;UAmCA;UAeA;UAUA;UA8BA;UAOA;UAOA;UAWA;UASA;UAgBA;UAeA;UAWA;UAUA;UAOA;UAMA;UAOA;UAOA;UAkBA;UAQA;UASA;UAMA;UAQA;UAYA;UAYA;UAQA;UAiBA;UAiBA;UAKA;UAIC;UAWD"}
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import { DEFAULT_THEMES } from "../constants.js";
|
|
2
|
-
import {
|
|
2
|
+
import { HighlighterDisposedError, resolveHighlighterType } from "../highlighter/highlighterType.js";
|
|
3
3
|
import { getThemes } from "../utils/getThemes.js";
|
|
4
|
-
import {
|
|
5
|
-
import { getSharedHighlighter } from "../highlighter/shared_highlighter.js";
|
|
4
|
+
import { getHighlighterIfLoaded, getSharedHighlighter } from "../highlighter/shared_highlighter.js";
|
|
6
5
|
import { areThemesEqual } from "../utils/areThemesEqual.js";
|
|
7
|
-
import {
|
|
6
|
+
import { areLanguagesAttached } from "../highlighter/languages/areLanguagesAttached.js";
|
|
8
7
|
import { areFileRenderOptionsEqual } from "../utils/areFileRenderOptionsEqual.js";
|
|
9
8
|
import { getCustomExtensionsMap, getCustomExtensionsVersion, getFiletypeFromFileName } from "../utils/getFiletypeFromFileName.js";
|
|
10
9
|
import { isFilePlainText } from "../utils/isFilePlainText.js";
|
|
@@ -19,14 +18,15 @@ import { getResolvedLanguages } from "../highlighter/languages/getResolvedLangua
|
|
|
19
18
|
import { hasResolvedLanguages } from "../highlighter/languages/hasResolvedLanguages.js";
|
|
20
19
|
import { resolveLanguages } from "../highlighter/languages/resolveLanguages.js";
|
|
21
20
|
import { getResolvedThemes } from "../highlighter/themes/getResolvedThemes.js";
|
|
21
|
+
import { hasResolvedThemes } from "../highlighter/themes/hasResolvedThemes.js";
|
|
22
22
|
import { resolveThemes } from "../highlighter/themes/resolveThemes.js";
|
|
23
|
+
import { decodeHastLines } from "./hastLinesTransport.js";
|
|
23
24
|
import LRUMapPkg from "lru_map";
|
|
24
25
|
//#region src/worker/WorkerPoolManager.ts
|
|
25
26
|
const IGNORE_RESPONSE = Symbol("IGNORE_RESPONSE");
|
|
26
27
|
const DEFAULT_WORKER_INITIALIZATION_TIMEOUT = 1e4;
|
|
27
28
|
var WorkerPoolManager = class {
|
|
28
29
|
options;
|
|
29
|
-
highlighter;
|
|
30
30
|
preferredHighlighter;
|
|
31
31
|
renderOptions;
|
|
32
32
|
renderOptionsRequestVersion = 0;
|
|
@@ -41,14 +41,15 @@ var WorkerPoolManager = class {
|
|
|
41
41
|
nextRequestId = 0;
|
|
42
42
|
themeSubscribers = /* @__PURE__ */ new Set();
|
|
43
43
|
workersFailed = false;
|
|
44
|
+
terminated = false;
|
|
44
45
|
statSubscribers = /* @__PURE__ */ new Set();
|
|
45
46
|
fileCache;
|
|
46
47
|
diffCache;
|
|
47
48
|
_queuedBroadcast;
|
|
48
49
|
lifecycleGeneration = 0;
|
|
49
|
-
constructor(options, { langs, theme = DEFAULT_THEMES, useTokenTransformer = false, lineDiffType = "word-alt", maxLineDiffLength = 1e3, tokenizeMaxLineLength = 1e3, preferredHighlighter
|
|
50
|
+
constructor(options, { langs, theme = DEFAULT_THEMES, useTokenTransformer = false, lineDiffType = "word-alt", maxLineDiffLength = 1e3, tokenizeMaxLineLength = 1e3, preferredHighlighter }) {
|
|
50
51
|
this.options = options;
|
|
51
|
-
this.preferredHighlighter = preferredHighlighter;
|
|
52
|
+
this.preferredHighlighter = resolveHighlighterType(preferredHighlighter);
|
|
52
53
|
this.renderOptions = {
|
|
53
54
|
theme,
|
|
54
55
|
useTokenTransformer,
|
|
@@ -61,7 +62,16 @@ var WorkerPoolManager = class {
|
|
|
61
62
|
this.queueInitialization(langs);
|
|
62
63
|
}
|
|
63
64
|
isWorkingPool() {
|
|
64
|
-
return !this.workersFailed;
|
|
65
|
+
return !this.workersFailed && !this.terminated;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Whether a file or diff fits within `mainThreadMaxCharacters`, so it
|
|
69
|
+
* highlights on the main thread instead of a worker. Files count `contents`;
|
|
70
|
+
* diffs count both sides.
|
|
71
|
+
*/
|
|
72
|
+
shouldHighlightOnMainThread(fileOrDiff) {
|
|
73
|
+
const { mainThreadMaxCharacters = -1 } = this.options;
|
|
74
|
+
return ("contents" in fileOrDiff ? fileOrDiff.contents.length : fileOrDiff.deletionCharacterCount + fileOrDiff.additionCharacterCount) <= mainThreadMaxCharacters;
|
|
65
75
|
}
|
|
66
76
|
getFileResultCache(file) {
|
|
67
77
|
return file.cacheKey != null ? this.fileCache.get(file.cacheKey) : void 0;
|
|
@@ -69,6 +79,24 @@ var WorkerPoolManager = class {
|
|
|
69
79
|
getDiffResultCache(diff) {
|
|
70
80
|
return diff.cacheKey != null ? this.diffCache.get(diff.cacheKey) : void 0;
|
|
71
81
|
}
|
|
82
|
+
setFileResultCache(cacheKey, { result, options }) {
|
|
83
|
+
if (cacheKey == null || !areFileRenderOptionsEqual(options, this.getFileRenderOptions())) return false;
|
|
84
|
+
this.fileCache.set(cacheKey, {
|
|
85
|
+
result,
|
|
86
|
+
options
|
|
87
|
+
});
|
|
88
|
+
this.queueBroadcastStateChanges();
|
|
89
|
+
return true;
|
|
90
|
+
}
|
|
91
|
+
setDiffResultCache(cacheKey, { result, options }) {
|
|
92
|
+
if (cacheKey == null || !areDiffRenderOptionsEqual(options, this.getDiffRenderOptions())) return false;
|
|
93
|
+
this.diffCache.set(cacheKey, {
|
|
94
|
+
result,
|
|
95
|
+
options
|
|
96
|
+
});
|
|
97
|
+
this.queueBroadcastStateChanges();
|
|
98
|
+
return true;
|
|
99
|
+
}
|
|
72
100
|
inspectCaches() {
|
|
73
101
|
const { fileCache, diffCache } = this;
|
|
74
102
|
return {
|
|
@@ -102,24 +130,19 @@ var WorkerPoolManager = class {
|
|
|
102
130
|
maxLineDiffLength,
|
|
103
131
|
tokenizeMaxLineLength
|
|
104
132
|
};
|
|
105
|
-
if (!this.isInitialized())
|
|
133
|
+
if (!this.isInitialized()) try {
|
|
134
|
+
await this.initialize();
|
|
135
|
+
} catch (error) {
|
|
136
|
+
if (!this.workersFailed) throw error;
|
|
137
|
+
}
|
|
106
138
|
if (!isCurrentRequest() || areDiffRenderOptionsEqual(newRenderOptions, this.renderOptions)) return;
|
|
107
139
|
const themeNames = getThemes(theme);
|
|
108
140
|
let resolvedThemes = [];
|
|
109
|
-
if (!areThemesEqual(newRenderOptions.theme, this.renderOptions.theme))
|
|
110
|
-
if (hasResolvedThemes(themeNames)) resolvedThemes = getResolvedThemes(themeNames);
|
|
111
|
-
else resolvedThemes = await resolveThemes(themeNames);
|
|
112
|
-
}
|
|
141
|
+
if (!areThemesEqual(newRenderOptions.theme, this.renderOptions.theme)) resolvedThemes = hasResolvedThemes(themeNames, this.preferredHighlighter) ? getResolvedThemes(themeNames, this.preferredHighlighter) : await resolveThemes(themeNames, this.preferredHighlighter);
|
|
113
142
|
if (!isCurrentRequest()) return;
|
|
114
|
-
if (
|
|
115
|
-
|
|
116
|
-
const highlighter = await getSharedHighlighter({
|
|
117
|
-
themes: themeNames,
|
|
118
|
-
langs: ["text"],
|
|
119
|
-
preferredHighlighter: this.preferredHighlighter
|
|
120
|
-
});
|
|
143
|
+
if (getHighlighterIfLoaded({ theme }) == null) {
|
|
144
|
+
await this.loadSharedHighlighter(themeNames, ["text"]);
|
|
121
145
|
if (!isCurrentRequest()) return;
|
|
122
|
-
this.highlighter = highlighter;
|
|
123
146
|
}
|
|
124
147
|
const workerSetup = this.setRenderOptionsOnWorkers(newRenderOptions, resolvedThemes);
|
|
125
148
|
this.renderOptions = newRenderOptions;
|
|
@@ -227,41 +250,34 @@ var WorkerPoolManager = class {
|
|
|
227
250
|
return this.initialized === true;
|
|
228
251
|
}
|
|
229
252
|
async initialize(languages = []) {
|
|
230
|
-
if (this.initialized === true)
|
|
231
|
-
|
|
253
|
+
if (this.initialized === true) {
|
|
254
|
+
if (getHighlighterIfLoaded({ theme: this.renderOptions.theme }) == null) await this.loadSharedHighlighter(getThemes(this.renderOptions.theme), ["text", ...languages]);
|
|
255
|
+
return;
|
|
256
|
+
} else if (this.initialized === false) {
|
|
257
|
+
this.terminated = false;
|
|
232
258
|
const { lifecycleGeneration } = this;
|
|
233
259
|
const initialization = new Promise((resolve, reject) => {
|
|
234
260
|
(async () => {
|
|
235
261
|
try {
|
|
236
262
|
const themes = getThemes(this.renderOptions.theme);
|
|
237
|
-
|
|
238
|
-
if (hasResolvedThemes(themes)) resolvedThemes = getResolvedThemes(themes);
|
|
239
|
-
else resolvedThemes = await resolveThemes(themes);
|
|
263
|
+
const resolvedThemes = hasResolvedThemes(themes, this.preferredHighlighter) ? getResolvedThemes(themes, this.preferredHighlighter) : await resolveThemes(themes, this.preferredHighlighter);
|
|
240
264
|
if (!this.isCurrentLifecycle(lifecycleGeneration)) {
|
|
241
265
|
resolve();
|
|
242
266
|
return;
|
|
243
267
|
}
|
|
244
268
|
let resolvedLanguages = [];
|
|
245
|
-
if (hasResolvedLanguages(languages))
|
|
246
|
-
else resolvedLanguages = await resolveLanguages(languages);
|
|
269
|
+
if (this.preferredHighlighter !== "highlights") resolvedLanguages = hasResolvedLanguages(languages) ? getResolvedLanguages(languages) : await resolveLanguages(languages);
|
|
247
270
|
if (!this.isCurrentLifecycle(lifecycleGeneration)) {
|
|
248
271
|
resolve();
|
|
249
272
|
return;
|
|
250
273
|
}
|
|
251
|
-
|
|
252
|
-
themes,
|
|
253
|
-
langs: ["text", ...languages],
|
|
254
|
-
preferredHighlighter: this.preferredHighlighter
|
|
255
|
-
}), this.initializeWorkers(resolvedThemes, resolvedLanguages)]);
|
|
274
|
+
await Promise.all([this.loadSharedHighlighter(themes, ["text", ...languages]), this.initializeWorkers(resolvedThemes, resolvedLanguages)]);
|
|
256
275
|
if (!this.isCurrentLifecycle(lifecycleGeneration)) {
|
|
257
276
|
this.terminateWorkers();
|
|
258
277
|
resolve();
|
|
259
278
|
return;
|
|
260
279
|
}
|
|
261
|
-
this.highlighter = highlighter;
|
|
262
280
|
this.initialized = true;
|
|
263
|
-
this.diffCache.clear();
|
|
264
|
-
this.fileCache.clear();
|
|
265
281
|
this.drainQueue();
|
|
266
282
|
this.queueBroadcastStateChanges();
|
|
267
283
|
resolve();
|
|
@@ -286,6 +302,17 @@ var WorkerPoolManager = class {
|
|
|
286
302
|
return initialization;
|
|
287
303
|
} else return this.initialized;
|
|
288
304
|
}
|
|
305
|
+
async loadSharedHighlighter(themes, langs) {
|
|
306
|
+
try {
|
|
307
|
+
await getSharedHighlighter({
|
|
308
|
+
themes,
|
|
309
|
+
langs,
|
|
310
|
+
preferredHighlighter: this.preferredHighlighter
|
|
311
|
+
});
|
|
312
|
+
} catch (error) {
|
|
313
|
+
if (!(error instanceof HighlighterDisposedError)) throw error;
|
|
314
|
+
}
|
|
315
|
+
}
|
|
289
316
|
async initializeWorkers(resolvedThemes, resolvedLanguages) {
|
|
290
317
|
this.workersFailed = false;
|
|
291
318
|
const initPromises = [];
|
|
@@ -314,6 +341,7 @@ var WorkerPoolManager = class {
|
|
|
314
341
|
id,
|
|
315
342
|
request: {
|
|
316
343
|
type: "initialize",
|
|
344
|
+
resultFormat: "hast-ops-v1",
|
|
317
345
|
id,
|
|
318
346
|
renderOptions: this.renderOptions,
|
|
319
347
|
preferredHighlighter: this.preferredHighlighter,
|
|
@@ -380,7 +408,7 @@ var WorkerPoolManager = class {
|
|
|
380
408
|
i++;
|
|
381
409
|
continue;
|
|
382
410
|
}
|
|
383
|
-
const langs =
|
|
411
|
+
const langs = getLangsFromRequest(task.request);
|
|
384
412
|
const availableWorker = this.getAvailableWorker(langs);
|
|
385
413
|
if (availableWorker == null) break;
|
|
386
414
|
this.queuedTasks.splice(i, 1);
|
|
@@ -399,35 +427,52 @@ var WorkerPoolManager = class {
|
|
|
399
427
|
}
|
|
400
428
|
primeFileHighlightCache(file) {
|
|
401
429
|
if (!this.isWorkingPool()) return Promise.reject(/* @__PURE__ */ new Error("WorkerPoolManager.primeFileHighlightCache: worker pool is not working"));
|
|
430
|
+
if (!this.shouldPrimeFileHighlightCache(file)) return Promise.resolve();
|
|
431
|
+
if (this.shouldHighlightOnMainThread(file)) {
|
|
432
|
+
const options = this.getFileRenderOptions();
|
|
433
|
+
return this.primeHighlightCacheOnMainThread(getLangsFromRequest({
|
|
434
|
+
type: "file",
|
|
435
|
+
file
|
|
436
|
+
}), options.theme, (highlighter) => this.setFileResultCache(file.cacheKey, {
|
|
437
|
+
result: renderFileWithHighlighter(file, highlighter, options),
|
|
438
|
+
options
|
|
439
|
+
}));
|
|
440
|
+
}
|
|
402
441
|
const task = this.getOrCreateFileHighlightCacheTask(file);
|
|
403
442
|
return task != null ? this.createRenderTaskCallbacks(task) : Promise.resolve();
|
|
404
443
|
}
|
|
405
|
-
|
|
444
|
+
shouldPrimeFileHighlightCache(file) {
|
|
406
445
|
if (file.cacheKey == null) {
|
|
407
446
|
console.warn(`WorkerPoolManager.primeFileHighlightCache: priming highlight cache requires file.cacheKey; skipping "${file.name}".`);
|
|
408
|
-
return;
|
|
447
|
+
return false;
|
|
409
448
|
}
|
|
410
449
|
const cachedResult = this.getFileResultCache(file);
|
|
450
|
+
return !isFilePlainText(file) && (cachedResult == null || !areFileRenderOptionsEqual(cachedResult.options, this.getFileRenderOptions()));
|
|
451
|
+
}
|
|
452
|
+
getOrCreateFileHighlightCacheTask(file) {
|
|
411
453
|
const highlightKey = this.getFileHighlightKey(file);
|
|
412
|
-
if (highlightKey == null
|
|
454
|
+
if (highlightKey == null) return;
|
|
413
455
|
const existingTask = this.getTaskByHighlightKey(highlightKey);
|
|
414
456
|
if (existingTask != null) {
|
|
457
|
+
if (existingTask.type !== "file") throw new Error("WorkerPoolManager.getOrCreateFileHighlightCacheTask: Invalid task type");
|
|
415
458
|
existingTask.primeCache = true;
|
|
416
|
-
return existingTask
|
|
459
|
+
return existingTask;
|
|
417
460
|
} else {
|
|
418
461
|
const task = this.submitCacheTask({
|
|
419
462
|
type: "file",
|
|
420
463
|
file
|
|
421
464
|
}, highlightKey);
|
|
422
|
-
|
|
465
|
+
if (task.type !== "file") throw new Error("WorkerPoolManager.getOrCreateFileHighlightCacheTask: Invalid task created");
|
|
466
|
+
return task;
|
|
423
467
|
}
|
|
424
468
|
}
|
|
425
469
|
getPlainFileAST(file, startingLine, totalLines, lines) {
|
|
426
|
-
|
|
470
|
+
const highlighter = getHighlighterIfLoaded({ theme: this.renderOptions.theme });
|
|
471
|
+
if (highlighter == null) {
|
|
427
472
|
this.queueInitialization();
|
|
428
473
|
return;
|
|
429
474
|
}
|
|
430
|
-
return renderFileWithHighlighter(file,
|
|
475
|
+
return renderFileWithHighlighter(file, highlighter, this.renderOptions, {
|
|
431
476
|
forcePlainText: true,
|
|
432
477
|
startingLine,
|
|
433
478
|
totalLines,
|
|
@@ -444,37 +489,73 @@ var WorkerPoolManager = class {
|
|
|
444
489
|
}
|
|
445
490
|
primeDiffHighlightCache(diff) {
|
|
446
491
|
if (!this.isWorkingPool()) return Promise.reject(/* @__PURE__ */ new Error("WorkerPoolManager.primeDiffHighlightCache: worker pool is not working"));
|
|
492
|
+
if (!this.shouldPrimeDiffHighlightCache(diff)) return Promise.resolve();
|
|
493
|
+
if (this.shouldHighlightOnMainThread(diff)) {
|
|
494
|
+
const options = this.getDiffRenderOptions();
|
|
495
|
+
return this.primeHighlightCacheOnMainThread(getLangsFromRequest({
|
|
496
|
+
type: "diff",
|
|
497
|
+
diff
|
|
498
|
+
}), options.theme, (highlighter) => this.setDiffResultCache(diff.cacheKey, {
|
|
499
|
+
result: renderDiffWithHighlighter(diff, highlighter, options),
|
|
500
|
+
options
|
|
501
|
+
}));
|
|
502
|
+
}
|
|
447
503
|
const task = this.getOrCreateDiffHighlightCacheTask(diff);
|
|
448
504
|
return task != null ? this.createRenderTaskCallbacks(task) : Promise.resolve();
|
|
449
505
|
}
|
|
450
|
-
|
|
506
|
+
shouldPrimeDiffHighlightCache(diff) {
|
|
451
507
|
if (diff.cacheKey == null) {
|
|
452
508
|
console.warn(`WorkerPoolManager.primeDiffHighlightCache: priming highlight cache requires diff.cacheKey; skipping "${diff.prevName ?? diff.name}" -> "${diff.name}".`);
|
|
453
|
-
return;
|
|
509
|
+
return false;
|
|
454
510
|
}
|
|
455
511
|
const cachedResult = this.getDiffResultCache(diff);
|
|
512
|
+
return !isDiffPlainText(diff) && (cachedResult == null || !areDiffRenderOptionsEqual(cachedResult.options, this.getDiffRenderOptions()));
|
|
513
|
+
}
|
|
514
|
+
primeHighlightCacheOnMainThread(langs, theme, highlightAndCacheResult) {
|
|
515
|
+
function highlightAndCacheIfLoaded() {
|
|
516
|
+
const highlighter = getHighlighterIfLoaded({
|
|
517
|
+
theme,
|
|
518
|
+
langs
|
|
519
|
+
});
|
|
520
|
+
return highlighter != null && highlightAndCacheResult(highlighter);
|
|
521
|
+
}
|
|
522
|
+
if (highlightAndCacheIfLoaded()) return Promise.resolve();
|
|
523
|
+
const { lifecycleGeneration } = this;
|
|
524
|
+
return this.loadSharedHighlighter(getThemes(theme), ["text", ...langs]).then(() => {
|
|
525
|
+
if (!this.isCurrentLifecycle(lifecycleGeneration)) throw new WorkerPoolTerminatedError();
|
|
526
|
+
if (!highlightAndCacheIfLoaded()) throw new WorkerPoolTaskCanceledError();
|
|
527
|
+
});
|
|
528
|
+
}
|
|
529
|
+
getOrCreateDiffHighlightCacheTask(diff) {
|
|
456
530
|
const highlightKey = this.getDiffHighlightKey(diff);
|
|
457
|
-
if (highlightKey == null
|
|
531
|
+
if (highlightKey == null) return;
|
|
458
532
|
const existingTask = this.getTaskByHighlightKey(highlightKey);
|
|
459
533
|
if (existingTask != null) {
|
|
534
|
+
if (existingTask.type !== "diff") throw new Error("WorkerPoolManager.getOrCreateDiffHighlightCacheTask: Invalid task type");
|
|
460
535
|
existingTask.primeCache = true;
|
|
461
|
-
return existingTask
|
|
536
|
+
return existingTask;
|
|
462
537
|
} else {
|
|
463
538
|
const task = this.submitCacheTask({
|
|
464
539
|
type: "diff",
|
|
465
540
|
diff
|
|
466
541
|
}, highlightKey);
|
|
467
|
-
|
|
542
|
+
if (task.type !== "diff") throw new Error("WorkerPoolManager.getOrCreateDiffHighlightCacheTask: Invalid task created");
|
|
543
|
+
return task;
|
|
468
544
|
}
|
|
469
545
|
}
|
|
470
546
|
getPlainDiffAST(diff, startingLine, totalLines, expandedHunks, collapsedContextThreshold) {
|
|
471
|
-
|
|
547
|
+
const highlighter = getHighlighterIfLoaded({ theme: this.renderOptions.theme });
|
|
548
|
+
if (highlighter == null) {
|
|
549
|
+
this.queueInitialization();
|
|
550
|
+
return;
|
|
551
|
+
}
|
|
552
|
+
return renderDiffWithHighlighter(diff, highlighter, this.renderOptions, {
|
|
472
553
|
forcePlainText: true,
|
|
473
554
|
startingLine,
|
|
474
555
|
totalLines,
|
|
475
556
|
expandedHunks,
|
|
476
557
|
collapsedContextThreshold
|
|
477
|
-
})
|
|
558
|
+
});
|
|
478
559
|
}
|
|
479
560
|
terminate() {
|
|
480
561
|
this.lifecycleGeneration++;
|
|
@@ -489,9 +570,9 @@ var WorkerPoolManager = class {
|
|
|
489
570
|
this.queuedTaskByInstance.clear();
|
|
490
571
|
this.taskByHighlightKey.clear();
|
|
491
572
|
this.activeTaskById.clear();
|
|
492
|
-
this.highlighter = void 0;
|
|
493
573
|
this.initialized = false;
|
|
494
574
|
this.workersFailed = false;
|
|
575
|
+
this.terminated = true;
|
|
495
576
|
this.queueBroadcastStateChanges();
|
|
496
577
|
}
|
|
497
578
|
isCurrentLifecycle(lifecycleGeneration) {
|
|
@@ -625,15 +706,12 @@ var WorkerPoolManager = class {
|
|
|
625
706
|
}
|
|
626
707
|
async resolveLanguagesAndExecuteTask(availableWorker, task, langs) {
|
|
627
708
|
try {
|
|
628
|
-
const
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
langs: ["text", ...mainThreadLangs],
|
|
632
|
-
preferredHighlighter: this.preferredHighlighter
|
|
633
|
-
}).catch((error) => {
|
|
709
|
+
const highlighter = getHighlighterIfLoaded();
|
|
710
|
+
const mainThreadLangs = langs.filter((lang) => highlighter == null || !areLanguagesAttached(lang, highlighter));
|
|
711
|
+
if (mainThreadLangs.length > 0) this.loadSharedHighlighter(getThemes(this.renderOptions.theme), ["text", ...mainThreadLangs]).catch((error) => {
|
|
634
712
|
console.error(error);
|
|
635
713
|
});
|
|
636
|
-
const workerMissingLangs = langs.filter((lang) => !availableWorker.langs.has(lang));
|
|
714
|
+
const workerMissingLangs = this.preferredHighlighter === "highlights" ? [] : langs.filter((lang) => !availableWorker.langs.has(lang));
|
|
637
715
|
if (workerMissingLangs.length > 0) {
|
|
638
716
|
if (hasResolvedLanguages(workerMissingLangs)) task.request.resolvedLanguages = getResolvedLanguages(workerMissingLangs);
|
|
639
717
|
else task.request.resolvedLanguages = await resolveLanguages(workerMissingLangs);
|
|
@@ -681,9 +759,13 @@ var WorkerPoolManager = class {
|
|
|
681
759
|
break;
|
|
682
760
|
case "file": {
|
|
683
761
|
if (task.type !== "file") throw new Error("handleWorkerMessage: task/response dont match");
|
|
684
|
-
const {
|
|
762
|
+
const { options } = response;
|
|
685
763
|
if (!this.isCurrentRenderTask(task) || !areFileRenderOptionsEqual(options, this.getFileRenderOptions())) throw IGNORE_RESPONSE;
|
|
686
764
|
const { request } = task;
|
|
765
|
+
const result = {
|
|
766
|
+
...response.result,
|
|
767
|
+
code: decodeHastLines(response.result.code)
|
|
768
|
+
};
|
|
687
769
|
this.syncCustomExtensionVersion(managedWorker, request);
|
|
688
770
|
if (task.cacheKeyAtDispatch != null) this.fileCache.set(task.cacheKeyAtDispatch, {
|
|
689
771
|
result,
|
|
@@ -695,9 +777,16 @@ var WorkerPoolManager = class {
|
|
|
695
777
|
}
|
|
696
778
|
case "diff": {
|
|
697
779
|
if (task.type !== "diff") throw new Error("handleWorkerMessage: task/response dont match");
|
|
698
|
-
const {
|
|
780
|
+
const { options } = response;
|
|
699
781
|
if (!this.isCurrentRenderTask(task) || !areDiffRenderOptionsEqual(options, this.getDiffRenderOptions())) throw IGNORE_RESPONSE;
|
|
700
782
|
const { request } = task;
|
|
783
|
+
const result = {
|
|
784
|
+
...response.result,
|
|
785
|
+
code: {
|
|
786
|
+
deletionLines: decodeHastLines(response.result.code.deletionLines),
|
|
787
|
+
additionLines: decodeHastLines(response.result.code.additionLines)
|
|
788
|
+
}
|
|
789
|
+
};
|
|
701
790
|
this.syncCustomExtensionVersion(managedWorker, request);
|
|
702
791
|
if (task.cacheKeyAtDispatch != null) this.diffCache.set(task.cacheKeyAtDispatch, {
|
|
703
792
|
result,
|
|
@@ -904,16 +993,15 @@ var WorkerPoolManager = class {
|
|
|
904
993
|
function shouldSyncCustomExtensions(request) {
|
|
905
994
|
return request.type === "initialize" || request.type === "file" || request.type === "diff";
|
|
906
995
|
}
|
|
907
|
-
function
|
|
996
|
+
function getLangsFromRequest(request) {
|
|
908
997
|
const langs = /* @__PURE__ */ new Set();
|
|
909
|
-
|
|
910
|
-
switch (task.type) {
|
|
998
|
+
switch (request.type) {
|
|
911
999
|
case "file":
|
|
912
|
-
langs.add(
|
|
1000
|
+
langs.add(request.file.lang ?? getFiletypeFromFileName(request.file.name));
|
|
913
1001
|
break;
|
|
914
1002
|
case "diff":
|
|
915
|
-
langs.add(
|
|
916
|
-
langs.add(
|
|
1003
|
+
langs.add(request.diff.lang ?? getFiletypeFromFileName(request.diff.name));
|
|
1004
|
+
langs.add(request.diff.lang ?? getFiletypeFromFileName(request.diff.prevName ?? "-"));
|
|
917
1005
|
}
|
|
918
1006
|
langs.delete("text");
|
|
919
1007
|
return Array.from(langs);
|