koppajs-language-core 0.1.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.
- package/CHANGELOG.md +12 -0
- package/LICENSE +201 -0
- package/README.md +122 -0
- package/dist/data/htmlAttributes.d.ts +5 -0
- package/dist/data/htmlAttributes.js +393 -0
- package/dist/data/htmlAttributes.js.map +1 -0
- package/dist/data/htmlTags.d.ts +5 -0
- package/dist/data/htmlTags.js +562 -0
- package/dist/data/htmlTags.js.map +1 -0
- package/dist/data/kpaBlocks.d.ts +12 -0
- package/dist/data/kpaBlocks.js +55 -0
- package/dist/data/kpaBlocks.js.map +1 -0
- package/dist/diagnosticsEngine.d.ts +4 -0
- package/dist/diagnosticsEngine.js +11 -0
- package/dist/diagnosticsEngine.js.map +1 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.js +47 -0
- package/dist/index.js.map +1 -0
- package/dist/language/ast.d.ts +31 -0
- package/dist/language/ast.js +3 -0
- package/dist/language/ast.js.map +1 -0
- package/dist/language/componentContract.d.ts +22 -0
- package/dist/language/componentContract.js +273 -0
- package/dist/language/componentContract.js.map +1 -0
- package/dist/language/core.d.ts +14 -0
- package/dist/language/core.js +46 -0
- package/dist/language/core.js.map +1 -0
- package/dist/language/diagnosticCodes.d.ts +21 -0
- package/dist/language/diagnosticCodes.js +14 -0
- package/dist/language/diagnosticCodes.js.map +1 -0
- package/dist/language/diagnosticsRules.d.ts +12 -0
- package/dist/language/diagnosticsRules.js +58 -0
- package/dist/language/diagnosticsRules.js.map +1 -0
- package/dist/language/documentModel.d.ts +3 -0
- package/dist/language/documentModel.js +29 -0
- package/dist/language/documentModel.js.map +1 -0
- package/dist/language/localSymbolReferences.d.ts +8 -0
- package/dist/language/localSymbolReferences.js +199 -0
- package/dist/language/localSymbolReferences.js.map +1 -0
- package/dist/language/parser.d.ts +2 -0
- package/dist/language/parser.js +94 -0
- package/dist/language/parser.js.map +1 -0
- package/dist/language/projectConfig.d.ts +14 -0
- package/dist/language/projectConfig.js +154 -0
- package/dist/language/projectConfig.js.map +1 -0
- package/dist/language/sourcePositions.d.ts +4 -0
- package/dist/language/sourcePositions.js +50 -0
- package/dist/language/sourcePositions.js.map +1 -0
- package/dist/language/symbols.d.ts +25 -0
- package/dist/language/symbols.js +191 -0
- package/dist/language/symbols.js.map +1 -0
- package/dist/language/templateComponents.d.ts +83 -0
- package/dist/language/templateComponents.js +1248 -0
- package/dist/language/templateComponents.js.map +1 -0
- package/dist/language/templateDiagnosticsRules.d.ts +3 -0
- package/dist/language/templateDiagnosticsRules.js +58 -0
- package/dist/language/templateDiagnosticsRules.js.map +1 -0
- package/dist/language/templateExpressions.d.ts +23 -0
- package/dist/language/templateExpressions.js +361 -0
- package/dist/language/templateExpressions.js.map +1 -0
- package/dist/language/templateLoopScopes.d.ts +3 -0
- package/dist/language/templateLoopScopes.js +347 -0
- package/dist/language/templateLoopScopes.js.map +1 -0
- package/dist/language/templateSemantics.d.ts +38 -0
- package/dist/language/templateSemantics.js +373 -0
- package/dist/language/templateSemantics.js.map +1 -0
- package/dist/language/workspaceIndex.d.ts +37 -0
- package/dist/language/workspaceIndex.js +195 -0
- package/dist/language/workspaceIndex.js.map +1 -0
- package/dist/language/workspaceRegistrations.d.ts +10 -0
- package/dist/language/workspaceRegistrations.js +190 -0
- package/dist/language/workspaceRegistrations.js.map +1 -0
- package/dist/language/workspaceSymbols.d.ts +11 -0
- package/dist/language/workspaceSymbols.js +35 -0
- package/dist/language/workspaceSymbols.js.map +1 -0
- package/dist/service.d.ts +79 -0
- package/dist/service.js +919 -0
- package/dist/service.js.map +1 -0
- package/dist/utils/blockUtils.d.ts +1 -0
- package/dist/utils/blockUtils.js +9 -0
- package/dist/utils/blockUtils.js.map +1 -0
- package/dist/utils/htmlUtils.d.ts +2 -0
- package/dist/utils/htmlUtils.js +65 -0
- package/dist/utils/htmlUtils.js.map +1 -0
- package/dist/utils/templateContext.d.ts +14 -0
- package/dist/utils/templateContext.js +41 -0
- package/dist/utils/templateContext.js.map +1 -0
- package/dist/workspaceGraph.d.ts +28 -0
- package/dist/workspaceGraph.js +221 -0
- package/dist/workspaceGraph.js.map +1 -0
- package/package.json +44 -0
|
@@ -0,0 +1,373 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.createTemplateSemanticVirtualFileName = createTemplateSemanticVirtualFileName;
|
|
7
|
+
exports.getTemplateSemanticCompletions = getTemplateSemanticCompletions;
|
|
8
|
+
exports.getTemplateSemanticHover = getTemplateSemanticHover;
|
|
9
|
+
exports.getTemplateSemanticDefinitions = getTemplateSemanticDefinitions;
|
|
10
|
+
exports.getTemplateSemanticReferences = getTemplateSemanticReferences;
|
|
11
|
+
exports.getTemplateSemanticRenameInfo = getTemplateSemanticRenameInfo;
|
|
12
|
+
exports.getTemplateSemanticRenameRanges = getTemplateSemanticRenameRanges;
|
|
13
|
+
const path_1 = __importDefault(require("path"));
|
|
14
|
+
const typescript_1 = __importDefault(require("typescript"));
|
|
15
|
+
const sourcePositions_1 = require("./sourcePositions");
|
|
16
|
+
const symbols_1 = require("./symbols");
|
|
17
|
+
const templateExpressions_1 = require("./templateExpressions");
|
|
18
|
+
const templateLoopScopes_1 = require("./templateLoopScopes");
|
|
19
|
+
function createTemplateSemanticVirtualFileName(sourcePath) {
|
|
20
|
+
if (sourcePath && sourcePath.length > 0) {
|
|
21
|
+
return `${sourcePath}.template.ts`;
|
|
22
|
+
}
|
|
23
|
+
return path_1.default.join(process.cwd(), '__kpa_virtual__', 'untitled.kpa.template.ts');
|
|
24
|
+
}
|
|
25
|
+
function getTemplateSemanticCompletions(document, sourcePath, offset) {
|
|
26
|
+
const context = createTemplateSemanticContext(document, sourcePath, offset);
|
|
27
|
+
if (!context) {
|
|
28
|
+
return undefined;
|
|
29
|
+
}
|
|
30
|
+
const languageService = createTemplateLanguageService(context);
|
|
31
|
+
const completions = languageService.getCompletionsAtPosition(context.virtualFileName, context.cursorVirtualOffset, {
|
|
32
|
+
includeInsertTextCompletions: true,
|
|
33
|
+
includeCompletionsWithInsertText: true,
|
|
34
|
+
});
|
|
35
|
+
if (!completions) {
|
|
36
|
+
return undefined;
|
|
37
|
+
}
|
|
38
|
+
const expressionOffset = offset - context.expression.contentRange.start.offset;
|
|
39
|
+
const rootContext = !isMemberCompletionContext(context.expression.contentText.slice(0, expressionOffset));
|
|
40
|
+
const filteredEntries = rootContext
|
|
41
|
+
? completions.entries.filter((entry) => context.visibleNames.has(entry.name))
|
|
42
|
+
: completions.entries;
|
|
43
|
+
return filteredEntries.map((entry) => {
|
|
44
|
+
const details = languageService.getCompletionEntryDetails(context.virtualFileName, context.cursorVirtualOffset, entry.name, {}, entry.source, {}, entry.data);
|
|
45
|
+
return {
|
|
46
|
+
name: entry.name,
|
|
47
|
+
kind: entry.kind,
|
|
48
|
+
detail: details ? typescript_1.default.displayPartsToString(details.displayParts) : undefined,
|
|
49
|
+
documentation: details ? typescript_1.default.displayPartsToString(details.documentation) : undefined,
|
|
50
|
+
replacementRange: entry.replacementSpan
|
|
51
|
+
? mapVirtualTextSpanToKpaRange(context, entry.replacementSpan)
|
|
52
|
+
: undefined,
|
|
53
|
+
};
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
function getTemplateSemanticHover(document, sourcePath, offset) {
|
|
57
|
+
const context = createTemplateSemanticContext(document, sourcePath, offset);
|
|
58
|
+
if (!context) {
|
|
59
|
+
return undefined;
|
|
60
|
+
}
|
|
61
|
+
const languageService = createTemplateLanguageService(context);
|
|
62
|
+
const quickInfo = languageService.getQuickInfoAtPosition(context.virtualFileName, context.cursorVirtualOffset);
|
|
63
|
+
if (!quickInfo) {
|
|
64
|
+
return undefined;
|
|
65
|
+
}
|
|
66
|
+
const range = mapVirtualTextSpanToKpaRange(context, quickInfo.textSpan);
|
|
67
|
+
if (!range) {
|
|
68
|
+
return undefined;
|
|
69
|
+
}
|
|
70
|
+
return {
|
|
71
|
+
range,
|
|
72
|
+
displayText: typescript_1.default.displayPartsToString(quickInfo.displayParts),
|
|
73
|
+
documentation: typescript_1.default.displayPartsToString(quickInfo.documentation),
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
function getTemplateSemanticDefinitions(document, sourcePath, offset) {
|
|
77
|
+
const context = createTemplateSemanticContext(document, sourcePath, offset);
|
|
78
|
+
if (!context) {
|
|
79
|
+
return undefined;
|
|
80
|
+
}
|
|
81
|
+
const languageService = createTemplateLanguageService(context);
|
|
82
|
+
const definitions = languageService.getDefinitionAtPosition(context.virtualFileName, context.cursorVirtualOffset);
|
|
83
|
+
if (!definitions) {
|
|
84
|
+
return undefined;
|
|
85
|
+
}
|
|
86
|
+
return definitions.flatMap((definition) => {
|
|
87
|
+
const mappedRange = mapFileTextSpanToRange(context, definition.fileName, definition.textSpan);
|
|
88
|
+
return mappedRange
|
|
89
|
+
? [
|
|
90
|
+
{
|
|
91
|
+
fileName: definition.fileName,
|
|
92
|
+
range: mappedRange,
|
|
93
|
+
},
|
|
94
|
+
]
|
|
95
|
+
: [];
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
function getTemplateSemanticReferences(document, sourcePath, offset) {
|
|
99
|
+
const context = createTemplateSemanticContext(document, sourcePath, offset);
|
|
100
|
+
if (!context) {
|
|
101
|
+
return undefined;
|
|
102
|
+
}
|
|
103
|
+
const languageService = createTemplateLanguageService(context);
|
|
104
|
+
const references = languageService.getReferencesAtPosition(context.virtualFileName, context.cursorVirtualOffset);
|
|
105
|
+
const definitionLocationKeys = new Set((languageService.getDefinitionAtPosition(context.virtualFileName, context.cursorVirtualOffset) ?? []).map((definition) => `${definition.fileName}:${definition.textSpan.start}:${definition.textSpan.length}`));
|
|
106
|
+
if (!references) {
|
|
107
|
+
return undefined;
|
|
108
|
+
}
|
|
109
|
+
return deduplicateSemanticFileRanges(references.flatMap((reference) => {
|
|
110
|
+
const mappedRange = mapFileTextSpanToRange(context, reference.fileName, reference.textSpan);
|
|
111
|
+
return mappedRange
|
|
112
|
+
? [
|
|
113
|
+
{
|
|
114
|
+
fileName: reference.fileName,
|
|
115
|
+
range: mappedRange,
|
|
116
|
+
isDefinition: definitionLocationKeys.has(`${reference.fileName}:${reference.textSpan.start}:${reference.textSpan.length}`),
|
|
117
|
+
},
|
|
118
|
+
]
|
|
119
|
+
: [];
|
|
120
|
+
}));
|
|
121
|
+
}
|
|
122
|
+
function getTemplateSemanticRenameInfo(document, sourcePath, offset) {
|
|
123
|
+
const identifierReference = (0, templateExpressions_1.getCanonicalTemplateIdentifierReferenceAtOffset)(document, offset);
|
|
124
|
+
if (identifierReference &&
|
|
125
|
+
(0, symbols_1.collectTemplateContextSymbols)(document).some((symbol) => symbol.name === identifierReference.name)) {
|
|
126
|
+
return undefined;
|
|
127
|
+
}
|
|
128
|
+
const context = createTemplateSemanticContext(document, sourcePath, offset);
|
|
129
|
+
if (!context) {
|
|
130
|
+
return undefined;
|
|
131
|
+
}
|
|
132
|
+
const languageService = createTemplateLanguageService(context);
|
|
133
|
+
const renameInfo = languageService.getRenameInfo(context.virtualFileName, context.cursorVirtualOffset, {
|
|
134
|
+
allowRenameOfImportPath: false,
|
|
135
|
+
});
|
|
136
|
+
if (!renameInfo.canRename) {
|
|
137
|
+
return undefined;
|
|
138
|
+
}
|
|
139
|
+
const range = mapFileTextSpanToRange(context, context.virtualFileName, renameInfo.triggerSpan);
|
|
140
|
+
if (!range) {
|
|
141
|
+
return undefined;
|
|
142
|
+
}
|
|
143
|
+
return {
|
|
144
|
+
range,
|
|
145
|
+
placeholder: renameInfo.displayName,
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
function getTemplateSemanticRenameRanges(document, sourcePath, offset) {
|
|
149
|
+
const identifierReference = (0, templateExpressions_1.getCanonicalTemplateIdentifierReferenceAtOffset)(document, offset);
|
|
150
|
+
if (identifierReference &&
|
|
151
|
+
(0, symbols_1.collectTemplateContextSymbols)(document).some((symbol) => symbol.name === identifierReference.name)) {
|
|
152
|
+
return undefined;
|
|
153
|
+
}
|
|
154
|
+
const context = createTemplateSemanticContext(document, sourcePath, offset);
|
|
155
|
+
if (!context) {
|
|
156
|
+
return undefined;
|
|
157
|
+
}
|
|
158
|
+
const languageService = createTemplateLanguageService(context);
|
|
159
|
+
const renameLocations = languageService.findRenameLocations(context.virtualFileName, context.cursorVirtualOffset, false, false, true);
|
|
160
|
+
if (!renameLocations) {
|
|
161
|
+
return undefined;
|
|
162
|
+
}
|
|
163
|
+
return deduplicateSemanticFileRanges(renameLocations.flatMap((location) => {
|
|
164
|
+
const mappedRange = mapFileTextSpanToRange(context, location.fileName, location.textSpan);
|
|
165
|
+
return mappedRange
|
|
166
|
+
? [
|
|
167
|
+
{
|
|
168
|
+
fileName: location.fileName,
|
|
169
|
+
range: mappedRange,
|
|
170
|
+
},
|
|
171
|
+
]
|
|
172
|
+
: [];
|
|
173
|
+
}));
|
|
174
|
+
}
|
|
175
|
+
function createTemplateSemanticContext(document, sourcePath, offset) {
|
|
176
|
+
const expression = (0, templateExpressions_1.getCanonicalTemplateExpressionAtOffset)(document, offset);
|
|
177
|
+
if (!expression) {
|
|
178
|
+
return undefined;
|
|
179
|
+
}
|
|
180
|
+
const templateContextSymbols = (0, symbols_1.collectTemplateContextSymbols)(document);
|
|
181
|
+
const visibleNames = new Set(collectUniqueTemplateVisibleNames([
|
|
182
|
+
...templateContextSymbols.map((symbol) => symbol.name),
|
|
183
|
+
...(0, templateLoopScopes_1.collectTemplateLoopScopeNamesAtOffset)(document, offset),
|
|
184
|
+
]));
|
|
185
|
+
const loopScopeDeclarations = (0, templateLoopScopes_1.collectTemplateLoopScopeDeclarationsAtOffset)(document, offset);
|
|
186
|
+
const virtualFileName = createTemplateSemanticVirtualFileName(sourcePath);
|
|
187
|
+
const lineStartsByFileName = new Map();
|
|
188
|
+
const parts = [];
|
|
189
|
+
const segments = [];
|
|
190
|
+
const scriptBlock = document.blocks.find(isScriptBlock);
|
|
191
|
+
lineStartsByFileName.set(virtualFileName, []);
|
|
192
|
+
if (scriptBlock) {
|
|
193
|
+
const content = document.text.slice(scriptBlock.contentRange.start.offset, scriptBlock.contentRange.end.offset);
|
|
194
|
+
const virtualStart = getCombinedLength(parts);
|
|
195
|
+
parts.push(content);
|
|
196
|
+
const virtualEnd = getCombinedLength(parts);
|
|
197
|
+
segments.push({
|
|
198
|
+
kind: 'script',
|
|
199
|
+
virtualStart,
|
|
200
|
+
virtualEnd,
|
|
201
|
+
sourceStart: scriptBlock.contentRange.start.offset,
|
|
202
|
+
sourceEnd: scriptBlock.contentRange.end.offset,
|
|
203
|
+
});
|
|
204
|
+
parts.push('\n');
|
|
205
|
+
for (const symbol of templateContextSymbols) {
|
|
206
|
+
appendTemplateContextDeclaration(parts, segments, symbol);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
parts.push('function __kpa_template__() {\n');
|
|
210
|
+
for (const declaration of loopScopeDeclarations) {
|
|
211
|
+
parts.push(` ${declaration}\n`);
|
|
212
|
+
}
|
|
213
|
+
parts.push(' return (\n');
|
|
214
|
+
const expressionVirtualStart = getCombinedLength(parts);
|
|
215
|
+
parts.push(expression.contentText);
|
|
216
|
+
const expressionVirtualEnd = getCombinedLength(parts);
|
|
217
|
+
segments.push({
|
|
218
|
+
kind: 'expression',
|
|
219
|
+
virtualStart: expressionVirtualStart,
|
|
220
|
+
virtualEnd: expressionVirtualEnd,
|
|
221
|
+
sourceStart: expression.contentRange.start.offset,
|
|
222
|
+
sourceEnd: expression.contentRange.end.offset,
|
|
223
|
+
});
|
|
224
|
+
parts.push('\n );\n');
|
|
225
|
+
parts.push('}\n');
|
|
226
|
+
const virtualSourceText = parts.join('');
|
|
227
|
+
const cursorVirtualOffset = expressionVirtualStart + (offset - expression.contentRange.start.offset);
|
|
228
|
+
lineStartsByFileName.set(virtualFileName, (0, sourcePositions_1.createLineStarts)(virtualSourceText));
|
|
229
|
+
return {
|
|
230
|
+
document,
|
|
231
|
+
expression,
|
|
232
|
+
virtualFileName,
|
|
233
|
+
virtualSourceText,
|
|
234
|
+
cursorVirtualOffset,
|
|
235
|
+
segments,
|
|
236
|
+
visibleNames,
|
|
237
|
+
lineStartsByFileName,
|
|
238
|
+
};
|
|
239
|
+
}
|
|
240
|
+
function appendTemplateContextDeclaration(parts, segments, symbol) {
|
|
241
|
+
parts.push('const ');
|
|
242
|
+
const virtualStart = getCombinedLength(parts);
|
|
243
|
+
parts.push(symbol.name);
|
|
244
|
+
const virtualEnd = getCombinedLength(parts);
|
|
245
|
+
segments.push({
|
|
246
|
+
kind: 'binding',
|
|
247
|
+
virtualStart,
|
|
248
|
+
virtualEnd,
|
|
249
|
+
sourceStart: symbol.range.start.offset,
|
|
250
|
+
sourceEnd: symbol.range.end.offset,
|
|
251
|
+
});
|
|
252
|
+
parts.push(' = ');
|
|
253
|
+
if (symbol.valueText) {
|
|
254
|
+
parts.push(`${symbol.valueText};\n`);
|
|
255
|
+
return;
|
|
256
|
+
}
|
|
257
|
+
parts.push(`undefined as unknown as ${getTemplatePropValueType(symbol)};\n`);
|
|
258
|
+
}
|
|
259
|
+
function getTemplatePropValueType(symbol) {
|
|
260
|
+
const baseType = symbol.typeText?.trim() || 'unknown';
|
|
261
|
+
return symbol.optional ? `${baseType} | undefined` : baseType;
|
|
262
|
+
}
|
|
263
|
+
function createTemplateLanguageService(context) {
|
|
264
|
+
const compilerOptions = loadCompilerOptions(context.virtualFileName);
|
|
265
|
+
const virtualFileName = context.virtualFileName;
|
|
266
|
+
const virtualSourceText = context.virtualSourceText;
|
|
267
|
+
const currentDirectory = path_1.default.dirname(virtualFileName);
|
|
268
|
+
const languageServiceHost = {
|
|
269
|
+
getCompilationSettings: () => compilerOptions,
|
|
270
|
+
getCurrentDirectory: () => currentDirectory,
|
|
271
|
+
getDefaultLibFileName: (options) => typescript_1.default.getDefaultLibFilePath(options),
|
|
272
|
+
getScriptFileNames: () => [virtualFileName],
|
|
273
|
+
getScriptVersion: () => '0',
|
|
274
|
+
getScriptSnapshot: (fileName) => {
|
|
275
|
+
if (fileName === virtualFileName) {
|
|
276
|
+
return typescript_1.default.ScriptSnapshot.fromString(virtualSourceText);
|
|
277
|
+
}
|
|
278
|
+
const sourceText = typescript_1.default.sys.readFile(fileName);
|
|
279
|
+
return sourceText !== undefined ? typescript_1.default.ScriptSnapshot.fromString(sourceText) : undefined;
|
|
280
|
+
},
|
|
281
|
+
fileExists: (fileName) => fileName === virtualFileName || typescript_1.default.sys.fileExists(fileName),
|
|
282
|
+
readFile: (fileName) => fileName === virtualFileName ? virtualSourceText : typescript_1.default.sys.readFile(fileName),
|
|
283
|
+
readDirectory: typescript_1.default.sys.readDirectory,
|
|
284
|
+
directoryExists: (directoryName) => directoryName === currentDirectory || typescript_1.default.sys.directoryExists(directoryName),
|
|
285
|
+
getDirectories: typescript_1.default.sys.getDirectories,
|
|
286
|
+
useCaseSensitiveFileNames: () => typescript_1.default.sys.useCaseSensitiveFileNames,
|
|
287
|
+
getNewLine: () => typescript_1.default.sys.newLine,
|
|
288
|
+
};
|
|
289
|
+
return typescript_1.default.createLanguageService(languageServiceHost);
|
|
290
|
+
}
|
|
291
|
+
function isScriptBlock(block) {
|
|
292
|
+
return block.kind === 'script-ts' || block.kind === 'script-js';
|
|
293
|
+
}
|
|
294
|
+
function loadCompilerOptions(virtualFileName) {
|
|
295
|
+
const configFilePath = typescript_1.default.findConfigFile(path_1.default.dirname(virtualFileName), typescript_1.default.sys.fileExists, 'tsconfig.json');
|
|
296
|
+
if (configFilePath) {
|
|
297
|
+
const configFile = typescript_1.default.readConfigFile(configFilePath, typescript_1.default.sys.readFile);
|
|
298
|
+
if (!configFile.error) {
|
|
299
|
+
const parsed = typescript_1.default.parseJsonConfigFileContent(configFile.config, typescript_1.default.sys, path_1.default.dirname(configFilePath));
|
|
300
|
+
return {
|
|
301
|
+
...parsed.options,
|
|
302
|
+
allowJs: true,
|
|
303
|
+
checkJs: true,
|
|
304
|
+
};
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
return {
|
|
308
|
+
allowJs: true,
|
|
309
|
+
checkJs: true,
|
|
310
|
+
module: typescript_1.default.ModuleKind.Node16,
|
|
311
|
+
moduleResolution: typescript_1.default.ModuleResolutionKind.Node16,
|
|
312
|
+
strict: true,
|
|
313
|
+
target: typescript_1.default.ScriptTarget.ES2022,
|
|
314
|
+
};
|
|
315
|
+
}
|
|
316
|
+
function mapVirtualTextSpanToKpaRange(context, textSpan) {
|
|
317
|
+
const start = textSpan.start;
|
|
318
|
+
const end = textSpan.start + textSpan.length;
|
|
319
|
+
const segment = context.segments.find((candidate) => start >= candidate.virtualStart && end <= candidate.virtualEnd);
|
|
320
|
+
if (!segment) {
|
|
321
|
+
return undefined;
|
|
322
|
+
}
|
|
323
|
+
const sourceStart = segment.sourceStart + (start - segment.virtualStart);
|
|
324
|
+
const sourceEnd = sourceStart + textSpan.length;
|
|
325
|
+
return (0, sourcePositions_1.createLocatedRange)(context.document.lineStarts, sourceStart, sourceEnd);
|
|
326
|
+
}
|
|
327
|
+
function mapFileTextSpanToRange(context, fileName, textSpan) {
|
|
328
|
+
if (fileName === context.virtualFileName) {
|
|
329
|
+
return mapVirtualTextSpanToKpaRange(context, textSpan);
|
|
330
|
+
}
|
|
331
|
+
const sourceText = typescript_1.default.sys.readFile(fileName);
|
|
332
|
+
if (sourceText === undefined) {
|
|
333
|
+
return undefined;
|
|
334
|
+
}
|
|
335
|
+
const fileLineStarts = getOrCreateFileLineStarts(context.lineStartsByFileName, fileName, sourceText);
|
|
336
|
+
return (0, sourcePositions_1.createLocatedRange)(fileLineStarts, textSpan.start, textSpan.start + textSpan.length);
|
|
337
|
+
}
|
|
338
|
+
function getCombinedLength(parts) {
|
|
339
|
+
return parts.reduce((length, part) => length + part.length, 0);
|
|
340
|
+
}
|
|
341
|
+
function isMemberCompletionContext(prefixText) {
|
|
342
|
+
const trimmedPrefixText = prefixText.replace(/\s+$/, '');
|
|
343
|
+
return trimmedPrefixText.endsWith('.') || trimmedPrefixText.endsWith('?.');
|
|
344
|
+
}
|
|
345
|
+
function collectUniqueTemplateVisibleNames(names) {
|
|
346
|
+
const seenNames = new Set();
|
|
347
|
+
return names.filter((name) => {
|
|
348
|
+
if (seenNames.has(name)) {
|
|
349
|
+
return false;
|
|
350
|
+
}
|
|
351
|
+
seenNames.add(name);
|
|
352
|
+
return true;
|
|
353
|
+
});
|
|
354
|
+
}
|
|
355
|
+
function getOrCreateFileLineStarts(lineStartsByFileName, fileName, sourceText) {
|
|
356
|
+
const existingLineStarts = lineStartsByFileName.get(fileName);
|
|
357
|
+
if (existingLineStarts) {
|
|
358
|
+
return existingLineStarts;
|
|
359
|
+
}
|
|
360
|
+
return (0, sourcePositions_1.createLineStarts)(sourceText);
|
|
361
|
+
}
|
|
362
|
+
function deduplicateSemanticFileRanges(ranges) {
|
|
363
|
+
const seen = new Set();
|
|
364
|
+
return ranges.filter((range) => {
|
|
365
|
+
const key = `${range.fileName}:${range.range.start.offset}:${range.range.end.offset}`;
|
|
366
|
+
if (seen.has(key)) {
|
|
367
|
+
return false;
|
|
368
|
+
}
|
|
369
|
+
seen.add(key);
|
|
370
|
+
return true;
|
|
371
|
+
});
|
|
372
|
+
}
|
|
373
|
+
//# sourceMappingURL=templateSemantics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"templateSemantics.js","sourceRoot":"","sources":["../../src/language/templateSemantics.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { type KpaWorkspaceSymbolEntry, type KpaWorkspaceTemplateComponentUsage } from './core';
|
|
2
|
+
import type { KpaBlockDiagnostic } from './diagnosticsRules';
|
|
3
|
+
import type { KpaDocument } from './ast';
|
|
4
|
+
export interface KpaWorkspaceIndexOptions {
|
|
5
|
+
overlayTextByPath?: ReadonlyMap<string, string>;
|
|
6
|
+
rootPaths?: readonly string[];
|
|
7
|
+
}
|
|
8
|
+
export interface KpaWorkspaceIndexedFile {
|
|
9
|
+
document: KpaDocument;
|
|
10
|
+
filePath: string;
|
|
11
|
+
text: string;
|
|
12
|
+
}
|
|
13
|
+
export interface KpaWorkspaceComponentUsages {
|
|
14
|
+
filePath: string;
|
|
15
|
+
usages: readonly KpaWorkspaceTemplateComponentUsage[];
|
|
16
|
+
}
|
|
17
|
+
export interface KpaWorkspaceFileDiagnostics {
|
|
18
|
+
diagnostics: readonly KpaBlockDiagnostic[];
|
|
19
|
+
filePath: string;
|
|
20
|
+
}
|
|
21
|
+
export declare class KpaWorkspaceIndex {
|
|
22
|
+
private fileCache;
|
|
23
|
+
private overlayTextByPath;
|
|
24
|
+
private rootPaths;
|
|
25
|
+
constructor(options?: KpaWorkspaceIndexOptions);
|
|
26
|
+
setOverlayTextByPath(overlayTextByPath: ReadonlyMap<string, string>): void;
|
|
27
|
+
setRootPaths(rootPaths: readonly string[]): void;
|
|
28
|
+
invalidateFile(filePath: string): void;
|
|
29
|
+
clear(): void;
|
|
30
|
+
getKpaFilePaths(additionalPaths?: readonly (string | undefined)[]): readonly string[];
|
|
31
|
+
getIndexedFile(filePath: string): KpaWorkspaceIndexedFile | undefined;
|
|
32
|
+
collectWorkspaceSymbols(query?: string, additionalPaths?: readonly (string | undefined)[]): readonly KpaWorkspaceSymbolEntry[];
|
|
33
|
+
findComponentFilePathsByName(componentName: string, excludePath?: string, additionalPaths?: readonly (string | undefined)[]): readonly string[];
|
|
34
|
+
collectComponentUsagesForResolvedFile(resolvedFilePath: string, additionalPaths?: readonly (string | undefined)[]): readonly KpaWorkspaceComponentUsages[];
|
|
35
|
+
collectDiagnosticsForPaths(paths: readonly string[], additionalPaths?: readonly (string | undefined)[]): readonly KpaWorkspaceFileDiagnostics[];
|
|
36
|
+
private getCachedFile;
|
|
37
|
+
}
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.KpaWorkspaceIndex = void 0;
|
|
7
|
+
const fs_1 = __importDefault(require("fs"));
|
|
8
|
+
const path_1 = __importDefault(require("path"));
|
|
9
|
+
const core_1 = require("./core");
|
|
10
|
+
const parser_1 = require("./parser");
|
|
11
|
+
const excludedDirectoryNames = new Set(['.git', 'coverage', 'dist', 'node_modules', 'out']);
|
|
12
|
+
class KpaWorkspaceIndex {
|
|
13
|
+
fileCache = new Map();
|
|
14
|
+
overlayTextByPath;
|
|
15
|
+
rootPaths;
|
|
16
|
+
constructor(options = {}) {
|
|
17
|
+
this.rootPaths = normalizeRootPaths(options.rootPaths ?? []);
|
|
18
|
+
this.overlayTextByPath = options.overlayTextByPath ?? new Map();
|
|
19
|
+
}
|
|
20
|
+
setOverlayTextByPath(overlayTextByPath) {
|
|
21
|
+
this.overlayTextByPath = overlayTextByPath;
|
|
22
|
+
}
|
|
23
|
+
setRootPaths(rootPaths) {
|
|
24
|
+
this.rootPaths = normalizeRootPaths(rootPaths);
|
|
25
|
+
}
|
|
26
|
+
invalidateFile(filePath) {
|
|
27
|
+
this.fileCache.delete(filePath);
|
|
28
|
+
}
|
|
29
|
+
clear() {
|
|
30
|
+
this.fileCache.clear();
|
|
31
|
+
}
|
|
32
|
+
getKpaFilePaths(additionalPaths = []) {
|
|
33
|
+
const searchRoots = new Set(this.rootPaths);
|
|
34
|
+
for (const additionalPath of additionalPaths) {
|
|
35
|
+
if (!additionalPath) {
|
|
36
|
+
continue;
|
|
37
|
+
}
|
|
38
|
+
searchRoots.add(toSearchRoot(additionalPath));
|
|
39
|
+
}
|
|
40
|
+
const filePaths = new Set();
|
|
41
|
+
for (const rootPath of searchRoots) {
|
|
42
|
+
if (!fs_1.default.existsSync(rootPath)) {
|
|
43
|
+
continue;
|
|
44
|
+
}
|
|
45
|
+
collectKpaFilePathsRecursively(rootPath, filePaths);
|
|
46
|
+
}
|
|
47
|
+
return [...filePaths].sort();
|
|
48
|
+
}
|
|
49
|
+
getIndexedFile(filePath) {
|
|
50
|
+
const cachedFile = this.getCachedFile(filePath);
|
|
51
|
+
if (!cachedFile) {
|
|
52
|
+
return undefined;
|
|
53
|
+
}
|
|
54
|
+
return {
|
|
55
|
+
document: cachedFile.document,
|
|
56
|
+
filePath,
|
|
57
|
+
text: cachedFile.text,
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
collectWorkspaceSymbols(query = '', additionalPaths = []) {
|
|
61
|
+
const normalizedQuery = query.trim().toLowerCase();
|
|
62
|
+
const matchingSymbols = [];
|
|
63
|
+
for (const filePath of this.getKpaFilePaths(additionalPaths)) {
|
|
64
|
+
const cachedFile = this.getCachedFile(filePath);
|
|
65
|
+
if (!cachedFile) {
|
|
66
|
+
continue;
|
|
67
|
+
}
|
|
68
|
+
const symbols = cachedFile.symbols ?? (0, core_1.collectWorkspaceSymbolsFromKpaText)(cachedFile.text, filePath);
|
|
69
|
+
cachedFile.symbols = symbols;
|
|
70
|
+
for (const symbol of symbols) {
|
|
71
|
+
if (normalizedQuery.length > 0 &&
|
|
72
|
+
!symbol.name.toLowerCase().includes(normalizedQuery) &&
|
|
73
|
+
!symbol.filePath.toLowerCase().includes(normalizedQuery)) {
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
matchingSymbols.push(symbol);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return matchingSymbols;
|
|
80
|
+
}
|
|
81
|
+
findComponentFilePathsByName(componentName, excludePath, additionalPaths = []) {
|
|
82
|
+
const acceptedNames = new Set([componentName, (0, core_1.toKebabCase)(componentName)]);
|
|
83
|
+
return this.getKpaFilePaths(additionalPaths).filter((filePath) => {
|
|
84
|
+
if (filePath === excludePath) {
|
|
85
|
+
return false;
|
|
86
|
+
}
|
|
87
|
+
const fileName = path_1.default.basename(filePath, '.kpa');
|
|
88
|
+
const parentName = path_1.default.basename(path_1.default.dirname(filePath));
|
|
89
|
+
return acceptedNames.has(fileName) || (fileName === 'index' && acceptedNames.has(parentName));
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
collectComponentUsagesForResolvedFile(resolvedFilePath, additionalPaths = []) {
|
|
93
|
+
const usages = [];
|
|
94
|
+
for (const filePath of this.getKpaFilePaths([resolvedFilePath, ...additionalPaths])) {
|
|
95
|
+
const cachedFile = this.getCachedFile(filePath);
|
|
96
|
+
if (!cachedFile) {
|
|
97
|
+
continue;
|
|
98
|
+
}
|
|
99
|
+
const fileUsages = (0, core_1.collectWorkspaceTemplateComponentUsagesForResolvedFile)(cachedFile.document, filePath, resolvedFilePath);
|
|
100
|
+
if (fileUsages.length === 0) {
|
|
101
|
+
continue;
|
|
102
|
+
}
|
|
103
|
+
usages.push({
|
|
104
|
+
filePath,
|
|
105
|
+
usages: fileUsages,
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
return usages;
|
|
109
|
+
}
|
|
110
|
+
collectDiagnosticsForPaths(paths, additionalPaths = []) {
|
|
111
|
+
const explicitKpaPaths = paths.filter((candidatePath) => candidatePath.endsWith('.kpa'));
|
|
112
|
+
const filePaths = explicitKpaPaths.length > 0
|
|
113
|
+
? explicitKpaPaths
|
|
114
|
+
: this.getKpaFilePaths([...paths, ...additionalPaths]);
|
|
115
|
+
return filePaths.flatMap((filePath) => {
|
|
116
|
+
const cachedFile = this.getCachedFile(filePath);
|
|
117
|
+
if (!cachedFile) {
|
|
118
|
+
return [];
|
|
119
|
+
}
|
|
120
|
+
const diagnostics = cachedFile.diagnostics ??
|
|
121
|
+
(0, core_1.collectKpaDiagnosticsFromText)(cachedFile.text, undefined, filePath).diagnostics;
|
|
122
|
+
cachedFile.diagnostics = diagnostics;
|
|
123
|
+
return [
|
|
124
|
+
{
|
|
125
|
+
diagnostics,
|
|
126
|
+
filePath,
|
|
127
|
+
},
|
|
128
|
+
];
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
getCachedFile(filePath) {
|
|
132
|
+
const overlayText = this.overlayTextByPath.get(filePath);
|
|
133
|
+
if (overlayText !== undefined) {
|
|
134
|
+
const cachedOverlayFile = this.fileCache.get(filePath);
|
|
135
|
+
if (cachedOverlayFile && cachedOverlayFile.text === overlayText) {
|
|
136
|
+
return cachedOverlayFile;
|
|
137
|
+
}
|
|
138
|
+
const overlayFile = createCachedFile(overlayText);
|
|
139
|
+
this.fileCache.set(filePath, overlayFile);
|
|
140
|
+
return overlayFile;
|
|
141
|
+
}
|
|
142
|
+
try {
|
|
143
|
+
const fileStats = fs_1.default.statSync(filePath);
|
|
144
|
+
const cachedFile = this.fileCache.get(filePath);
|
|
145
|
+
if (cachedFile && cachedFile.mtimeMs === fileStats.mtimeMs) {
|
|
146
|
+
return cachedFile;
|
|
147
|
+
}
|
|
148
|
+
const text = fs_1.default.readFileSync(filePath, 'utf8');
|
|
149
|
+
const nextCachedFile = createCachedFile(text, fileStats.mtimeMs);
|
|
150
|
+
this.fileCache.set(filePath, nextCachedFile);
|
|
151
|
+
return nextCachedFile;
|
|
152
|
+
}
|
|
153
|
+
catch {
|
|
154
|
+
this.fileCache.delete(filePath);
|
|
155
|
+
return undefined;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
exports.KpaWorkspaceIndex = KpaWorkspaceIndex;
|
|
160
|
+
function createCachedFile(text, mtimeMs) {
|
|
161
|
+
return {
|
|
162
|
+
document: (0, parser_1.parseKpaDocument)(text),
|
|
163
|
+
mtimeMs,
|
|
164
|
+
text,
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
function collectKpaFilePathsRecursively(rootPath, filePaths) {
|
|
168
|
+
for (const entry of fs_1.default.readdirSync(rootPath, { withFileTypes: true })) {
|
|
169
|
+
const entryPath = path_1.default.join(rootPath, entry.name);
|
|
170
|
+
if (entry.isDirectory()) {
|
|
171
|
+
if (excludedDirectoryNames.has(entry.name)) {
|
|
172
|
+
continue;
|
|
173
|
+
}
|
|
174
|
+
collectKpaFilePathsRecursively(entryPath, filePaths);
|
|
175
|
+
continue;
|
|
176
|
+
}
|
|
177
|
+
if (entry.isFile() && entry.name.endsWith('.kpa')) {
|
|
178
|
+
filePaths.add(entryPath);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
function normalizeRootPaths(rootPaths) {
|
|
183
|
+
return [...new Set(rootPaths.map(toSearchRoot))];
|
|
184
|
+
}
|
|
185
|
+
function toSearchRoot(fileOrDirectoryPath) {
|
|
186
|
+
try {
|
|
187
|
+
return fs_1.default.statSync(fileOrDirectoryPath).isDirectory()
|
|
188
|
+
? fileOrDirectoryPath
|
|
189
|
+
: path_1.default.dirname(fileOrDirectoryPath);
|
|
190
|
+
}
|
|
191
|
+
catch {
|
|
192
|
+
return path_1.default.dirname(fileOrDirectoryPath);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
//# sourceMappingURL=workspaceIndex.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspaceIndex.js","sourceRoot":"","sources":["../../src/language/workspaceIndex.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { KpaLocatedRange } from './ast';
|
|
2
|
+
export interface KpaWorkspaceComponentRegistration {
|
|
3
|
+
componentName: string;
|
|
4
|
+
registrationFilePath: string;
|
|
5
|
+
registrationRange: KpaLocatedRange;
|
|
6
|
+
resolvedFilePath: string;
|
|
7
|
+
tagName: string;
|
|
8
|
+
}
|
|
9
|
+
export declare function collectWorkspaceComponentRegistrations(sourcePath: string | undefined): readonly KpaWorkspaceComponentRegistration[];
|
|
10
|
+
export declare function findWorkspaceComponentRegistrationByTagName(sourcePath: string | undefined, tagName: string): KpaWorkspaceComponentRegistration | undefined;
|