@rcrsr/rill 0.1.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 +187 -0
- package/dist/cli.d.ts +11 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +69 -0
- package/dist/cli.js.map +1 -0
- package/dist/demo.d.ts +6 -0
- package/dist/demo.d.ts.map +1 -0
- package/dist/demo.js +121 -0
- package/dist/demo.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -0
- package/dist/lexer/errors.d.ts +9 -0
- package/dist/lexer/errors.d.ts.map +1 -0
- package/dist/lexer/errors.js +12 -0
- package/dist/lexer/errors.js.map +1 -0
- package/dist/lexer/helpers.d.ts +14 -0
- package/dist/lexer/helpers.d.ts.map +1 -0
- package/dist/lexer/helpers.js +30 -0
- package/dist/lexer/helpers.js.map +1 -0
- package/dist/lexer/index.d.ts +8 -0
- package/dist/lexer/index.d.ts.map +1 -0
- package/dist/lexer/index.js +8 -0
- package/dist/lexer/index.js.map +1 -0
- package/dist/lexer/operators.d.ts +11 -0
- package/dist/lexer/operators.d.ts.map +1 -0
- package/dist/lexer/operators.js +58 -0
- package/dist/lexer/operators.js.map +1 -0
- package/dist/lexer/readers.d.ts +12 -0
- package/dist/lexer/readers.d.ts.map +1 -0
- package/dist/lexer/readers.js +144 -0
- package/dist/lexer/readers.js.map +1 -0
- package/dist/lexer/state.d.ts +18 -0
- package/dist/lexer/state.d.ts.map +1 -0
- package/dist/lexer/state.js +37 -0
- package/dist/lexer/state.js.map +1 -0
- package/dist/lexer/tokenizer.d.ts +9 -0
- package/dist/lexer/tokenizer.d.ts.map +1 -0
- package/dist/lexer/tokenizer.js +100 -0
- package/dist/lexer/tokenizer.js.map +1 -0
- package/dist/lexer.d.ts +19 -0
- package/dist/lexer.d.ts.map +1 -0
- package/dist/lexer.js +344 -0
- package/dist/lexer.js.map +1 -0
- package/dist/parser/arithmetic.d.ts +16 -0
- package/dist/parser/arithmetic.d.ts.map +1 -0
- package/dist/parser/arithmetic.js +128 -0
- package/dist/parser/arithmetic.js.map +1 -0
- package/dist/parser/boolean.d.ts +15 -0
- package/dist/parser/boolean.d.ts.map +1 -0
- package/dist/parser/boolean.js +20 -0
- package/dist/parser/boolean.js.map +1 -0
- package/dist/parser/control-flow.d.ts +56 -0
- package/dist/parser/control-flow.d.ts.map +1 -0
- package/dist/parser/control-flow.js +167 -0
- package/dist/parser/control-flow.js.map +1 -0
- package/dist/parser/expressions.d.ts +23 -0
- package/dist/parser/expressions.d.ts.map +1 -0
- package/dist/parser/expressions.js +950 -0
- package/dist/parser/expressions.js.map +1 -0
- package/dist/parser/extraction.d.ts +48 -0
- package/dist/parser/extraction.d.ts.map +1 -0
- package/dist/parser/extraction.js +279 -0
- package/dist/parser/extraction.js.map +1 -0
- package/dist/parser/functions.d.ts +20 -0
- package/dist/parser/functions.d.ts.map +1 -0
- package/dist/parser/functions.js +96 -0
- package/dist/parser/functions.js.map +1 -0
- package/dist/parser/helpers.d.ts +94 -0
- package/dist/parser/helpers.d.ts.map +1 -0
- package/dist/parser/helpers.js +225 -0
- package/dist/parser/helpers.js.map +1 -0
- package/dist/parser/index.d.ts +49 -0
- package/dist/parser/index.d.ts.map +1 -0
- package/dist/parser/index.js +73 -0
- package/dist/parser/index.js.map +1 -0
- package/dist/parser/literals.d.ts +37 -0
- package/dist/parser/literals.d.ts.map +1 -0
- package/dist/parser/literals.js +373 -0
- package/dist/parser/literals.js.map +1 -0
- package/dist/parser/parser-collect.d.ts +16 -0
- package/dist/parser/parser-collect.d.ts.map +1 -0
- package/dist/parser/parser-collect.js +125 -0
- package/dist/parser/parser-collect.js.map +1 -0
- package/dist/parser/parser-control.d.ts +20 -0
- package/dist/parser/parser-control.d.ts.map +1 -0
- package/dist/parser/parser-control.js +120 -0
- package/dist/parser/parser-control.js.map +1 -0
- package/dist/parser/parser-expr.d.ts +37 -0
- package/dist/parser/parser-expr.d.ts.map +1 -0
- package/dist/parser/parser-expr.js +639 -0
- package/dist/parser/parser-expr.js.map +1 -0
- package/dist/parser/parser-extract.d.ts +17 -0
- package/dist/parser/parser-extract.d.ts.map +1 -0
- package/dist/parser/parser-extract.js +222 -0
- package/dist/parser/parser-extract.js.map +1 -0
- package/dist/parser/parser-functions.d.ts +21 -0
- package/dist/parser/parser-functions.d.ts.map +1 -0
- package/dist/parser/parser-functions.js +155 -0
- package/dist/parser/parser-functions.js.map +1 -0
- package/dist/parser/parser-literals.d.ts +22 -0
- package/dist/parser/parser-literals.d.ts.map +1 -0
- package/dist/parser/parser-literals.js +288 -0
- package/dist/parser/parser-literals.js.map +1 -0
- package/dist/parser/parser-script.d.ts +21 -0
- package/dist/parser/parser-script.d.ts.map +1 -0
- package/dist/parser/parser-script.js +174 -0
- package/dist/parser/parser-script.js.map +1 -0
- package/dist/parser/parser-variables.d.ts +20 -0
- package/dist/parser/parser-variables.d.ts.map +1 -0
- package/dist/parser/parser-variables.js +146 -0
- package/dist/parser/parser-variables.js.map +1 -0
- package/dist/parser/parser.d.ts +49 -0
- package/dist/parser/parser.d.ts.map +1 -0
- package/dist/parser/parser.js +54 -0
- package/dist/parser/parser.js.map +1 -0
- package/dist/parser/script.d.ts +14 -0
- package/dist/parser/script.d.ts.map +1 -0
- package/dist/parser/script.js +196 -0
- package/dist/parser/script.js.map +1 -0
- package/dist/parser/state.d.ts +40 -0
- package/dist/parser/state.d.ts.map +1 -0
- package/dist/parser/state.js +129 -0
- package/dist/parser/state.js.map +1 -0
- package/dist/parser/variables.d.ts +10 -0
- package/dist/parser/variables.d.ts.map +1 -0
- package/dist/parser/variables.js +215 -0
- package/dist/parser/variables.js.map +1 -0
- package/dist/runtime/ast-equals.d.ts +13 -0
- package/dist/runtime/ast-equals.d.ts.map +1 -0
- package/dist/runtime/ast-equals.js +447 -0
- package/dist/runtime/ast-equals.js.map +1 -0
- package/dist/runtime/builtins.d.ts +13 -0
- package/dist/runtime/builtins.d.ts.map +1 -0
- package/dist/runtime/builtins.js +180 -0
- package/dist/runtime/builtins.js.map +1 -0
- package/dist/runtime/callable.d.ts +88 -0
- package/dist/runtime/callable.d.ts.map +1 -0
- package/dist/runtime/callable.js +98 -0
- package/dist/runtime/callable.js.map +1 -0
- package/dist/runtime/context.d.ts +13 -0
- package/dist/runtime/context.d.ts.map +1 -0
- package/dist/runtime/context.js +73 -0
- package/dist/runtime/context.js.map +1 -0
- package/dist/runtime/core/callable.d.ts +171 -0
- package/dist/runtime/core/callable.d.ts.map +1 -0
- package/dist/runtime/core/callable.js +246 -0
- package/dist/runtime/core/callable.js.map +1 -0
- package/dist/runtime/core/context.d.ts +29 -0
- package/dist/runtime/core/context.d.ts.map +1 -0
- package/dist/runtime/core/context.js +154 -0
- package/dist/runtime/core/context.js.map +1 -0
- package/dist/runtime/core/equals.d.ts +9 -0
- package/dist/runtime/core/equals.d.ts.map +1 -0
- package/dist/runtime/core/equals.js +381 -0
- package/dist/runtime/core/equals.js.map +1 -0
- package/dist/runtime/core/eval/base.d.ts +65 -0
- package/dist/runtime/core/eval/base.d.ts.map +1 -0
- package/dist/runtime/core/eval/base.js +112 -0
- package/dist/runtime/core/eval/base.js.map +1 -0
- package/dist/runtime/core/eval/evaluator.d.ts +47 -0
- package/dist/runtime/core/eval/evaluator.d.ts.map +1 -0
- package/dist/runtime/core/eval/evaluator.js +73 -0
- package/dist/runtime/core/eval/evaluator.js.map +1 -0
- package/dist/runtime/core/eval/index.d.ts +57 -0
- package/dist/runtime/core/eval/index.d.ts.map +1 -0
- package/dist/runtime/core/eval/index.js +95 -0
- package/dist/runtime/core/eval/index.js.map +1 -0
- package/dist/runtime/core/eval/mixins/annotations.d.ts +19 -0
- package/dist/runtime/core/eval/mixins/annotations.d.ts.map +1 -0
- package/dist/runtime/core/eval/mixins/annotations.js +146 -0
- package/dist/runtime/core/eval/mixins/annotations.js.map +1 -0
- package/dist/runtime/core/eval/mixins/closures.d.ts +49 -0
- package/dist/runtime/core/eval/mixins/closures.d.ts.map +1 -0
- package/dist/runtime/core/eval/mixins/closures.js +479 -0
- package/dist/runtime/core/eval/mixins/closures.js.map +1 -0
- package/dist/runtime/core/eval/mixins/collections.d.ts +24 -0
- package/dist/runtime/core/eval/mixins/collections.d.ts.map +1 -0
- package/dist/runtime/core/eval/mixins/collections.js +466 -0
- package/dist/runtime/core/eval/mixins/collections.js.map +1 -0
- package/dist/runtime/core/eval/mixins/control-flow.d.ts +27 -0
- package/dist/runtime/core/eval/mixins/control-flow.d.ts.map +1 -0
- package/dist/runtime/core/eval/mixins/control-flow.js +369 -0
- package/dist/runtime/core/eval/mixins/control-flow.js.map +1 -0
- package/dist/runtime/core/eval/mixins/core.d.ts +24 -0
- package/dist/runtime/core/eval/mixins/core.d.ts.map +1 -0
- package/dist/runtime/core/eval/mixins/core.js +335 -0
- package/dist/runtime/core/eval/mixins/core.js.map +1 -0
- package/dist/runtime/core/eval/mixins/expressions.d.ts +19 -0
- package/dist/runtime/core/eval/mixins/expressions.d.ts.map +1 -0
- package/dist/runtime/core/eval/mixins/expressions.js +202 -0
- package/dist/runtime/core/eval/mixins/expressions.js.map +1 -0
- package/dist/runtime/core/eval/mixins/extraction.d.ts +10 -0
- package/dist/runtime/core/eval/mixins/extraction.d.ts.map +1 -0
- package/dist/runtime/core/eval/mixins/extraction.js +250 -0
- package/dist/runtime/core/eval/mixins/extraction.js.map +1 -0
- package/dist/runtime/core/eval/mixins/literals.d.ts +23 -0
- package/dist/runtime/core/eval/mixins/literals.d.ts.map +1 -0
- package/dist/runtime/core/eval/mixins/literals.js +180 -0
- package/dist/runtime/core/eval/mixins/literals.js.map +1 -0
- package/dist/runtime/core/eval/mixins/types.d.ts +20 -0
- package/dist/runtime/core/eval/mixins/types.d.ts.map +1 -0
- package/dist/runtime/core/eval/mixins/types.js +109 -0
- package/dist/runtime/core/eval/mixins/types.js.map +1 -0
- package/dist/runtime/core/eval/mixins/variables.d.ts +34 -0
- package/dist/runtime/core/eval/mixins/variables.d.ts.map +1 -0
- package/dist/runtime/core/eval/mixins/variables.js +247 -0
- package/dist/runtime/core/eval/mixins/variables.js.map +1 -0
- package/dist/runtime/core/eval/types.d.ts +41 -0
- package/dist/runtime/core/eval/types.d.ts.map +1 -0
- package/dist/runtime/core/eval/types.js +10 -0
- package/dist/runtime/core/eval/types.js.map +1 -0
- package/dist/runtime/core/evaluate.d.ts +42 -0
- package/dist/runtime/core/evaluate.d.ts.map +1 -0
- package/dist/runtime/core/evaluate.debug.js +1251 -0
- package/dist/runtime/core/evaluate.js +1913 -0
- package/dist/runtime/core/evaluate.js.map +1 -0
- package/dist/runtime/core/execute.d.ts +26 -0
- package/dist/runtime/core/execute.d.ts.map +1 -0
- package/dist/runtime/core/execute.js +177 -0
- package/dist/runtime/core/execute.js.map +1 -0
- package/dist/runtime/core/signals.d.ts +19 -0
- package/dist/runtime/core/signals.d.ts.map +1 -0
- package/dist/runtime/core/signals.js +26 -0
- package/dist/runtime/core/signals.js.map +1 -0
- package/dist/runtime/core/types.d.ts +177 -0
- package/dist/runtime/core/types.d.ts.map +1 -0
- package/dist/runtime/core/types.js +50 -0
- package/dist/runtime/core/types.js.map +1 -0
- package/dist/runtime/core/values.d.ts +66 -0
- package/dist/runtime/core/values.d.ts.map +1 -0
- package/dist/runtime/core/values.js +240 -0
- package/dist/runtime/core/values.js.map +1 -0
- package/dist/runtime/evaluate.d.ts +32 -0
- package/dist/runtime/evaluate.d.ts.map +1 -0
- package/dist/runtime/evaluate.js +1111 -0
- package/dist/runtime/evaluate.js.map +1 -0
- package/dist/runtime/execute.d.ts +26 -0
- package/dist/runtime/execute.d.ts.map +1 -0
- package/dist/runtime/execute.js +121 -0
- package/dist/runtime/execute.js.map +1 -0
- package/dist/runtime/ext/builtins.d.ts +16 -0
- package/dist/runtime/ext/builtins.d.ts.map +1 -0
- package/dist/runtime/ext/builtins.js +528 -0
- package/dist/runtime/ext/builtins.js.map +1 -0
- package/dist/runtime/ext/content-parser.d.ts +83 -0
- package/dist/runtime/ext/content-parser.d.ts.map +1 -0
- package/dist/runtime/ext/content-parser.js +536 -0
- package/dist/runtime/ext/content-parser.js.map +1 -0
- package/dist/runtime/index.d.ts +28 -0
- package/dist/runtime/index.d.ts.map +1 -0
- package/dist/runtime/index.js +34 -0
- package/dist/runtime/index.js.map +1 -0
- package/dist/runtime/signals.d.ts +19 -0
- package/dist/runtime/signals.d.ts.map +1 -0
- package/dist/runtime/signals.js +26 -0
- package/dist/runtime/signals.js.map +1 -0
- package/dist/runtime/types.d.ts +169 -0
- package/dist/runtime/types.d.ts.map +1 -0
- package/dist/runtime/types.js +50 -0
- package/dist/runtime/types.js.map +1 -0
- package/dist/runtime/values.d.ts +50 -0
- package/dist/runtime/values.d.ts.map +1 -0
- package/dist/runtime/values.js +209 -0
- package/dist/runtime/values.js.map +1 -0
- package/dist/runtime.d.ts +254 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/runtime.js +2014 -0
- package/dist/runtime.js.map +1 -0
- package/dist/types.d.ts +752 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +189 -0
- package/dist/types.js.map +1 -0
- package/docs/00_INDEX.md +65 -0
- package/docs/01_guide.md +390 -0
- package/docs/02_types.md +399 -0
- package/docs/03_variables.md +314 -0
- package/docs/04_operators.md +551 -0
- package/docs/05_control-flow.md +350 -0
- package/docs/06_closures.md +353 -0
- package/docs/07_collections.md +686 -0
- package/docs/08_iterators.md +330 -0
- package/docs/09_strings.md +205 -0
- package/docs/10_parsing.md +366 -0
- package/docs/11_reference.md +350 -0
- package/docs/12_examples.md +771 -0
- package/docs/13_modules.md +519 -0
- package/docs/14_host-integration.md +826 -0
- package/docs/15_grammar.ebnf +693 -0
- package/docs/16_conventions.md +696 -0
- package/docs/99_llm-reference.txt +300 -0
- package/docs/assets/logo.png +0 -0
- package/package.json +70 -0
|
@@ -0,0 +1,528 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Built-in Functions and Methods
|
|
3
|
+
*
|
|
4
|
+
* Minimal set of built-in operations. Host applications provide
|
|
5
|
+
* domain-specific functions via RuntimeContext.
|
|
6
|
+
*
|
|
7
|
+
* @internal - Not part of public API
|
|
8
|
+
*/
|
|
9
|
+
import { callable, isCallable, isDict } from '../core/callable.js';
|
|
10
|
+
import { RILL_ERROR_CODES, RuntimeError } from '../../types.js';
|
|
11
|
+
import { deepEquals, formatValue, inferType, isEmpty, isRillIterator, } from '../core/values.js';
|
|
12
|
+
import { parse as contentParse, parseJson, extractXmlTag, extractFenceByLang, extractAllFences, parseFrontmatter, parseChecklist, } from './content-parser.js';
|
|
13
|
+
// ============================================================
|
|
14
|
+
// BUILT-IN FUNCTIONS
|
|
15
|
+
// ============================================================
|
|
16
|
+
/** Recursively remove closures from a value for JSON serialization */
|
|
17
|
+
function stripClosures(value) {
|
|
18
|
+
if (isCallable(value)) {
|
|
19
|
+
return undefined; // Will be filtered out
|
|
20
|
+
}
|
|
21
|
+
if (Array.isArray(value)) {
|
|
22
|
+
return value.filter((v) => !isCallable(v)).map(stripClosures);
|
|
23
|
+
}
|
|
24
|
+
if (isDict(value)) {
|
|
25
|
+
const result = {};
|
|
26
|
+
for (const [k, v] of Object.entries(value)) {
|
|
27
|
+
if (!isCallable(v)) {
|
|
28
|
+
result[k] = stripClosures(v);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
return result;
|
|
32
|
+
}
|
|
33
|
+
return value;
|
|
34
|
+
}
|
|
35
|
+
// ============================================================
|
|
36
|
+
// ITERATOR HELPERS
|
|
37
|
+
// ============================================================
|
|
38
|
+
/**
|
|
39
|
+
* Create an iterator for a list at the given index.
|
|
40
|
+
* Returns { value, done, next } dict.
|
|
41
|
+
*/
|
|
42
|
+
function makeListIterator(list, index) {
|
|
43
|
+
if (index >= list.length) {
|
|
44
|
+
return { done: true, next: callable(() => makeListIterator(list, index)) };
|
|
45
|
+
}
|
|
46
|
+
return {
|
|
47
|
+
value: list[index],
|
|
48
|
+
done: false,
|
|
49
|
+
next: callable(() => makeListIterator(list, index + 1)),
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Create an iterator for a string at the given index.
|
|
54
|
+
* Returns { value, done, next } dict.
|
|
55
|
+
*/
|
|
56
|
+
function makeStringIterator(str, index) {
|
|
57
|
+
if (index >= str.length) {
|
|
58
|
+
return { done: true, next: callable(() => makeStringIterator(str, index)) };
|
|
59
|
+
}
|
|
60
|
+
return {
|
|
61
|
+
value: str[index],
|
|
62
|
+
done: false,
|
|
63
|
+
next: callable(() => makeStringIterator(str, index + 1)),
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Create an iterator for a dict at the given index.
|
|
68
|
+
* Dict iteration yields { key, value } entries sorted by key.
|
|
69
|
+
*/
|
|
70
|
+
function makeDictIterator(dict, index) {
|
|
71
|
+
const keys = Object.keys(dict).sort();
|
|
72
|
+
if (index >= keys.length) {
|
|
73
|
+
return {
|
|
74
|
+
done: true,
|
|
75
|
+
next: callable(() => makeDictIterator(dict, index)),
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
const key = keys[index];
|
|
79
|
+
return {
|
|
80
|
+
value: { key, value: dict[key] },
|
|
81
|
+
done: false,
|
|
82
|
+
next: callable(() => makeDictIterator(dict, index + 1)),
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Check if a value is a rill iterator (dict with value, done, next fields).
|
|
87
|
+
*/
|
|
88
|
+
export const BUILTIN_FUNCTIONS = {
|
|
89
|
+
/** Identity function - returns its argument */
|
|
90
|
+
identity: (args) => args[0] ?? null,
|
|
91
|
+
/** Return the type name of a value */
|
|
92
|
+
type: (args) => inferType(args[0] ?? null),
|
|
93
|
+
/** Log a value and return it unchanged (passthrough) */
|
|
94
|
+
log: (args, ctx) => {
|
|
95
|
+
const value = args[0] ?? null;
|
|
96
|
+
// ctx is RuntimeContext but CallableFn uses a minimal interface
|
|
97
|
+
ctx.callbacks.onLog(value);
|
|
98
|
+
return value;
|
|
99
|
+
},
|
|
100
|
+
/** Convert any value to JSON string (errors on direct closure, skips closures in containers) */
|
|
101
|
+
json: (args, _ctx, location) => {
|
|
102
|
+
const value = args[0] ?? null;
|
|
103
|
+
if (isCallable(value)) {
|
|
104
|
+
throw new RuntimeError(RILL_ERROR_CODES.RUNTIME_TYPE_ERROR, 'Cannot serialize closure to JSON', location);
|
|
105
|
+
}
|
|
106
|
+
return JSON.stringify(stripClosures(value));
|
|
107
|
+
},
|
|
108
|
+
/** Parse JSON string to value (with automatic repair) */
|
|
109
|
+
parse_json: (args) => {
|
|
110
|
+
const text = formatValue(args[0] ?? '');
|
|
111
|
+
return parseJson(text) ?? {};
|
|
112
|
+
},
|
|
113
|
+
/** Auto-detect and parse structured content from text */
|
|
114
|
+
parse_auto: (args) => {
|
|
115
|
+
const text = formatValue(args[0] ?? '');
|
|
116
|
+
const result = contentParse(text);
|
|
117
|
+
return {
|
|
118
|
+
type: result.type,
|
|
119
|
+
data: result.data,
|
|
120
|
+
raw: result.raw,
|
|
121
|
+
confidence: result.confidence,
|
|
122
|
+
repaired: result.repaired,
|
|
123
|
+
repairs: result.repairs,
|
|
124
|
+
};
|
|
125
|
+
},
|
|
126
|
+
/** Extract content from XML tags */
|
|
127
|
+
parse_xml: (args, ctx) => {
|
|
128
|
+
// Check if called with explicit args (args[0] !== ctx.pipeValue)
|
|
129
|
+
// vs piped value auto-pushed to args (args[0] === ctx.pipeValue)
|
|
130
|
+
const hasExplicitArg = args.length > 0 && ctx.pipeValue !== null && args[0] !== ctx.pipeValue;
|
|
131
|
+
const text = hasExplicitArg
|
|
132
|
+
? formatValue(ctx.pipeValue ?? '')
|
|
133
|
+
: formatValue(args[0] ?? '');
|
|
134
|
+
const tag = hasExplicitArg ? formatValue(args[0] ?? '') : undefined;
|
|
135
|
+
if (tag) {
|
|
136
|
+
return extractXmlTag(text, tag) ?? '';
|
|
137
|
+
}
|
|
138
|
+
// Without tag, parse returns all tags as dict via contentParse
|
|
139
|
+
const result = contentParse(text, { prefer: 'xml' });
|
|
140
|
+
if (result.type === 'xml' && typeof result.data === 'object') {
|
|
141
|
+
return result.data;
|
|
142
|
+
}
|
|
143
|
+
return {};
|
|
144
|
+
},
|
|
145
|
+
/** Extract content from fenced code block */
|
|
146
|
+
parse_fence: (args, ctx) => {
|
|
147
|
+
// Check if called with explicit args (args[0] !== ctx.pipeValue)
|
|
148
|
+
// vs piped value auto-pushed to args (args[0] === ctx.pipeValue)
|
|
149
|
+
const hasExplicitArg = args.length > 0 && ctx.pipeValue !== null && args[0] !== ctx.pipeValue;
|
|
150
|
+
const text = hasExplicitArg
|
|
151
|
+
? formatValue(ctx.pipeValue ?? '')
|
|
152
|
+
: formatValue(args[0] ?? '');
|
|
153
|
+
const lang = hasExplicitArg ? formatValue(args[0] ?? '') : undefined;
|
|
154
|
+
if (lang) {
|
|
155
|
+
return extractFenceByLang(text, lang) ?? '';
|
|
156
|
+
}
|
|
157
|
+
// Without lang, extract first fence
|
|
158
|
+
const fences = extractAllFences(text);
|
|
159
|
+
return fences.length > 0 ? fences[0].content : '';
|
|
160
|
+
},
|
|
161
|
+
/** Extract all fenced code blocks */
|
|
162
|
+
parse_fences: (args) => {
|
|
163
|
+
const text = formatValue(args[0] ?? '');
|
|
164
|
+
return extractAllFences(text);
|
|
165
|
+
},
|
|
166
|
+
/** Extract YAML frontmatter and body */
|
|
167
|
+
parse_frontmatter: (args) => {
|
|
168
|
+
const text = formatValue(args[0] ?? '');
|
|
169
|
+
const result = parseFrontmatter(text);
|
|
170
|
+
return result ?? { meta: {}, body: '' };
|
|
171
|
+
},
|
|
172
|
+
/** Parse checklist items */
|
|
173
|
+
parse_checklist: (args) => {
|
|
174
|
+
const text = formatValue(args[0] ?? '');
|
|
175
|
+
const items = parseChecklist(text);
|
|
176
|
+
// Return as list of [checked, text] tuples per spec
|
|
177
|
+
return items.map((item) => [item.checked, item.text]);
|
|
178
|
+
},
|
|
179
|
+
/**
|
|
180
|
+
* Enumerate a list or dict, returning list of indexed dicts.
|
|
181
|
+
* List: enumerate([10, 20]) -> [[index: 0, value: 10], [index: 1, value: 20]]
|
|
182
|
+
* Dict: enumerate([a: 1]) -> [[index: 0, key: "a", value: 1]]
|
|
183
|
+
*/
|
|
184
|
+
enumerate: (args) => {
|
|
185
|
+
const input = args[0] ?? null;
|
|
186
|
+
if (Array.isArray(input)) {
|
|
187
|
+
return input.map((value, index) => ({ index, value }));
|
|
188
|
+
}
|
|
189
|
+
if (isDict(input)) {
|
|
190
|
+
const keys = Object.keys(input).sort();
|
|
191
|
+
return keys.map((key, index) => ({
|
|
192
|
+
index,
|
|
193
|
+
key,
|
|
194
|
+
value: input[key],
|
|
195
|
+
}));
|
|
196
|
+
}
|
|
197
|
+
return [];
|
|
198
|
+
},
|
|
199
|
+
/**
|
|
200
|
+
* Create an iterator that generates a sequence of numbers.
|
|
201
|
+
* range(start, end, step=1) - generates [start, start+step, ...] up to (but not including) end
|
|
202
|
+
*/
|
|
203
|
+
range: (args, _ctx, location) => {
|
|
204
|
+
const start = typeof args[0] === 'number' ? args[0] : 0;
|
|
205
|
+
const end = typeof args[1] === 'number' ? args[1] : 0;
|
|
206
|
+
const step = typeof args[2] === 'number' ? args[2] : 1;
|
|
207
|
+
if (step === 0) {
|
|
208
|
+
throw new RuntimeError(RILL_ERROR_CODES.RUNTIME_TYPE_ERROR, 'range step cannot be zero', location);
|
|
209
|
+
}
|
|
210
|
+
const makeRangeIterator = (current) => {
|
|
211
|
+
const done = step > 0 ? current >= end : step < 0 ? current <= end : true;
|
|
212
|
+
if (done) {
|
|
213
|
+
return {
|
|
214
|
+
done: true,
|
|
215
|
+
next: callable(() => makeRangeIterator(current)),
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
return {
|
|
219
|
+
value: current,
|
|
220
|
+
done: false,
|
|
221
|
+
next: callable(() => makeRangeIterator(current + step)),
|
|
222
|
+
};
|
|
223
|
+
};
|
|
224
|
+
return makeRangeIterator(start);
|
|
225
|
+
},
|
|
226
|
+
/**
|
|
227
|
+
* Create an iterator that repeats a value n times.
|
|
228
|
+
* repeat(value, count) - generates value repeated count times
|
|
229
|
+
*/
|
|
230
|
+
repeat: (args, _ctx, location) => {
|
|
231
|
+
const value = args[0] ?? '';
|
|
232
|
+
const count = typeof args[1] === 'number' ? Math.floor(args[1]) : 0;
|
|
233
|
+
if (count < 0) {
|
|
234
|
+
throw new RuntimeError(RILL_ERROR_CODES.RUNTIME_TYPE_ERROR, 'repeat count cannot be negative', location);
|
|
235
|
+
}
|
|
236
|
+
const makeRepeatIterator = (remaining) => {
|
|
237
|
+
if (remaining <= 0) {
|
|
238
|
+
return {
|
|
239
|
+
done: true,
|
|
240
|
+
next: callable(() => makeRepeatIterator(0)),
|
|
241
|
+
};
|
|
242
|
+
}
|
|
243
|
+
return {
|
|
244
|
+
value,
|
|
245
|
+
done: false,
|
|
246
|
+
next: callable(() => makeRepeatIterator(remaining - 1)),
|
|
247
|
+
};
|
|
248
|
+
};
|
|
249
|
+
return makeRepeatIterator(count);
|
|
250
|
+
},
|
|
251
|
+
};
|
|
252
|
+
// ============================================================
|
|
253
|
+
// BUILT-IN METHODS
|
|
254
|
+
// ============================================================
|
|
255
|
+
/** Factory for comparison methods (lt, gt, le, ge) */
|
|
256
|
+
function createComparisonMethod(compare) {
|
|
257
|
+
return (receiver, args) => {
|
|
258
|
+
const arg = args[0];
|
|
259
|
+
if (typeof receiver === 'number' && typeof arg === 'number') {
|
|
260
|
+
return compare(receiver, arg);
|
|
261
|
+
}
|
|
262
|
+
return compare(formatValue(receiver), formatValue(arg ?? ''));
|
|
263
|
+
};
|
|
264
|
+
}
|
|
265
|
+
export const BUILTIN_METHODS = {
|
|
266
|
+
// === Conversion methods ===
|
|
267
|
+
/** Convert value to string */
|
|
268
|
+
str: (receiver) => formatValue(receiver),
|
|
269
|
+
/** Convert value to number */
|
|
270
|
+
num: (receiver) => {
|
|
271
|
+
if (typeof receiver === 'number')
|
|
272
|
+
return receiver;
|
|
273
|
+
if (typeof receiver === 'string') {
|
|
274
|
+
const n = parseFloat(receiver);
|
|
275
|
+
if (!isNaN(n))
|
|
276
|
+
return n;
|
|
277
|
+
}
|
|
278
|
+
if (typeof receiver === 'boolean')
|
|
279
|
+
return receiver ? 1 : 0;
|
|
280
|
+
return 0;
|
|
281
|
+
},
|
|
282
|
+
/** Get length of string or array */
|
|
283
|
+
len: (receiver) => {
|
|
284
|
+
if (typeof receiver === 'string')
|
|
285
|
+
return receiver.length;
|
|
286
|
+
if (Array.isArray(receiver))
|
|
287
|
+
return receiver.length;
|
|
288
|
+
if (receiver && typeof receiver === 'object') {
|
|
289
|
+
return Object.keys(receiver).length;
|
|
290
|
+
}
|
|
291
|
+
return 0;
|
|
292
|
+
},
|
|
293
|
+
/** Trim whitespace from string */
|
|
294
|
+
trim: (receiver) => formatValue(receiver).trim(),
|
|
295
|
+
// === Element access methods ===
|
|
296
|
+
/** Get first element of array or first char of string */
|
|
297
|
+
head: (receiver, _args, _ctx, location) => {
|
|
298
|
+
if (Array.isArray(receiver)) {
|
|
299
|
+
if (receiver.length === 0) {
|
|
300
|
+
throw new RuntimeError(RILL_ERROR_CODES.RUNTIME_TYPE_ERROR, 'Cannot get head of empty list', location);
|
|
301
|
+
}
|
|
302
|
+
return receiver[0];
|
|
303
|
+
}
|
|
304
|
+
if (typeof receiver === 'string') {
|
|
305
|
+
if (receiver.length === 0) {
|
|
306
|
+
throw new RuntimeError(RILL_ERROR_CODES.RUNTIME_TYPE_ERROR, 'Cannot get head of empty string', location);
|
|
307
|
+
}
|
|
308
|
+
return receiver[0];
|
|
309
|
+
}
|
|
310
|
+
throw new RuntimeError(RILL_ERROR_CODES.RUNTIME_TYPE_ERROR, `head requires list or string, got ${inferType(receiver)}`, location);
|
|
311
|
+
},
|
|
312
|
+
/** Get last element of array or last char of string */
|
|
313
|
+
tail: (receiver, _args, _ctx, location) => {
|
|
314
|
+
if (Array.isArray(receiver)) {
|
|
315
|
+
if (receiver.length === 0) {
|
|
316
|
+
throw new RuntimeError(RILL_ERROR_CODES.RUNTIME_TYPE_ERROR, 'Cannot get tail of empty list', location);
|
|
317
|
+
}
|
|
318
|
+
return receiver[receiver.length - 1];
|
|
319
|
+
}
|
|
320
|
+
if (typeof receiver === 'string') {
|
|
321
|
+
if (receiver.length === 0) {
|
|
322
|
+
throw new RuntimeError(RILL_ERROR_CODES.RUNTIME_TYPE_ERROR, 'Cannot get tail of empty string', location);
|
|
323
|
+
}
|
|
324
|
+
return receiver[receiver.length - 1];
|
|
325
|
+
}
|
|
326
|
+
throw new RuntimeError(RILL_ERROR_CODES.RUNTIME_TYPE_ERROR, `tail requires list or string, got ${inferType(receiver)}`, location);
|
|
327
|
+
},
|
|
328
|
+
/** Get iterator at first position for any collection */
|
|
329
|
+
first: (receiver, _args, _ctx, location) => {
|
|
330
|
+
// For iterators, return as-is (identity)
|
|
331
|
+
if (isRillIterator(receiver)) {
|
|
332
|
+
return receiver;
|
|
333
|
+
}
|
|
334
|
+
// For lists
|
|
335
|
+
if (Array.isArray(receiver)) {
|
|
336
|
+
return makeListIterator(receiver, 0);
|
|
337
|
+
}
|
|
338
|
+
// For strings
|
|
339
|
+
if (typeof receiver === 'string') {
|
|
340
|
+
return makeStringIterator(receiver, 0);
|
|
341
|
+
}
|
|
342
|
+
// For dicts
|
|
343
|
+
if (isDict(receiver)) {
|
|
344
|
+
return makeDictIterator(receiver, 0);
|
|
345
|
+
}
|
|
346
|
+
throw new RuntimeError(RILL_ERROR_CODES.RUNTIME_TYPE_ERROR, `first requires list, string, dict, or iterator, got ${inferType(receiver)}`, location);
|
|
347
|
+
},
|
|
348
|
+
/** Get element at index */
|
|
349
|
+
at: (receiver, args, _ctx, location) => {
|
|
350
|
+
const idx = typeof args[0] === 'number' ? args[0] : 0;
|
|
351
|
+
if (Array.isArray(receiver)) {
|
|
352
|
+
if (idx < 0 || idx >= receiver.length) {
|
|
353
|
+
throw new RuntimeError(RILL_ERROR_CODES.RUNTIME_TYPE_ERROR, `List index out of bounds: ${idx}`, location);
|
|
354
|
+
}
|
|
355
|
+
return receiver[idx];
|
|
356
|
+
}
|
|
357
|
+
if (typeof receiver === 'string') {
|
|
358
|
+
if (idx < 0 || idx >= receiver.length) {
|
|
359
|
+
throw new RuntimeError(RILL_ERROR_CODES.RUNTIME_TYPE_ERROR, `String index out of bounds: ${idx}`, location);
|
|
360
|
+
}
|
|
361
|
+
return receiver[idx];
|
|
362
|
+
}
|
|
363
|
+
throw new RuntimeError(RILL_ERROR_CODES.RUNTIME_TYPE_ERROR, `Cannot call .at() on ${typeof receiver}`, location);
|
|
364
|
+
},
|
|
365
|
+
// === String operations ===
|
|
366
|
+
/** Split string by separator (default: newline) */
|
|
367
|
+
split: (receiver, args) => {
|
|
368
|
+
const str = formatValue(receiver);
|
|
369
|
+
const sep = typeof args[0] === 'string' ? args[0] : '\n';
|
|
370
|
+
return str.split(sep);
|
|
371
|
+
},
|
|
372
|
+
/** Join array elements with separator (default: comma) */
|
|
373
|
+
join: (receiver, args) => {
|
|
374
|
+
const sep = typeof args[0] === 'string' ? args[0] : ',';
|
|
375
|
+
if (!Array.isArray(receiver))
|
|
376
|
+
return formatValue(receiver);
|
|
377
|
+
return receiver.map(formatValue).join(sep);
|
|
378
|
+
},
|
|
379
|
+
/** Split string into lines (same as .split but newline only) */
|
|
380
|
+
lines: (receiver) => {
|
|
381
|
+
const str = formatValue(receiver);
|
|
382
|
+
return str.split('\n');
|
|
383
|
+
},
|
|
384
|
+
// === Utility methods ===
|
|
385
|
+
/** Check if value is empty */
|
|
386
|
+
empty: (receiver) => isEmpty(receiver),
|
|
387
|
+
// === String methods ===
|
|
388
|
+
/** Check if string starts with prefix */
|
|
389
|
+
starts_with: (receiver, args) => {
|
|
390
|
+
const str = formatValue(receiver);
|
|
391
|
+
const prefix = formatValue(args[0] ?? '');
|
|
392
|
+
return str.startsWith(prefix);
|
|
393
|
+
},
|
|
394
|
+
/** Check if string ends with suffix */
|
|
395
|
+
ends_with: (receiver, args) => {
|
|
396
|
+
const str = formatValue(receiver);
|
|
397
|
+
const suffix = formatValue(args[0] ?? '');
|
|
398
|
+
return str.endsWith(suffix);
|
|
399
|
+
},
|
|
400
|
+
/** Convert string to lowercase */
|
|
401
|
+
lower: (receiver) => formatValue(receiver).toLowerCase(),
|
|
402
|
+
/** Convert string to uppercase */
|
|
403
|
+
upper: (receiver) => formatValue(receiver).toUpperCase(),
|
|
404
|
+
/** Replace first regex match */
|
|
405
|
+
replace: (receiver, args) => {
|
|
406
|
+
const str = formatValue(receiver);
|
|
407
|
+
const pattern = formatValue(args[0] ?? '');
|
|
408
|
+
const replacement = formatValue(args[1] ?? '');
|
|
409
|
+
try {
|
|
410
|
+
return str.replace(new RegExp(pattern), replacement);
|
|
411
|
+
}
|
|
412
|
+
catch {
|
|
413
|
+
return str;
|
|
414
|
+
}
|
|
415
|
+
},
|
|
416
|
+
/** Replace all regex matches */
|
|
417
|
+
replace_all: (receiver, args) => {
|
|
418
|
+
const str = formatValue(receiver);
|
|
419
|
+
const pattern = formatValue(args[0] ?? '');
|
|
420
|
+
const replacement = formatValue(args[1] ?? '');
|
|
421
|
+
try {
|
|
422
|
+
return str.replace(new RegExp(pattern, 'g'), replacement);
|
|
423
|
+
}
|
|
424
|
+
catch {
|
|
425
|
+
return str;
|
|
426
|
+
}
|
|
427
|
+
},
|
|
428
|
+
/** Check if string contains substring */
|
|
429
|
+
contains: (receiver, args) => {
|
|
430
|
+
const str = formatValue(receiver);
|
|
431
|
+
const search = formatValue(args[0] ?? '');
|
|
432
|
+
return str.includes(search);
|
|
433
|
+
},
|
|
434
|
+
/**
|
|
435
|
+
* First regex match info, or empty dict if no match.
|
|
436
|
+
* Returns: [matched: string, index: number, groups: []]
|
|
437
|
+
*/
|
|
438
|
+
match: (receiver, args) => {
|
|
439
|
+
const str = formatValue(receiver);
|
|
440
|
+
const pattern = formatValue(args[0] ?? '');
|
|
441
|
+
try {
|
|
442
|
+
const m = new RegExp(pattern).exec(str);
|
|
443
|
+
if (!m)
|
|
444
|
+
return {};
|
|
445
|
+
return {
|
|
446
|
+
matched: m[0],
|
|
447
|
+
index: m.index,
|
|
448
|
+
groups: m.slice(1),
|
|
449
|
+
};
|
|
450
|
+
}
|
|
451
|
+
catch {
|
|
452
|
+
return {};
|
|
453
|
+
}
|
|
454
|
+
},
|
|
455
|
+
/** True if regex matches anywhere in string */
|
|
456
|
+
is_match: (receiver, args) => {
|
|
457
|
+
const str = formatValue(receiver);
|
|
458
|
+
const pattern = formatValue(args[0] ?? '');
|
|
459
|
+
try {
|
|
460
|
+
return new RegExp(pattern).test(str);
|
|
461
|
+
}
|
|
462
|
+
catch {
|
|
463
|
+
return false;
|
|
464
|
+
}
|
|
465
|
+
},
|
|
466
|
+
/** Position of first substring occurrence (-1 if not found) */
|
|
467
|
+
index_of: (receiver, args) => {
|
|
468
|
+
const str = formatValue(receiver);
|
|
469
|
+
const search = formatValue(args[0] ?? '');
|
|
470
|
+
return str.indexOf(search);
|
|
471
|
+
},
|
|
472
|
+
/** Repeat string n times */
|
|
473
|
+
repeat: (receiver, args) => {
|
|
474
|
+
const str = formatValue(receiver);
|
|
475
|
+
const n = typeof args[0] === 'number' ? Math.max(0, Math.floor(args[0])) : 0;
|
|
476
|
+
return str.repeat(n);
|
|
477
|
+
},
|
|
478
|
+
/** Pad start to length with fill string */
|
|
479
|
+
pad_start: (receiver, args) => {
|
|
480
|
+
const str = formatValue(receiver);
|
|
481
|
+
const length = typeof args[0] === 'number' ? args[0] : str.length;
|
|
482
|
+
const fill = typeof args[1] === 'string' ? args[1] : ' ';
|
|
483
|
+
return str.padStart(length, fill);
|
|
484
|
+
},
|
|
485
|
+
/** Pad end to length with fill string */
|
|
486
|
+
pad_end: (receiver, args) => {
|
|
487
|
+
const str = formatValue(receiver);
|
|
488
|
+
const length = typeof args[0] === 'number' ? args[0] : str.length;
|
|
489
|
+
const fill = typeof args[1] === 'string' ? args[1] : ' ';
|
|
490
|
+
return str.padEnd(length, fill);
|
|
491
|
+
},
|
|
492
|
+
// === Comparison methods ===
|
|
493
|
+
/** Equality check (deep structural comparison) */
|
|
494
|
+
eq: (receiver, args) => deepEquals(receiver, args[0] ?? null),
|
|
495
|
+
/** Inequality check (deep structural comparison) */
|
|
496
|
+
ne: (receiver, args) => !deepEquals(receiver, args[0] ?? null),
|
|
497
|
+
/** Less than */
|
|
498
|
+
lt: createComparisonMethod((a, b) => a < b),
|
|
499
|
+
/** Greater than */
|
|
500
|
+
gt: createComparisonMethod((a, b) => a > b),
|
|
501
|
+
/** Less than or equal */
|
|
502
|
+
le: createComparisonMethod((a, b) => a <= b),
|
|
503
|
+
/** Greater than or equal */
|
|
504
|
+
ge: createComparisonMethod((a, b) => a >= b),
|
|
505
|
+
// === Dict methods (reserved) ===
|
|
506
|
+
/** Get all keys of a dict as a tuple of strings */
|
|
507
|
+
keys: (receiver) => {
|
|
508
|
+
if (isDict(receiver)) {
|
|
509
|
+
return Object.keys(receiver);
|
|
510
|
+
}
|
|
511
|
+
return [];
|
|
512
|
+
},
|
|
513
|
+
/** Get all values of a dict as a tuple */
|
|
514
|
+
values: (receiver) => {
|
|
515
|
+
if (isDict(receiver)) {
|
|
516
|
+
return Object.values(receiver);
|
|
517
|
+
}
|
|
518
|
+
return [];
|
|
519
|
+
},
|
|
520
|
+
/** Get all entries of a dict as a tuple of [key, value] pairs */
|
|
521
|
+
entries: (receiver) => {
|
|
522
|
+
if (isDict(receiver)) {
|
|
523
|
+
return Object.entries(receiver).map(([k, v]) => [k, v]);
|
|
524
|
+
}
|
|
525
|
+
return [];
|
|
526
|
+
},
|
|
527
|
+
};
|
|
528
|
+
//# sourceMappingURL=builtins.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"builtins.js","sourceRoot":"","sources":["../../../src/runtime/ext/builtins.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Content Parser
|
|
3
|
+
*
|
|
4
|
+
* Auto-detects and extracts structured content from LLM responses.
|
|
5
|
+
* Handles markdown code blocks, raw JSON, XML tags, YAML frontmatter,
|
|
6
|
+
* checklists, and other common patterns.
|
|
7
|
+
*/
|
|
8
|
+
import type { RillValue } from '../core/values.js';
|
|
9
|
+
export type ParseType = 'json' | 'xml' | 'yaml' | 'frontmatter' | 'fence' | 'checklist' | 'text';
|
|
10
|
+
export interface ParseResult {
|
|
11
|
+
/** Detected format type */
|
|
12
|
+
type: ParseType;
|
|
13
|
+
/** Parsed structured data */
|
|
14
|
+
data: RillValue;
|
|
15
|
+
/** Original extracted content (before parsing) */
|
|
16
|
+
raw: string;
|
|
17
|
+
/** Detection confidence (0.0-1.0) */
|
|
18
|
+
confidence: number;
|
|
19
|
+
/** Whether error recovery was applied */
|
|
20
|
+
repaired: boolean;
|
|
21
|
+
/** List of repairs made (if any) */
|
|
22
|
+
repairs: string[];
|
|
23
|
+
}
|
|
24
|
+
export interface ParseOptions {
|
|
25
|
+
/** Prefer a specific format when ambiguous */
|
|
26
|
+
prefer?: ParseType;
|
|
27
|
+
/** Strict mode - no repairs, higher confidence threshold */
|
|
28
|
+
strict?: boolean;
|
|
29
|
+
/** Specific XML tag to extract */
|
|
30
|
+
tag?: string;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Auto-detect and parse structured content from LLM output.
|
|
34
|
+
*
|
|
35
|
+
* Detection priority:
|
|
36
|
+
* 1. Frontmatter (---\n...\n---\n)
|
|
37
|
+
* 2. Fenced JSON/YAML (```json or ```yaml)
|
|
38
|
+
* 3. Other fenced blocks (```lang)
|
|
39
|
+
* 4. XML tags (<tag>...</tag>)
|
|
40
|
+
* 5. Raw JSON ({...} or [...])
|
|
41
|
+
* 6. Raw YAML (key: value patterns)
|
|
42
|
+
* 7. Checklist (- [ ] or - [x])
|
|
43
|
+
* 8. Plain text (fallback)
|
|
44
|
+
*/
|
|
45
|
+
export declare function parse(text: string, options?: ParseOptions): ParseResult;
|
|
46
|
+
/**
|
|
47
|
+
* Extract content from a specific fenced code block type.
|
|
48
|
+
*/
|
|
49
|
+
export declare function extractFenceByLang(text: string, lang: string): string | null;
|
|
50
|
+
/**
|
|
51
|
+
* Extract all fenced code blocks with their language tags.
|
|
52
|
+
*/
|
|
53
|
+
export declare function extractAllFences(text: string): Array<{
|
|
54
|
+
lang: string;
|
|
55
|
+
content: string;
|
|
56
|
+
}>;
|
|
57
|
+
/**
|
|
58
|
+
* Extract content from a named XML tag.
|
|
59
|
+
*/
|
|
60
|
+
export declare function extractXmlTag(text: string, tagName: string): string | null;
|
|
61
|
+
/**
|
|
62
|
+
* Extract all instances of a named XML tag.
|
|
63
|
+
*/
|
|
64
|
+
export declare function extractAllXmlTags(text: string, tagName: string): string[];
|
|
65
|
+
/**
|
|
66
|
+
* Parse JSON with automatic repair of common errors.
|
|
67
|
+
*/
|
|
68
|
+
export declare function parseJson(text: string, repair?: boolean): RillValue | null;
|
|
69
|
+
/**
|
|
70
|
+
* Extract frontmatter and body from a document.
|
|
71
|
+
*/
|
|
72
|
+
export declare function parseFrontmatter(text: string): {
|
|
73
|
+
meta: Record<string, RillValue>;
|
|
74
|
+
body: string;
|
|
75
|
+
} | null;
|
|
76
|
+
/**
|
|
77
|
+
* Parse checklist items.
|
|
78
|
+
*/
|
|
79
|
+
export declare function parseChecklist(text: string): Array<{
|
|
80
|
+
checked: boolean;
|
|
81
|
+
text: string;
|
|
82
|
+
}>;
|
|
83
|
+
//# sourceMappingURL=content-parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"content-parser.d.ts","sourceRoot":"","sources":["../../../src/runtime/ext/content-parser.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAMnD,MAAM,MAAM,SAAS,GACjB,MAAM,GACN,KAAK,GACL,MAAM,GACN,aAAa,GACb,OAAO,GACP,WAAW,GACX,MAAM,CAAC;AAEX,MAAM,WAAW,WAAW;IAC1B,2BAA2B;IAC3B,IAAI,EAAE,SAAS,CAAC;IAChB,6BAA6B;IAC7B,IAAI,EAAE,SAAS,CAAC;IAChB,kDAAkD;IAClD,GAAG,EAAE,MAAM,CAAC;IACZ,qCAAqC;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,yCAAyC;IACzC,QAAQ,EAAE,OAAO,CAAC;IAClB,oCAAoC;IACpC,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,8CAA8C;IAC9C,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,4DAA4D;IAC5D,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,kCAAkC;IAClC,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AA8aD;;;;;;;;;;;;GAYG;AACH,wBAAgB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,YAAiB,GAAG,WAAW,CAgE3E;AAoBD;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAI5E;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,GACX,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAa1C;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAI1E;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAezE;AAED;;GAEG;AACH,wBAAgB,SAAS,CACvB,IAAI,EAAE,MAAM,EACZ,MAAM,GAAE,OAAc,GACrB,SAAS,GAAG,IAAI,CAGlB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,GACX;IAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAU1D;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,GACX,KAAK,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAa3C"}
|