@twohash/shiki 0.1.0-alpha.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.
@@ -0,0 +1,3 @@
1
+ export { transformerTwohashWithResult, transformerTwohashFromMap, processTwohashCode, processTwohashBlocks } from './transformer.js';
2
+ export type { TransformerTwohashOptions, TwohashCodeBlock, TwohashResultMap } from './transformer.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,4BAA4B,EAAE,yBAAyB,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAA;AACpI,YAAY,EAAE,yBAAyB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA"}
package/dist/index.js ADDED
@@ -0,0 +1,2 @@
1
+ export { transformerTwohashWithResult, transformerTwohashFromMap, processTwohashCode, processTwohashBlocks } from './transformer.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,4BAA4B,EAAE,yBAAyB,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAA"}
@@ -0,0 +1,17 @@
1
+ import { type TwohashOptions, type TwohashResult } from '@twohash/core';
2
+ import type { ShikiTransformer } from 'shiki';
3
+ export interface TransformerTwohashOptions extends TwohashOptions {
4
+ project?: string;
5
+ region?: string;
6
+ }
7
+ export interface TwohashCodeBlock {
8
+ code: string;
9
+ project?: string;
10
+ region?: string;
11
+ }
12
+ export type TwohashResultMap = Map<string, TwohashResult>;
13
+ export declare function transformerTwohashWithResult(result: TwohashResult): ShikiTransformer;
14
+ export declare function transformerTwohashFromMap(resultMap: TwohashResultMap): ShikiTransformer;
15
+ export declare function processTwohashBlocks(blocks: Array<string | TwohashCodeBlock>, options?: TransformerTwohashOptions): Promise<TwohashResultMap>;
16
+ export declare function processTwohashCode(code: string, options?: TransformerTwohashOptions): Promise<TwohashResult | null>;
17
+ //# sourceMappingURL=transformer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transformer.d.ts","sourceRoot":"","sources":["../src/transformer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,cAAc,EAAE,KAAK,aAAa,EAA2B,MAAM,eAAe,CAAA;AAE/G,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,OAAO,CAAA;AAE7C,MAAM,WAAW,yBAA0B,SAAQ,cAAc;IAC/D,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,MAAM,gBAAgB,GAAG,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;AAIzD,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,aAAa,GAAG,gBAAgB,CAcpF;AAID,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,gBAAgB,GAAG,gBAAgB,CAqBvF;AAGD,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,KAAK,CAAC,MAAM,GAAG,gBAAgB,CAAC,EACxC,OAAO,GAAE,yBAA8B,GACtC,OAAO,CAAC,gBAAgB,CAAC,CAyB3B;AAGD,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,yBAA8B,GACtC,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAG/B"}
@@ -0,0 +1,245 @@
1
+ import { createTwohash } from '@twohash/core';
2
+ import { createHash } from 'node:crypto';
3
+ // Pre-processed transformer that takes an already-computed result.
4
+ // This is the recommended approach since Shiki's preprocess hook is synchronous.
5
+ export function transformerTwohashWithResult(result) {
6
+ return {
7
+ name: 'twohash',
8
+ preprocess() {
9
+ return result.code;
10
+ },
11
+ root(hast) {
12
+ injectHovers(hast, result);
13
+ injectErrors(hast, result);
14
+ injectCompletions(hast, result);
15
+ },
16
+ };
17
+ }
18
+ // Map-based transformer: looks up pre-computed results by hashing incoming code.
19
+ // Use with processTwohashBlocks() for the recommended two-step pattern.
20
+ export function transformerTwohashFromMap(resultMap) {
21
+ let currentResult;
22
+ return {
23
+ name: 'twohash',
24
+ preprocess(code) {
25
+ const hash = createHash('sha256').update(code).digest('hex');
26
+ currentResult = resultMap.get(hash);
27
+ return currentResult?.code;
28
+ },
29
+ root(hast) {
30
+ if (!currentResult)
31
+ return;
32
+ const result = currentResult;
33
+ currentResult = undefined;
34
+ injectHovers(hast, result);
35
+ injectErrors(hast, result);
36
+ injectCompletions(hast, result);
37
+ },
38
+ };
39
+ }
40
+ // Batch-process multiple code blocks concurrently, returning a result map keyed by code hash.
41
+ export async function processTwohashBlocks(blocks, options = {}) {
42
+ const twohash = createTwohash(options);
43
+ const resultMap = new Map();
44
+ const tasks = blocks
45
+ .map(block => {
46
+ const code = typeof block === 'string' ? block : block.code;
47
+ const project = typeof block === 'string' ? options.project : (block.project ?? options.project);
48
+ const region = typeof block === 'string' ? options.region : (block.region ?? options.region);
49
+ return { code, project, region };
50
+ });
51
+ const results = await Promise.all(tasks.map(({ code, project, region }) => twohash.process({ code, project, region }).then(result => ({
52
+ hash: createHash('sha256').update(code).digest('hex'),
53
+ result,
54
+ }))));
55
+ for (const { hash, result } of results) {
56
+ resultMap.set(hash, result);
57
+ }
58
+ return resultMap;
59
+ }
60
+ // Helper to pre-process code blocks before running Shiki
61
+ export async function processTwohashCode(code, options = {}) {
62
+ const twohash = createTwohash(options);
63
+ return twohash.process({ code, project: options.project, region: options.region });
64
+ }
65
+ // Global counter ensures unique CSS anchor names across multiple code blocks on a page.
66
+ let anchorCounter = 0;
67
+ function h(tag, props, children) {
68
+ return { type: 'element', tagName: tag, properties: props, children };
69
+ }
70
+ function hText(value) {
71
+ return { type: 'text', value };
72
+ }
73
+ function injectHovers(root, result) {
74
+ const lines = findCodeLines(root);
75
+ // Group hovers by line, then process each line's hovers right-to-left
76
+ // so that injected popup nodes don't shift column positions of earlier hovers.
77
+ const hoversByLine = new Map();
78
+ for (let i = 0; i < result.hovers.length; i++) {
79
+ const hover = result.hovers[i];
80
+ let group = hoversByLine.get(hover.line);
81
+ if (!group) {
82
+ group = [];
83
+ hoversByLine.set(hover.line, group);
84
+ }
85
+ group.push({ hover, index: i });
86
+ }
87
+ for (const [lineIdx, group] of hoversByLine) {
88
+ const line = lines[lineIdx];
89
+ if (!line)
90
+ continue;
91
+ // Sort right-to-left by character position
92
+ group.sort((a, b) => b.hover.character - a.hover.character);
93
+ for (const { hover } of group) {
94
+ const anchorName = `--th-${anchorCounter++}`;
95
+ const partNodes = hover.parts.map((part) => h('span', { class: `twohash-${part.kind}` }, [hText(part.text)]));
96
+ const popupChildren = [
97
+ h('code', { class: 'twohash-popup-code' }, partNodes),
98
+ ];
99
+ if (hover.docs?.summary) {
100
+ popupChildren.push(h('div', { class: 'twohash-popup-docs' }, [hText(hover.docs.summary)]));
101
+ }
102
+ wrapTokenAtPosition(line, hover.character, hover.length, anchorName, popupChildren, hover.persistent);
103
+ }
104
+ }
105
+ }
106
+ const CS_CODE_REGEX = /^CS\d+$/;
107
+ function buildErrorCodeNode(code) {
108
+ if (CS_CODE_REGEX.test(code)) {
109
+ return h('a', {
110
+ class: 'twohash-error-code',
111
+ href: `https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/compiler-messages/${code.toLowerCase()}`,
112
+ target: '_blank',
113
+ rel: 'noopener',
114
+ }, [hText(code)]);
115
+ }
116
+ return h('span', { class: 'twohash-error-code' }, [hText(code)]);
117
+ }
118
+ function injectErrors(root, result) {
119
+ const lines = findCodeLines(root);
120
+ for (const error of result.errors) {
121
+ const severityClass = `twohash-severity-${error.severity}`;
122
+ const errorMessage = h('div', { class: `twohash-error-message ${severityClass}` }, [
123
+ buildErrorCodeNode(error.code),
124
+ hText(': '),
125
+ hText(error.message),
126
+ ]);
127
+ if (error.endLine != null && error.endLine > error.line) {
128
+ // Multi-line: place message after last affected line
129
+ const lastLine = lines[error.endLine];
130
+ if (lastLine?.children) {
131
+ lastLine.children.push(errorMessage);
132
+ }
133
+ }
134
+ else {
135
+ // Single-line
136
+ const line = lines[error.line];
137
+ if (!line)
138
+ continue;
139
+ if (line.children) {
140
+ line.children.push(errorMessage);
141
+ }
142
+ }
143
+ }
144
+ }
145
+ function injectCompletions(root, result) {
146
+ if (!result.completions || result.completions.length === 0)
147
+ return;
148
+ const lines = findCodeLines(root);
149
+ for (const completion of result.completions) {
150
+ const line = lines[completion.line];
151
+ if (!line)
152
+ continue;
153
+ const items = completion.items.map(item => h('li', { class: `twohash-completion-item twohash-completion-kind-${item.kind}` }, [
154
+ h('span', { class: 'twohash-completion-kind' }, [hText(item.kind)]),
155
+ h('span', { class: 'twohash-completion-label' }, [hText(item.label)]),
156
+ ...(item.detail ? [h('span', { class: 'twohash-completion-detail' }, [hText(item.detail)])] : []),
157
+ ]));
158
+ const completionList = h('ul', { class: 'twohash-completion-list' }, items);
159
+ if (line.children) {
160
+ line.children.push(completionList);
161
+ }
162
+ }
163
+ }
164
+ function findCodeLines(node) {
165
+ const lines = [];
166
+ walkNode(node, (n) => {
167
+ if (n.tagName === 'span' && n.properties?.class === 'line') {
168
+ lines.push(n);
169
+ }
170
+ });
171
+ return lines;
172
+ }
173
+ function walkNode(node, visitor) {
174
+ visitor(node);
175
+ if (node.children) {
176
+ for (const child of node.children) {
177
+ if (child.type === 'element') {
178
+ walkNode(child, visitor);
179
+ }
180
+ }
181
+ }
182
+ }
183
+ function wrapTokenAtPosition(line, character, length, anchorName, popupChildren, persistent) {
184
+ const hoverClass = persistent ? 'twohash-hover twohash-hover-persistent' : 'twohash-hover';
185
+ if (!line.children)
186
+ return;
187
+ let col = 0;
188
+ const targetStart = character;
189
+ const targetEnd = character + length;
190
+ for (let i = 0; i < line.children.length; i++) {
191
+ const child = line.children[i];
192
+ const text = getTextContent(child);
193
+ const spanStart = col;
194
+ const spanEnd = col + text.length;
195
+ if (spanStart <= targetStart && spanEnd >= targetEnd) {
196
+ const offsetInToken = targetStart - spanStart;
197
+ const tokenText = text;
198
+ // If the hover covers the whole token, wrap it directly
199
+ if (offsetInToken === 0 && length === tokenText.length) {
200
+ const wrapper = h('span', {
201
+ class: hoverClass,
202
+ style: `anchor-name: ${anchorName}`,
203
+ }, [child]);
204
+ const popup = h('div', {
205
+ class: 'twohash-popup',
206
+ style: `position-anchor: ${anchorName}`,
207
+ }, popupChildren);
208
+ line.children.splice(i, 1, wrapper, popup);
209
+ return;
210
+ }
211
+ // Otherwise, split the token: [before][hover target][after]
212
+ const props = child.tagName === 'span' ? { ...(child.properties ?? {}) } : {};
213
+ const parts = [];
214
+ if (offsetInToken > 0) {
215
+ parts.push(h('span', { ...props }, [hText(tokenText.slice(0, offsetInToken))]));
216
+ }
217
+ const hoverSpan = h('span', { ...props }, [hText(tokenText.slice(offsetInToken, offsetInToken + length))]);
218
+ const wrapper = h('span', {
219
+ class: 'twohash-hover',
220
+ style: `anchor-name: ${anchorName}`,
221
+ }, [hoverSpan]);
222
+ parts.push(wrapper);
223
+ const popup = h('div', {
224
+ class: 'twohash-popup',
225
+ style: `position-anchor: ${anchorName}`,
226
+ }, popupChildren);
227
+ parts.push(popup);
228
+ const afterStart = offsetInToken + length;
229
+ if (afterStart < tokenText.length) {
230
+ parts.push(h('span', { ...props }, [hText(tokenText.slice(afterStart))]));
231
+ }
232
+ line.children.splice(i, 1, ...parts);
233
+ return;
234
+ }
235
+ col = spanEnd;
236
+ }
237
+ }
238
+ function getTextContent(node) {
239
+ if (node.value)
240
+ return node.value;
241
+ if (!node.children)
242
+ return '';
243
+ return node.children.map(getTextContent).join('');
244
+ }
245
+ //# sourceMappingURL=transformer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transformer.js","sourceRoot":"","sources":["../src/transformer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAoE,MAAM,eAAe,CAAA;AAC/G,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAgBxC,mEAAmE;AACnE,iFAAiF;AACjF,MAAM,UAAU,4BAA4B,CAAC,MAAqB;IAChE,OAAO;QACL,IAAI,EAAE,SAAS;QAEf,UAAU;YACR,OAAO,MAAM,CAAC,IAAI,CAAA;QACpB,CAAC;QAED,IAAI,CAAC,IAAI;YACP,YAAY,CAAC,IAAmB,EAAE,MAAM,CAAC,CAAA;YACzC,YAAY,CAAC,IAAmB,EAAE,MAAM,CAAC,CAAA;YACzC,iBAAiB,CAAC,IAAmB,EAAE,MAAM,CAAC,CAAA;QAChD,CAAC;KACF,CAAA;AACH,CAAC;AAED,iFAAiF;AACjF,wEAAwE;AACxE,MAAM,UAAU,yBAAyB,CAAC,SAA2B;IACnE,IAAI,aAAwC,CAAA;IAE5C,OAAO;QACL,IAAI,EAAE,SAAS;QAEf,UAAU,CAAC,IAAI;YACb,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;YAC5D,aAAa,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;YACnC,OAAO,aAAa,EAAE,IAAI,CAAA;QAC5B,CAAC;QAED,IAAI,CAAC,IAAI;YACP,IAAI,CAAC,aAAa;gBAAE,OAAM;YAC1B,MAAM,MAAM,GAAG,aAAa,CAAA;YAC5B,aAAa,GAAG,SAAS,CAAA;YACzB,YAAY,CAAC,IAAmB,EAAE,MAAM,CAAC,CAAA;YACzC,YAAY,CAAC,IAAmB,EAAE,MAAM,CAAC,CAAA;YACzC,iBAAiB,CAAC,IAAmB,EAAE,MAAM,CAAC,CAAA;QAChD,CAAC;KACF,CAAA;AACH,CAAC;AAED,8FAA8F;AAC9F,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,MAAwC,EACxC,UAAqC,EAAE;IAEvC,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC,CAAA;IACtC,MAAM,SAAS,GAAqB,IAAI,GAAG,EAAE,CAAA;IAE7C,MAAM,KAAK,GAAG,MAAM;SACjB,GAAG,CAAC,KAAK,CAAC,EAAE;QACX,MAAM,IAAI,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAA;QAC3D,MAAM,OAAO,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,CAAA;QAChG,MAAM,MAAM,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,CAAA;QAC5F,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,CAAA;IAClC,CAAC,CAAC,CAAA;IACJ,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAC/B,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,CACtC,OAAO,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACzD,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;QACrD,MAAM;KACP,CAAC,CAAC,CACJ,CACF,CAAA;IAED,KAAK,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,OAAO,EAAE,CAAC;QACvC,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;IAC7B,CAAC;IAED,OAAO,SAAS,CAAA;AAClB,CAAC;AAED,yDAAyD;AACzD,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,IAAY,EACZ,UAAqC,EAAE;IAEvC,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC,CAAA;IACtC,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;AACpF,CAAC;AAED,wFAAwF;AACxF,IAAI,aAAa,GAAG,CAAC,CAAA;AAcrB,SAAS,CAAC,CAAC,GAAW,EAAE,KAA8B,EAAE,QAAoB;IAC1E,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAA;AACvE,CAAC;AAED,SAAS,KAAK,CAAC,KAAa;IAC1B,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAA;AAChC,CAAC;AAED,SAAS,YAAY,CAAC,IAAiB,EAAE,MAAqB;IAC5D,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,CAAA;IAEjC,sEAAsE;IACtE,+EAA+E;IAC/E,MAAM,YAAY,GAAG,IAAI,GAAG,EAAuE,CAAA;IACnG,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC9C,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;QAC9B,IAAI,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QACxC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,KAAK,GAAG,EAAE,CAAA;YACV,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;QACrC,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAA;IACjC,CAAC;IAED,KAAK,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,YAAY,EAAE,CAAC;QAC5C,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,CAAA;QAC3B,IAAI,CAAC,IAAI;YAAE,SAAQ;QAEnB,2CAA2C;QAC3C,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;QAE3D,KAAK,MAAM,EAAE,KAAK,EAAE,IAAI,KAAK,EAAE,CAAC;YAC9B,MAAM,UAAU,GAAG,QAAQ,aAAa,EAAE,EAAE,CAAA;YAE5C,MAAM,SAAS,GAAe,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAwB,EAAE,EAAE,CACzE,CAAC,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,WAAW,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CACjE,CAAA;YAED,MAAM,aAAa,GAAe;gBAChC,CAAC,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,oBAAoB,EAAE,EAAE,SAAS,CAAC;aACtD,CAAA;YAED,IAAI,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC;gBACxB,aAAa,CAAC,IAAI,CAChB,CAAC,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,oBAAoB,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CACvE,CAAA;YACH,CAAC;YAED,mBAAmB,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,KAAK,CAAC,UAAU,CAAC,CAAA;QACvG,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,aAAa,GAAG,SAAS,CAAA;AAE/B,SAAS,kBAAkB,CAAC,IAAY;IACtC,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7B,OAAO,CAAC,CAAC,GAAG,EAAE;YACZ,KAAK,EAAE,oBAAoB;YAC3B,IAAI,EAAE,wFAAwF,IAAI,CAAC,WAAW,EAAE,EAAE;YAClH,MAAM,EAAE,QAAQ;YAChB,GAAG,EAAE,UAAU;SAChB,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACnB,CAAC;IACD,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,oBAAoB,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AAClE,CAAC;AAED,SAAS,YAAY,CAAC,IAAiB,EAAE,MAAqB;IAC5D,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,CAAA;IAEjC,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClC,MAAM,aAAa,GAAG,oBAAoB,KAAK,CAAC,QAAQ,EAAE,CAAA;QAE1D,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,yBAAyB,aAAa,EAAE,EAAE,EAAE;YACjF,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC;YAC9B,KAAK,CAAC,IAAI,CAAC;YACX,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC;SACrB,CAAC,CAAA;QAEF,IAAI,KAAK,CAAC,OAAO,IAAI,IAAI,IAAI,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;YACxD,qDAAqD;YACrD,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;YACrC,IAAI,QAAQ,EAAE,QAAQ,EAAE,CAAC;gBACvB,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;YACtC,CAAC;QACH,CAAC;aAAM,CAAC;YACN,cAAc;YACd,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;YAC9B,IAAI,CAAC,IAAI;gBAAE,SAAQ;YACnB,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAClB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;YAClC,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAiB,EAAE,MAAqB;IACjE,IAAI,CAAC,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC;QAAE,OAAM;IAElE,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,CAAA;IAEjC,KAAK,MAAM,UAAU,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;QAC5C,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;QACnC,IAAI,CAAC,IAAI;YAAE,SAAQ;QAEnB,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CACxC,CAAC,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,mDAAmD,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE;YACjF,CAAC,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,yBAAyB,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YACnE,CAAC,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,0BAA0B,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;YACrE,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,2BAA2B,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;SAClG,CAAC,CACH,CAAA;QAED,MAAM,cAAc,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,yBAAyB,EAAE,EAAE,KAAK,CAAC,CAAA;QAE3E,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;QACpC,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,IAAiB;IACtC,MAAM,KAAK,GAAkB,EAAE,CAAA;IAC/B,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE;QACnB,IAAI,CAAC,CAAC,OAAO,KAAK,MAAM,IAAI,CAAC,CAAC,UAAU,EAAE,KAAK,KAAK,MAAM,EAAE,CAAC;YAC3D,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACf,CAAC;IACH,CAAC,CAAC,CAAA;IACF,OAAO,KAAK,CAAA;AACd,CAAC;AAED,SAAS,QAAQ,CAAC,IAAiB,EAAE,OAAiC;IACpE,OAAO,CAAC,IAAI,CAAC,CAAA;IACb,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClC,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBAC7B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;YAC1B,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,mBAAmB,CAC1B,IAAiB,EACjB,SAAiB,EACjB,MAAc,EACd,UAAkB,EAClB,aAAyB,EACzB,UAAoB;IAEpB,MAAM,UAAU,GAAG,UAAU,CAAC,CAAC,CAAC,wCAAwC,CAAC,CAAC,CAAC,eAAe,CAAA;IAC1F,IAAI,CAAC,IAAI,CAAC,QAAQ;QAAE,OAAM;IAE1B,IAAI,GAAG,GAAG,CAAC,CAAA;IACX,MAAM,WAAW,GAAG,SAAS,CAAA;IAC7B,MAAM,SAAS,GAAG,SAAS,GAAG,MAAM,CAAA;IAEpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC9C,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;QAC9B,MAAM,IAAI,GAAG,cAAc,CAAC,KAAK,CAAC,CAAA;QAClC,MAAM,SAAS,GAAG,GAAG,CAAA;QACrB,MAAM,OAAO,GAAG,GAAG,GAAG,IAAI,CAAC,MAAM,CAAA;QAEjC,IAAI,SAAS,IAAI,WAAW,IAAI,OAAO,IAAI,SAAS,EAAE,CAAC;YACrD,MAAM,aAAa,GAAG,WAAW,GAAG,SAAS,CAAA;YAC7C,MAAM,SAAS,GAAG,IAAI,CAAA;YAEtB,wDAAwD;YACxD,IAAI,aAAa,KAAK,CAAC,IAAI,MAAM,KAAK,SAAS,CAAC,MAAM,EAAE,CAAC;gBACvD,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,EAAE;oBACxB,KAAK,EAAE,UAAU;oBACjB,KAAK,EAAE,gBAAgB,UAAU,EAAE;iBACpC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAA;gBAEX,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,EAAE;oBACrB,KAAK,EAAE,eAAe;oBACtB,KAAK,EAAE,oBAAoB,UAAU,EAAE;iBACxC,EAAE,aAAa,CAAC,CAAA;gBAEjB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,CAAA;gBAC1C,OAAM;YACR,CAAC;YAED,4DAA4D;YAC5D,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,UAAU,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;YAC7E,MAAM,KAAK,GAAe,EAAE,CAAA;YAE5B,IAAI,aAAa,GAAG,CAAC,EAAE,CAAC;gBACtB,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,GAAG,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;YACjF,CAAC;YAED,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,GAAG,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,aAAa,EAAE,aAAa,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;YAC1G,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,EAAE;gBACxB,KAAK,EAAE,eAAe;gBACtB,KAAK,EAAE,gBAAgB,UAAU,EAAE;aACpC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAA;YACf,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;YAEnB,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,EAAE;gBACrB,KAAK,EAAE,eAAe;gBACtB,KAAK,EAAE,oBAAoB,UAAU,EAAE;aACxC,EAAE,aAAa,CAAC,CAAA;YACjB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YAEjB,MAAM,UAAU,GAAG,aAAa,GAAG,MAAM,CAAA;YACzC,IAAI,UAAU,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC;gBAClC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,GAAG,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;YAC3E,CAAC;YAED,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC,CAAA;YACpC,OAAM;QACR,CAAC;QAED,GAAG,GAAG,OAAO,CAAA;IACf,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,IAAiB;IACvC,IAAI,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC,KAAK,CAAA;IACjC,IAAI,CAAC,IAAI,CAAC,QAAQ;QAAE,OAAO,EAAE,CAAA;IAC7B,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;AACnD,CAAC"}
package/package.json ADDED
@@ -0,0 +1,34 @@
1
+ {
2
+ "name": "@twohash/shiki",
3
+ "version": "0.1.0-alpha.1",
4
+ "description": "Shiki transformer for twohash C# type information",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.js",
12
+ "default": "./dist/index.js"
13
+ },
14
+ "./style.css": "./src/style.css"
15
+ },
16
+ "scripts": {
17
+ "build": "tsc"
18
+ },
19
+ "dependencies": {
20
+ "@twohash/core": "0.1.0-alpha.1"
21
+ },
22
+ "peerDependencies": {
23
+ "shiki": "^3.0.0 || ^4.0.0"
24
+ },
25
+ "files": [
26
+ "dist"
27
+ ],
28
+ "devDependencies": {
29
+ "@types/node": "^25.3.5",
30
+ "shiki": "^4.0.1",
31
+ "typescript": "^5.9.3",
32
+ "vitest": "^4.0.18"
33
+ }
34
+ }