@prompd/cli 0.3.3
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/README.md +162 -0
- package/bin/prompd.js +23 -0
- package/dist/commands/cache.d.ts +3 -0
- package/dist/commands/cache.d.ts.map +1 -0
- package/dist/commands/cache.js +199 -0
- package/dist/commands/cache.js.map +1 -0
- package/dist/commands/compile.d.ts +9 -0
- package/dist/commands/compile.d.ts.map +1 -0
- package/dist/commands/compile.js +104 -0
- package/dist/commands/compile.js.map +1 -0
- package/dist/commands/config.d.ts +7 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +212 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/create.d.ts +3 -0
- package/dist/commands/create.d.ts.map +1 -0
- package/dist/commands/create.js +183 -0
- package/dist/commands/create.js.map +1 -0
- package/dist/commands/deps.d.ts +3 -0
- package/dist/commands/deps.d.ts.map +1 -0
- package/dist/commands/deps.js +192 -0
- package/dist/commands/deps.js.map +1 -0
- package/dist/commands/explain.d.ts +3 -0
- package/dist/commands/explain.d.ts.map +1 -0
- package/dist/commands/explain.js +227 -0
- package/dist/commands/explain.js.map +1 -0
- package/dist/commands/git.d.ts +3 -0
- package/dist/commands/git.d.ts.map +1 -0
- package/dist/commands/git.js +306 -0
- package/dist/commands/git.js.map +1 -0
- package/dist/commands/init.d.ts +3 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +177 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/list.d.ts +3 -0
- package/dist/commands/list.d.ts.map +1 -0
- package/dist/commands/list.js +126 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/mcp.d.ts +3 -0
- package/dist/commands/mcp.d.ts.map +1 -0
- package/dist/commands/mcp.js +326 -0
- package/dist/commands/mcp.js.map +1 -0
- package/dist/commands/namespace.d.ts +3 -0
- package/dist/commands/namespace.d.ts.map +1 -0
- package/dist/commands/namespace.js +113 -0
- package/dist/commands/namespace.js.map +1 -0
- package/dist/commands/package.d.ts +23 -0
- package/dist/commands/package.d.ts.map +1 -0
- package/dist/commands/package.js +746 -0
- package/dist/commands/package.js.map +1 -0
- package/dist/commands/provider.d.ts +3 -0
- package/dist/commands/provider.d.ts.map +1 -0
- package/dist/commands/provider.js +285 -0
- package/dist/commands/provider.js.map +1 -0
- package/dist/commands/registry.d.ts +9 -0
- package/dist/commands/registry.d.ts.map +1 -0
- package/dist/commands/registry.js +361 -0
- package/dist/commands/registry.js.map +1 -0
- package/dist/commands/run.d.ts +3 -0
- package/dist/commands/run.d.ts.map +1 -0
- package/dist/commands/run.js +157 -0
- package/dist/commands/run.js.map +1 -0
- package/dist/commands/show.d.ts +3 -0
- package/dist/commands/show.d.ts.map +1 -0
- package/dist/commands/show.js +90 -0
- package/dist/commands/show.js.map +1 -0
- package/dist/commands/uninstall.d.ts +3 -0
- package/dist/commands/uninstall.d.ts.map +1 -0
- package/dist/commands/uninstall.js +95 -0
- package/dist/commands/uninstall.js.map +1 -0
- package/dist/commands/validate.d.ts +3 -0
- package/dist/commands/validate.d.ts.map +1 -0
- package/dist/commands/validate.js +57 -0
- package/dist/commands/validate.js.map +1 -0
- package/dist/commands/version.d.ts +3 -0
- package/dist/commands/version.d.ts.map +1 -0
- package/dist/commands/version.js +166 -0
- package/dist/commands/version.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +388 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/auth.d.ts +164 -0
- package/dist/lib/auth.d.ts.map +1 -0
- package/dist/lib/auth.js +388 -0
- package/dist/lib/auth.js.map +1 -0
- package/dist/lib/compiler/file-system.d.ts +178 -0
- package/dist/lib/compiler/file-system.d.ts.map +1 -0
- package/dist/lib/compiler/file-system.js +440 -0
- package/dist/lib/compiler/file-system.js.map +1 -0
- package/dist/lib/compiler/formatters/anthropic.d.ts +21 -0
- package/dist/lib/compiler/formatters/anthropic.d.ts.map +1 -0
- package/dist/lib/compiler/formatters/anthropic.js +95 -0
- package/dist/lib/compiler/formatters/anthropic.js.map +1 -0
- package/dist/lib/compiler/formatters/markdown.d.ts +17 -0
- package/dist/lib/compiler/formatters/markdown.d.ts.map +1 -0
- package/dist/lib/compiler/formatters/markdown.js +114 -0
- package/dist/lib/compiler/formatters/markdown.js.map +1 -0
- package/dist/lib/compiler/formatters/openai.d.ts +21 -0
- package/dist/lib/compiler/formatters/openai.d.ts.map +1 -0
- package/dist/lib/compiler/formatters/openai.js +98 -0
- package/dist/lib/compiler/formatters/openai.js.map +1 -0
- package/dist/lib/compiler/index.d.ts +56 -0
- package/dist/lib/compiler/index.d.ts.map +1 -0
- package/dist/lib/compiler/index.js +165 -0
- package/dist/lib/compiler/index.js.map +1 -0
- package/dist/lib/compiler/language-map.d.ts +31 -0
- package/dist/lib/compiler/language-map.d.ts.map +1 -0
- package/dist/lib/compiler/language-map.js +156 -0
- package/dist/lib/compiler/language-map.js.map +1 -0
- package/dist/lib/compiler/package-resolver.d.ts +68 -0
- package/dist/lib/compiler/package-resolver.d.ts.map +1 -0
- package/dist/lib/compiler/package-resolver.js +254 -0
- package/dist/lib/compiler/package-resolver.js.map +1 -0
- package/dist/lib/compiler/pipeline.d.ts +53 -0
- package/dist/lib/compiler/pipeline.d.ts.map +1 -0
- package/dist/lib/compiler/pipeline.js +209 -0
- package/dist/lib/compiler/pipeline.js.map +1 -0
- package/dist/lib/compiler/prompd-loader.d.ts +108 -0
- package/dist/lib/compiler/prompd-loader.d.ts.map +1 -0
- package/dist/lib/compiler/prompd-loader.js +270 -0
- package/dist/lib/compiler/prompd-loader.js.map +1 -0
- package/dist/lib/compiler/section-override.d.ts +40 -0
- package/dist/lib/compiler/section-override.d.ts.map +1 -0
- package/dist/lib/compiler/section-override.js +296 -0
- package/dist/lib/compiler/section-override.js.map +1 -0
- package/dist/lib/compiler/stages/assets.d.ts +71 -0
- package/dist/lib/compiler/stages/assets.d.ts.map +1 -0
- package/dist/lib/compiler/stages/assets.js +456 -0
- package/dist/lib/compiler/stages/assets.js.map +1 -0
- package/dist/lib/compiler/stages/codegen.d.ts +17 -0
- package/dist/lib/compiler/stages/codegen.d.ts.map +1 -0
- package/dist/lib/compiler/stages/codegen.js +64 -0
- package/dist/lib/compiler/stages/codegen.js.map +1 -0
- package/dist/lib/compiler/stages/dependency.d.ts +38 -0
- package/dist/lib/compiler/stages/dependency.d.ts.map +1 -0
- package/dist/lib/compiler/stages/dependency.js +307 -0
- package/dist/lib/compiler/stages/dependency.js.map +1 -0
- package/dist/lib/compiler/stages/lexical.d.ts +19 -0
- package/dist/lib/compiler/stages/lexical.d.ts.map +1 -0
- package/dist/lib/compiler/stages/lexical.js +92 -0
- package/dist/lib/compiler/stages/lexical.js.map +1 -0
- package/dist/lib/compiler/stages/semantic.d.ts +20 -0
- package/dist/lib/compiler/stages/semantic.d.ts.map +1 -0
- package/dist/lib/compiler/stages/semantic.js +166 -0
- package/dist/lib/compiler/stages/semantic.js.map +1 -0
- package/dist/lib/compiler/stages/template.d.ts +94 -0
- package/dist/lib/compiler/stages/template.d.ts.map +1 -0
- package/dist/lib/compiler/stages/template.js +1044 -0
- package/dist/lib/compiler/stages/template.js.map +1 -0
- package/dist/lib/compiler/types.d.ts +200 -0
- package/dist/lib/compiler/types.d.ts.map +1 -0
- package/dist/lib/compiler/types.js +137 -0
- package/dist/lib/compiler/types.js.map +1 -0
- package/dist/lib/config.d.ts +29 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +375 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/errors.d.ts +19 -0
- package/dist/lib/errors.d.ts.map +1 -0
- package/dist/lib/errors.js +47 -0
- package/dist/lib/errors.js.map +1 -0
- package/dist/lib/executor.d.ts +18 -0
- package/dist/lib/executor.d.ts.map +1 -0
- package/dist/lib/executor.js +372 -0
- package/dist/lib/executor.js.map +1 -0
- package/dist/lib/git.d.ts +74 -0
- package/dist/lib/git.d.ts.map +1 -0
- package/dist/lib/git.js +254 -0
- package/dist/lib/git.js.map +1 -0
- package/dist/lib/index.d.ts +43 -0
- package/dist/lib/index.d.ts.map +1 -0
- package/dist/lib/index.js +108 -0
- package/dist/lib/index.js.map +1 -0
- package/dist/lib/mcp.d.ts +42 -0
- package/dist/lib/mcp.d.ts.map +1 -0
- package/dist/lib/mcp.js +477 -0
- package/dist/lib/mcp.js.map +1 -0
- package/dist/lib/model-updater.d.ts +51 -0
- package/dist/lib/model-updater.d.ts.map +1 -0
- package/dist/lib/model-updater.js +275 -0
- package/dist/lib/model-updater.js.map +1 -0
- package/dist/lib/parser.d.ts +9 -0
- package/dist/lib/parser.d.ts.map +1 -0
- package/dist/lib/parser.js +197 -0
- package/dist/lib/parser.js.map +1 -0
- package/dist/lib/registry.d.ts +183 -0
- package/dist/lib/registry.d.ts.map +1 -0
- package/dist/lib/registry.js +786 -0
- package/dist/lib/registry.js.map +1 -0
- package/dist/lib/rpc-server.d.ts +78 -0
- package/dist/lib/rpc-server.d.ts.map +1 -0
- package/dist/lib/rpc-server.js +404 -0
- package/dist/lib/rpc-server.js.map +1 -0
- package/dist/lib/security.d.ts +120 -0
- package/dist/lib/security.d.ts.map +1 -0
- package/dist/lib/security.js +478 -0
- package/dist/lib/security.js.map +1 -0
- package/dist/lib/validation.d.ts +106 -0
- package/dist/lib/validation.d.ts.map +1 -0
- package/dist/lib/validation.js +398 -0
- package/dist/lib/validation.js.map +1 -0
- package/dist/lib/version.d.ts +29 -0
- package/dist/lib/version.d.ts.map +1 -0
- package/dist/lib/version.js +202 -0
- package/dist/lib/version.js.map +1 -0
- package/dist/lib/workflow-engine.d.ts +161 -0
- package/dist/lib/workflow-engine.d.ts.map +1 -0
- package/dist/lib/workflow-engine.js +422 -0
- package/dist/lib/workflow-engine.js.map +1 -0
- package/dist/lib/workflow.d.ts +102 -0
- package/dist/lib/workflow.d.ts.map +1 -0
- package/dist/lib/workflow.js +228 -0
- package/dist/lib/workflow.js.map +1 -0
- package/dist/server.d.ts +8 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +134 -0
- package/dist/server.js.map +1 -0
- package/dist/types/index.d.ts +116 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +144 -0
- package/dist/types/index.js.map +1 -0
- package/package.json +104 -0
|
@@ -0,0 +1,307 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Dependency Resolution Stage
|
|
4
|
+
*
|
|
5
|
+
* Resolves 'using:' imports and 'inherits:' chains, handling both local file
|
|
6
|
+
* paths and package references with alias resolution.
|
|
7
|
+
*
|
|
8
|
+
* This is a direct port of the Python CLI's DependencyResolutionStage.
|
|
9
|
+
*/
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
exports.DependencyResolutionStage = void 0;
|
|
12
|
+
const package_resolver_1 = require("../package-resolver");
|
|
13
|
+
class DependencyResolutionStage {
|
|
14
|
+
async process(context) {
|
|
15
|
+
if (!context.metadata) {
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
// Initialize resolved packages
|
|
19
|
+
const resolvedPackages = {};
|
|
20
|
+
// Process 'using' field (package imports with optional prefixes)
|
|
21
|
+
if (context.metadata.using) {
|
|
22
|
+
await this.processUsingField(context, context.metadata.using, resolvedPackages);
|
|
23
|
+
}
|
|
24
|
+
// Store resolved imports
|
|
25
|
+
context.dependencies.imports = resolvedPackages;
|
|
26
|
+
// Process 'inherits' field (can be package reference or direct file path)
|
|
27
|
+
if (context.metadata.inherits) {
|
|
28
|
+
await this.processInheritsField(context, context.metadata.inherits, resolvedPackages);
|
|
29
|
+
}
|
|
30
|
+
// Process content reference fields for alias resolution
|
|
31
|
+
await this.processContentFieldAliases(context, resolvedPackages);
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Process the 'using' field for package imports.
|
|
35
|
+
*/
|
|
36
|
+
async processUsingField(context, usingImports, resolvedPackages) {
|
|
37
|
+
if (typeof usingImports === 'string') {
|
|
38
|
+
// Simple string: using: "@package@version"
|
|
39
|
+
await this.resolvePackageImport(context, usingImports, null, resolvedPackages);
|
|
40
|
+
}
|
|
41
|
+
else if (Array.isArray(usingImports)) {
|
|
42
|
+
// List of packages (can be strings, dicts, or objects)
|
|
43
|
+
for (const item of usingImports) {
|
|
44
|
+
if (typeof item === 'string') {
|
|
45
|
+
// Simple string in list
|
|
46
|
+
await this.resolvePackageImport(context, item, null, resolvedPackages);
|
|
47
|
+
}
|
|
48
|
+
else if (typeof item === 'object' && item !== null) {
|
|
49
|
+
// Object with name and REQUIRED prefix
|
|
50
|
+
const packageRef = item.name || item.package || '';
|
|
51
|
+
const prefix = item.prefix;
|
|
52
|
+
if (packageRef) {
|
|
53
|
+
// Prefix is required for 'using' - the whole point is to create a shorthand
|
|
54
|
+
if (!prefix) {
|
|
55
|
+
context.addError(`Package '${packageRef}' in 'using' field must have a prefix for shorthand access`);
|
|
56
|
+
continue;
|
|
57
|
+
}
|
|
58
|
+
await this.resolvePackageImport(context, packageRef, prefix, resolvedPackages);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
else if (typeof usingImports === 'object' && usingImports !== null) {
|
|
64
|
+
// Dict format: {package: prefix} or structured format
|
|
65
|
+
for (const [key, value] of Object.entries(usingImports)) {
|
|
66
|
+
if (typeof value === 'string') {
|
|
67
|
+
// Format: {"@package@version": "prefix"}
|
|
68
|
+
await this.resolvePackageImport(context, key, value, resolvedPackages);
|
|
69
|
+
}
|
|
70
|
+
else if (typeof value === 'object' && value !== null && 'prefix' in value) {
|
|
71
|
+
// Format: {"@package@version": {"prefix": "alias"}}
|
|
72
|
+
const prefix = value.prefix;
|
|
73
|
+
await this.resolvePackageImport(context, key, prefix, resolvedPackages);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Resolve a single package import.
|
|
80
|
+
*/
|
|
81
|
+
async resolvePackageImport(context, packageRef, prefix, resolvedPackages) {
|
|
82
|
+
try {
|
|
83
|
+
// Pass fileSystem, registryUrl, and workspaceRoot to enable proper package resolution
|
|
84
|
+
const packagePath = await (0, package_resolver_1.resolvePackage)(packageRef, {
|
|
85
|
+
fileSystem: context.fileSystem,
|
|
86
|
+
registryUrl: context.registryUrl,
|
|
87
|
+
workspaceRoot: context.workspaceRoot
|
|
88
|
+
});
|
|
89
|
+
resolvedPackages[packageRef] = {
|
|
90
|
+
path: packagePath,
|
|
91
|
+
prefix: prefix || undefined
|
|
92
|
+
};
|
|
93
|
+
if (context.verbose) {
|
|
94
|
+
if (prefix) {
|
|
95
|
+
console.log(`✓ Resolved package: ${packageRef} -> ${packagePath} (prefix: ${prefix})`);
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
console.log(`✓ Resolved package: ${packageRef} -> ${packagePath}`);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
catch (error) {
|
|
103
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
104
|
+
// Find location of 'using:' in source
|
|
105
|
+
const location = context.findLocation(/using:/);
|
|
106
|
+
context.addDiagnostic({
|
|
107
|
+
message: `Failed to resolve package ${packageRef}: ${errorMessage}`,
|
|
108
|
+
severity: 'warning',
|
|
109
|
+
source: 'dependency',
|
|
110
|
+
code: 'PACKAGE_NOT_FOUND',
|
|
111
|
+
...location
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Process the 'inherits' field.
|
|
117
|
+
*/
|
|
118
|
+
async processInheritsField(context, inheritsRef, resolvedPackages) {
|
|
119
|
+
// Resolve aliases in inherits field
|
|
120
|
+
const resolvedInheritsRef = this.resolveAliasInPath(inheritsRef, resolvedPackages);
|
|
121
|
+
if (resolvedInheritsRef !== inheritsRef) {
|
|
122
|
+
// Update the metadata with the resolved reference
|
|
123
|
+
if (context.metadata) {
|
|
124
|
+
context.metadata.inherits = resolvedInheritsRef;
|
|
125
|
+
}
|
|
126
|
+
if (context.verbose) {
|
|
127
|
+
console.log(`✓ Resolved alias in inherits: ${resolvedInheritsRef}`);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
// Check if it's a local file path (starts with . or / or doesn't start with @)
|
|
131
|
+
if (resolvedInheritsRef.startsWith('./') ||
|
|
132
|
+
resolvedInheritsRef.startsWith('../') ||
|
|
133
|
+
resolvedInheritsRef.startsWith('/') ||
|
|
134
|
+
(!resolvedInheritsRef.startsWith('@') && resolvedInheritsRef.includes('.prmd'))) {
|
|
135
|
+
// Direct file path - resolve relative to source file
|
|
136
|
+
const sourceDir = context.fileSystem.dirname(context.sourceFile);
|
|
137
|
+
const parentPath = context.fileSystem.resolve(sourceDir, resolvedInheritsRef);
|
|
138
|
+
// Verify the inherited file exists
|
|
139
|
+
const fileExists = await context.fileSystem.exists(parentPath);
|
|
140
|
+
if (!fileExists) {
|
|
141
|
+
const location = context.findLocation(/inherits:/);
|
|
142
|
+
context.addDiagnostic({
|
|
143
|
+
message: `Inherited file not found: "${resolvedInheritsRef}" (resolved to: ${parentPath})`,
|
|
144
|
+
severity: 'error',
|
|
145
|
+
source: 'dependency',
|
|
146
|
+
code: 'INHERITS_FILE_NOT_FOUND',
|
|
147
|
+
...location
|
|
148
|
+
});
|
|
149
|
+
return; // Don't set dependencies.inherits if file doesn't exist
|
|
150
|
+
}
|
|
151
|
+
context.dependencies.inherits = parentPath;
|
|
152
|
+
if (context.verbose) {
|
|
153
|
+
console.log(`✓ Resolved inheritance file: ${resolvedInheritsRef} -> ${parentPath}`);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
else {
|
|
157
|
+
// Package reference with file path - resolve through package system
|
|
158
|
+
try {
|
|
159
|
+
// Parse package reference and file path
|
|
160
|
+
// Format: @namespace/package@version/path/to/file.prmd
|
|
161
|
+
const pattern = /^(@[\w.-]+\/[\w.-]+@[\w.-]+)\/(.+)$/;
|
|
162
|
+
const match = resolvedInheritsRef.match(pattern);
|
|
163
|
+
if (match) {
|
|
164
|
+
const packageRef = match[1]; // @namespace/package@version
|
|
165
|
+
const filePathInPackage = match[2]; // path/to/file.prmd
|
|
166
|
+
if (context.verbose) {
|
|
167
|
+
console.log(`Parsing package inheritance: ${packageRef} / ${filePathInPackage}`);
|
|
168
|
+
}
|
|
169
|
+
// Resolve the package to its local path (pass fileSystem, registryUrl, and workspaceRoot)
|
|
170
|
+
const packagePath = await (0, package_resolver_1.resolvePackage)(packageRef, {
|
|
171
|
+
fileSystem: context.fileSystem,
|
|
172
|
+
registryUrl: context.registryUrl,
|
|
173
|
+
workspaceRoot: context.workspaceRoot
|
|
174
|
+
});
|
|
175
|
+
// Construct full path to the inherited file
|
|
176
|
+
const fullFilePath = (0, package_resolver_1.resolvePackageFile)(packagePath, filePathInPackage);
|
|
177
|
+
// Verify the file exists within the package
|
|
178
|
+
const fileExists = await context.fileSystem.exists(fullFilePath);
|
|
179
|
+
if (!fileExists) {
|
|
180
|
+
const location = context.findLocation(/inherits:/);
|
|
181
|
+
context.addDiagnostic({
|
|
182
|
+
message: `Inherited file not found in package: "${filePathInPackage}" (package: ${packageRef})`,
|
|
183
|
+
severity: 'error',
|
|
184
|
+
source: 'dependency',
|
|
185
|
+
code: 'INHERITS_FILE_NOT_FOUND',
|
|
186
|
+
...location
|
|
187
|
+
});
|
|
188
|
+
return;
|
|
189
|
+
}
|
|
190
|
+
context.dependencies.inherits = fullFilePath;
|
|
191
|
+
if (context.verbose) {
|
|
192
|
+
console.log(`✓ Resolved inheritance package: ${resolvedInheritsRef} -> ${fullFilePath}`);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
else {
|
|
196
|
+
// Fallback: try as direct package reference (pass fileSystem, registryUrl, and workspaceRoot)
|
|
197
|
+
const parentPath = await (0, package_resolver_1.resolvePackage)(resolvedInheritsRef, {
|
|
198
|
+
fileSystem: context.fileSystem,
|
|
199
|
+
registryUrl: context.registryUrl,
|
|
200
|
+
workspaceRoot: context.workspaceRoot
|
|
201
|
+
});
|
|
202
|
+
// Verify the package directory exists
|
|
203
|
+
const dirExists = await context.fileSystem.exists(parentPath);
|
|
204
|
+
if (!dirExists) {
|
|
205
|
+
const location = context.findLocation(/inherits:/);
|
|
206
|
+
context.addDiagnostic({
|
|
207
|
+
message: `Inherited package not found: "${resolvedInheritsRef}"`,
|
|
208
|
+
severity: 'error',
|
|
209
|
+
source: 'dependency',
|
|
210
|
+
code: 'INHERITS_PACKAGE_NOT_FOUND',
|
|
211
|
+
...location
|
|
212
|
+
});
|
|
213
|
+
return;
|
|
214
|
+
}
|
|
215
|
+
context.dependencies.inherits = parentPath;
|
|
216
|
+
if (context.verbose) {
|
|
217
|
+
console.log(`✓ Resolved inheritance package (direct): ${resolvedInheritsRef} -> ${parentPath}`);
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
catch (error) {
|
|
222
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
223
|
+
// Find location of 'inherits:' in source
|
|
224
|
+
const location = context.findLocation(/inherits:/);
|
|
225
|
+
context.addDiagnostic({
|
|
226
|
+
message: `Failed to resolve inheritance "${resolvedInheritsRef}": ${errorMessage}`,
|
|
227
|
+
severity: 'error',
|
|
228
|
+
source: 'dependency',
|
|
229
|
+
code: 'INHERITS_NOT_FOUND',
|
|
230
|
+
...location
|
|
231
|
+
});
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Process content reference fields (system, context, user, assistant, response) for alias resolution.
|
|
237
|
+
*/
|
|
238
|
+
async processContentFieldAliases(context, resolvedPackages) {
|
|
239
|
+
if (!context.metadata) {
|
|
240
|
+
return;
|
|
241
|
+
}
|
|
242
|
+
const contentFields = ['system', 'assistant', 'context', 'user', 'response'];
|
|
243
|
+
for (const fieldName of contentFields) {
|
|
244
|
+
const fieldValue = context.metadata[fieldName];
|
|
245
|
+
if (fieldValue) {
|
|
246
|
+
// Handle both single strings and lists of strings
|
|
247
|
+
if (typeof fieldValue === 'string') {
|
|
248
|
+
const resolvedValue = this.resolveAliasInPath(fieldValue, resolvedPackages);
|
|
249
|
+
if (resolvedValue !== fieldValue) {
|
|
250
|
+
context.metadata[fieldName] = resolvedValue;
|
|
251
|
+
if (context.verbose) {
|
|
252
|
+
console.log(`✓ Resolved alias in ${fieldName}: ${fieldValue} -> ${resolvedValue}`);
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
else if (Array.isArray(fieldValue)) {
|
|
257
|
+
const resolvedList = [];
|
|
258
|
+
for (const item of fieldValue) {
|
|
259
|
+
if (typeof item === 'string') {
|
|
260
|
+
const resolvedItem = this.resolveAliasInPath(item, resolvedPackages);
|
|
261
|
+
resolvedList.push(resolvedItem);
|
|
262
|
+
if (resolvedItem !== item && context.verbose) {
|
|
263
|
+
console.log(`✓ Resolved alias in ${fieldName}: ${item} -> ${resolvedItem}`);
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
else {
|
|
267
|
+
resolvedList.push(item);
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
context.metadata[fieldName] = resolvedList;
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
/**
|
|
276
|
+
* Resolve alias prefixes in file paths.
|
|
277
|
+
*
|
|
278
|
+
* Examples:
|
|
279
|
+
* - "@pkg/templates/file.prmd" with "@pkg" aliased to "@scope/package@version"
|
|
280
|
+
* becomes "@scope/package@version/templates/file.prmd"
|
|
281
|
+
*/
|
|
282
|
+
resolveAliasInPath(pathStr, resolvedPackages) {
|
|
283
|
+
if (!pathStr.startsWith('@') || !pathStr.includes('/')) {
|
|
284
|
+
return pathStr;
|
|
285
|
+
}
|
|
286
|
+
// Extract the potential alias (everything before the first '/')
|
|
287
|
+
// Use indexOf to preserve the full remaining path (split with limit truncates)
|
|
288
|
+
const firstSlashIndex = pathStr.indexOf('/');
|
|
289
|
+
const potentialAlias = pathStr.substring(0, firstSlashIndex); // e.g., "@pkg"
|
|
290
|
+
const remainingPath = pathStr.substring(firstSlashIndex + 1); // e.g., "templates/file.prmd"
|
|
291
|
+
// Look for this alias in resolved packages
|
|
292
|
+
for (const [packageName, packageInfo] of Object.entries(resolvedPackages)) {
|
|
293
|
+
if (packageInfo.prefix === potentialAlias) {
|
|
294
|
+
// Found the alias! Replace it with the full package name
|
|
295
|
+
const resolvedPath = `${packageName}/${remainingPath}`;
|
|
296
|
+
return resolvedPath;
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
// No alias found, return original path
|
|
300
|
+
return pathStr;
|
|
301
|
+
}
|
|
302
|
+
getName() {
|
|
303
|
+
return 'Dependency Resolution';
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
exports.DependencyResolutionStage = DependencyResolutionStage;
|
|
307
|
+
//# sourceMappingURL=dependency.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dependency.js","sourceRoot":"","sources":["../../../../src/lib/compiler/stages/dependency.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lexical Analysis Stage - Parse YAML frontmatter + Markdown content.
|
|
3
|
+
*
|
|
4
|
+
* This stage parses the .prmd file into structured metadata and content,
|
|
5
|
+
* populating the compilation context for subsequent stages.
|
|
6
|
+
*/
|
|
7
|
+
import { CompilerStage, CompilationContext } from '../types';
|
|
8
|
+
export declare class LexicalAnalysisStage implements CompilerStage {
|
|
9
|
+
private parser;
|
|
10
|
+
constructor();
|
|
11
|
+
process(context: CompilationContext): Promise<void>;
|
|
12
|
+
/**
|
|
13
|
+
* Convert YAML-defined sections (system, user, assistant, etc.) to markdown sections.
|
|
14
|
+
* These are appended to the content after any markdown-defined sections.
|
|
15
|
+
*/
|
|
16
|
+
private injectYamlSections;
|
|
17
|
+
getName(): string;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=lexical.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lexical.d.ts","sourceRoot":"","sources":["../../../../src/lib/compiler/stages/lexical.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAG7D,qBAAa,oBAAqB,YAAW,aAAa;IACxD,OAAO,CAAC,MAAM,CAAe;;IAMvB,OAAO,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IA+CzD;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IAkC1B,OAAO,IAAI,MAAM;CAGlB"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Lexical Analysis Stage - Parse YAML frontmatter + Markdown content.
|
|
4
|
+
*
|
|
5
|
+
* This stage parses the .prmd file into structured metadata and content,
|
|
6
|
+
* populating the compilation context for subsequent stages.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.LexicalAnalysisStage = void 0;
|
|
10
|
+
const parser_1 = require("../../parser");
|
|
11
|
+
class LexicalAnalysisStage {
|
|
12
|
+
constructor() {
|
|
13
|
+
this.parser = new parser_1.PrompdParser();
|
|
14
|
+
}
|
|
15
|
+
async process(context) {
|
|
16
|
+
try {
|
|
17
|
+
// Read file content from file system
|
|
18
|
+
const fileContent = await context.fileSystem.readFile(context.sourceFile);
|
|
19
|
+
// Store raw source for line number calculation in later stages
|
|
20
|
+
context.rawSource = fileContent;
|
|
21
|
+
// Parse the .prmd file content
|
|
22
|
+
const prompd = this.parser.parseContent(fileContent, context.sourceFile);
|
|
23
|
+
// Populate compilation context
|
|
24
|
+
context.metadata = prompd.metadata;
|
|
25
|
+
context.content = prompd.content;
|
|
26
|
+
// Convert YAML-defined sections to markdown sections
|
|
27
|
+
context.content = this.injectYamlSections(prompd.metadata, context.content);
|
|
28
|
+
if (context.verbose) {
|
|
29
|
+
console.log(`✓ Parsed file: ${context.sourceFile}`);
|
|
30
|
+
console.log(` - Name: ${prompd.metadata.name}`);
|
|
31
|
+
console.log(` - Version: ${prompd.metadata.version || 'N/A'}`);
|
|
32
|
+
console.log(` - Parameters: ${prompd.metadata.parameters?.length || 0}`);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
catch (error) {
|
|
36
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
37
|
+
// Try to extract line number from YAML parser errors
|
|
38
|
+
let line;
|
|
39
|
+
let column;
|
|
40
|
+
const lineMatch = errorMessage.match(/at line (\d+)(?:,? column (\d+))?/i);
|
|
41
|
+
if (lineMatch) {
|
|
42
|
+
line = parseInt(lineMatch[1], 10) + 1; // Add 1 for opening ---
|
|
43
|
+
column = lineMatch[2] ? parseInt(lineMatch[2], 10) : 1;
|
|
44
|
+
}
|
|
45
|
+
context.addDiagnostic({
|
|
46
|
+
message: `Lexical analysis failed: ${errorMessage}`,
|
|
47
|
+
severity: 'error',
|
|
48
|
+
source: 'lexical',
|
|
49
|
+
line,
|
|
50
|
+
column,
|
|
51
|
+
code: 'PARSE_ERROR'
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Convert YAML-defined sections (system, user, assistant, etc.) to markdown sections.
|
|
57
|
+
* These are appended to the content after any markdown-defined sections.
|
|
58
|
+
*/
|
|
59
|
+
injectYamlSections(metadata, content) {
|
|
60
|
+
const yamlSections = [];
|
|
61
|
+
// Standard section order: system → context → task → user → assistant → response → output
|
|
62
|
+
const sectionOrder = ['system', 'context', 'task', 'user', 'assistant', 'response', 'output'];
|
|
63
|
+
for (const sectionName of sectionOrder) {
|
|
64
|
+
const sectionValue = metadata[sectionName];
|
|
65
|
+
if (sectionValue) {
|
|
66
|
+
// Capitalize first letter for markdown heading
|
|
67
|
+
const headingName = sectionName.charAt(0).toUpperCase() + sectionName.slice(1);
|
|
68
|
+
if (Array.isArray(sectionValue)) {
|
|
69
|
+
// Array of file paths - will be processed by asset extraction stage
|
|
70
|
+
yamlSections.push(`# ${headingName}`);
|
|
71
|
+
yamlSections.push(`[YAML section with ${sectionValue.length} file reference(s) - will be processed by asset extraction]`);
|
|
72
|
+
}
|
|
73
|
+
else if (typeof sectionValue === 'string') {
|
|
74
|
+
// Direct string content or single file path
|
|
75
|
+
yamlSections.push(`# ${headingName}`);
|
|
76
|
+
yamlSections.push(sectionValue);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
// Append YAML sections to existing content
|
|
81
|
+
if (yamlSections.length > 0) {
|
|
82
|
+
const yamlContent = yamlSections.join('\n\n');
|
|
83
|
+
return content ? `${content}\n\n${yamlContent}` : yamlContent;
|
|
84
|
+
}
|
|
85
|
+
return content;
|
|
86
|
+
}
|
|
87
|
+
getName() {
|
|
88
|
+
return 'Lexical Analysis';
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
exports.LexicalAnalysisStage = LexicalAnalysisStage;
|
|
92
|
+
//# sourceMappingURL=lexical.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lexical.js","sourceRoot":"","sources":["../../../../src/lib/compiler/stages/lexical.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Semantic Analysis Stage - Validate parameters and references.
|
|
3
|
+
*
|
|
4
|
+
* This stage validates the semantic correctness of the prompt, checks required
|
|
5
|
+
* parameters, applies default values, and validates parameter types.
|
|
6
|
+
*/
|
|
7
|
+
import { CompilerStage, CompilationContext } from '../types';
|
|
8
|
+
export declare class SemanticAnalysisStage implements CompilerStage {
|
|
9
|
+
process(context: CompilationContext): Promise<void>;
|
|
10
|
+
/**
|
|
11
|
+
* Validate parameter type.
|
|
12
|
+
*/
|
|
13
|
+
private validateParameterType;
|
|
14
|
+
/**
|
|
15
|
+
* Validate required metadata fields (id, name, version).
|
|
16
|
+
*/
|
|
17
|
+
private validateRequiredMetadata;
|
|
18
|
+
getName(): string;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=semantic.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"semantic.d.ts","sourceRoot":"","sources":["../../../../src/lib/compiler/stages/semantic.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAE7D,qBAAa,qBAAsB,YAAW,aAAa;IACnD,OAAO,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAiFzD;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAmB7B;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAoEhC,OAAO,IAAI,MAAM;CAGlB"}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Semantic Analysis Stage - Validate parameters and references.
|
|
4
|
+
*
|
|
5
|
+
* This stage validates the semantic correctness of the prompt, checks required
|
|
6
|
+
* parameters, applies default values, and validates parameter types.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.SemanticAnalysisStage = void 0;
|
|
10
|
+
class SemanticAnalysisStage {
|
|
11
|
+
async process(context) {
|
|
12
|
+
if (!context.metadata) {
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
// Validate required metadata fields
|
|
16
|
+
this.validateRequiredMetadata(context);
|
|
17
|
+
// Merge default parameter values and validate required parameters
|
|
18
|
+
if (context.metadata.parameters) {
|
|
19
|
+
// Only validate required parameters if we're in execution mode (parameters were explicitly provided).
|
|
20
|
+
// When editing/validating a file (no parameters passed), we shouldn't warn about
|
|
21
|
+
// required parameters since they'll be provided at execution time.
|
|
22
|
+
// A prompt definition file declaring required parameters is perfectly valid.
|
|
23
|
+
const isExecutionMode = Object.keys(context.parameters).length > 0;
|
|
24
|
+
for (const param of context.metadata.parameters) {
|
|
25
|
+
// Add default value if parameter not provided
|
|
26
|
+
if (!(param.name in context.parameters) && param.default !== undefined) {
|
|
27
|
+
context.parameters[param.name] = param.default;
|
|
28
|
+
if (context.verbose) {
|
|
29
|
+
console.log(`✓ Using default value for '${param.name}': ${param.default}`);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
// Validate required parameters - only when executing (parameters were provided)
|
|
33
|
+
// Skip this check when just validating a definition file
|
|
34
|
+
if (isExecutionMode && param.required && !(param.name in context.parameters)) {
|
|
35
|
+
context.addWarning(`Required parameter '${param.name}' not provided`);
|
|
36
|
+
}
|
|
37
|
+
// Type validation for provided parameters
|
|
38
|
+
if (param.name in context.parameters) {
|
|
39
|
+
const value = context.parameters[param.name];
|
|
40
|
+
const isValid = this.validateParameterType(value, param.type);
|
|
41
|
+
if (!isValid) {
|
|
42
|
+
context.addWarning(`Parameter '${param.name}' has incorrect type. Expected: ${param.type}, got: ${typeof value}`);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
// Pattern validation for string parameters
|
|
46
|
+
if (param.pattern && param.name in context.parameters) {
|
|
47
|
+
const value = String(context.parameters[param.name]);
|
|
48
|
+
const regex = new RegExp(param.pattern);
|
|
49
|
+
if (!regex.test(value)) {
|
|
50
|
+
context.addWarning(`Parameter '${param.name}' does not match pattern: ${param.pattern}`);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
// Range validation for number parameters
|
|
54
|
+
if (param.type === 'number' && param.name in context.parameters) {
|
|
55
|
+
const value = Number(context.parameters[param.name]);
|
|
56
|
+
if (param.minimum !== undefined && value < param.minimum) {
|
|
57
|
+
context.addWarning(`Parameter '${param.name}' is below minimum value: ${param.minimum}`);
|
|
58
|
+
}
|
|
59
|
+
if (param.maximum !== undefined && value > param.maximum) {
|
|
60
|
+
context.addWarning(`Parameter '${param.name}' exceeds maximum value: ${param.maximum}`);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
if (context.verbose && context.parameters) {
|
|
66
|
+
const paramCount = Object.keys(context.parameters).length;
|
|
67
|
+
console.log(`✓ Validated ${paramCount} parameter(s)`);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Validate parameter type.
|
|
72
|
+
*/
|
|
73
|
+
validateParameterType(value, expectedType) {
|
|
74
|
+
switch (expectedType) {
|
|
75
|
+
case 'string':
|
|
76
|
+
return typeof value === 'string';
|
|
77
|
+
case 'number':
|
|
78
|
+
case 'integer':
|
|
79
|
+
case 'float':
|
|
80
|
+
return typeof value === 'number' && !isNaN(value);
|
|
81
|
+
case 'boolean':
|
|
82
|
+
return typeof value === 'boolean';
|
|
83
|
+
case 'array':
|
|
84
|
+
return Array.isArray(value);
|
|
85
|
+
case 'object':
|
|
86
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
87
|
+
default:
|
|
88
|
+
return true; // Unknown type, allow it
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Validate required metadata fields (id, name, version).
|
|
93
|
+
*/
|
|
94
|
+
validateRequiredMetadata(context) {
|
|
95
|
+
const metadata = context.metadata;
|
|
96
|
+
if (!metadata)
|
|
97
|
+
return;
|
|
98
|
+
// Validate 'id' field
|
|
99
|
+
if (!metadata.id) {
|
|
100
|
+
const location = context.findLocation(/^---/m);
|
|
101
|
+
context.addDiagnostic({
|
|
102
|
+
message: "Required field 'id' is missing. Add a unique identifier for this prompt.",
|
|
103
|
+
severity: 'error',
|
|
104
|
+
source: 'semantic',
|
|
105
|
+
code: 'MISSING_ID',
|
|
106
|
+
line: location?.line ? location.line + 1 : 2,
|
|
107
|
+
column: 1
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
else if (typeof metadata.id === 'string') {
|
|
111
|
+
// Validate kebab-case format
|
|
112
|
+
if (!/^[a-z0-9-]+$/.test(metadata.id)) {
|
|
113
|
+
const location = context.findLocation(/^\s*id:/m);
|
|
114
|
+
context.addDiagnostic({
|
|
115
|
+
message: `ID '${metadata.id}' should use kebab-case format (lowercase letters, numbers, hyphens only).`,
|
|
116
|
+
severity: 'warning',
|
|
117
|
+
source: 'semantic',
|
|
118
|
+
code: 'INVALID_ID_FORMAT',
|
|
119
|
+
...location
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
// Validate 'name' field
|
|
124
|
+
if (!metadata.name) {
|
|
125
|
+
const location = context.findLocation(/^---/m);
|
|
126
|
+
context.addDiagnostic({
|
|
127
|
+
message: "Required field 'name' is missing. Add a display name for this prompt.",
|
|
128
|
+
severity: 'error',
|
|
129
|
+
source: 'semantic',
|
|
130
|
+
code: 'MISSING_NAME',
|
|
131
|
+
line: location?.line ? location.line + 1 : 2,
|
|
132
|
+
column: 1
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
// Validate 'version' field
|
|
136
|
+
if (!metadata.version) {
|
|
137
|
+
const location = context.findLocation(/^---/m);
|
|
138
|
+
context.addDiagnostic({
|
|
139
|
+
message: "Required field 'version' is missing. Add a semantic version (e.g., 1.0.0).",
|
|
140
|
+
severity: 'error',
|
|
141
|
+
source: 'semantic',
|
|
142
|
+
code: 'MISSING_VERSION',
|
|
143
|
+
line: location?.line ? location.line + 1 : 2,
|
|
144
|
+
column: 1
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
else if (typeof metadata.version === 'string') {
|
|
148
|
+
// Validate semantic version format
|
|
149
|
+
if (!/^\d+\.\d+\.\d+(-[\w.]+)?(\+[\w.]+)?$/.test(metadata.version)) {
|
|
150
|
+
const location = context.findLocation(/^\s*version:/m);
|
|
151
|
+
context.addDiagnostic({
|
|
152
|
+
message: `Invalid semantic version '${metadata.version}'. Use format: MAJOR.MINOR.PATCH (e.g., 1.0.0)`,
|
|
153
|
+
severity: 'error',
|
|
154
|
+
source: 'semantic',
|
|
155
|
+
code: 'INVALID_VERSION',
|
|
156
|
+
...location
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
getName() {
|
|
162
|
+
return 'Semantic Analysis';
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
exports.SemanticAnalysisStage = SemanticAnalysisStage;
|
|
166
|
+
//# sourceMappingURL=semantic.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"semantic.js","sourceRoot":"","sources":["../../../../src/lib/compiler/stages/semantic.ts"],"names":[],"mappings":"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"}
|