embedoc 0.9.0
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/LICENSE +21 -0
- package/README.md +941 -0
- package/dist/cli.d.ts +6 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +337 -0
- package/dist/cli.js.map +1 -0
- package/dist/core/dependency.d.ts +59 -0
- package/dist/core/dependency.d.ts.map +1 -0
- package/dist/core/dependency.js +209 -0
- package/dist/core/dependency.js.map +1 -0
- package/dist/core/generator.d.ts +23 -0
- package/dist/core/generator.d.ts.map +1 -0
- package/dist/core/generator.js +211 -0
- package/dist/core/generator.js.map +1 -0
- package/dist/core/inline-datasource.d.ts +117 -0
- package/dist/core/inline-datasource.d.ts.map +1 -0
- package/dist/core/inline-datasource.js +346 -0
- package/dist/core/inline-datasource.js.map +1 -0
- package/dist/core/parser.d.ts +41 -0
- package/dist/core/parser.d.ts.map +1 -0
- package/dist/core/parser.js +250 -0
- package/dist/core/parser.js.map +1 -0
- package/dist/core/processor.d.ts +18 -0
- package/dist/core/processor.d.ts.map +1 -0
- package/dist/core/processor.js +219 -0
- package/dist/core/processor.js.map +1 -0
- package/dist/datasources/csv.d.ts +17 -0
- package/dist/datasources/csv.d.ts.map +1 -0
- package/dist/datasources/csv.js +54 -0
- package/dist/datasources/csv.js.map +1 -0
- package/dist/datasources/glob.d.ts +17 -0
- package/dist/datasources/glob.d.ts.map +1 -0
- package/dist/datasources/glob.js +72 -0
- package/dist/datasources/glob.js.map +1 -0
- package/dist/datasources/index.d.ts +22 -0
- package/dist/datasources/index.d.ts.map +1 -0
- package/dist/datasources/index.js +53 -0
- package/dist/datasources/index.js.map +1 -0
- package/dist/datasources/json.d.ts +16 -0
- package/dist/datasources/json.d.ts.map +1 -0
- package/dist/datasources/json.js +59 -0
- package/dist/datasources/json.js.map +1 -0
- package/dist/datasources/sqlite.d.ts +15 -0
- package/dist/datasources/sqlite.d.ts.map +1 -0
- package/dist/datasources/sqlite.js +40 -0
- package/dist/datasources/sqlite.js.map +1 -0
- package/dist/datasources/yaml.d.ts +16 -0
- package/dist/datasources/yaml.d.ts.map +1 -0
- package/dist/datasources/yaml.js +60 -0
- package/dist/datasources/yaml.js.map +1 -0
- package/dist/helpers/markdown.d.ts +10 -0
- package/dist/helpers/markdown.d.ts.map +1 -0
- package/dist/helpers/markdown.js +93 -0
- package/dist/helpers/markdown.js.map +1 -0
- package/dist/index.d.ts +50 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +51 -0
- package/dist/index.js.map +1 -0
- package/dist/types/index.d.ts +254 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +5 -0
- package/dist/types/index.js.map +1 -0
- package/package.json +88 -0
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Replacement Processor
|
|
3
|
+
* Replace marker-enclosed blocks with embed execution results
|
|
4
|
+
*/
|
|
5
|
+
import type { EmbedifyConfig, EmbedDefinition, Datasource, ProcessResult, BuildResult, TargetConfig } from '../types/index.js';
|
|
6
|
+
/**
|
|
7
|
+
* Process a single file
|
|
8
|
+
*/
|
|
9
|
+
export declare function processFile(filePath: string, content: string, targetConfig: TargetConfig, embeds: Record<string, EmbedDefinition>, datasources: Record<string, Datasource>, config: EmbedifyConfig, dryRun?: boolean): Promise<ProcessResult>;
|
|
10
|
+
/**
|
|
11
|
+
* Process all target files
|
|
12
|
+
*/
|
|
13
|
+
export declare function build(config: EmbedifyConfig, embeds: Record<string, EmbedDefinition>, datasources: Record<string, Datasource>, options?: {
|
|
14
|
+
dryRun?: boolean;
|
|
15
|
+
verbose?: boolean;
|
|
16
|
+
specificFiles?: string[];
|
|
17
|
+
}): Promise<BuildResult>;
|
|
18
|
+
//# sourceMappingURL=processor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"processor.d.ts","sourceRoot":"","sources":["../../src/core/processor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EACV,cAAc,EACd,eAAe,EAEf,UAAU,EACV,aAAa,EACb,WAAW,EACX,YAAY,EACb,MAAM,mBAAmB,CAAC;AA4D3B;;GAEG;AACH,wBAAsB,WAAW,CAC/B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,YAAY,EAC1B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,EACvC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,EACvC,MAAM,EAAE,cAAc,EACtB,MAAM,UAAQ,GACb,OAAO,CAAC,aAAa,CAAC,CA0IxB;AAgBD;;GAEG;AACH,wBAAsB,KAAK,CACzB,MAAM,EAAE,cAAc,EACtB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,EACvC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,EACvC,OAAO,GAAE;IACP,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB,GACL,OAAO,CAAC,WAAW,CAAC,CAoEtB"}
|
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Replacement Processor
|
|
3
|
+
* Replace marker-enclosed blocks with embed execution results
|
|
4
|
+
*/
|
|
5
|
+
import { readFile, writeFile } from 'node:fs/promises';
|
|
6
|
+
import { glob } from 'glob';
|
|
7
|
+
import { parseMarkers, parseFrontmatter, getCommentStyle, parseInlineDataMarkers, } from './parser.js';
|
|
8
|
+
import { createMarkdownHelper } from '../helpers/markdown.js';
|
|
9
|
+
import { buildInlineDatasources, resolveDotPath } from './inline-datasource.js';
|
|
10
|
+
/**
|
|
11
|
+
* Resolve variables with support for inline datasources
|
|
12
|
+
* Supports ${frontmatter.key}, ${datasourceName.path.to.value}
|
|
13
|
+
*/
|
|
14
|
+
function resolveVariablesWithInline(params, frontmatter, inlineDatasources) {
|
|
15
|
+
const result = {};
|
|
16
|
+
for (const [key, value] of Object.entries(params)) {
|
|
17
|
+
result[key] = value.replace(/\$\{(\w+(?:\.\w+|\[\d+\])*)\}/g, (_, path) => {
|
|
18
|
+
const parts = path.split('.');
|
|
19
|
+
const rootName = parts[0];
|
|
20
|
+
if (!rootName)
|
|
21
|
+
return '';
|
|
22
|
+
// Check inline datasources first
|
|
23
|
+
const inlineDs = inlineDatasources.get(rootName);
|
|
24
|
+
if (inlineDs) {
|
|
25
|
+
const subPath = parts.slice(1).join('.');
|
|
26
|
+
if (subPath) {
|
|
27
|
+
const resolved = resolveDotPath(inlineDs.data, subPath);
|
|
28
|
+
return resolved !== null && resolved !== undefined ? String(resolved) : '';
|
|
29
|
+
}
|
|
30
|
+
// If no subpath, return stringified value
|
|
31
|
+
const data = inlineDs.data;
|
|
32
|
+
return data !== null && data !== undefined ? String(data) : '';
|
|
33
|
+
}
|
|
34
|
+
// Fall back to frontmatter
|
|
35
|
+
let current = frontmatter;
|
|
36
|
+
for (const part of parts) {
|
|
37
|
+
if (current === null || current === undefined) {
|
|
38
|
+
return '';
|
|
39
|
+
}
|
|
40
|
+
if (typeof current === 'object') {
|
|
41
|
+
current = current[part];
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
return '';
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return current !== null && current !== undefined ? String(current) : '';
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
return result;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Process a single file
|
|
54
|
+
*/
|
|
55
|
+
export async function processFile(filePath, content, targetConfig, embeds, datasources, config, dryRun = false) {
|
|
56
|
+
const result = {
|
|
57
|
+
filePath,
|
|
58
|
+
success: true,
|
|
59
|
+
markersUpdated: 0,
|
|
60
|
+
changed: false,
|
|
61
|
+
};
|
|
62
|
+
try {
|
|
63
|
+
// Get comment style
|
|
64
|
+
const commentStyle = getCommentStyle(targetConfig.comment_style, config.comment_styles);
|
|
65
|
+
// Parse frontmatter
|
|
66
|
+
const { data: frontmatter, content: bodyContent, raw: frontmatterRaw } = parseFrontmatter(content);
|
|
67
|
+
// Parse inline data markers
|
|
68
|
+
const inlineDataMarkers = parseInlineDataMarkers(bodyContent, commentStyle);
|
|
69
|
+
// Build inline datasources
|
|
70
|
+
const inlineDatasources = buildInlineDatasources(inlineDataMarkers, filePath, config.inline_datasource);
|
|
71
|
+
// Merge inline datasources with external (inline takes precedence)
|
|
72
|
+
const mergedDatasources = { ...datasources };
|
|
73
|
+
for (const [name, ds] of inlineDatasources) {
|
|
74
|
+
if (name in mergedDatasources) {
|
|
75
|
+
const policy = config.inline_datasource?.conflictPolicy ?? 'warn';
|
|
76
|
+
if (policy === 'error') {
|
|
77
|
+
throw new Error(`Inline datasource "${name}" conflicts with external datasource (conflict_policy: error)`);
|
|
78
|
+
}
|
|
79
|
+
else if (policy === 'prefer_external') {
|
|
80
|
+
continue; // Skip inline, use external
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
console.warn(`Warning: Inline datasource "${name}" overrides external datasource in ${filePath}`);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
mergedDatasources[name] = ds;
|
|
87
|
+
}
|
|
88
|
+
// Parse markers
|
|
89
|
+
const markers = parseMarkers(bodyContent, commentStyle);
|
|
90
|
+
if (markers.length === 0 && inlineDataMarkers.length === 0) {
|
|
91
|
+
return result;
|
|
92
|
+
}
|
|
93
|
+
// Create helpers
|
|
94
|
+
const markdownHelper = createMarkdownHelper();
|
|
95
|
+
// Replace from end to start (to preserve indices)
|
|
96
|
+
let processedContent = bodyContent;
|
|
97
|
+
const sortedMarkers = [...markers].sort((a, b) => b.startIndex - a.startIndex);
|
|
98
|
+
for (const marker of sortedMarkers) {
|
|
99
|
+
// Get embed
|
|
100
|
+
const embed = embeds[marker.templateName];
|
|
101
|
+
if (!embed) {
|
|
102
|
+
console.warn(`Warning: Unknown embed "${marker.templateName}" in ${filePath}`);
|
|
103
|
+
continue;
|
|
104
|
+
}
|
|
105
|
+
// Resolve parameter variables (including inline datasources)
|
|
106
|
+
const resolvedParams = resolveVariablesWithInline(marker.params, frontmatter, inlineDatasources);
|
|
107
|
+
// Create context
|
|
108
|
+
const ctx = {
|
|
109
|
+
params: resolvedParams,
|
|
110
|
+
frontmatter,
|
|
111
|
+
datasources: mergedDatasources,
|
|
112
|
+
markdown: markdownHelper,
|
|
113
|
+
filePath,
|
|
114
|
+
};
|
|
115
|
+
// Execute embed
|
|
116
|
+
const embedResult = await embed.render(ctx);
|
|
117
|
+
// Replace content
|
|
118
|
+
const newContent = marker.startMarkerLine +
|
|
119
|
+
'\n' +
|
|
120
|
+
embedResult.content +
|
|
121
|
+
'\n' +
|
|
122
|
+
marker.endMarkerLine;
|
|
123
|
+
processedContent =
|
|
124
|
+
processedContent.slice(0, marker.startIndex) +
|
|
125
|
+
newContent +
|
|
126
|
+
processedContent.slice(marker.endIndex);
|
|
127
|
+
result.markersUpdated++;
|
|
128
|
+
}
|
|
129
|
+
// Prepend frontmatter
|
|
130
|
+
const finalContent = frontmatterRaw + processedContent;
|
|
131
|
+
// Check if changed
|
|
132
|
+
if (finalContent !== content) {
|
|
133
|
+
result.changed = true;
|
|
134
|
+
if (!dryRun) {
|
|
135
|
+
// Write to file
|
|
136
|
+
const lineEnding = config.output?.line_ending ?? 'lf';
|
|
137
|
+
const outputContent = lineEnding === 'crlf'
|
|
138
|
+
? finalContent.replace(/\n/g, '\r\n')
|
|
139
|
+
: finalContent;
|
|
140
|
+
await writeFile(filePath, outputContent, {
|
|
141
|
+
encoding: config.output?.encoding ?? 'utf-8',
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
// Cleanup inline datasources
|
|
146
|
+
for (const ds of inlineDatasources.values()) {
|
|
147
|
+
await ds.close();
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
catch (error) {
|
|
151
|
+
result.success = false;
|
|
152
|
+
result.error = error instanceof Error ? error : new Error(String(error));
|
|
153
|
+
}
|
|
154
|
+
return result;
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Get target files
|
|
158
|
+
*/
|
|
159
|
+
async function getTargetFiles(targetConfig) {
|
|
160
|
+
const files = await glob(targetConfig.pattern, {
|
|
161
|
+
ignore: targetConfig.exclude ?? [],
|
|
162
|
+
nodir: true,
|
|
163
|
+
});
|
|
164
|
+
return files;
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Process all target files
|
|
168
|
+
*/
|
|
169
|
+
export async function build(config, embeds, datasources, options = {}) {
|
|
170
|
+
const startTime = Date.now();
|
|
171
|
+
const results = [];
|
|
172
|
+
for (const targetConfig of config.targets) {
|
|
173
|
+
// Get target files
|
|
174
|
+
let files;
|
|
175
|
+
if (options.specificFiles && options.specificFiles.length > 0) {
|
|
176
|
+
// When specific files are provided
|
|
177
|
+
files = options.specificFiles.filter((f) => f.endsWith(targetConfig.pattern.split('*').pop() ?? ''));
|
|
178
|
+
}
|
|
179
|
+
else {
|
|
180
|
+
files = await getTargetFiles(targetConfig);
|
|
181
|
+
}
|
|
182
|
+
// Process each file
|
|
183
|
+
for (const filePath of files) {
|
|
184
|
+
if (options.verbose) {
|
|
185
|
+
console.log(`Processing: ${filePath}`);
|
|
186
|
+
}
|
|
187
|
+
try {
|
|
188
|
+
const content = await readFile(filePath, { encoding: 'utf-8' });
|
|
189
|
+
const result = await processFile(filePath, content, targetConfig, embeds, datasources, config, options.dryRun);
|
|
190
|
+
results.push(result);
|
|
191
|
+
if (options.verbose && result.markersUpdated > 0) {
|
|
192
|
+
console.log(` Updated ${result.markersUpdated} marker(s)${result.changed ? ' (changed)' : ' (no changes)'}`);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
catch (error) {
|
|
196
|
+
results.push({
|
|
197
|
+
filePath,
|
|
198
|
+
success: false,
|
|
199
|
+
markersUpdated: 0,
|
|
200
|
+
changed: false,
|
|
201
|
+
error: error instanceof Error ? error : new Error(String(error)),
|
|
202
|
+
});
|
|
203
|
+
if (options.verbose) {
|
|
204
|
+
console.error(` Error: ${error}`);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
const duration = Date.now() - startTime;
|
|
210
|
+
return {
|
|
211
|
+
totalFiles: results.length,
|
|
212
|
+
successFiles: results.filter((r) => r.success).length,
|
|
213
|
+
failedFiles: results.filter((r) => !r.success).length,
|
|
214
|
+
totalMarkersUpdated: results.reduce((sum, r) => sum + r.markersUpdated, 0),
|
|
215
|
+
results,
|
|
216
|
+
duration,
|
|
217
|
+
};
|
|
218
|
+
}
|
|
219
|
+
//# sourceMappingURL=processor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"processor.js","sourceRoot":"","sources":["../../src/core/processor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAU5B,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,eAAe,EACf,sBAAsB,GACvB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,sBAAsB,EAAE,cAAc,EAAoB,MAAM,wBAAwB,CAAC;AAElG;;;GAGG;AACH,SAAS,0BAA0B,CACjC,MAA8B,EAC9B,WAAoC,EACpC,iBAAgD;IAEhD,MAAM,MAAM,GAA2B,EAAE,CAAC;IAE1C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAClD,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,gCAAgC,EAAE,CAAC,CAAC,EAAE,IAAY,EAAE,EAAE;YAChF,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC9B,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YAC1B,IAAI,CAAC,QAAQ;gBAAE,OAAO,EAAE,CAAC;YAEzB,iCAAiC;YACjC,MAAM,QAAQ,GAAG,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACjD,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACzC,IAAI,OAAO,EAAE,CAAC;oBACZ,MAAM,QAAQ,GAAG,cAAc,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;oBACxD,OAAO,QAAQ,KAAK,IAAI,IAAI,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC7E,CAAC;gBACD,0CAA0C;gBAC1C,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;gBAC3B,OAAO,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACjE,CAAC;YAED,2BAA2B;YAC3B,IAAI,OAAO,GAAY,WAAW,CAAC;YACnC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;oBAC9C,OAAO,EAAE,CAAC;gBACZ,CAAC;gBACD,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;oBAChC,OAAO,GAAI,OAAmC,CAAC,IAAI,CAAC,CAAC;gBACvD,CAAC;qBAAM,CAAC;oBACN,OAAO,EAAE,CAAC;gBACZ,CAAC;YACH,CAAC;YAED,OAAO,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1E,CAAC,CAAC,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,QAAgB,EAChB,OAAe,EACf,YAA0B,EAC1B,MAAuC,EACvC,WAAuC,EACvC,MAAsB,EACtB,MAAM,GAAG,KAAK;IAEd,MAAM,MAAM,GAAkB;QAC5B,QAAQ;QACR,OAAO,EAAE,IAAI;QACb,cAAc,EAAE,CAAC;QACjB,OAAO,EAAE,KAAK;KACf,CAAC;IAEF,IAAI,CAAC;QACH,oBAAoB;QACpB,MAAM,YAAY,GAAG,eAAe,CAClC,YAAY,CAAC,aAAa,EAC1B,MAAM,CAAC,cAAc,CACtB,CAAC;QAEF,oBAAoB;QACpB,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,EAAE,cAAc,EAAE,GACpE,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAE5B,4BAA4B;QAC5B,MAAM,iBAAiB,GAAG,sBAAsB,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;QAE5E,2BAA2B;QAC3B,MAAM,iBAAiB,GAAG,sBAAsB,CAC9C,iBAAiB,EACjB,QAAQ,EACR,MAAM,CAAC,iBAAiB,CACzB,CAAC;QAEF,mEAAmE;QACnE,MAAM,iBAAiB,GAA+B,EAAE,GAAG,WAAW,EAAE,CAAC;QACzE,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,iBAAiB,EAAE,CAAC;YAC3C,IAAI,IAAI,IAAI,iBAAiB,EAAE,CAAC;gBAC9B,MAAM,MAAM,GAAG,MAAM,CAAC,iBAAiB,EAAE,cAAc,IAAI,MAAM,CAAC;gBAClE,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;oBACvB,MAAM,IAAI,KAAK,CACb,sBAAsB,IAAI,+DAA+D,CAC1F,CAAC;gBACJ,CAAC;qBAAM,IAAI,MAAM,KAAK,iBAAiB,EAAE,CAAC;oBACxC,SAAS,CAAC,4BAA4B;gBACxC,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,IAAI,CACV,+BAA+B,IAAI,sCAAsC,QAAQ,EAAE,CACpF,CAAC;gBACJ,CAAC;YACH,CAAC;YACD,iBAAiB,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;QAC/B,CAAC;QAED,gBAAgB;QAChB,MAAM,OAAO,GAAG,YAAY,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;QAExD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,iBAAiB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3D,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,iBAAiB;QACjB,MAAM,cAAc,GAAG,oBAAoB,EAAE,CAAC;QAE9C,kDAAkD;QAClD,IAAI,gBAAgB,GAAG,WAAW,CAAC;QACnC,MAAM,aAAa,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC;QAE/E,KAAK,MAAM,MAAM,IAAI,aAAa,EAAE,CAAC;YACnC,YAAY;YACZ,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;YAE1C,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,OAAO,CAAC,IAAI,CAAC,2BAA2B,MAAM,CAAC,YAAY,QAAQ,QAAQ,EAAE,CAAC,CAAC;gBAC/E,SAAS;YACX,CAAC;YAED,6DAA6D;YAC7D,MAAM,cAAc,GAAG,0BAA0B,CAC/C,MAAM,CAAC,MAAM,EACb,WAAW,EACX,iBAAiB,CAClB,CAAC;YAEF,iBAAiB;YACjB,MAAM,GAAG,GAAiB;gBACxB,MAAM,EAAE,cAAc;gBACtB,WAAW;gBACX,WAAW,EAAE,iBAAiB;gBAC9B,QAAQ,EAAE,cAAc;gBACxB,QAAQ;aACT,CAAC;YAEF,gBAAgB;YAChB,MAAM,WAAW,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAE5C,kBAAkB;YAClB,MAAM,UAAU,GACd,MAAM,CAAC,eAAe;gBACtB,IAAI;gBACJ,WAAW,CAAC,OAAO;gBACnB,IAAI;gBACJ,MAAM,CAAC,aAAa,CAAC;YAEvB,gBAAgB;gBACd,gBAAgB,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;oBAC5C,UAAU;oBACV,gBAAgB,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAE1C,MAAM,CAAC,cAAc,EAAE,CAAC;QAC1B,CAAC;QAED,sBAAsB;QACtB,MAAM,YAAY,GAAG,cAAc,GAAG,gBAAgB,CAAC;QAEvD,mBAAmB;QACnB,IAAI,YAAY,KAAK,OAAO,EAAE,CAAC;YAC7B,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;YAEtB,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,gBAAgB;gBAChB,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,WAAW,IAAI,IAAI,CAAC;gBACtD,MAAM,aAAa,GACjB,UAAU,KAAK,MAAM;oBACnB,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC;oBACrC,CAAC,CAAC,YAAY,CAAC;gBAEnB,MAAM,SAAS,CAAC,QAAQ,EAAE,aAAa,EAAE;oBACvC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,IAAI,OAAO;iBAC7C,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,6BAA6B;QAC7B,KAAK,MAAM,EAAE,IAAI,iBAAiB,CAAC,MAAM,EAAE,EAAE,CAAC;YAC5C,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC;QACnB,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC;QACvB,MAAM,CAAC,KAAK,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IAC3E,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,cAAc,CAC3B,YAA0B;IAE1B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE;QAC7C,MAAM,EAAE,YAAY,CAAC,OAAO,IAAI,EAAE;QAClC,KAAK,EAAE,IAAI;KACZ,CAAC,CAAC;IAEH,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,KAAK,CACzB,MAAsB,EACtB,MAAuC,EACvC,WAAuC,EACvC,UAII,EAAE;IAEN,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,MAAM,OAAO,GAAoB,EAAE,CAAC;IAEpC,KAAK,MAAM,YAAY,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QAC1C,mBAAmB;QACnB,IAAI,KAAe,CAAC;QAEpB,IAAI,OAAO,CAAC,aAAa,IAAI,OAAO,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9D,mCAAmC;YACnC,KAAK,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CACzC,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CACxD,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,KAAK,GAAG,MAAM,cAAc,CAAC,YAAY,CAAC,CAAC;QAC7C,CAAC;QAED,oBAAoB;QACpB,KAAK,MAAM,QAAQ,IAAI,KAAK,EAAE,CAAC;YAC7B,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;gBACpB,OAAO,CAAC,GAAG,CAAC,eAAe,QAAQ,EAAE,CAAC,CAAC;YACzC,CAAC;YAED,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;gBAChE,MAAM,MAAM,GAAG,MAAM,WAAW,CAC9B,QAAQ,EACR,OAAO,EACP,YAAY,EACZ,MAAM,EACN,WAAW,EACX,MAAM,EACN,OAAO,CAAC,MAAM,CACf,CAAC;gBAEF,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAErB,IAAI,OAAO,CAAC,OAAO,IAAI,MAAM,CAAC,cAAc,GAAG,CAAC,EAAE,CAAC;oBACjD,OAAO,CAAC,GAAG,CACT,aAAa,MAAM,CAAC,cAAc,aAAa,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,eAAe,EAAE,CACjG,CAAC;gBACJ,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,IAAI,CAAC;oBACX,QAAQ;oBACR,OAAO,EAAE,KAAK;oBACd,cAAc,EAAE,CAAC;oBACjB,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;iBACjE,CAAC,CAAC;gBAEH,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;oBACpB,OAAO,CAAC,KAAK,CAAC,YAAY,KAAK,EAAE,CAAC,CAAC;gBACrC,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;IAExC,OAAO;QACL,UAAU,EAAE,OAAO,CAAC,MAAM;QAC1B,YAAY,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM;QACrD,WAAW,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM;QACrD,mBAAmB,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QAC1E,OAAO;QACP,QAAQ;KACT,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CSV Datasource
|
|
3
|
+
*/
|
|
4
|
+
import type { Datasource, DatasourceConfig, QueryResult } from '../types/index.js';
|
|
5
|
+
export declare class CsvDatasource implements Datasource {
|
|
6
|
+
readonly type = "csv";
|
|
7
|
+
private data;
|
|
8
|
+
private filePath;
|
|
9
|
+
private encoding;
|
|
10
|
+
constructor(config: DatasourceConfig);
|
|
11
|
+
private loadData;
|
|
12
|
+
query(sql: string, params?: unknown[]): Promise<QueryResult>;
|
|
13
|
+
getAll(): Promise<QueryResult>;
|
|
14
|
+
close(): Promise<void>;
|
|
15
|
+
}
|
|
16
|
+
export declare function createCsvDatasource(config: DatasourceConfig): CsvDatasource;
|
|
17
|
+
//# sourceMappingURL=csv.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"csv.d.ts","sourceRoot":"","sources":["../../src/datasources/csv.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEnF,qBAAa,aAAc,YAAW,UAAU;IAC9C,QAAQ,CAAC,IAAI,SAAS;IACtB,OAAO,CAAC,IAAI,CAA4B;IACxC,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,QAAQ,CAAiB;gBAErB,MAAM,EAAE,gBAAgB;YAStB,QAAQ;IAgBhB,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,GAAE,OAAO,EAAO,GAAG,OAAO,CAAC,WAAW,CAAC;IAgBhE,MAAM,IAAI,OAAO,CAAC,WAAW,CAAC;IAI9B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAG7B;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,gBAAgB,GAAG,aAAa,CAE3E"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CSV Datasource
|
|
3
|
+
*/
|
|
4
|
+
import { readFile } from 'node:fs/promises';
|
|
5
|
+
import { parse } from 'csv-parse/sync';
|
|
6
|
+
export class CsvDatasource {
|
|
7
|
+
type = 'csv';
|
|
8
|
+
data = null;
|
|
9
|
+
filePath;
|
|
10
|
+
encoding;
|
|
11
|
+
constructor(config) {
|
|
12
|
+
if (!config.path) {
|
|
13
|
+
throw new Error('CSV datasource requires "path" configuration');
|
|
14
|
+
}
|
|
15
|
+
this.filePath = config.path;
|
|
16
|
+
this.encoding = config.encoding ?? 'utf-8';
|
|
17
|
+
}
|
|
18
|
+
async loadData() {
|
|
19
|
+
if (this.data !== null) {
|
|
20
|
+
return this.data;
|
|
21
|
+
}
|
|
22
|
+
const content = await readFile(this.filePath, { encoding: this.encoding });
|
|
23
|
+
const records = parse(content, {
|
|
24
|
+
columns: true,
|
|
25
|
+
skip_empty_lines: true,
|
|
26
|
+
trim: true,
|
|
27
|
+
});
|
|
28
|
+
this.data = records;
|
|
29
|
+
return this.data;
|
|
30
|
+
}
|
|
31
|
+
async query(sql, params = []) {
|
|
32
|
+
// CSV does not support SQL queries (simple filtering only)
|
|
33
|
+
// Simple implementation that parses WHERE clause
|
|
34
|
+
const data = await this.loadData();
|
|
35
|
+
// Only supports simple WHERE column = value
|
|
36
|
+
const whereMatch = sql.match(/WHERE\s+(\w+)\s*=\s*\?/i);
|
|
37
|
+
if (whereMatch && params.length > 0) {
|
|
38
|
+
const column = whereMatch[1];
|
|
39
|
+
const value = params[0];
|
|
40
|
+
return data.filter((row) => String(row[column ?? '']) === String(value));
|
|
41
|
+
}
|
|
42
|
+
return data;
|
|
43
|
+
}
|
|
44
|
+
async getAll() {
|
|
45
|
+
return this.loadData();
|
|
46
|
+
}
|
|
47
|
+
async close() {
|
|
48
|
+
this.data = null;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
export function createCsvDatasource(config) {
|
|
52
|
+
return new CsvDatasource(config);
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=csv.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"csv.js","sourceRoot":"","sources":["../../src/datasources/csv.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAGvC,MAAM,OAAO,aAAa;IACf,IAAI,GAAG,KAAK,CAAC;IACd,IAAI,GAAuB,IAAI,CAAC;IAChC,QAAQ,CAAS;IACjB,QAAQ,CAAiB;IAEjC,YAAY,MAAwB;QAClC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;QAClE,CAAC;QAED,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC;QAC5B,IAAI,CAAC,QAAQ,GAAI,MAAM,CAAC,QAA2B,IAAI,OAAO,CAAC;IACjE,CAAC;IAEO,KAAK,CAAC,QAAQ;QACpB,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;YACvB,OAAO,IAAI,CAAC,IAAI,CAAC;QACnB,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC3E,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,EAAE;YAC7B,OAAO,EAAE,IAAI;YACb,gBAAgB,EAAE,IAAI;YACtB,IAAI,EAAE,IAAI;SACX,CAAC,CAAC;QAEH,IAAI,CAAC,IAAI,GAAG,OAAsB,CAAC;QACnC,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,GAAW,EAAE,SAAoB,EAAE;QAC7C,2DAA2D;QAC3D,iDAAiD;QACjD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;QAEnC,4CAA4C;QAC5C,MAAM,UAAU,GAAG,GAAG,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;QACxD,IAAI,UAAU,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpC,MAAM,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;YAC7B,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YACxB,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,KAAK,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAC3E,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,MAAM;QACV,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AAED,MAAM,UAAU,mBAAmB,CAAC,MAAwB;IAC1D,OAAO,IAAI,aAAa,CAAC,MAAM,CAAC,CAAC;AACnC,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Glob Datasource
|
|
3
|
+
* Get file list from filesystem
|
|
4
|
+
*/
|
|
5
|
+
import type { Datasource, DatasourceConfig, QueryResult } from '../types/index.js';
|
|
6
|
+
export declare class GlobDatasource implements Datasource {
|
|
7
|
+
readonly type = "glob";
|
|
8
|
+
private data;
|
|
9
|
+
private pattern;
|
|
10
|
+
constructor(config: DatasourceConfig);
|
|
11
|
+
private loadData;
|
|
12
|
+
query(sql: string, params?: unknown[]): Promise<QueryResult>;
|
|
13
|
+
getAll(): Promise<QueryResult>;
|
|
14
|
+
close(): Promise<void>;
|
|
15
|
+
}
|
|
16
|
+
export declare function createGlobDatasource(config: DatasourceConfig): GlobDatasource;
|
|
17
|
+
//# sourceMappingURL=glob.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"glob.d.ts","sourceRoot":"","sources":["../../src/datasources/glob.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAYnF,qBAAa,cAAe,YAAW,UAAU;IAC/C,QAAQ,CAAC,IAAI,UAAU;IACvB,OAAO,CAAC,IAAI,CAA4B;IACxC,OAAO,CAAC,OAAO,CAAS;gBAEZ,MAAM,EAAE,gBAAgB;YAQtB,QAAQ;IAgChB,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,GAAE,OAAO,EAAO,GAAG,OAAO,CAAC,WAAW,CAAC;IAmBhE,MAAM,IAAI,OAAO,CAAC,WAAW,CAAC;IAI9B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAG7B;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,gBAAgB,GAAG,cAAc,CAE7E"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Glob Datasource
|
|
3
|
+
* Get file list from filesystem
|
|
4
|
+
*/
|
|
5
|
+
import { stat } from 'node:fs/promises';
|
|
6
|
+
import { basename, dirname, extname } from 'node:path';
|
|
7
|
+
import { glob as globFn } from 'glob';
|
|
8
|
+
export class GlobDatasource {
|
|
9
|
+
type = 'glob';
|
|
10
|
+
data = null;
|
|
11
|
+
pattern;
|
|
12
|
+
constructor(config) {
|
|
13
|
+
if (!config.pattern) {
|
|
14
|
+
throw new Error('Glob datasource requires "pattern" configuration');
|
|
15
|
+
}
|
|
16
|
+
this.pattern = config.pattern;
|
|
17
|
+
}
|
|
18
|
+
async loadData() {
|
|
19
|
+
if (this.data !== null) {
|
|
20
|
+
return this.data;
|
|
21
|
+
}
|
|
22
|
+
const files = await globFn(this.pattern, { nodir: true });
|
|
23
|
+
const fileInfos = [];
|
|
24
|
+
for (const filePath of files) {
|
|
25
|
+
try {
|
|
26
|
+
const stats = await stat(filePath);
|
|
27
|
+
const ext = extname(filePath);
|
|
28
|
+
fileInfos.push({
|
|
29
|
+
path: filePath,
|
|
30
|
+
name: basename(filePath),
|
|
31
|
+
basename: basename(filePath, ext),
|
|
32
|
+
ext: ext.slice(1), // Remove leading dot
|
|
33
|
+
dir: dirname(filePath),
|
|
34
|
+
size: stats.size,
|
|
35
|
+
mtime: stats.mtime.toISOString(),
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
// Skip files that cannot be read
|
|
40
|
+
continue;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
this.data = fileInfos;
|
|
44
|
+
return this.data;
|
|
45
|
+
}
|
|
46
|
+
async query(sql, params = []) {
|
|
47
|
+
// Glob does not support SQL queries
|
|
48
|
+
// Simple filtering only
|
|
49
|
+
const data = await this.loadData();
|
|
50
|
+
// Only supports simple WHERE column = value
|
|
51
|
+
const whereMatch = sql.match(/WHERE\s+(\w+)\s*=\s*\?/i);
|
|
52
|
+
if (whereMatch && params.length > 0) {
|
|
53
|
+
const column = whereMatch[1];
|
|
54
|
+
const value = params[0];
|
|
55
|
+
return data.filter((row) => {
|
|
56
|
+
const rowValue = row[column ?? ''];
|
|
57
|
+
return rowValue === value || String(rowValue) === String(value);
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
return data;
|
|
61
|
+
}
|
|
62
|
+
async getAll() {
|
|
63
|
+
return this.loadData();
|
|
64
|
+
}
|
|
65
|
+
async close() {
|
|
66
|
+
this.data = null;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
export function createGlobDatasource(config) {
|
|
70
|
+
return new GlobDatasource(config);
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=glob.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"glob.js","sourceRoot":"","sources":["../../src/datasources/glob.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Datasource Factory
|
|
3
|
+
*/
|
|
4
|
+
import type { Datasource, DatasourceConfig, EmbedifyConfig } from '../types/index.js';
|
|
5
|
+
export { SqliteDatasource, createSqliteDatasource } from './sqlite.js';
|
|
6
|
+
export { CsvDatasource, createCsvDatasource } from './csv.js';
|
|
7
|
+
export { JsonDatasource, createJsonDatasource } from './json.js';
|
|
8
|
+
export { YamlDatasource, createYamlDatasource } from './yaml.js';
|
|
9
|
+
export { GlobDatasource, createGlobDatasource } from './glob.js';
|
|
10
|
+
/**
|
|
11
|
+
* Create a datasource
|
|
12
|
+
*/
|
|
13
|
+
export declare function createDatasource(config: DatasourceConfig): Datasource;
|
|
14
|
+
/**
|
|
15
|
+
* Initialize all datasources from config
|
|
16
|
+
*/
|
|
17
|
+
export declare function initializeDatasources(config: EmbedifyConfig): Record<string, Datasource>;
|
|
18
|
+
/**
|
|
19
|
+
* Close all datasources
|
|
20
|
+
*/
|
|
21
|
+
export declare function closeDatasources(datasources: Record<string, Datasource>): Promise<void>;
|
|
22
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/datasources/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAOtF,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AAEjE;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,GAAG,UAAU,CAerE;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,cAAc,GACrB,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAU5B;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,GACtC,OAAO,CAAC,IAAI,CAAC,CAIf"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Datasource Factory
|
|
3
|
+
*/
|
|
4
|
+
import { createSqliteDatasource } from './sqlite.js';
|
|
5
|
+
import { createCsvDatasource } from './csv.js';
|
|
6
|
+
import { createJsonDatasource } from './json.js';
|
|
7
|
+
import { createYamlDatasource } from './yaml.js';
|
|
8
|
+
import { createGlobDatasource } from './glob.js';
|
|
9
|
+
export { SqliteDatasource, createSqliteDatasource } from './sqlite.js';
|
|
10
|
+
export { CsvDatasource, createCsvDatasource } from './csv.js';
|
|
11
|
+
export { JsonDatasource, createJsonDatasource } from './json.js';
|
|
12
|
+
export { YamlDatasource, createYamlDatasource } from './yaml.js';
|
|
13
|
+
export { GlobDatasource, createGlobDatasource } from './glob.js';
|
|
14
|
+
/**
|
|
15
|
+
* Create a datasource
|
|
16
|
+
*/
|
|
17
|
+
export function createDatasource(config) {
|
|
18
|
+
switch (config.type) {
|
|
19
|
+
case 'sqlite':
|
|
20
|
+
return createSqliteDatasource(config);
|
|
21
|
+
case 'csv':
|
|
22
|
+
return createCsvDatasource(config);
|
|
23
|
+
case 'json':
|
|
24
|
+
return createJsonDatasource(config);
|
|
25
|
+
case 'yaml':
|
|
26
|
+
return createYamlDatasource(config);
|
|
27
|
+
case 'glob':
|
|
28
|
+
return createGlobDatasource(config);
|
|
29
|
+
default:
|
|
30
|
+
throw new Error(`Unknown datasource type: ${config.type}`);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Initialize all datasources from config
|
|
35
|
+
*/
|
|
36
|
+
export function initializeDatasources(config) {
|
|
37
|
+
const datasources = {};
|
|
38
|
+
if (config.datasources) {
|
|
39
|
+
for (const [name, dsConfig] of Object.entries(config.datasources)) {
|
|
40
|
+
datasources[name] = createDatasource(dsConfig);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return datasources;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Close all datasources
|
|
47
|
+
*/
|
|
48
|
+
export async function closeDatasources(datasources) {
|
|
49
|
+
for (const ds of Object.values(datasources)) {
|
|
50
|
+
await ds.close();
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/datasources/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AAEjD,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AAEjE;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAwB;IACvD,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,KAAK,QAAQ;YACX,OAAO,sBAAsB,CAAC,MAAM,CAAC,CAAC;QACxC,KAAK,KAAK;YACR,OAAO,mBAAmB,CAAC,MAAM,CAAC,CAAC;QACrC,KAAK,MAAM;YACT,OAAO,oBAAoB,CAAC,MAAM,CAAC,CAAC;QACtC,KAAK,MAAM;YACT,OAAO,oBAAoB,CAAC,MAAM,CAAC,CAAC;QACtC,KAAK,MAAM;YACT,OAAO,oBAAoB,CAAC,MAAM,CAAC,CAAC;QACtC;YACE,MAAM,IAAI,KAAK,CAAC,4BAA6B,MAA2B,CAAC,IAAI,EAAE,CAAC,CAAC;IACrF,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CACnC,MAAsB;IAEtB,MAAM,WAAW,GAA+B,EAAE,CAAC;IAEnD,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;QACvB,KAAK,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC;YAClE,WAAW,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,WAAuC;IAEvC,KAAK,MAAM,EAAE,IAAI,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC;QAC5C,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC;IACnB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* JSON Datasource
|
|
3
|
+
*/
|
|
4
|
+
import type { Datasource, DatasourceConfig, QueryResult } from '../types/index.js';
|
|
5
|
+
export declare class JsonDatasource implements Datasource {
|
|
6
|
+
readonly type = "json";
|
|
7
|
+
private data;
|
|
8
|
+
private filePath;
|
|
9
|
+
constructor(config: DatasourceConfig);
|
|
10
|
+
private loadData;
|
|
11
|
+
query(sql: string, params?: unknown[]): Promise<QueryResult>;
|
|
12
|
+
getAll(): Promise<QueryResult>;
|
|
13
|
+
close(): Promise<void>;
|
|
14
|
+
}
|
|
15
|
+
export declare function createJsonDatasource(config: DatasourceConfig): JsonDatasource;
|
|
16
|
+
//# sourceMappingURL=json.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json.d.ts","sourceRoot":"","sources":["../../src/datasources/json.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEnF,qBAAa,cAAe,YAAW,UAAU;IAC/C,QAAQ,CAAC,IAAI,UAAU;IACvB,OAAO,CAAC,IAAI,CAA4B;IACxC,OAAO,CAAC,QAAQ,CAAS;gBAEb,MAAM,EAAE,gBAAgB;YAQtB,QAAQ;IAoBhB,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,GAAE,OAAO,EAAO,GAAG,OAAO,CAAC,WAAW,CAAC;IAmBhE,MAAM,IAAI,OAAO,CAAC,WAAW,CAAC;IAI9B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAG7B;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,gBAAgB,GAAG,cAAc,CAE7E"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* JSON Datasource
|
|
3
|
+
*/
|
|
4
|
+
import { readFile } from 'node:fs/promises';
|
|
5
|
+
export class JsonDatasource {
|
|
6
|
+
type = 'json';
|
|
7
|
+
data = null;
|
|
8
|
+
filePath;
|
|
9
|
+
constructor(config) {
|
|
10
|
+
if (!config.path) {
|
|
11
|
+
throw new Error('JSON datasource requires "path" configuration');
|
|
12
|
+
}
|
|
13
|
+
this.filePath = config.path;
|
|
14
|
+
}
|
|
15
|
+
async loadData() {
|
|
16
|
+
if (this.data !== null) {
|
|
17
|
+
return this.data;
|
|
18
|
+
}
|
|
19
|
+
const content = await readFile(this.filePath, { encoding: 'utf-8' });
|
|
20
|
+
const parsed = JSON.parse(content);
|
|
21
|
+
// Use as-is if array, wrap in array if object
|
|
22
|
+
if (Array.isArray(parsed)) {
|
|
23
|
+
this.data = parsed;
|
|
24
|
+
}
|
|
25
|
+
else if (typeof parsed === 'object' && parsed !== null) {
|
|
26
|
+
this.data = [parsed];
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
throw new Error('JSON file must contain an array or object');
|
|
30
|
+
}
|
|
31
|
+
return this.data;
|
|
32
|
+
}
|
|
33
|
+
async query(sql, params = []) {
|
|
34
|
+
// JSON does not support SQL queries
|
|
35
|
+
// Simple filtering only
|
|
36
|
+
const data = await this.loadData();
|
|
37
|
+
// Only supports simple WHERE column = value
|
|
38
|
+
const whereMatch = sql.match(/WHERE\s+(\w+)\s*=\s*\?/i);
|
|
39
|
+
if (whereMatch && params.length > 0) {
|
|
40
|
+
const column = whereMatch[1];
|
|
41
|
+
const value = params[0];
|
|
42
|
+
return data.filter((row) => {
|
|
43
|
+
const rowValue = row[column ?? ''];
|
|
44
|
+
return rowValue === value || String(rowValue) === String(value);
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
return data;
|
|
48
|
+
}
|
|
49
|
+
async getAll() {
|
|
50
|
+
return this.loadData();
|
|
51
|
+
}
|
|
52
|
+
async close() {
|
|
53
|
+
this.data = null;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
export function createJsonDatasource(config) {
|
|
57
|
+
return new JsonDatasource(config);
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=json.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json.js","sourceRoot":"","sources":["../../src/datasources/json.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAG5C,MAAM,OAAO,cAAc;IAChB,IAAI,GAAG,MAAM,CAAC;IACf,IAAI,GAAuB,IAAI,CAAC;IAChC,QAAQ,CAAS;IAEzB,YAAY,MAAwB;QAClC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;QACnE,CAAC;QAED,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC;IAC9B,CAAC;IAEO,KAAK,CAAC,QAAQ;QACpB,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;YACvB,OAAO,IAAI,CAAC,IAAI,CAAC;QACnB,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;QACrE,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAY,CAAC;QAE9C,8CAA8C;QAC9C,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAC1B,IAAI,CAAC,IAAI,GAAG,MAAqB,CAAC;QACpC,CAAC;aAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;YACzD,IAAI,CAAC,IAAI,GAAG,CAAC,MAAiC,CAAC,CAAC;QAClD,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;QAC/D,CAAC;QAED,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,GAAW,EAAE,SAAoB,EAAE;QAC7C,oCAAoC;QACpC,wBAAwB;QACxB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;QAEnC,4CAA4C;QAC5C,MAAM,UAAU,GAAG,GAAG,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;QACxD,IAAI,UAAU,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpC,MAAM,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;YAC7B,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YACxB,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE;gBACzB,MAAM,QAAQ,GAAG,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;gBACnC,OAAO,QAAQ,KAAK,KAAK,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,MAAM,CAAC,KAAK,CAAC,CAAC;YAClE,CAAC,CAAC,CAAC;QACL,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,MAAM;QACV,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AAED,MAAM,UAAU,oBAAoB,CAAC,MAAwB;IAC3D,OAAO,IAAI,cAAc,CAAC,MAAM,CAAC,CAAC;AACpC,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SQLite Datasource
|
|
3
|
+
*/
|
|
4
|
+
import type { Datasource, DatasourceConfig, QueryResult } from '../types/index.js';
|
|
5
|
+
export declare class SqliteDatasource implements Datasource {
|
|
6
|
+
readonly type = "sqlite";
|
|
7
|
+
private db;
|
|
8
|
+
private queryString?;
|
|
9
|
+
constructor(config: DatasourceConfig);
|
|
10
|
+
query(sql: string, params?: unknown[]): Promise<QueryResult>;
|
|
11
|
+
getAll(): Promise<QueryResult>;
|
|
12
|
+
close(): Promise<void>;
|
|
13
|
+
}
|
|
14
|
+
export declare function createSqliteDatasource(config: DatasourceConfig): SqliteDatasource;
|
|
15
|
+
//# sourceMappingURL=sqlite.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../../src/datasources/sqlite.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEnF,qBAAa,gBAAiB,YAAW,UAAU;IACjD,QAAQ,CAAC,IAAI,YAAY;IACzB,OAAO,CAAC,EAAE,CAAoB;IAC9B,OAAO,CAAC,WAAW,CAAC,CAAS;gBAEjB,MAAM,EAAE,gBAAgB;IAS9B,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,GAAE,OAAO,EAAO,GAAG,OAAO,CAAC,WAAW,CAAC;IAWhE,MAAM,IAAI,OAAO,CAAC,WAAW,CAAC;IAO9B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAG7B;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,gBAAgB,GAAG,gBAAgB,CAEjF"}
|