@refrakt-md/language-server 0.5.0 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,157 +0,0 @@
1
- import { MarkupKind, } from 'vscode-languageserver';
2
- import { getRune } from '../registry/loader.js';
3
- export function provideHover(params, documents) {
4
- const document = documents.get(params.textDocument.uri);
5
- if (!document)
6
- return null;
7
- const text = document.getText();
8
- const offset = document.offsetAt(params.position);
9
- // Try to find a rune tag name or attribute at the cursor position
10
- const runeHover = getRuneHover(text, offset);
11
- if (runeHover)
12
- return runeHover;
13
- return null;
14
- }
15
- function getRuneHover(text, offset) {
16
- // Find the tag context around the cursor
17
- // Look for {% ... %} containing the cursor
18
- const before = text.slice(0, offset);
19
- const after = text.slice(offset);
20
- // Find nearest {% before cursor
21
- const openIdx = before.lastIndexOf('{%');
22
- if (openIdx === -1)
23
- return null;
24
- // Find the next %} after that opening
25
- const closeSearch = text.slice(openIdx);
26
- const closeOffset = closeSearch.indexOf('%}');
27
- if (closeOffset === -1)
28
- return null;
29
- const closeIdx = openIdx + closeOffset + 2;
30
- // Cursor must be within this tag
31
- if (offset < openIdx || offset > closeIdx)
32
- return null;
33
- const tagContent = text.slice(openIdx, closeIdx);
34
- // Parse the tag content
35
- const isClosing = /^\{%\s*\//.test(tagContent);
36
- const tagMatch = isClosing
37
- ? tagContent.match(/^\{%\s*\/\s*([a-zA-Z][a-zA-Z0-9-]*)/)
38
- : tagContent.match(/^\{%\s*([a-zA-Z][a-zA-Z0-9-]*)/);
39
- if (!tagMatch)
40
- return null;
41
- const tagName = tagMatch[1];
42
- const tagNameStart = openIdx + tagMatch[0].indexOf(tagName);
43
- const tagNameEnd = tagNameStart + tagName.length;
44
- // Check if cursor is on the tag name
45
- if (offset >= tagNameStart && offset <= tagNameEnd) {
46
- return buildRuneHover(tagName);
47
- }
48
- // Check if cursor is on an attribute name (only for opening tags)
49
- if (!isClosing) {
50
- const afterTagName = tagContent.slice(tagMatch[0].length - (openIdx - openIdx));
51
- // Find attribute names in the tag
52
- const attrRegex = /([a-zA-Z_][a-zA-Z0-9_-]*)\s*=/g;
53
- const tagStart = openIdx;
54
- // Search within the tag content for attribute names
55
- const contentAfterTag = text.slice(tagNameEnd, closeIdx);
56
- let attrMatch;
57
- while ((attrMatch = attrRegex.exec(contentAfterTag)) !== null) {
58
- const attrStart = tagNameEnd + attrMatch.index;
59
- const attrEnd = attrStart + attrMatch[1].length;
60
- if (offset >= attrStart && offset <= attrEnd) {
61
- return buildAttributeHover(tagName, attrMatch[1]);
62
- }
63
- }
64
- }
65
- return null;
66
- }
67
- function buildRuneHover(tagName) {
68
- const rune = getRune(tagName);
69
- if (!rune)
70
- return null;
71
- const lines = [];
72
- lines.push(`### ${rune.name}`);
73
- if (rune.allNames.length > 1) {
74
- const aliases = rune.allNames.filter(n => n !== rune.name);
75
- lines.push(`*Aliases: ${aliases.join(', ')}*`);
76
- }
77
- lines.push('');
78
- lines.push(rune.description);
79
- if (Object.keys(rune.reinterprets).length > 0) {
80
- lines.push('');
81
- lines.push('**Reinterprets:**');
82
- for (const [element, meaning] of Object.entries(rune.reinterprets)) {
83
- lines.push(`- ${element} → ${meaning}`);
84
- }
85
- }
86
- if (rune.seoType) {
87
- lines.push('');
88
- lines.push(`**SEO type:** \`${rune.seoType}\``);
89
- }
90
- const attrs = Object.entries(rune.attributes);
91
- if (attrs.length > 0) {
92
- lines.push('');
93
- lines.push('**Attributes:**');
94
- for (const [name, attr] of attrs) {
95
- const parts = [`\`${name}\``];
96
- if (attr.required)
97
- parts.push('*(required)*');
98
- parts.push(`— ${formatType(attr)}`);
99
- if (attr.default !== undefined)
100
- parts.push(`(default: \`${JSON.stringify(attr.default)}\`)`);
101
- lines.push(`- ${parts.join(' ')}`);
102
- }
103
- }
104
- return {
105
- contents: {
106
- kind: MarkupKind.Markdown,
107
- value: lines.join('\n'),
108
- },
109
- };
110
- }
111
- function buildAttributeHover(tagName, attrName) {
112
- const rune = getRune(tagName);
113
- if (!rune)
114
- return null;
115
- const attr = rune.attributes[attrName];
116
- if (!attr)
117
- return null;
118
- const lines = [];
119
- lines.push(`**${attrName}** on \`{% ${rune.name} %}\``);
120
- lines.push('');
121
- const typeLine = [`**Type:** ${formatType(attr)}`];
122
- lines.push(typeLine.join(''));
123
- if (attr.required) {
124
- lines.push('**Required:** yes');
125
- }
126
- if (attr.default !== undefined) {
127
- lines.push(`**Default:** \`${JSON.stringify(attr.default)}\``);
128
- }
129
- if (attr.matches && Array.isArray(attr.matches)) {
130
- lines.push('');
131
- lines.push('**Allowed values:**');
132
- for (const value of attr.matches) {
133
- lines.push(`- \`${value}\``);
134
- }
135
- }
136
- return {
137
- contents: {
138
- kind: MarkupKind.Markdown,
139
- value: lines.join('\n'),
140
- },
141
- };
142
- }
143
- function formatType(attr) {
144
- if (attr.matches && Array.isArray(attr.matches)) {
145
- return attr.matches.map((v) => `\`"${v}"\``).join(' | ');
146
- }
147
- if (attr.type === String)
148
- return '`string`';
149
- if (attr.type === Number)
150
- return '`number`';
151
- if (attr.type === Boolean)
152
- return '`boolean`';
153
- if (Array.isArray(attr.type))
154
- return '`array`';
155
- return '`any`';
156
- }
157
- //# sourceMappingURL=hover.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hover.js","sourceRoot":"","sources":["../../src/providers/hover.ts"],"names":[],"mappings":"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"}
@@ -1,18 +0,0 @@
1
- import type { Position, TextDocuments } from 'vscode-languageserver';
2
- import type { TextDocument } from 'vscode-languageserver-textdocument';
3
- export interface InspectorResult {
4
- runeName: string;
5
- stages: {
6
- ast: object;
7
- transform: object;
8
- serialized: object;
9
- identity: object | null;
10
- };
11
- identityError?: string;
12
- }
13
- /**
14
- * Inspect the rune at the given cursor position, running the full
15
- * transformation pipeline and returning debug output for each stage.
16
- */
17
- export declare function inspectRuneAtPosition(documents: TextDocuments<TextDocument>, uri: string, position: Position, workspaceRoot?: string): InspectorResult | null;
18
- //# sourceMappingURL=inspector.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"inspector.d.ts","sourceRoot":"","sources":["../../src/providers/inspector.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAUvE,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE;QACN,GAAG,EAAE,MAAM,CAAC;QACZ,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,MAAM,CAAC;QACnB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;KACzB,CAAC;IACF,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AA2LD;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,aAAa,CAAC,YAAY,CAAC,EACtC,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,QAAQ,EAClB,aAAa,CAAC,EAAE,MAAM,GACrB,eAAe,GAAG,IAAI,CA2ExB"}
@@ -1,257 +0,0 @@
1
- import Markdoc from '@markdoc/markdoc';
2
- import { serialize } from '@refrakt-md/runes';
3
- import { createTransform } from '@refrakt-md/transform';
4
- import { getMarkdocTags, getMarkdocNodes } from '../registry/loader.js';
5
- import { createRequire } from 'node:module';
6
- import { join } from 'node:path';
7
- import { readFileSync } from 'node:fs';
8
- const { Tag } = Markdoc;
9
- /**
10
- * Find the innermost rune tag node at the given cursor position.
11
- * Walks the AST depth-first, preferring the deepest (most nested) tag
12
- * whose line range contains the cursor line.
13
- */
14
- function findRuneAtPosition(ast, line) {
15
- let best = null;
16
- for (const node of ast.walk()) {
17
- if (node.type !== 'tag' || !node.tag)
18
- continue;
19
- if (!node.lines || node.lines.length === 0)
20
- continue;
21
- const startLine = node.lines[0];
22
- const endLine = node.lines[node.lines.length - 1];
23
- if (line >= startLine && line <= endLine) {
24
- // Prefer the innermost (deepest) tag — later matches in walk() are deeper
25
- // or same level but we want the most specific one, so always update
26
- if (!best || (node.lines.length <= best.lines.length)) {
27
- best = node;
28
- }
29
- }
30
- }
31
- return best;
32
- }
33
- /**
34
- * Summarize a Markdoc AST node for display in the inspector.
35
- */
36
- function summarizeAstNode(node) {
37
- const summary = {
38
- type: node.type,
39
- };
40
- if (node.tag)
41
- summary.tag = node.tag;
42
- if (node.attributes && Object.keys(node.attributes).length > 0) {
43
- summary.attributes = node.attributes;
44
- }
45
- if (node.lines && node.lines.length > 0) {
46
- summary.lines = [node.lines[0], node.lines[node.lines.length - 1]];
47
- }
48
- if (node.children && node.children.length > 0) {
49
- summary.children = node.children.map(child => {
50
- if (child.type === 'tag' && child.tag) {
51
- return { type: 'tag', tag: child.tag };
52
- }
53
- return { type: child.type };
54
- });
55
- }
56
- return summary;
57
- }
58
- /**
59
- * Walk a renderable tree (Tag instances) to find a node whose typeof
60
- * attribute matches a given rune type.
61
- */
62
- function findRenderableByTypeof(tree, runeName) {
63
- if (tree === null || tree === undefined)
64
- return null;
65
- if (typeof tree === 'string' || typeof tree === 'number')
66
- return null;
67
- if (Tag.isTag(tree)) {
68
- // Rune schemas set typeof on the outermost rendered tag
69
- if (tree.attributes?.typeof) {
70
- // Check if this node's typeof relates to our rune
71
- // The typeof is typically the PascalCase schema type name
72
- return tree;
73
- }
74
- // Search children
75
- for (const child of tree.children) {
76
- const found = findRenderableByTypeof(child, runeName);
77
- if (found)
78
- return found;
79
- }
80
- }
81
- if (Array.isArray(tree)) {
82
- for (const child of tree) {
83
- const found = findRenderableByTypeof(child, runeName);
84
- if (found)
85
- return found;
86
- }
87
- }
88
- return null;
89
- }
90
- /**
91
- * Walk the full transformed tree to collect all nodes with typeof,
92
- * in document order.
93
- */
94
- function collectRenderablesByTypeof(tree) {
95
- const results = [];
96
- function walk(node) {
97
- if (node === null || node === undefined)
98
- return;
99
- if (typeof node === 'string' || typeof node === 'number')
100
- return;
101
- if (Tag.isTag(node)) {
102
- if (node.attributes?.typeof) {
103
- results.push(node);
104
- }
105
- for (const child of node.children) {
106
- walk(child);
107
- }
108
- }
109
- if (Array.isArray(node)) {
110
- for (const child of node) {
111
- walk(child);
112
- }
113
- }
114
- }
115
- walk(tree);
116
- return results;
117
- }
118
- /**
119
- * Summarize a renderable Tag node for display.
120
- */
121
- function summarizeRenderable(node) {
122
- if (node === null || node === undefined)
123
- return { value: null };
124
- if (typeof node === 'string')
125
- return { text: node };
126
- if (typeof node === 'number')
127
- return { value: node };
128
- if (Tag.isTag(node)) {
129
- const summary = {
130
- name: node.name,
131
- };
132
- if (node.attributes && Object.keys(node.attributes).length > 0) {
133
- summary.attributes = node.attributes;
134
- }
135
- if (node.children && node.children.length > 0) {
136
- summary.children = node.children.map(child => {
137
- if (Tag.isTag(child)) {
138
- const childSummary = { name: child.name };
139
- if (child.attributes?.typeof)
140
- childSummary.typeof = child.attributes.typeof;
141
- if (child.attributes?.property)
142
- childSummary.property = child.attributes.property;
143
- if (child.attributes?.['data-name'])
144
- childSummary['data-name'] = child.attributes['data-name'];
145
- return childSummary;
146
- }
147
- if (typeof child === 'string')
148
- return { text: child.slice(0, 50) };
149
- return { type: typeof child };
150
- });
151
- }
152
- return summary;
153
- }
154
- return { value: node };
155
- }
156
- /**
157
- * Try to load the theme's identity transform from the workspace.
158
- */
159
- function loadThemeTransform(workspaceRoot) {
160
- try {
161
- const configPath = join(workspaceRoot, 'refrakt.config.json');
162
- const configText = readFileSync(configPath, 'utf8');
163
- const config = JSON.parse(configText);
164
- if (!config.theme) {
165
- return { transform: null, error: 'No "theme" field in refrakt.config.json' };
166
- }
167
- const req = createRequire(join(workspaceRoot, 'package.json'));
168
- const themeTransform = req(`${config.theme}/transform`);
169
- const themeConfig = themeTransform.luminaConfig ?? themeTransform.default;
170
- if (!themeConfig) {
171
- return { transform: null, error: `Theme "${config.theme}" does not export a config` };
172
- }
173
- return { transform: createTransform(themeConfig) };
174
- }
175
- catch (err) {
176
- if (err?.code === 'ENOENT') {
177
- return { transform: null, error: 'No refrakt.config.json found' };
178
- }
179
- if (err?.code === 'MODULE_NOT_FOUND') {
180
- return { transform: null, error: `Theme package not installed: ${err.message}` };
181
- }
182
- return { transform: null, error: `Failed to load theme: ${err.message}` };
183
- }
184
- }
185
- /**
186
- * Inspect the rune at the given cursor position, running the full
187
- * transformation pipeline and returning debug output for each stage.
188
- */
189
- export function inspectRuneAtPosition(documents, uri, position, workspaceRoot) {
190
- const document = documents.get(uri);
191
- if (!document)
192
- return null;
193
- const text = document.getText();
194
- // Stage 1: Parse to AST
195
- const ast = Markdoc.parse(text);
196
- // Find the rune tag at cursor
197
- const runeNode = findRuneAtPosition(ast, position.line);
198
- if (!runeNode || !runeNode.tag)
199
- return null;
200
- const runeName = runeNode.tag;
201
- // Summarize AST for the found rune
202
- const astStage = summarizeAstNode(runeNode);
203
- // Stage 2: Transform
204
- const tags = getMarkdocTags();
205
- const nodes = getMarkdocNodes();
206
- const transformed = Markdoc.transform(ast, { tags, nodes });
207
- // Find the matching renderable node — collect all typeof nodes in order,
208
- // then find the one corresponding to our rune by matching tag name index
209
- const allTagNodes = [];
210
- for (const node of ast.walk()) {
211
- if (node.type === 'tag' && node.tag) {
212
- allTagNodes.push(node);
213
- }
214
- }
215
- const runeIndex = allTagNodes.indexOf(runeNode);
216
- const allRenderables = collectRenderablesByTypeof(transformed);
217
- const matchedRenderable = runeIndex >= 0 && runeIndex < allRenderables.length
218
- ? allRenderables[runeIndex]
219
- : findRenderableByTypeof(transformed, runeName);
220
- const transformStage = matchedRenderable
221
- ? summarizeRenderable(matchedRenderable)
222
- : { error: 'Could not find transformed output for this rune' };
223
- // Stage 3: Serialize
224
- const serializedStage = matchedRenderable
225
- ? serialize(matchedRenderable)
226
- : { error: 'No transform output to serialize' };
227
- // Stage 4: Identity Transform (theme-dependent)
228
- let identityStage = null;
229
- let identityError;
230
- if (matchedRenderable && workspaceRoot) {
231
- const { transform, error } = loadThemeTransform(workspaceRoot);
232
- if (transform) {
233
- const serialized = serialize(matchedRenderable);
234
- identityStage = transform(serialized);
235
- }
236
- else {
237
- identityError = error;
238
- }
239
- }
240
- else if (!workspaceRoot) {
241
- identityError = 'Workspace root not available';
242
- }
243
- else {
244
- identityError = 'No transform output for identity transform';
245
- }
246
- return {
247
- runeName,
248
- stages: {
249
- ast: astStage,
250
- transform: transformStage,
251
- serialized: serializedStage,
252
- identity: identityStage,
253
- },
254
- identityError,
255
- };
256
- }
257
- //# sourceMappingURL=inspector.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"inspector.js","sourceRoot":"","sources":["../../src/providers/inspector.ts"],"names":[],"mappings":"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"}
@@ -1,108 +0,0 @@
1
- import 'reflect-metadata';
2
- import type { SchemaAttribute } from '@markdoc/markdoc';
3
- export interface RuneInfo {
4
- /** Primary rune name */
5
- name: string;
6
- /** All names (primary + aliases) */
7
- allNames: string[];
8
- /** Human-readable description */
9
- description: string;
10
- /** How this rune reinterprets Markdown primitives */
11
- reinterprets: Record<string, string>;
12
- /** Schema.org SEO type, if any */
13
- seoType: string | undefined;
14
- /** Attribute definitions from the schema */
15
- attributes: Record<string, SchemaAttribute>;
16
- }
17
- /** Look up a rune by any of its names (primary or alias) */
18
- export declare function getRune(name: string): RuneInfo | undefined;
19
- /** Get all registered runes (one entry per rune, not per alias) */
20
- export declare function getAllRunes(): readonly RuneInfo[];
21
- /** Get all name→RuneInfo mappings (includes aliases) */
22
- export declare function getAllNames(): ReadonlyMap<string, RuneInfo>;
23
- /** Get the Markdoc tags config for validation/parsing */
24
- export declare function getMarkdocTags(): {
25
- else: import("@markdoc/markdoc").Schema<Readonly<Partial<{
26
- nodes: Partial<Record<import("@markdoc/markdoc").NodeType, import("@markdoc/markdoc").Schema<Readonly<Partial<any>>, string>>>;
27
- tags: Record<string, import("@markdoc/markdoc").Schema<Readonly<Partial<any>>, string>>;
28
- variables: Record<string, any>;
29
- functions: Record<string, import("@markdoc/markdoc").ConfigFunction>;
30
- partials: Record<string, any>;
31
- validation?: {
32
- parents?: import("@markdoc/markdoc").Node[] | undefined;
33
- validateFunctions?: boolean | undefined;
34
- environment?: string | undefined;
35
- } | undefined;
36
- }>>, string>;
37
- if: import("@markdoc/markdoc").Schema<Readonly<Partial<{
38
- nodes: Partial<Record<import("@markdoc/markdoc").NodeType, import("@markdoc/markdoc").Schema<Readonly<Partial<any>>, string>>>;
39
- tags: Record<string, import("@markdoc/markdoc").Schema<Readonly<Partial<any>>, string>>;
40
- variables: Record<string, any>;
41
- functions: Record<string, import("@markdoc/markdoc").ConfigFunction>;
42
- partials: Record<string, any>;
43
- validation?: {
44
- parents?: import("@markdoc/markdoc").Node[] | undefined;
45
- validateFunctions?: boolean | undefined;
46
- environment?: string | undefined;
47
- } | undefined;
48
- }>>, string>;
49
- partial: import("@markdoc/markdoc").Schema<Readonly<Partial<{
50
- nodes: Partial<Record<import("@markdoc/markdoc").NodeType, import("@markdoc/markdoc").Schema<Readonly<Partial<any>>, string>>>;
51
- tags: Record<string, import("@markdoc/markdoc").Schema<Readonly<Partial<any>>, string>>;
52
- variables: Record<string, any>;
53
- functions: Record<string, import("@markdoc/markdoc").ConfigFunction>;
54
- partials: Record<string, any>;
55
- validation?: {
56
- parents?: import("@markdoc/markdoc").Node[] | undefined;
57
- validateFunctions?: boolean | undefined;
58
- environment?: string | undefined;
59
- } | undefined;
60
- }>>, string>;
61
- slot: import("@markdoc/markdoc").Schema<Readonly<Partial<{
62
- nodes: Partial<Record<import("@markdoc/markdoc").NodeType, import("@markdoc/markdoc").Schema<Readonly<Partial<any>>, string>>>;
63
- tags: Record<string, import("@markdoc/markdoc").Schema<Readonly<Partial<any>>, string>>;
64
- variables: Record<string, any>;
65
- functions: Record<string, import("@markdoc/markdoc").ConfigFunction>;
66
- partials: Record<string, any>;
67
- validation?: {
68
- parents?: import("@markdoc/markdoc").Node[] | undefined;
69
- validateFunctions?: boolean | undefined;
70
- environment?: string | undefined;
71
- } | undefined;
72
- }>>, string>;
73
- table: import("@markdoc/markdoc").Schema<Readonly<Partial<{
74
- nodes: Partial<Record<import("@markdoc/markdoc").NodeType, import("@markdoc/markdoc").Schema<Readonly<Partial<any>>, string>>>;
75
- tags: Record<string, import("@markdoc/markdoc").Schema<Readonly<Partial<any>>, string>>;
76
- variables: Record<string, any>;
77
- functions: Record<string, import("@markdoc/markdoc").ConfigFunction>;
78
- partials: Record<string, any>;
79
- validation?: {
80
- parents?: import("@markdoc/markdoc").Node[] | undefined;
81
- validateFunctions?: boolean | undefined;
82
- environment?: string | undefined;
83
- } | undefined;
84
- }>>, string>;
85
- };
86
- /** Get the Markdoc nodes config for validation/parsing */
87
- export declare function getMarkdocNodes(): {
88
- heading: import("@markdoc/markdoc").Schema;
89
- paragraph: import("@markdoc/markdoc").Schema;
90
- fence: import("@markdoc/markdoc").Schema;
91
- list: import("@markdoc/markdoc").Schema;
92
- item: import("@markdoc/markdoc").Schema;
93
- em: import("@markdoc/markdoc").Schema;
94
- strong: import("@markdoc/markdoc").Schema;
95
- text: import("@markdoc/markdoc").Schema;
96
- link: import("@markdoc/markdoc").Schema;
97
- hardbreak: import("@markdoc/markdoc").Schema;
98
- image: import("@markdoc/markdoc").Schema;
99
- table: import("@markdoc/markdoc").Schema;
100
- thead: import("@markdoc/markdoc").Schema;
101
- tbody: import("@markdoc/markdoc").Schema;
102
- th: import("@markdoc/markdoc").Schema;
103
- tr: import("@markdoc/markdoc").Schema;
104
- error: {};
105
- };
106
- /** Find rune names similar to the given name, sorted by distance */
107
- export declare function findSimilar(name: string, maxDistance?: number): string[];
108
- //# sourceMappingURL=loader.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/registry/loader.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAG1B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAExD,MAAM,WAAW,QAAQ;IACvB,wBAAwB;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,oCAAoC;IACpC,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,iCAAiC;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,qDAAqD;IACrD,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,kCAAkC;IAClC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,4CAA4C;IAC5C,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;CAC7C;AAwBD,4DAA4D;AAC5D,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAE1D;AAED,mEAAmE;AACnE,wBAAgB,WAAW,IAAI,SAAS,QAAQ,EAAE,CAEjD;AAED,wDAAwD;AACxD,wBAAgB,WAAW,IAAI,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,CAE3D;AAED,yDAAyD;AACzD,wBAAgB,cAAc;;;;;;;kBAiD6rB,CAAC;mBAAuB,CAAC;6BAAgG,CAAC;uBAA8C,CAAC;;;;;;;;;kBAA8mB,CAAC;mBAAuB,CAAC;6BAAgG,CAAC;uBAA8C,CAAC;;;;;;;;;kBAAmnB,CAAC;mBAAuB,CAAC;6BAAgG,CAAC;uBAA8C,CAAC;;;;;;;;;kBAAgnB,CAAC;mBAAuB,CAAC;6BAAgG,CAAC;uBAA8C,CAAC;;;;;;;;;kBAAinB,CAAC;mBAAuB,CAAC;6BAAgG,CAAC;uBAA8C,CAAC;;;EA/Cz+H;AAED,0DAA0D;AAC1D,wBAAgB,eAAe;;;;;;;;;;;;;;;;;;EAE9B;AAqBD,oEAAoE;AACpE,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,SAAI,GAAG,MAAM,EAAE,CAmBnE"}
@@ -1,79 +0,0 @@
1
- import 'reflect-metadata';
2
- import { runes, tags, nodes } from '@refrakt-md/runes';
3
- /** Map of every name (primary + alias) → RuneInfo */
4
- const runesByName = new Map();
5
- /** All unique RuneInfo objects (one per rune, not per alias) */
6
- const allRunes = [];
7
- // Build the index
8
- for (const rune of Object.values(runes)) {
9
- const info = {
10
- name: rune.name,
11
- allNames: rune.names,
12
- description: rune.description,
13
- reinterprets: rune.reinterprets,
14
- seoType: rune.seoType,
15
- attributes: (rune.schema.attributes ?? {}),
16
- };
17
- allRunes.push(info);
18
- for (const name of rune.names) {
19
- runesByName.set(name, info);
20
- }
21
- }
22
- /** Look up a rune by any of its names (primary or alias) */
23
- export function getRune(name) {
24
- return runesByName.get(name);
25
- }
26
- /** Get all registered runes (one entry per rune, not per alias) */
27
- export function getAllRunes() {
28
- return allRunes;
29
- }
30
- /** Get all name→RuneInfo mappings (includes aliases) */
31
- export function getAllNames() {
32
- return runesByName;
33
- }
34
- /** Get the Markdoc tags config for validation/parsing */
35
- export function getMarkdocTags() {
36
- return tags;
37
- }
38
- /** Get the Markdoc nodes config for validation/parsing */
39
- export function getMarkdocNodes() {
40
- return nodes;
41
- }
42
- /** Simple Levenshtein distance */
43
- function levenshtein(a, b) {
44
- const m = a.length;
45
- const n = b.length;
46
- const dp = Array.from({ length: m + 1 }, () => Array(n + 1).fill(0));
47
- for (let i = 0; i <= m; i++)
48
- dp[i][0] = i;
49
- for (let j = 0; j <= n; j++)
50
- dp[0][j] = j;
51
- for (let i = 1; i <= m; i++) {
52
- for (let j = 1; j <= n; j++) {
53
- dp[i][j] = a[i - 1] === b[j - 1]
54
- ? dp[i - 1][j - 1]
55
- : 1 + Math.min(dp[i - 1][j], dp[i][j - 1], dp[i - 1][j - 1]);
56
- }
57
- }
58
- return dp[m][n];
59
- }
60
- /** Find rune names similar to the given name, sorted by distance */
61
- export function findSimilar(name, maxDistance = 3) {
62
- const results = [];
63
- for (const rune of allRunes) {
64
- const distance = levenshtein(name, rune.name);
65
- if (distance <= maxDistance && distance > 0) {
66
- results.push({ name: rune.name, distance });
67
- }
68
- // Also check aliases
69
- for (const alias of rune.allNames.slice(1)) {
70
- const d = levenshtein(name, alias);
71
- if (d <= maxDistance && d > 0) {
72
- results.push({ name: alias, distance: d });
73
- }
74
- }
75
- }
76
- results.sort((a, b) => a.distance - b.distance);
77
- return results.map(r => r.name);
78
- }
79
- //# sourceMappingURL=loader.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/registry/loader.ts"],"names":[],"mappings":"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"}