@pierre/diffs 1.6.0-beta.1 → 1.6.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.
Files changed (151) hide show
  1. package/dist/components/CodeView.d.ts +3 -2
  2. package/dist/components/CodeView.d.ts.map +1 -1
  3. package/dist/components/CodeView.js +18 -14
  4. package/dist/components/CodeView.js.map +1 -1
  5. package/dist/components/File.d.ts +31 -9
  6. package/dist/components/File.d.ts.map +1 -1
  7. package/dist/components/File.js +165 -84
  8. package/dist/components/File.js.map +1 -1
  9. package/dist/components/FileDiff.d.ts +32 -9
  10. package/dist/components/FileDiff.d.ts.map +1 -1
  11. package/dist/components/FileDiff.js +213 -124
  12. package/dist/components/FileDiff.js.map +1 -1
  13. package/dist/components/UnresolvedFile.d.ts +14 -4
  14. package/dist/components/UnresolvedFile.d.ts.map +1 -1
  15. package/dist/components/UnresolvedFile.js +35 -16
  16. package/dist/components/UnresolvedFile.js.map +1 -1
  17. package/dist/components/VirtualizedFile.d.ts +3 -2
  18. package/dist/components/VirtualizedFile.d.ts.map +1 -1
  19. package/dist/components/VirtualizedFile.js +28 -20
  20. package/dist/components/VirtualizedFile.js.map +1 -1
  21. package/dist/components/VirtualizedFileDiff.d.ts +3 -2
  22. package/dist/components/VirtualizedFileDiff.d.ts.map +1 -1
  23. package/dist/components/VirtualizedFileDiff.js +31 -24
  24. package/dist/components/VirtualizedFileDiff.js.map +1 -1
  25. package/dist/constants.d.ts +2 -1
  26. package/dist/constants.d.ts.map +1 -1
  27. package/dist/constants.js +2 -1
  28. package/dist/constants.js.map +1 -1
  29. package/dist/editor/platform.d.ts +1 -1
  30. package/dist/editor/platform.js +5 -4
  31. package/dist/editor/platform.js.map +1 -1
  32. package/dist/editor/selection.d.ts +2 -2
  33. package/dist/editor/selection.d.ts.map +1 -1
  34. package/dist/editor/selection.js +31 -6
  35. package/dist/editor/selection.js.map +1 -1
  36. package/dist/highlighter/shared_highlighter.d.ts +2 -1
  37. package/dist/highlighter/shared_highlighter.d.ts.map +1 -1
  38. package/dist/highlighter/shared_highlighter.js +2 -2
  39. package/dist/highlighter/shared_highlighter.js.map +1 -1
  40. package/dist/index.d.ts +10 -5
  41. package/dist/index.js +8 -3
  42. package/dist/react/CodeView.d.ts +4 -3
  43. package/dist/react/CodeView.d.ts.map +1 -1
  44. package/dist/react/CodeView.js +48 -39
  45. package/dist/react/CodeView.js.map +1 -1
  46. package/dist/react/File.js +3 -3
  47. package/dist/react/File.js.map +1 -1
  48. package/dist/react/FileDiff.js +3 -3
  49. package/dist/react/FileDiff.js.map +1 -1
  50. package/dist/react/MultiFileDiff.js +2 -2
  51. package/dist/react/MultiFileDiff.js.map +1 -1
  52. package/dist/react/PatchDiff.js +3 -3
  53. package/dist/react/PatchDiff.js.map +1 -1
  54. package/dist/react/UnresolvedFile.js +2 -2
  55. package/dist/react/UnresolvedFile.js.map +1 -1
  56. package/dist/react/index.d.ts +2 -2
  57. package/dist/react/types.d.ts +4 -2
  58. package/dist/react/types.d.ts.map +1 -1
  59. package/dist/react/utils/renderDiffChildren.js +1 -1
  60. package/dist/react/utils/renderDiffChildren.js.map +1 -1
  61. package/dist/react/utils/renderFileChildren.js +1 -1
  62. package/dist/react/utils/renderFileChildren.js.map +1 -1
  63. package/dist/react/utils/useFileDiffInstance.d.ts +1 -0
  64. package/dist/react/utils/useFileDiffInstance.d.ts.map +1 -1
  65. package/dist/react/utils/useFileDiffInstance.js +29 -24
  66. package/dist/react/utils/useFileDiffInstance.js.map +1 -1
  67. package/dist/react/utils/useFileInstance.d.ts +2 -0
  68. package/dist/react/utils/useFileInstance.d.ts.map +1 -1
  69. package/dist/react/utils/useFileInstance.js +38 -28
  70. package/dist/react/utils/useFileInstance.js.map +1 -1
  71. package/dist/react/utils/useForceUpdate.d.ts +5 -0
  72. package/dist/react/utils/useForceUpdate.d.ts.map +1 -0
  73. package/dist/react/utils/useForceUpdate.js +27 -0
  74. package/dist/react/utils/useForceUpdate.js.map +1 -0
  75. package/dist/react/utils/useNextRenderData.d.ts +9 -0
  76. package/dist/react/utils/useNextRenderData.d.ts.map +1 -0
  77. package/dist/react/utils/useNextRenderData.js +9 -0
  78. package/dist/react/utils/useNextRenderData.js.map +1 -0
  79. package/dist/react/utils/useUnresolvedFileInstance.d.ts +1 -0
  80. package/dist/react/utils/useUnresolvedFileInstance.d.ts.map +1 -1
  81. package/dist/react/utils/useUnresolvedFileInstance.js +26 -11
  82. package/dist/react/utils/useUnresolvedFileInstance.js.map +1 -1
  83. package/dist/renderers/DiffHunksRenderer.d.ts +2 -1
  84. package/dist/renderers/DiffHunksRenderer.d.ts.map +1 -1
  85. package/dist/renderers/DiffHunksRenderer.js +62 -32
  86. package/dist/renderers/DiffHunksRenderer.js.map +1 -1
  87. package/dist/renderers/FileRenderer.d.ts +4 -1
  88. package/dist/renderers/FileRenderer.d.ts.map +1 -1
  89. package/dist/renderers/FileRenderer.js +55 -30
  90. package/dist/renderers/FileRenderer.js.map +1 -1
  91. package/dist/renderers/UnresolvedFileHunksRenderer.d.ts.map +1 -1
  92. package/dist/renderers/UnresolvedFileHunksRenderer.js +1 -1
  93. package/dist/renderers/UnresolvedFileHunksRenderer.js.map +1 -1
  94. package/dist/ssr/FileDiffReact.js +1 -1
  95. package/dist/types.d.ts +10 -0
  96. package/dist/types.d.ts.map +1 -1
  97. package/dist/utils/canUseWASM.d.ts +13 -0
  98. package/dist/utils/canUseWASM.d.ts.map +1 -0
  99. package/dist/utils/canUseWASM.js +59 -0
  100. package/dist/utils/canUseWASM.js.map +1 -0
  101. package/dist/utils/getCodeViewItemRenderData.d.ts +10 -0
  102. package/dist/utils/getCodeViewItemRenderData.d.ts.map +1 -0
  103. package/dist/utils/getCodeViewItemRenderData.js +19 -0
  104. package/dist/utils/getCodeViewItemRenderData.js.map +1 -0
  105. package/dist/utils/hastToHtml.d.ts +2 -2
  106. package/dist/utils/hastToHtml.js +2 -2
  107. package/dist/utils/hastToHtml.js.map +1 -1
  108. package/dist/utils/hydratePartialDiff.js +4 -0
  109. package/dist/utils/hydratePartialDiff.js.map +1 -1
  110. package/dist/utils/parseMergeConflictDiffFromFile.d.ts.map +1 -1
  111. package/dist/utils/parseMergeConflictDiffFromFile.js +2 -0
  112. package/dist/utils/parseMergeConflictDiffFromFile.js.map +1 -1
  113. package/dist/utils/parsePatchFiles.d.ts.map +1 -1
  114. package/dist/utils/parsePatchFiles.js +24 -4
  115. package/dist/utils/parsePatchFiles.js.map +1 -1
  116. package/dist/utils/renderTokenLines.d.ts +6 -1
  117. package/dist/utils/renderTokenLines.d.ts.map +1 -1
  118. package/dist/utils/renderTokenLines.js +4 -0
  119. package/dist/utils/renderTokenLines.js.map +1 -1
  120. package/dist/utils/resolveRegion.js +20 -10
  121. package/dist/utils/resolveRegion.js.map +1 -1
  122. package/dist/utils/tokenStyle.d.ts +5 -1
  123. package/dist/utils/tokenStyle.d.ts.map +1 -1
  124. package/dist/utils/tokenStyle.js +5 -1
  125. package/dist/utils/tokenStyle.js.map +1 -1
  126. package/dist/utils/tokensToHtml.d.ts +5 -2
  127. package/dist/utils/tokensToHtml.d.ts.map +1 -1
  128. package/dist/utils/tokensToHtml.js +5 -2
  129. package/dist/utils/tokensToHtml.js.map +1 -1
  130. package/dist/utils/updateDiffHunks.d.ts +2 -2
  131. package/dist/utils/updateDiffHunks.d.ts.map +1 -1
  132. package/dist/utils/updateDiffHunks.js +7 -3
  133. package/dist/utils/updateDiffHunks.js.map +1 -1
  134. package/dist/worker/WorkerPoolManager.d.ts +12 -0
  135. package/dist/worker/WorkerPoolManager.d.ts.map +1 -1
  136. package/dist/worker/WorkerPoolManager.js +99 -21
  137. package/dist/worker/WorkerPoolManager.js.map +1 -1
  138. package/dist/worker/{highlights-sAHlxqlf.js → highlights-CpZm9DAR.js} +2 -2
  139. package/dist/worker/{highlights-sAHlxqlf.js.map → highlights-CpZm9DAR.js.map} +1 -1
  140. package/dist/worker/{shiki-Bx2JpdqZ.js → shiki-Ci4cdHsM.js} +2 -2
  141. package/dist/worker/{shiki-Bx2JpdqZ.js.map → shiki-Ci4cdHsM.js.map} +1 -1
  142. package/dist/worker/{stream-tokenizer-YZ6M1qSx.js → stream-tokenizer-DK9xp5M5.js} +8 -5
  143. package/dist/worker/stream-tokenizer-DK9xp5M5.js.map +1 -0
  144. package/dist/worker/types.d.ts +11 -0
  145. package/dist/worker/types.d.ts.map +1 -1
  146. package/dist/worker/worker-portable.js +4 -4
  147. package/dist/worker/worker-portable.js.map +1 -1
  148. package/dist/worker/worker.js +12 -3
  149. package/dist/worker/worker.js.map +1 -1
  150. package/package.json +28 -30
  151. package/dist/worker/stream-tokenizer-YZ6M1qSx.js.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pierre/diffs",
3
- "version": "1.6.0-beta.1",
3
+ "version": "1.6.1",
4
4
  "license": "apache-2.0",
5
5
  "files": [
6
6
  "dist",
@@ -65,36 +65,33 @@
65
65
  "publishConfig": {
66
66
  "access": "public"
67
67
  },
68
- "scripts": {
69
- "prepublishOnly": "moon run diffs:prepublish"
70
- },
71
68
  "dependencies": {
72
- "@pierre/highlights": "workspace:*",
73
- "@pierre/theme": "workspace:*",
74
- "@pierre/theming": "workspace:*",
75
- "diff": "catalog:",
76
- "hast-util-to-html": "catalog:",
77
- "lru_map": "catalog:",
78
- "shiki": "^3.0.0 || ^4.0.0"
69
+ "diff": "9.0.0",
70
+ "hast-util-to-html": "9.0.5",
71
+ "lru_map": "0.4.1",
72
+ "shiki": "^3.0.0 || ^4.0.0",
73
+ "@pierre/highlights": "0.2.0",
74
+ "@pierre/theming": "1.0.2",
75
+ "@pierre/theme": "2.0.0"
79
76
  },
80
77
  "devDependencies": {
81
- "@playwright/test": "catalog:",
82
- "@tsdown/css": "catalog:",
83
- "@types/hast": "catalog:",
84
- "@types/jsdom": "catalog:",
85
- "@types/react": "catalog:",
86
- "@types/react-dom": "catalog:",
87
- "autoprefixer": "catalog:",
88
- "jsdom": "catalog:",
89
- "lightningcss": "catalog:",
90
- "postcss": "catalog:",
91
- "postcss-calc": "catalog:",
92
- "postcss-nesting": "catalog:",
93
- "react": "catalog:",
94
- "react-dom": "catalog:",
95
- "tsdown": "catalog:",
96
- "typescript": "catalog:",
97
- "vite": "catalog:"
78
+ "@playwright/test": "1.51.1",
79
+ "@tsdown/css": "0.22.14",
80
+ "@types/hast": "3.0.4",
81
+ "@types/jsdom": "28.0.1",
82
+ "@types/react": "19.2.7",
83
+ "@types/react-dom": "19.2.3",
84
+ "autoprefixer": "10.4.22",
85
+ "jsdom": "26.1.0",
86
+ "lightningcss": "1.32.0",
87
+ "postcss": "8.5.6",
88
+ "postcss-calc": "10.1.1",
89
+ "postcss-nesting": "14.0.0",
90
+ "react": "19.2.7",
91
+ "react-dom": "19.2.7",
92
+ "tsdown": "0.22.14",
93
+ "typescript": "7.0.2",
94
+ "vite": "8.1.0"
98
95
  },
99
96
  "peerDependencies": {
100
97
  "react": "^18.3.1 || ^19.0.0",
@@ -107,5 +104,6 @@
107
104
  "react-dom": {
108
105
  "optional": true
109
106
  }
110
- }
111
- }
107
+ },
108
+ "scripts": {}
109
+ }
@@ -1 +0,0 @@
1
- {"version":3,"file":"stream-tokenizer-YZ6M1qSx.js","names":[],"sources":["../../src/utils/isWorkerContext.ts","../../src/highlighter/themes/createCachedLoader.ts","../../src/highlighter/themes/themeResolver.ts","../../src/utils/hastToHtml.ts","../../src/utils/tokensToHtml.ts","../../src/highlighter/DiffsHighlighter.ts","../../src/highlighter/stream-tokenizer.ts"],"sourcesContent":["declare const WorkerGlobalScope: new () => Worker;\n\nexport function isWorkerContext(): boolean {\n return (\n typeof WorkerGlobalScope !== 'undefined' &&\n typeof self !== 'undefined' &&\n self instanceof WorkerGlobalScope\n );\n}\n","export function createCachedLoader<T extends object>(\n loader: () => Promise<T>\n): () => T | Promise<T> {\n let cached: T | Promise<T> | undefined;\n return () =>\n (cached ??= loader().then(\n (loaded) => {\n cached = loaded;\n return loaded;\n },\n (error: unknown) => {\n cached = undefined;\n throw error;\n }\n ));\n}\n","import type {\n Theme as ZedTheme,\n ThemeFamily as ZedThemeFamily,\n} from '@pierre/highlights';\nimport {\n createThemeResolver,\n type ThemeLoader,\n type ThemeResolver,\n} from '@pierre/theming';\nimport type { ThemeRegistration } from 'shiki';\n\nimport type { HighlighterTypes } from '../../types';\nimport { isWorkerContext } from '../../utils/isWorkerContext';\nimport { createCachedLoader } from './createCachedLoader';\nimport type { DiffsTheme } from './types';\n\ndeclare const __DIFFS_WORKER__: boolean | undefined;\n\nexport type CustomThemeLoader = ThemeLoader<\n ThemeRegistration | DiffsTheme | ZedTheme | ZedThemeFamily\n>;\nexport const customThemes: Map<\n string,\n Partial<Record<'textmate' | 'zed' | 'diffs', CustomThemeLoader>>\n> = new Map();\nconst resolvers = new Map<HighlighterTypes, ThemeResolver<DiffsTheme>>();\n\nconst loadHighlightsThemeCatalog = createCachedLoader(\n () => import('@pierre/highlights/themes/loader')\n);\nconst loadPierreThemeCatalog = createCachedLoader(\n () => import('@pierre/theming/themes')\n);\nconst loadShikiCore = createCachedLoader(() => import('shiki/core'));\n\n// Map Zed colors to the VS Code keys used by editor and diff overlays.\nconst ZED_COLOR_ALIASES: readonly (readonly [\n target: string,\n ...sources: string[],\n])[] = [\n ['editor.lineHighlightBackground', 'editor.active_line.background'],\n ['editor.selectionBackground', 'element.selected'],\n ['editor.findMatchBackground', 'search.match_background'],\n ['editor.findMatchHighlightBackground', 'search.match_background'],\n [\n 'editorBracketMatch.background',\n 'editor.document_highlight.bracket_background',\n ],\n ['editorError.foreground', 'error'],\n ['editorWarning.foreground', 'warning'],\n ['editorInfo.foreground', 'info'],\n ['editorHint.foreground', 'hint'],\n ['gitDecoration.addedResourceForeground', 'created', 'terminal.ansi.green'],\n ['gitDecoration.deletedResourceForeground', 'deleted', 'terminal.ansi.red'],\n [\n 'gitDecoration.modifiedResourceForeground',\n 'modified',\n 'terminal.ansi.blue',\n ],\n];\n\nfunction createHighlightsTheme(\n name: string,\n raw: ZedTheme | ZedThemeFamily\n): DiffsTheme {\n const theme = 'themes' in raw ? raw.themes[0] : raw;\n if (theme == null)\n throw new Error(`Theme \"${name}\" is an empty Zed theme family.`);\n const zed = { ...theme, name };\n const colors: Record<string, string> = {};\n for (const [key, value] of Object.entries(zed.style)) {\n if (typeof value === 'string') colors[key] = value;\n }\n // Zed keeps the local user's caret and selection in the first player slot.\n const player = zed.style.players?.[0];\n if (player?.cursor != null)\n colors['editorCursor.foreground'] ??= player.cursor;\n if (player?.selection != null)\n colors['editor.selectionBackground'] ??= player.selection;\n for (const [target, ...sources] of ZED_COLOR_ALIASES) {\n if (colors[target] != null) continue;\n const source = sources.find((key) => colors[key] != null);\n if (source != null) colors[target] = colors[source];\n }\n if (zed.cssVariables === true) {\n colors['editor.foreground'] = 'var(--hls-foreground)';\n colors['editor.background'] = 'var(--hls-background)';\n } else if (typeof zed.cssVariables === 'object') {\n colors['editor.foreground'] ??=\n colors.text ?? colors.foreground ?? 'foreground';\n colors['editor.background'] ??= colors.background ?? 'background';\n const { prefix = '--hls-', defaults } = zed.cssVariables;\n for (const [key, value] of Object.entries(colors)) {\n const fallback = defaults?.[value];\n colors[key] = `var(${prefix}${value}${fallback ? `, ${fallback}` : ''})`;\n }\n }\n const type = zed.appearance === 'light' ? 'light' : 'dark';\n return {\n name,\n type,\n colors,\n zed,\n fg:\n colors['editor.foreground'] ??\n colors.text ??\n colors.foreground ??\n (type === 'light' ? '#333333' : '#bbbbbb'),\n bg:\n colors['editor.background'] ??\n colors.background ??\n (type === 'light' ? '#ffffff' : '#1e1e1e'),\n };\n}\n\n/** Keep caches separate because the same name can have TextMate and Zed palettes. */\nexport function createDiffsThemeResolver(\n backend: HighlighterTypes\n): ThemeResolver<DiffsTheme> {\n let resolver = resolvers.get(backend);\n if (resolver != null) return resolver;\n resolver = createThemeResolver<DiffsTheme>({\n fallbackLoader: async (name) => {\n if (\n typeof __DIFFS_WORKER__ !== 'undefined'\n ? __DIFFS_WORKER__\n : isWorkerContext()\n ) {\n throw new Error(\n `Theme \"${name}\" cannot be resolved from a worker context. Themes must be pre-resolved on the main thread and passed to the worker via the resolvedThemes parameter.`\n );\n }\n const custom = customThemes.get(name);\n if (backend === 'highlights') {\n const loader = custom?.zed ?? custom?.diffs;\n if (loader != null) {\n const loaded = await loader();\n const theme = 'default' in loaded ? loaded.default : loaded;\n if ('zed' in theme && theme.zed != null) return theme;\n if ('style' in theme || 'themes' in theme)\n return createHighlightsTheme(name, theme);\n throw new Error(\n `Theme \"${name}\" is a TextMate theme; register a Zed theme with registerCustomTheme(name, loader, 'zed') for Highlights.`\n );\n }\n const catalog = loadHighlightsThemeCatalog();\n const { themes } = catalog instanceof Promise ? await catalog : catalog;\n const bundledLoader = themes[name];\n if (bundledLoader != null) {\n const loaded = await bundledLoader();\n return createHighlightsTheme(name, loaded.default);\n }\n if (custom?.textmate != null) {\n throw new Error(\n `Theme \"${name}\" is only registered for TextMate; use registerCustomTheme(name, loader, 'zed') for Highlights.`\n );\n }\n } else {\n const loader = custom?.textmate ?? custom?.diffs;\n let loaded: ThemeRegistration | DiffsTheme | ZedTheme | ZedThemeFamily;\n if (loader != null) {\n const result = await loader();\n loaded = 'default' in result ? result.default : result;\n } else {\n const catalog = loadPierreThemeCatalog();\n const { themes } =\n catalog instanceof Promise ? await catalog : catalog;\n const descriptor = themes.getTheme(name);\n if (descriptor == null && custom?.zed != null) {\n throw new Error(\n `Theme \"${name}\" is only registered for Zed; use registerCustomTheme(name, loader, 'textmate') for Shiki.`\n );\n }\n if (descriptor == null)\n throw new Error(`No valid theme loader registered for \"${name}\"`);\n const result = await descriptor.load();\n loaded = 'default' in result ? result.default : result;\n }\n if ('style' in loaded || 'themes' in loaded) {\n throw new Error(\n `Theme \"${name}\" is a Zed theme; use preferredHighlighter: 'highlights' or register a TextMate theme for Shiki.`\n );\n }\n const core = loadShikiCore();\n const { normalizeTheme, createCssVariablesTheme } =\n core instanceof Promise ? await core : core;\n if ('cssVariables' in loaded && loaded.cssVariables != null) {\n return {\n ...loaded,\n textmate: normalizeTheme(\n createCssVariablesTheme(loaded.cssVariables)\n ),\n };\n }\n if ('textmate' in loaded && loaded.textmate != null) {\n return { ...loaded, textmate: normalizeTheme(loaded.textmate) };\n }\n const textmate = normalizeTheme(loaded);\n return {\n name: textmate.name,\n type: textmate.type,\n fg: textmate.fg,\n bg: textmate.bg,\n colors: textmate.colors,\n textmate,\n };\n }\n throw new Error(`No valid theme loader registered for \"${name}\"`);\n },\n normalizeTheme: (theme, name) => {\n if (theme.name !== name)\n throw new Error(\n `resolvedTheme: themeName: ${name} does not match theme.name: ${theme.name}`\n );\n return theme;\n },\n });\n resolvers.set(backend, resolver);\n return resolver;\n}\n","import type { Element, Nodes, Properties, RootContent } from 'hast';\nimport { toHtml } from 'hast-util-to-html';\n\n// Must match the html-void-elements list used by toHtml().\nconst VOID_ELEMENTS = new Set([\n 'area',\n 'base',\n 'basefont',\n 'bgsound',\n 'br',\n 'col',\n 'command',\n 'embed',\n 'frame',\n 'hr',\n 'image',\n 'img',\n 'input',\n 'keygen',\n 'link',\n 'meta',\n 'param',\n 'source',\n 'track',\n 'wbr',\n]);\n\n// These elements require schema, fragment or raw-text handling in toHtml().\nconst DELEGATED_TAGS = new Set(['svg', 'template', 'script', 'style']);\n\n// Boolean and comma-separated attributes require the full HTML schema.\nconst ATTRIBUTE_NAMES: Record<string, string | undefined> = {\n class: 'class',\n className: 'class',\n id: 'id',\n role: 'role',\n style: 'style',\n tabIndex: 'tabindex',\n tabindex: 'tabindex',\n title: 'title',\n};\nconst DATA_ATTRIBUTE = /^data-[\\w.:-]+$/;\n\nconst TEXT_ESCAPE = /[<&]/g;\nconst ATTRIBUTE_ESCAPE = /[\\0\"&'`]/g;\n// Must match stringify-entities' default hexadecimal encoding.\nconst CHARACTER_REFERENCES: Record<string, string> = {\n '<': '&#x3C;',\n '&': '&#x26;',\n '\"': '&#x22;',\n \"'\": '&#x27;',\n '`': '&#x60;',\n '\\0': '&#x0;',\n};\nconst MAX_CACHED_STYLES = 256;\n\n/**\n * Avoid schema lookups for common token spans; delegate other nodes and\n * attributes to toHtml(). Output must match its default serialization exactly.\n */\nexport function hastToHtml(tree: Nodes | RootContent[]): string {\n const styles = new Map<string, string>();\n return Array.isArray(tree)\n ? serializeChildren(tree, styles)\n : serializeNode(tree, styles);\n}\n\nfunction serializeChildren(\n children: readonly RootContent[],\n styles: Map<string, string>\n): string {\n let html = '';\n for (const child of children) {\n html += serializeNode(child, styles);\n }\n return html;\n}\n\nfunction serializeNode(node: Nodes, styles: Map<string, string>): string {\n switch (node.type) {\n case 'text':\n return escapeText(node.value);\n case 'element':\n return serializeElement(node, styles);\n case 'root':\n return serializeChildren(node.children, styles);\n default:\n return toHtml(node);\n }\n}\n\nfunction serializeElement(node: Element, styles: Map<string, string>): string {\n const { tagName } = node;\n if (\n tagName === 'span' &&\n node.children.length === 1 &&\n node.children[0].type === 'text' &&\n typeof node.properties?.style === 'string'\n ) {\n let styleOnly = true;\n for (const key in node.properties) {\n if (key !== 'style' && node.properties[key] != null) {\n styleOnly = false;\n break;\n }\n }\n if (styleOnly) {\n return `<span ${serializeStyle(node.properties.style, styles)}>${escapeText(node.children[0].value)}</span>`;\n }\n }\n if (DELEGATED_TAGS.has(tagName)) {\n return toHtml(node);\n }\n const attributes = serializeAttributes(node.properties, styles);\n if (attributes == null) {\n return toHtml(node);\n }\n const open =\n attributes === '' ? `<${tagName}>` : `<${tagName} ${attributes}>`;\n const content = serializeChildren(node.children, styles);\n if (content === '' && VOID_ELEMENTS.has(tagName.toLowerCase())) {\n return open;\n }\n return `${open}${content}</${tagName}>`;\n}\n\n// Cap the per-render cache because custom styles may be unique per token.\nfunction serializeStyle(value: string, styles: Map<string, string>): string {\n let attribute = styles.get(value);\n if (attribute == null) {\n attribute = `style=\"${escapeAttribute(value)}\"`;\n if (styles.size < MAX_CACHED_STYLES) styles.set(value, attribute);\n }\n return attribute;\n}\n\n// Returns undefined when a property needs the HTML schema to serialize.\nfunction serializeAttributes(\n properties: Properties | undefined,\n styles: Map<string, string>\n): string | undefined {\n let attributes = '';\n for (const key in properties) {\n const value = properties[key];\n if (value == null) {\n continue;\n }\n const name =\n ATTRIBUTE_NAMES[key] ?? (DATA_ATTRIBUTE.test(key) ? key : undefined);\n if (name == null) {\n return undefined;\n }\n if (value === false || (typeof value === 'number' && Number.isNaN(value))) {\n continue;\n }\n const attribute =\n key === 'style' && typeof value === 'string'\n ? serializeStyle(value, styles)\n : value === true\n ? name\n : `${name}=\"${escapeAttribute(\n Array.isArray(value) ? value.join(' ').trim() : String(value)\n )}\"`;\n attributes += attributes === '' ? attribute : ` ${attribute}`;\n }\n return attributes;\n}\n\nfunction escapeText(value: string): string {\n return value.indexOf('<') < 0 && value.indexOf('&') < 0\n ? value\n : value.replace(TEXT_ESCAPE, toCharacterReference);\n}\n\nfunction escapeAttribute(value: string): string {\n return value.replace(ATTRIBUTE_ESCAPE, toCharacterReference);\n}\n\nfunction toCharacterReference(character: string): string {\n return CHARACTER_REFERENCES[character];\n}\n","import type { Element, Root } from 'hast';\n\nimport type { CodeToHtmlOptions, TokensResult } from '../types';\nimport { hastToHtml } from './hastToHtml';\nimport { renderTokenLines } from './renderTokenLines';\n\n/** Serialize highlighted tokens without loading a backend's HTML renderer. */\nexport function tokensToHtml(\n source: string,\n result: TokensResult,\n options: CodeToHtmlOptions,\n cacheHtmlStyles: boolean\n): string {\n const lineOffsets = [0];\n if (\n options.decorations?.some(\n (item) => typeof item.start === 'number' || typeof item.end === 'number'\n ) === true\n ) {\n for (\n let index = source.indexOf('\\n');\n index !== -1;\n index = source.indexOf('\\n', index + 1)\n )\n lineOffsets.push(index + 1);\n }\n const code: Element = {\n type: 'element',\n tagName: 'code',\n properties: {},\n children: [],\n };\n const lines = renderTokenLines(result.tokens, {\n decorations: options.decorations,\n mergeWhitespaces: options.mergeWhitespaces,\n lineOffsets,\n cacheHtmlStyles,\n });\n for (let i = 0; i < lines.length; i++) {\n if (i > 0) code.children.push({ type: 'text', value: '\\n' });\n code.children.push(lines[i]);\n }\n const root: Root = {\n type: 'root',\n children: [\n {\n type: 'element',\n tagName: 'pre',\n properties: {\n class: 'diffs',\n style:\n result.rootStyle === false\n ? undefined\n : (result.rootStyle ??\n [\n result.fg != null ? `color:${result.fg}` : '',\n result.bg != null ? `background-color:${result.bg}` : '',\n ]\n .filter(Boolean)\n .join(';')),\n tabIndex: 0,\n },\n children: [code],\n },\n ],\n };\n return hastToHtml(root);\n}\n","import type { ThemeResolver } from '@pierre/theming';\n\nimport type { HighlighterTypes } from '../types';\nimport { tokensToHtml } from '../utils/tokensToHtml';\nimport type { ResolvedLanguage } from '../worker/types';\nimport type { DiffsEditorTokenizer } from './DiffsEditorTokenizer';\nimport {\n acquireHighlighterType,\n HighlighterDisposedError,\n releaseHighlighterType,\n} from './highlighterType';\nimport type { DiffsTheme } from './themes/types';\nimport type {\n DiffsEditorTokenizerOptions,\n DiffsStreamTokenizer,\n} from './tokenizer-types';\nimport type {\n CodeToHtmlOptions,\n CodeToTokensOptions,\n TokensResult,\n} from './types';\n\n/**\n * A different highlighter type cannot load in this thread until every\n * instance of the current type is disposed.\n */\nexport abstract class DiffsHighlighter {\n protected disposed = false;\n\n constructor(\n readonly name: HighlighterTypes,\n readonly themeResolver: ThemeResolver<DiffsTheme>\n ) {\n acquireHighlighterType(name);\n }\n\n /**\n * Previously used themes remain available after the shared cache is cleared.\n */\n abstract getTheme(name: string): DiffsTheme;\n\n abstract codeToTokens(\n code: string,\n options: CodeToTokensOptions\n ): TokensResult;\n\n codeToHtml(code: string, options: CodeToHtmlOptions): string {\n return tokensToHtml(\n code,\n this.codeToTokens(code, options),\n options,\n this.name === 'highlights'\n );\n }\n\n abstract createStreamTokenizer(\n options: CodeToTokensOptions\n ): DiffsStreamTokenizer;\n\n abstract createEditorTokenizer(\n options: DiffsEditorTokenizerOptions\n ): DiffsEditorTokenizer;\n\n /** Backends with bundled lexers resolve immediately. */\n abstract loadLanguages(languages: readonly string[]): Promise<void>;\n\n abstract hasLoadedLanguages(languages: readonly string[]): boolean;\n\n /** Attach grammars resolved elsewhere, such as on the main thread for a worker. */\n abstract attachLanguages(languages: readonly ResolvedLanguage[]): void;\n\n get isDisposed(): boolean {\n return this.disposed;\n }\n\n /**\n * Disposed instances cannot be reused.\n */\n dispose(): void {\n if (this.disposed) {\n return;\n }\n this.disposed = true;\n this.releaseResources();\n releaseHighlighterType();\n }\n\n protected abstract releaseResources(): void;\n\n protected assertNotDisposed(): void {\n if (this.disposed) {\n throw new HighlighterDisposedError();\n }\n }\n}\n","import type {\n DiffsStreamTokenizer,\n DiffsStreamTokenizerEnqueueResult,\n} from './tokenizer-types';\nimport type { ThemedToken } from './types';\n\n/**\n * The final line stays provisional until a line break or stream close.\n * A trailing CR waits for the next chunk, which may complete a CRLF pair.\n * Token offsets are absolute UTF-16 positions in the stream.\n */\nexport abstract class BaseStreamTokenizer implements DiffsStreamTokenizer {\n protected disposed = false;\n /** Stream offset of the provisional line's first character. */\n protected stableOffset = 0;\n protected unstable: ThemedToken[] = [];\n protected pendingCarriageReturn = '';\n\n enqueue(chunk: string): DiffsStreamTokenizerEnqueueResult {\n this.assertActive();\n chunk = this.pendingCarriageReturn + chunk;\n this.pendingCarriageReturn = chunk.endsWith('\\r') ? '\\r' : '';\n if (this.pendingCarriageReturn !== '') chunk = chunk.slice(0, -1);\n const recall = this.unstable.length;\n const stable: ThemedToken[] = [];\n const { unstable, tailLength } = this.tokenizeChunk(chunk, stable);\n // Include the pending CR so token contents still reproduce the input.\n if (this.pendingCarriageReturn !== '')\n unstable.push({ content: '\\r', offset: this.stableOffset + tailLength });\n this.unstable = unstable;\n return { recall, stable, unstable };\n }\n\n /**\n * Append completed lines to stable, using pushLineBreak for their endings.\n * Return the unfinished line's tokens and UTF-16 length.\n */\n protected abstract tokenizeChunk(\n chunk: string,\n stable: ThemedToken[]\n ): { unstable: ThemedToken[]; tailLength: number };\n\n /** Emit one token per line-break character and move past the line. */\n protected pushLineBreak(\n stable: ThemedToken[],\n lineLength: number,\n lineBreak: string\n ): void {\n for (let index = 0; index < lineBreak.length; index++) {\n stable.push({\n content: lineBreak[index],\n offset: this.stableOffset + lineLength + index,\n });\n }\n this.stableOffset += lineLength + lineBreak.length;\n }\n\n close(): { stable: ThemedToken[] } {\n const stable = this.unstable;\n this.dispose();\n return { stable };\n }\n\n clear(): void {\n this.assertActive();\n this.stableOffset = 0;\n this.unstable = [];\n this.pendingCarriageReturn = '';\n this.resetSource();\n }\n\n abstract clone(): DiffsStreamTokenizer;\n\n dispose(): void {\n if (this.disposed) return;\n this.disposed = true;\n this.unstable = [];\n this.releaseSource();\n }\n\n protected copyStateTo(clone: BaseStreamTokenizer): void {\n clone.stableOffset = this.stableOffset;\n clone.unstable = this.unstable.slice();\n clone.pendingCarriageReturn = this.pendingCarriageReturn;\n }\n\n protected assertActive(): void {\n if (this.disposed) throw new Error('stream tokenizer is disposed');\n }\n\n /** Forget the provisional line and any lexer state. */\n protected abstract resetSource(): void;\n\n protected abstract releaseSource(): void;\n}\n"],"mappings":"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"}