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.
Files changed (91) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/LICENSE +201 -0
  3. package/README.md +122 -0
  4. package/dist/data/htmlAttributes.d.ts +5 -0
  5. package/dist/data/htmlAttributes.js +393 -0
  6. package/dist/data/htmlAttributes.js.map +1 -0
  7. package/dist/data/htmlTags.d.ts +5 -0
  8. package/dist/data/htmlTags.js +562 -0
  9. package/dist/data/htmlTags.js.map +1 -0
  10. package/dist/data/kpaBlocks.d.ts +12 -0
  11. package/dist/data/kpaBlocks.js +55 -0
  12. package/dist/data/kpaBlocks.js.map +1 -0
  13. package/dist/diagnosticsEngine.d.ts +4 -0
  14. package/dist/diagnosticsEngine.js +11 -0
  15. package/dist/diagnosticsEngine.js.map +1 -0
  16. package/dist/index.d.ts +15 -0
  17. package/dist/index.js +47 -0
  18. package/dist/index.js.map +1 -0
  19. package/dist/language/ast.d.ts +31 -0
  20. package/dist/language/ast.js +3 -0
  21. package/dist/language/ast.js.map +1 -0
  22. package/dist/language/componentContract.d.ts +22 -0
  23. package/dist/language/componentContract.js +273 -0
  24. package/dist/language/componentContract.js.map +1 -0
  25. package/dist/language/core.d.ts +14 -0
  26. package/dist/language/core.js +46 -0
  27. package/dist/language/core.js.map +1 -0
  28. package/dist/language/diagnosticCodes.d.ts +21 -0
  29. package/dist/language/diagnosticCodes.js +14 -0
  30. package/dist/language/diagnosticCodes.js.map +1 -0
  31. package/dist/language/diagnosticsRules.d.ts +12 -0
  32. package/dist/language/diagnosticsRules.js +58 -0
  33. package/dist/language/diagnosticsRules.js.map +1 -0
  34. package/dist/language/documentModel.d.ts +3 -0
  35. package/dist/language/documentModel.js +29 -0
  36. package/dist/language/documentModel.js.map +1 -0
  37. package/dist/language/localSymbolReferences.d.ts +8 -0
  38. package/dist/language/localSymbolReferences.js +199 -0
  39. package/dist/language/localSymbolReferences.js.map +1 -0
  40. package/dist/language/parser.d.ts +2 -0
  41. package/dist/language/parser.js +94 -0
  42. package/dist/language/parser.js.map +1 -0
  43. package/dist/language/projectConfig.d.ts +14 -0
  44. package/dist/language/projectConfig.js +154 -0
  45. package/dist/language/projectConfig.js.map +1 -0
  46. package/dist/language/sourcePositions.d.ts +4 -0
  47. package/dist/language/sourcePositions.js +50 -0
  48. package/dist/language/sourcePositions.js.map +1 -0
  49. package/dist/language/symbols.d.ts +25 -0
  50. package/dist/language/symbols.js +191 -0
  51. package/dist/language/symbols.js.map +1 -0
  52. package/dist/language/templateComponents.d.ts +83 -0
  53. package/dist/language/templateComponents.js +1248 -0
  54. package/dist/language/templateComponents.js.map +1 -0
  55. package/dist/language/templateDiagnosticsRules.d.ts +3 -0
  56. package/dist/language/templateDiagnosticsRules.js +58 -0
  57. package/dist/language/templateDiagnosticsRules.js.map +1 -0
  58. package/dist/language/templateExpressions.d.ts +23 -0
  59. package/dist/language/templateExpressions.js +361 -0
  60. package/dist/language/templateExpressions.js.map +1 -0
  61. package/dist/language/templateLoopScopes.d.ts +3 -0
  62. package/dist/language/templateLoopScopes.js +347 -0
  63. package/dist/language/templateLoopScopes.js.map +1 -0
  64. package/dist/language/templateSemantics.d.ts +38 -0
  65. package/dist/language/templateSemantics.js +373 -0
  66. package/dist/language/templateSemantics.js.map +1 -0
  67. package/dist/language/workspaceIndex.d.ts +37 -0
  68. package/dist/language/workspaceIndex.js +195 -0
  69. package/dist/language/workspaceIndex.js.map +1 -0
  70. package/dist/language/workspaceRegistrations.d.ts +10 -0
  71. package/dist/language/workspaceRegistrations.js +190 -0
  72. package/dist/language/workspaceRegistrations.js.map +1 -0
  73. package/dist/language/workspaceSymbols.d.ts +11 -0
  74. package/dist/language/workspaceSymbols.js +35 -0
  75. package/dist/language/workspaceSymbols.js.map +1 -0
  76. package/dist/service.d.ts +79 -0
  77. package/dist/service.js +919 -0
  78. package/dist/service.js.map +1 -0
  79. package/dist/utils/blockUtils.d.ts +1 -0
  80. package/dist/utils/blockUtils.js +9 -0
  81. package/dist/utils/blockUtils.js.map +1 -0
  82. package/dist/utils/htmlUtils.d.ts +2 -0
  83. package/dist/utils/htmlUtils.js +65 -0
  84. package/dist/utils/htmlUtils.js.map +1 -0
  85. package/dist/utils/templateContext.d.ts +14 -0
  86. package/dist/utils/templateContext.js +41 -0
  87. package/dist/utils/templateContext.js.map +1 -0
  88. package/dist/workspaceGraph.d.ts +28 -0
  89. package/dist/workspaceGraph.js +221 -0
  90. package/dist/workspaceGraph.js.map +1 -0
  91. package/package.json +44 -0
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getBlockAtOffset = getBlockAtOffset;
4
+ exports.isOffsetInsideBlockNames = isOffsetInsideBlockNames;
5
+ function getBlockAtOffset(document, offset, blockNames) {
6
+ const matchingBlocks = document.blocks.filter((block) => {
7
+ if (blockNames && !blockNames.includes(block.name)) {
8
+ return false;
9
+ }
10
+ return isOffsetInsideBlockContext(document, block, offset);
11
+ });
12
+ return matchingBlocks
13
+ .slice()
14
+ .sort((left, right) => right.openTag.range.start.offset - left.openTag.range.start.offset ||
15
+ getBlockContextEndOffset(right, document.text.length) -
16
+ getBlockContextEndOffset(left, document.text.length))[0];
17
+ }
18
+ function isOffsetInsideBlockNames(document, offset, blockNames) {
19
+ return getBlockAtOffset(document, offset, blockNames) !== undefined;
20
+ }
21
+ function isOffsetInsideBlockContext(document, block, offset) {
22
+ const contextStartOffset = block.openTag.range.end.offset;
23
+ const contextEndOffset = getBlockContextEndOffset(block, document.text.length);
24
+ return offset >= contextStartOffset && offset < contextEndOffset;
25
+ }
26
+ function getBlockContextEndOffset(block, textLength) {
27
+ return block.closeTag?.range.end.offset ?? textLength;
28
+ }
29
+ //# sourceMappingURL=documentModel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"documentModel.js","sourceRoot":"","sources":["../../src/language/documentModel.ts"],"names":[],"mappings":";;AAEA,4CAqBC;AAED,4DAMC;AA7BD,SAAgB,gBAAgB,CAC9B,QAAqB,EACrB,MAAc,EACd,UAA8B;IAE9B,MAAM,cAAc,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;QACtD,IAAI,UAAU,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YACnD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,OAAO,0BAA0B,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,OAAO,cAAc;SAClB,KAAK,EAAE;SACP,IAAI,CACH,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CACd,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM;QAClE,wBAAwB,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;YACnD,wBAAwB,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CACzD,CAAC,CAAC,CAAC,CAAC;AACT,CAAC;AAED,SAAgB,wBAAwB,CACtC,QAAqB,EACrB,MAAc,EACd,UAA6B;IAE7B,OAAO,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,KAAK,SAAS,CAAC;AACtE,CAAC;AAED,SAAS,0BAA0B,CACjC,QAAqB,EACrB,KAAmB,EACnB,MAAc;IAEd,MAAM,kBAAkB,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC;IAC1D,MAAM,gBAAgB,GAAG,wBAAwB,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAE/E,OAAO,MAAM,IAAI,kBAAkB,IAAI,MAAM,GAAG,gBAAgB,CAAC;AACnE,CAAC;AAED,SAAS,wBAAwB,CAAC,KAAmB,EAAE,UAAkB;IACvE,OAAO,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,MAAM,IAAI,UAAU,CAAC;AACxD,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { KpaDocument, KpaLocatedRange } from './ast';
2
+ import { type KpaScriptSymbol } from './symbols';
3
+ export interface KpaLocalSymbolOccurrence {
4
+ range: KpaLocatedRange;
5
+ symbols: readonly KpaScriptSymbol[];
6
+ }
7
+ export declare function resolveLocalSymbolOccurrenceAtOffset(document: KpaDocument, offset: number): KpaLocalSymbolOccurrence | undefined;
8
+ export declare function collectLocalReferenceRangesForSymbols(document: KpaDocument, symbols: readonly KpaScriptSymbol[]): readonly KpaLocatedRange[];
@@ -0,0 +1,199 @@
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.resolveLocalSymbolOccurrenceAtOffset = resolveLocalSymbolOccurrenceAtOffset;
7
+ exports.collectLocalReferenceRangesForSymbols = collectLocalReferenceRangesForSymbols;
8
+ const typescript_1 = __importDefault(require("typescript"));
9
+ const documentModel_1 = require("./documentModel");
10
+ const sourcePositions_1 = require("./sourcePositions");
11
+ const symbols_1 = require("./symbols");
12
+ const templateExpressions_1 = require("./templateExpressions");
13
+ function resolveLocalSymbolOccurrenceAtOffset(document, offset) {
14
+ const scriptOccurrence = resolveScriptSymbolOccurrenceAtOffset(document, offset);
15
+ if (scriptOccurrence) {
16
+ return {
17
+ range: scriptOccurrence.range,
18
+ symbols: [scriptOccurrence.symbol],
19
+ };
20
+ }
21
+ const templateReference = (0, templateExpressions_1.getCanonicalTemplateIdentifierReferenceAtOffset)(document, offset);
22
+ if (!templateReference) {
23
+ return undefined;
24
+ }
25
+ return {
26
+ range: templateReference.range,
27
+ symbols: (0, symbols_1.collectTemplateContextSymbols)(document).filter((symbol) => symbol.name === templateReference.name),
28
+ };
29
+ }
30
+ function collectLocalReferenceRangesForSymbols(document, symbols) {
31
+ const ranges = [
32
+ ...symbols.flatMap((symbol) => collectScriptReferenceRangesForSymbol(document, symbol)),
33
+ ...collectTemplateReferenceRangesForSymbols(document, symbols),
34
+ ];
35
+ return deduplicateRanges(ranges);
36
+ }
37
+ function resolveScriptSymbolOccurrenceAtOffset(document, offset) {
38
+ const block = getScriptBlockAtOffset(document, offset);
39
+ if (!block) {
40
+ return undefined;
41
+ }
42
+ const semanticModel = createScriptSemanticModel(document, block);
43
+ const blockOffset = offset - block.contentRange.start.offset;
44
+ const occurrenceNode = findIdentifierNodeAtOffset(semanticModel.sourceFile, blockOffset);
45
+ if (!occurrenceNode) {
46
+ return undefined;
47
+ }
48
+ const occurrenceSymbol = semanticModel.checker.getSymbolAtLocation(occurrenceNode);
49
+ if (!occurrenceSymbol) {
50
+ return undefined;
51
+ }
52
+ const localSymbols = (0, symbols_1.collectLocalScriptSymbols)(document).all.filter((symbol) => isSymbolInsideBlock(symbol, block));
53
+ for (const symbol of localSymbols) {
54
+ const declarationNode = findIdentifierNodeForSymbol(semanticModel, symbol);
55
+ if (!declarationNode) {
56
+ continue;
57
+ }
58
+ const declarationSymbol = semanticModel.checker.getSymbolAtLocation(declarationNode);
59
+ if (declarationSymbol === occurrenceSymbol) {
60
+ return {
61
+ symbol,
62
+ range: toDocumentRange(document, block, occurrenceNode.getStart(semanticModel.sourceFile), occurrenceNode.end),
63
+ };
64
+ }
65
+ }
66
+ return undefined;
67
+ }
68
+ function collectScriptReferenceRangesForSymbol(document, symbol) {
69
+ if (symbol.origin !== 'script') {
70
+ return [symbol.range];
71
+ }
72
+ const block = findScriptBlockForSymbol(document, symbol);
73
+ if (!block) {
74
+ return [symbol.range];
75
+ }
76
+ const semanticModel = createScriptSemanticModel(document, block);
77
+ const declarationNode = findIdentifierNodeForSymbol(semanticModel, symbol);
78
+ if (!declarationNode) {
79
+ return [symbol.range];
80
+ }
81
+ const declarationSymbol = semanticModel.checker.getSymbolAtLocation(declarationNode);
82
+ if (!declarationSymbol) {
83
+ return [symbol.range];
84
+ }
85
+ const references = [];
86
+ visit(semanticModel.sourceFile);
87
+ return references;
88
+ function visit(node) {
89
+ if (typescript_1.default.isIdentifier(node)) {
90
+ const nodeSymbol = semanticModel.checker.getSymbolAtLocation(node);
91
+ if (nodeSymbol === declarationSymbol) {
92
+ references.push(toDocumentRange(document, semanticModel.block, node.getStart(semanticModel.sourceFile), node.end));
93
+ }
94
+ }
95
+ typescript_1.default.forEachChild(node, visit);
96
+ }
97
+ }
98
+ function collectTemplateReferenceRangesForSymbols(document, symbols) {
99
+ const templateVisibleNames = new Set(symbols.filter((symbol) => symbol.origin !== 'script').map((symbol) => symbol.name));
100
+ if (templateVisibleNames.size === 0) {
101
+ return [];
102
+ }
103
+ return (0, templateExpressions_1.collectCanonicalTemplateIdentifierReferences)(document)
104
+ .filter((reference) => templateVisibleNames.has(reference.name))
105
+ .map((reference) => reference.range);
106
+ }
107
+ function createScriptSemanticModel(document, block) {
108
+ const fileName = block.kind === 'script-ts' ? 'embedded.kpa.ts' : 'embedded.kpa.js';
109
+ const content = document.text.slice(block.contentRange.start.offset, block.contentRange.end.offset);
110
+ const sourceFile = typescript_1.default.createSourceFile(fileName, content, typescript_1.default.ScriptTarget.Latest, true, block.kind === 'script-ts' ? typescript_1.default.ScriptKind.TS : typescript_1.default.ScriptKind.JS);
111
+ const compilerOptions = {
112
+ allowJs: block.kind === 'script-js',
113
+ checkJs: block.kind === 'script-js',
114
+ module: typescript_1.default.ModuleKind.ESNext,
115
+ noLib: true,
116
+ noResolve: true,
117
+ target: typescript_1.default.ScriptTarget.Latest,
118
+ };
119
+ const compilerHost = typescript_1.default.createCompilerHost(compilerOptions, true);
120
+ compilerHost.getSourceFile = (requestedFileName) => requestedFileName === fileName ? sourceFile : undefined;
121
+ compilerHost.readFile = (requestedFileName) => requestedFileName === fileName ? content : undefined;
122
+ compilerHost.fileExists = (requestedFileName) => requestedFileName === fileName;
123
+ compilerHost.writeFile = () => undefined;
124
+ compilerHost.getDefaultLibFileName = () => 'lib.d.ts';
125
+ compilerHost.getCurrentDirectory = () => '';
126
+ compilerHost.getDirectories = () => [];
127
+ compilerHost.getCanonicalFileName = (requestedFileName) => requestedFileName;
128
+ compilerHost.useCaseSensitiveFileNames = () => true;
129
+ compilerHost.getNewLine = () => '\n';
130
+ const program = typescript_1.default.createProgram([fileName], compilerOptions, compilerHost);
131
+ return {
132
+ block,
133
+ sourceFile,
134
+ checker: program.getTypeChecker(),
135
+ };
136
+ }
137
+ function findIdentifierNodeForSymbol(semanticModel, symbol) {
138
+ const startOffset = symbol.range.start.offset - semanticModel.block.contentRange.start.offset;
139
+ const endOffset = symbol.range.end.offset - semanticModel.block.contentRange.start.offset;
140
+ return findIdentifierNodeByExactRange(semanticModel.sourceFile, startOffset, endOffset);
141
+ }
142
+ function findIdentifierNodeAtOffset(sourceFile, offset) {
143
+ let matchingNode;
144
+ visit(sourceFile);
145
+ return matchingNode;
146
+ function visit(node) {
147
+ if (typescript_1.default.isIdentifier(node) && offset >= node.getStart(sourceFile) && offset <= node.end) {
148
+ matchingNode = node;
149
+ }
150
+ typescript_1.default.forEachChild(node, visit);
151
+ }
152
+ }
153
+ function findIdentifierNodeByExactRange(sourceFile, startOffset, endOffset) {
154
+ let matchingNode;
155
+ visit(sourceFile);
156
+ return matchingNode;
157
+ function visit(node) {
158
+ if (typescript_1.default.isIdentifier(node) &&
159
+ node.getStart(sourceFile) === startOffset &&
160
+ node.end === endOffset) {
161
+ matchingNode = node;
162
+ return;
163
+ }
164
+ typescript_1.default.forEachChild(node, visit);
165
+ }
166
+ }
167
+ function toDocumentRange(document, block, startOffsetInBlock, endOffsetInBlock) {
168
+ return (0, sourcePositions_1.createLocatedRange)(document.lineStarts, block.contentRange.start.offset + startOffsetInBlock, block.contentRange.start.offset + endOffsetInBlock);
169
+ }
170
+ function getScriptBlockAtOffset(document, offset) {
171
+ const block = (0, documentModel_1.getBlockAtOffset)(document, offset, ['ts', 'js']);
172
+ if (!block) {
173
+ return undefined;
174
+ }
175
+ if (block.kind !== 'script-ts' && block.kind !== 'script-js') {
176
+ return undefined;
177
+ }
178
+ return block;
179
+ }
180
+ function findScriptBlockForSymbol(document, symbol) {
181
+ return document.blocks.find((block) => (block.kind === 'script-ts' || block.kind === 'script-js') &&
182
+ isSymbolInsideBlock(symbol, block));
183
+ }
184
+ function isSymbolInsideBlock(symbol, block) {
185
+ return (symbol.range.start.offset >= block.contentRange.start.offset &&
186
+ symbol.range.end.offset <= block.contentRange.end.offset);
187
+ }
188
+ function deduplicateRanges(ranges) {
189
+ const seen = new Set();
190
+ return ranges.filter((range) => {
191
+ const key = `${range.start.offset}:${range.end.offset}`;
192
+ if (seen.has(key)) {
193
+ return false;
194
+ }
195
+ seen.add(key);
196
+ return true;
197
+ });
198
+ }
199
+ //# sourceMappingURL=localSymbolReferences.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"localSymbolReferences.js","sourceRoot":"","sources":["../../src/language/localSymbolReferences.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { KpaDocument } from './ast';
2
+ export declare function parseKpaDocument(text: string): KpaDocument;
@@ -0,0 +1,94 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseKpaDocument = parseKpaDocument;
4
+ const sourcePositions_1 = require("./sourcePositions");
5
+ const blockTagPattern = /\[(\/?)([a-zA-Z0-9]+)\]/g;
6
+ function parseKpaDocument(text) {
7
+ const lineStarts = (0, sourcePositions_1.createLineStarts)(text);
8
+ const tags = [];
9
+ const blocks = [];
10
+ const openTags = [];
11
+ let match;
12
+ while ((match = blockTagPattern.exec(text)) !== null) {
13
+ const rawText = match[0];
14
+ const isClosing = match[1] === '/';
15
+ const name = match[2];
16
+ const startOffset = match.index;
17
+ const endOffset = startOffset + rawText.length;
18
+ const tag = {
19
+ name,
20
+ isClosing,
21
+ rawText,
22
+ range: (0, sourcePositions_1.createLocatedRange)(lineStarts, startOffset, endOffset),
23
+ };
24
+ tags.push(tag);
25
+ if (!isClosing) {
26
+ openTags.push(tag);
27
+ continue;
28
+ }
29
+ const lastOpenTag = openTags[openTags.length - 1];
30
+ if (!lastOpenTag || lastOpenTag.name !== name) {
31
+ continue;
32
+ }
33
+ openTags.pop();
34
+ blocks.push(createBlockNode(lineStarts, text.length, lastOpenTag, tag));
35
+ }
36
+ while (openTags.length > 0) {
37
+ const unclosedTag = openTags.pop();
38
+ if (!unclosedTag) {
39
+ continue;
40
+ }
41
+ blocks.push(createBlockNode(lineStarts, text.length, unclosedTag));
42
+ }
43
+ blocks.sort((left, right) => {
44
+ const startOffsetDifference = left.openTag.range.start.offset - right.openTag.range.start.offset;
45
+ if (startOffsetDifference !== 0) {
46
+ return startOffsetDifference;
47
+ }
48
+ return left.range.end.offset - right.range.end.offset;
49
+ });
50
+ return {
51
+ text,
52
+ lineStarts,
53
+ tags,
54
+ blocks,
55
+ };
56
+ }
57
+ function createBlockNode(lineStarts, textLength, openTag, closeTag) {
58
+ const rangeStartOffset = openTag.range.start.offset;
59
+ const rangeEndOffset = closeTag?.range.end.offset ?? textLength;
60
+ const contentStartOffset = openTag.range.end.offset;
61
+ const contentEndOffset = closeTag?.range.start.offset ?? textLength;
62
+ return {
63
+ name: openTag.name,
64
+ kind: classifyBlockKind(openTag.name),
65
+ openTag,
66
+ closeTag,
67
+ range: (0, sourcePositions_1.createLocatedRange)(lineStarts, rangeStartOffset, rangeEndOffset),
68
+ contentRange: (0, sourcePositions_1.createLocatedRange)(lineStarts, contentStartOffset, contentEndOffset),
69
+ isClosed: closeTag !== undefined,
70
+ };
71
+ }
72
+ function classifyBlockKind(name) {
73
+ switch (name) {
74
+ case 'template':
75
+ return 'template';
76
+ case 'ts':
77
+ return 'script-ts';
78
+ case 'js':
79
+ return 'script-js';
80
+ case 'css':
81
+ return 'style-css';
82
+ case 'scss':
83
+ return 'style-scss';
84
+ case 'sass':
85
+ return 'style-sass';
86
+ case 'html':
87
+ return 'alias-html';
88
+ case 'tpl':
89
+ return 'alias-tpl';
90
+ default:
91
+ return 'unknown';
92
+ }
93
+ }
94
+ //# sourceMappingURL=parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/language/parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ interface KpaProjectConfig {
2
+ configPath: string;
3
+ baseDirectory: string;
4
+ baseUrl?: string;
5
+ paths: Readonly<Record<string, readonly string[]>>;
6
+ }
7
+ export interface ResolvedKpaProjectConfig extends KpaProjectConfig {
8
+ }
9
+ export declare function resolveWorkspaceImportPath(importPath: string, sourcePath: string | undefined, allowedExtensions: readonly string[]): string | undefined;
10
+ export declare function clearProjectConfigCache(): void;
11
+ export declare function invalidateProjectConfigCacheForPath(filePath: string): void;
12
+ export declare function getNearestProjectConfig(sourcePath: string | undefined): ResolvedKpaProjectConfig | undefined;
13
+ export declare function getNearestProjectConfigPath(sourcePath: string | undefined): string | undefined;
14
+ export {};
@@ -0,0 +1,154 @@
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.resolveWorkspaceImportPath = resolveWorkspaceImportPath;
7
+ exports.clearProjectConfigCache = clearProjectConfigCache;
8
+ exports.invalidateProjectConfigCacheForPath = invalidateProjectConfigCacheForPath;
9
+ exports.getNearestProjectConfig = getNearestProjectConfig;
10
+ exports.getNearestProjectConfigPath = getNearestProjectConfigPath;
11
+ const fs_1 = __importDefault(require("fs"));
12
+ const path_1 = __importDefault(require("path"));
13
+ const typescript_1 = __importDefault(require("typescript"));
14
+ const projectConfigCache = new Map();
15
+ function resolveWorkspaceImportPath(importPath, sourcePath, allowedExtensions) {
16
+ if (!sourcePath) {
17
+ return undefined;
18
+ }
19
+ const directResolution = resolveCandidatePath(importPath.startsWith('.') || path_1.default.isAbsolute(importPath)
20
+ ? path_1.default.isAbsolute(importPath)
21
+ ? importPath
22
+ : path_1.default.resolve(path_1.default.dirname(sourcePath), importPath)
23
+ : undefined, allowedExtensions);
24
+ if (directResolution) {
25
+ return directResolution;
26
+ }
27
+ const projectConfig = findNearestProjectConfig(sourcePath);
28
+ if (!projectConfig) {
29
+ return undefined;
30
+ }
31
+ const baseUrlDirectory = projectConfig.baseUrl
32
+ ? path_1.default.resolve(projectConfig.baseDirectory, projectConfig.baseUrl)
33
+ : projectConfig.baseDirectory;
34
+ const mappedCandidates = resolvePathAliases(importPath, projectConfig, baseUrlDirectory);
35
+ for (const candidatePath of mappedCandidates) {
36
+ const resolvedCandidate = resolveCandidatePath(candidatePath, allowedExtensions);
37
+ if (resolvedCandidate) {
38
+ return resolvedCandidate;
39
+ }
40
+ }
41
+ if (!importPath.startsWith('.') && !path_1.default.isAbsolute(importPath)) {
42
+ return resolveCandidatePath(path_1.default.resolve(baseUrlDirectory, importPath), allowedExtensions);
43
+ }
44
+ return undefined;
45
+ }
46
+ function clearProjectConfigCache() {
47
+ projectConfigCache.clear();
48
+ }
49
+ function invalidateProjectConfigCacheForPath(filePath) {
50
+ let currentDirectory = path_1.default.dirname(filePath);
51
+ let didReachFilesystemRoot = false;
52
+ while (!didReachFilesystemRoot) {
53
+ projectConfigCache.delete(currentDirectory);
54
+ const parentDirectory = path_1.default.dirname(currentDirectory);
55
+ if (parentDirectory === currentDirectory) {
56
+ didReachFilesystemRoot = true;
57
+ continue;
58
+ }
59
+ currentDirectory = parentDirectory;
60
+ }
61
+ }
62
+ function getNearestProjectConfig(sourcePath) {
63
+ if (!sourcePath) {
64
+ return undefined;
65
+ }
66
+ return findNearestProjectConfig(sourcePath);
67
+ }
68
+ function getNearestProjectConfigPath(sourcePath) {
69
+ return getNearestProjectConfig(sourcePath)?.configPath;
70
+ }
71
+ function findNearestProjectConfig(sourcePath) {
72
+ let currentDirectory = path_1.default.dirname(sourcePath);
73
+ let didReachFilesystemRoot = false;
74
+ while (!didReachFilesystemRoot) {
75
+ const cachedEntry = projectConfigCache.get(currentDirectory);
76
+ if (cachedEntry !== undefined) {
77
+ return cachedEntry ?? undefined;
78
+ }
79
+ const tsconfigPath = path_1.default.join(currentDirectory, 'tsconfig.json');
80
+ const jsconfigPath = path_1.default.join(currentDirectory, 'jsconfig.json');
81
+ const configPath = fs_1.default.existsSync(tsconfigPath)
82
+ ? tsconfigPath
83
+ : fs_1.default.existsSync(jsconfigPath)
84
+ ? jsconfigPath
85
+ : undefined;
86
+ if (configPath) {
87
+ const projectConfig = readProjectConfig(configPath);
88
+ projectConfigCache.set(currentDirectory, projectConfig ?? null);
89
+ return projectConfig ?? undefined;
90
+ }
91
+ const parentDirectory = path_1.default.dirname(currentDirectory);
92
+ if (parentDirectory === currentDirectory) {
93
+ projectConfigCache.set(currentDirectory, null);
94
+ didReachFilesystemRoot = true;
95
+ continue;
96
+ }
97
+ currentDirectory = parentDirectory;
98
+ }
99
+ return undefined;
100
+ }
101
+ function readProjectConfig(configPath) {
102
+ const configFile = typescript_1.default.readConfigFile(configPath, typescript_1.default.sys.readFile);
103
+ if (configFile.error || !configFile.config) {
104
+ return undefined;
105
+ }
106
+ const compilerOptions = (configFile.config.compilerOptions ?? {});
107
+ return {
108
+ configPath,
109
+ baseDirectory: path_1.default.dirname(configPath),
110
+ baseUrl: compilerOptions.baseUrl,
111
+ paths: compilerOptions.paths ?? {},
112
+ };
113
+ }
114
+ function resolvePathAliases(importPath, projectConfig, baseUrlDirectory) {
115
+ const candidates = [];
116
+ for (const [pattern, targetPatterns] of Object.entries(projectConfig.paths)) {
117
+ const wildcardIndex = pattern.indexOf('*');
118
+ if (wildcardIndex === -1) {
119
+ if (pattern !== importPath) {
120
+ continue;
121
+ }
122
+ for (const targetPattern of targetPatterns) {
123
+ candidates.push(path_1.default.resolve(baseUrlDirectory, targetPattern));
124
+ }
125
+ continue;
126
+ }
127
+ const prefix = pattern.slice(0, wildcardIndex);
128
+ const suffix = pattern.slice(wildcardIndex + 1);
129
+ if (!importPath.startsWith(prefix) || !importPath.endsWith(suffix)) {
130
+ continue;
131
+ }
132
+ const wildcardValue = importPath.slice(prefix.length, importPath.length - suffix.length);
133
+ for (const targetPattern of targetPatterns) {
134
+ candidates.push(path_1.default.resolve(baseUrlDirectory, targetPattern.replace('*', wildcardValue)));
135
+ }
136
+ }
137
+ return candidates;
138
+ }
139
+ function resolveCandidatePath(candidateBasePath, allowedExtensions) {
140
+ if (!candidateBasePath) {
141
+ return undefined;
142
+ }
143
+ const extension = path_1.default.extname(candidateBasePath);
144
+ const candidatePaths = extension.length > 0
145
+ ? allowedExtensions.includes(extension)
146
+ ? [candidateBasePath]
147
+ : []
148
+ : [
149
+ ...allowedExtensions.map((allowedExtension) => `${candidateBasePath}${allowedExtension}`),
150
+ ...allowedExtensions.map((allowedExtension) => path_1.default.join(candidateBasePath, `index${allowedExtension}`)),
151
+ ];
152
+ return candidatePaths.find((candidatePath) => fs_1.default.existsSync(candidatePath));
153
+ }
154
+ //# sourceMappingURL=projectConfig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projectConfig.js","sourceRoot":"","sources":["../../src/language/projectConfig.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { KpaLocatedRange, KpaSourcePosition } from './ast';
2
+ export declare function createLineStarts(text: string): number[];
3
+ export declare function offsetToPosition(lineStarts: readonly number[], offset: number): KpaSourcePosition;
4
+ export declare function createLocatedRange(lineStarts: readonly number[], startOffset: number, endOffset: number): KpaLocatedRange;
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createLineStarts = createLineStarts;
4
+ exports.offsetToPosition = offsetToPosition;
5
+ exports.createLocatedRange = createLocatedRange;
6
+ function createLineStarts(text) {
7
+ const lineStarts = [0];
8
+ for (let index = 0; index < text.length; index++) {
9
+ if (text[index] === '\n') {
10
+ lineStarts.push(index + 1);
11
+ }
12
+ }
13
+ return lineStarts;
14
+ }
15
+ function offsetToPosition(lineStarts, offset) {
16
+ const normalizedOffset = Math.max(0, offset);
17
+ let low = 0;
18
+ let high = lineStarts.length - 1;
19
+ while (low <= high) {
20
+ const middle = Math.floor((low + high) / 2);
21
+ const currentLineStart = lineStarts[middle];
22
+ const nextLineStart = middle + 1 < lineStarts.length ? lineStarts[middle + 1] : Number.POSITIVE_INFINITY;
23
+ if (normalizedOffset < currentLineStart) {
24
+ high = middle - 1;
25
+ continue;
26
+ }
27
+ if (normalizedOffset >= nextLineStart) {
28
+ low = middle + 1;
29
+ continue;
30
+ }
31
+ return {
32
+ offset: normalizedOffset,
33
+ line: middle,
34
+ character: normalizedOffset - currentLineStart,
35
+ };
36
+ }
37
+ const lastLine = lineStarts.length - 1;
38
+ return {
39
+ offset: normalizedOffset,
40
+ line: lastLine,
41
+ character: normalizedOffset - lineStarts[lastLine],
42
+ };
43
+ }
44
+ function createLocatedRange(lineStarts, startOffset, endOffset) {
45
+ return {
46
+ start: offsetToPosition(lineStarts, startOffset),
47
+ end: offsetToPosition(lineStarts, endOffset),
48
+ };
49
+ }
50
+ //# sourceMappingURL=sourcePositions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sourcePositions.js","sourceRoot":"","sources":["../../src/language/sourcePositions.ts"],"names":[],"mappings":";;AAEA,4CAUC;AAED,4CAmCC;AAED,gDASC;AA1DD,SAAgB,gBAAgB,CAAC,IAAY;IAC3C,MAAM,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC;IAEvB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;QACjD,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC;YACzB,UAAU,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAgB,gBAAgB,CAAC,UAA6B,EAAE,MAAc;IAC5E,MAAM,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IAC7C,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,IAAI,IAAI,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;IAEjC,OAAO,GAAG,IAAI,IAAI,EAAE,CAAC;QACnB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAC5C,MAAM,gBAAgB,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;QAC5C,MAAM,aAAa,GACjB,MAAM,GAAG,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,iBAAiB,CAAC;QAErF,IAAI,gBAAgB,GAAG,gBAAgB,EAAE,CAAC;YACxC,IAAI,GAAG,MAAM,GAAG,CAAC,CAAC;YAClB,SAAS;QACX,CAAC;QAED,IAAI,gBAAgB,IAAI,aAAa,EAAE,CAAC;YACtC,GAAG,GAAG,MAAM,GAAG,CAAC,CAAC;YACjB,SAAS;QACX,CAAC;QAED,OAAO;YACL,MAAM,EAAE,gBAAgB;YACxB,IAAI,EAAE,MAAM;YACZ,SAAS,EAAE,gBAAgB,GAAG,gBAAgB;SAC/C,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;IAEvC,OAAO;QACL,MAAM,EAAE,gBAAgB;QACxB,IAAI,EAAE,QAAQ;QACd,SAAS,EAAE,gBAAgB,GAAG,UAAU,CAAC,QAAQ,CAAC;KACnD,CAAC;AACJ,CAAC;AAED,SAAgB,kBAAkB,CAChC,UAA6B,EAC7B,WAAmB,EACnB,SAAiB;IAEjB,OAAO;QACL,KAAK,EAAE,gBAAgB,CAAC,UAAU,EAAE,WAAW,CAAC;QAChD,GAAG,EAAE,gBAAgB,CAAC,UAAU,EAAE,SAAS,CAAC;KAC7C,CAAC;AACJ,CAAC"}
@@ -0,0 +1,25 @@
1
+ import type { KpaBlockKind, KpaDocument, KpaLocatedRange } from './ast';
2
+ import { type KpaTemplateContextBindingOrigin } from './componentContract';
3
+ type ScriptBlockKind = Extract<KpaBlockKind, 'script-ts' | 'script-js'>;
4
+ export type KpaScriptSymbolKind = 'class' | 'enum' | 'function' | 'import' | 'import-type' | 'interface' | 'type-alias' | 'variable';
5
+ export interface KpaScriptSymbol {
6
+ name: string;
7
+ kind: KpaScriptSymbolKind;
8
+ blockName: string;
9
+ blockKind: ScriptBlockKind;
10
+ isExported: boolean;
11
+ isTemplateVisible: boolean;
12
+ origin: 'script' | KpaTemplateContextBindingOrigin;
13
+ optional?: boolean;
14
+ range: KpaLocatedRange;
15
+ typeText?: string;
16
+ valueText?: string;
17
+ }
18
+ export interface KpaLocalScriptSymbolTable {
19
+ all: readonly KpaScriptSymbol[];
20
+ exported: readonly KpaScriptSymbol[];
21
+ templateVisible: readonly KpaScriptSymbol[];
22
+ }
23
+ export declare function collectLocalScriptSymbols(document: KpaDocument): KpaLocalScriptSymbolTable;
24
+ export declare function collectTemplateContextSymbols(document: KpaDocument): readonly KpaScriptSymbol[];
25
+ export {};