@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,456 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Asset Extraction Stage
|
|
4
|
+
*
|
|
5
|
+
* Extracts content from binary files (Excel, Word, PDF, Images) with
|
|
6
|
+
* comprehensive security validation.
|
|
7
|
+
*
|
|
8
|
+
* Supported formats:
|
|
9
|
+
* - Excel: .xlsx, .xls
|
|
10
|
+
* - Word: .docx
|
|
11
|
+
* - PDF: .pdf
|
|
12
|
+
* - Images: .png, .jpg, .jpeg, .gif (metadata only)
|
|
13
|
+
* - Text: .txt, .md, .json, .yaml, .yml
|
|
14
|
+
*/
|
|
15
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
16
|
+
if (k2 === undefined) k2 = k;
|
|
17
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
18
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
19
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
20
|
+
}
|
|
21
|
+
Object.defineProperty(o, k2, desc);
|
|
22
|
+
}) : (function(o, m, k, k2) {
|
|
23
|
+
if (k2 === undefined) k2 = k;
|
|
24
|
+
o[k2] = m[k];
|
|
25
|
+
}));
|
|
26
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
27
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
28
|
+
}) : function(o, v) {
|
|
29
|
+
o["default"] = v;
|
|
30
|
+
});
|
|
31
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
32
|
+
var ownKeys = function(o) {
|
|
33
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
34
|
+
var ar = [];
|
|
35
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
36
|
+
return ar;
|
|
37
|
+
};
|
|
38
|
+
return ownKeys(o);
|
|
39
|
+
};
|
|
40
|
+
return function (mod) {
|
|
41
|
+
if (mod && mod.__esModule) return mod;
|
|
42
|
+
var result = {};
|
|
43
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
44
|
+
__setModuleDefault(result, mod);
|
|
45
|
+
return result;
|
|
46
|
+
};
|
|
47
|
+
})();
|
|
48
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
49
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
50
|
+
};
|
|
51
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
52
|
+
exports.AssetExtractionStage = void 0;
|
|
53
|
+
const path = __importStar(require("path"));
|
|
54
|
+
const fs = __importStar(require("fs-extra"));
|
|
55
|
+
const xlsx = __importStar(require("xlsx"));
|
|
56
|
+
const mammoth_1 = __importDefault(require("mammoth"));
|
|
57
|
+
const errors_1 = require("../../errors");
|
|
58
|
+
const language_map_1 = require("../language-map");
|
|
59
|
+
// Dynamic imports for libraries with platform-specific builds
|
|
60
|
+
let pdfParse = null;
|
|
61
|
+
const loadPdfParse = async () => {
|
|
62
|
+
if (!pdfParse) {
|
|
63
|
+
pdfParse = (await Promise.resolve().then(() => __importStar(require('pdf-parse')))).default || (await Promise.resolve().then(() => __importStar(require('pdf-parse'))));
|
|
64
|
+
}
|
|
65
|
+
return pdfParse;
|
|
66
|
+
};
|
|
67
|
+
let sharp = null;
|
|
68
|
+
const loadSharp = async () => {
|
|
69
|
+
if (!sharp) {
|
|
70
|
+
try {
|
|
71
|
+
sharp = (await Promise.resolve().then(() => __importStar(require('sharp')))).default || (await Promise.resolve().then(() => __importStar(require('sharp'))));
|
|
72
|
+
}
|
|
73
|
+
catch (error) {
|
|
74
|
+
// Sharp not available (Node.js version issue)
|
|
75
|
+
console.warn('Sharp library not available - image metadata extraction disabled');
|
|
76
|
+
return null;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return sharp;
|
|
80
|
+
};
|
|
81
|
+
class AssetExtractionStage {
|
|
82
|
+
constructor() {
|
|
83
|
+
this.maxFileSize = 10 * 1024 * 1024; // 10MB
|
|
84
|
+
this.allowedExtensions = new Set([
|
|
85
|
+
'.xlsx', '.xls', // Excel
|
|
86
|
+
'.docx', // Word
|
|
87
|
+
'.pdf', // PDF
|
|
88
|
+
'.png', '.jpg', '.jpeg', '.gif', // Images
|
|
89
|
+
'.txt', '.md', '.markdown', // Text
|
|
90
|
+
'.json', '.yaml', '.yml', '.csv', // Data
|
|
91
|
+
'.sh', '.bash', '.zsh', '.fish', // Shell scripts (text extraction)
|
|
92
|
+
'.py', '.js', '.ts', '.go', '.rs', '.java', '.c', '.cpp', '.h', '.hpp', // Code files
|
|
93
|
+
'.html', '.xml', '.svg', '.css', '.scss' // Markup
|
|
94
|
+
]);
|
|
95
|
+
}
|
|
96
|
+
async process(context) {
|
|
97
|
+
// Process YAML-defined section file references (system, user, assistant, etc.)
|
|
98
|
+
// Note: 'context' is handled separately to match Python CLI behavior
|
|
99
|
+
if (context.metadata) {
|
|
100
|
+
await this.processYamlSectionFiles(context);
|
|
101
|
+
}
|
|
102
|
+
// Process context files from metadata - adds to context.contexts array
|
|
103
|
+
// This is output at the TOP of the compiled result (matching Python CLI)
|
|
104
|
+
if (context.metadata?.context) {
|
|
105
|
+
await this.processContextFiles(context);
|
|
106
|
+
}
|
|
107
|
+
// Process inline file references in content: [file:./path/to/file.ext]
|
|
108
|
+
if (context.content) {
|
|
109
|
+
await this.processInlineFileReferences(context);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Process context files from metadata.
|
|
114
|
+
* Extracts file content and adds to context.contexts array.
|
|
115
|
+
* This matches the Python CLI behavior where context is output at the top.
|
|
116
|
+
*/
|
|
117
|
+
async processContextFiles(context) {
|
|
118
|
+
if (!context.metadata?.context) {
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
// Normalize to array
|
|
122
|
+
const contextFiles = Array.isArray(context.metadata.context)
|
|
123
|
+
? context.metadata.context.map(f => String(f))
|
|
124
|
+
: [String(context.metadata.context)];
|
|
125
|
+
// Extract content from each context file and add to contexts array
|
|
126
|
+
for (const ctxFileStr of contextFiles) {
|
|
127
|
+
try {
|
|
128
|
+
const extractedContent = await this.extractFile(context, ctxFileStr);
|
|
129
|
+
if (extractedContent) {
|
|
130
|
+
const fileName = path.basename(ctxFileStr);
|
|
131
|
+
context.contexts.push(`## Context from ${fileName}\n\n${extractedContent}`);
|
|
132
|
+
if (context.verbose) {
|
|
133
|
+
console.log(`✓ Extracted context from: ${fileName}`);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
catch (error) {
|
|
138
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
139
|
+
context.addError(`Failed to extract context from ${ctxFileStr}: ${errorMessage}`);
|
|
140
|
+
return; // Stop processing on extraction failure
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
// Remove the # Context section from content since we've added to context.contexts
|
|
144
|
+
if (context.content && contextFiles.length > 0) {
|
|
145
|
+
if (Array.isArray(context.metadata.context)) {
|
|
146
|
+
const placeholder = `[YAML section with ${context.metadata.context.length} file reference(s) - will be processed by asset extraction]`;
|
|
147
|
+
context.content = context.content.replace(placeholder, '');
|
|
148
|
+
}
|
|
149
|
+
else {
|
|
150
|
+
context.content = context.content.replace(String(context.metadata.context), '');
|
|
151
|
+
}
|
|
152
|
+
// Remove the empty # Context heading
|
|
153
|
+
context.content = context.content.replace(/# Context\s*\n+/g, '');
|
|
154
|
+
context.content = context.content.trim();
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Process YAML-defined section file references.
|
|
159
|
+
* Replaces placeholder content with extracted file content.
|
|
160
|
+
*/
|
|
161
|
+
async processYamlSectionFiles(context) {
|
|
162
|
+
if (!context.content || !context.metadata) {
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
const sectionNames = ['system', 'task', 'user', 'assistant', 'response', 'output'];
|
|
166
|
+
for (const sectionName of sectionNames) {
|
|
167
|
+
const sectionValue = context.metadata[sectionName];
|
|
168
|
+
if (Array.isArray(sectionValue)) {
|
|
169
|
+
// Array of file paths
|
|
170
|
+
const extractedContents = [];
|
|
171
|
+
for (const filePath of sectionValue) {
|
|
172
|
+
try {
|
|
173
|
+
const content = await this.extractFile(context, String(filePath));
|
|
174
|
+
if (content) {
|
|
175
|
+
extractedContents.push(content);
|
|
176
|
+
if (context.verbose) {
|
|
177
|
+
console.log(`✓ Extracted ${sectionName} content from: ${path.basename(String(filePath))}`);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
catch (error) {
|
|
182
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
183
|
+
context.addError(`Failed to extract ${sectionName} file ${filePath}: ${errorMessage}`);
|
|
184
|
+
return;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
// Replace placeholder in content
|
|
188
|
+
if (extractedContents.length > 0) {
|
|
189
|
+
const placeholder = `[YAML section with ${sectionValue.length} file reference(s) - will be processed by asset extraction]`;
|
|
190
|
+
const replacement = extractedContents.join('\n\n');
|
|
191
|
+
context.content = context.content.replace(placeholder, replacement);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
else if (typeof sectionValue === 'string' && (sectionValue.startsWith('./') || sectionValue.startsWith('../'))) {
|
|
195
|
+
// Single file path (starts with relative path indicators)
|
|
196
|
+
try {
|
|
197
|
+
const content = await this.extractFile(context, sectionValue);
|
|
198
|
+
if (content) {
|
|
199
|
+
// Replace the file path with extracted content
|
|
200
|
+
context.content = context.content.replace(sectionValue, content);
|
|
201
|
+
if (context.verbose) {
|
|
202
|
+
console.log(`✓ Extracted ${sectionName} content from: ${path.basename(sectionValue)}`);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
catch (error) {
|
|
207
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
208
|
+
context.addError(`Failed to extract ${sectionName} file ${sectionValue}: ${errorMessage}`);
|
|
209
|
+
return;
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Process inline file references in content.
|
|
216
|
+
* Replaces [file:./path] placeholders with extracted content.
|
|
217
|
+
*/
|
|
218
|
+
async processInlineFileReferences(context) {
|
|
219
|
+
if (!context.content) {
|
|
220
|
+
return;
|
|
221
|
+
}
|
|
222
|
+
// Find all [file:...] references
|
|
223
|
+
const fileRefRegex = /\[file:([^\]]+)\]/g;
|
|
224
|
+
const matches = [...context.content.matchAll(fileRefRegex)];
|
|
225
|
+
if (matches.length === 0) {
|
|
226
|
+
return; // No file references to process
|
|
227
|
+
}
|
|
228
|
+
let processedContent = context.content;
|
|
229
|
+
for (const match of matches) {
|
|
230
|
+
const fullMatch = match[0];
|
|
231
|
+
const filePath = match[1];
|
|
232
|
+
try {
|
|
233
|
+
const extractedContent = await this.extractFile(context, filePath);
|
|
234
|
+
if (extractedContent) {
|
|
235
|
+
// Replace the placeholder with extracted content
|
|
236
|
+
processedContent = processedContent.replace(fullMatch, extractedContent);
|
|
237
|
+
if (context.verbose) {
|
|
238
|
+
console.log(`✓ Extracted inline file: ${filePath}`);
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
catch (error) {
|
|
243
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
244
|
+
context.addError(`Failed to extract inline file ${filePath}: ${errorMessage}`);
|
|
245
|
+
return; // Stop processing on extraction failure
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
context.content = processedContent;
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Extract content from a file with security validation.
|
|
252
|
+
*/
|
|
253
|
+
async extractFile(context, filePathStr) {
|
|
254
|
+
// Resolve relative paths relative to source file
|
|
255
|
+
const sourceDir = context.fileSystem.dirname(context.sourceFile);
|
|
256
|
+
let filePath;
|
|
257
|
+
// Use fileSystem's resolve method for path resolution
|
|
258
|
+
if (filePathStr.startsWith('./') || filePathStr.startsWith('../')) {
|
|
259
|
+
// Relative path - resolve from source directory
|
|
260
|
+
filePath = context.fileSystem.resolve(sourceDir, filePathStr);
|
|
261
|
+
}
|
|
262
|
+
else if (path.isAbsolute(filePathStr)) {
|
|
263
|
+
// Absolute path
|
|
264
|
+
filePath = filePathStr;
|
|
265
|
+
}
|
|
266
|
+
else {
|
|
267
|
+
// Relative to source directory
|
|
268
|
+
filePath = context.fileSystem.join(sourceDir, filePathStr);
|
|
269
|
+
}
|
|
270
|
+
// Security: Check file exists using fileSystem abstraction
|
|
271
|
+
const exists = await Promise.resolve(context.fileSystem.exists(filePath));
|
|
272
|
+
if (!exists) {
|
|
273
|
+
throw new Error(`Context file not found: ${filePath}`);
|
|
274
|
+
}
|
|
275
|
+
// Extract based on file type
|
|
276
|
+
const ext = path.extname(filePath).toLowerCase();
|
|
277
|
+
try {
|
|
278
|
+
switch (ext) {
|
|
279
|
+
case '.xlsx':
|
|
280
|
+
case '.xls':
|
|
281
|
+
return await this.extractExcel(filePath);
|
|
282
|
+
case '.docx':
|
|
283
|
+
return await this.extractWord(filePath);
|
|
284
|
+
case '.pdf':
|
|
285
|
+
return await this.extractPdf(filePath);
|
|
286
|
+
case '.png':
|
|
287
|
+
case '.jpg':
|
|
288
|
+
case '.jpeg':
|
|
289
|
+
case '.gif':
|
|
290
|
+
return await this.extractImageMetadata(filePath);
|
|
291
|
+
default:
|
|
292
|
+
// All other allowed extensions are treated as text
|
|
293
|
+
return await this.extractText(context, filePath);
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
catch (error) {
|
|
297
|
+
throw new Error(`Extraction failed for ${path.basename(filePath)}: ${error instanceof Error ? error.message : String(error)}`);
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
/**
|
|
301
|
+
* Security: Validate file path for path traversal and other attacks.
|
|
302
|
+
*/
|
|
303
|
+
async validateFilePath(filePath, sourceDir) {
|
|
304
|
+
// Normalize path
|
|
305
|
+
const normalized = path.normalize(filePath);
|
|
306
|
+
// Check for null bytes (directory traversal attack)
|
|
307
|
+
if (normalized.includes('\0')) {
|
|
308
|
+
throw new errors_1.SecurityError('Null byte detected in file path');
|
|
309
|
+
}
|
|
310
|
+
// Ensure resolved path doesn't escape project boundaries
|
|
311
|
+
const projectRoot = process.cwd();
|
|
312
|
+
if (!normalized.startsWith(sourceDir) && !normalized.startsWith(projectRoot)) {
|
|
313
|
+
throw new errors_1.SecurityError(`File path outside allowed directories: ${filePath}`);
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
/**
|
|
317
|
+
* Security: Validate file properties.
|
|
318
|
+
*/
|
|
319
|
+
async validateFile(filePath) {
|
|
320
|
+
const stats = await fs.stat(filePath);
|
|
321
|
+
// Security: Must be a regular file (not symlink, device, etc.)
|
|
322
|
+
if (!stats.isFile()) {
|
|
323
|
+
throw new errors_1.SecurityError(`Path must be a regular file: ${filePath}`);
|
|
324
|
+
}
|
|
325
|
+
// Security: Check file size
|
|
326
|
+
if (stats.size > this.maxFileSize) {
|
|
327
|
+
throw new errors_1.SecurityError(`File too large: ${stats.size} bytes (max: ${this.maxFileSize})`);
|
|
328
|
+
}
|
|
329
|
+
// Security: Check file extension
|
|
330
|
+
const ext = path.extname(filePath).toLowerCase();
|
|
331
|
+
if (!this.allowedExtensions.has(ext)) {
|
|
332
|
+
throw new errors_1.SecurityError(`File extension not allowed: ${ext}`);
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
/**
|
|
336
|
+
* Extract content from Excel files.
|
|
337
|
+
*/
|
|
338
|
+
async extractExcel(filePath) {
|
|
339
|
+
try {
|
|
340
|
+
const workbook = xlsx.readFile(filePath);
|
|
341
|
+
const sheets = [];
|
|
342
|
+
for (const sheetName of workbook.SheetNames) {
|
|
343
|
+
const sheet = workbook.Sheets[sheetName];
|
|
344
|
+
// Convert sheet to CSV format
|
|
345
|
+
const csv = xlsx.utils.sheet_to_csv(sheet);
|
|
346
|
+
if (csv.trim()) {
|
|
347
|
+
sheets.push(`### Sheet: ${sheetName}\n\n\`\`\`csv\n${csv}\n\`\`\``);
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
return sheets.join('\n\n');
|
|
351
|
+
}
|
|
352
|
+
catch (error) {
|
|
353
|
+
throw new Error(`Excel extraction failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
/**
|
|
357
|
+
* Extract content from Word documents.
|
|
358
|
+
*/
|
|
359
|
+
async extractWord(filePath) {
|
|
360
|
+
try {
|
|
361
|
+
const buffer = await fs.readFile(filePath);
|
|
362
|
+
const result = await mammoth_1.default.extractRawText({ buffer });
|
|
363
|
+
// Security: Limit output size
|
|
364
|
+
const maxOutputSize = 1024 * 1024; // 1MB
|
|
365
|
+
if (result.value.length > maxOutputSize) {
|
|
366
|
+
return result.value.substring(0, maxOutputSize) + '\n\n[Content truncated...]';
|
|
367
|
+
}
|
|
368
|
+
return result.value;
|
|
369
|
+
}
|
|
370
|
+
catch (error) {
|
|
371
|
+
throw new Error(`Word extraction failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
/**
|
|
375
|
+
* Extract content from PDF files.
|
|
376
|
+
*/
|
|
377
|
+
async extractPdf(filePath) {
|
|
378
|
+
try {
|
|
379
|
+
const buffer = await fs.readFile(filePath);
|
|
380
|
+
// Load pdf-parse dynamically
|
|
381
|
+
const pdf = await loadPdfParse();
|
|
382
|
+
// Security: Set max pages to prevent DoS
|
|
383
|
+
const data = await pdf(buffer, {
|
|
384
|
+
max: 100 // Maximum 100 pages
|
|
385
|
+
});
|
|
386
|
+
// Security: Limit output size
|
|
387
|
+
const maxOutputSize = 1024 * 1024; // 1MB
|
|
388
|
+
if (data.text.length > maxOutputSize) {
|
|
389
|
+
return data.text.substring(0, maxOutputSize) + '\n\n[Content truncated...]';
|
|
390
|
+
}
|
|
391
|
+
return data.text;
|
|
392
|
+
}
|
|
393
|
+
catch (error) {
|
|
394
|
+
throw new Error(`PDF extraction failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
/**
|
|
398
|
+
* Extract metadata from images (OCR not implemented).
|
|
399
|
+
*/
|
|
400
|
+
async extractImageMetadata(filePath) {
|
|
401
|
+
try {
|
|
402
|
+
// Load sharp dynamically
|
|
403
|
+
const sharpLib = await loadSharp();
|
|
404
|
+
if (!sharpLib) {
|
|
405
|
+
return `Image: ${path.basename(filePath)}\n\n*Note: Image metadata extraction requires Node.js >=20.3.0 or >=21.0.0*`;
|
|
406
|
+
}
|
|
407
|
+
const metadata = await sharpLib(filePath).metadata();
|
|
408
|
+
const info = [
|
|
409
|
+
`Image: ${path.basename(filePath)}`,
|
|
410
|
+
`Format: ${metadata.format}`,
|
|
411
|
+
`Dimensions: ${metadata.width}x${metadata.height}`,
|
|
412
|
+
`Color Space: ${metadata.space}`,
|
|
413
|
+
metadata.density ? `DPI: ${metadata.density}` : null
|
|
414
|
+
].filter(Boolean).join('\n');
|
|
415
|
+
return `\`\`\`\n${info}\n\`\`\`\n\n*Note: OCR not implemented. Only metadata extracted.*`;
|
|
416
|
+
}
|
|
417
|
+
catch (error) {
|
|
418
|
+
throw new Error(`Image metadata extraction failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
/**
|
|
422
|
+
* Extract plain text content.
|
|
423
|
+
* For code files, wraps content in markdown code blocks with appropriate language identifier.
|
|
424
|
+
*/
|
|
425
|
+
async extractText(context, filePath) {
|
|
426
|
+
try {
|
|
427
|
+
// Use fileSystem abstraction for text file reading (supports MemoryFileSystem)
|
|
428
|
+
let content = await Promise.resolve(context.fileSystem.readFile(filePath));
|
|
429
|
+
// Security: Limit output size
|
|
430
|
+
const maxOutputSize = 1024 * 1024; // 1MB
|
|
431
|
+
if (content.length > maxOutputSize) {
|
|
432
|
+
content = content.substring(0, maxOutputSize) + '\n\n[Content truncated...]';
|
|
433
|
+
}
|
|
434
|
+
// Security: Remove any null bytes
|
|
435
|
+
content = content.replace(/\0/g, '');
|
|
436
|
+
// Get file extension and check if it's a code file that should be wrapped
|
|
437
|
+
const ext = path.extname(filePath).toLowerCase();
|
|
438
|
+
const language = (0, language_map_1.getLanguageForExtension)(ext);
|
|
439
|
+
if (language) {
|
|
440
|
+
// Wrap code files in markdown code blocks with language identifier
|
|
441
|
+
// This enables code block filtering based on context file types
|
|
442
|
+
return '```' + language + '\n' + content + '\n```';
|
|
443
|
+
}
|
|
444
|
+
// Return plain text for non-code files (.txt, etc.)
|
|
445
|
+
return content;
|
|
446
|
+
}
|
|
447
|
+
catch (error) {
|
|
448
|
+
throw new Error(`Text extraction failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
449
|
+
}
|
|
450
|
+
}
|
|
451
|
+
getName() {
|
|
452
|
+
return 'Asset Extraction';
|
|
453
|
+
}
|
|
454
|
+
}
|
|
455
|
+
exports.AssetExtractionStage = AssetExtractionStage;
|
|
456
|
+
//# sourceMappingURL=assets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assets.js","sourceRoot":"","sources":["../../../../src/lib/compiler/stages/assets.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Code Generation Stage
|
|
3
|
+
*
|
|
4
|
+
* Generates output in the target format using registered formatters.
|
|
5
|
+
*/
|
|
6
|
+
import { CompilerStage, CompilationContext, OutputFormatter } from '../types';
|
|
7
|
+
export declare class CodeGenerationStage implements CompilerStage {
|
|
8
|
+
private formatters;
|
|
9
|
+
constructor(formatters?: Map<string, OutputFormatter>);
|
|
10
|
+
/**
|
|
11
|
+
* Register a new output formatter.
|
|
12
|
+
*/
|
|
13
|
+
registerFormatter(formatter: OutputFormatter): void;
|
|
14
|
+
process(context: CompilationContext): Promise<void>;
|
|
15
|
+
getName(): string;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=codegen.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codegen.d.ts","sourceRoot":"","sources":["../../../../src/lib/compiler/stages/codegen.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,eAAe,EAAkB,MAAM,UAAU,CAAC;AAK9F,qBAAa,mBAAoB,YAAW,aAAa;IACvD,OAAO,CAAC,UAAU,CAA+B;gBAErC,UAAU,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC;IASrD;;OAEG;IACH,iBAAiB,CAAC,SAAS,EAAE,eAAe,GAAG,IAAI;IAI7C,OAAO,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAuCzD,OAAO,IAAI,MAAM;CAGlB"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Code Generation Stage
|
|
4
|
+
*
|
|
5
|
+
* Generates output in the target format using registered formatters.
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.CodeGenerationStage = void 0;
|
|
9
|
+
const markdown_1 = require("../formatters/markdown");
|
|
10
|
+
const openai_1 = require("../formatters/openai");
|
|
11
|
+
const anthropic_1 = require("../formatters/anthropic");
|
|
12
|
+
class CodeGenerationStage {
|
|
13
|
+
constructor(formatters) {
|
|
14
|
+
this.formatters = formatters || new Map();
|
|
15
|
+
// Register default formatters
|
|
16
|
+
this.registerFormatter(new markdown_1.MarkdownFormatter());
|
|
17
|
+
this.registerFormatter(new openai_1.OpenAIFormatter());
|
|
18
|
+
this.registerFormatter(new anthropic_1.AnthropicFormatter());
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Register a new output formatter.
|
|
22
|
+
*/
|
|
23
|
+
registerFormatter(formatter) {
|
|
24
|
+
this.formatters.set(formatter.name, formatter);
|
|
25
|
+
}
|
|
26
|
+
async process(context) {
|
|
27
|
+
let formatName = context.outputFormat;
|
|
28
|
+
// Handle legacy format names
|
|
29
|
+
if (formatName.startsWith('to-')) {
|
|
30
|
+
formatName = formatName.substring(3);
|
|
31
|
+
}
|
|
32
|
+
// Handle provider-json shorthand
|
|
33
|
+
if (formatName === 'provider-json') {
|
|
34
|
+
formatName = 'provider-json:openai'; // Default to OpenAI
|
|
35
|
+
}
|
|
36
|
+
const formatter = this.formatters.get(formatName);
|
|
37
|
+
if (!formatter) {
|
|
38
|
+
context.addError(`Unknown output format: ${formatName}`);
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
try {
|
|
42
|
+
const compiled = {
|
|
43
|
+
metadata: context.metadata,
|
|
44
|
+
content: context.content,
|
|
45
|
+
contexts: context.contexts,
|
|
46
|
+
parameters: context.parameters,
|
|
47
|
+
verbose: context.verbose
|
|
48
|
+
};
|
|
49
|
+
context.compiledResult = await formatter.format(compiled);
|
|
50
|
+
if (context.verbose) {
|
|
51
|
+
console.log(`✓ Generated output in format: ${formatName}`);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
catch (error) {
|
|
55
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
56
|
+
context.addError(`Code generation failed: ${errorMessage}`);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
getName() {
|
|
60
|
+
return 'Code Generation';
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
exports.CodeGenerationStage = CodeGenerationStage;
|
|
64
|
+
//# sourceMappingURL=codegen.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codegen.js","sourceRoot":"","sources":["../../../../src/lib/compiler/stages/codegen.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAGH,qDAA2D;AAC3D,iDAAuD;AACvD,uDAA6D;AAE7D,MAAa,mBAAmB;IAG9B,YAAY,UAAyC;QACnD,IAAI,CAAC,UAAU,GAAG,UAAU,IAAI,IAAI,GAAG,EAAE,CAAC;QAE1C,8BAA8B;QAC9B,IAAI,CAAC,iBAAiB,CAAC,IAAI,4BAAiB,EAAE,CAAC,CAAC;QAChD,IAAI,CAAC,iBAAiB,CAAC,IAAI,wBAAe,EAAE,CAAC,CAAC;QAC9C,IAAI,CAAC,iBAAiB,CAAC,IAAI,8BAAkB,EAAE,CAAC,CAAC;IACnD,CAAC;IAED;;OAEG;IACH,iBAAiB,CAAC,SAA0B;QAC1C,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IACjD,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,OAA2B;QACvC,IAAI,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC;QAEtC,6BAA6B;QAC7B,IAAI,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YACjC,UAAU,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QACvC,CAAC;QAED,iCAAiC;QACjC,IAAI,UAAU,KAAK,eAAe,EAAE,CAAC;YACnC,UAAU,GAAG,sBAAsB,CAAC,CAAC,oBAAoB;QAC3D,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAClD,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,CAAC,QAAQ,CAAC,0BAA0B,UAAU,EAAE,CAAC,CAAC;YACzD,OAAO;QACT,CAAC;QAED,IAAI,CAAC;YACH,MAAM,QAAQ,GAAmB;gBAC/B,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,UAAU,EAAE,OAAO,CAAC,UAAU;gBAC9B,OAAO,EAAE,OAAO,CAAC,OAAO;aACzB,CAAC;YAEF,OAAO,CAAC,cAAc,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAE1D,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;gBACpB,OAAO,CAAC,GAAG,CAAC,iCAAiC,UAAU,EAAE,CAAC,CAAC;YAC7D,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC5E,OAAO,CAAC,QAAQ,CAAC,2BAA2B,YAAY,EAAE,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;IAED,OAAO;QACL,OAAO,iBAAiB,CAAC;IAC3B,CAAC;CACF;AA7DD,kDA6DC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dependency Resolution Stage
|
|
3
|
+
*
|
|
4
|
+
* Resolves 'using:' imports and 'inherits:' chains, handling both local file
|
|
5
|
+
* paths and package references with alias resolution.
|
|
6
|
+
*
|
|
7
|
+
* This is a direct port of the Python CLI's DependencyResolutionStage.
|
|
8
|
+
*/
|
|
9
|
+
import { CompilerStage, CompilationContext } from '../types';
|
|
10
|
+
export declare class DependencyResolutionStage implements CompilerStage {
|
|
11
|
+
process(context: CompilationContext): Promise<void>;
|
|
12
|
+
/**
|
|
13
|
+
* Process the 'using' field for package imports.
|
|
14
|
+
*/
|
|
15
|
+
private processUsingField;
|
|
16
|
+
/**
|
|
17
|
+
* Resolve a single package import.
|
|
18
|
+
*/
|
|
19
|
+
private resolvePackageImport;
|
|
20
|
+
/**
|
|
21
|
+
* Process the 'inherits' field.
|
|
22
|
+
*/
|
|
23
|
+
private processInheritsField;
|
|
24
|
+
/**
|
|
25
|
+
* Process content reference fields (system, context, user, assistant, response) for alias resolution.
|
|
26
|
+
*/
|
|
27
|
+
private processContentFieldAliases;
|
|
28
|
+
/**
|
|
29
|
+
* Resolve alias prefixes in file paths.
|
|
30
|
+
*
|
|
31
|
+
* Examples:
|
|
32
|
+
* - "@pkg/templates/file.prmd" with "@pkg" aliased to "@scope/package@version"
|
|
33
|
+
* becomes "@scope/package@version/templates/file.prmd"
|
|
34
|
+
*/
|
|
35
|
+
private resolveAliasInPath;
|
|
36
|
+
getName(): string;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=dependency.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dependency.d.ts","sourceRoot":"","sources":["../../../../src/lib/compiler/stages/dependency.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAmB,MAAM,UAAU,CAAC;AAG9E,qBAAa,yBAA0B,YAAW,aAAa;IACvD,OAAO,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAyBzD;;OAEG;YACW,iBAAiB;IA+C/B;;OAEG;YACW,oBAAoB;IAuClC;;OAEG;YACW,oBAAoB;IAwIlC;;OAEG;YACW,0BAA0B;IA0CxC;;;;;;OAMG;IACH,OAAO,CAAC,kBAAkB;IA2B1B,OAAO,IAAI,MAAM;CAGlB"}
|