bridgerte 0.9.23 → 0.9.24

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/dist/index.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("./index-GaS65GL0.cjs"),a=require("./bridge.cjs"),e=require("./native-spec.cjs"),n=require("./index-TJ1HUDJO.cjs"),o=require("./index-N9gbDsDi.cjs"),r=require("./core.cjs"),i=require("./index-DF8OhKI4.cjs");exports.BRIDGERTE_CONTENT_VERSION=t.BRIDGERTE_CONTENT_VERSION;exports.BRIDGERTE_TABLE_INSERT_MAX_COLS=t.BRIDGERTE_TABLE_INSERT_MAX_COLS;exports.BRIDGERTE_TABLE_INSERT_MAX_ROWS=t.BRIDGERTE_TABLE_INSERT_MAX_ROWS;exports.BRIDGE_CONTENT_CHANGE_DEBOUNCE_MS=a.BRIDGE_CONTENT_CHANGE_DEBOUNCE_MS;exports.BRIDGE_HEIGHT_CHANGE_THROTTLE_MS=a.BRIDGE_HEIGHT_CHANGE_THROTTLE_MS;exports.defaultBridgeEventTiming=a.defaultBridgeEventTiming;exports.isBridgeMessage=a.isBridgeMessage;exports.codeBlockLanguagePanel=e.codeBlockLanguagePanel;exports.codeBlockLanguagePayloadPanel=e.codeBlockLanguagePayloadPanel;exports.createDisabledCommandStates=e.createDisabledCommandStates;exports.defaultMenuSchema=e.defaultMenuSchema;exports.defaultToolbarConfig=e.defaultToolbarConfig;exports.getCommandStateMatchValue=e.getCommandStateMatchValue;exports.isCommandStateForCommand=e.isCommandStateForCommand;exports.isMenuItemCommandState=e.isMenuItemCommandState;exports.resolveToolbarMenu=e.resolveToolbarMenu;exports.tableHeaderMenuItems=e.tableHeaderMenuItems;exports.createFloatingLayer=n.createFloatingLayer;exports.createRichTextEditor=n.createRichTextEditor;exports.createWebViewBridgeRuntime=n.createWebViewBridgeRuntime;exports.createRichTextToolbar=o.createRichTextToolbar;exports.hasMeaningfulHtmlContent=o.hasMeaningfulHtmlContent;exports.isEditorContentEmpty=r.isEditorContentEmpty;exports.resolvePayloadPanelSchema=i.resolvePayloadPanelSchema;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("./index-GaS65GL0.cjs"),a=require("./bridge.cjs"),e=require("./native-spec.cjs"),n=require("./index-CQx3NGKY.cjs"),o=require("./index-79mXjylo.cjs"),r=require("./core.cjs"),i=require("./index-DF8OhKI4.cjs");exports.BRIDGERTE_CONTENT_VERSION=t.BRIDGERTE_CONTENT_VERSION;exports.BRIDGERTE_TABLE_INSERT_MAX_COLS=t.BRIDGERTE_TABLE_INSERT_MAX_COLS;exports.BRIDGERTE_TABLE_INSERT_MAX_ROWS=t.BRIDGERTE_TABLE_INSERT_MAX_ROWS;exports.BRIDGE_CONTENT_CHANGE_DEBOUNCE_MS=a.BRIDGE_CONTENT_CHANGE_DEBOUNCE_MS;exports.BRIDGE_HEIGHT_CHANGE_THROTTLE_MS=a.BRIDGE_HEIGHT_CHANGE_THROTTLE_MS;exports.defaultBridgeEventTiming=a.defaultBridgeEventTiming;exports.isBridgeMessage=a.isBridgeMessage;exports.codeBlockLanguagePanel=e.codeBlockLanguagePanel;exports.codeBlockLanguagePayloadPanel=e.codeBlockLanguagePayloadPanel;exports.createDisabledCommandStates=e.createDisabledCommandStates;exports.defaultMenuSchema=e.defaultMenuSchema;exports.defaultToolbarConfig=e.defaultToolbarConfig;exports.getCommandStateMatchValue=e.getCommandStateMatchValue;exports.isCommandStateForCommand=e.isCommandStateForCommand;exports.isMenuItemCommandState=e.isMenuItemCommandState;exports.resolveToolbarMenu=e.resolveToolbarMenu;exports.tableHeaderMenuItems=e.tableHeaderMenuItems;exports.createFloatingLayer=n.createFloatingLayer;exports.createRichTextEditor=n.createRichTextEditor;exports.createWebViewBridgeRuntime=n.createWebViewBridgeRuntime;exports.createRichTextToolbar=o.createRichTextToolbar;exports.hasMeaningfulHtmlContent=o.hasMeaningfulHtmlContent;exports.isEditorContentEmpty=r.isEditorContentEmpty;exports.resolvePayloadPanelSchema=i.resolvePayloadPanelSchema;
2
2
  //# sourceMappingURL=index.cjs.map
package/dist/index.js CHANGED
@@ -1,8 +1,8 @@
1
1
  import { B as t, a as o, b as r } from "./index-CuNKUHed.js";
2
2
  import { BRIDGE_CONTENT_CHANGE_DEBOUNCE_MS as n, BRIDGE_HEIGHT_CHANGE_THROTTLE_MS as E, defaultBridgeEventTiming as l, isBridgeMessage as s } from "./bridge.js";
3
3
  import { codeBlockLanguagePanel as d, codeBlockLanguagePayloadPanel as i, createDisabledCommandStates as _, defaultMenuSchema as c, defaultToolbarConfig as R, getCommandStateMatchValue as B, isCommandStateForCommand as C, isMenuItemCommandState as g, resolveToolbarMenu as S, tableHeaderMenuItems as f } from "./native-spec.js";
4
- import { c as I, a as M, b as N } from "./index-CBjqWsRZ.js";
5
- import { c as b, h as p } from "./index-DqIXwEPo.js";
4
+ import { c as I, a as M, b as N } from "./index-CCAOnvex.js";
5
+ import { c as b, h as p } from "./index-BHrFfZ7O.js";
6
6
  import { isEditorContentEmpty as h } from "./core.js";
7
7
  import { r as H } from "./index-sbZNOcCB.js";
8
8
  export {
@@ -0,0 +1,2 @@
1
+ "use strict";const g="one-light",t={keyword:"#a626a4",function:"#4078f2",operator:"#0184bc",tag:"#c18401",property:"#e45649",string:"#50a14f",attrName:"#986801"},i={[t.keyword]:"keyword",[t.function]:"function",[t.operator]:"operator",[t.tag]:"tag",[t.property]:"property",[t.string]:"string",[t.attrName]:"attr-name"},h=e=>e?i[e.toLowerCase()]:void 0,n=e=>{let o=0;for(let r=0;r<e.length;r+=1)o=Math.imul(o^e.charCodeAt(r),16777619);return(o>>>0).toString(36)};exports.bridgeCodeHighlightTheme=g;exports.getCodeHighlightCodeHash=n;exports.getHighlightTypeFromColor=h;
2
+ //# sourceMappingURL=shikiHighlightData-DU78Iupf.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shikiHighlightData-DU78Iupf.cjs","sources":["../../dom/src/codeHighlight/shikiHighlightData.ts"],"sourcesContent":["export const bridgeCodeHighlightTheme = 'one-light';\n\n/*\n * Shiki one-light 输出的是主题色 inline style;这里把色值集中为语义常量,\n * 避免导出 HTML 时把主题色 inline style 当成内容协议持久化。\n */\nconst oneLightColorByHighlightType = {\n keyword: '#a626a4',\n function: '#4078f2',\n operator: '#0184bc',\n tag: '#c18401',\n property: '#e45649',\n string: '#50a14f',\n attrName: '#986801'\n} as const;\n\nconst codeHighlightTypeByOneLightColor: Record<string, string | undefined> = {\n [oneLightColorByHighlightType.keyword]: 'keyword',\n [oneLightColorByHighlightType.function]: 'function',\n [oneLightColorByHighlightType.operator]: 'operator',\n [oneLightColorByHighlightType.tag]: 'tag',\n [oneLightColorByHighlightType.property]: 'property',\n [oneLightColorByHighlightType.string]: 'string',\n [oneLightColorByHighlightType.attrName]: 'attr-name'\n};\n\nexport const getHighlightTypeFromColor = (color: string | undefined) => (\n color ? codeHighlightTypeByOneLightColor[color.toLowerCase()] : undefined\n);\n\nexport const getHighlightTypeFromStyle = (style: string) => {\n const [, color] = style.match(/(?:^|;)color:\\s*(#[0-9a-f]{3,8})/i) ?? [];\n\n return getHighlightTypeFromColor(color);\n};\n\n/*\n * code hash 只用于长代码任务签名去重,不承担安全用途。这里用稳定的 32 位滚动 hash,\n * 避免把完整 code 拼进 pending task signature 造成重复大字符串分配。\n */\nexport const getCodeHighlightCodeHash = (code: string) => {\n let hash = 0;\n\n for (let index = 0; index < code.length; index += 1) {\n hash = Math.imul(hash ^ code.charCodeAt(index), 16777619);\n }\n\n return (hash >>> 0).toString(36);\n};\n"],"names":["bridgeCodeHighlightTheme","oneLightColorByHighlightType","codeHighlightTypeByOneLightColor","getHighlightTypeFromColor","color","getCodeHighlightCodeHash","code","hash","index"],"mappings":"aAAO,MAAMA,EAA2B,YAMlCC,EAA+B,CACnC,QAAS,UACT,SAAU,UACV,SAAU,UACV,IAAK,UACL,SAAU,UACV,OAAQ,UACR,SAAU,SACZ,EAEMC,EAAuE,CAC3E,CAACD,EAA6B,OAAO,EAAG,UACxC,CAACA,EAA6B,QAAQ,EAAG,WACzC,CAACA,EAA6B,QAAQ,EAAG,WACzC,CAACA,EAA6B,GAAG,EAAG,MACpC,CAACA,EAA6B,QAAQ,EAAG,WACzC,CAACA,EAA6B,MAAM,EAAG,SACvC,CAACA,EAA6B,QAAQ,EAAG,WAC3C,EAEaE,EAA6BC,GACxCA,EAAQF,EAAiCE,EAAM,YAAA,CAAa,EAAI,OAarDC,EAA4BC,GAAiB,CACxD,IAAIC,EAAO,EAEX,QAASC,EAAQ,EAAGA,EAAQF,EAAK,OAAQE,GAAS,EAChDD,EAAO,KAAK,KAAKA,EAAOD,EAAK,WAAWE,CAAK,EAAG,QAAQ,EAG1D,OAAQD,IAAS,GAAG,SAAS,EAAE,CACjC"}
@@ -0,0 +1,28 @@
1
+ const a = "one-light", t = {
2
+ keyword: "#a626a4",
3
+ function: "#4078f2",
4
+ operator: "#0184bc",
5
+ tag: "#c18401",
6
+ property: "#e45649",
7
+ string: "#50a14f",
8
+ attrName: "#986801"
9
+ }, g = {
10
+ [t.keyword]: "keyword",
11
+ [t.function]: "function",
12
+ [t.operator]: "operator",
13
+ [t.tag]: "tag",
14
+ [t.property]: "property",
15
+ [t.string]: "string",
16
+ [t.attrName]: "attr-name"
17
+ }, i = (o) => o ? g[o.toLowerCase()] : void 0, n = (o) => {
18
+ let e = 0;
19
+ for (let r = 0; r < o.length; r += 1)
20
+ e = Math.imul(e ^ o.charCodeAt(r), 16777619);
21
+ return (e >>> 0).toString(36);
22
+ };
23
+ export {
24
+ n as a,
25
+ a as b,
26
+ i as g
27
+ };
28
+ //# sourceMappingURL=shikiHighlightData-Dn-hlfiF.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shikiHighlightData-Dn-hlfiF.js","sources":["../../dom/src/codeHighlight/shikiHighlightData.ts"],"sourcesContent":["export const bridgeCodeHighlightTheme = 'one-light';\n\n/*\n * Shiki one-light 输出的是主题色 inline style;这里把色值集中为语义常量,\n * 避免导出 HTML 时把主题色 inline style 当成内容协议持久化。\n */\nconst oneLightColorByHighlightType = {\n keyword: '#a626a4',\n function: '#4078f2',\n operator: '#0184bc',\n tag: '#c18401',\n property: '#e45649',\n string: '#50a14f',\n attrName: '#986801'\n} as const;\n\nconst codeHighlightTypeByOneLightColor: Record<string, string | undefined> = {\n [oneLightColorByHighlightType.keyword]: 'keyword',\n [oneLightColorByHighlightType.function]: 'function',\n [oneLightColorByHighlightType.operator]: 'operator',\n [oneLightColorByHighlightType.tag]: 'tag',\n [oneLightColorByHighlightType.property]: 'property',\n [oneLightColorByHighlightType.string]: 'string',\n [oneLightColorByHighlightType.attrName]: 'attr-name'\n};\n\nexport const getHighlightTypeFromColor = (color: string | undefined) => (\n color ? codeHighlightTypeByOneLightColor[color.toLowerCase()] : undefined\n);\n\nexport const getHighlightTypeFromStyle = (style: string) => {\n const [, color] = style.match(/(?:^|;)color:\\s*(#[0-9a-f]{3,8})/i) ?? [];\n\n return getHighlightTypeFromColor(color);\n};\n\n/*\n * code hash 只用于长代码任务签名去重,不承担安全用途。这里用稳定的 32 位滚动 hash,\n * 避免把完整 code 拼进 pending task signature 造成重复大字符串分配。\n */\nexport const getCodeHighlightCodeHash = (code: string) => {\n let hash = 0;\n\n for (let index = 0; index < code.length; index += 1) {\n hash = Math.imul(hash ^ code.charCodeAt(index), 16777619);\n }\n\n return (hash >>> 0).toString(36);\n};\n"],"names":["bridgeCodeHighlightTheme","oneLightColorByHighlightType","codeHighlightTypeByOneLightColor","getHighlightTypeFromColor","color","getCodeHighlightCodeHash","code","hash","index"],"mappings":"AAAO,MAAMA,IAA2B,aAMlCC,IAA+B;AAAA,EACnC,SAAS;AAAA,EACT,UAAU;AAAA,EACV,UAAU;AAAA,EACV,KAAK;AAAA,EACL,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,UAAU;AACZ,GAEMC,IAAuE;AAAA,EAC3E,CAACD,EAA6B,OAAO,GAAG;AAAA,EACxC,CAACA,EAA6B,QAAQ,GAAG;AAAA,EACzC,CAACA,EAA6B,QAAQ,GAAG;AAAA,EACzC,CAACA,EAA6B,GAAG,GAAG;AAAA,EACpC,CAACA,EAA6B,QAAQ,GAAG;AAAA,EACzC,CAACA,EAA6B,MAAM,GAAG;AAAA,EACvC,CAACA,EAA6B,QAAQ,GAAG;AAC3C,GAEaE,IAA4B,CAACC,MACxCA,IAAQF,EAAiCE,EAAM,YAAA,CAAa,IAAI,QAarDC,IAA2B,CAACC,MAAiB;AACxD,MAAIC,IAAO;AAEX,WAASC,IAAQ,GAAGA,IAAQF,EAAK,QAAQE,KAAS;AAChD,IAAAD,IAAO,KAAK,KAAKA,IAAOD,EAAK,WAAWE,CAAK,GAAG,QAAQ;AAG1D,UAAQD,MAAS,GAAG,SAAS,EAAE;AACjC;"}
@@ -0,0 +1,3 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const f=require("@shikijs/core"),m=require("@shikijs/engine-javascript"),w=require("shiki/langs"),x=require("shiki/themes"),y=require("./shikiHighlightData-DU78Iupf.cjs"),L=/^diff-([\w-]+)/i;let r=null;const g=new Set,u=new Set,c=()=>(r||(r=f.createHighlighterCoreSync({engine:m.createJavaScriptRegexEngine(),langs:[],themes:[]})),r),p=e=>{var i;const n=(i=L.exec(e))==null?void 0:i[1];return{isDiff:n!==void 0,languageId:n??e}},I=async e=>{if(u.has(e))return;const n=x.bundledThemesInfo.find(t=>t.id===e);if(!n)throw new Error(`Unsupported Shiki theme: ${e}`);await c().loadTheme(n.import()),u.add(e)},S=async e=>{const{languageId:n}=p(e);if(g.has(n)||f.isSpecialLang(n)){g.add(n);return}const t=w.bundledLanguagesInfo.find(i=>{var s;return i.id===n||((s=i.aliases)==null?void 0:s.includes(n))});if(!t)throw new Error(`Unsupported Shiki language: ${e}`);await c().loadLanguage(t.import()),g.add(n)},k=e=>e===""?[]:[{text:e}],q=(e,n)=>{const t=[];return e.forEach((i,s)=>{let o=i.content;if(n&&s===0&&o.length>0){const d=["+","-",">","<"," "],T=["inserted","deleted","inserted","deleted","unchanged"],a=d.indexOf(o.slice(0,1));if(a!==-1){const l=d[a],h=T[a];if(!l||!h)return;t.push({highlightType:h,text:l}),o=o.slice(1)}}o!==""&&t.push({highlightType:y.getHighlightTypeFromColor(i.color),text:o})}),t},H=async({code:e,language:n,theme:t})=>{if(!n)return e.split(`
2
+ `).map(k);const{isDiff:i,languageId:s}=p(n);return await I(t),await S(n),c().codeToTokens(e,{lang:s,theme:t}).tokens.map(o=>q(o,i))};exports.tokenizeCodeHighlightRequest=H;
3
+ //# sourceMappingURL=shikiTokenizerRuntime.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shikiTokenizerRuntime.cjs","sources":["../../dom/src/codeHighlight/shikiTokenizerRuntime.ts"],"sourcesContent":["import {\n createHighlighterCoreSync,\n isSpecialLang,\n type HighlighterCore\n} from '@shikijs/core';\nimport { createJavaScriptRegexEngine } from '@shikijs/engine-javascript';\nimport { bundledLanguagesInfo } from 'shiki/langs';\nimport { bundledThemesInfo } from 'shiki/themes';\nimport type { ThemedToken } from '@shikijs/types';\nimport type {\n CodeHighlightWorkerLine,\n CodeHighlightWorkerRequest\n} from './runtime/type';\nimport { getHighlightTypeFromColor } from './shikiHighlightData';\n\nconst diffLanguageRegex = /^diff-([\\w-]+)/i;\n\nlet highlighter: HighlighterCore | null = null;\nconst loadedLanguages = new Set<string>();\nconst loadedThemes = new Set<string>();\n\nconst getHighlighter = () => {\n if (!highlighter) {\n /*\n * Shiki runtime 可以在 worker 或 worker 失败后的 fallback chunk 中运行。\n * 主编辑器入口不静态 import 这个模块,避免普通编辑器初始化就拉 grammar/theme 运行时。\n */\n highlighter = createHighlighterCoreSync({\n engine: createJavaScriptRegexEngine(),\n langs: [],\n themes: []\n });\n }\n\n return highlighter;\n};\n\nconst resolveLanguage = (language: string) => {\n const diffedLanguage = diffLanguageRegex.exec(language)?.[1];\n const languageId = diffedLanguage ?? language;\n\n return {\n isDiff: diffedLanguage !== undefined,\n languageId\n };\n};\n\nconst loadTheme = async (theme: string) => {\n if (loadedThemes.has(theme)) return;\n\n const themeInfo = bundledThemesInfo.find((info) => info.id === theme);\n if (!themeInfo) throw new Error(`Unsupported Shiki theme: ${theme}`);\n\n await getHighlighter().loadTheme(themeInfo.import());\n loadedThemes.add(theme);\n};\n\nconst loadLanguage = async (language: string) => {\n const { languageId } = resolveLanguage(language);\n\n if (loadedLanguages.has(languageId) || isSpecialLang(languageId)) {\n loadedLanguages.add(languageId);\n return;\n }\n\n const languageInfo = bundledLanguagesInfo.find((info) => (\n info.id === languageId || info.aliases?.includes(languageId)\n ));\n\n if (!languageInfo) throw new Error(`Unsupported Shiki language: ${language}`);\n\n await getHighlighter().loadLanguage(languageInfo.import());\n loadedLanguages.add(languageId);\n};\n\nconst createPlainTokenLine = (text: string): CodeHighlightWorkerLine => (\n text === '' ? [] : [{ text }]\n);\n\nconst mapTokenLine = (\n line: ThemedToken[],\n isDiff: boolean\n): CodeHighlightWorkerLine => {\n const result: CodeHighlightWorkerLine = [];\n\n line.forEach((token, tokenIndex) => {\n let text = token.content;\n\n if (isDiff && tokenIndex === 0 && text.length > 0) {\n const prefixes = ['+', '-', '>', '<', ' '];\n const prefixTypes = ['inserted', 'deleted', 'inserted', 'deleted', 'unchanged'];\n const prefixIndex = prefixes.indexOf(text.slice(0, 1));\n\n if (prefixIndex !== -1) {\n const prefix = prefixes[prefixIndex];\n const highlightType = prefixTypes[prefixIndex];\n\n if (!prefix || !highlightType) return;\n\n result.push({\n highlightType,\n text: prefix\n });\n text = text.slice(1);\n }\n }\n\n if (text !== '') {\n result.push({\n highlightType: getHighlightTypeFromColor(token.color),\n text\n });\n }\n });\n\n return result;\n};\n\nexport const tokenizeCodeHighlightRequest = async ({\n code,\n language,\n theme\n}: CodeHighlightWorkerRequest): Promise<CodeHighlightWorkerLine[]> => {\n if (!language) return code.split('\\n').map(createPlainTokenLine);\n\n const { isDiff, languageId } = resolveLanguage(language);\n\n await loadTheme(theme);\n await loadLanguage(language);\n\n return getHighlighter().codeToTokens(code, {\n lang: languageId,\n theme\n }).tokens.map((line) => mapTokenLine(line, isDiff));\n};\n"],"names":["diffLanguageRegex","highlighter","loadedLanguages","loadedThemes","getHighlighter","createHighlighterCoreSync","createJavaScriptRegexEngine","resolveLanguage","language","diffedLanguage","_a","loadTheme","theme","themeInfo","bundledThemesInfo","info","loadLanguage","languageId","isSpecialLang","languageInfo","bundledLanguagesInfo","createPlainTokenLine","text","mapTokenLine","line","isDiff","result","token","tokenIndex","prefixes","prefixTypes","prefixIndex","prefix","highlightType","getHighlightTypeFromColor","tokenizeCodeHighlightRequest","code"],"mappings":"2PAeMA,EAAoB,kBAE1B,IAAIC,EAAsC,KAC1C,MAAMC,MAAsB,IACtBC,MAAmB,IAEnBC,EAAiB,KAChBH,IAKHA,EAAcI,EAAAA,0BAA0B,CACtC,OAAQC,EAAAA,4BAAA,EACR,MAAO,CAAA,EACP,OAAQ,CAAA,CAAC,CACV,GAGIL,GAGHM,EAAmBC,GAAqB,OAC5C,MAAMC,GAAiBC,EAAAV,EAAkB,KAAKQ,CAAQ,IAA/B,YAAAE,EAAmC,GAG1D,MAAO,CACL,OAAQD,IAAmB,OAC3B,WAJiBA,GAAkBD,CAInC,CAEJ,EAEMG,EAAY,MAAOC,GAAkB,CACzC,GAAIT,EAAa,IAAIS,CAAK,EAAG,OAE7B,MAAMC,EAAYC,EAAAA,kBAAkB,KAAMC,GAASA,EAAK,KAAOH,CAAK,EACpE,GAAI,CAACC,EAAW,MAAM,IAAI,MAAM,4BAA4BD,CAAK,EAAE,EAEnE,MAAMR,EAAA,EAAiB,UAAUS,EAAU,QAAQ,EACnDV,EAAa,IAAIS,CAAK,CACxB,EAEMI,EAAe,MAAOR,GAAqB,CAC/C,KAAM,CAAE,WAAAS,CAAA,EAAeV,EAAgBC,CAAQ,EAE/C,GAAIN,EAAgB,IAAIe,CAAU,GAAKC,EAAAA,cAAcD,CAAU,EAAG,CAChEf,EAAgB,IAAIe,CAAU,EAC9B,MACF,CAEA,MAAME,EAAeC,EAAAA,qBAAqB,KAAML,GAAA,OAC9C,OAAAA,EAAK,KAAOE,KAAcP,EAAAK,EAAK,UAAL,YAAAL,EAAc,SAASO,IAClD,EAED,GAAI,CAACE,EAAc,MAAM,IAAI,MAAM,+BAA+BX,CAAQ,EAAE,EAE5E,MAAMJ,EAAA,EAAiB,aAAae,EAAa,QAAQ,EACzDjB,EAAgB,IAAIe,CAAU,CAChC,EAEMI,EAAwBC,GAC5BA,IAAS,GAAK,GAAK,CAAC,CAAE,KAAAA,EAAM,EAGxBC,EAAe,CACnBC,EACAC,IAC4B,CAC5B,MAAMC,EAAkC,CAAA,EAExC,OAAAF,EAAK,QAAQ,CAACG,EAAOC,IAAe,CAClC,IAAIN,EAAOK,EAAM,QAEjB,GAAIF,GAAUG,IAAe,GAAKN,EAAK,OAAS,EAAG,CACjD,MAAMO,EAAW,CAAC,IAAK,IAAK,IAAK,IAAK,GAAG,EACnCC,EAAc,CAAC,WAAY,UAAW,WAAY,UAAW,WAAW,EACxEC,EAAcF,EAAS,QAAQP,EAAK,MAAM,EAAG,CAAC,CAAC,EAErD,GAAIS,IAAgB,GAAI,CACtB,MAAMC,EAASH,EAASE,CAAW,EAC7BE,EAAgBH,EAAYC,CAAW,EAE7C,GAAI,CAACC,GAAU,CAACC,EAAe,OAE/BP,EAAO,KAAK,CACV,cAAAO,EACA,KAAMD,CAAA,CACP,EACDV,EAAOA,EAAK,MAAM,CAAC,CACrB,CACF,CAEIA,IAAS,IACXI,EAAO,KAAK,CACV,cAAeQ,EAAAA,0BAA0BP,EAAM,KAAK,EACpD,KAAAL,CAAA,CACD,CAEL,CAAC,EAEMI,CACT,EAEaS,EAA+B,MAAO,CACjD,KAAAC,EACA,SAAA5B,EACA,MAAAI,CACF,IAAsE,CACpE,GAAI,CAACJ,EAAU,OAAO4B,EAAK,MAAM;AAAA,CAAI,EAAE,IAAIf,CAAoB,EAE/D,KAAM,CAAE,OAAAI,EAAQ,WAAAR,GAAeV,EAAgBC,CAAQ,EAEvD,aAAMG,EAAUC,CAAK,EACrB,MAAMI,EAAaR,CAAQ,EAEpBJ,EAAA,EAAiB,aAAagC,EAAM,CACzC,KAAMnB,EACN,MAAAL,CAAA,CACD,EAAE,OAAO,IAAKY,GAASD,EAAaC,EAAMC,CAAM,CAAC,CACpD"}
@@ -0,0 +1,72 @@
1
+ import { isSpecialLang as m, createHighlighterCoreSync as T } from "@shikijs/core";
2
+ import { createJavaScriptRegexEngine as w } from "@shikijs/engine-javascript";
3
+ import { bundledLanguagesInfo as x } from "shiki/langs";
4
+ import { bundledThemesInfo as L } from "shiki/themes";
5
+ import { g as I } from "./shikiHighlightData-Dn-hlfiF.js";
6
+ const y = /^diff-([\w-]+)/i;
7
+ let s = null;
8
+ const d = /* @__PURE__ */ new Set(), h = /* @__PURE__ */ new Set(), g = () => (s || (s = T({
9
+ engine: w(),
10
+ langs: [],
11
+ themes: []
12
+ })), s), p = (e) => {
13
+ var i;
14
+ const n = (i = y.exec(e)) == null ? void 0 : i[1];
15
+ return {
16
+ isDiff: n !== void 0,
17
+ languageId: n ?? e
18
+ };
19
+ }, S = async (e) => {
20
+ if (h.has(e)) return;
21
+ const n = L.find((t) => t.id === e);
22
+ if (!n) throw new Error(`Unsupported Shiki theme: ${e}`);
23
+ await g().loadTheme(n.import()), h.add(e);
24
+ }, k = async (e) => {
25
+ const { languageId: n } = p(e);
26
+ if (d.has(n) || m(n)) {
27
+ d.add(n);
28
+ return;
29
+ }
30
+ const t = x.find((i) => {
31
+ var r;
32
+ return i.id === n || ((r = i.aliases) == null ? void 0 : r.includes(n));
33
+ });
34
+ if (!t) throw new Error(`Unsupported Shiki language: ${e}`);
35
+ await g().loadLanguage(t.import()), d.add(n);
36
+ }, E = (e) => e === "" ? [] : [{ text: e }], H = (e, n) => {
37
+ const t = [];
38
+ return e.forEach((i, r) => {
39
+ let o = i.content;
40
+ if (n && r === 0 && o.length > 0) {
41
+ const c = ["+", "-", ">", "<", " "], u = ["inserted", "deleted", "inserted", "deleted", "unchanged"], a = c.indexOf(o.slice(0, 1));
42
+ if (a !== -1) {
43
+ const l = c[a], f = u[a];
44
+ if (!l || !f) return;
45
+ t.push({
46
+ highlightType: f,
47
+ text: l
48
+ }), o = o.slice(1);
49
+ }
50
+ }
51
+ o !== "" && t.push({
52
+ highlightType: I(i.color),
53
+ text: o
54
+ });
55
+ }), t;
56
+ }, U = async ({
57
+ code: e,
58
+ language: n,
59
+ theme: t
60
+ }) => {
61
+ if (!n) return e.split(`
62
+ `).map(E);
63
+ const { isDiff: i, languageId: r } = p(n);
64
+ return await S(t), await k(n), g().codeToTokens(e, {
65
+ lang: r,
66
+ theme: t
67
+ }).tokens.map((o) => H(o, i));
68
+ };
69
+ export {
70
+ U as tokenizeCodeHighlightRequest
71
+ };
72
+ //# sourceMappingURL=shikiTokenizerRuntime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shikiTokenizerRuntime.js","sources":["../../dom/src/codeHighlight/shikiTokenizerRuntime.ts"],"sourcesContent":["import {\n createHighlighterCoreSync,\n isSpecialLang,\n type HighlighterCore\n} from '@shikijs/core';\nimport { createJavaScriptRegexEngine } from '@shikijs/engine-javascript';\nimport { bundledLanguagesInfo } from 'shiki/langs';\nimport { bundledThemesInfo } from 'shiki/themes';\nimport type { ThemedToken } from '@shikijs/types';\nimport type {\n CodeHighlightWorkerLine,\n CodeHighlightWorkerRequest\n} from './runtime/type';\nimport { getHighlightTypeFromColor } from './shikiHighlightData';\n\nconst diffLanguageRegex = /^diff-([\\w-]+)/i;\n\nlet highlighter: HighlighterCore | null = null;\nconst loadedLanguages = new Set<string>();\nconst loadedThemes = new Set<string>();\n\nconst getHighlighter = () => {\n if (!highlighter) {\n /*\n * Shiki runtime 可以在 worker 或 worker 失败后的 fallback chunk 中运行。\n * 主编辑器入口不静态 import 这个模块,避免普通编辑器初始化就拉 grammar/theme 运行时。\n */\n highlighter = createHighlighterCoreSync({\n engine: createJavaScriptRegexEngine(),\n langs: [],\n themes: []\n });\n }\n\n return highlighter;\n};\n\nconst resolveLanguage = (language: string) => {\n const diffedLanguage = diffLanguageRegex.exec(language)?.[1];\n const languageId = diffedLanguage ?? language;\n\n return {\n isDiff: diffedLanguage !== undefined,\n languageId\n };\n};\n\nconst loadTheme = async (theme: string) => {\n if (loadedThemes.has(theme)) return;\n\n const themeInfo = bundledThemesInfo.find((info) => info.id === theme);\n if (!themeInfo) throw new Error(`Unsupported Shiki theme: ${theme}`);\n\n await getHighlighter().loadTheme(themeInfo.import());\n loadedThemes.add(theme);\n};\n\nconst loadLanguage = async (language: string) => {\n const { languageId } = resolveLanguage(language);\n\n if (loadedLanguages.has(languageId) || isSpecialLang(languageId)) {\n loadedLanguages.add(languageId);\n return;\n }\n\n const languageInfo = bundledLanguagesInfo.find((info) => (\n info.id === languageId || info.aliases?.includes(languageId)\n ));\n\n if (!languageInfo) throw new Error(`Unsupported Shiki language: ${language}`);\n\n await getHighlighter().loadLanguage(languageInfo.import());\n loadedLanguages.add(languageId);\n};\n\nconst createPlainTokenLine = (text: string): CodeHighlightWorkerLine => (\n text === '' ? [] : [{ text }]\n);\n\nconst mapTokenLine = (\n line: ThemedToken[],\n isDiff: boolean\n): CodeHighlightWorkerLine => {\n const result: CodeHighlightWorkerLine = [];\n\n line.forEach((token, tokenIndex) => {\n let text = token.content;\n\n if (isDiff && tokenIndex === 0 && text.length > 0) {\n const prefixes = ['+', '-', '>', '<', ' '];\n const prefixTypes = ['inserted', 'deleted', 'inserted', 'deleted', 'unchanged'];\n const prefixIndex = prefixes.indexOf(text.slice(0, 1));\n\n if (prefixIndex !== -1) {\n const prefix = prefixes[prefixIndex];\n const highlightType = prefixTypes[prefixIndex];\n\n if (!prefix || !highlightType) return;\n\n result.push({\n highlightType,\n text: prefix\n });\n text = text.slice(1);\n }\n }\n\n if (text !== '') {\n result.push({\n highlightType: getHighlightTypeFromColor(token.color),\n text\n });\n }\n });\n\n return result;\n};\n\nexport const tokenizeCodeHighlightRequest = async ({\n code,\n language,\n theme\n}: CodeHighlightWorkerRequest): Promise<CodeHighlightWorkerLine[]> => {\n if (!language) return code.split('\\n').map(createPlainTokenLine);\n\n const { isDiff, languageId } = resolveLanguage(language);\n\n await loadTheme(theme);\n await loadLanguage(language);\n\n return getHighlighter().codeToTokens(code, {\n lang: languageId,\n theme\n }).tokens.map((line) => mapTokenLine(line, isDiff));\n};\n"],"names":["diffLanguageRegex","highlighter","loadedLanguages","loadedThemes","getHighlighter","createHighlighterCoreSync","createJavaScriptRegexEngine","resolveLanguage","language","diffedLanguage","_a","loadTheme","theme","themeInfo","bundledThemesInfo","info","loadLanguage","languageId","isSpecialLang","languageInfo","bundledLanguagesInfo","createPlainTokenLine","text","mapTokenLine","line","isDiff","result","token","tokenIndex","prefixes","prefixTypes","prefixIndex","prefix","highlightType","getHighlightTypeFromColor","tokenizeCodeHighlightRequest","code"],"mappings":"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"}
package/dist/webview.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./index-TJ1HUDJO.cjs");exports.createWebViewBridgeRuntime=e.createWebViewBridgeRuntime;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./index-CQx3NGKY.cjs");exports.createWebViewBridgeRuntime=e.createWebViewBridgeRuntime;
2
2
  //# sourceMappingURL=webview.cjs.map
package/dist/webview.js CHANGED
@@ -1,4 +1,4 @@
1
- import { b as i } from "./index-CBjqWsRZ.js";
1
+ import { b as i } from "./index-CCAOnvex.js";
2
2
  export {
3
3
  i as createWebViewBridgeRuntime
4
4
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bridgerte",
3
- "version": "0.9.23",
3
+ "version": "0.9.24",
4
4
  "description": "Cross-platform rich text editor with WebView bridge support.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",