@avrm/svi 0.0.1
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/dist/bin/cli.js +6 -0
- package/dist/bin/cli.js.map +1 -0
- package/dist/package.json +39 -0
- package/dist/src/commands/cliOptions.js +58 -0
- package/dist/src/commands/cliOptions.js.map +1 -0
- package/dist/src/commands/entryPoint.js +90 -0
- package/dist/src/commands/entryPoint.js.map +1 -0
- package/dist/src/commands/env.js +141 -0
- package/dist/src/commands/env.js.map +1 -0
- package/dist/src/commands/init.js +108 -0
- package/dist/src/commands/init.js.map +1 -0
- package/dist/src/commands/run.js +58 -0
- package/dist/src/commands/run.js.map +1 -0
- package/dist/src/commands/runner/checkerForRunManager.js +49 -0
- package/dist/src/commands/runner/checkerForRunManager.js.map +1 -0
- package/dist/src/commands/runner/runManager.js +137 -0
- package/dist/src/commands/runner/runManager.js.map +1 -0
- package/dist/src/commands/runner/runStatistics.js +55 -0
- package/dist/src/commands/runner/runStatistics.js.map +1 -0
- package/dist/src/config/config.js +135 -0
- package/dist/src/config/config.js.map +1 -0
- package/dist/src/config/configFinder.js +37 -0
- package/dist/src/config/configFinder.js.map +1 -0
- package/dist/src/llm/llm.js +117 -0
- package/dist/src/llm/llm.js.map +1 -0
- package/dist/src/llm/llmServiceByModel.js +43 -0
- package/dist/src/llm/llmServiceByModel.js.map +1 -0
- package/dist/src/llm/llmUtils.js +23 -0
- package/dist/src/llm/llmUtils.js.map +1 -0
- package/dist/src/llm/theMaximalistLlmJs/LlmJsFactories.js +27 -0
- package/dist/src/llm/theMaximalistLlmJs/LlmJsFactories.js.map +1 -0
- package/dist/src/llm/theMaximalistLlmJs/ModelUsageWrapper.js +55 -0
- package/dist/src/llm/theMaximalistLlmJs/ModelUsageWrapper.js.map +1 -0
- package/dist/src/svi/cacheManager.js +187 -0
- package/dist/src/svi/cacheManager.js.map +1 -0
- package/dist/src/svi/promptBuilder.js +59 -0
- package/dist/src/svi/promptBuilder.js.map +1 -0
- package/dist/src/svi/prompts/extractDeclarations.js +25 -0
- package/dist/src/svi/prompts/extractDeclarations.js.map +1 -0
- package/dist/src/svi/prompts/generate.js +36 -0
- package/dist/src/svi/prompts/generate.js.map +1 -0
- package/dist/src/svi/sviChecks.js +131 -0
- package/dist/src/svi/sviChecks.js.map +1 -0
- package/dist/src/svi/sviDependencies.js +139 -0
- package/dist/src/svi/sviDependencies.js.map +1 -0
- package/dist/src/svi/sviFileClass.js +105 -0
- package/dist/src/svi/sviFileClass.js.map +1 -0
- package/dist/src/svi/sviFileOrderOptimizer/sviDependencyCycleAnalyzer.js +154 -0
- package/dist/src/svi/sviFileOrderOptimizer/sviDependencyCycleAnalyzer.js.map +1 -0
- package/dist/src/svi/sviFileOrderOptimizer/sviDependencyFinder.js +57 -0
- package/dist/src/svi/sviFileOrderOptimizer/sviDependencyFinder.js.map +1 -0
- package/dist/src/svi/sviFileOrderOptimizer/sviFileOrderOptimizer.js +93 -0
- package/dist/src/svi/sviFileOrderOptimizer/sviFileOrderOptimizer.js.map +1 -0
- package/dist/src/svi/sviFileOrderOptimizer/types.js +3 -0
- package/dist/src/svi/sviFileOrderOptimizer/types.js.map +1 -0
- package/dist/src/svi/sviImportPrompts.js +138 -0
- package/dist/src/svi/sviImportPrompts.js.map +1 -0
- package/dist/src/svi/sviLoader.js +138 -0
- package/dist/src/svi/sviLoader.js.map +1 -0
- package/dist/src/svi/sviParser/parsedSviDirectory.js +34 -0
- package/dist/src/svi/sviParser/parsedSviDirectory.js.map +1 -0
- package/dist/src/svi/sviParser/sviParser.js +205 -0
- package/dist/src/svi/sviParser/sviParser.js.map +1 -0
- package/dist/src/svi/sviProcessor.js +138 -0
- package/dist/src/svi/sviProcessor.js.map +1 -0
- package/dist/src/svi/types.js +3 -0
- package/dist/src/svi/types.js.map +1 -0
- package/dist/src/utils/codeClear.js +29 -0
- package/dist/src/utils/codeClear.js.map +1 -0
- package/dist/src/utils/constants.js +6 -0
- package/dist/src/utils/constants.js.map +1 -0
- package/dist/src/utils/fastGlobWrapper.js +34 -0
- package/dist/src/utils/fastGlobWrapper.js.map +1 -0
- package/dist/src/utils/file.js +137 -0
- package/dist/src/utils/file.js.map +1 -0
- package/dist/src/utils/file2.js +26 -0
- package/dist/src/utils/file2.js.map +1 -0
- package/dist/src/utils/logger.js +105 -0
- package/dist/src/utils/logger.js.map +1 -0
- package/dist/src/utils/utils.js +34 -0
- package/dist/src/utils/utils.js.map +1 -0
- package/package.json +38 -0
|
@@ -0,0 +1,138 @@
|
|
|
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.SVIImportPrompts = void 0;
|
|
7
|
+
const logger_1 = __importDefault(require("../utils/logger"));
|
|
8
|
+
//import path from "path";
|
|
9
|
+
const fs_1 = __importDefault(require("fs"));
|
|
10
|
+
//import { SVIParser } from "./sviParser/sviParser";
|
|
11
|
+
const parsedSviDirectory_1 = __importDefault(require("./sviParser/parsedSviDirectory"));
|
|
12
|
+
const utils_1 = require("../utils/utils");
|
|
13
|
+
const file_1 = require("../utils/file");
|
|
14
|
+
const sviDependencies_1 = __importDefault(require("./sviDependencies"));
|
|
15
|
+
class SVIImportPrompts {
|
|
16
|
+
constructor(sviFile, llmProcessor, config, isPreliminary = false) {
|
|
17
|
+
this.importedPrompts = [];
|
|
18
|
+
this.sviParserDirectory = parsedSviDirectory_1.default.getInstance();
|
|
19
|
+
this.sviFile = sviFile;
|
|
20
|
+
this.llmProcessor = llmProcessor;
|
|
21
|
+
this.config = config;
|
|
22
|
+
this.isPreliminary = isPreliminary;
|
|
23
|
+
}
|
|
24
|
+
getImportedPrompts() {
|
|
25
|
+
return this.importedPrompts;
|
|
26
|
+
}
|
|
27
|
+
getImportedPromptsAsString() {
|
|
28
|
+
return this.importedPrompts
|
|
29
|
+
.map((imp) => `${imp.path}\n---\n${imp.prompt}`)
|
|
30
|
+
.join("\n---\n");
|
|
31
|
+
}
|
|
32
|
+
async loadImportedPrompts() {
|
|
33
|
+
return await this.loadImportedPromptsFromSvi(this.sviFile);
|
|
34
|
+
}
|
|
35
|
+
async loadImportedPromptsFromSvi(sviFile) {
|
|
36
|
+
if (!sviFile.importPrompts || sviFile.importPrompts.length === 0) {
|
|
37
|
+
return true;
|
|
38
|
+
}
|
|
39
|
+
let success = true;
|
|
40
|
+
const promptPaths = sviFile.getImportPromptsFullPaths();
|
|
41
|
+
for (const promptPath of promptPaths) {
|
|
42
|
+
if (await this.loadPromptForPath(promptPath.fullPath)) {
|
|
43
|
+
continue;
|
|
44
|
+
}
|
|
45
|
+
if (!promptPath.fullPath.endsWith(".svi")) {
|
|
46
|
+
const resolvedPathWithExtension = promptPath.fullPath + ".svi";
|
|
47
|
+
if (await this.loadPromptForPath(resolvedPathWithExtension)) {
|
|
48
|
+
continue;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
success = false;
|
|
52
|
+
}
|
|
53
|
+
return success;
|
|
54
|
+
}
|
|
55
|
+
loadSVIFile(filePath) {
|
|
56
|
+
try {
|
|
57
|
+
return this.sviParserDirectory.getParsedSviFile(filePath);
|
|
58
|
+
}
|
|
59
|
+
catch (error) {
|
|
60
|
+
logger_1.default.error(`Error loading SVI file ${filePath}: ${error}`);
|
|
61
|
+
return null;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
computeHash(content) {
|
|
65
|
+
return (0, utils_1.computeHashFromString)(content);
|
|
66
|
+
}
|
|
67
|
+
async loadPromptForPath(fullPath) {
|
|
68
|
+
let dependencySVI = null;
|
|
69
|
+
if (this.fileHasSviExtension(fullPath)) {
|
|
70
|
+
dependencySVI = this.loadSVIFile(fullPath);
|
|
71
|
+
}
|
|
72
|
+
let promptContent = "";
|
|
73
|
+
let promptHash = "";
|
|
74
|
+
let result = false;
|
|
75
|
+
logger_1.default.trace(`Loading imported prompt from path: ${fullPath}`);
|
|
76
|
+
if (dependencySVI && dependencySVI.prompt) {
|
|
77
|
+
logger_1.default.trace(`Imported prompt is SVI file with prompt section: ${fullPath}`);
|
|
78
|
+
promptContent = dependencySVI.prompt;
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
logger_1.default.trace(`Failed to parse this path as *.svi format: ${fullPath}; will try other options`);
|
|
82
|
+
}
|
|
83
|
+
if (!promptContent &&
|
|
84
|
+
!(0, file_1.fileHasExtension)(fullPath, ".svi") &&
|
|
85
|
+
fs_1.default.existsSync(fullPath)) {
|
|
86
|
+
promptContent = fs_1.default.readFileSync(fullPath, "utf-8");
|
|
87
|
+
logger_1.default.trace(`Imported prompt loaded as raw file content: ${fullPath}`);
|
|
88
|
+
}
|
|
89
|
+
if (dependencySVI?.dependencies && dependencySVI.dependencies.length > 0) {
|
|
90
|
+
logger_1.default.trace(`Loading SVI dependencies declarations for imported prompt, path: ${fullPath}`);
|
|
91
|
+
const sviDependencies = new sviDependencies_1.default(this.llmProcessor, this.config, this.isPreliminary);
|
|
92
|
+
const loaded = await sviDependencies.loadDependenciesDeclarations(dependencySVI);
|
|
93
|
+
if (loaded) {
|
|
94
|
+
const declarations = sviDependencies.getDependenciesDeclarationsAsString();
|
|
95
|
+
promptContent = `${declarations}\n\n${promptContent}`;
|
|
96
|
+
logger_1.default.trace(`SVI dependencies declarations loaded and prepended to imported prompt content, path: ${fullPath}`);
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
logger_1.default.error(`Failed to load SVI dependencies declarations for imported prompt, path: ${fullPath}`);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
if (promptContent.length > 0) {
|
|
103
|
+
promptHash = this.computeHash(promptContent);
|
|
104
|
+
if (this.hashExists(promptHash)) {
|
|
105
|
+
logger_1.default.trace(`Imported prompt has already been added: ${fullPath}; skipping to avoid a dependency loop`);
|
|
106
|
+
return true;
|
|
107
|
+
}
|
|
108
|
+
const relativePath = (0, file_1.getRelativePath)(fullPath, this.config.configDir);
|
|
109
|
+
this.importedPrompts.push({
|
|
110
|
+
path: relativePath,
|
|
111
|
+
prompt: promptContent,
|
|
112
|
+
hash: promptHash,
|
|
113
|
+
});
|
|
114
|
+
if (dependencySVI?.prompt) {
|
|
115
|
+
logger_1.default.trace("Loading nested imported prompts from SVI dependency for path: " +
|
|
116
|
+
fullPath);
|
|
117
|
+
result = await this.loadImportedPromptsFromSvi(dependencySVI);
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
result = true;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
if (!result) {
|
|
124
|
+
logger_1.default.error(`Error during processing file ${this.sviFile.getSviFileFullPath()}: Failed to load imported prompt (section #Import prompts), it was expected at path ${fullPath}`);
|
|
125
|
+
//this.sviParser.logParseMessages();
|
|
126
|
+
this.sviParserDirectory.logParseMessagesForFile(fullPath);
|
|
127
|
+
}
|
|
128
|
+
return result;
|
|
129
|
+
}
|
|
130
|
+
hashExists(hash) {
|
|
131
|
+
return this.importedPrompts.some((imp) => imp.hash === hash);
|
|
132
|
+
}
|
|
133
|
+
fileHasSviExtension(filePath) {
|
|
134
|
+
return (0, file_1.fileHasExtension)(filePath, ".svi");
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
exports.SVIImportPrompts = SVIImportPrompts;
|
|
138
|
+
//# sourceMappingURL=sviImportPrompts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sviImportPrompts.js","sourceRoot":"","sources":["../../../src/svi/sviImportPrompts.ts"],"names":[],"mappings":";;;;;;AACA,6DAAqC;AACrC,0BAA0B;AAC1B,4CAAoB;AACpB,oDAAoD;AACpD,wFAAgE;AAChE,0CAAuD;AACvD,wCAAkE;AAClE,wEAAgD;AAUhD,MAAa,gBAAgB;IAU3B,YACE,OAAgB,EAChB,YAA0B,EAC1B,MAAiB,EACjB,gBAAyB,KAAK;QAZxB,oBAAe,GAAqB,EAAE,CAAC;QAKvC,uBAAkB,GACxB,4BAAkB,CAAC,WAAW,EAAE,CAAC;QAQjC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;IACrC,CAAC;IAEM,kBAAkB;QACvB,OAAO,IAAI,CAAC,eAAe,CAAC;IAC9B,CAAC;IAEM,0BAA0B;QAC/B,OAAO,IAAI,CAAC,eAAe;aACxB,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,IAAI,UAAU,GAAG,CAAC,MAAM,EAAE,CAAC;aAC/C,IAAI,CAAC,SAAS,CAAC,CAAC;IACrB,CAAC;IAEM,KAAK,CAAC,mBAAmB;QAC9B,OAAO,MAAM,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC7D,CAAC;IAEO,KAAK,CAAC,0BAA0B,CAAC,OAAgB;QACvD,IAAI,CAAC,OAAO,CAAC,aAAa,IAAI,OAAO,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACjE,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,OAAO,GAAY,IAAI,CAAC;QAE5B,MAAM,WAAW,GAAG,OAAO,CAAC,yBAAyB,EAAE,CAAC;QAExD,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;YACrC,IACE,MAAM,IAAI,CAAC,iBAAiB,CAC1B,UAAU,CAAC,QAAQ,CAEpB,EACD,CAAC;gBACD,SAAS;YACX,CAAC;YAED,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC1C,MAAM,yBAAyB,GAAG,UAAU,CAAC,QAAQ,GAAG,MAAM,CAAC;gBAC/D,IACE,MAAM,IAAI,CAAC,iBAAiB,CAC1B,yBAAyB,CAE1B,EACD,CAAC;oBACD,SAAS;gBACX,CAAC;YACH,CAAC;YAED,OAAO,GAAG,KAAK,CAAC;QAClB,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,WAAW,CAAC,QAAgB;QAClC,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAC5D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,gBAAM,CAAC,KAAK,CAAC,0BAA0B,QAAQ,KAAK,KAAK,EAAE,CAAC,CAAC;YAC7D,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAEO,WAAW,CAAC,OAAe;QACjC,OAAO,IAAA,6BAAqB,EAAC,OAAO,CAAC,CAAC;IACxC,CAAC;IAEO,KAAK,CAAC,iBAAiB,CAC7B,QAAgB;QAGhB,IAAI,aAAa,GAAmB,IAAI,CAAC;QAEzC,IAAI,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,EAAE,CAAC;YACvC,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC7C,CAAC;QAED,IAAI,aAAa,GAAG,EAAE,CAAC;QACvB,IAAI,UAAU,GAAG,EAAE,CAAC;QACpB,IAAI,MAAM,GAAG,KAAK,CAAC;QAEnB,gBAAM,CAAC,KAAK,CAAC,sCAAsC,QAAQ,EAAE,CAAC,CAAC;QAE/D,IAAI,aAAa,IAAI,aAAa,CAAC,MAAM,EAAE,CAAC;YAC1C,gBAAM,CAAC,KAAK,CACV,oDAAoD,QAAQ,EAAE,CAC/D,CAAC;YACF,aAAa,GAAG,aAAa,CAAC,MAAM,CAAC;QACvC,CAAC;aAAM,CAAC;YACN,gBAAM,CAAC,KAAK,CACV,8CAA8C,QAAQ,0BAA0B,CACjF,CAAC;QACJ,CAAC;QAED,IACE,CAAC,aAAa;YACd,CAAC,IAAA,uBAAgB,EAAC,QAAQ,EAAE,MAAM,CAAC;YACnC,YAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EACvB,CAAC;YACD,aAAa,GAAG,YAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACnD,gBAAM,CAAC,KAAK,CAAC,+CAA+C,QAAQ,EAAE,CAAC,CAAC;QAC1E,CAAC;QAED,IAAI,aAAa,EAAE,YAAY,IAAI,aAAa,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzE,gBAAM,CAAC,KAAK,CACV,oEAAoE,QAAQ,EAAE,CAC/E,CAAC;YACF,MAAM,eAAe,GAAG,IAAI,yBAAe,CACzC,IAAI,CAAC,YAAY,EACjB,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,aAAa,CACnB,CAAC;YACF,MAAM,MAAM,GACV,MAAM,eAAe,CAAC,4BAA4B,CAAC,aAAa,CAAC,CAAC;YACpE,IAAI,MAAM,EAAE,CAAC;gBACX,MAAM,YAAY,GAChB,eAAe,CAAC,mCAAmC,EAAE,CAAC;gBACxD,aAAa,GAAG,GAAG,YAAY,OAAO,aAAa,EAAE,CAAC;gBACtD,gBAAM,CAAC,KAAK,CACV,wFAAwF,QAAQ,EAAE,CACnG,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,gBAAM,CAAC,KAAK,CACV,2EAA2E,QAAQ,EAAE,CACtF,CAAC;YACJ,CAAC;QACH,CAAC;QAED,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;YAC7C,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;gBAChC,gBAAM,CAAC,KAAK,CACV,2CAA2C,QAAQ,uCAAuC,CAC3F,CAAC;gBACF,OAAO,IAAI,CAAC;YACd,CAAC;YAED,MAAM,YAAY,GAAG,IAAA,sBAAe,EAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAEtE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;gBACxB,IAAI,EAAE,YAAY;gBAClB,MAAM,EAAE,aAAa;gBACrB,IAAI,EAAE,UAAU;aACjB,CAAC,CAAC;YAEH,IAAI,aAAa,EAAE,MAAM,EAAE,CAAC;gBAC1B,gBAAM,CAAC,KAAK,CACV,gEAAgE;oBAC9D,QAAQ,CACX,CAAC;gBACF,MAAM,GAAG,MAAM,IAAI,CAAC,0BAA0B,CAAC,aAAa,CAAC,CAAC;YAChE,CAAC;iBAAM,CAAC;gBACN,MAAM,GAAG,IAAI,CAAC;YAChB,CAAC;QACH,CAAC;QAED,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,gBAAM,CAAC,KAAK,CACV,gCAAgC,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,uFAAuF,QAAQ,EAAE,CACnK,CAAC;YACF,oCAAoC;YACpC,IAAI,CAAC,kBAAkB,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAC;QAC5D,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,UAAU,CAAC,IAAY;QAC7B,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IAC/D,CAAC;IAEO,mBAAmB,CAAC,QAAgB;QAC1C,OAAO,IAAA,uBAAgB,EAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC5C,CAAC;CACF;AAhMD,4CAgMC"}
|
|
@@ -0,0 +1,138 @@
|
|
|
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.SviLoader = void 0;
|
|
7
|
+
const fs_1 = __importDefault(require("fs"));
|
|
8
|
+
const path_1 = __importDefault(require("path"));
|
|
9
|
+
const fastGlobWrapper_1 = require("../utils/fastGlobWrapper");
|
|
10
|
+
const logger_1 = __importDefault(require("../utils/logger"));
|
|
11
|
+
const sviFileOrderOptimizer_1 = __importDefault(require("./sviFileOrderOptimizer/sviFileOrderOptimizer"));
|
|
12
|
+
const parsedSviDirectory_1 = __importDefault(require("./sviParser/parsedSviDirectory"));
|
|
13
|
+
//import { error } from "console";
|
|
14
|
+
class SviLoader {
|
|
15
|
+
constructor(config, rootDir = process.cwd(), configDirIsPrioritized = true) {
|
|
16
|
+
this.ignoredFiles = new Set();
|
|
17
|
+
this.config = config;
|
|
18
|
+
this.rootDir = rootDir;
|
|
19
|
+
if (this.config.configDir && configDirIsPrioritized) {
|
|
20
|
+
this.rootDir = this.config.configDir;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Load all .svi-files according to SearchPaths and IgnorePaths
|
|
25
|
+
*/
|
|
26
|
+
async loadAll() {
|
|
27
|
+
let results = [];
|
|
28
|
+
//results = await fg(this.config.searchPaths, {
|
|
29
|
+
results = await fastGlobWrapper_1.fastGlobWrapper.fg(this.config.searchPaths, {
|
|
30
|
+
cwd: this.rootDir,
|
|
31
|
+
absolute: true,
|
|
32
|
+
});
|
|
33
|
+
// filter out only *.svi files and ignore ignored paths
|
|
34
|
+
results = results.filter((file) => {
|
|
35
|
+
if (!file.endsWith(".svi")) {
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
//const normalizedFile = path.resolve(file);
|
|
39
|
+
//return !this.isIgnored(file);
|
|
40
|
+
/*return !ignoredResults.find((ignoredPath) => {
|
|
41
|
+
const normalizedIgnored = path.resolve(ignoredPath);
|
|
42
|
+
return normalizedIgnored === normalizedFile;
|
|
43
|
+
});*/
|
|
44
|
+
return true;
|
|
45
|
+
});
|
|
46
|
+
const resultsAfterIgnore = [];
|
|
47
|
+
for (const file of results) {
|
|
48
|
+
if (!(await this.isIgnored(file))) {
|
|
49
|
+
resultsAfterIgnore.push(file);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return this.optimizeResults(resultsAfterIgnore);
|
|
53
|
+
}
|
|
54
|
+
async loadSpecificFiles(files) {
|
|
55
|
+
const results = [];
|
|
56
|
+
for (const file of files) {
|
|
57
|
+
const absPath = path_1.default.isAbsolute(file)
|
|
58
|
+
? file
|
|
59
|
+
: path_1.default.resolve(this.rootDir, file);
|
|
60
|
+
if (!fs_1.default.existsSync(absPath)) {
|
|
61
|
+
throw new Error(`File not found: ${absPath}`);
|
|
62
|
+
}
|
|
63
|
+
if (await this.isIgnored(absPath)) {
|
|
64
|
+
throw new Error(`File is ignored by ignorePaths: ${absPath}`);
|
|
65
|
+
}
|
|
66
|
+
if (!absPath.endsWith(".svi")) {
|
|
67
|
+
logger_1.default.warn(`Skipping non-.svi file: ${absPath}`);
|
|
68
|
+
continue;
|
|
69
|
+
}
|
|
70
|
+
results.push(absPath);
|
|
71
|
+
}
|
|
72
|
+
return this.optimizeResults(results);
|
|
73
|
+
}
|
|
74
|
+
optimizeResults(sviFilePaths) {
|
|
75
|
+
const parsedSviDirectory = parsedSviDirectory_1.default.getInstance();
|
|
76
|
+
const sviFiles = [];
|
|
77
|
+
for (const sviFilePath of sviFilePaths) {
|
|
78
|
+
const sviFile = parsedSviDirectory.getParsedSviFile(sviFilePath);
|
|
79
|
+
if (!sviFile) {
|
|
80
|
+
const errorMessage = `Failed to parse SVI file at path: ${sviFilePath}.`;
|
|
81
|
+
logger_1.default.error(errorMessage);
|
|
82
|
+
parsedSviDirectory.logParseMessagesForFile(sviFilePath);
|
|
83
|
+
throw new Error(errorMessage);
|
|
84
|
+
}
|
|
85
|
+
sviFiles.push(sviFile);
|
|
86
|
+
}
|
|
87
|
+
const optimizer = new sviFileOrderOptimizer_1.default(sviFiles);
|
|
88
|
+
return optimizer.computeOptimizedOrder().getOptimizedFiles();
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Recursive search in folders
|
|
92
|
+
*/
|
|
93
|
+
/*private walkDirectory(dir: string, results: string[]) {
|
|
94
|
+
// When path must be ignored - skip
|
|
95
|
+
if (this.isIgnored(dir)) {
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
const entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
100
|
+
for (const entry of entries) {
|
|
101
|
+
const fullPath = path.join(dir, entry.name);
|
|
102
|
+
|
|
103
|
+
if (entry.isDirectory()) {
|
|
104
|
+
this.walkDirectory(fullPath, results);
|
|
105
|
+
} else if (entry.isFile() && entry.name.endsWith(".svi")) {
|
|
106
|
+
results.push(fullPath);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}*/
|
|
110
|
+
/**
|
|
111
|
+
* Check if path is contained in IgnorePaths
|
|
112
|
+
*/
|
|
113
|
+
/*private isIgnored(targetPath: string): boolean {
|
|
114
|
+
return this.config.ignorePaths.some((ignorePath) => {
|
|
115
|
+
const absIgnorePath = path.resolve(this.rootDir, ignorePath);
|
|
116
|
+
return targetPath.startsWith(absIgnorePath);
|
|
117
|
+
});
|
|
118
|
+
}*/
|
|
119
|
+
async isIgnored(targetPath) {
|
|
120
|
+
if (this.config.ignorePaths.length === 0) {
|
|
121
|
+
return false;
|
|
122
|
+
}
|
|
123
|
+
if (this.ignoredFiles.size === 0) {
|
|
124
|
+
const ignoredResults = await fastGlobWrapper_1.fastGlobWrapper.fg(this.config.ignorePaths, {
|
|
125
|
+
cwd: this.rootDir,
|
|
126
|
+
absolute: true,
|
|
127
|
+
});
|
|
128
|
+
for (const ignoredPath of ignoredResults) {
|
|
129
|
+
const normalizedIgnored = path_1.default.resolve(ignoredPath);
|
|
130
|
+
this.ignoredFiles.add(normalizedIgnored);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
const normalizedTarget = path_1.default.resolve(targetPath);
|
|
134
|
+
return this.ignoredFiles.has(normalizedTarget);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
exports.SviLoader = SviLoader;
|
|
138
|
+
//# sourceMappingURL=sviLoader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sviLoader.js","sourceRoot":"","sources":["../../../src/svi/sviLoader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const sviParser_1 = require("./sviParser");
|
|
4
|
+
class ParsedSviDirectory {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.parsedSviFiles = new Map();
|
|
7
|
+
this.sviParsers = new Map();
|
|
8
|
+
// Private constructor to enforce singleton pattern
|
|
9
|
+
}
|
|
10
|
+
static getInstance() {
|
|
11
|
+
if (!ParsedSviDirectory.instance) {
|
|
12
|
+
ParsedSviDirectory.instance = new ParsedSviDirectory();
|
|
13
|
+
}
|
|
14
|
+
return ParsedSviDirectory.instance;
|
|
15
|
+
}
|
|
16
|
+
getParsedSviFile(sviFilePath) {
|
|
17
|
+
if (this.parsedSviFiles.has(sviFilePath)) {
|
|
18
|
+
return this.parsedSviFiles.get(sviFilePath);
|
|
19
|
+
}
|
|
20
|
+
const parser = new sviParser_1.SVIParser();
|
|
21
|
+
this.sviParsers.set(sviFilePath, parser);
|
|
22
|
+
const sviFile = parser.parseFile(sviFilePath);
|
|
23
|
+
this.parsedSviFiles.set(sviFilePath, sviFile);
|
|
24
|
+
return sviFile;
|
|
25
|
+
}
|
|
26
|
+
logParseMessagesForFile(sviFilePath) {
|
|
27
|
+
const parser = this.sviParsers.get(sviFilePath);
|
|
28
|
+
if (parser) {
|
|
29
|
+
parser.logParseMessages();
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
exports.default = ParsedSviDirectory;
|
|
34
|
+
//# sourceMappingURL=parsedSviDirectory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parsedSviDirectory.js","sourceRoot":"","sources":["../../../../src/svi/sviParser/parsedSviDirectory.ts"],"names":[],"mappings":";;AAEA,2CAAwC;AAExC,MAAqB,kBAAkB;IAKrC;QAHQ,mBAAc,GAAgC,IAAI,GAAG,EAAE,CAAC;QACxD,eAAU,GAA2B,IAAI,GAAG,EAAE,CAAC;QAGrD,mDAAmD;IACrD,CAAC;IAEM,MAAM,CAAC,WAAW;QACvB,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,CAAC;YACjC,kBAAkB,CAAC,QAAQ,GAAG,IAAI,kBAAkB,EAAE,CAAC;QACzD,CAAC;QACD,OAAO,kBAAkB,CAAC,QAAQ,CAAC;IACrC,CAAC;IAEM,gBAAgB,CAAC,WAAmB;QACzC,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;YACzC,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,WAAW,CAAE,CAAC;QAC/C,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,qBAAS,EAAE,CAAC;QAC/B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QAEzC,MAAM,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;QAC9C,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QAE9C,OAAO,OAAO,CAAC;IACjB,CAAC;IAEM,uBAAuB,CAAC,WAAmB;QAChD,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAChD,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,CAAC,gBAAgB,EAAE,CAAC;QAC5B,CAAC;IACH,CAAC;CACF;AApCD,qCAoCC"}
|
|
@@ -0,0 +1,205 @@
|
|
|
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.SVIParser = void 0;
|
|
7
|
+
const fs_1 = __importDefault(require("fs"));
|
|
8
|
+
const sviFileClass_1 = __importDefault(require("../sviFileClass"));
|
|
9
|
+
const logger_1 = __importDefault(require("../../utils/logger"));
|
|
10
|
+
/**
|
|
11
|
+
* Parses a `.svi` file into structured sections.
|
|
12
|
+
* Supports single-line (`//`) and multi-line (`/* ... *\/`) comments.
|
|
13
|
+
*/
|
|
14
|
+
class SVIParser {
|
|
15
|
+
constructor() {
|
|
16
|
+
/**
|
|
17
|
+
* Reads and parses a .svi file.
|
|
18
|
+
* @param filePath Full path to the .svi file.
|
|
19
|
+
*/
|
|
20
|
+
this.parseErrors = [];
|
|
21
|
+
this.parseWarnings = [];
|
|
22
|
+
}
|
|
23
|
+
parseFile(filePath) {
|
|
24
|
+
this.parseErrors = [];
|
|
25
|
+
this.parseWarnings = [];
|
|
26
|
+
if (!fs_1.default.existsSync(filePath)) {
|
|
27
|
+
throw new Error(`File not found: ${filePath}`);
|
|
28
|
+
}
|
|
29
|
+
const raw = fs_1.default.readFileSync(filePath, "utf-8");
|
|
30
|
+
const parsedSvi = this.parseContent(raw, filePath);
|
|
31
|
+
if (!parsedSvi) {
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
if (!parsedSvi.prompt && !parsedSvi.importPrompts) {
|
|
35
|
+
this.parseErrors.push(`[SVIParser] No 'Prompt' or 'Import Prompts' section found in file ${filePath}, looks like the file has incorrect format.
|
|
36
|
+
An example of the correct format:
|
|
37
|
+
=====================================
|
|
38
|
+
# Destination File
|
|
39
|
+
test.js
|
|
40
|
+
# Input parameters
|
|
41
|
+
Import function1(param1: number) : string from ../utils/utils.js
|
|
42
|
+
# Output
|
|
43
|
+
export function2(paramA: string) : number
|
|
44
|
+
# Options
|
|
45
|
+
Active=True
|
|
46
|
+
ProgrammingLanguage=node.js
|
|
47
|
+
# Import prompts
|
|
48
|
+
../prompts/common.svi
|
|
49
|
+
specific.svi
|
|
50
|
+
# Prompt
|
|
51
|
+
Test prompt
|
|
52
|
+
=====================================
|
|
53
|
+
`);
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
return parsedSvi;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Parses the raw content of a .svi file.
|
|
60
|
+
* @param content Raw text content
|
|
61
|
+
* @param filePath Optional (for error context)
|
|
62
|
+
*/
|
|
63
|
+
parseContent(content, filePath) {
|
|
64
|
+
// Remove comments
|
|
65
|
+
const noComments = content
|
|
66
|
+
.replace(/\/\/.*$/gm, "")
|
|
67
|
+
.replace(/\/\*[\s\S]*?\*\//gm, "")
|
|
68
|
+
.trim();
|
|
69
|
+
// Split by section headers starting with #
|
|
70
|
+
/*const sections = noComments
|
|
71
|
+
.split(/^#/gm)
|
|
72
|
+
.map((s) => s.trim())
|
|
73
|
+
.filter(Boolean);*/
|
|
74
|
+
const sections = this.splitSections(noComments);
|
|
75
|
+
const svi = new sviFileClass_1.default();
|
|
76
|
+
const seenSections = new Set(); // <-- Hier merken wir uns schon gesehene Header
|
|
77
|
+
let result = true;
|
|
78
|
+
for (const rawSection of sections) {
|
|
79
|
+
const [headerLine, ...bodyLines] = rawSection.split("\n");
|
|
80
|
+
const header = headerLine.trim();
|
|
81
|
+
const body = bodyLines.join("\n").trim();
|
|
82
|
+
const headerKey = header.toLowerCase();
|
|
83
|
+
// Prüfen auf doppelte Abschnitte
|
|
84
|
+
if (seenSections.has(headerKey)) {
|
|
85
|
+
this.parseErrors.push(`[SVIParser] Duplicate section '${header}' found in file ${filePath ?? "<string>"}`);
|
|
86
|
+
this.parseErrors.push(`If you want to include a markdown syntax inside one of the *.svi file sections,
|
|
87
|
+
please include it as a code block, for example:`);
|
|
88
|
+
this.parseErrors.push(`\`\`\`markdown
|
|
89
|
+
# Prompt or any other section
|
|
90
|
+
Here is some markdown content
|
|
91
|
+
\`\`\``);
|
|
92
|
+
result = false;
|
|
93
|
+
continue; // wir überspringen das erneute Setzen
|
|
94
|
+
}
|
|
95
|
+
seenSections.add(headerKey);
|
|
96
|
+
switch (headerKey) {
|
|
97
|
+
case "destination file":
|
|
98
|
+
svi.destinationFile = body || undefined;
|
|
99
|
+
break;
|
|
100
|
+
case "dependencies":
|
|
101
|
+
svi.dependencies = this.splitList(body);
|
|
102
|
+
break;
|
|
103
|
+
case "output":
|
|
104
|
+
svi.output = this.splitList(body);
|
|
105
|
+
break;
|
|
106
|
+
case "options":
|
|
107
|
+
svi.options = this.parseOptions(body);
|
|
108
|
+
break;
|
|
109
|
+
case "import prompts":
|
|
110
|
+
svi.importPrompts = this.splitList(body);
|
|
111
|
+
break;
|
|
112
|
+
case "prompt":
|
|
113
|
+
svi.prompt = body || undefined;
|
|
114
|
+
break;
|
|
115
|
+
default:
|
|
116
|
+
if (header.length > 0) {
|
|
117
|
+
this.parseWarnings.push(`[SVIParser] Unknown section '${header}' in file ${filePath ?? "<string>"}`);
|
|
118
|
+
}
|
|
119
|
+
break;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
if (!result) {
|
|
123
|
+
return null;
|
|
124
|
+
}
|
|
125
|
+
svi.filePath = filePath;
|
|
126
|
+
return svi;
|
|
127
|
+
}
|
|
128
|
+
splitSections(content) {
|
|
129
|
+
const lines = content.split(/\r?\n/);
|
|
130
|
+
const sections = [];
|
|
131
|
+
let currentSection = [];
|
|
132
|
+
let inCodeBlock = false;
|
|
133
|
+
for (const line of lines) {
|
|
134
|
+
// Toggle code block state
|
|
135
|
+
if (line.trim().startsWith("```")) {
|
|
136
|
+
inCodeBlock = !inCodeBlock;
|
|
137
|
+
currentSection.push(line);
|
|
138
|
+
continue;
|
|
139
|
+
}
|
|
140
|
+
// New section ONLY if not inside code block
|
|
141
|
+
if (!inCodeBlock && line.startsWith("#")) {
|
|
142
|
+
if (currentSection.length > 0) {
|
|
143
|
+
sections.push(currentSection.join("\n").trim());
|
|
144
|
+
}
|
|
145
|
+
currentSection = [line.replace(/^#/, "").trim()];
|
|
146
|
+
}
|
|
147
|
+
else {
|
|
148
|
+
currentSection.push(line);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
if (currentSection.length > 0) {
|
|
152
|
+
sections.push(currentSection.join("\n").trim());
|
|
153
|
+
}
|
|
154
|
+
return sections.filter(Boolean);
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Splits a section body into a list (by line or comma).
|
|
158
|
+
*/
|
|
159
|
+
splitList(body) {
|
|
160
|
+
if (!body)
|
|
161
|
+
return [];
|
|
162
|
+
return body
|
|
163
|
+
.split(/\r?\n|,/)
|
|
164
|
+
.map((s) => s.trim())
|
|
165
|
+
.filter(Boolean);
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Parses the `# Options` section into a key-value map.
|
|
169
|
+
* Example:
|
|
170
|
+
* ```
|
|
171
|
+
* ProgrammingLanguage=Node.js
|
|
172
|
+
* Active=True
|
|
173
|
+
* ```
|
|
174
|
+
*/
|
|
175
|
+
parseOptions(body) {
|
|
176
|
+
const result = {};
|
|
177
|
+
const lines = body
|
|
178
|
+
.split(/\r?\n/)
|
|
179
|
+
.map((l) => l.trim())
|
|
180
|
+
.filter(Boolean);
|
|
181
|
+
for (const line of lines) {
|
|
182
|
+
const [key, valueRaw] = line.split("=").map((s) => s.trim());
|
|
183
|
+
if (!key)
|
|
184
|
+
continue;
|
|
185
|
+
let value = valueRaw ?? "True";
|
|
186
|
+
if (typeof value === "string") {
|
|
187
|
+
if (/^(true|false)$/i.test(value)) {
|
|
188
|
+
value = value.toLowerCase() === "true";
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
result[key] = value;
|
|
192
|
+
}
|
|
193
|
+
return result;
|
|
194
|
+
}
|
|
195
|
+
logParseMessages() {
|
|
196
|
+
for (const error of this.parseErrors) {
|
|
197
|
+
logger_1.default.error(error);
|
|
198
|
+
}
|
|
199
|
+
for (const warning of this.parseWarnings) {
|
|
200
|
+
logger_1.default.warn(warning);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
exports.SVIParser = SVIParser;
|
|
205
|
+
//# sourceMappingURL=sviParser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sviParser.js","sourceRoot":"","sources":["../../../../src/svi/sviParser/sviParser.ts"],"names":[],"mappings":"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"}
|