@stxt-lang/core 0.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/out/all.d.ts +19 -0
- package/out/all.js +42 -0
- package/out/all.js.map +1 -0
- package/out/core/Constants.d.ts +9 -0
- package/out/core/Constants.js +14 -0
- package/out/core/Constants.js.map +1 -0
- package/out/core/Line.d.ts +9 -0
- package/out/core/Line.js +17 -0
- package/out/core/Line.js.map +1 -0
- package/out/core/LineParser.d.ts +2 -0
- package/out/core/LineParser.js +72 -0
- package/out/core/LineParser.js.map +1 -0
- package/out/core/NameNamespace.d.ts +7 -0
- package/out/core/NameNamespace.js +17 -0
- package/out/core/NameNamespace.js.map +1 -0
- package/out/core/NameNamespaceParser.d.ts +5 -0
- package/out/core/NameNamespaceParser.js +43 -0
- package/out/core/NameNamespaceParser.js.map +1 -0
- package/out/core/NamespaceValidator.d.ts +4 -0
- package/out/core/NamespaceValidator.js +17 -0
- package/out/core/NamespaceValidator.js.map +1 -0
- package/out/core/Node.d.ts +29 -0
- package/out/core/Node.js +116 -0
- package/out/core/Node.js.map +1 -0
- package/out/core/NodeCreator.d.ts +3 -0
- package/out/core/NodeCreator.js +52 -0
- package/out/core/NodeCreator.js.map +1 -0
- package/out/core/ParseResult.d.ts +12 -0
- package/out/core/ParseResult.js +26 -0
- package/out/core/ParseResult.js.map +1 -0
- package/out/core/Parser.d.ts +16 -0
- package/out/core/Parser.js +142 -0
- package/out/core/Parser.js.map +1 -0
- package/out/core/StringUtils.d.ts +8 -0
- package/out/core/StringUtils.js +46 -0
- package/out/core/StringUtils.js.map +1 -0
- package/out/exceptions/ParseException.d.ts +6 -0
- package/out/exceptions/ParseException.js +17 -0
- package/out/exceptions/ParseException.js.map +1 -0
- package/out/exceptions/RuntimeException.d.ts +6 -0
- package/out/exceptions/RuntimeException.js +20 -0
- package/out/exceptions/RuntimeException.js.map +1 -0
- package/out/exceptions/ValidationException.d.ts +4 -0
- package/out/exceptions/ValidationException.js +13 -0
- package/out/exceptions/ValidationException.js.map +1 -0
- package/out/processors/Observer.d.ts +8 -0
- package/out/processors/Observer.js +3 -0
- package/out/processors/Observer.js.map +1 -0
- package/out/processors/Validator.d.ts +5 -0
- package/out/processors/Validator.js +3 -0
- package/out/processors/Validator.js.map +1 -0
- package/out/runtime/ConditionalValidator.d.ts +9 -0
- package/out/runtime/ConditionalValidator.js +18 -0
- package/out/runtime/ConditionalValidator.js.map +1 -0
- package/out/runtime/NodeWriter.d.ts +12 -0
- package/out/runtime/NodeWriter.js +59 -0
- package/out/runtime/NodeWriter.js.map +1 -0
- package/out/runtime/UnifiedSchemaProvider.d.ts +22 -0
- package/out/runtime/UnifiedSchemaProvider.js +80 -0
- package/out/runtime/UnifiedSchemaProvider.js.map +1 -0
- package/out/schema/ChildDefinition.d.ts +21 -0
- package/out/schema/ChildDefinition.js +50 -0
- package/out/schema/ChildDefinition.js.map +1 -0
- package/out/schema/NodeDefinition.d.ts +34 -0
- package/out/schema/NodeDefinition.js +74 -0
- package/out/schema/NodeDefinition.js.map +1 -0
- package/out/schema/Schema.d.ts +30 -0
- package/out/schema/Schema.js +43 -0
- package/out/schema/Schema.js.map +1 -0
- package/out/schema/SchemaParser.d.ts +3 -0
- package/out/schema/SchemaParser.js +117 -0
- package/out/schema/SchemaParser.js.map +1 -0
- package/out/schema/SchemaProvider.d.ts +4 -0
- package/out/schema/SchemaProvider.js +3 -0
- package/out/schema/SchemaProvider.js.map +1 -0
- package/out/schema/SchemaProviderMemory.d.ts +11 -0
- package/out/schema/SchemaProviderMemory.js +44 -0
- package/out/schema/SchemaProviderMemory.js.map +1 -0
- package/out/schema/SchemaProviderMeta.d.ts +8 -0
- package/out/schema/SchemaProviderMeta.js +92 -0
- package/out/schema/SchemaProviderMeta.js.map +1 -0
- package/out/schema/SchemaValidator.d.ts +16 -0
- package/out/schema/SchemaValidator.js +115 -0
- package/out/schema/SchemaValidator.js.map +1 -0
- package/out/schema/Type.d.ts +6 -0
- package/out/schema/Type.js +3 -0
- package/out/schema/Type.js.map +1 -0
- package/out/schema/TypeRegistry.d.ts +8 -0
- package/out/schema/TypeRegistry.js +69 -0
- package/out/schema/TypeRegistry.js.map +1 -0
- package/out/schema/type/BASE64.d.ts +2 -0
- package/out/schema/type/BASE64.js +30 -0
- package/out/schema/type/BASE64.js.map +1 -0
- package/out/schema/type/BINARY.d.ts +2 -0
- package/out/schema/type/BINARY.js +18 -0
- package/out/schema/type/BINARY.js.map +1 -0
- package/out/schema/type/BLOCK.d.ts +2 -0
- package/out/schema/type/BLOCK.js +16 -0
- package/out/schema/type/BLOCK.js.map +1 -0
- package/out/schema/type/BOOLEAN.d.ts +1 -0
- package/out/schema/type/BOOLEAN.js +6 -0
- package/out/schema/type/BOOLEAN.js.map +1 -0
- package/out/schema/type/DATE.d.ts +1 -0
- package/out/schema/type/DATE.js +6 -0
- package/out/schema/type/DATE.js.map +1 -0
- package/out/schema/type/EMAIL.d.ts +1 -0
- package/out/schema/type/EMAIL.js +6 -0
- package/out/schema/type/EMAIL.js.map +1 -0
- package/out/schema/type/ENUM.d.ts +2 -0
- package/out/schema/type/ENUM.js +21 -0
- package/out/schema/type/ENUM.js.map +1 -0
- package/out/schema/type/GROUP.d.ts +2 -0
- package/out/schema/type/GROUP.js +16 -0
- package/out/schema/type/GROUP.js.map +1 -0
- package/out/schema/type/HEXADECIMAL.d.ts +2 -0
- package/out/schema/type/HEXADECIMAL.js +18 -0
- package/out/schema/type/HEXADECIMAL.js.map +1 -0
- package/out/schema/type/INLINE.d.ts +2 -0
- package/out/schema/type/INLINE.js +16 -0
- package/out/schema/type/INLINE.js.map +1 -0
- package/out/schema/type/INTEGER.d.ts +1 -0
- package/out/schema/type/INTEGER.js +6 -0
- package/out/schema/type/INTEGER.js.map +1 -0
- package/out/schema/type/MARKDOWN.d.ts +2 -0
- package/out/schema/type/MARKDOWN.js +17 -0
- package/out/schema/type/MARKDOWN.js.map +1 -0
- package/out/schema/type/NATURAL.d.ts +1 -0
- package/out/schema/type/NATURAL.js +6 -0
- package/out/schema/type/NATURAL.js.map +1 -0
- package/out/schema/type/NUMBER.d.ts +1 -0
- package/out/schema/type/NUMBER.js +6 -0
- package/out/schema/type/NUMBER.js.map +1 -0
- package/out/schema/type/TEXT.d.ts +2 -0
- package/out/schema/type/TEXT.js +15 -0
- package/out/schema/type/TEXT.js.map +1 -0
- package/out/schema/type/TIME.d.ts +1 -0
- package/out/schema/type/TIME.js +6 -0
- package/out/schema/type/TIME.js.map +1 -0
- package/out/schema/type/TIMESTAMP.d.ts +1 -0
- package/out/schema/type/TIMESTAMP.js +6 -0
- package/out/schema/type/TIMESTAMP.js.map +1 -0
- package/out/schema/type/URL.d.ts +2 -0
- package/out/schema/type/URL.js +27 -0
- package/out/schema/type/URL.js.map +1 -0
- package/out/schema/type/UUID.d.ts +1 -0
- package/out/schema/type/UUID.js +6 -0
- package/out/schema/type/UUID.js.map +1 -0
- package/out/schema/type/binaryValue.d.ts +2 -0
- package/out/schema/type/binaryValue.js +13 -0
- package/out/schema/type/binaryValue.js.map +1 -0
- package/out/schema/type/regexType.d.ts +2 -0
- package/out/schema/type/regexType.js +20 -0
- package/out/schema/type/regexType.js.map +1 -0
- package/out/template/ChildLine.d.ts +12 -0
- package/out/template/ChildLine.js +28 -0
- package/out/template/ChildLine.js.map +1 -0
- package/out/template/ChildLineParser.d.ts +7 -0
- package/out/template/ChildLineParser.js +98 -0
- package/out/template/ChildLineParser.js.map +1 -0
- package/out/template/MetaTemplateSchemaProvider.d.ts +8 -0
- package/out/template/MetaTemplateSchemaProvider.js +35 -0
- package/out/template/MetaTemplateSchemaProvider.js.map +1 -0
- package/out/template/TemplateParser.d.ts +3 -0
- package/out/template/TemplateParser.js +214 -0
- package/out/template/TemplateParser.js.map +1 -0
- package/out/template/TemplateSchemaProviderMemory.d.ts +6 -0
- package/out/template/TemplateSchemaProviderMemory.js +37 -0
- package/out/template/TemplateSchemaProviderMemory.js.map +1 -0
- package/package.json +45 -0
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Parser = void 0;
|
|
4
|
+
const LineParser_1 = require("./LineParser");
|
|
5
|
+
const NodeCreator_1 = require("./NodeCreator");
|
|
6
|
+
const ParseResult_1 = require("./ParseResult");
|
|
7
|
+
const ParseException_1 = require("../exceptions/ParseException");
|
|
8
|
+
class Parser {
|
|
9
|
+
constructor() {
|
|
10
|
+
this.observers = [];
|
|
11
|
+
this.validators = [];
|
|
12
|
+
}
|
|
13
|
+
registerObserver(observer) {
|
|
14
|
+
this.observers.push(observer);
|
|
15
|
+
}
|
|
16
|
+
registerValidator(validator) {
|
|
17
|
+
this.validators.push(validator);
|
|
18
|
+
}
|
|
19
|
+
parse(content) {
|
|
20
|
+
const result = this.parseResult(content);
|
|
21
|
+
if (result.hasErrors()) {
|
|
22
|
+
const error = result.getErrors()[0];
|
|
23
|
+
throw error;
|
|
24
|
+
}
|
|
25
|
+
return result.getNodes();
|
|
26
|
+
}
|
|
27
|
+
parseResult(content) {
|
|
28
|
+
content = this.removeUTF8BOM(content);
|
|
29
|
+
const result = new ParseResult_1.ParseResult();
|
|
30
|
+
const stack = [];
|
|
31
|
+
const documents = [];
|
|
32
|
+
let lineNumber = 0;
|
|
33
|
+
const lines = content.split(/\r?\n/);
|
|
34
|
+
// El salto de línea final es terminador de la última línea, no una línea
|
|
35
|
+
// vacía adicional (evita añadir una línea espuria a un bloque >> en EOF, spec 10.3)
|
|
36
|
+
if (lines.length > 0 && lines[lines.length - 1] === "") {
|
|
37
|
+
lines.pop();
|
|
38
|
+
}
|
|
39
|
+
for (const line of lines) {
|
|
40
|
+
lineNumber++;
|
|
41
|
+
this.processLine(line, lineNumber, stack, documents, result);
|
|
42
|
+
}
|
|
43
|
+
// Cerrar todos los nodos pendientes al EOF
|
|
44
|
+
this.closeToLevel(stack, documents, 0, result);
|
|
45
|
+
// Agregar nodos al resultado
|
|
46
|
+
for (const doc of documents) {
|
|
47
|
+
result.addNode(doc);
|
|
48
|
+
}
|
|
49
|
+
// Retorno resultado
|
|
50
|
+
return result;
|
|
51
|
+
}
|
|
52
|
+
processLine(lineString, lineNumber, stack, documents, result) {
|
|
53
|
+
try {
|
|
54
|
+
const lastNode = stack.length === 0 ? null : stack[stack.length - 1];
|
|
55
|
+
const lastLevel = lastNode ? lastNode.getLevel() : 0;
|
|
56
|
+
const lastNodeText = lastNode ? lastNode.isTextNode() : false;
|
|
57
|
+
// Parseamos línea
|
|
58
|
+
const line = (0, LineParser_1.parseLine)(lineString, lastNodeText, lastLevel, lineNumber);
|
|
59
|
+
if (line.isComment) {
|
|
60
|
+
// Pasamos a observers
|
|
61
|
+
this.observers.forEach(observer => {
|
|
62
|
+
observer.onComment(lineNumber, lineString);
|
|
63
|
+
});
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
const currentLevel = line.level;
|
|
67
|
+
// Si estamos dentro de un nodo texto, y el nivel indica que sigue siendo texto,
|
|
68
|
+
// añadimos línea de texto y no creamos nodo.
|
|
69
|
+
if (line.isBlock) {
|
|
70
|
+
lastNode.addTextLine(line.content);
|
|
71
|
+
// Notificar a observers sobre la línea de texto
|
|
72
|
+
this.observers.forEach(observer => {
|
|
73
|
+
observer.onTextLine(lastNode, lineNumber, lineString, line);
|
|
74
|
+
});
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
// Si es línea vacía no hacemos nada
|
|
78
|
+
if (line.isEmpty()) {
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
// Cerramos nodos hasta el nivel actual (esto "finaliza" y adjunta al padre/documentos)
|
|
82
|
+
this.closeToLevel(stack, documents, currentLevel, result);
|
|
83
|
+
// Creamos el nuevo nodo y lo dejamos "abierto" en la pila (NO lo adjuntamos aún)
|
|
84
|
+
const parent = stack.length === 0 ? null : stack[stack.length - 1];
|
|
85
|
+
const node = (0, NodeCreator_1.createNode)(line, lineNumber, currentLevel, parent);
|
|
86
|
+
// Pasamos a observers
|
|
87
|
+
this.observers.forEach(observer => {
|
|
88
|
+
observer.onCreate(node, lineString);
|
|
89
|
+
});
|
|
90
|
+
// Añadimos a stack
|
|
91
|
+
stack.push(node);
|
|
92
|
+
}
|
|
93
|
+
catch (e) {
|
|
94
|
+
this.handleError(e, lineNumber, result);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
handleError(e, line, result, errorCode = "UNEXPECTED_ERROR", unknownErrorCode = "UNKNOWN_ERROR") {
|
|
98
|
+
if (e instanceof ParseException_1.ParseException) {
|
|
99
|
+
result.addError(e);
|
|
100
|
+
}
|
|
101
|
+
else if (e instanceof Error) {
|
|
102
|
+
// Convertir errores genéricos a ParseException
|
|
103
|
+
result.addError(new ParseException_1.ParseException(line, errorCode, e.message));
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
// Error desconocido
|
|
107
|
+
result.addError(new ParseException_1.ParseException(line, unknownErrorCode, String(e)));
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
closeToLevel(stack, documents, targetLevel, result) {
|
|
111
|
+
while (stack.length > targetLevel) {
|
|
112
|
+
const completed = stack.pop();
|
|
113
|
+
// Pasamos validators
|
|
114
|
+
this.validators.forEach(validator => {
|
|
115
|
+
try {
|
|
116
|
+
const errors = validator.validate(completed);
|
|
117
|
+
errors.forEach(error => {
|
|
118
|
+
result.addError(error);
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
catch (e) {
|
|
122
|
+
this.handleError(e, completed.getLine(), result, "VALIDATION_ERROR", "UNKNOWN_VALIDATION_ERROR");
|
|
123
|
+
}
|
|
124
|
+
});
|
|
125
|
+
if (stack.length === 0) {
|
|
126
|
+
documents.push(completed);
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
stack[stack.length - 1].addChild(completed);
|
|
130
|
+
}
|
|
131
|
+
// Pasamos a observers
|
|
132
|
+
this.observers.forEach(observer => {
|
|
133
|
+
observer.onFinish(completed);
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
removeUTF8BOM(content) {
|
|
138
|
+
return content.charCodeAt(0) === 0xfeff ? content.slice(1) : content;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
exports.Parser = Parser;
|
|
142
|
+
//# 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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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export declare class StringUtils {
|
|
2
|
+
private constructor();
|
|
3
|
+
static rightTrim(s: string | null | undefined): string;
|
|
4
|
+
static cleanSpaces(input: string): string;
|
|
5
|
+
static lowerCase(input: string | null | undefined): string;
|
|
6
|
+
static compactSpaces(s: string | null | undefined): string;
|
|
7
|
+
static normalize(input: string | null | undefined): string;
|
|
8
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.StringUtils = void 0;
|
|
4
|
+
class StringUtils {
|
|
5
|
+
constructor() {
|
|
6
|
+
}
|
|
7
|
+
// Usado para nodos name>>
|
|
8
|
+
static rightTrim(s) {
|
|
9
|
+
const value = s ?? "";
|
|
10
|
+
let i = value.length - 1;
|
|
11
|
+
while (i >= 0 && /\s/.test(value.charAt(i))) {
|
|
12
|
+
i--;
|
|
13
|
+
}
|
|
14
|
+
return value.substring(0, i + 1);
|
|
15
|
+
}
|
|
16
|
+
// Usado para nodos tipo Base64 y Hex
|
|
17
|
+
static cleanSpaces(input) {
|
|
18
|
+
return input.replace(/\s+/g, "");
|
|
19
|
+
}
|
|
20
|
+
// Usado para normalizar namespace
|
|
21
|
+
static lowerCase(input) {
|
|
22
|
+
// Equivalente práctico a Locale.ROOT en JS: evitar dependencias de locale del usuario
|
|
23
|
+
return (input ?? "").toLowerCase();
|
|
24
|
+
}
|
|
25
|
+
// Usados para name de los nodos
|
|
26
|
+
static compactSpaces(s) {
|
|
27
|
+
return (s ?? "").trim().replace(/\s+/g, " ");
|
|
28
|
+
}
|
|
29
|
+
// Usados para name normalizado de nodos (STXT-SPEC 4.3): NFC + minúsculas,
|
|
30
|
+
// conservando diacríticos y alfabetos no latinos (modelo IDN)
|
|
31
|
+
static normalize(input) {
|
|
32
|
+
let s = (input ?? "").trim();
|
|
33
|
+
if (s.length === 0) {
|
|
34
|
+
return "";
|
|
35
|
+
}
|
|
36
|
+
s = s.normalize("NFC");
|
|
37
|
+
s = s.toLowerCase();
|
|
38
|
+
// toda secuencia de separadores ('-', '_', espacios) => un solo '-'
|
|
39
|
+
s = s.replace(/[-_\s]+/g, "-");
|
|
40
|
+
// trim de '-'
|
|
41
|
+
s = s.replace(/^-+|-+$/g, "");
|
|
42
|
+
return s;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
exports.StringUtils = StringUtils;
|
|
46
|
+
//# sourceMappingURL=StringUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StringUtils.js","sourceRoot":"","sources":["../../src/core/StringUtils.ts"],"names":[],"mappings":";;;AAAA,MAAa,WAAW;IACvB;IACA,CAAC;IAED,0BAA0B;IAC1B,MAAM,CAAC,SAAS,CAAC,CAA4B;QAC5C,MAAM,KAAK,GAAG,CAAC,IAAI,EAAE,CAAC;QACtB,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;QACzB,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7C,CAAC,EAAE,CAAC;QACL,CAAC;QACD,OAAO,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAClC,CAAC;IAED,qCAAqC;IACrC,MAAM,CAAC,WAAW,CAAC,KAAa;QAC/B,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAClC,CAAC;IAED,kCAAkC;IAClC,MAAM,CAAC,SAAS,CAAC,KAAgC;QAChD,sFAAsF;QACtF,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IACpC,CAAC;IAED,gCAAgC;IAChC,MAAM,CAAC,aAAa,CAAC,CAA4B;QAChD,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC9C,CAAC;IAED,2EAA2E;IAC3E,8DAA8D;IAC9D,MAAM,CAAC,SAAS,CAAC,KAAgC;QAChD,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAC7B,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACpB,OAAO,EAAE,CAAC;QACX,CAAC;QAED,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;QAEpB,oEAAoE;QACpE,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;QAE/B,cAAc;QACd,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QAE9B,OAAO,CAAC,CAAC;IACV,CAAC;CACD;AAjDD,kCAiDC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ParseException = void 0;
|
|
4
|
+
class ParseException extends Error {
|
|
5
|
+
constructor(line, code, message) {
|
|
6
|
+
super(message);
|
|
7
|
+
this.name = "ParseException";
|
|
8
|
+
this.line = line;
|
|
9
|
+
this.code = code;
|
|
10
|
+
Object.setPrototypeOf(this, ParseException.prototype);
|
|
11
|
+
}
|
|
12
|
+
toString() {
|
|
13
|
+
return `${this.name} [line=${this.line}, code=${this.code}]: ${this.message}`;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
exports.ParseException = ParseException;
|
|
17
|
+
//# sourceMappingURL=ParseException.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ParseException.js","sourceRoot":"","sources":["../../src/exceptions/ParseException.ts"],"names":[],"mappings":";;;AAAA,MAAa,cAAe,SAAQ,KAAK;IAIxC,YAAY,IAAY,EAAE,IAAY,EAAE,OAAe;QACtD,KAAK,CAAC,OAAO,CAAC,CAAC;QAEf,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;QAC7B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QAEjB,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,cAAc,CAAC,SAAS,CAAC,CAAC;IACvD,CAAC;IAED,QAAQ;QACP,OAAO,GAAG,IAAI,CAAC,IAAI,UAAU,IAAI,CAAC,IAAI,UAAU,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;IAC/E,CAAC;CACD;AAjBD,wCAiBC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RuntimeException = void 0;
|
|
4
|
+
class RuntimeException extends Error {
|
|
5
|
+
constructor(code, message) {
|
|
6
|
+
super(message);
|
|
7
|
+
this.name = "RuntimeException";
|
|
8
|
+
this.code = code;
|
|
9
|
+
Object.setPrototypeOf(this, RuntimeException.prototype);
|
|
10
|
+
}
|
|
11
|
+
getCode() {
|
|
12
|
+
return this.code;
|
|
13
|
+
}
|
|
14
|
+
toString() {
|
|
15
|
+
const message = this.message;
|
|
16
|
+
return `${this.name}[${this.code}]${message ? `: ${message}` : ""}`;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
exports.RuntimeException = RuntimeException;
|
|
20
|
+
//# sourceMappingURL=RuntimeException.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RuntimeException.js","sourceRoot":"","sources":["../../src/exceptions/RuntimeException.ts"],"names":[],"mappings":";;;AAAA,MAAa,gBAAiB,SAAQ,KAAK;IAG1C,YAAY,IAAY,EAAE,OAAe;QACxC,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;QAC/B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QAEjB,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,gBAAgB,CAAC,SAAS,CAAC,CAAC;IACzD,CAAC;IAED,OAAO;QACN,OAAO,IAAI,CAAC,IAAI,CAAC;IAClB,CAAC;IAED,QAAQ;QACP,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC7B,OAAO,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IACrE,CAAC;CACD;AAnBD,4CAmBC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ValidationException = void 0;
|
|
4
|
+
const ParseException_1 = require("./ParseException");
|
|
5
|
+
class ValidationException extends ParseException_1.ParseException {
|
|
6
|
+
constructor(line, code, message) {
|
|
7
|
+
super(line, code, message);
|
|
8
|
+
this.name = "ValidationException";
|
|
9
|
+
Object.setPrototypeOf(this, ValidationException.prototype);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
exports.ValidationException = ValidationException;
|
|
13
|
+
//# sourceMappingURL=ValidationException.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ValidationException.js","sourceRoot":"","sources":["../../src/exceptions/ValidationException.ts"],"names":[],"mappings":";;;AAAA,qDAAkD;AAElD,MAAa,mBAAoB,SAAQ,+BAAc;IACnD,YAAY,IAAY,EAAE,IAAY,EAAE,OAAe;QACnD,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QAC3B,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;QAElC,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,mBAAmB,CAAC,SAAS,CAAC,CAAC;IAC/D,CAAC;CACJ;AAPD,kDAOC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Line } from "../core/Line";
|
|
2
|
+
import { Node } from "../core/Node";
|
|
3
|
+
export interface Observer {
|
|
4
|
+
onCreate(node: Node, line: string): void;
|
|
5
|
+
onFinish(node: Node): void;
|
|
6
|
+
onComment(lineNumber: number, line: string): void;
|
|
7
|
+
onTextLine(node: Node, lineNumber: number, lineString: string, line: Line): void;
|
|
8
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Observer.js","sourceRoot":"","sources":["../../src/processors/Observer.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Validator.js","sourceRoot":"","sources":["../../src/processors/Validator.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Node } from "../core/Node";
|
|
2
|
+
import { Validator } from "../processors/Validator";
|
|
3
|
+
import { SchemaValidator } from "../schema/SchemaValidator";
|
|
4
|
+
import { ValidationException } from "../exceptions/ValidationException";
|
|
5
|
+
export declare class ConditionalValidator implements Validator {
|
|
6
|
+
private readonly schemaValidator;
|
|
7
|
+
constructor(schemaValidator: SchemaValidator);
|
|
8
|
+
validate(node: Node): ValidationException[];
|
|
9
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ConditionalValidator = void 0;
|
|
4
|
+
// Wrapper del validador que solo valida nodos con namespace
|
|
5
|
+
class ConditionalValidator {
|
|
6
|
+
constructor(schemaValidator) {
|
|
7
|
+
this.schemaValidator = schemaValidator;
|
|
8
|
+
}
|
|
9
|
+
validate(node) {
|
|
10
|
+
// Solo validar si tiene namespace
|
|
11
|
+
if (node.getNamespace() !== "") {
|
|
12
|
+
return this.schemaValidator.validate(node);
|
|
13
|
+
}
|
|
14
|
+
return [];
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
exports.ConditionalValidator = ConditionalValidator;
|
|
18
|
+
//# sourceMappingURL=ConditionalValidator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConditionalValidator.js","sourceRoot":"","sources":["../../src/runtime/ConditionalValidator.ts"],"names":[],"mappings":";;;AAKA,4DAA4D;AAC5D,MAAa,oBAAoB;IAG7B,YAAY,eAAgC;QACxC,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;IAC3C,CAAC;IAED,QAAQ,CAAC,IAAU;QACf,kCAAkC;QAClC,IAAI,IAAI,CAAC,YAAY,EAAE,KAAK,EAAE,EAAE,CAAC;YAC7B,OAAO,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC/C,CAAC;QACD,OAAO,EAAE,CAAC;IACd,CAAC;CACJ;AAdD,oDAcC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Node } from "../core/Node";
|
|
2
|
+
export declare enum IndentStyle {
|
|
3
|
+
TABS = "TABS",
|
|
4
|
+
SPACES_4 = "SPACES_4"
|
|
5
|
+
}
|
|
6
|
+
export declare class NodeWriter {
|
|
7
|
+
private constructor();
|
|
8
|
+
static toSTXT(node: Node, style?: IndentStyle): string;
|
|
9
|
+
static toSTXTDocs(docs: ReadonlyArray<Node>, style?: IndentStyle): string;
|
|
10
|
+
private static writeNode;
|
|
11
|
+
private static indent;
|
|
12
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.NodeWriter = exports.IndentStyle = void 0;
|
|
4
|
+
var IndentStyle;
|
|
5
|
+
(function (IndentStyle) {
|
|
6
|
+
IndentStyle["TABS"] = "TABS";
|
|
7
|
+
IndentStyle["SPACES_4"] = "SPACES_4";
|
|
8
|
+
})(IndentStyle || (exports.IndentStyle = IndentStyle = {}));
|
|
9
|
+
class NodeWriter {
|
|
10
|
+
constructor() { }
|
|
11
|
+
static toSTXT(node, style = IndentStyle.TABS) {
|
|
12
|
+
const out = [];
|
|
13
|
+
NodeWriter.writeNode(out, node, 0, style, "");
|
|
14
|
+
return out.join("");
|
|
15
|
+
}
|
|
16
|
+
static toSTXTDocs(docs, style = IndentStyle.TABS) {
|
|
17
|
+
const out = [];
|
|
18
|
+
for (let i = 0; i < docs.length; i++) {
|
|
19
|
+
if (i > 0) {
|
|
20
|
+
out.push("\n");
|
|
21
|
+
}
|
|
22
|
+
NodeWriter.writeNode(out, docs[i], 0, style, "");
|
|
23
|
+
}
|
|
24
|
+
return out.join("");
|
|
25
|
+
}
|
|
26
|
+
static writeNode(out, n, depth, style, parentNs) {
|
|
27
|
+
NodeWriter.indent(out, depth, style);
|
|
28
|
+
const ns = n.getNamespace();
|
|
29
|
+
out.push(n.getName());
|
|
30
|
+
if (ns.length > 0 && ns !== parentNs) {
|
|
31
|
+
out.push(" (", ns, ")");
|
|
32
|
+
}
|
|
33
|
+
if (n.isTextNode()) {
|
|
34
|
+
out.push(" >>\n");
|
|
35
|
+
for (const line of n.getTextLines()) {
|
|
36
|
+
NodeWriter.indent(out, depth + 1, style);
|
|
37
|
+
out.push(line, "\n");
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
out.push(":");
|
|
42
|
+
const value = n.getValue();
|
|
43
|
+
if (value.length > 0) {
|
|
44
|
+
out.push(" ", value);
|
|
45
|
+
}
|
|
46
|
+
out.push("\n");
|
|
47
|
+
}
|
|
48
|
+
for (const child of n.getChildren()) {
|
|
49
|
+
NodeWriter.writeNode(out, child, depth + 1, style, ns);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
static indent(out, depth, style) {
|
|
53
|
+
if (depth > 0) {
|
|
54
|
+
out.push(style === IndentStyle.SPACES_4 ? " ".repeat(depth) : "\t".repeat(depth));
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
exports.NodeWriter = NodeWriter;
|
|
59
|
+
//# sourceMappingURL=NodeWriter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NodeWriter.js","sourceRoot":"","sources":["../../src/runtime/NodeWriter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { Schema } from "../schema/Schema";
|
|
2
|
+
import { SchemaProvider } from "../schema/SchemaProvider";
|
|
3
|
+
/**
|
|
4
|
+
* Provider unificado que maneja tanto schemas como templates.
|
|
5
|
+
* Detecta automáticamente el tipo según el namespace del nodo raíz:
|
|
6
|
+
* - @stxt.template => procesa como template
|
|
7
|
+
* - @stxt.schema => procesa como schema
|
|
8
|
+
* - otros => no hace nada
|
|
9
|
+
*/
|
|
10
|
+
export declare class UnifiedSchemaProvider implements SchemaProvider {
|
|
11
|
+
private readonly schemas;
|
|
12
|
+
private readonly schemaMeta;
|
|
13
|
+
private readonly templateMeta;
|
|
14
|
+
constructor();
|
|
15
|
+
getSchema(namespace: string): Schema | undefined | null;
|
|
16
|
+
addFile(text: string): void;
|
|
17
|
+
private addTemplateNode;
|
|
18
|
+
private addSchemaNode;
|
|
19
|
+
private static throwIfInvalid;
|
|
20
|
+
clear(): void;
|
|
21
|
+
getAllSchemas(): ReadonlyArray<Schema>;
|
|
22
|
+
}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.UnifiedSchemaProvider = void 0;
|
|
4
|
+
const Parser_1 = require("../core/Parser");
|
|
5
|
+
const StringUtils_1 = require("../core/StringUtils");
|
|
6
|
+
const SchemaProviderMeta_1 = require("../schema/SchemaProviderMeta");
|
|
7
|
+
const SchemaParser_1 = require("../schema/SchemaParser");
|
|
8
|
+
const SchemaValidator_1 = require("../schema/SchemaValidator");
|
|
9
|
+
const MetaTemplateSchemaProvider_1 = require("../template/MetaTemplateSchemaProvider");
|
|
10
|
+
const TemplateParser_1 = require("../template/TemplateParser");
|
|
11
|
+
/**
|
|
12
|
+
* Provider unificado que maneja tanto schemas como templates.
|
|
13
|
+
* Detecta automáticamente el tipo según el namespace del nodo raíz:
|
|
14
|
+
* - @stxt.template => procesa como template
|
|
15
|
+
* - @stxt.schema => procesa como schema
|
|
16
|
+
* - otros => no hace nada
|
|
17
|
+
*/
|
|
18
|
+
class UnifiedSchemaProvider {
|
|
19
|
+
constructor() {
|
|
20
|
+
this.schemas = new Map();
|
|
21
|
+
this.schemaMeta = new SchemaProviderMeta_1.SchemaProviderMeta();
|
|
22
|
+
this.templateMeta = new MetaTemplateSchemaProvider_1.MetaTemplateSchemaProvider();
|
|
23
|
+
}
|
|
24
|
+
getSchema(namespace) {
|
|
25
|
+
const key = StringUtils_1.StringUtils.lowerCase(namespace);
|
|
26
|
+
if (namespace === "@stxt.template") {
|
|
27
|
+
return this.templateMeta.getSchema(key);
|
|
28
|
+
}
|
|
29
|
+
else if (namespace === "@stxt.schema") {
|
|
30
|
+
return this.schemaMeta.getSchema(key);
|
|
31
|
+
}
|
|
32
|
+
let result = this.schemas.get(key);
|
|
33
|
+
return result;
|
|
34
|
+
}
|
|
35
|
+
addFile(text) {
|
|
36
|
+
const parser = new Parser_1.Parser();
|
|
37
|
+
const nodes = parser.parse(text);
|
|
38
|
+
for (const node of nodes) {
|
|
39
|
+
const namespace = node.getNamespace();
|
|
40
|
+
if (namespace === "@stxt.template") {
|
|
41
|
+
this.addTemplateNode(node);
|
|
42
|
+
}
|
|
43
|
+
else if (namespace === "@stxt.schema") {
|
|
44
|
+
this.addSchemaNode(node);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
addTemplateNode(node) {
|
|
49
|
+
// Validar contra el meta-schema de templates
|
|
50
|
+
const schemaValidator = new SchemaValidator_1.SchemaValidator(this.templateMeta, true);
|
|
51
|
+
UnifiedSchemaProvider.throwIfInvalid(schemaValidator.validate(node));
|
|
52
|
+
// Transformar el template a schema
|
|
53
|
+
const schema = (0, TemplateParser_1.transformTemplateNodeToSchema)(node);
|
|
54
|
+
const key = StringUtils_1.StringUtils.lowerCase(schema.getNamespace());
|
|
55
|
+
this.schemas.set(key, schema);
|
|
56
|
+
}
|
|
57
|
+
addSchemaNode(node) {
|
|
58
|
+
// Validar contra el meta-schema de schemas
|
|
59
|
+
const schemaValidator = new SchemaValidator_1.SchemaValidator(this.schemaMeta, true);
|
|
60
|
+
UnifiedSchemaProvider.throwIfInvalid(schemaValidator.validate(node));
|
|
61
|
+
// Transformar el nodo a schema
|
|
62
|
+
const schema = (0, SchemaParser_1.transformNodeToSchema)(node);
|
|
63
|
+
const key = StringUtils_1.StringUtils.lowerCase(schema.getNamespace());
|
|
64
|
+
this.schemas.set(key, schema);
|
|
65
|
+
}
|
|
66
|
+
// Un schema/template que no valida contra su meta-schema no debe cargarse
|
|
67
|
+
static throwIfInvalid(errors) {
|
|
68
|
+
if (errors.length > 0) {
|
|
69
|
+
throw errors[0];
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
clear() {
|
|
73
|
+
this.schemas.clear();
|
|
74
|
+
}
|
|
75
|
+
getAllSchemas() {
|
|
76
|
+
return Array.from(this.schemas.values());
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
exports.UnifiedSchemaProvider = UnifiedSchemaProvider;
|
|
80
|
+
//# sourceMappingURL=UnifiedSchemaProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UnifiedSchemaProvider.js","sourceRoot":"","sources":["../../src/runtime/UnifiedSchemaProvider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export declare class ChildDefinition {
|
|
2
|
+
private readonly normalizedName;
|
|
3
|
+
private readonly name;
|
|
4
|
+
private readonly namespace;
|
|
5
|
+
private readonly min;
|
|
6
|
+
private readonly max;
|
|
7
|
+
constructor(name: string, namespace: string | null | undefined, min: number | null, max: number | null, numLine: number);
|
|
8
|
+
getName(): string;
|
|
9
|
+
getNormalizedName(): string;
|
|
10
|
+
getNamespace(): string;
|
|
11
|
+
getMin(): number | null;
|
|
12
|
+
getMax(): number | null;
|
|
13
|
+
getQualifiedName(): string;
|
|
14
|
+
toJSON(): {
|
|
15
|
+
name: string;
|
|
16
|
+
normalizedName: string;
|
|
17
|
+
namespace: string;
|
|
18
|
+
min: number | null;
|
|
19
|
+
max: number | null;
|
|
20
|
+
};
|
|
21
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ChildDefinition = void 0;
|
|
4
|
+
const NamespaceValidator_1 = require("../core/NamespaceValidator");
|
|
5
|
+
const ValidationException_1 = require("../exceptions/ValidationException");
|
|
6
|
+
const StringUtils_1 = require("../core/StringUtils");
|
|
7
|
+
class ChildDefinition {
|
|
8
|
+
constructor(name, namespace, min, max, numLine) {
|
|
9
|
+
this.name = StringUtils_1.StringUtils.compactSpaces(name);
|
|
10
|
+
this.normalizedName = StringUtils_1.StringUtils.normalize(name);
|
|
11
|
+
this.namespace = StringUtils_1.StringUtils.lowerCase(namespace);
|
|
12
|
+
this.min = min;
|
|
13
|
+
this.max = max;
|
|
14
|
+
NamespaceValidator_1.NamespaceValidator.validateNamespaceFormat(this.namespace, numLine);
|
|
15
|
+
if (this.normalizedName.length === 0) {
|
|
16
|
+
throw new ValidationException_1.ValidationException(numLine, "INVALID_NODE_NAME", `Node name not valid: ${name}`);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
getName() {
|
|
20
|
+
return this.name;
|
|
21
|
+
}
|
|
22
|
+
getNormalizedName() {
|
|
23
|
+
return this.normalizedName;
|
|
24
|
+
}
|
|
25
|
+
getNamespace() {
|
|
26
|
+
return this.namespace;
|
|
27
|
+
}
|
|
28
|
+
getMin() {
|
|
29
|
+
return this.min;
|
|
30
|
+
}
|
|
31
|
+
getMax() {
|
|
32
|
+
return this.max;
|
|
33
|
+
}
|
|
34
|
+
getQualifiedName() {
|
|
35
|
+
return this.namespace.length === 0
|
|
36
|
+
? this.normalizedName
|
|
37
|
+
: `${this.namespace}:${this.normalizedName}`;
|
|
38
|
+
}
|
|
39
|
+
toJSON() {
|
|
40
|
+
return {
|
|
41
|
+
name: this.getName(),
|
|
42
|
+
normalizedName: this.getNormalizedName(),
|
|
43
|
+
namespace: this.getNamespace(),
|
|
44
|
+
min: this.getMin(),
|
|
45
|
+
max: this.getMax(),
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
exports.ChildDefinition = ChildDefinition;
|
|
50
|
+
//# sourceMappingURL=ChildDefinition.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChildDefinition.js","sourceRoot":"","sources":["../../src/schema/ChildDefinition.ts"],"names":[],"mappings":";;;AAAA,mEAAgE;AAChE,2EAAwE;AACxE,qDAAkD;AAElD,MAAa,eAAe;IAO3B,YAAY,IAAY,EAAE,SAAoC,EAAE,GAAkB,EAAE,GAAkB,EAAE,OAAe;QACtH,IAAI,CAAC,IAAI,GAAG,yBAAW,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,CAAC,cAAc,GAAG,yBAAW,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAClD,IAAI,CAAC,SAAS,GAAG,yBAAW,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAClD,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QAEf,uCAAkB,CAAC,uBAAuB,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAEpE,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtC,MAAM,IAAI,yCAAmB,CAAC,OAAO,EAAE,mBAAmB,EAAE,wBAAwB,IAAI,EAAE,CAAC,CAAC;QAC7F,CAAC;IACF,CAAC;IAED,OAAO;QACN,OAAO,IAAI,CAAC,IAAI,CAAC;IAClB,CAAC;IAED,iBAAiB;QAChB,OAAO,IAAI,CAAC,cAAc,CAAC;IAC5B,CAAC;IAED,YAAY;QACX,OAAO,IAAI,CAAC,SAAS,CAAC;IACvB,CAAC;IAED,MAAM;QACL,OAAO,IAAI,CAAC,GAAG,CAAC;IACjB,CAAC;IAED,MAAM;QACL,OAAO,IAAI,CAAC,GAAG,CAAC;IACjB,CAAC;IAED,gBAAgB;QACf,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC;YACjC,CAAC,CAAC,IAAI,CAAC,cAAc;YACrB,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;IAC/C,CAAC;IAED,MAAM;QACL,OAAO;YACN,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE;YACpB,cAAc,EAAE,IAAI,CAAC,iBAAiB,EAAE;YACxC,SAAS,EAAE,IAAI,CAAC,YAAY,EAAE;YAC9B,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE;YAClB,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE;SAClB,CAAC;IACH,CAAC;CAED;AAzDD,0CAyDC"}
|