@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,296 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Section Override Processing
|
|
4
|
+
*
|
|
5
|
+
* Provides complete functionality for parsing, validating, and applying
|
|
6
|
+
* section-based content overrides in prompd template inheritance.
|
|
7
|
+
*
|
|
8
|
+
* This is a direct port of the Python CLI's SectionOverrideProcessor.
|
|
9
|
+
*/
|
|
10
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
13
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
14
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
15
|
+
}
|
|
16
|
+
Object.defineProperty(o, k2, desc);
|
|
17
|
+
}) : (function(o, m, k, k2) {
|
|
18
|
+
if (k2 === undefined) k2 = k;
|
|
19
|
+
o[k2] = m[k];
|
|
20
|
+
}));
|
|
21
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
22
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
23
|
+
}) : function(o, v) {
|
|
24
|
+
o["default"] = v;
|
|
25
|
+
});
|
|
26
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
27
|
+
var ownKeys = function(o) {
|
|
28
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
29
|
+
var ar = [];
|
|
30
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
31
|
+
return ar;
|
|
32
|
+
};
|
|
33
|
+
return ownKeys(o);
|
|
34
|
+
};
|
|
35
|
+
return function (mod) {
|
|
36
|
+
if (mod && mod.__esModule) return mod;
|
|
37
|
+
var result = {};
|
|
38
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
39
|
+
__setModuleDefault(result, mod);
|
|
40
|
+
return result;
|
|
41
|
+
};
|
|
42
|
+
})();
|
|
43
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
44
|
+
exports.SectionOverrideProcessor = void 0;
|
|
45
|
+
const path = __importStar(require("path"));
|
|
46
|
+
const fs = __importStar(require("fs-extra"));
|
|
47
|
+
const errors_1 = require("../errors");
|
|
48
|
+
class SectionOverrideProcessor {
|
|
49
|
+
constructor() {
|
|
50
|
+
// Pattern to match markdown headings (# through ######)
|
|
51
|
+
this.headingPattern = /^(#{1,6})\s+(.+)$/gm;
|
|
52
|
+
// Pattern to match section ID comments
|
|
53
|
+
this.sectionIdPattern = /<!--\s*section-id:\s*([a-z0-9-]+)\s*-->/i;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Extract all sections from markdown content.
|
|
57
|
+
*/
|
|
58
|
+
extractSections(content) {
|
|
59
|
+
if (!content || !content.trim()) {
|
|
60
|
+
return new Map();
|
|
61
|
+
}
|
|
62
|
+
const sections = new Map();
|
|
63
|
+
const lines = content.split('\n');
|
|
64
|
+
const encounteredSectionIds = new Set();
|
|
65
|
+
// Track explicit section ID comments
|
|
66
|
+
const explicitSectionIds = new Map();
|
|
67
|
+
for (let i = 0; i < lines.length; i++) {
|
|
68
|
+
const match = this.sectionIdPattern.exec(lines[i]);
|
|
69
|
+
if (match) {
|
|
70
|
+
const sectionId = match[1];
|
|
71
|
+
this.validateSectionId(sectionId, i + 1);
|
|
72
|
+
explicitSectionIds.set(i, sectionId);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
// Find all headings and create sections
|
|
76
|
+
const headingMatches = [];
|
|
77
|
+
let match;
|
|
78
|
+
// Reset regex state
|
|
79
|
+
this.headingPattern.lastIndex = 0;
|
|
80
|
+
while ((match = this.headingPattern.exec(content)) !== null) {
|
|
81
|
+
const headingLevel = match[1].length; // Number of # characters
|
|
82
|
+
const headingText = match[2].trim();
|
|
83
|
+
const headingLine = content.substring(0, match.index).split('\n').length - 1;
|
|
84
|
+
headingMatches.push({
|
|
85
|
+
level: headingLevel,
|
|
86
|
+
text: headingText,
|
|
87
|
+
line: headingLine,
|
|
88
|
+
index: match.index
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
// Process each heading to create sections
|
|
92
|
+
for (let i = 0; i < headingMatches.length; i++) {
|
|
93
|
+
const heading = headingMatches[i];
|
|
94
|
+
// Determine section ID
|
|
95
|
+
let sectionId = null;
|
|
96
|
+
// Check for explicit section ID comment before this heading (within 5 lines)
|
|
97
|
+
for (let lineNum = heading.line; lineNum >= Math.max(0, heading.line - 5); lineNum--) {
|
|
98
|
+
if (explicitSectionIds.has(lineNum)) {
|
|
99
|
+
sectionId = explicitSectionIds.get(lineNum);
|
|
100
|
+
break;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
// If no explicit ID, generate from heading text
|
|
104
|
+
if (!sectionId) {
|
|
105
|
+
sectionId = this.generateSectionId(heading.text);
|
|
106
|
+
}
|
|
107
|
+
// Validate section ID
|
|
108
|
+
this.validateSectionId(sectionId, heading.line + 1);
|
|
109
|
+
// Check for duplicate section IDs
|
|
110
|
+
if (encounteredSectionIds.has(sectionId)) {
|
|
111
|
+
throw new errors_1.ParseError(`Duplicate section ID '${sectionId}' at line ${heading.line + 1}. ` +
|
|
112
|
+
`Section IDs must be unique.`);
|
|
113
|
+
}
|
|
114
|
+
encounteredSectionIds.add(sectionId);
|
|
115
|
+
// Determine section content boundaries
|
|
116
|
+
const sectionStart = heading.index;
|
|
117
|
+
const nextHeading = headingMatches[i + 1];
|
|
118
|
+
const sectionEnd = nextHeading ? nextHeading.index : content.length;
|
|
119
|
+
// Extract section content
|
|
120
|
+
const sectionContent = content.substring(sectionStart, sectionEnd).trim();
|
|
121
|
+
sections.set(sectionId, {
|
|
122
|
+
id: sectionId,
|
|
123
|
+
headingText: heading.text,
|
|
124
|
+
content: sectionContent,
|
|
125
|
+
startLine: heading.line,
|
|
126
|
+
endLine: content.substring(0, sectionEnd).split('\n').length - 1,
|
|
127
|
+
headingLevel: heading.level
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
return sections;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Apply overrides and merge parent/child sections.
|
|
134
|
+
*/
|
|
135
|
+
async applyOverrides(parentSections, childSections, overrides, baseDir, verbose = false, fileSystem) {
|
|
136
|
+
// Start with parent sections as base
|
|
137
|
+
const mergedSections = new Map(parentSections);
|
|
138
|
+
// Apply overrides
|
|
139
|
+
for (const [sectionId, overridePath] of Object.entries(overrides)) {
|
|
140
|
+
if (!mergedSections.has(sectionId)) {
|
|
141
|
+
// Override references a section that doesn't exist in parent
|
|
142
|
+
if (verbose) {
|
|
143
|
+
const available = Array.from(mergedSections.keys()).sort().join(', ');
|
|
144
|
+
console.log(`Warning: Override section '${sectionId}' not found in parent. Available: ${available}`);
|
|
145
|
+
}
|
|
146
|
+
continue;
|
|
147
|
+
}
|
|
148
|
+
if (overridePath === null) {
|
|
149
|
+
// Remove section
|
|
150
|
+
mergedSections.delete(sectionId);
|
|
151
|
+
if (verbose) {
|
|
152
|
+
console.log(` - Removing section '${sectionId}'`);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
else {
|
|
156
|
+
// Replace section with content from file
|
|
157
|
+
try {
|
|
158
|
+
const overrideContent = await this.loadOverrideContent(overridePath, baseDir, fileSystem);
|
|
159
|
+
const originalSection = mergedSections.get(sectionId);
|
|
160
|
+
mergedSections.set(sectionId, {
|
|
161
|
+
...originalSection,
|
|
162
|
+
content: overrideContent
|
|
163
|
+
});
|
|
164
|
+
if (verbose) {
|
|
165
|
+
console.log(` - Replacing section '${sectionId}' with content from ${overridePath}`);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
catch (error) {
|
|
169
|
+
throw new Error(`Failed to apply override for section '${sectionId}': ${error instanceof Error ? error.message : String(error)}`);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
// Merge child sections (child overrides parent for matching IDs)
|
|
174
|
+
for (const [sectionId, childSection] of childSections.entries()) {
|
|
175
|
+
mergedSections.set(sectionId, childSection);
|
|
176
|
+
if (verbose && parentSections.has(sectionId)) {
|
|
177
|
+
console.log(` - Child overrides parent section '${sectionId}'`);
|
|
178
|
+
}
|
|
179
|
+
else if (verbose) {
|
|
180
|
+
console.log(` - Adding child section '${sectionId}'`);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
// Reconstruct content from merged sections
|
|
184
|
+
const contentParts = [];
|
|
185
|
+
for (const section of mergedSections.values()) {
|
|
186
|
+
contentParts.push(section.content);
|
|
187
|
+
}
|
|
188
|
+
return contentParts.join('\n\n');
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Load override content from a file.
|
|
192
|
+
*/
|
|
193
|
+
async loadOverrideContent(overridePath, baseDir, fileSystem) {
|
|
194
|
+
// Security: Validate and resolve path
|
|
195
|
+
const resolvedPath = this.resolveOverridePath(overridePath, baseDir);
|
|
196
|
+
// If using custom file system, use it directly
|
|
197
|
+
if (fileSystem) {
|
|
198
|
+
if (!await fileSystem.exists(resolvedPath)) {
|
|
199
|
+
throw new Error(`Override file not found: ${resolvedPath}`);
|
|
200
|
+
}
|
|
201
|
+
try {
|
|
202
|
+
const content = await fileSystem.readFile(resolvedPath);
|
|
203
|
+
return content.trim();
|
|
204
|
+
}
|
|
205
|
+
catch (error) {
|
|
206
|
+
throw new Error(`Failed to read override file: ${error instanceof Error ? error.message : String(error)}`);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
// Otherwise use Node.js fs (default behavior)
|
|
210
|
+
// Security: Check file exists
|
|
211
|
+
if (!await fs.pathExists(resolvedPath)) {
|
|
212
|
+
throw new Error(`Override file not found: ${resolvedPath}`);
|
|
213
|
+
}
|
|
214
|
+
// Security: Check it's a regular file
|
|
215
|
+
const stats = await fs.stat(resolvedPath);
|
|
216
|
+
if (!stats.isFile()) {
|
|
217
|
+
throw new errors_1.SecurityError(`Override path must be a regular file: ${resolvedPath}`);
|
|
218
|
+
}
|
|
219
|
+
// Security: Check file size (max 10MB)
|
|
220
|
+
const maxFileSize = 10 * 1024 * 1024;
|
|
221
|
+
if (stats.size > maxFileSize) {
|
|
222
|
+
throw new errors_1.SecurityError(`Override file too large: ${stats.size} bytes (max: ${maxFileSize})`);
|
|
223
|
+
}
|
|
224
|
+
// Load content
|
|
225
|
+
try {
|
|
226
|
+
const content = await fs.readFile(resolvedPath, 'utf-8');
|
|
227
|
+
return content.trim();
|
|
228
|
+
}
|
|
229
|
+
catch (error) {
|
|
230
|
+
throw new Error(`Failed to read override file: ${error instanceof Error ? error.message : String(error)}`);
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Resolve override path with security checks.
|
|
235
|
+
*/
|
|
236
|
+
resolveOverridePath(overridePath, baseDir) {
|
|
237
|
+
// Security: Path traversal protection
|
|
238
|
+
const normalized = path.normalize(overridePath);
|
|
239
|
+
// Security: Detect path traversal attempts
|
|
240
|
+
if (normalized.includes('..') && !overridePath.startsWith('./') && !overridePath.startsWith('../')) {
|
|
241
|
+
throw new errors_1.SecurityError(`Path traversal detected in override path: ${overridePath}`);
|
|
242
|
+
}
|
|
243
|
+
// Security: Reject absolute paths unless they're in safe locations
|
|
244
|
+
if (path.isAbsolute(normalized)) {
|
|
245
|
+
// Allow absolute paths only within the project or home directory
|
|
246
|
+
const projectRoot = process.cwd();
|
|
247
|
+
const homeDir = require('os').homedir();
|
|
248
|
+
if (!normalized.startsWith(projectRoot) && !normalized.startsWith(homeDir)) {
|
|
249
|
+
throw new errors_1.SecurityError(`Absolute paths outside project not allowed: ${overridePath}`);
|
|
250
|
+
}
|
|
251
|
+
return normalized;
|
|
252
|
+
}
|
|
253
|
+
// Resolve relative path from base directory
|
|
254
|
+
const resolved = path.resolve(baseDir, normalized);
|
|
255
|
+
// Security: Ensure resolved path doesn't escape base directory
|
|
256
|
+
if (!resolved.startsWith(baseDir) && !resolved.startsWith(process.cwd())) {
|
|
257
|
+
throw new errors_1.SecurityError(`Override path escapes base directory: ${overridePath}`);
|
|
258
|
+
}
|
|
259
|
+
return resolved;
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Generate a section ID from heading text (kebab-case).
|
|
263
|
+
*/
|
|
264
|
+
generateSectionId(headingText) {
|
|
265
|
+
return headingText
|
|
266
|
+
.toLowerCase()
|
|
267
|
+
.trim()
|
|
268
|
+
.replace(/[^a-z0-9\s-]/g, '') // Remove non-alphanumeric except spaces and hyphens
|
|
269
|
+
.replace(/\s+/g, '-') // Replace spaces with hyphens
|
|
270
|
+
.replace(/-+/g, '-') // Collapse multiple hyphens
|
|
271
|
+
.replace(/^-|-$/g, ''); // Remove leading/trailing hyphens
|
|
272
|
+
}
|
|
273
|
+
/**
|
|
274
|
+
* Validate section ID format.
|
|
275
|
+
*/
|
|
276
|
+
validateSectionId(sectionId, lineNumber) {
|
|
277
|
+
// Section IDs must be kebab-case (lowercase letters, numbers, hyphens)
|
|
278
|
+
const validPattern = /^[a-z0-9]([a-z0-9-]*[a-z0-9])?$/;
|
|
279
|
+
if (!validPattern.test(sectionId)) {
|
|
280
|
+
const location = lineNumber ? ` at line ${lineNumber}` : '';
|
|
281
|
+
throw new errors_1.ValidationError(`Invalid section ID '${sectionId}'${location}. ` +
|
|
282
|
+
`Section IDs must be kebab-case (lowercase letters, numbers, hyphens only).`);
|
|
283
|
+
}
|
|
284
|
+
// Security: Check for excessively long IDs (potential DoS)
|
|
285
|
+
if (sectionId.length > 100) {
|
|
286
|
+
throw new errors_1.ValidationError(`Section ID too long: ${sectionId.length} characters (max: 100)`);
|
|
287
|
+
}
|
|
288
|
+
// Security: Reject IDs that might be used for code injection
|
|
289
|
+
const dangerousPatterns = ['__proto__', 'constructor', 'prototype'];
|
|
290
|
+
if (dangerousPatterns.some(pattern => sectionId.includes(pattern))) {
|
|
291
|
+
throw new errors_1.SecurityError(`Section ID contains forbidden pattern: ${sectionId}`);
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
exports.SectionOverrideProcessor = SectionOverrideProcessor;
|
|
296
|
+
//# sourceMappingURL=section-override.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"section-override.js","sourceRoot":"","sources":["../../../src/lib/compiler/section-override.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,2CAA6B;AAC7B,6CAA+B;AAE/B,sCAAuE;AAGvE,MAAa,wBAAwB;IAInC;QACE,wDAAwD;QACxD,IAAI,CAAC,cAAc,GAAG,qBAAqB,CAAC;QAE5C,uCAAuC;QACvC,IAAI,CAAC,gBAAgB,GAAG,0CAA0C,CAAC;IACrE,CAAC;IAED;;OAEG;IACH,eAAe,CAAC,OAAe;QAC7B,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;YAChC,OAAO,IAAI,GAAG,EAAE,CAAC;QACnB,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAuB,CAAC;QAChD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAClC,MAAM,qBAAqB,GAAG,IAAI,GAAG,EAAU,CAAC;QAEhD,qCAAqC;QACrC,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAAkB,CAAC;QACrD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACnD,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBAC3B,IAAI,CAAC,iBAAiB,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;gBACzC,kBAAkB,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;YACvC,CAAC;QACH,CAAC;QAED,wCAAwC;QACxC,MAAM,cAAc,GAAwE,EAAE,CAAC;QAC/F,IAAI,KAAK,CAAC;QAEV,oBAAoB;QACpB,IAAI,CAAC,cAAc,CAAC,SAAS,GAAG,CAAC,CAAC;QAElC,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YAC5D,MAAM,YAAY,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,yBAAyB;YAC/D,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YACpC,MAAM,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;YAE7E,cAAc,CAAC,IAAI,CAAC;gBAClB,KAAK,EAAE,YAAY;gBACnB,IAAI,EAAE,WAAW;gBACjB,IAAI,EAAE,WAAW;gBACjB,KAAK,EAAE,KAAK,CAAC,KAAK;aACnB,CAAC,CAAC;QACL,CAAC;QAED,0CAA0C;QAC1C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC/C,MAAM,OAAO,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;YAElC,uBAAuB;YACvB,IAAI,SAAS,GAAkB,IAAI,CAAC;YAEpC,6EAA6E;YAC7E,KAAK,IAAI,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC;gBACrF,IAAI,kBAAkB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;oBACpC,SAAS,GAAG,kBAAkB,CAAC,GAAG,CAAC,OAAO,CAAE,CAAC;oBAC7C,MAAM;gBACR,CAAC;YACH,CAAC;YAED,gDAAgD;YAChD,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACnD,CAAC;YAED,sBAAsB;YACtB,IAAI,CAAC,iBAAiB,CAAC,SAAS,EAAE,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;YAEpD,kCAAkC;YAClC,IAAI,qBAAqB,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;gBACzC,MAAM,IAAI,mBAAU,CAClB,yBAAyB,SAAS,aAAa,OAAO,CAAC,IAAI,GAAG,CAAC,IAAI;oBACnE,6BAA6B,CAC9B,CAAC;YACJ,CAAC;YACD,qBAAqB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAErC,uCAAuC;YACvC,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC;YACnC,MAAM,WAAW,GAAG,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC1C,MAAM,UAAU,GAAG,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;YAEpE,0BAA0B;YAC1B,MAAM,cAAc,GAAG,OAAO,CAAC,SAAS,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC,IAAI,EAAE,CAAC;YAE1E,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE;gBACtB,EAAE,EAAE,SAAS;gBACb,WAAW,EAAE,OAAO,CAAC,IAAI;gBACzB,OAAO,EAAE,cAAc;gBACvB,SAAS,EAAE,OAAO,CAAC,IAAI;gBACvB,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC;gBAChE,YAAY,EAAE,OAAO,CAAC,KAAK;aAC5B,CAAC,CAAC;QACL,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc,CAClB,cAAwC,EACxC,aAAuC,EACvC,SAAwC,EACxC,OAAe,EACf,UAAmB,KAAK,EACxB,UAAwB;QAExB,qCAAqC;QACrC,MAAM,cAAc,GAAG,IAAI,GAAG,CAAsB,cAAc,CAAC,CAAC;QAEpE,kBAAkB;QAClB,KAAK,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;YAClE,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;gBACnC,6DAA6D;gBAC7D,IAAI,OAAO,EAAE,CAAC;oBACZ,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACtE,OAAO,CAAC,GAAG,CACT,8BAA8B,SAAS,qCAAqC,SAAS,EAAE,CACxF,CAAC;gBACJ,CAAC;gBACD,SAAS;YACX,CAAC;YAED,IAAI,YAAY,KAAK,IAAI,EAAE,CAAC;gBAC1B,iBAAiB;gBACjB,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;gBACjC,IAAI,OAAO,EAAE,CAAC;oBACZ,OAAO,CAAC,GAAG,CAAC,yBAAyB,SAAS,GAAG,CAAC,CAAC;gBACrD,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,yCAAyC;gBACzC,IAAI,CAAC;oBACH,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,YAAY,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;oBAE1F,MAAM,eAAe,GAAG,cAAc,CAAC,GAAG,CAAC,SAAS,CAAE,CAAC;oBACvD,cAAc,CAAC,GAAG,CAAC,SAAS,EAAE;wBAC5B,GAAG,eAAe;wBAClB,OAAO,EAAE,eAAe;qBACzB,CAAC,CAAC;oBAEH,IAAI,OAAO,EAAE,CAAC;wBACZ,OAAO,CAAC,GAAG,CAAC,0BAA0B,SAAS,uBAAuB,YAAY,EAAE,CAAC,CAAC;oBACxF,CAAC;gBACH,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,MAAM,IAAI,KAAK,CACb,yCAAyC,SAAS,MAAM,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CACjH,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;QAED,iEAAiE;QACjE,KAAK,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,IAAI,aAAa,CAAC,OAAO,EAAE,EAAE,CAAC;YAChE,cAAc,CAAC,GAAG,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;YAE5C,IAAI,OAAO,IAAI,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC7C,OAAO,CAAC,GAAG,CAAC,uCAAuC,SAAS,GAAG,CAAC,CAAC;YACnE,CAAC;iBAAM,IAAI,OAAO,EAAE,CAAC;gBACnB,OAAO,CAAC,GAAG,CAAC,6BAA6B,SAAS,GAAG,CAAC,CAAC;YACzD,CAAC;QACH,CAAC;QAED,2CAA2C;QAC3C,MAAM,YAAY,GAAa,EAAE,CAAC;QAClC,KAAK,MAAM,OAAO,IAAI,cAAc,CAAC,MAAM,EAAE,EAAE,CAAC;YAC9C,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACrC,CAAC;QAED,OAAO,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,mBAAmB,CAAC,YAAoB,EAAE,OAAe,EAAE,UAAwB;QACvF,sCAAsC;QACtC,MAAM,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QAErE,+CAA+C;QAC/C,IAAI,UAAU,EAAE,CAAC;YACf,IAAI,CAAE,MAAM,UAAU,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC;gBAC5C,MAAM,IAAI,KAAK,CAAC,4BAA4B,YAAY,EAAE,CAAC,CAAC;YAC9D,CAAC;YAED,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;gBACxD,OAAO,OAAO,CAAC,IAAI,EAAE,CAAC;YACxB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,IAAI,KAAK,CACb,iCAAiC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAC1F,CAAC;YACJ,CAAC;QACH,CAAC;QAED,8CAA8C;QAC9C,8BAA8B;QAC9B,IAAI,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YACvC,MAAM,IAAI,KAAK,CAAC,4BAA4B,YAAY,EAAE,CAAC,CAAC;QAC9D,CAAC;QAED,sCAAsC;QACtC,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC1C,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;YACpB,MAAM,IAAI,sBAAa,CAAC,yCAAyC,YAAY,EAAE,CAAC,CAAC;QACnF,CAAC;QAED,uCAAuC;QACvC,MAAM,WAAW,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;QACrC,IAAI,KAAK,CAAC,IAAI,GAAG,WAAW,EAAE,CAAC;YAC7B,MAAM,IAAI,sBAAa,CAAC,4BAA4B,KAAK,CAAC,IAAI,gBAAgB,WAAW,GAAG,CAAC,CAAC;QAChG,CAAC;QAED,eAAe;QACf,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;YACzD,OAAO,OAAO,CAAC,IAAI,EAAE,CAAC;QACxB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CACb,iCAAiC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAC1F,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACK,mBAAmB,CAAC,YAAoB,EAAE,OAAe;QAC/D,sCAAsC;QACtC,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;QAEhD,2CAA2C;QAC3C,IAAI,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YACnG,MAAM,IAAI,sBAAa,CAAC,6CAA6C,YAAY,EAAE,CAAC,CAAC;QACvF,CAAC;QAED,mEAAmE;QACnE,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAChC,iEAAiE;YACjE,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;YAClC,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;YAExC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC3E,MAAM,IAAI,sBAAa,CAAC,+CAA+C,YAAY,EAAE,CAAC,CAAC;YACzF,CAAC;YAED,OAAO,UAAU,CAAC;QACpB,CAAC;QAED,4CAA4C;QAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QAEnD,+DAA+D;QAC/D,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC;YACzE,MAAM,IAAI,sBAAa,CAAC,yCAAyC,YAAY,EAAE,CAAC,CAAC;QACnF,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;OAEG;IACK,iBAAiB,CAAC,WAAmB;QAC3C,OAAO,WAAW;aACf,WAAW,EAAE;aACb,IAAI,EAAE;aACN,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC,oDAAoD;aACjF,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,8BAA8B;aACnD,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,4BAA4B;aAChD,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,kCAAkC;IAC9D,CAAC;IAED;;OAEG;IACK,iBAAiB,CAAC,SAAiB,EAAE,UAAmB;QAC9D,uEAAuE;QACvE,MAAM,YAAY,GAAG,iCAAiC,CAAC;QAEvD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YAClC,MAAM,QAAQ,GAAG,UAAU,CAAC,CAAC,CAAC,YAAY,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5D,MAAM,IAAI,wBAAe,CACvB,uBAAuB,SAAS,IAAI,QAAQ,IAAI;gBAChD,4EAA4E,CAC7E,CAAC;QACJ,CAAC;QAED,2DAA2D;QAC3D,IAAI,SAAS,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;YAC3B,MAAM,IAAI,wBAAe,CAAC,wBAAwB,SAAS,CAAC,MAAM,wBAAwB,CAAC,CAAC;QAC9F,CAAC;QAED,6DAA6D;QAC7D,MAAM,iBAAiB,GAAG,CAAC,WAAW,EAAE,aAAa,EAAE,WAAW,CAAC,CAAC;QACpE,IAAI,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;YACnE,MAAM,IAAI,sBAAa,CAAC,0CAA0C,SAAS,EAAE,CAAC,CAAC;QACjF,CAAC;IACH,CAAC;CACF;AAtTD,4DAsTC"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Asset Extraction Stage
|
|
3
|
+
*
|
|
4
|
+
* Extracts content from binary files (Excel, Word, PDF, Images) with
|
|
5
|
+
* comprehensive security validation.
|
|
6
|
+
*
|
|
7
|
+
* Supported formats:
|
|
8
|
+
* - Excel: .xlsx, .xls
|
|
9
|
+
* - Word: .docx
|
|
10
|
+
* - PDF: .pdf
|
|
11
|
+
* - Images: .png, .jpg, .jpeg, .gif (metadata only)
|
|
12
|
+
* - Text: .txt, .md, .json, .yaml, .yml
|
|
13
|
+
*/
|
|
14
|
+
import { CompilerStage, CompilationContext } from '../types';
|
|
15
|
+
export declare class AssetExtractionStage implements CompilerStage {
|
|
16
|
+
private maxFileSize;
|
|
17
|
+
private allowedExtensions;
|
|
18
|
+
constructor();
|
|
19
|
+
process(context: CompilationContext): Promise<void>;
|
|
20
|
+
/**
|
|
21
|
+
* Process context files from metadata.
|
|
22
|
+
* Extracts file content and adds to context.contexts array.
|
|
23
|
+
* This matches the Python CLI behavior where context is output at the top.
|
|
24
|
+
*/
|
|
25
|
+
private processContextFiles;
|
|
26
|
+
/**
|
|
27
|
+
* Process YAML-defined section file references.
|
|
28
|
+
* Replaces placeholder content with extracted file content.
|
|
29
|
+
*/
|
|
30
|
+
private processYamlSectionFiles;
|
|
31
|
+
/**
|
|
32
|
+
* Process inline file references in content.
|
|
33
|
+
* Replaces [file:./path] placeholders with extracted content.
|
|
34
|
+
*/
|
|
35
|
+
private processInlineFileReferences;
|
|
36
|
+
/**
|
|
37
|
+
* Extract content from a file with security validation.
|
|
38
|
+
*/
|
|
39
|
+
private extractFile;
|
|
40
|
+
/**
|
|
41
|
+
* Security: Validate file path for path traversal and other attacks.
|
|
42
|
+
*/
|
|
43
|
+
private validateFilePath;
|
|
44
|
+
/**
|
|
45
|
+
* Security: Validate file properties.
|
|
46
|
+
*/
|
|
47
|
+
private validateFile;
|
|
48
|
+
/**
|
|
49
|
+
* Extract content from Excel files.
|
|
50
|
+
*/
|
|
51
|
+
private extractExcel;
|
|
52
|
+
/**
|
|
53
|
+
* Extract content from Word documents.
|
|
54
|
+
*/
|
|
55
|
+
private extractWord;
|
|
56
|
+
/**
|
|
57
|
+
* Extract content from PDF files.
|
|
58
|
+
*/
|
|
59
|
+
private extractPdf;
|
|
60
|
+
/**
|
|
61
|
+
* Extract metadata from images (OCR not implemented).
|
|
62
|
+
*/
|
|
63
|
+
private extractImageMetadata;
|
|
64
|
+
/**
|
|
65
|
+
* Extract plain text content.
|
|
66
|
+
* For code files, wraps content in markdown code blocks with appropriate language identifier.
|
|
67
|
+
*/
|
|
68
|
+
private extractText;
|
|
69
|
+
getName(): string;
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=assets.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assets.d.ts","sourceRoot":"","sources":["../../../../src/lib/compiler/stages/assets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAMH,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AA2B7D,qBAAa,oBAAqB,YAAW,aAAa;IACxD,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,iBAAiB,CAAc;;IAgBjC,OAAO,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAmBzD;;;;OAIG;YACW,mBAAmB;IA2CjC;;;OAGG;YACW,uBAAuB;IA0DrC;;;OAGG;YACW,2BAA2B;IAwCzC;;OAEG;YACW,WAAW;IAmDzB;;OAEG;YACW,gBAAgB;IAgB9B;;OAEG;YACW,YAAY;IAsB1B;;OAEG;YACW,YAAY;IAsB1B;;OAEG;YACW,WAAW;IAiBzB;;OAEG;YACW,UAAU;IAwBxB;;OAEG;YACW,oBAAoB;IAyBlC;;;OAGG;YACW,WAAW;IA+BzB,OAAO,IAAI,MAAM;CAGlB"}
|