@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.
Files changed (82) hide show
  1. package/dist/bin/cli.js +6 -0
  2. package/dist/bin/cli.js.map +1 -0
  3. package/dist/package.json +39 -0
  4. package/dist/src/commands/cliOptions.js +58 -0
  5. package/dist/src/commands/cliOptions.js.map +1 -0
  6. package/dist/src/commands/entryPoint.js +90 -0
  7. package/dist/src/commands/entryPoint.js.map +1 -0
  8. package/dist/src/commands/env.js +141 -0
  9. package/dist/src/commands/env.js.map +1 -0
  10. package/dist/src/commands/init.js +108 -0
  11. package/dist/src/commands/init.js.map +1 -0
  12. package/dist/src/commands/run.js +58 -0
  13. package/dist/src/commands/run.js.map +1 -0
  14. package/dist/src/commands/runner/checkerForRunManager.js +49 -0
  15. package/dist/src/commands/runner/checkerForRunManager.js.map +1 -0
  16. package/dist/src/commands/runner/runManager.js +137 -0
  17. package/dist/src/commands/runner/runManager.js.map +1 -0
  18. package/dist/src/commands/runner/runStatistics.js +55 -0
  19. package/dist/src/commands/runner/runStatistics.js.map +1 -0
  20. package/dist/src/config/config.js +135 -0
  21. package/dist/src/config/config.js.map +1 -0
  22. package/dist/src/config/configFinder.js +37 -0
  23. package/dist/src/config/configFinder.js.map +1 -0
  24. package/dist/src/llm/llm.js +117 -0
  25. package/dist/src/llm/llm.js.map +1 -0
  26. package/dist/src/llm/llmServiceByModel.js +43 -0
  27. package/dist/src/llm/llmServiceByModel.js.map +1 -0
  28. package/dist/src/llm/llmUtils.js +23 -0
  29. package/dist/src/llm/llmUtils.js.map +1 -0
  30. package/dist/src/llm/theMaximalistLlmJs/LlmJsFactories.js +27 -0
  31. package/dist/src/llm/theMaximalistLlmJs/LlmJsFactories.js.map +1 -0
  32. package/dist/src/llm/theMaximalistLlmJs/ModelUsageWrapper.js +55 -0
  33. package/dist/src/llm/theMaximalistLlmJs/ModelUsageWrapper.js.map +1 -0
  34. package/dist/src/svi/cacheManager.js +187 -0
  35. package/dist/src/svi/cacheManager.js.map +1 -0
  36. package/dist/src/svi/promptBuilder.js +59 -0
  37. package/dist/src/svi/promptBuilder.js.map +1 -0
  38. package/dist/src/svi/prompts/extractDeclarations.js +25 -0
  39. package/dist/src/svi/prompts/extractDeclarations.js.map +1 -0
  40. package/dist/src/svi/prompts/generate.js +36 -0
  41. package/dist/src/svi/prompts/generate.js.map +1 -0
  42. package/dist/src/svi/sviChecks.js +131 -0
  43. package/dist/src/svi/sviChecks.js.map +1 -0
  44. package/dist/src/svi/sviDependencies.js +139 -0
  45. package/dist/src/svi/sviDependencies.js.map +1 -0
  46. package/dist/src/svi/sviFileClass.js +105 -0
  47. package/dist/src/svi/sviFileClass.js.map +1 -0
  48. package/dist/src/svi/sviFileOrderOptimizer/sviDependencyCycleAnalyzer.js +154 -0
  49. package/dist/src/svi/sviFileOrderOptimizer/sviDependencyCycleAnalyzer.js.map +1 -0
  50. package/dist/src/svi/sviFileOrderOptimizer/sviDependencyFinder.js +57 -0
  51. package/dist/src/svi/sviFileOrderOptimizer/sviDependencyFinder.js.map +1 -0
  52. package/dist/src/svi/sviFileOrderOptimizer/sviFileOrderOptimizer.js +93 -0
  53. package/dist/src/svi/sviFileOrderOptimizer/sviFileOrderOptimizer.js.map +1 -0
  54. package/dist/src/svi/sviFileOrderOptimizer/types.js +3 -0
  55. package/dist/src/svi/sviFileOrderOptimizer/types.js.map +1 -0
  56. package/dist/src/svi/sviImportPrompts.js +138 -0
  57. package/dist/src/svi/sviImportPrompts.js.map +1 -0
  58. package/dist/src/svi/sviLoader.js +138 -0
  59. package/dist/src/svi/sviLoader.js.map +1 -0
  60. package/dist/src/svi/sviParser/parsedSviDirectory.js +34 -0
  61. package/dist/src/svi/sviParser/parsedSviDirectory.js.map +1 -0
  62. package/dist/src/svi/sviParser/sviParser.js +205 -0
  63. package/dist/src/svi/sviParser/sviParser.js.map +1 -0
  64. package/dist/src/svi/sviProcessor.js +138 -0
  65. package/dist/src/svi/sviProcessor.js.map +1 -0
  66. package/dist/src/svi/types.js +3 -0
  67. package/dist/src/svi/types.js.map +1 -0
  68. package/dist/src/utils/codeClear.js +29 -0
  69. package/dist/src/utils/codeClear.js.map +1 -0
  70. package/dist/src/utils/constants.js +6 -0
  71. package/dist/src/utils/constants.js.map +1 -0
  72. package/dist/src/utils/fastGlobWrapper.js +34 -0
  73. package/dist/src/utils/fastGlobWrapper.js.map +1 -0
  74. package/dist/src/utils/file.js +137 -0
  75. package/dist/src/utils/file.js.map +1 -0
  76. package/dist/src/utils/file2.js +26 -0
  77. package/dist/src/utils/file2.js.map +1 -0
  78. package/dist/src/utils/logger.js +105 -0
  79. package/dist/src/utils/logger.js.map +1 -0
  80. package/dist/src/utils/utils.js +34 -0
  81. package/dist/src/utils/utils.js.map +1 -0
  82. 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":"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"}
@@ -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":";;;;;;AAAA,4CAAoB;AAEpB,mEAA2C;AAC3C,gEAAwC;AAExC;;;GAGG;AACH,MAAa,SAAS;IAAtB;QACE;;;WAGG;QACK,gBAAW,GAAa,EAAE,CAAC;QAC3B,kBAAa,GAAa,EAAE,CAAC;IA+NvC,CAAC;IA7NQ,SAAS,CAAC,QAAgB;QAC/B,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;QACtB,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;QAExB,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CAAC,mBAAmB,QAAQ,EAAE,CAAC,CAAC;QACjD,CAAC;QAED,MAAM,GAAG,GAAG,YAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC/C,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QACnD,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,CAAC;YAClD,IAAI,CAAC,WAAW,CAAC,IAAI,CACnB,qEAAqE,QAAQ;;;;;;;;;;;;;;;;;;SAkB5E,CACF,CAAC;YACF,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;;;OAIG;IACI,YAAY,CAAC,OAAe,EAAE,QAAiB;QACpD,kBAAkB;QAClB,MAAM,UAAU,GAAG,OAAO;aACvB,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;aACxB,OAAO,CAAC,oBAAoB,EAAE,EAAE,CAAC;aACjC,IAAI,EAAE,CAAC;QAEV,2CAA2C;QAC3C;;;6BAGqB;QACrB,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;QAEhD,MAAM,GAAG,GAAY,IAAI,sBAAY,EAAE,CAAC;QACxC,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC,CAAC,gDAAgD;QAExF,IAAI,MAAM,GAAG,IAAI,CAAC;QAElB,KAAK,MAAM,UAAU,IAAI,QAAQ,EAAE,CAAC;YAClC,MAAM,CAAC,UAAU,EAAE,GAAG,SAAS,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC1D,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC;YACjC,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;YAEzC,MAAM,SAAS,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;YAEvC,iCAAiC;YACjC,IAAI,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;gBAChC,IAAI,CAAC,WAAW,CAAC,IAAI,CACnB,kCAAkC,MAAM,mBAAmB,QAAQ,IAAI,UAAU,EAAE,CACpF,CAAC;gBACF,IAAI,CAAC,WAAW,CAAC,IAAI,CACnB;gDACsC,CACvC,CAAC;gBACF,IAAI,CAAC,WAAW,CAAC,IAAI,CACnB;;;OAGH,CACE,CAAC;gBACF,MAAM,GAAG,KAAK,CAAC;gBACf,SAAS,CAAC,sCAAsC;YAClD,CAAC;YACD,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAE5B,QAAQ,SAAS,EAAE,CAAC;gBAClB,KAAK,kBAAkB;oBACrB,GAAG,CAAC,eAAe,GAAG,IAAI,IAAI,SAAS,CAAC;oBACxC,MAAM;gBAER,KAAK,cAAc;oBACjB,GAAG,CAAC,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;oBACxC,MAAM;gBAER,KAAK,QAAQ;oBACX,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;oBAClC,MAAM;gBAER,KAAK,SAAS;oBACZ,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;oBACtC,MAAM;gBAER,KAAK,gBAAgB;oBACnB,GAAG,CAAC,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;oBACzC,MAAM;gBAER,KAAK,QAAQ;oBACX,GAAG,CAAC,MAAM,GAAG,IAAI,IAAI,SAAS,CAAC;oBAC/B,MAAM;gBAER;oBACE,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBACtB,IAAI,CAAC,aAAa,CAAC,IAAI,CACrB,gCAAgC,MAAM,aAAa,QAAQ,IAAI,UAAU,EAAE,CAC5E,CAAC;oBACJ,CAAC;oBACD,MAAM;YACV,CAAC;QACH,CAAC;QACD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,IAAI,CAAC;QACd,CAAC;QAED,GAAG,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAExB,OAAO,GAAG,CAAC;IACb,CAAC;IAEO,aAAa,CAAC,OAAe;QACnC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAErC,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,IAAI,cAAc,GAAa,EAAE,CAAC;QAClC,IAAI,WAAW,GAAG,KAAK,CAAC;QAExB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,0BAA0B;YAC1B,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;gBAClC,WAAW,GAAG,CAAC,WAAW,CAAC;gBAC3B,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC1B,SAAS;YACX,CAAC;YAED,4CAA4C;YAC5C,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBACzC,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC9B,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;gBAClD,CAAC;gBACD,cAAc,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YACnD,CAAC;iBAAM,CAAC;gBACN,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC;QAED,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAClD,CAAC;QAED,OAAO,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAClC,CAAC;IAED;;OAEG;IACK,SAAS,CAAC,IAAY;QAC5B,IAAI,CAAC,IAAI;YAAE,OAAO,EAAE,CAAC;QACrB,OAAO,IAAI;aACR,KAAK,CAAC,SAAS,CAAC;aAChB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;aACpB,MAAM,CAAC,OAAO,CAAC,CAAC;IACrB,CAAC;IAED;;;;;;;OAOG;IACK,YAAY,CAAC,IAAY;QAC/B,MAAM,MAAM,GAAmC,EAAE,CAAC;QAClD,MAAM,KAAK,GAAG,IAAI;aACf,KAAK,CAAC,OAAO,CAAC;aACd,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;aACpB,MAAM,CAAC,OAAO,CAAC,CAAC;QAEnB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YAC7D,IAAI,CAAC,GAAG;gBAAE,SAAS;YAEnB,IAAI,KAAK,GAAqB,QAAQ,IAAI,MAAM,CAAC;YACjD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC9B,IAAI,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;oBAClC,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,KAAK,MAAM,CAAC;gBACzC,CAAC;YACH,CAAC;YAED,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACtB,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAEM,gBAAgB;QACrB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrC,gBAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;QAED,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACzC,gBAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;CACF;AArOD,8BAqOC"}