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,346 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Inline Datasource
|
|
3
|
+
* Document-local datasources defined with @embedoc-data markers
|
|
4
|
+
*/
|
|
5
|
+
import yaml from 'js-yaml';
|
|
6
|
+
/**
|
|
7
|
+
* Default strip patterns for code fences
|
|
8
|
+
*/
|
|
9
|
+
const DEFAULT_STRIP_PATTERNS = [
|
|
10
|
+
'^```\\w*\\s*\\n?', // Opening fence: ``` or ```language
|
|
11
|
+
'\\n?```\\s*$', // Closing fence: ```
|
|
12
|
+
];
|
|
13
|
+
/**
|
|
14
|
+
* Default configuration
|
|
15
|
+
*/
|
|
16
|
+
const DEFAULT_CONFIG = {
|
|
17
|
+
enabled: true,
|
|
18
|
+
maxBytes: 10240, // 10KB
|
|
19
|
+
allowedFormats: ['yaml', 'json', 'csv', 'table', 'text'],
|
|
20
|
+
conflictPolicy: 'warn',
|
|
21
|
+
allowAnonymous: false,
|
|
22
|
+
stripCodeFences: true,
|
|
23
|
+
stripPatterns: DEFAULT_STRIP_PATTERNS,
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* Parse dot-path into segments
|
|
27
|
+
* "author.repos[0].name" → ["author", "repos", 0, "name"]
|
|
28
|
+
*/
|
|
29
|
+
export function parseDotPath(path) {
|
|
30
|
+
return path
|
|
31
|
+
.replace(/\[(\d+)\]/g, '.$1')
|
|
32
|
+
.split('.')
|
|
33
|
+
.filter((s) => s.length > 0)
|
|
34
|
+
.map((s) => (/^\d+$/.test(s) ? parseInt(s, 10) : s));
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Resolve dot-path on an object
|
|
38
|
+
*/
|
|
39
|
+
export function resolveDotPath(obj, path) {
|
|
40
|
+
const segments = parseDotPath(path);
|
|
41
|
+
let current = obj;
|
|
42
|
+
for (const segment of segments) {
|
|
43
|
+
if (current === null || current === undefined) {
|
|
44
|
+
return undefined;
|
|
45
|
+
}
|
|
46
|
+
if (typeof segment === 'number') {
|
|
47
|
+
current = current[segment];
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
current = current[segment];
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return current;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Set value at dot-path, creating intermediate objects as needed
|
|
57
|
+
*/
|
|
58
|
+
export function setDotPath(obj, path, value) {
|
|
59
|
+
const segments = parseDotPath(path);
|
|
60
|
+
if (segments.length === 0)
|
|
61
|
+
return;
|
|
62
|
+
let current = obj;
|
|
63
|
+
for (let i = 0; i < segments.length - 1; i++) {
|
|
64
|
+
const segment = segments[i];
|
|
65
|
+
const nextSegment = segments[i + 1];
|
|
66
|
+
if (typeof segment === 'number') {
|
|
67
|
+
throw new Error(`Array index in middle of path not supported: ${path}`);
|
|
68
|
+
}
|
|
69
|
+
if (!(segment in current)) {
|
|
70
|
+
// Create intermediate object or array based on next segment
|
|
71
|
+
current[segment] = typeof nextSegment === 'number' ? [] : {};
|
|
72
|
+
}
|
|
73
|
+
current = current[segment];
|
|
74
|
+
}
|
|
75
|
+
const lastSegment = segments[segments.length - 1];
|
|
76
|
+
if (typeof lastSegment === 'number') {
|
|
77
|
+
current[lastSegment] = value;
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
current[lastSegment] = value;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Get root name from dot-path
|
|
85
|
+
* "project.author.name" → "project"
|
|
86
|
+
*/
|
|
87
|
+
export function getRootName(path) {
|
|
88
|
+
const firstDot = path.indexOf('.');
|
|
89
|
+
return firstDot === -1 ? path : path.slice(0, firstDot);
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Strip patterns from content
|
|
93
|
+
* @param content - Content to process
|
|
94
|
+
* @param patterns - Array of regex pattern strings to strip
|
|
95
|
+
*/
|
|
96
|
+
function stripPatterns(content, patterns) {
|
|
97
|
+
let result = content.trim();
|
|
98
|
+
for (const pattern of patterns) {
|
|
99
|
+
const regex = new RegExp(pattern);
|
|
100
|
+
result = result.replace(regex, '');
|
|
101
|
+
}
|
|
102
|
+
return result.trim();
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Parse content based on format
|
|
106
|
+
* @param content - Raw content string
|
|
107
|
+
* @param format - Content format (yaml, json, csv, table, text)
|
|
108
|
+
* @param options - Processing options
|
|
109
|
+
*/
|
|
110
|
+
export function parseInlineContent(content, format, options = {}) {
|
|
111
|
+
const { stripCodeFences = true, stripPatterns: customPatterns } = options;
|
|
112
|
+
let processed = content;
|
|
113
|
+
// Strip patterns if enabled
|
|
114
|
+
if (stripCodeFences) {
|
|
115
|
+
const patterns = customPatterns ?? DEFAULT_STRIP_PATTERNS;
|
|
116
|
+
processed = stripPatterns(processed, patterns);
|
|
117
|
+
}
|
|
118
|
+
const trimmed = processed.trim();
|
|
119
|
+
switch (format) {
|
|
120
|
+
case 'yaml':
|
|
121
|
+
// Use JSON_SCHEMA for safe loading (no custom tags)
|
|
122
|
+
return yaml.load(trimmed, { schema: yaml.JSON_SCHEMA }) ?? {};
|
|
123
|
+
case 'json':
|
|
124
|
+
return trimmed ? JSON.parse(trimmed) : {};
|
|
125
|
+
case 'csv':
|
|
126
|
+
return parseCSV(trimmed);
|
|
127
|
+
case 'table':
|
|
128
|
+
return parseMarkdownTable(trimmed);
|
|
129
|
+
case 'text':
|
|
130
|
+
default:
|
|
131
|
+
return trimmed;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Parse CSV content
|
|
136
|
+
*/
|
|
137
|
+
function parseCSV(content) {
|
|
138
|
+
const lines = content.split('\n').filter((line) => line.trim().length > 0);
|
|
139
|
+
if (lines.length === 0)
|
|
140
|
+
return [];
|
|
141
|
+
const headerLine = lines[0];
|
|
142
|
+
if (!headerLine)
|
|
143
|
+
return [];
|
|
144
|
+
const headers = headerLine.split(',').map((h) => h.trim());
|
|
145
|
+
const rows = [];
|
|
146
|
+
for (let i = 1; i < lines.length; i++) {
|
|
147
|
+
const line = lines[i];
|
|
148
|
+
if (!line)
|
|
149
|
+
continue;
|
|
150
|
+
const values = line.split(',').map((v) => v.trim());
|
|
151
|
+
const row = {};
|
|
152
|
+
headers.forEach((header, idx) => {
|
|
153
|
+
row[header] = values[idx] ?? '';
|
|
154
|
+
});
|
|
155
|
+
rows.push(row);
|
|
156
|
+
}
|
|
157
|
+
return rows;
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Parse Markdown table content
|
|
161
|
+
*/
|
|
162
|
+
function parseMarkdownTable(content) {
|
|
163
|
+
const lines = content
|
|
164
|
+
.split('\n')
|
|
165
|
+
.map((line) => line.trim())
|
|
166
|
+
.filter((line) => line.length > 0 && !line.match(/^\|[-:| ]+\|$/));
|
|
167
|
+
if (lines.length === 0)
|
|
168
|
+
return [];
|
|
169
|
+
// Parse header
|
|
170
|
+
const headerLine = lines[0];
|
|
171
|
+
if (!headerLine)
|
|
172
|
+
return [];
|
|
173
|
+
const headers = headerLine
|
|
174
|
+
.split('|')
|
|
175
|
+
.map((h) => h.trim())
|
|
176
|
+
.filter((h) => h.length > 0);
|
|
177
|
+
// Parse rows
|
|
178
|
+
const rows = [];
|
|
179
|
+
for (let i = 1; i < lines.length; i++) {
|
|
180
|
+
const line = lines[i];
|
|
181
|
+
if (!line)
|
|
182
|
+
continue;
|
|
183
|
+
const allValues = line.split('|').map((v) => v.trim());
|
|
184
|
+
// Filter empty first/last from pipe-delimited
|
|
185
|
+
const cleanValues = line.startsWith('|')
|
|
186
|
+
? allValues.slice(1, -1)
|
|
187
|
+
: allValues;
|
|
188
|
+
const row = {};
|
|
189
|
+
headers.forEach((header, idx) => {
|
|
190
|
+
row[header] = cleanValues[idx] ?? '';
|
|
191
|
+
});
|
|
192
|
+
rows.push(row);
|
|
193
|
+
}
|
|
194
|
+
return rows;
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Inline Datasource class
|
|
198
|
+
*/
|
|
199
|
+
export class InlineDatasource {
|
|
200
|
+
type = 'inline';
|
|
201
|
+
format;
|
|
202
|
+
documentPath;
|
|
203
|
+
startLine;
|
|
204
|
+
endLine;
|
|
205
|
+
byteSize;
|
|
206
|
+
/** Internal data - exposed for variable resolution */
|
|
207
|
+
data;
|
|
208
|
+
_isObject;
|
|
209
|
+
constructor(data, format, documentPath, startLine, endLine, byteSize) {
|
|
210
|
+
this.data = data;
|
|
211
|
+
this.format = format;
|
|
212
|
+
this.documentPath = documentPath;
|
|
213
|
+
this.startLine = startLine;
|
|
214
|
+
this.endLine = endLine;
|
|
215
|
+
this.byteSize = byteSize;
|
|
216
|
+
this._isObject = !Array.isArray(data) && typeof data === 'object' && data !== null;
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Query is not fully supported for inline datasources
|
|
220
|
+
* Returns all data or filters by simple conditions
|
|
221
|
+
*/
|
|
222
|
+
async query(_sql, _params) {
|
|
223
|
+
// For inline datasources, query just returns all data as array
|
|
224
|
+
if (Array.isArray(this.data)) {
|
|
225
|
+
return this.data;
|
|
226
|
+
}
|
|
227
|
+
// Wrap object in array for compatibility
|
|
228
|
+
return [this.data];
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Get all data - returns array for Datasource interface compatibility
|
|
232
|
+
*/
|
|
233
|
+
async getAll() {
|
|
234
|
+
if (Array.isArray(this.data)) {
|
|
235
|
+
return this.data;
|
|
236
|
+
}
|
|
237
|
+
// Wrap object in array for compatibility
|
|
238
|
+
return [this.data];
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Get raw data (object or array)
|
|
242
|
+
*/
|
|
243
|
+
getRawData() {
|
|
244
|
+
return this.data;
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Get value at dot-path
|
|
248
|
+
*/
|
|
249
|
+
async get(path) {
|
|
250
|
+
return resolveDotPath(this.data, path);
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* Check if datasource is object type (vs array)
|
|
254
|
+
*/
|
|
255
|
+
isObjectType() {
|
|
256
|
+
return this._isObject;
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* Close (no-op for inline)
|
|
260
|
+
*/
|
|
261
|
+
async close() {
|
|
262
|
+
// No-op
|
|
263
|
+
}
|
|
264
|
+
/**
|
|
265
|
+
* Merge another value into this datasource at a path
|
|
266
|
+
*/
|
|
267
|
+
merge(path, value) {
|
|
268
|
+
if (!this._isObject) {
|
|
269
|
+
throw new Error('Cannot merge into array datasource');
|
|
270
|
+
}
|
|
271
|
+
setDotPath(this.data, path, value);
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* Build inline datasources from parsed markers
|
|
276
|
+
*/
|
|
277
|
+
export function buildInlineDatasources(parsedData, documentPath, config = {}) {
|
|
278
|
+
const mergedConfig = { ...DEFAULT_CONFIG, ...config };
|
|
279
|
+
const datasources = new Map();
|
|
280
|
+
// Content processing options
|
|
281
|
+
const contentOptions = {
|
|
282
|
+
stripCodeFences: mergedConfig.stripCodeFences,
|
|
283
|
+
stripPatterns: config.stripPatterns ?? DEFAULT_STRIP_PATTERNS,
|
|
284
|
+
};
|
|
285
|
+
// Group by root name
|
|
286
|
+
const byRoot = new Map();
|
|
287
|
+
for (const data of parsedData) {
|
|
288
|
+
// Validate size
|
|
289
|
+
if (data.byteSize > mergedConfig.maxBytes) {
|
|
290
|
+
throw new Error(`Inline datasource "${data.name}" exceeds max size (${data.byteSize} > ${mergedConfig.maxBytes} bytes)`);
|
|
291
|
+
}
|
|
292
|
+
// Validate format
|
|
293
|
+
if (!mergedConfig.allowedFormats.includes(data.format)) {
|
|
294
|
+
throw new Error(`Inline datasource "${data.name}" uses disallowed format "${data.format}"`);
|
|
295
|
+
}
|
|
296
|
+
const rootName = getRootName(data.name);
|
|
297
|
+
if (!byRoot.has(rootName)) {
|
|
298
|
+
byRoot.set(rootName, []);
|
|
299
|
+
}
|
|
300
|
+
byRoot.get(rootName).push(data);
|
|
301
|
+
}
|
|
302
|
+
// Process each root
|
|
303
|
+
for (const [rootName, items] of byRoot) {
|
|
304
|
+
// Check if there's a root-level definition (no dots)
|
|
305
|
+
const rootItem = items.find((item) => item.name === rootName);
|
|
306
|
+
let baseData;
|
|
307
|
+
let format = 'yaml';
|
|
308
|
+
let startLine = 0;
|
|
309
|
+
let endLine = 0;
|
|
310
|
+
let byteSize = 0;
|
|
311
|
+
if (rootItem) {
|
|
312
|
+
// Parse root-level data
|
|
313
|
+
baseData = parseInlineContent(rootItem.content, rootItem.format, contentOptions);
|
|
314
|
+
format = rootItem.format;
|
|
315
|
+
startLine = rootItem.startLine;
|
|
316
|
+
endLine = rootItem.endLine;
|
|
317
|
+
byteSize = rootItem.byteSize;
|
|
318
|
+
}
|
|
319
|
+
else {
|
|
320
|
+
// Create empty object for dot-path only definitions
|
|
321
|
+
baseData = {};
|
|
322
|
+
}
|
|
323
|
+
// Apply dot-path definitions
|
|
324
|
+
for (const item of items) {
|
|
325
|
+
if (item.name !== rootName && item.name.startsWith(rootName + '.')) {
|
|
326
|
+
const subPath = item.name.slice(rootName.length + 1);
|
|
327
|
+
const value = parseInlineContent(item.content, item.format, contentOptions);
|
|
328
|
+
if (typeof baseData !== 'object' || baseData === null) {
|
|
329
|
+
baseData = {};
|
|
330
|
+
}
|
|
331
|
+
setDotPath(baseData, subPath, value);
|
|
332
|
+
// Update metadata
|
|
333
|
+
if (startLine === 0 || item.startLine < startLine) {
|
|
334
|
+
startLine = item.startLine;
|
|
335
|
+
}
|
|
336
|
+
if (item.endLine > endLine) {
|
|
337
|
+
endLine = item.endLine;
|
|
338
|
+
}
|
|
339
|
+
byteSize += item.byteSize;
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
datasources.set(rootName, new InlineDatasource(baseData, format, documentPath, startLine, endLine, byteSize));
|
|
343
|
+
}
|
|
344
|
+
return datasources;
|
|
345
|
+
}
|
|
346
|
+
//# sourceMappingURL=inline-datasource.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inline-datasource.js","sourceRoot":"","sources":["../../src/core/inline-datasource.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,IAAI,MAAM,SAAS,CAAC;AAoC3B;;GAEG;AACH,MAAM,sBAAsB,GAAG;IAC7B,kBAAkB,EAAG,oCAAoC;IACzD,cAAc,EAAQ,qBAAqB;CAC5C,CAAC;AAEF;;GAEG;AACH,MAAM,cAAc,GAA0F;IAC5G,OAAO,EAAE,IAAI;IACb,QAAQ,EAAE,KAAK,EAAE,OAAO;IACxB,cAAc,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC;IACxD,cAAc,EAAE,MAAM;IACtB,cAAc,EAAE,KAAK;IACrB,eAAe,EAAE,IAAI;IACrB,aAAa,EAAE,sBAAsB;CACtC,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,OAAO,IAAI;SACR,OAAO,CAAC,YAAY,EAAE,KAAK,CAAC;SAC5B,KAAK,CAAC,GAAG,CAAC;SACV,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;SAC3B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACzD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,GAAY,EAAE,IAAY;IACvD,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IACpC,IAAI,OAAO,GAAG,GAAG,CAAC;IAElB,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC9C,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YAChC,OAAO,GAAI,OAAqB,CAAC,OAAO,CAAC,CAAC;QAC5C,CAAC;aAAM,CAAC;YACN,OAAO,GAAI,OAAmC,CAAC,OAAO,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CACxB,GAA4B,EAC5B,IAAY,EACZ,KAAc;IAEd,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IACpC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAElC,IAAI,OAAO,GAA4B,GAAG,CAAC;IAE3C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7C,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAE,CAAC;QAC7B,MAAM,WAAW,GAAG,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAEpC,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YAChC,MAAM,IAAI,KAAK,CAAC,gDAAgD,IAAI,EAAE,CAAC,CAAC;QAC1E,CAAC;QAED,IAAI,CAAC,CAAC,OAAO,IAAI,OAAO,CAAC,EAAE,CAAC;YAC1B,4DAA4D;YAC5D,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/D,CAAC;QAED,OAAO,GAAG,OAAO,CAAC,OAAO,CAA4B,CAAC;IACxD,CAAC;IAED,MAAM,WAAW,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC;IACnD,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE,CAAC;QACnC,OAAgC,CAAC,WAAW,CAAC,GAAG,KAAK,CAAC;IACzD,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,WAAW,CAAC,GAAG,KAAK,CAAC;IAC/B,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACnC,OAAO,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;AAC1D,CAAC;AAED;;;;GAIG;AACH,SAAS,aAAa,CAAC,OAAe,EAAE,QAAkB;IACxD,IAAI,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAE5B,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC;QAClC,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACrC,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;AACvB,CAAC;AAUD;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAChC,OAAe,EACf,MAAc,EACd,UAAoC,EAAE;IAEtC,MAAM,EACJ,eAAe,GAAG,IAAI,EACtB,aAAa,EAAE,cAAc,EAC9B,GAAG,OAAO,CAAC;IAEZ,IAAI,SAAS,GAAG,OAAO,CAAC;IAExB,4BAA4B;IAC5B,IAAI,eAAe,EAAE,CAAC;QACpB,MAAM,QAAQ,GAAG,cAAc,IAAI,sBAAsB,CAAC;QAC1D,SAAS,GAAG,aAAa,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IACjD,CAAC;IAED,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC;IAEjC,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,MAAM;YACT,oDAAoD;YACpD,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;QAEhE,KAAK,MAAM;YACT,OAAO,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAE5C,KAAK,KAAK;YACR,OAAO,QAAQ,CAAC,OAAO,CAAC,CAAC;QAE3B,KAAK,OAAO;YACV,OAAO,kBAAkB,CAAC,OAAO,CAAC,CAAC;QAErC,KAAK,MAAM,CAAC;QACZ;YACE,OAAO,OAAO,CAAC;IACnB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,QAAQ,CAAC,OAAe;IAC/B,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC3E,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAElC,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAC5B,IAAI,CAAC,UAAU;QAAE,OAAO,EAAE,CAAC;IAE3B,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAC3D,MAAM,IAAI,GAAgB,EAAE,CAAC;IAE7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,IAAI,CAAC,IAAI;YAAE,SAAS;QACpB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QACpD,MAAM,GAAG,GAA4B,EAAE,CAAC;QACxC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;YAC9B,GAAG,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QAClC,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACjB,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,SAAS,kBAAkB,CAAC,OAAe;IACzC,MAAM,KAAK,GAAG,OAAO;SAClB,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;SAC1B,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC;IAErE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAElC,eAAe;IACf,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAC5B,IAAI,CAAC,UAAU;QAAE,OAAO,EAAE,CAAC;IAE3B,MAAM,OAAO,GAAG,UAAU;SACvB,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SACpB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAE/B,aAAa;IACb,MAAM,IAAI,GAAgB,EAAE,CAAC;IAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,IAAI,CAAC,IAAI;YAAE,SAAS;QAEpB,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAEvD,8CAA8C;QAC9C,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YACtC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACxB,CAAC,CAAC,SAAS,CAAC;QAEd,MAAM,GAAG,GAA4B,EAAE,CAAC;QACxC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;YAC9B,GAAG,CAAC,MAAM,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QACvC,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACjB,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,OAAO,gBAAgB;IAClB,IAAI,GAAG,QAAQ,CAAC;IAChB,MAAM,CAAS;IACf,YAAY,CAAS;IACrB,SAAS,CAAS;IAClB,OAAO,CAAS;IAChB,QAAQ,CAAS;IAE1B,sDAAsD;IAC7C,IAAI,CAAU;IACf,SAAS,CAAU;IAE3B,YACE,IAAa,EACb,MAAc,EACd,YAAoB,EACpB,SAAiB,EACjB,OAAe,EACf,QAAgB;QAEhB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,SAAS,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,CAAC;IACrF,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,KAAK,CAAC,IAAY,EAAE,OAAmB;QAC3C,+DAA+D;QAC/D,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7B,OAAO,IAAI,CAAC,IAAmB,CAAC;QAClC,CAAC;QACD,yCAAyC;QACzC,OAAO,CAAC,IAAI,CAAC,IAA+B,CAAC,CAAC;IAChD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM;QACV,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7B,OAAO,IAAI,CAAC,IAAmB,CAAC;QAClC,CAAC;QACD,yCAAyC;QACzC,OAAO,CAAC,IAAI,CAAC,IAA+B,CAAC,CAAC;IAChD,CAAC;IAED;;OAEG;IACH,UAAU;QACR,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,GAAG,CAAC,IAAY;QACpB,OAAO,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACzC,CAAC;IAED;;OAEG;IACH,YAAY;QACV,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK;QACT,QAAQ;IACV,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,IAAY,EAAE,KAAc;QAChC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACxD,CAAC;QACD,UAAU,CAAC,IAAI,CAAC,IAA+B,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IAChE,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CACpC,UAA8B,EAC9B,YAAoB,EACpB,SAAiC,EAAE;IAEnC,MAAM,YAAY,GAAG,EAAE,GAAG,cAAc,EAAE,GAAG,MAAM,EAAE,CAAC;IACtD,MAAM,WAAW,GAAG,IAAI,GAAG,EAA4B,CAAC;IAExD,6BAA6B;IAC7B,MAAM,cAAc,GAA6B;QAC/C,eAAe,EAAE,YAAY,CAAC,eAAe;QAC7C,aAAa,EAAE,MAAM,CAAC,aAAa,IAAI,sBAAsB;KAC9D,CAAC;IAEF,qBAAqB;IACrB,MAAM,MAAM,GAAG,IAAI,GAAG,EAA8B,CAAC;IAErD,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC9B,gBAAgB;QAChB,IAAI,IAAI,CAAC,QAAQ,GAAG,YAAY,CAAC,QAAQ,EAAE,CAAC;YAC1C,MAAM,IAAI,KAAK,CACb,sBAAsB,IAAI,CAAC,IAAI,uBAAuB,IAAI,CAAC,QAAQ,MAAM,YAAY,CAAC,QAAQ,SAAS,CACxG,CAAC;QACJ,CAAC;QAED,kBAAkB;QAClB,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YACvD,MAAM,IAAI,KAAK,CACb,sBAAsB,IAAI,CAAC,IAAI,6BAA6B,IAAI,CAAC,MAAM,GAAG,CAC3E,CAAC;QACJ,CAAC;QAED,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1B,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QAC3B,CAAC;QACD,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;IAED,oBAAoB;IACpB,KAAK,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,MAAM,EAAE,CAAC;QACvC,qDAAqD;QACrD,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;QAE9D,IAAI,QAAiB,CAAC;QACtB,IAAI,MAAM,GAAG,MAAM,CAAC;QACpB,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,IAAI,QAAQ,GAAG,CAAC,CAAC;QAEjB,IAAI,QAAQ,EAAE,CAAC;YACb,wBAAwB;YACxB,QAAQ,GAAG,kBAAkB,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;YACjF,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;YACzB,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC;YAC/B,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;YAC3B,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC;QAC/B,CAAC;aAAM,CAAC;YACN,oDAAoD;YACpD,QAAQ,GAAG,EAAE,CAAC;QAChB,CAAC;QAED,6BAA6B;QAC7B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,GAAG,GAAG,CAAC,EAAE,CAAC;gBACnE,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBACrD,MAAM,KAAK,GAAG,kBAAkB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;gBAE5E,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;oBACtD,QAAQ,GAAG,EAAE,CAAC;gBAChB,CAAC;gBACD,UAAU,CAAC,QAAmC,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;gBAEhE,kBAAkB;gBAClB,IAAI,SAAS,KAAK,CAAC,IAAI,IAAI,CAAC,SAAS,GAAG,SAAS,EAAE,CAAC;oBAClD,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;gBAC7B,CAAC;gBACD,IAAI,IAAI,CAAC,OAAO,GAAG,OAAO,EAAE,CAAC;oBAC3B,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;gBACzB,CAAC;gBACD,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC;YAC5B,CAAC;QACH,CAAC;QAED,WAAW,CAAC,GAAG,CACb,QAAQ,EACR,IAAI,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,CAAC,CACnF,CAAC;IACJ,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Marker Parser
|
|
3
|
+
* Detects blocks enclosed by comment-style markers
|
|
4
|
+
*/
|
|
5
|
+
import type { CommentStyle, ParsedMarker, ParsedFrontmatter } from '../types/index.js';
|
|
6
|
+
import type { ParsedInlineData } from './inline-datasource.js';
|
|
7
|
+
/**
|
|
8
|
+
* Default comment style definitions
|
|
9
|
+
*/
|
|
10
|
+
export declare const DEFAULT_COMMENT_STYLES: Record<string, CommentStyle>;
|
|
11
|
+
/**
|
|
12
|
+
* Parse attribute string into object
|
|
13
|
+
* Example: 'id="users" schema="public"' -> { id: 'users', schema: 'public' }
|
|
14
|
+
*/
|
|
15
|
+
export declare function parseAttributes(attrString: string): Record<string, string>;
|
|
16
|
+
/**
|
|
17
|
+
* Resolve variable references in attribute values
|
|
18
|
+
* Example: ${doc_id} -> frontmatter.doc_id value
|
|
19
|
+
*/
|
|
20
|
+
export declare function resolveVariables(params: Record<string, string>, frontmatter: Record<string, unknown>): Record<string, string>;
|
|
21
|
+
/**
|
|
22
|
+
* Parse frontmatter from content
|
|
23
|
+
*/
|
|
24
|
+
export declare function parseFrontmatter(content: string): ParsedFrontmatter;
|
|
25
|
+
/**
|
|
26
|
+
* Parse all markers in a file
|
|
27
|
+
*/
|
|
28
|
+
export declare function parseMarkers(content: string, commentStyle: CommentStyle): ParsedMarker[];
|
|
29
|
+
/**
|
|
30
|
+
* Get CommentStyle object from style name
|
|
31
|
+
*/
|
|
32
|
+
export declare function getCommentStyle(styleName: string, customStyles?: Record<string, CommentStyle>): CommentStyle;
|
|
33
|
+
/**
|
|
34
|
+
* Guess default comment style from file extension
|
|
35
|
+
*/
|
|
36
|
+
export declare function guessCommentStyle(filePath: string): string;
|
|
37
|
+
/**
|
|
38
|
+
* Parse inline data markers (@embedoc-data)
|
|
39
|
+
*/
|
|
40
|
+
export declare function parseInlineDataMarkers(content: string, commentStyle: CommentStyle): ParsedInlineData[];
|
|
41
|
+
//# sourceMappingURL=parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/core/parser.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACvF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAG/D;;GAEG;AACH,eAAO,MAAM,sBAAsB,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAM/D,CAAC;AAEF;;;GAGG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAe1E;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC9B,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACnC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAwBxB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,iBAAiB,CAmBnE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,YAAY,GACzB,YAAY,EAAE,CAmEhB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,SAAS,EAAE,MAAM,EACjB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,GAC1C,YAAY,CASd;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CA6B1D;AASD;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,YAAY,GACzB,gBAAgB,EAAE,CAuEpB"}
|
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Marker Parser
|
|
3
|
+
* Detects blocks enclosed by comment-style markers
|
|
4
|
+
*/
|
|
5
|
+
import matter from 'gray-matter';
|
|
6
|
+
/**
|
|
7
|
+
* Default comment style definitions
|
|
8
|
+
*/
|
|
9
|
+
export const DEFAULT_COMMENT_STYLES = {
|
|
10
|
+
html: { start: '<!--', end: '-->' },
|
|
11
|
+
block: { start: '/*', end: '*/' },
|
|
12
|
+
line: { start: '//', end: '' },
|
|
13
|
+
hash: { start: '#', end: '' },
|
|
14
|
+
sql: { start: '--', end: '' },
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* Parse attribute string into object
|
|
18
|
+
* Example: 'id="users" schema="public"' -> { id: 'users', schema: 'public' }
|
|
19
|
+
*/
|
|
20
|
+
export function parseAttributes(attrString) {
|
|
21
|
+
const result = {};
|
|
22
|
+
// Match key="value" or key='value' patterns
|
|
23
|
+
const attrRegex = /(\w+)=["']([^"']*)["']/g;
|
|
24
|
+
let match;
|
|
25
|
+
while ((match = attrRegex.exec(attrString)) !== null) {
|
|
26
|
+
const key = match[1];
|
|
27
|
+
const value = match[2];
|
|
28
|
+
if (key && value !== undefined) {
|
|
29
|
+
result[key] = value;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return result;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Resolve variable references in attribute values
|
|
36
|
+
* Example: ${doc_id} -> frontmatter.doc_id value
|
|
37
|
+
*/
|
|
38
|
+
export function resolveVariables(params, frontmatter) {
|
|
39
|
+
const result = {};
|
|
40
|
+
for (const [key, value] of Object.entries(params)) {
|
|
41
|
+
result[key] = value.replace(/\$\{(\w+(?:\.\w+)*)\}/g, (_, path) => {
|
|
42
|
+
const parts = path.split('.');
|
|
43
|
+
let current = frontmatter;
|
|
44
|
+
for (const part of parts) {
|
|
45
|
+
if (current === null || current === undefined) {
|
|
46
|
+
return '';
|
|
47
|
+
}
|
|
48
|
+
if (typeof current === 'object') {
|
|
49
|
+
current = current[part];
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
return '';
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return current !== null && current !== undefined ? String(current) : '';
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
return result;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Parse frontmatter from content
|
|
62
|
+
*/
|
|
63
|
+
export function parseFrontmatter(content) {
|
|
64
|
+
const parsed = matter(content);
|
|
65
|
+
// Reconstruct frontmatter part (remove extra newlines)
|
|
66
|
+
let raw = '';
|
|
67
|
+
if (Object.keys(parsed.data).length > 0 && parsed.matter) {
|
|
68
|
+
// Trim extra newlines from matter
|
|
69
|
+
const cleanMatter = parsed.matter.trim();
|
|
70
|
+
raw = `---\n${cleanMatter}\n---\n`;
|
|
71
|
+
}
|
|
72
|
+
// Remove leading newlines from content
|
|
73
|
+
const cleanContent = parsed.content.replace(/^\n+/, '');
|
|
74
|
+
return {
|
|
75
|
+
data: parsed.data,
|
|
76
|
+
content: cleanContent,
|
|
77
|
+
raw,
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Parse all markers in a file
|
|
82
|
+
*/
|
|
83
|
+
export function parseMarkers(content, commentStyle) {
|
|
84
|
+
const markers = [];
|
|
85
|
+
const { start, end } = commentStyle;
|
|
86
|
+
const startEscaped = escapeRegExp(start);
|
|
87
|
+
const endEscaped = end ? escapeRegExp(end) : '';
|
|
88
|
+
// Start marker pattern
|
|
89
|
+
// {start}@embedoc:{template_name} {attributes}{end}
|
|
90
|
+
// For line comment style (empty end), match until newline
|
|
91
|
+
// Note: "end" is reserved for end marker, so exclude it (using negative lookahead)
|
|
92
|
+
let startPattern;
|
|
93
|
+
if (end) {
|
|
94
|
+
// Block comment style
|
|
95
|
+
startPattern = new RegExp(`${startEscaped}\\s*@embedoc:(?!end\\b)(\\w+)\\s*([^]*?)\\s*${endEscaped}`, 'g');
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
// Line comment style
|
|
99
|
+
startPattern = new RegExp(`${startEscaped}\\s*@embedoc:(?!end\\b)(\\w+)\\s*(.*)$`, 'gm');
|
|
100
|
+
}
|
|
101
|
+
// End marker pattern
|
|
102
|
+
let endPattern;
|
|
103
|
+
if (end) {
|
|
104
|
+
endPattern = new RegExp(`${startEscaped}\\s*@embedoc:end\\s*${endEscaped}`);
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
endPattern = new RegExp(`${startEscaped}\\s*@embedoc:end\\s*$`, 'm');
|
|
108
|
+
}
|
|
109
|
+
let match;
|
|
110
|
+
while ((match = startPattern.exec(content)) !== null) {
|
|
111
|
+
const startIndex = match.index;
|
|
112
|
+
const startMarkerLine = match[0];
|
|
113
|
+
const templateName = match[1];
|
|
114
|
+
const attrString = match[2]?.trim() ?? '';
|
|
115
|
+
// Search for end marker from after start marker
|
|
116
|
+
const afterStart = startIndex + startMarkerLine.length;
|
|
117
|
+
const remainingContent = content.slice(afterStart);
|
|
118
|
+
const endMatch = endPattern.exec(remainingContent);
|
|
119
|
+
if (endMatch) {
|
|
120
|
+
const endMarkerLine = endMatch[0];
|
|
121
|
+
const endIndex = afterStart + endMatch.index + endMarkerLine.length;
|
|
122
|
+
const existingContent = remainingContent.slice(0, endMatch.index);
|
|
123
|
+
if (templateName) {
|
|
124
|
+
markers.push({
|
|
125
|
+
startIndex,
|
|
126
|
+
endIndex,
|
|
127
|
+
templateName,
|
|
128
|
+
params: parseAttributes(attrString),
|
|
129
|
+
existingContent,
|
|
130
|
+
startMarkerLine,
|
|
131
|
+
endMarkerLine,
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
return markers;
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Get CommentStyle object from style name
|
|
140
|
+
*/
|
|
141
|
+
export function getCommentStyle(styleName, customStyles) {
|
|
142
|
+
const styles = { ...DEFAULT_COMMENT_STYLES, ...customStyles };
|
|
143
|
+
const style = styles[styleName];
|
|
144
|
+
if (!style) {
|
|
145
|
+
throw new Error(`Unknown comment style: ${styleName}`);
|
|
146
|
+
}
|
|
147
|
+
return style;
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Guess default comment style from file extension
|
|
151
|
+
*/
|
|
152
|
+
export function guessCommentStyle(filePath) {
|
|
153
|
+
const ext = filePath.split('.').pop()?.toLowerCase() ?? '';
|
|
154
|
+
const extToStyle = {
|
|
155
|
+
md: 'html',
|
|
156
|
+
html: 'html',
|
|
157
|
+
xml: 'html',
|
|
158
|
+
htm: 'html',
|
|
159
|
+
js: 'block',
|
|
160
|
+
ts: 'block',
|
|
161
|
+
jsx: 'block',
|
|
162
|
+
tsx: 'block',
|
|
163
|
+
css: 'block',
|
|
164
|
+
java: 'block',
|
|
165
|
+
c: 'block',
|
|
166
|
+
cpp: 'block',
|
|
167
|
+
h: 'block',
|
|
168
|
+
hpp: 'block',
|
|
169
|
+
go: 'line',
|
|
170
|
+
py: 'hash',
|
|
171
|
+
rb: 'hash',
|
|
172
|
+
sh: 'hash',
|
|
173
|
+
bash: 'hash',
|
|
174
|
+
yaml: 'hash',
|
|
175
|
+
yml: 'hash',
|
|
176
|
+
sql: 'sql',
|
|
177
|
+
};
|
|
178
|
+
return extToStyle[ext] ?? 'html';
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Calculate line number from content index
|
|
182
|
+
*/
|
|
183
|
+
function getLineNumber(content, index) {
|
|
184
|
+
return content.slice(0, index).split('\n').length;
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Parse inline data markers (@embedoc-data)
|
|
188
|
+
*/
|
|
189
|
+
export function parseInlineDataMarkers(content, commentStyle) {
|
|
190
|
+
const results = [];
|
|
191
|
+
const { start, end } = commentStyle;
|
|
192
|
+
const startEscaped = escapeRegExp(start);
|
|
193
|
+
const endEscaped = end ? escapeRegExp(end) : '';
|
|
194
|
+
// Pattern for @embedoc-data:name markers (excluding 'end')
|
|
195
|
+
// Supports: @embedoc-data:name or @embedoc-data:name format="yaml"
|
|
196
|
+
let startPattern;
|
|
197
|
+
let endPattern;
|
|
198
|
+
if (end) {
|
|
199
|
+
// Block comment style - capture attributes without newlines
|
|
200
|
+
// Use negative lookahead to exclude 'end' as a name
|
|
201
|
+
startPattern = new RegExp(`${startEscaped}\\s*@embedoc-data:(?!end\\s*${endEscaped})([\\w.]+)(?:\\s+([^\\n]*?))?\\s*${endEscaped}`, 'g');
|
|
202
|
+
endPattern = new RegExp(`${startEscaped}\\s*@embedoc-data:end\\s*${endEscaped}`);
|
|
203
|
+
}
|
|
204
|
+
else {
|
|
205
|
+
// Line comment style - exclude 'end' as a name
|
|
206
|
+
startPattern = new RegExp(`${startEscaped}\\s*@embedoc-data:(?!end\\s*$)([\\w.]+)(?:\\s+(.*))?$`, 'gm');
|
|
207
|
+
endPattern = new RegExp(`${startEscaped}\\s*@embedoc-data:end\\s*$`, 'm');
|
|
208
|
+
}
|
|
209
|
+
let match;
|
|
210
|
+
while ((match = startPattern.exec(content)) !== null) {
|
|
211
|
+
const startIndex = match.index;
|
|
212
|
+
const startMarkerLine = match[0];
|
|
213
|
+
const name = match[1];
|
|
214
|
+
const attrString = match[2]?.trim() ?? '';
|
|
215
|
+
// Skip if name is 'end' (shouldn't happen with negative lookahead, but be safe)
|
|
216
|
+
if (!name || name === 'end') {
|
|
217
|
+
continue;
|
|
218
|
+
}
|
|
219
|
+
// Parse format attribute
|
|
220
|
+
const attrs = parseAttributes(attrString);
|
|
221
|
+
const format = (attrs['format'] ?? 'yaml');
|
|
222
|
+
// Find end marker - search from after start marker
|
|
223
|
+
const afterStart = startIndex + startMarkerLine.length;
|
|
224
|
+
const remainingContent = content.slice(afterStart);
|
|
225
|
+
// Reset lastIndex for endPattern search
|
|
226
|
+
endPattern.lastIndex = 0;
|
|
227
|
+
const endMatch = endPattern.exec(remainingContent);
|
|
228
|
+
if (endMatch) {
|
|
229
|
+
const dataContent = remainingContent.slice(0, endMatch.index);
|
|
230
|
+
const startLine = getLineNumber(content, startIndex);
|
|
231
|
+
const endLine = getLineNumber(content, afterStart + endMatch.index + endMatch[0].length);
|
|
232
|
+
results.push({
|
|
233
|
+
name,
|
|
234
|
+
format,
|
|
235
|
+
content: dataContent,
|
|
236
|
+
startLine,
|
|
237
|
+
endLine,
|
|
238
|
+
byteSize: Buffer.byteLength(dataContent, 'utf-8'),
|
|
239
|
+
});
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
return results;
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* Escape special regex characters
|
|
246
|
+
*/
|
|
247
|
+
function escapeRegExp(str) {
|
|
248
|
+
return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
249
|
+
}
|
|
250
|
+
//# sourceMappingURL=parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/core/parser.ts"],"names":[],"mappings":"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"}
|