@pierre/diffs 1.5.2 → 1.6.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/README.md +4 -3
- package/dist/components/CodeView.d.ts.map +1 -1
- package/dist/components/CodeView.js +6 -5
- package/dist/components/CodeView.js.map +1 -1
- package/dist/components/File.d.ts.map +1 -1
- package/dist/components/File.js +11 -6
- package/dist/components/File.js.map +1 -1
- package/dist/components/FileDiff.d.ts.map +1 -1
- package/dist/components/FileDiff.js +12 -7
- 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/constants.d.ts +3 -2
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +2 -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/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 +23 -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 +14 -10
- package/dist/index.js +16 -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.js +1 -1
- package/dist/react/index.d.ts +8 -3
- package/dist/renderers/DiffHunksRenderer.d.ts +2 -1
- package/dist/renderers/DiffHunksRenderer.d.ts.map +1 -1
- package/dist/renderers/DiffHunksRenderer.js +31 -22
- package/dist/renderers/DiffHunksRenderer.js.map +1 -1
- package/dist/renderers/FileRenderer.d.ts +2 -1
- package/dist/renderers/FileRenderer.d.ts.map +1 -1
- package/dist/renderers/FileRenderer.js +33 -24
- package/dist/renderers/FileRenderer.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/FileDiffReact.js +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 +10 -11
- package/dist/types.d.ts.map +1 -1
- 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/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/parseDiffDecorations.d.ts +2 -1
- package/dist/utils/parseDiffDecorations.d.ts.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 +17 -0
- package/dist/utils/renderTokenLines.d.ts.map +1 -0
- package/dist/utils/renderTokenLines.js +246 -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/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 +7 -0
- package/dist/utils/tokenStyle.d.ts.map +1 -0
- package/dist/utils/tokenStyle.js +28 -0
- package/dist/utils/tokenStyle.js.map +1 -0
- package/dist/utils/tokensToHtml.d.ts +8 -0
- package/dist/utils/tokensToHtml.d.ts.map +1 -0
- package/dist/utils/tokensToHtml.js +45 -0
- package/dist/utils/tokensToHtml.js.map +1 -0
- package/dist/utils/wrapTokenFragments.js.map +1 -1
- package/dist/worker/WorkerPoolManager.d.ts +2 -2
- package/dist/worker/WorkerPoolManager.d.ts.map +1 -1
- package/dist/worker/WorkerPoolManager.js +56 -46
- 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-sAHlxqlf.js +317 -0
- package/dist/worker/highlights-sAHlxqlf.js.map +1 -0
- package/dist/worker/index.d.ts +1 -1
- package/dist/worker/shiki-Bx2JpdqZ.js +697 -0
- package/dist/worker/shiki-Bx2JpdqZ.js.map +1 -0
- package/dist/worker/stream-tokenizer-YZ6M1qSx.js +424 -0
- package/dist/worker/stream-tokenizer-YZ6M1qSx.js.map +1 -0
- package/dist/worker/types.d.ts +5 -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 +672 -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 +33 -29
- 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;
|
|
@@ -52,6 +51,7 @@ declare class WorkerPoolManager {
|
|
|
52
51
|
cleanUpTasks(instance: RenderTaskInstance): void;
|
|
53
52
|
isInitialized(): boolean;
|
|
54
53
|
initialize(languages?: SupportedLanguages[]): Promise<void>;
|
|
54
|
+
private loadSharedHighlighter;
|
|
55
55
|
private initializeWorkers;
|
|
56
56
|
/**
|
|
57
57
|
* Pass worker errors to onWorkerError, or log them if no callback is set.
|
|
@@ -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":";;;;UAkFU;EACR,WAAW,eAAe;EAC1B,WAAW,eAAe;;UAYlB;EACR;;KAKG,qBAAqB,uBAAuB;cAEpC;UAiCD;mBAhCO;UACT;UACA;UACA;UACA;UACA;UAEA;UACA;UAIA;UAGA;UACA;UAKA;UACA;UACA;UACA;UACA;UACA;UACA;UAEA;EAER,YACU,SAAS,qBAEf,OACA,OACA,qBACA,cACA,mBACA,uBACA,wBACC;EAeE;EAIA,mBAAmB,MAAM,eAAe;EAMxC,mBACL,MAAM,mBACL;EAMI,iBAAiB;EAKjB,mBAAmB;EAQnB,mBAAmB;EAQpB,mBACJ,OACA,qBACA,cACA,mBACA,yBACC,QAAQ,0BAA0B;EAwE9B,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;UAyFjD;UAiBA;;;;;;;;;UAgGN;UA8BA;EA2BD,iBACL,UAAU,sBACV,MAAM;EAqBD,wBAAwB,MAAM,eAAe;UAe5C;EAgCD,gBACL,MAAM,cACN,sBACA,oBACA,mBACC;EAgBI,iBACL,UAAU,sBACV,MAAM;EAqBD,wBAAwB,MAAM,mBAAmB;UAehD;EAgCD,gBACL,MAAM,kBACN,sBACA,oBACA,gBAAgB,YAAY,6BAC5B,qCACC;EAiBI;UAoBC;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;
|
|
@@ -46,9 +46,9 @@ var WorkerPoolManager = class {
|
|
|
46
46
|
diffCache;
|
|
47
47
|
_queuedBroadcast;
|
|
48
48
|
lifecycleGeneration = 0;
|
|
49
|
-
constructor(options, { langs, theme = DEFAULT_THEMES, useTokenTransformer = false, lineDiffType = "word-alt", maxLineDiffLength = 1e3, tokenizeMaxLineLength = 1e3, preferredHighlighter
|
|
49
|
+
constructor(options, { langs, theme = DEFAULT_THEMES, useTokenTransformer = false, lineDiffType = "word-alt", maxLineDiffLength = 1e3, tokenizeMaxLineLength = 1e3, preferredHighlighter }) {
|
|
50
50
|
this.options = options;
|
|
51
|
-
this.preferredHighlighter = preferredHighlighter;
|
|
51
|
+
this.preferredHighlighter = resolveHighlighterType(preferredHighlighter);
|
|
52
52
|
this.renderOptions = {
|
|
53
53
|
theme,
|
|
54
54
|
useTokenTransformer,
|
|
@@ -106,20 +106,11 @@ var WorkerPoolManager = class {
|
|
|
106
106
|
if (!isCurrentRequest() || areDiffRenderOptionsEqual(newRenderOptions, this.renderOptions)) return;
|
|
107
107
|
const themeNames = getThemes(theme);
|
|
108
108
|
let resolvedThemes = [];
|
|
109
|
-
if (!areThemesEqual(newRenderOptions.theme, this.renderOptions.theme))
|
|
110
|
-
if (hasResolvedThemes(themeNames)) resolvedThemes = getResolvedThemes(themeNames);
|
|
111
|
-
else resolvedThemes = await resolveThemes(themeNames);
|
|
112
|
-
}
|
|
109
|
+
if (!areThemesEqual(newRenderOptions.theme, this.renderOptions.theme)) resolvedThemes = hasResolvedThemes(themeNames, this.preferredHighlighter) ? getResolvedThemes(themeNames, this.preferredHighlighter) : await resolveThemes(themeNames, this.preferredHighlighter);
|
|
113
110
|
if (!isCurrentRequest()) return;
|
|
114
|
-
if (
|
|
115
|
-
|
|
116
|
-
const highlighter = await getSharedHighlighter({
|
|
117
|
-
themes: themeNames,
|
|
118
|
-
langs: ["text"],
|
|
119
|
-
preferredHighlighter: this.preferredHighlighter
|
|
120
|
-
});
|
|
111
|
+
if (getHighlighterIfLoaded({ theme }) == null) {
|
|
112
|
+
await this.loadSharedHighlighter(themeNames, ["text"]);
|
|
121
113
|
if (!isCurrentRequest()) return;
|
|
122
|
-
this.highlighter = highlighter;
|
|
123
114
|
}
|
|
124
115
|
const workerSetup = this.setRenderOptionsOnWorkers(newRenderOptions, resolvedThemes);
|
|
125
116
|
this.renderOptions = newRenderOptions;
|
|
@@ -227,38 +218,32 @@ var WorkerPoolManager = class {
|
|
|
227
218
|
return this.initialized === true;
|
|
228
219
|
}
|
|
229
220
|
async initialize(languages = []) {
|
|
230
|
-
if (this.initialized === true)
|
|
231
|
-
|
|
221
|
+
if (this.initialized === true) {
|
|
222
|
+
if (getHighlighterIfLoaded({ theme: this.renderOptions.theme }) == null) await this.loadSharedHighlighter(getThemes(this.renderOptions.theme), ["text", ...languages]);
|
|
223
|
+
return;
|
|
224
|
+
} else if (this.initialized === false) {
|
|
232
225
|
const { lifecycleGeneration } = this;
|
|
233
226
|
const initialization = new Promise((resolve, reject) => {
|
|
234
227
|
(async () => {
|
|
235
228
|
try {
|
|
236
229
|
const themes = getThemes(this.renderOptions.theme);
|
|
237
|
-
|
|
238
|
-
if (hasResolvedThemes(themes)) resolvedThemes = getResolvedThemes(themes);
|
|
239
|
-
else resolvedThemes = await resolveThemes(themes);
|
|
230
|
+
const resolvedThemes = hasResolvedThemes(themes, this.preferredHighlighter) ? getResolvedThemes(themes, this.preferredHighlighter) : await resolveThemes(themes, this.preferredHighlighter);
|
|
240
231
|
if (!this.isCurrentLifecycle(lifecycleGeneration)) {
|
|
241
232
|
resolve();
|
|
242
233
|
return;
|
|
243
234
|
}
|
|
244
235
|
let resolvedLanguages = [];
|
|
245
|
-
if (hasResolvedLanguages(languages))
|
|
246
|
-
else resolvedLanguages = await resolveLanguages(languages);
|
|
236
|
+
if (this.preferredHighlighter !== "highlights") resolvedLanguages = hasResolvedLanguages(languages) ? getResolvedLanguages(languages) : await resolveLanguages(languages);
|
|
247
237
|
if (!this.isCurrentLifecycle(lifecycleGeneration)) {
|
|
248
238
|
resolve();
|
|
249
239
|
return;
|
|
250
240
|
}
|
|
251
|
-
|
|
252
|
-
themes,
|
|
253
|
-
langs: ["text", ...languages],
|
|
254
|
-
preferredHighlighter: this.preferredHighlighter
|
|
255
|
-
}), this.initializeWorkers(resolvedThemes, resolvedLanguages)]);
|
|
241
|
+
await Promise.all([this.loadSharedHighlighter(themes, ["text", ...languages]), this.initializeWorkers(resolvedThemes, resolvedLanguages)]);
|
|
256
242
|
if (!this.isCurrentLifecycle(lifecycleGeneration)) {
|
|
257
243
|
this.terminateWorkers();
|
|
258
244
|
resolve();
|
|
259
245
|
return;
|
|
260
246
|
}
|
|
261
|
-
this.highlighter = highlighter;
|
|
262
247
|
this.initialized = true;
|
|
263
248
|
this.diffCache.clear();
|
|
264
249
|
this.fileCache.clear();
|
|
@@ -286,6 +271,17 @@ var WorkerPoolManager = class {
|
|
|
286
271
|
return initialization;
|
|
287
272
|
} else return this.initialized;
|
|
288
273
|
}
|
|
274
|
+
async loadSharedHighlighter(themes, langs) {
|
|
275
|
+
try {
|
|
276
|
+
await getSharedHighlighter({
|
|
277
|
+
themes,
|
|
278
|
+
langs,
|
|
279
|
+
preferredHighlighter: this.preferredHighlighter
|
|
280
|
+
});
|
|
281
|
+
} catch (error) {
|
|
282
|
+
if (!(error instanceof HighlighterDisposedError)) throw error;
|
|
283
|
+
}
|
|
284
|
+
}
|
|
289
285
|
async initializeWorkers(resolvedThemes, resolvedLanguages) {
|
|
290
286
|
this.workersFailed = false;
|
|
291
287
|
const initPromises = [];
|
|
@@ -314,6 +310,7 @@ var WorkerPoolManager = class {
|
|
|
314
310
|
id,
|
|
315
311
|
request: {
|
|
316
312
|
type: "initialize",
|
|
313
|
+
resultFormat: "hast-ops-v1",
|
|
317
314
|
id,
|
|
318
315
|
renderOptions: this.renderOptions,
|
|
319
316
|
preferredHighlighter: this.preferredHighlighter,
|
|
@@ -423,11 +420,12 @@ var WorkerPoolManager = class {
|
|
|
423
420
|
}
|
|
424
421
|
}
|
|
425
422
|
getPlainFileAST(file, startingLine, totalLines, lines) {
|
|
426
|
-
|
|
423
|
+
const highlighter = getHighlighterIfLoaded({ theme: this.renderOptions.theme });
|
|
424
|
+
if (highlighter == null) {
|
|
427
425
|
this.queueInitialization();
|
|
428
426
|
return;
|
|
429
427
|
}
|
|
430
|
-
return renderFileWithHighlighter(file,
|
|
428
|
+
return renderFileWithHighlighter(file, highlighter, this.renderOptions, {
|
|
431
429
|
forcePlainText: true,
|
|
432
430
|
startingLine,
|
|
433
431
|
totalLines,
|
|
@@ -468,13 +466,18 @@ var WorkerPoolManager = class {
|
|
|
468
466
|
}
|
|
469
467
|
}
|
|
470
468
|
getPlainDiffAST(diff, startingLine, totalLines, expandedHunks, collapsedContextThreshold) {
|
|
471
|
-
|
|
469
|
+
const highlighter = getHighlighterIfLoaded({ theme: this.renderOptions.theme });
|
|
470
|
+
if (highlighter == null) {
|
|
471
|
+
this.queueInitialization();
|
|
472
|
+
return;
|
|
473
|
+
}
|
|
474
|
+
return renderDiffWithHighlighter(diff, highlighter, this.renderOptions, {
|
|
472
475
|
forcePlainText: true,
|
|
473
476
|
startingLine,
|
|
474
477
|
totalLines,
|
|
475
478
|
expandedHunks,
|
|
476
479
|
collapsedContextThreshold
|
|
477
|
-
})
|
|
480
|
+
});
|
|
478
481
|
}
|
|
479
482
|
terminate() {
|
|
480
483
|
this.lifecycleGeneration++;
|
|
@@ -489,7 +492,6 @@ var WorkerPoolManager = class {
|
|
|
489
492
|
this.queuedTaskByInstance.clear();
|
|
490
493
|
this.taskByHighlightKey.clear();
|
|
491
494
|
this.activeTaskById.clear();
|
|
492
|
-
this.highlighter = void 0;
|
|
493
495
|
this.initialized = false;
|
|
494
496
|
this.workersFailed = false;
|
|
495
497
|
this.queueBroadcastStateChanges();
|
|
@@ -625,15 +627,12 @@ var WorkerPoolManager = class {
|
|
|
625
627
|
}
|
|
626
628
|
async resolveLanguagesAndExecuteTask(availableWorker, task, langs) {
|
|
627
629
|
try {
|
|
628
|
-
const
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
langs: ["text", ...mainThreadLangs],
|
|
632
|
-
preferredHighlighter: this.preferredHighlighter
|
|
633
|
-
}).catch((error) => {
|
|
630
|
+
const highlighter = getHighlighterIfLoaded();
|
|
631
|
+
const mainThreadLangs = langs.filter((lang) => highlighter == null || !areLanguagesAttached(lang, highlighter));
|
|
632
|
+
if (mainThreadLangs.length > 0) this.loadSharedHighlighter(getThemes(this.renderOptions.theme), ["text", ...mainThreadLangs]).catch((error) => {
|
|
634
633
|
console.error(error);
|
|
635
634
|
});
|
|
636
|
-
const workerMissingLangs = langs.filter((lang) => !availableWorker.langs.has(lang));
|
|
635
|
+
const workerMissingLangs = this.preferredHighlighter === "highlights" ? [] : langs.filter((lang) => !availableWorker.langs.has(lang));
|
|
637
636
|
if (workerMissingLangs.length > 0) {
|
|
638
637
|
if (hasResolvedLanguages(workerMissingLangs)) task.request.resolvedLanguages = getResolvedLanguages(workerMissingLangs);
|
|
639
638
|
else task.request.resolvedLanguages = await resolveLanguages(workerMissingLangs);
|
|
@@ -681,9 +680,13 @@ var WorkerPoolManager = class {
|
|
|
681
680
|
break;
|
|
682
681
|
case "file": {
|
|
683
682
|
if (task.type !== "file") throw new Error("handleWorkerMessage: task/response dont match");
|
|
684
|
-
const {
|
|
683
|
+
const { options } = response;
|
|
685
684
|
if (!this.isCurrentRenderTask(task) || !areFileRenderOptionsEqual(options, this.getFileRenderOptions())) throw IGNORE_RESPONSE;
|
|
686
685
|
const { request } = task;
|
|
686
|
+
const result = {
|
|
687
|
+
...response.result,
|
|
688
|
+
code: decodeHastLines(response.result.code)
|
|
689
|
+
};
|
|
687
690
|
this.syncCustomExtensionVersion(managedWorker, request);
|
|
688
691
|
if (task.cacheKeyAtDispatch != null) this.fileCache.set(task.cacheKeyAtDispatch, {
|
|
689
692
|
result,
|
|
@@ -695,9 +698,16 @@ var WorkerPoolManager = class {
|
|
|
695
698
|
}
|
|
696
699
|
case "diff": {
|
|
697
700
|
if (task.type !== "diff") throw new Error("handleWorkerMessage: task/response dont match");
|
|
698
|
-
const {
|
|
701
|
+
const { options } = response;
|
|
699
702
|
if (!this.isCurrentRenderTask(task) || !areDiffRenderOptionsEqual(options, this.getDiffRenderOptions())) throw IGNORE_RESPONSE;
|
|
700
703
|
const { request } = task;
|
|
704
|
+
const result = {
|
|
705
|
+
...response.result,
|
|
706
|
+
code: {
|
|
707
|
+
deletionLines: decodeHastLines(response.result.code.deletionLines),
|
|
708
|
+
additionLines: decodeHastLines(response.result.code.additionLines)
|
|
709
|
+
}
|
|
710
|
+
};
|
|
701
711
|
this.syncCustomExtensionVersion(managedWorker, request);
|
|
702
712
|
if (task.cacheKeyAtDispatch != null) this.diffCache.set(task.cacheKeyAtDispatch, {
|
|
703
713
|
result,
|